예제 #1
0
        /// <summary>
        /// Triggert Verandanfrage bei WaWi-Subsystem und gibt aus den zurückkommenden Lieferdaten das späteste zurück.
        /// </summary>
        /// <param name="angebot"></param>
        /// <returns>Das späteste Datum, das ein Posten (Produkt) hat bis es ausgeliefert werden kann, sprich im Lager vorätig ist.</returns>
        private DateTime VersandanfrageTriggern(Angebot angebot)
        {
            //Posten umwandeln um Versandanfrage damit zu stellen
            IDictionary <int, int> produktnr_Anzahl = new Dictionary <int, int>();

            foreach (Posten posten in angebot.Posten)
            {
                produktnr_Anzahl.Add(posten.ProduktId, posten.Menge);
            }

            //Versandanfrage machen
            IList <Produkt_LieferdatumTyp> produkt_LieferdatumList = this.VersandAnfrage(produktnr_Anzahl);

            //spätestes Lieferdatum finden
            DateTime spaetestesLieferdatum = DateTime.Today;

            foreach (Produkt_LieferdatumTyp produkt_Lieferdatum in produkt_LieferdatumList)
            {
                if (spaetestesLieferdatum < produkt_Lieferdatum.AusliferbarAb)
                {
                    spaetestesLieferdatum = produkt_Lieferdatum.AusliferbarAb;
                }
            }
            return(spaetestesLieferdatum);
        }
예제 #2
0
        internal Auftrag(Angebot angebot, string auftragId, DateTime beauftragtAm, DateTime letzterPostenLieferbar, bool istLieferbar = false)
        {
            this.AuftragId              = auftragId;
            this.Angebot                = angebot;
            this.BeauftragtAm           = beauftragtAm;
            this.LetzterPostenLieferbar = letzterPostenLieferbar;
            this.IstLieferbar           = istLieferbar;


            //Auftrag kann nicht abgeschlossen sein wenn er gerade erzeugt wurde
            IstAbgeschlossen = false;
        }
예제 #3
0
        internal void DeleteAngebot(Angebot angebot)
        {
            using (var session = sessionFactory.OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
#if DEBUG
                    Console.WriteLine("Löschen von: {0}", angebot);
#endif
                    session.Delete(angebot);
                    transaction.Commit();
                }
            }
        }
예제 #4
0
        internal void DeleteAuftrag(Angebot auftrag)
        {
            using (var session = sessionFactory.OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    session.Delete(auftrag);
                    transaction.Commit();
#if DEBUG
                    Console.WriteLine("Gelöscht: {0}", auftrag);
#endif
                }
            }
        }
예제 #5
0
        /// <summary>
        /// Erstellt einen Auftrag aus einem zuvor erstellten Angebot.
        /// </summary>
        /// <param name="angebotId"></param>
        /// <param name="beauftragtAm"></param>
        /// <returns></returns>
        internal Auftrag AuftragErstellen(string angebotId, DateTime beauftragtAm)
        {
            Angebot angebot = this.AngebotVerwalter.GetAngebot(angebotId);

            // Triggert von Verandanfrage bei WaWi-Subsystem und gibt aus den zurückkommenden Lieferdaten das späteste zurück.
            DateTime spaetestesLieferdatum = this.VersandanfrageTriggern(angebot);


            Auftrag auftrag = this.AuftragVerwalter.AuftragErstellen(angebot, GetNextIdForType <Auftrag>(), beauftragtAm, spaetestesLieferdatum);

            //informiere AuslieferungsKomponente und Rechnungskomponente und setzt auftrag.IstLieferbar = true
            //wenn alles heute lieferbar ist
            this.Auslieferung_RechnungTriggern(auftrag, spaetestesLieferdatum);

            return(auftrag);
        }
예제 #6
0
        /// <summary>
        /// Nutzbar wenn kein Angebot vorliegt, sondern direkt Beauftragt wird,
        /// Mehtode legt intern ein Proxy-Angebot an das vom Moment der Erstellung 14 Tage gültig ist
        /// </summary>
        /// <param name="kundennummer"></param>
        /// <param name="lieferadresse"></param>
        /// <param name="rechnungsadresse"></param>
        /// <param name="posten"></param>
        /// <param name="beauftragtAm"></param>
        /// <returns></returns>
        internal Auftrag AuftragErstellen(string kundennummer, AdressTyp lieferadresse, AdressTyp rechnungsadresse, IDictionary <ProduktTyp, int> posten, DateTime beauftragtAm)
        {
            //14 Tage auf die gegenwertige DateTime rechnen um das Proxy-Angebot für die Auftragsabwicklung valide zu hatlen
            DateTime gueltigBis = DateTime.Today.Add(new TimeSpan(14, 0, 0, 0));

            Angebot angebot = this.AngebotErstellen(kundennummer, lieferadresse, rechnungsadresse, posten, DateTime.Now, gueltigBis);

            // Triggert von Verandanfrage bei WaWi-Subsystem und gibt aus den zurückkommenden Lieferdaten das späteste zurück.
            DateTime spaetestesLieferdatum = this.VersandanfrageTriggern(angebot);

            Auftrag auftrag = this.AuftragVerwalter.AuftragErstellen(angebot, GetNextIdForType <Auftrag>(), beauftragtAm, spaetestesLieferdatum);

            //informiere AuslieferungsKomponente und Rechnungskomponente und setzt auftrag.IstLieferbar = true
            //wenn alles heute lieferbar ist
            this.Auslieferung_RechnungTriggern(auftrag, spaetestesLieferdatum);

            return(auftrag);
        }
예제 #7
0
        internal Angebot AngebotErstellen(string angebotId, string kundennummer, AdressTyp lieferadresse, AdressTyp rechnungsadresse, IDictionary <ProduktTyp, int> posten, DateTime gueltigAb, DateTime gueltigBis)
        {
            Angebot angebot = new Angebot(angebotId, kundennummer, lieferadresse, rechnungsadresse, posten, gueltigAb, gueltigBis);


            //persist the new angebot
            using (ISession session = sessionFactory.OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
#if DEBUG
                    Console.WriteLine("Speichern von: {0}", angebot);
#endif
                    session.Save(angebot);
                    transaction.Commit();
                }
            }
            return(angebot);
        }
예제 #8
0
        internal Auftrag AuftragErstellen(Angebot angebot, string auftragId, DateTime beauftragtAm, DateTime letzterPostenLieferbar, bool istLieferbar = false)
        {
            Auftrag auftrag = new Auftrag(angebot, auftragId, beauftragtAm, letzterPostenLieferbar, istLieferbar);

#if DEBUG
            Console.WriteLine("Speichern von: {0}", auftrag);
#endif

            //persist the new auftrag
            using (ISession session = sessionFactory.OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    session.Save(auftrag);
                    transaction.Commit();
                }
            }


            return(auftrag);
        }
예제 #9
0
 internal IList <PostenTyp> GetPosten()
 {
     return(Angebot.GibTransportObjekt().Posten);
 }