示例#1
0
        public void Verifiziere()
        {
            var produkte = Verkaufsprodukte.ToDictionary(vk => vk.Produkt);

            if (produkte.Count != Verkaufsprodukte.Count)
            {
                throw new InvalidOperationException("In dieser Abrechung kommen doppelte Produkte vor.");
            }

            if (!Einkäufe.SelectMany(e => e.Positionen).Select(p => p.Kastengröße.Produkt).Distinct().All(p => produkte.ContainsKey(p)))
            {
                throw new InvalidOperationException("In den Einkäufen dieser Abrechnung kommt ein Produkt vor, das nicht Teil der Abrechnung ist.");
            }

            var paare = Verbrauche.Select(v => new { v.Benutzer, v.Verkaufsprodukt }).ToHashSet();

            if (!Benutzer.SelectMany(b => Verkaufsprodukte.Select(p => new { Benutzer = b, Verkaufsprodukt = p })).All(p => paare.Contains(p)))
            {
                throw new InvalidOperationException("Diese Abrechnung hat keinen Verbrauch für jeden Benutzer und jedes Produkt");
            }

            if (!Zahlungen.Select(z => z.Benutzer).ToHashSet().SetEquals(Benutzer))
            {
                throw new InvalidOperationException("Diese Abrechnung enthält nicht eine Zahlung für jeden Benutzer");
            }
        }