public void FügeHinzu(Abrechnung abrechnung, ICollection <Produkt> produkte)
        {
            produkte = produkte.Except(abrechnung.Produkte).ToList();
            if (produkte.Count == 0)
            {
                return;
            }

            using (var transaktion = Kontext.Database.BeginOrReuseTransaction())
            {
                var verkaufsprodukte = produkte.Select(p => new Verkaufsprodukt()
                {
                    Produkt = p, Bestand = 0, Verkaufspreis = p.AktuellerVerkaufspreis
                }).ToList();
                Verbrauchsteuerung.NeueVerbrauche(abrechnung, verkaufsprodukte.SelectMany(p => abrechnung.Benutzer.Select(b => new Verbrauch()
                {
                    Benutzer = b, Verkaufsprodukt = p, AnzahlFlaschen = 0
                })).ToList());
                Verkaufsproduktsteuerung.NeueVerkaufsprodukte(abrechnung, verkaufsprodukte);

                BearbeiteAbrechnung(abrechnung);

                transaktion?.Commit();
            }
        }
        public void Entferne(Abrechnung abrechnung, Produkt produkt)
        {
            if (!KannEntferntWerden(abrechnung, produkt))
            {
                return;
            }

            Verbrauchsteuerung.LöscheVerbrauche(abrechnung.Verbrauche.Where(v => v.Verkaufsprodukt.Produkt == produkt).ToList());
            Verkaufsproduktsteuerung.LöscheVerkaufsprodukt(abrechnung.Verkaufsprodukte.Single(b => b.Produkt == produkt));
            BearbeiteAbrechnung(abrechnung);
        }
 public Datenbanksteuerung() : base(null)
 {
     kontext = null;
     abrechnungssteuerung       = new Abrechnungssteuerung(this);
     benutzersteuerung          = new Benutzersteuerung(this);
     einkaufsteuerung           = new Einkaufsteuerung(this);
     einkaufspositionssteuerung = new Einkaufspositionssteuerung(this);
     kastengrößensteuerung      = new Kastengrößensteuerung(this);
     kontosteuerung             = new Kontosteuerung(this);
     produktsteuerung           = new Produktsteuerung(this);
     überweisungssteuerung      = new Überweisungssteuerung(this);
     verbrauchsteuerung         = new Verbrauchsteuerung(this);
     verkaufsproduktsteuerung   = new Verkaufsproduktsteuerung(this);
     zahlungssteuerung          = new Zahlungssteuerung(this);
 }
        public void Entferne(Abrechnung abrechnung, ICollection <Produkt> produkte)
        {
            produkte = produkte.Except(BenötigteProdukte(abrechnung)).ToList();
            if (produkte.Count == 0)
            {
                return;
            }

            using (var transaktion = Kontext.Database.BeginOrReuseTransaction())
            {
                var hashProdukte = produkte.ToHashSet(); // höhöhöhöhöhö
                Verbrauchsteuerung.LöscheVerbrauche(abrechnung.Verbrauche.Where(v => hashProdukte.Contains(v.Verkaufsprodukt.Produkt)).ToList());
                Verkaufsproduktsteuerung.LöscheVerkaufsprodukte(abrechnung.Verkaufsprodukte.Where(b => hashProdukte.Contains(b.Produkt)).ToList());
                BearbeiteAbrechnung(abrechnung);

                transaktion?.Commit();
            }
        }
        public void FügeHinzu(Abrechnung abrechnung, Produkt produkt)
        {
            if (abrechnung.Produkte.Contains(produkt))
            {
                return;
            }

            var verkaufsprodukt = new Verkaufsprodukt()
            {
                Produkt = produkt, Bestand = 0, Verkaufspreis = produkt.AktuellerVerkaufspreis
            };

            Verbrauchsteuerung.NeueVerbrauche(abrechnung, abrechnung.Benutzer.Select(b => new Verbrauch()
            {
                Benutzer = b, Verkaufsprodukt = verkaufsprodukt, AnzahlFlaschen = 0
            }).ToList());
            Verkaufsproduktsteuerung.NeuesVerkaufsprodukt(abrechnung, verkaufsprodukt);
            BearbeiteAbrechnung(abrechnung);
        }