public void GeschaeftspartnerSpeichernTest()
        {
            // arrange
            int anzahl;
            Geschaeftspartner neuerGP = new Geschaeftspartner()
                {
                    Eintrittsdatum = DateTime.Now,
                    EMail = "*****@*****.**",
                    Vorname = "Artur",
                    Nachname = "Pasternak",
                    Geburtstag = DateTime.Parse("21.06.1988"),
                    PLZ = "78554",
                    Ort = "Aldingen",
                    Strasse = "Im Eigenleh",
                    Hausnummer = "37",
                    Telefon = "",
                    Geschlecht = true,
                    Vorgesetzter = sut.GetGeschaeftspartner(2),
                };

            // act
            var result = sut.GeschaeftspartnerSpeichern(neuerGP);
            var gpAusRepo = sut.GetGeschaeftspartner(3);

            // assert
            Assert.IsTrue(result);
            Assert.AreEqual(2,sut.GetDirekteGeschaeftspartner(1).Count);
            Assert.IsNotNull(gpAusRepo);
            Assert.Greater(neuerGP.Id,0);
        }
        public void PLZisValid()
        {
            // arrange
            Geschaeftspartner geschaeftspartner = new Geschaeftspartner(){PLZ = "78554"};
            Regex re = new Regex(@"^(D-)?\d{5}$");

            // act

            // assert
            Assert.IsTrue(re.Match(geschaeftspartner.PLZ).Success);
        }
        public void NewInstanceOfGeschaeftspartner()
        {
            // arrange
            Geschaeftspartner gp = new Geschaeftspartner();

            // act

            // assert
            Assert.IsNotNull(gp,"Kein GP Object erstellt !");
            Assert.IsNotNull(gp.Partner, "Liste der GP´s nicht initialisiert !");
            Assert.IsNotNull(gp.Eintrittsdatum, "Kein Eintrittsdatum gesetzt !");
        }
        public GescheaftspartnerRepositoryFake()
        {
            angemeldeterUser = kristl;
            repo.Add(kristl);
            repo.Add(willi);
            repo.Add(artur);
            repo.Add(katha);
            repo.Add(bea);

            kristl.Partner.Add(willi);
            willi.Partner.AddRange(new List<Geschaeftspartner>(){{artur},{katha}});
            artur.Partner.Add(bea);
        }
        /// <summary>
        /// Gibt einen Wert zurueck ob der vorhande Geschaeftspartner
        /// aktualisiert wurde
        /// </summary>
        /// <param name="geschaeftspartner">Der vorhande und zu aktualisierende 
        /// Geschaeftspartner</param>
        /// <returns>true oder false</returns>
        public bool GeschaeftspartnerAktualisieren(Geschaeftspartner geschaeftspartner)
        {
            var command = new MySqlCommand("SELECT PersonId From Geschaeftspartner WHERE ID=@id", this.connection);
            command.Parameters.AddWithValue("@id", geschaeftspartner.Id);
            var id = command.ExecuteScalar();

            command = new MySqlCommand("UPDATE Person SET Vorname=@Vorname, Nachname=@Nachname, Geburtsdatum=@Geburtsdatum, GeschlechtID=@Geschlecht, Fax=@Fax, Telefon=@Telefon, Strasse=@Strasse, Hausnummer=@Hausnummer, PLZ=@PLZ, Ort=@Ort, `E-Mail`=@EMail, MobilNr=@MobilNr WHERE ID=@id", this.connection);
            command.Parameters.AddWithValue("@Vorname", geschaeftspartner.Vorname);
            command.Parameters.AddWithValue("@Nachname", geschaeftspartner.Nachname);
            command.Parameters.AddWithValue("@Geburtsdatum", geschaeftspartner.Geburtstag);
            command.Parameters.AddWithValue("@Geschlecht", geschaeftspartner.Geschlecht);
            command.Parameters.AddWithValue("@Fax", geschaeftspartner.Fax != "" ? geschaeftspartner.Fax : null);
            command.Parameters.AddWithValue("@Telefon", geschaeftspartner.Telefon != "" ? geschaeftspartner.Telefon : null);
            command.Parameters.AddWithValue("@Strasse", geschaeftspartner.Strasse != "" ? geschaeftspartner.Strasse : null);
            command.Parameters.AddWithValue("@PLZ", geschaeftspartner.PLZ != "" ? geschaeftspartner.PLZ : null);
            command.Parameters.AddWithValue("@Ort", geschaeftspartner.Ort != "" ? geschaeftspartner.Ort : null);
            command.Parameters.AddWithValue("@EMail", geschaeftspartner.EMail != "" ? geschaeftspartner.EMail : null);
            command.Parameters.AddWithValue("@Hausnummer", geschaeftspartner.Hausnummer);
            command.Parameters.AddWithValue("@id", Convert.ToInt32(id));
            command.Parameters.AddWithValue("@MobilNr", geschaeftspartner.MobilNr);

            try
            {
                command.ExecuteNonQuery();
            }
            catch (Exception exception)
            {
                return false;
            }

            command = new MySqlCommand("UPDATE Geschaeftspartner SET Eintrittsdatum=@Eintrittsdatum, PersonalNr=@psnr WHERE ID=@id", this.connection);
            command.Parameters.AddWithValue("@id", geschaeftspartner.Id);
            command.Parameters.AddWithValue("@Eintrittsdatum", geschaeftspartner.Eintrittsdatum);
            command.Parameters.AddWithValue("@psnr", geschaeftspartner.MitarbeiterNummer);

            try
            {
                command.ExecuteNonQuery();
            }
            catch (Exception exception)
            {
                return false;
            }

            return true;
        }
        public ActionResult Create(Geschaeftspartner neuerGps)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    this.geschaeftspartnerService.GeschaeftspartnerSpeichern(neuerGps);
                    return RedirectToAction("Index");
                }

                return this.View(neuerGps);
            }
            catch
            {
                ViewBag.ErrorMessage = "Es ist ein Fehler aufgetretten";
                return View(neuerGps);
            }
        }
        public void TestBOGuids()
        {
            Energiemenge em = new Energiemenge()
            {
                LokationsId      = "DE123456",
                LokationsTyp     = BO4E.ENUM.Lokationstyp.MaLo,
                Energieverbrauch = new List <Verbrauch>(),
                Guid             = Guid.NewGuid()
            };

            string emJson = JsonConvert.SerializeObject(em);

            Assert.AreEqual <Guid>(em.Guid.Value, JsonConvert.DeserializeObject <Energiemenge>(emJson).Guid.Value);

            Geschaeftspartner gp = new Geschaeftspartner()
            {
                Gewerbekennzeichnung = true,
                Guid = Guid.NewGuid()
            };

            string gpJson = JsonConvert.SerializeObject(gp);

            Assert.AreEqual <Guid>(gp.Guid.Value, JsonConvert.DeserializeObject <Geschaeftspartner>(gpJson).Guid.Value);
        }
        /// <summary>
        /// Gibt einen Wert zurueck ob der vorhande Geschaeftspartner
        /// aktualisiert wurde
        /// </summary>
        /// <param name="geschaeftspartner">Der vorhande und zu aktualisierende 
        /// Geschaeftspartner</param>
        /// <returns>true oder false</returns>
        public bool GeschaeftspartnerAktualisieren(Geschaeftspartner geschaeftspartner)
        {
            var zuAktualisierenderGeschaeftspartner = this.GetGeschaeftspartner(geschaeftspartner.Id);

            if (zuAktualisierenderGeschaeftspartner == null)
            {
                return false;
            }

            if (geschaeftspartner.Nachname != "")
            {
                zuAktualisierenderGeschaeftspartner.Nachname = geschaeftspartner.Nachname;
            }
            if (geschaeftspartner.Vorname != "")
            {
                zuAktualisierenderGeschaeftspartner.Vorname = geschaeftspartner.Vorname;
            }
            if (geschaeftspartner.Geburtstag != DateTime.MinValue)
            {
                zuAktualisierenderGeschaeftspartner.Geburtstag = geschaeftspartner.Geburtstag;
            }

            zuAktualisierenderGeschaeftspartner.Hausnummer = geschaeftspartner.Hausnummer;
            zuAktualisierenderGeschaeftspartner.Strasse = geschaeftspartner.Strasse;
            zuAktualisierenderGeschaeftspartner.PLZ = geschaeftspartner.PLZ;
            zuAktualisierenderGeschaeftspartner.EMail = geschaeftspartner.EMail;
            zuAktualisierenderGeschaeftspartner.Ort = geschaeftspartner.Ort;
            zuAktualisierenderGeschaeftspartner.Eintrittsdatum = zuAktualisierenderGeschaeftspartner.Eintrittsdatum;
            zuAktualisierenderGeschaeftspartner.Telefon = geschaeftspartner.Telefon;
            return true;
        }
        // todo: in eine Methode zusammenfassen
        private List<Geschaeftspartner> GetAlleGeschaeftspartner(Geschaeftspartner geschaeftspartner)
        {
            List<Geschaeftspartner> result = new List<Geschaeftspartner>();

            foreach (var partner in geschaeftspartner.Partner)
            {
                result.Add(partner);
                result.AddRange(this.GetAlleGeschaeftspartner(partner));
            }
            return result;
        }
        /// <summary>
        /// Gibt einen Wert zurueck ob der Geschaeftspartner 
        /// gespeichert wurde
        /// </summary>
        /// <param name="neuerGeschaeftspartner">Der zu speichernde Geschaefts-
        /// partner</param>
        /// <returns>true oder false</returns>
        public bool GeschaeftspartnerSpeichern(Geschaeftspartner neuerGeschaeftspartner)
        {
            var vorgesetzter = neuerGeschaeftspartner.Vorgesetzter;
            vorgesetzter.Partner.Add(neuerGeschaeftspartner);
            lock (repo)
            {
                neuerGeschaeftspartner.Id = this.repo.Max(gp => gp.Id) + 1;
                repo.Add(neuerGeschaeftspartner);
            }

            return true;
        }
        public ActionResult Edit(Geschaeftspartner geschaeftspartner)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    this.geschaeftspartnerService.GeschaeftspartnerAktualisieren(geschaeftspartner);
                    return RedirectToAction("Index");
                }
                return View(geschaeftspartner);

            }
            catch
            {
                ViewBag.ErroeMessage = "Es ist ein Fehler beim Speichern aufgetreten";
                return View(geschaeftspartner);
            }
        }
        /// <summary>
        /// Gibt den Geschaeftspartner zurueck
        /// </summary>
        /// <param name="id">Die Id des Geschaeftspartners</param>
        /// <returns>Einen Geschaeftspartner</returns>
        public Geschaeftspartner GetGeschaeftspartner(int id)
        {
            var command = new MySqlCommand("SELECT Eintrittsdatum, PersonId, PersonalNr FROM geschaeftspartner WHERE id=@id",this.connection);
            command.Parameters.AddWithValue("@id", id);

            var result = new Geschaeftspartner();
            int personId = 0;
            int vorgesetzterId = 0;

            var reader = command.ExecuteReader();

            try
            {
                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        result.Eintrittsdatum = reader.IsDBNull(reader.GetOrdinal("Eintrittsdatum")) != true ? reader.GetDateTime("Eintrittsdatum").Date : DateTime.MinValue;
                        result.Id = id;
                        personId = reader.GetInt32(1);
                        result.MitarbeiterNummer = reader.IsDBNull(reader.GetOrdinal("PersonalNr")) != true ? reader.GetString("PersonalNr") : "";
                    }
                }

                reader.Close();
            }
            catch (Exception exception)
            {
                reader.Dispose();
            }

            command = new MySqlCommand("SELECT * FROM person WHERE id=@id",this.connection);
            command.Parameters.AddWithValue("@id", personId);

            reader = command.ExecuteReader();

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    result.Vorname = reader.IsDBNull(reader.GetOrdinal("Vorname")) != true ? reader.GetString("Vorname") : "";
                    result.Nachname = reader.IsDBNull(reader.GetOrdinal("Nachname")) != true ? reader.GetString("Nachname") : "";
                    result.Geburtstag = reader.IsDBNull(reader.GetOrdinal("Geburtsdatum")) != true ? reader.GetDateTime("Geburtsdatum").Date : DateTime.MinValue;
                    result.Fax = reader.IsDBNull(reader.GetOrdinal("Fax")) != true ? reader.GetString("Fax") : "";
                    result.Telefon = reader.IsDBNull(reader.GetOrdinal("Telefon")) != true ? reader.GetString("Telefon") : "";
                    result.Strasse = reader.IsDBNull(reader.GetOrdinal("Strasse")) != true ? reader.GetString("Strasse") : "";
                    result.Hausnummer = reader.IsDBNull(reader.GetOrdinal("Hausnummer")) != true ? reader.GetString("Hausnummer") : "";
                    result.PLZ = reader.IsDBNull(reader.GetOrdinal("PLZ")) != true ? reader.GetString("PLZ") : "";
                    result.Ort = reader.IsDBNull(reader.GetOrdinal("Ort")) != true ? reader.GetString("Ort") : "";
                    result.EMail = reader.IsDBNull(reader.GetOrdinal("E-Mail")) != true ? reader.GetString("E-Mail") : "";
                    result.Geschlecht = reader.IsDBNull(reader.GetOrdinal("GeschlechtID")) != true
                                            ? reader.GetBoolean(reader.GetOrdinal("GeschlechtID"))
                                            : true;
                    result.MobilNr = reader.IsDBNull(reader.GetOrdinal("MobilNr")) != true
                                         ? reader.GetString("MobilNr")
                                         : "";
                }
            }

            reader.Close();
            reader.Dispose();

            return result;
        }
        /// <summary>
        /// Gibt einen Wert zurueck ob der Geschaeftspartner 
        /// gespeichert wurde
        /// </summary>
        /// <param name="neuerGeschaeftspartner">Der zu speichernde Geschaefts-
        /// partner</param>
        /// <returns>true oder false</returns>
        public bool GeschaeftspartnerSpeichern(Geschaeftspartner neuerGeschaeftspartner)
        {
            var command = new MySqlCommand("INSERT INTO person (Vorname, Nachname, Geburtsdatum, GeschlechtID, Fax, Telefon, Strasse, Hausnummer, PLZ, Ort, `E-Mail`, MobilNr) VALUES (@Vorname, @Nachname, @Geburtsdatum, @Geschlecht, @Fax, @Telefon, @Strasse, @Hausnummer, @PLZ, @Ort, @EMail, @MobilNr)", this.connection);
            command.Parameters.AddWithValue("@Vorname", neuerGeschaeftspartner.Vorname);
            command.Parameters.AddWithValue("@Nachname", neuerGeschaeftspartner.Nachname);
            command.Parameters.AddWithValue("@Geburtsdatum", neuerGeschaeftspartner.Geburtstag);
            command.Parameters.AddWithValue("@Geschlecht", neuerGeschaeftspartner.Geschlecht);
            command.Parameters.AddWithValue("@Fax", neuerGeschaeftspartner.Fax != "" ? neuerGeschaeftspartner.Fax : null);
            command.Parameters.AddWithValue("@Telefon", neuerGeschaeftspartner.Telefon != "" ? neuerGeschaeftspartner.Telefon : null);
            command.Parameters.AddWithValue("@Strasse", neuerGeschaeftspartner.Strasse != "" ? neuerGeschaeftspartner.Strasse : null);
            command.Parameters.AddWithValue("@PLZ", neuerGeschaeftspartner.PLZ != "" ? neuerGeschaeftspartner.PLZ : null);
            command.Parameters.AddWithValue("@Ort", neuerGeschaeftspartner.Ort != "" ? neuerGeschaeftspartner.Ort : null);
            command.Parameters.AddWithValue("@EMail", neuerGeschaeftspartner.EMail != "" ? neuerGeschaeftspartner.EMail : null);
            command.Parameters.AddWithValue("@Hausnummer", neuerGeschaeftspartner.Hausnummer);
            command.Parameters.AddWithValue("@MobilNr", neuerGeschaeftspartner.MobilNr);

            try
            {
                command.ExecuteNonQuery();
            }
            catch (Exception exception)
            {
                throw;
            }

            var personId = (int)command.LastInsertedId;
            command = new MySqlCommand("SELECT rgt FROM geschaeftspartner WHERE id=@id", this.connection);
            command.Parameters.AddWithValue(
                "@id", neuerGeschaeftspartner.Vorgesetzter != null ? neuerGeschaeftspartner.Vorgesetzter.Id : 1);

            var rgt = (int)command.ExecuteScalar();

            command = new MySqlCommand("UPDATE geschaeftspartner SET rgt=rgt+2 WHERE rgt >= @rgt;", this.connection);
            command.Parameters.AddWithValue("@rgt", rgt);
            Debug.WriteLine(command.ExecuteNonQuery());

            command = new MySqlCommand("UPDATE geschaeftspartner SET lft=lft+2 WHERE lft > @rgt;", this.connection);
            command.Parameters.AddWithValue("@rgt", rgt);
            Debug.WriteLine(command.ExecuteNonQuery());

            command = new MySqlCommand("INSERT INTO geschaeftspartner (Vorgesetzter,lft,rgt,PersonId,Eintrittsdatum, PersonalNr) VALUES (@vogesetzterId, @rgt, @lft, @PersonId, @Eintrittsdatum, @psnr);", this.connection);
            command.Parameters.AddWithValue("@rgt", rgt);
            command.Parameters.AddWithValue("@lft", rgt + 1);
            command.Parameters.AddWithValue("@vogesetzterId", neuerGeschaeftspartner.Vorgesetzter != null ? neuerGeschaeftspartner.Vorgesetzter.Id : 1);
            command.Parameters.AddWithValue("@PersonId", personId);
            command.Parameters.AddWithValue("@Eintrittsdatum", neuerGeschaeftspartner.Eintrittsdatum);
            command.Parameters.AddWithValue("@psnr", neuerGeschaeftspartner.MitarbeiterNummer != null ? neuerGeschaeftspartner.MitarbeiterNummer : null);
            Debug.WriteLine(command.ExecuteNonQuery());

            return true;
        }
 /// <summary>
 /// Gibt einen Wert zurueck ob der Geschaeftspartner 
 /// gespeichert wurde
 /// </summary>
 /// <param name="neuerGeschaeftspartner">Der zu speichernde Geschaefts-
 /// partner</param>
 /// <returns>true oder false</returns>
 public bool GeschaeftspartnerSpeichern(Geschaeftspartner neuerGeschaeftspartner)
 {
     return this.GeschaeftspartnerRepository.GeschaeftspartnerSpeichern(neuerGeschaeftspartner);
 }
 /// <summary>
 /// Gibt einen Wert zurueck ob der vorhande Geschaeftspartner
 /// aktualisiert wurde
 /// </summary>
 /// <param name="geschaeftspartner">Der vorhande und zu aktualisierende 
 /// Geschaeftspartner</param>
 /// <returns>true oder false</returns>
 public bool GeschaeftspartnerAktualisieren(Geschaeftspartner geschaeftspartner)
 {
     return this.GeschaeftspartnerRepository.GeschaeftspartnerAktualisieren(geschaeftspartner);
 }
 public void Save(Geschaeftspartner gp)
 {
     persistenceService.Save(gp);
 }