[#40] Billing: Add Rebelzuschlag
This commit is contained in:
@ -1,5 +1,7 @@
|
||||
using Elwig.Models.Entities;
|
||||
using Elwig.Helpers.Billing;
|
||||
using Elwig.Models.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
@ -26,10 +28,13 @@ namespace Elwig.Models.Dtos {
|
||||
}
|
||||
|
||||
public static async Task<IDictionary<int, CreditNoteDeliveryData>> ForPaymentVariant(DbSet<CreditNoteDeliveryRowSingle> table, DbSet<Season> seasons, int year, int avnr) {
|
||||
var variant = (await seasons.FindAsync(year))?.PaymentVariants.Where(v => v.AvNr == avnr).SingleOrDefault();
|
||||
BillingData? varData = null;
|
||||
try { varData = variant != null ? BillingData.FromJson(variant.Data) : null; } catch { }
|
||||
return (await FromDbSet(table, year, avnr))
|
||||
.GroupBy(
|
||||
r => new { r.Year, r.AvNr, r.MgNr, r.TgNr, r.DId, r.DPNr },
|
||||
(k, g) => new CreditNoteDeliveryRow(g, seasons))
|
||||
(k, g) => new CreditNoteDeliveryRow(g, seasons, varData?.NetWeightModifier ?? 0.0, varData?.GrossWeightModifier ?? 0.0))
|
||||
.GroupBy(
|
||||
r => new { r.Year, r.AvNr, r.MgNr, r.TgNr },
|
||||
(k, g) => new CreditNoteDeliveryData(g, k.Year, k.TgNr, mgnr: k.MgNr))
|
||||
@ -43,7 +48,7 @@ namespace Elwig.Models.Dtos {
|
||||
return await table.FromSqlRaw($"""
|
||||
SELECT d.year, c.tgnr, v.avnr, d.mgnr, d.did, d.lsnr, d.dpnr, d.weight, d.modifiers,
|
||||
b.bktnr, d.sortid, b.discr, b.value, pb.price, pb.amount, p.net_amount, p.amount AS total_amount,
|
||||
s.name AS variety, a.name AS attribute, c.name AS cultivation, q.name AS quality_level, d.oe, d.kmw
|
||||
s.name AS variety, a.name AS attribute, c.name AS cultivation, q.qualid AS qualid, q.name AS quality_level, d.oe, d.kmw, d.net_weight
|
||||
FROM v_delivery d
|
||||
JOIN wine_variety s ON s.sortid = d.sortid
|
||||
LEFT JOIN wine_attribute a ON a.attrid = d.attrid
|
||||
@ -64,7 +69,7 @@ namespace Elwig.Models.Dtos {
|
||||
|
||||
public int Year;
|
||||
public int? TgNr;
|
||||
public int AvNr;
|
||||
public int? AvNr;
|
||||
public int MgNr;
|
||||
|
||||
public string LsNr;
|
||||
@ -73,16 +78,19 @@ namespace Elwig.Models.Dtos {
|
||||
public string? Attribute;
|
||||
public string? Cultivation;
|
||||
public string[] Modifiers;
|
||||
public string QualId;
|
||||
public string QualityLevel;
|
||||
public (double Oe, double Kmw) Gradation;
|
||||
public (string Name, int Value, decimal? Price, decimal? Amount)[] Buckets;
|
||||
public decimal? TotalModifiers;
|
||||
public decimal? Amount;
|
||||
public double WeighingModifier;
|
||||
|
||||
public CreditNoteDeliveryRow(IEnumerable<CreditNoteDeliveryRowSingle> rows, DbSet<Season> seasons) {
|
||||
public CreditNoteDeliveryRow(IEnumerable<CreditNoteDeliveryRowSingle> rows, DbSet<Season> seasons, double netWeightModifier, double grossWeightModifier) {
|
||||
var f = rows.First();
|
||||
Year = f.Year;
|
||||
TgNr = f.TgNr;
|
||||
AvNr = f.AvNr;
|
||||
MgNr = f.MgNr;
|
||||
var season = seasons.Find(Year);
|
||||
|
||||
@ -97,6 +105,7 @@ namespace Elwig.Models.Dtos {
|
||||
.OrderBy(m => m.Ordering)
|
||||
.ToList();
|
||||
Modifiers = modifiers.Select(m => m.Name).ToArray();
|
||||
QualId = f.QualId;
|
||||
QualityLevel = f.QualityLevel;
|
||||
Gradation = (f.Oe, f.Kmw);
|
||||
Buckets = rows
|
||||
@ -106,9 +115,11 @@ namespace Elwig.Models.Dtos {
|
||||
b.Price != null ? season?.DecFromDb((long)b.Price) : null,
|
||||
b.Amount != null ? season?.DecFromDb((long)b.Amount) : null))
|
||||
.ToArray();
|
||||
WeighingModifier = f.NetWeight ? netWeightModifier : grossWeightModifier;
|
||||
Amount = f.TotalAmount != null ? season?.DecFromDb((long)f.TotalAmount) : null;
|
||||
var netAmount = f.NetAmount != null ? season?.DecFromDb((long)f.NetAmount) : null;
|
||||
TotalModifiers = Amount - netAmount;
|
||||
var amt = netAmount * (decimal)(1.0 + WeighingModifier);
|
||||
TotalModifiers = Amount - (amt != null ? Math.Round((decimal)amt, season?.Precision ?? 0) : null);
|
||||
}
|
||||
}
|
||||
|
||||
@ -154,11 +165,15 @@ namespace Elwig.Models.Dtos {
|
||||
public string? Attribute { get; set; }
|
||||
[Column("cultivation")]
|
||||
public string? Cultivation { get; set; }
|
||||
[Column("qualid")]
|
||||
public required string QualId { get; set; }
|
||||
[Column("quality_level")]
|
||||
public required string QualityLevel { get; set; }
|
||||
[Column("oe")]
|
||||
public double Oe { get; set; }
|
||||
[Column("kmw")]
|
||||
public double Kmw { get; set; }
|
||||
[Column("net_weight")]
|
||||
public bool NetWeight { get; set; }
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user