/// <summary>
 /// Ermittelt einen Ansprechpartner zu einer Adresse über den Namen und Vornamen
 /// </summary>
 /// <param name="adresse"></param>
 /// <param name="nachname"></param>
 /// <param name="vorname"></param>
 /// <returns></returns>
 public AnsprechpartnerItem CreateOrGetAnsprechpartner(int adresse, string nachname, string vorname, string email)
 {
     try
     {
         if (SeminarData.AnsprechpartnerExists(Mandant, adresse, email))
         {
             var ansprechpartner = SeminarData.GetAnsprechpartner(Mandant, adresse, email);
             ansprechpartner.Nachname = nachname;
             ansprechpartner.Vorname  = vorname;
             return(SeminarData.UpdateAnsprechpartner(Mandant, ansprechpartner));
         }
         else
         {
             var ansprechpartner = new AnsprechpartnerItem();
             ansprechpartner.Adresse         = adresse;
             ansprechpartner.Nachname        = nachname;
             ansprechpartner.Vorname         = vorname;
             ansprechpartner.EMail           = email;
             ansprechpartner.Ansprechpartner = $"{vorname} {nachname}";
             return(SeminarData.UpdateAnsprechpartner(Mandant, ansprechpartner));
         }
     }
     catch (Exception ex)
     {
         TraceLog.LogException(ex);
         throw;
     }
 }
        public void Test_SeminarData_CreateSeminarbuchung_Load_Delete()
        {
            var buchung = new Seminarbuchung()
            {
                Adresse = 10,
                AnsprechpartnerEmail    = "*****@*****.**",
                AnsprechpartnerNachname = "Test",
                Ansprechpartnernummer   = 1,
                AnsprechpartnerVorname  = "Vorname",
                BelID     = 0,
                BelPosID  = 0,
                BuchungID = 0,
                EmailBestaetigungGesendet = false,
                Konto           = "D100000",
                KontoMatchcode  = "Testkunde",
                Mandant         = _mandant.Id,
                SeminarterminID = "S100001",
                VorPosID        = 0
            };

            var saveBuchung = SeminarData.UpdateOrInsertSeminarbuchung(_mandant, buchung);

            Assert.IsTrue(saveBuchung.BuchungID != 0);

            var loadedBuchung = SeminarData.GetSeminarbuchung(_mandant, saveBuchung.BuchungID);

            Assert.IsTrue(saveBuchung.SeminarterminID == loadedBuchung.SeminarterminID);
            //Assert.AreEqual(loadedBuchung, saveBuchung);
            //Assert.areEquals(saveBuchung, loadedBuchung);

            SeminarData.DeleteSeminarbuchung(_mandant, saveBuchung.BuchungID);
            loadedBuchung = SeminarData.GetSeminarbuchung(_mandant, saveBuchung.BuchungID);
        }
        /// <summary>
        /// Prüft eine Seminarbuchung und sorgt für die notwendigen Plausibilitäten (z.B. Anlage Ansprechpartner etc.)
        /// </summary>
        /// <param name="seminarbuchung">Seminarbuchung</param>
        private void validateSeminarbuchung(Seminarbuchung seminarbuchung)
        {
            if (SeminarData.KontokorrentExists(Mandant, seminarbuchung.Konto, true))
            {
                var konto = SeminarData.GetKunde(Mandant, seminarbuchung.Konto);
                if (seminarbuchung.Adresse == 0)
                {
                    seminarbuchung.Adresse = konto.Adresse;
                }
                if (string.IsNullOrWhiteSpace(seminarbuchung.KontoMatchcode))
                {
                    seminarbuchung.KontoMatchcode = konto.Matchcode;
                }

                var ansprechpartner = this.CreateOrGetAnsprechpartner(seminarbuchung.Adresse, seminarbuchung.AnsprechpartnerNachname, seminarbuchung.AnsprechpartnerVorname, seminarbuchung.AnsprechpartnerEmail);
                seminarbuchung.Ansprechpartnernummer = ansprechpartner.Nummer;
                var seminartermin = this._seminarManager.GetSeminartermin(seminarbuchung.SeminarterminID);
                if (seminartermin.AnzahlTeilnehmer.GetValueOrDefault() >= seminartermin.AnzahlTeilnehmerMax)
                {
                    throw new BuchungValidationException(Properties.Resources.BuchungValidationSeminarterminSoldOut);
                }
            }
            else
            {
                throw new BuchungValidationException(Properties.Resources.BuchungValidationException);
            }
        }
        /// <summary>
        /// Führt eine Seminarbuchung durch bzw. aktualisiert diese
        /// </summary>
        /// <param name="seminarbuchung"></param>
        /// <returns></returns>
        public Seminarbuchung UpdateBuchung(Seminarbuchung seminarbuchung)
        {
            try
            {
                Seminarbuchung buchungUpdated;

                // Validierung des Objektes
                validateSeminarbuchung(seminarbuchung);
                buchungUpdated = SeminarData.UpdateOrInsertSeminarbuchung(Mandant, seminarbuchung);

                /// Aktualisierung erst, wenn Buchung erfolgreich committed
                SeminarData.UpdateSeminarterminTeilnehmer(Mandant, seminarbuchung.SeminarterminID);

                return(buchungUpdated);
            }
            catch (RecordUpdateException)
            {
                throw;
            }
            catch (Exception ex)
            {
                TraceLog.LogException(ex);
                throw ex;
            }
        }
        public void SeminarData_GetAnsprechpartner_ByNummer()
        {
            var result = SeminarData.GetAnsprechpartner(_mandant, 6);

            Assert.IsNotNull(result);
            Assert.IsTrue(result.Ansprechpartner.Contains("Arber"));
        }
        public void Test_SeminarData_AnsprechpartnerExists()
        {
            var test1 = SeminarData.AnsprechpartnerExists(_mandant, 43, "*****@*****.**");

            Assert.IsTrue(test1);

            var test2 = SeminarData.AnsprechpartnerExists(_mandant, 999, "*****@*****.**");

            Assert.IsFalse(test2);
        }
        public void Test_SeminarData_KontokorrentExists()
        {
            var test1 = SeminarData.KontokorrentExists(_mandant, "D100000", true);

            Assert.IsTrue(test1);

            var test2 = SeminarData.KontokorrentExists(_mandant, "Dieses kOnto gibt es nicht", true);

            Assert.IsFalse(test2);
        }
Exemplo n.º 8
0
 /// <summary>
 /// Listet alle aktiven Seminare mit Terminen auf
 /// </summary>
 /// <returns></returns>
 public List <Seminar> ListSeminare()
 {
     try
     {
         return(SeminarData.GetSeminare(Mandant));
     }
     catch (Exception ex)
     {
         TraceLog.LogException(ex);
         throw;
     }
 }
Exemplo n.º 9
0
 /// <summary>
 /// Gibt eine Liste von Ansprechpartner für eine Adresse zurück
 /// </summary>
 /// <param name="filter"></param>
 /// <returns></returns>
 public AnsprechpartnerSet GetAnsprechpartner(int adresse)
 {
     try
     {
         return(SeminarData.GetAnsprechpartnerList(Mandant, adresse));
     }
     catch (Exception ex)
     {
         TraceLog.LogException(ex);
         throw;
     }
 }
Exemplo n.º 10
0
 /// <summary>
 /// Gibt eine Liste von Kunden zurück
 /// </summary>
 /// <param name="filter">Filter für Matchcode</param>
 /// <returns></returns>
 public List <Kunde> GetKunden(string filter)
 {
     try
     {
         return(SeminarData.GetKunden(Mandant, filter));
     }
     catch (Exception ex)
     {
         TraceLog.LogException(ex);
         throw;
     }
 }
 /// <summary>
 /// Gibt alle Seminarbuchungen für eine Belegposition zurück
 /// </summary>
 /// <param name="belegHandle"></param>
 /// <param name="belegPositionHandle"></param>
 /// <returns></returns>
 public Seminarbuchungen GetBuchungen(int belegHandle, int belegPositionHandle)
 {
     try
     {
         return(SeminarData.GetSeminarbuchungen(Mandant, belegHandle, belegPositionHandle));
     }
     catch (Exception ex)
     {
         TraceLog.LogException(ex);
         throw;
     }
 }
 /// <summary>
 /// Löscht alle Seminarbuchungen zu einer BelegPosition
 /// </summary>
 /// <param name="belegHandle"></param>
 /// <param name="belegPositionHandle"></param>
 public void DeleteBuchungen(int belegHandle, int belegPositionHandle)
 {
     try
     {
         SeminarData.DeleteSeminarbuchungen(Mandant, belegHandle, belegPositionHandle);
     }
     catch (Exception ex)
     {
         TraceLog.LogException(ex);
         throw;
     }
 }
 /// <summary>
 /// Gibt alle Seminarbuchungen für eine Belegposition zurück
 /// </summary>
 /// <param name="vorPosHandle"></param>
 /// <returns></returns>
 public Seminarbuchungen GetBuchungen(int vorPosHandle)
 {
     try
     {
         return(SeminarData.GetSeminarbuchungen(Mandant, vorPosHandle));
     }
     catch (Exception ex)
     {
         TraceLog.LogException(ex);
         throw;
     }
 }
 /// <summary>
 /// Löscht eine Buchung
 /// </summary>
 /// <param name="BuchungID"></param>
 public void DeleteBuchung(int buchungID)
 {
     try
     {
         var seminarterminList = new List <string>();
         SeminarData.DeleteSeminarbuchung(Mandant, buchungID);
     }
     catch (Exception ex)
     {
         TraceLog.LogException(ex);
         throw;
     }
 }
 /// <summary>
 /// Gibt eine Seminarbuchung zurück
 /// </summary>
 /// <param name="buchungID"></param>
 /// <returns></returns>
 public Seminarbuchung GetBuchung(int buchungID)
 {
     try
     {
         return(SeminarData.GetSeminarbuchung(Mandant, buchungID));
     }
     catch (RecordNotFoundException)
     {
         throw;
     }
     catch (Exception ex)
     {
         TraceLog.LogException(ex);
         throw ex;
     }
 }
Exemplo n.º 16
0
 /// <summary>
 /// Listet ein Seminar inklusive Termine auf
 /// </summary>
 /// <param name="artikelnummer"></param>
 /// <exception cref="RecordNotFoundException">Wird ausgelöst, wenn keine Daten gefunden wurden.</exception>
 /// <returns></returns>
 public Seminar GetSeminar(string artikelnummer)
 {
     try
     {
         return(SeminarData.GetSeminar(Mandant, artikelnummer));
     }
     catch (RecordNotFoundException)
     {
         throw;
     }
     catch (Exception ex)
     {
         TraceLog.LogException(ex);
         throw;
     }
 }
Exemplo n.º 17
0
 /// <summary>
 /// Aktualisiert ein Seminar inklusive der Termine
 /// </summary>
 /// <param name="Seminar"></param>
 /// <returns></returns>
 public Seminar UpdateSeminar(Seminar seminar)
 {
     try
     {
         if (seminar == null)
         {
             throw new ArgumentNullException("Seminar");
         }
         return(SeminarData.UpdateSeminar(Mandant, seminar));
     }
     catch (Exception ex)
     {
         TraceLog.LogException(ex);
         throw;
     }
 }
 /// <summary>
 /// Gibt einen Ansprechpartner zurück
 /// </summary>
 /// <param name="ansprechpartnernummer"></param>
 /// <returns></returns>
 public AnsprechpartnerItem GetAnsprechpartner(int ansprechpartnernummer)
 {
     try
     {
         return(SeminarData.GetAnsprechpartner(Mandant, ansprechpartnernummer));
     }
     catch (RecordNotFoundException)
     {
         throw;
     }
     catch (Exception ex)
     {
         TraceLog.LogException(ex);
         throw;
     }
 }
Exemplo n.º 19
0
 /// <summary>
 /// Gibt einen Seminartermin zurück
 /// </summary>
 /// <param name="seminarterminID"></param>
 /// <exception cref="RecordNotFoundException">Wird ausgelöst, wenn keine Daten gefunden wurden.</exception>
 /// <returns></returns>
 public Seminartermin GetSeminartermin(string seminarterminID)
 {
     try
     {
         return(SeminarData.GetSeminartermin(Mandant, seminarterminID));
     }
     catch (RecordNotFoundException)
     {
         throw;
     }
     catch (Exception ex)
     {
         TraceLog.LogException(ex);
         throw;
     }
 }
        /// <summary>
        /// Aktualisiert einen Ansprechpartner
        /// </summary>
        /// <param name="ansprechpartner"></param>
        /// <returns></returns>
        public AnsprechpartnerItem UpdateAnsprechpartner(AnsprechpartnerItem ansprechpartner)
        {
            try
            {
                if (ansprechpartner.Adresse == 0)
                {
                    throw new Exception("Speicherung von Ansprechpartner ohne Adresse nicht möglich.");
                }

                return(SeminarData.UpdateAnsprechpartner(Mandant, ansprechpartner));
            }
            catch (Exception ex)
            {
                TraceLog.LogException(ex);
                throw;
            }
        }
        public void Test_SeminarData_GetSeminarbuchung_And_ExpectException()
        {
            var buchung = SeminarData.GetSeminarbuchung(_mandant, -1);

            Assert.IsNull(buchung);
        }
        /// <summary>
        /// Führt eine Seminarbuchung durch und legt den Warenwirtschaftsbeleg
        /// in der Office Line an.
        /// </summary>
        /// <param name="seminarbuchung"></param>
        /// <returns></returns>
        public Seminarbuchung CreateOrUpdateBuchungsbeleg(Seminarbuchung seminarbuchung)
        {
            try
            {
                if (seminarbuchung == null)
                {
                    throw new ArgumentNullException("Seminarbuchung");
                }
                var seminartermin = SeminarData.GetSeminartermin(Mandant, seminarbuchung.SeminarterminID);

                Mandant.MainDevice.GenericConnection.BeginTransaction();

                using (var beleg = new Sagede.OfficeLine.Wawi.BelegEngine.Beleg(Mandant, Erfassungsart.Verkauf))
                {
                    if (seminarbuchung.BuchungID == 0)
                    {
                        #region Neuanlage eines Beleges

                        if (!beleg.Initialize("VVA", DateTime.Today,
                                              (short)Mandant.PeriodenManager.Perioden.Date2Periode(DateTime.Now).Jahr))
                        {
                            throw new BuchungValidationException("Fehler bei Beleganlage. " + beleg.Errors.GetDescriptionSummary());
                        }

                        beleg.Bearbeiter = Mandant.Benutzer.Name;
                        if (seminartermin.Startdatum.HasValue)
                        {
                            beleg.Liefertermin = seminartermin.Startdatum.GetValueOrDefault();
                        }
                        else
                        {
                            beleg.Liefertermin = beleg.Belegdatum;
                        }

                        beleg.Matchcode = $"Seminarbuchung für Termin {seminartermin.SeminarterminID}";

                        if (!beleg.SetKonto(seminarbuchung.Konto, false))
                        {
                            throw new BuchungValidationException("Fehler bei Beleganlage [SetKonto]. " + beleg.Errors.GetDescriptionSummary());
                        }

                        var position = new BelegPosition(beleg);
                        if (!position.Initialize(Positionstyp.Artikel))
                        {
                            throw new BuchungValidationException("Fehler bei Beleganlage [InitializePosition]. " + beleg.Errors.GetDescriptionSummary());
                        }

                        if (!position.SetArtikel(seminartermin.Artikelnummer, 0))
                        {
                            throw new BuchungValidationException("Fehler bei Artikelanlage [SetArtikel]. " + beleg.Errors.GetDescriptionSummary());
                        }

                        position.Menge = 1;
                        position.RefreshBasismenge(true, 2);

                        //bei manuellen Preisen => IstEinzelpreisManuell
                        //position.Einzelpreis = 1000;
                        //position.IstEinzelpreisManuell = true;

                        position.Calculate();
                        beleg.Positionen.Add(position);
                        beleg.Renumber();
                        beleg.ReadStandardTexte(true);

                        if (!beleg.Validate(true))
                        {
                            throw new BuchungValidationException("Fehler bei Beleganlage [Validate]. " + beleg.Errors.GetDescriptionSummary());
                        }

                        // TODO: Transaktionsklammer
                        if (!beleg.Save(false))
                        {
                            throw new BuchungValidationException("Fehler bei Beleganlage [Save]. " + beleg.Errors.GetDescriptionSummary());
                        }

                        seminarbuchung.BelID          = beleg.Handle;
                        seminarbuchung.BelPosID       = position.Handle;
                        seminarbuchung.VorPosID       = position.VorgangspositionsHandle;
                        seminarbuchung.KontoMatchcode = beleg.A0Matchcode;
                        seminarbuchung.Adresse        = beleg.VKA0AdressNummer;
                        seminarbuchung = this.UpdateBuchung(seminarbuchung);

                        #endregion
                    }
                    else
                    {
                        throw new NotImplementedException("Aktualiserung Buchungsbeleg");
                    }
                }
                if (!Mandant.MainDevice.GenericConnection.PendingRollback)
                {
                    Mandant.MainDevice.GenericConnection.CommitTransaction();
                }
                else
                {
                    Mandant.MainDevice.GenericConnection.RollbackTransaction();
                }
                return(seminarbuchung);
            }
            catch (Exception ex)
            {
                Mandant.MainDevice.GenericConnection.RollbackTransaction();
                TraceLog.LogException(ex);
                throw;
            }
        }