using Elwig.Helpers; using Elwig.Models.Dtos; using Elwig.Models.Entities; using System.Collections.Generic; using System.Linq; namespace Elwig.Documents { public class CreditNote : BusinessDocument { public new static string Name => "Traubengutschrift"; public PaymentMember? Payment; public Credit? Credit; public CreditNoteData Data; public string? Text; public string CurrencySymbol; public int Precision; public string MemberModifier; public IEnumerable<(string Name, int Kg, decimal Amount)>? MemberUnderDeliveries; public CreditNote(AppDbContext ctx, PaymentMember p, CreditNoteData data, Dictionary? underDeliveries = null) : base($"{Name} {(p.Credit != null ? $"Nr. {p.Credit.Year}/{p.Credit.TgNr:000}" : p.Member.Name)} – {p.Variant.Name}", p.Member) { UseBillingAddress = true; ShowDateAndLocation = true; Data = data; Payment = p; Credit = p.Credit; var season = p.Variant.Season; var mod = App.Client.IsMatzen ? ctx.Modifiers.Where(m => m.Year == season.Year && m.Name.StartsWith("Treue")).FirstOrDefault() : null; if (mod != null) { MemberModifier = $"{mod.Name} ({mod.ValueStr})"; } else { MemberModifier = "Sonstige Zu-/Abschläge"; } Aside = Aside.Replace("", "") + $"Gutschrift" + $"TG-Nr.{(p.Credit != null ? $"{p.Credit.Year}/{p.Credit.TgNr:000}" : "-")}" + $"Überw. am{p.Variant.TransferDate:dd.MM.yyyy}" + $"Datum/Zeit{p.Credit?.ModifiedTimestamp:dd.MM.yyyy} / {p.Credit?.ModifiedTimestamp:HH:mm}" + $""; Text = App.Client.TextDeliveryNote; DocumentId = $"Tr.-Gutschr. " + (p.Credit != null ? $"{p.Credit.Year}/{p.Credit.TgNr:000}" : p.MgNr); CurrencySymbol = season.Currency.Symbol ?? season.Currency.Code; Precision = season.Precision; var variants = ctx.WineVarieties.ToDictionary(v => v.SortId, v => v); var attributes = ctx.WineAttributes.ToDictionary(a => a.AttrId, a => a); var comTypes = ctx.AreaCommitmentTypes.ToDictionary(t => t.VtrgId, t => t); MemberUnderDeliveries = underDeliveries? .OrderBy(u => u.Key) .Select(u => ( variants[u.Key[..2]].Name + (u.Key.Length > 2 ? " " + attributes[u.Key[2..]].Name : ""), u.Value.Diff, u.Value.Diff * (comTypes[u.Key].PenaltyPerKg ?? 0) - (comTypes[u.Key].PenaltyAmount ?? 0) - ((u.Value.Weight == 0 ? comTypes[u.Key].PenaltyNone : null) ?? 0))) .Where(u => u.Item3 != 0) .ToList(); } }}