From 5ad8c88319b393bb485904cc8f7c7eb4b9c117f4 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Tue, 12 Sep 2023 21:40:04 +0200 Subject: [PATCH] Models: Add Credit --- Elwig/Helpers/AppDbContext.cs | 1 + Elwig/Helpers/Billing/Transaction.cs | 9 +- Elwig/Models/Credit.cs | 104 ++++++++++++++++++ Elwig/Models/DeliveryPart.cs | 13 +-- Elwig/Models/PaymentDeliveryPart.cs | 158 +++++++++++++++++++++++++++ Elwig/Models/PaymentMember.cs | 8 +- Elwig/Models/PaymentVar.cs | 8 ++ 7 files changed, 284 insertions(+), 17 deletions(-) create mode 100644 Elwig/Models/Credit.cs create mode 100644 Elwig/Models/PaymentDeliveryPart.cs diff --git a/Elwig/Helpers/AppDbContext.cs b/Elwig/Helpers/AppDbContext.cs index 50519cb..8a2aeb3 100644 --- a/Elwig/Helpers/AppDbContext.cs +++ b/Elwig/Helpers/AppDbContext.cs @@ -44,6 +44,7 @@ namespace Elwig.Helpers { public DbSet DeliveryPartModifiers { get; private set; } public DbSet PaymentVariants { get; private set; } public DbSet MemberPayments { get; private set; } + public DbSet Credits { get; private set; } private readonly StreamWriter? LogFile = null; public static DateTime LastWriteTime => File.GetLastWriteTime(App.Config.DatabaseFile); diff --git a/Elwig/Helpers/Billing/Transaction.cs b/Elwig/Helpers/Billing/Transaction.cs index 2e0160c..0eaba3d 100644 --- a/Elwig/Helpers/Billing/Transaction.cs +++ b/Elwig/Helpers/Billing/Transaction.cs @@ -21,12 +21,9 @@ namespace Elwig.Helpers.Billing { public static IEnumerable FromPaymentVariant(PaymentVar variant) { var last = variant.Season.PaymentVariants.Where(v => v.TransferDate != null).OrderBy(v => v.TransferDate).LastOrDefault(); var dict = last?.MemberPayments.ToDictionary(m => m.MgNr, m => m.Amount) ?? new(); - return variant.MemberPayments - .OrderBy(m => m.MgNr) - .Select(m => { - var amt = Math.Round(dict.GetValueOrDefault(m.MgNr, 0), 2); - return new Transaction(m.Member, m.Amount - amt, m.Variant.Season.CurrencyCode, m.TgNr ?? 0); - }) + return variant.Credits + .OrderBy(c => c.MgNr) + .Select(c => new Transaction(c.Member, c.Amount, variant.Season.CurrencyCode, c.TgNr)) .ToList(); } diff --git a/Elwig/Models/Credit.cs b/Elwig/Models/Credit.cs new file mode 100644 index 0000000..b6ea2f9 --- /dev/null +++ b/Elwig/Models/Credit.cs @@ -0,0 +1,104 @@ +using Elwig.Helpers; +using Microsoft.EntityFrameworkCore; +using System; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Elwig.Models { + [Table("credit"), PrimaryKey("Year", "TgNr"), Index("Year", "AvNr", "MgNr", IsUnique = true)] + public class Credit { + [Column("year")] + public int Year { get; set; } + + [Column("tgnr")] + public int TgNr { get; set; } + + [NotMapped] + public string TgId => $"{Year}/{TgNr:000}"; + + [Column("mgnr")] + public int MgNr { get; set; } + + [Column("avnr")] + public int AvNr { get; set; } + + [Column("net_amount")] + public long NetAmountValue { get; set; } + [NotMapped] + public decimal NetAmount { + get => Utils.DecFromDb(NetAmountValue, 2); + set => NetAmountValue = Utils.DecToDb(value, 2); + } + + [Column("prev_net_amount")] + public long? PrevNetAmountValue { get; set; } + [NotMapped] + public decimal? PrevNetAmount { + get => PrevNetAmountValue != null ? Utils.DecFromDb(PrevNetAmountValue.Value, 2) : null; + set => PrevNetAmountValue = value != null ? Utils.DecToDb(value.Value, 2) : null; + } + + [Column("vat")] + public double VatValue { get; set; } + [NotMapped] + public decimal Vat { + get => (decimal)VatValue; + set => VatValue = (double)value; + } + + [Column("vat_amount")] + public long VatAmountValue { get; private set; } + [NotMapped] + public decimal VatAmount { + get => Utils.DecFromDb(VatAmountValue, 2); + } + + [Column("gross_amount")] + public long GrossAmountValue { get; private set; } + [NotMapped] + public decimal GrossAmount { + get => Utils.DecFromDb(GrossAmountValue, 2); + } + + [Column("modifiers")] + public long? ModifiersValue { get; set; } + [NotMapped] + public decimal? Modifiers { + get => ModifiersValue != null ? Utils.DecFromDb(ModifiersValue.Value, 2) : null; + set => ModifiersValue = value != null ? Utils.DecToDb(value.Value, 2) : null; + } + + [Column("prev_modifiers")] + public long? PrevModifiersValue { get; set; } + [NotMapped] + public decimal? PrevModifiers { + get => PrevModifiersValue != null ? Utils.DecFromDb(PrevModifiersValue.Value, 2) : null; + set => PrevModifiersValue = value != null ? Utils.DecToDb(value.Value, 2) : null; + } + + [Column("amount")] + public long AmountValue { get; private set; } + [NotMapped] + public decimal Amount { + get => Utils.DecFromDb(AmountValue, 2); + } + + [Column("ctime")] + public long CTime { get; private set; } + [NotMapped] + public DateTime CreatedTimestamp => DateTimeOffset.FromUnixTimeSeconds(CTime).LocalDateTime; + + [Column("mtime")] + public long MTime { get; private set; } + [NotMapped] + public DateTime ModifiedTimestamp => DateTimeOffset.FromUnixTimeSeconds(CTime).LocalDateTime; + + [ForeignKey("Year, AvNr, MgNr")] + public virtual PaymentMember Payment { get; private set; } + + [ForeignKey("Year, AvNr")] + public virtual PaymentVar Variant { get; private set; } + + [ForeignKey("MgNr")] + public virtual Member Member { get; private set; } + } +} diff --git a/Elwig/Models/DeliveryPart.cs b/Elwig/Models/DeliveryPart.cs index c259cf9..2de5e6c 100644 --- a/Elwig/Models/DeliveryPart.cs +++ b/Elwig/Models/DeliveryPart.cs @@ -30,15 +30,10 @@ namespace Elwig.Models { [Column("kmw")] public double Kmw { get; set; } - [NotMapped] public double Oe { - get { - return Utils.KmwToOe(Kmw); - } - set { - Kmw = Utils.OeToKmw(value); - } + get => Utils.KmwToOe(Kmw); + set => Kmw = Utils.OeToKmw(value); } [Column("qualid")] @@ -107,6 +102,10 @@ namespace Elwig.Models { [NotMapped] public IEnumerable Modifiers => PartModifiers.Select(m => m.Modifier).OrderBy(m => m.Ordering); + [InverseProperty("DeliveryPart")] + public virtual PaymentDeliveryPart? Payment { get; private set; } + + [NotMapped] public string OriginString => Origin.OriginString + "\n" + (Kg?.Gl != null ? $" / {Kg.Gl.Name}" : "") + (Kg != null ? $" / {Kg.AtKg.Gem.Name} / KG {Kg.AtKg.Name}" : "") + (Rd != null ? $" / Ried {Rd.Name}" : ""); } } diff --git a/Elwig/Models/PaymentDeliveryPart.cs b/Elwig/Models/PaymentDeliveryPart.cs new file mode 100644 index 0000000..b70646d --- /dev/null +++ b/Elwig/Models/PaymentDeliveryPart.cs @@ -0,0 +1,158 @@ +using Microsoft.EntityFrameworkCore; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; + +namespace Elwig.Models { + [Table("payment_delivery_part"), PrimaryKey("Year", "DId", "DPNr", "AvNr")] + public class PaymentDeliveryPart { + [Column("year")] + public int Year { get; set; } + + [Column("did")] + public int DId { get; set; } + + [Column("dpnr")] + public int DPNr { get; set; } + + [Column("avnr")] + public int AvNr { get; set; } + + [Column("mod_abs")] + public long ModAbsValue { get; set; } + [NotMapped] + public decimal ModAbs { + get => Variant.Season.DecFromDb(ModAbsValue); + set => ModAbsValue = Variant.Season.DecToDb(value); + } + + [Column("mod_rel")] + public double ModRelValue { get; set; } + [NotMapped] + public decimal ModRel { + get => (decimal)ModRelValue; + set => ModRelValue = (double)value; + } + + [Column("bucket_1")] + public int? Bucket1 { get; set; } + + [Column("bucket_2")] + public int? Bucket2 { get; set; } + + [Column("bucket_3")] + public int? Bucket3 { get; set; } + + [Column("bucket_4")] + public int? Bucket4 { get; set; } + + [Column("bucket_5")] + public int? Bucket5 { get; set; } + + [Column("bucket_6")] + public int? Bucket6 { get; set; } + + [Column("bucket_7")] + public int? Bucket7 { get; set; } + + [Column("bucket_8")] + public int? Bucket8 { get; set; } + + [Column("bucket_9")] + public int? Bucket9 { get; set; } + + [NotMapped] + public int[] Buckets => (new int?[] { Bucket1, Bucket2, Bucket3, Bucket4, Bucket5, Bucket6, Bucket7, Bucket8, Bucket9 }) + .Where(b => b != null).Select(b => b.Value).ToArray(); + + [Column("price_1")] + public long? Price1Value { get; set; } + [NotMapped] + public decimal? Price1 { + get => Price1Value != null ? Variant.Season.DecFromDb(Price1Value.Value) : null; + set => Price1Value = value != null ? Variant.Season.DecToDb(value.Value) : null; + } + + [Column("price_2")] + public long? Price2Value { get; set; } + [NotMapped] + public decimal? Price2 { + get => Price2Value != null ? Variant.Season.DecFromDb(Price2Value.Value) : null; + set => Price2Value = value != null ? Variant.Season.DecToDb(value.Value) : null; + } + + [Column("price_3")] + public long? Price3Value { get; set; } + [NotMapped] + public decimal? Price3 { + get => Price3Value != null ? Variant.Season.DecFromDb(Price3Value.Value) : null; + set => Price3Value = value != null ? Variant.Season.DecToDb(value.Value) : null; + } + + [Column("price_4")] + public long? Price4Value { get; set; } + [NotMapped] + public decimal? Price4 { + get => Price4Value != null ? Variant.Season.DecFromDb(Price4Value.Value) : null; + set => Price4Value = value != null ? Variant.Season.DecToDb(value.Value) : null; + } + + [Column("price_5")] + public long? Price5Value { get; set; } + [NotMapped] + public decimal? Price5 { + get => Price5Value != null ? Variant.Season.DecFromDb(Price5Value.Value) : null; + set => Price5Value = value != null ? Variant.Season.DecToDb(value.Value) : null; + } + + [Column("price_6")] + public long? Price6Value { get; set; } + [NotMapped] + public decimal? Price6 { + get => Price6Value != null ? Variant.Season.DecFromDb(Price6Value.Value) : null; + set => Price6Value = value != null ? Variant.Season.DecToDb(value.Value) : null; + } + + [Column("price_7")] + public long? Price7Value { get; set; } + [NotMapped] + public decimal? Price7 { + get => Price7Value != null ? Variant.Season.DecFromDb(Price7Value.Value) : null; + set => Price7Value = value != null ? Variant.Season.DecToDb(value.Value) : null; + } + + [Column("price_8")] + public long? Price8Value { get; set; } + [NotMapped] + public decimal? Price8 { + get => Price8Value != null ? Variant.Season.DecFromDb(Price8Value.Value) : null; + set => Price8Value = value != null ? Variant.Season.DecToDb(value.Value) : null; + } + + [Column("price_9")] + public long? Price9Value { get; set; } + [NotMapped] + public decimal? Price9 { + get => Price9Value != null ? Variant.Season.DecFromDb(Price9Value.Value) : null; + set => Price9Value = value != null ? Variant.Season.DecToDb(value.Value) : null; + } + + [Column("amount")] + public long? AmountValue { get; set; } + [NotMapped] + public decimal? Amount { + get => AmountValue != null ? Variant.Season.DecFromDb(AmountValue.Value) : null; + set => AmountValue = value != null ? Variant.Season.DecToDb(value.Value) : null; + } + + [NotMapped] + public decimal[] Prices => (new decimal?[] { Price1, Price2, Price3, Price4, Price5, Price6, Price7, Price8, Price9 }) + .Where(p => p != null).Select(p => p.Value).ToArray(); + + [ForeignKey("Year, AvNr")] + public virtual PaymentVar Variant { get; private set; } + + [ForeignKey("Year, DId, DPNr")] + public virtual DeliveryPart DeliveryPart { get; private set; } + } +} diff --git a/Elwig/Models/PaymentMember.cs b/Elwig/Models/PaymentMember.cs index a73e1f1..331fea4 100644 --- a/Elwig/Models/PaymentMember.cs +++ b/Elwig/Models/PaymentMember.cs @@ -2,7 +2,7 @@ using Microsoft.EntityFrameworkCore; using System.ComponentModel.DataAnnotations.Schema; namespace Elwig.Models { - [Table("payment_member"), PrimaryKey("Year", "AvNr", "MgNr"), Index("Year", "TgNr", IsUnique = true)] + [Table("payment_member"), PrimaryKey("Year", "AvNr", "MgNr")] public class PaymentMember { [Column("year")] public int Year { get; set; } @@ -16,9 +16,6 @@ namespace Elwig.Models { [Column("amount")] public long AmountValue { get; set; } - [Column("tgnr")] - public int? TgNr { get; set; } - [NotMapped] public decimal Amount { get => Variant.Season.DecFromDb(AmountValue); @@ -30,5 +27,8 @@ namespace Elwig.Models { [ForeignKey("MgNr")] public virtual Member Member { get; private set; } + + [InverseProperty("Payment")] + public virtual Credit? Credit { get; private set; } } } diff --git a/Elwig/Models/PaymentVar.cs b/Elwig/Models/PaymentVar.cs index 13b25c7..cf6a6ef 100644 --- a/Elwig/Models/PaymentVar.cs +++ b/Elwig/Models/PaymentVar.cs @@ -2,6 +2,7 @@ using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; namespace Elwig.Models { [Table("payment_variant"), PrimaryKey("Year", "AvNr")] @@ -66,6 +67,10 @@ namespace Elwig.Models { [Column("bucket_9_name")] public string? Bucket9Name { get; set; } + [NotMapped] + public string[] BucketNames => (new string?[] { Bucket1Name, Bucket2Name, Bucket3Name, Bucket4Name, Bucket5Name, Bucket6Name, Bucket7Name, Bucket8Name, Bucket9Name }) + .Where(n => n != null).Select(n => n ?? "").ToArray(); + [Column("comment")] public string? Comment { get; set; } @@ -77,5 +82,8 @@ namespace Elwig.Models { [InverseProperty("Variant")] public virtual ISet MemberPayments { get; private set; } + + [InverseProperty("Variant")] + public virtual ISet Credits { get; private set; } } }