public void PayFrachtabrechnung(ref FrachtabrechnungDTO fabDTO)
        {
            Check.Argument(fabDTO != null, "fabDTO != null");
            Check.OperationCondition(!transactionService.IsTransactionActive, "Keine aktive Transaktion erlaubt.");

            Frachtabrechnung fab = fabDTO.ToEntity();
            int faufNr = fab.Frachtauftrag;
            unterbeauftragungService.SchliesseFrachtauftragAb(faufNr);
            Gutschrift gutschrift = new Gutschrift();
            fab.Gutschrift = gutschrift;
            GutschriftDTO gutschriftDTO = gutschrift.ToDTO();
            bankService.SendeGutschriftAnBank(gutschriftDTO);
            transactionService.ExecuteTransactional(
                 () =>
                 {
                     this.bh_REPO.Save(fab);
                 });
        }
        public void TestErstelleSendungsanfrageUndOrdneRechungenZuSuccess()
        {
            Adresse kundenadresse = new Adresse() { Strasse = "ABC-Strasse", Hausnummer = "123", Land = "Nimmerland", PLZ = "4567", Wohnort = "hinterm Baum" };
            IList<AdresseDTO> adressen = new List<AdresseDTO>();
            adressen.Add(kundenadresse.ToDTO());
            GeschaeftspartnerDTO gpDTO = new GeschaeftspartnerDTO()
            {
                Adressen = adressen,
                Email = new EMailType("*****@*****.**"),
                Vorname = "Hans",
                Nachname = "Peter",
            };
            geschaeftspartnerServices.CreateGeschaeftspartner(ref gpDTO);
            SendungsanfrageDTO saDTO = new SendungsanfrageDTO();
            SendungspositionDTO sp1 = new SendungspositionDTO();
            saDTO.Sendungspositionen.Add(sp1);
            saDTO.AbholzeitfensterStart = DateTime.Parse("01.09.2013");
            saDTO.AbholzeitfensterEnde = DateTime.Parse("10.09.2013");
            saDTO.AngebotGültigBis = DateTime.Now.AddHours(1);
            saDTO.StartLokation = hamburgLokation.LokNr;
            saDTO.ZielLokation = shanghaiLokation.LokNr;
            saDTO.Auftraggeber = 1;

            auftragsServices.CreateSendungsanfrage(ref saDTO);
            auftragsServices.PlaneSendungsanfrage(saDTO.SaNr);
            List<TransportplanDTO> pläne = transportplanungsServices.FindTransportplaeneZuSendungsanfrage(saDTO.SaNr);
            Assert.IsTrue(pläne.Count >= 1);

            TransportplanDTO planÜberBhv = pläne.Find((plan) =>
            {
                return plan.TransportplanSchritte.ToList().Find((tps) =>
                {
                    TransportAktivitaetDTO ta = tps as TransportAktivitaetDTO;
                    if (ta != null)
                    {
                        return ta.FuerTransportAufTransportbeziehung == hh_bhv.TbNr;
                    }
                    else
                    {
                        return false;
                    }
                }) != null; 
            });
            Assert.IsTrue(planÜberBhv != null);

            Assert.IsTrue(planÜberBhv.TransportplanSchritte.Count == 2);
            pläne = transportplanungsServices.FindTransportplaeneZuSendungsanfrage(saDTO.SaNr);
            Assert.IsTrue(pläne.Count == 1);
            Assert.IsTrue(pläne[0].TpNr == planÜberBhv.TpNr);

            foreach (TransportplanDTO tpDTO in pläne)
            {
                Sendungsanfrage sa = auftragsServices.FindSendungsanfrage(tpDTO.SaNr).ToEntity();
                auftragsServices.NimmAngebotAn(sa.SaNr);
                sendungServices.ErstelleSendung(tpDTO.TpNr, saDTO.SaNr);
            }

            FrachtabrechnungDTO fab1DTO = new FrachtabrechnungDTO { Frachtauftrag = 1, IstBestaetigt = true };
            buchhaltungServices.PayFrachtabrechnung(ref fab1DTO);
            FrachtabrechnungDTO fab2DTO = new FrachtabrechnungDTO { Frachtauftrag = 2, IstBestaetigt = true };
            buchhaltungServices.PayFrachtabrechnung(ref fab2DTO);

            buchhaltungServiceFuerSendung.ErstelleKundenrechnung(1, 1);

            var tokenSource = new CancellationTokenSource();
            var token = tokenSource.Token;

            var t = Task.Factory.StartNew(
                () =>
                {
                    bankAdapter.EmpfangeZahlungseingaengenAusQueue();
                    token.ThrowIfCancellationRequested();
                },
                token);

            Thread.Sleep(10000);
            bankAdapter.EmpfangeZahlungseingaenge(false);
            Thread.Sleep(5000);

            tokenSource.Cancel();
        }
 public void DeleteFrachtabrechnung(ref FrachtabrechnungDTO fabDTO)
 {
     Frachtabrechnung fab = fabDTO.ToEntity();
     transactionService.ExecuteTransactional(
         () =>
         {
             this.bh_REPO.DeleteFrachtabrechnung(fab);
         });
 }