113 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using Elwig.Documents;
 | 
						|
using Elwig.Models.Entities;
 | 
						|
using Microsoft.EntityFrameworkCore;
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Linq;
 | 
						|
using System.Threading.Tasks;
 | 
						|
 | 
						|
namespace Elwig.Models.Dtos {
 | 
						|
    public class DeliveryJournalData : DataTable<DeliveryJournalRow> {
 | 
						|
 | 
						|
        private static readonly (string, string, string?, int?)[] FieldNames = [
 | 
						|
            ("LsNr", "LsNr.", null, 30),
 | 
						|
            ("Pos", "Pos.", null, 10),
 | 
						|
            ("Date", "Datum", null, 20),
 | 
						|
            ("Time", "Zeit", null, 20),
 | 
						|
            ("DeliveryBranch", "Zweigstelle", null, 30),
 | 
						|
            ("MgNr", "MgNr.", null, 12),
 | 
						|
            ("Name1", "Name", null, 40),
 | 
						|
            ("Name2", "Vorname", null, 40),
 | 
						|
            ("MemberBranch", "Stamm-Zwst.", null, 30),
 | 
						|
            ("SortId", "Sorte", null, 10),
 | 
						|
            ("AttrId", "Attr.", null, 15),
 | 
						|
            ("CultId", "Bewirt.", null, 15),
 | 
						|
            ("QualId", "Qualität", null, 15),
 | 
						|
            ("Gradation", "Gradation", "°Oe|°KMW", 40),
 | 
						|
            ("Weight", "Gewicht", "kg", 20),
 | 
						|
            ("IsNetWeight", "Gerebelt", null, 20),
 | 
						|
            ("HkId", "Herkunft", null, 20),
 | 
						|
            ("Modifiers", "Zu-/Abschläge", null, 40),
 | 
						|
            ("Comment", "Anmerkung", null, 60),
 | 
						|
        ];
 | 
						|
 | 
						|
        public DeliveryJournalData(IEnumerable<DeliveryJournalRow> rows, List<string> filterNames) :
 | 
						|
            base(DeliveryJournal.Name, DeliveryJournal.Name, string.Join(" / ", filterNames), rows, FieldNames) {
 | 
						|
        }
 | 
						|
 | 
						|
        public static async Task<DeliveryJournalData> FromQuery(IQueryable<DeliveryPart> query, List<string> filterNames) {
 | 
						|
            return new((await query
 | 
						|
                .Include(p => p.Delivery.Member.Branch)
 | 
						|
                .Include(p => p.Delivery.Branch)
 | 
						|
                .Include(p => p.PartModifiers).ThenInclude(m => m.Modifier)
 | 
						|
                .Include(p => p.Variety)
 | 
						|
                .Include(p => p.Attribute)
 | 
						|
                .Include(p => p.Cultivation)
 | 
						|
                .Include(p => p.Origin)
 | 
						|
                .Include(p => p.Quality)
 | 
						|
                .AsSplitQuery()
 | 
						|
                .ToListAsync()).Select(d => new DeliveryJournalRow(d)), filterNames);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public class DeliveryJournalRow : IDelivery {
 | 
						|
        public string LsNr;
 | 
						|
        public int Pos;
 | 
						|
        public DateOnly Date;
 | 
						|
        public TimeOnly? Time;
 | 
						|
        public string DeliveryBranch;
 | 
						|
        public int MgNr;
 | 
						|
        public string Name1;
 | 
						|
        public string Name2;
 | 
						|
        public string AdministrativeName;
 | 
						|
        public string? MemberBranch;
 | 
						|
        public string SortId;
 | 
						|
        public string Variety;
 | 
						|
        public string? AttrId;
 | 
						|
        public string? Attribute;
 | 
						|
        public string? CultId;
 | 
						|
        public string? Cultivation;
 | 
						|
        public string HkId;
 | 
						|
        public string QualId;
 | 
						|
        public string Quality;
 | 
						|
        public (double Oe, double Kmw) Gradation;
 | 
						|
        public double Kmw => Gradation.Kmw;
 | 
						|
        public double Oe => Gradation.Oe;
 | 
						|
        public int Weight { get; set; }
 | 
						|
        public bool IsNetWeight;
 | 
						|
        public string? Modifiers;
 | 
						|
        public string? Comment;
 | 
						|
 | 
						|
        public DeliveryJournalRow(DeliveryPart p) {
 | 
						|
            var d = p.Delivery;
 | 
						|
            var m = d.Member;
 | 
						|
 | 
						|
            LsNr = d.LsNr;
 | 
						|
            Pos = p.DPNr;
 | 
						|
            Date = d.Date;
 | 
						|
            Time = d.Time;
 | 
						|
            DeliveryBranch = d.Branch.Name;
 | 
						|
            MgNr = m.MgNr;
 | 
						|
            Name1 = m.FamilyName;
 | 
						|
            Name2 = m.AdministrativeName2;
 | 
						|
            AdministrativeName = m.AdministrativeName;
 | 
						|
            MemberBranch = m.Branch?.Name;
 | 
						|
 | 
						|
            SortId = p.SortId;
 | 
						|
            Variety = p.Variety.Name;
 | 
						|
            AttrId = p.AttrId;
 | 
						|
            Attribute = p.Attribute?.Name;
 | 
						|
            CultId = p.CultId;
 | 
						|
            Cultivation = p.Cultivation?.Name;
 | 
						|
            HkId = p.HkId;
 | 
						|
            QualId = p.QualId;
 | 
						|
            Quality = p.Quality.Name;
 | 
						|
            Gradation = (p.Oe, p.Kmw);
 | 
						|
            Weight = p.Weight;
 | 
						|
            IsNetWeight = p.IsNetWeight;
 | 
						|
            Modifiers = string.Join(" / ", p.Modifiers.Select(m => m.Name).Order());
 | 
						|
            Comment = d.Comment == null && p.Comment == null ? null : (d.Comment + (d.Comment != null && p.Comment != null ? " / " : "") + p.Comment);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |