From 6ac76546852a7629ef7299e4f128d17a3fbfbf21 Mon Sep 17 00:00:00 2001 From: Alexandra Date: Tue, 28 Jan 2025 15:16:58 +0100 Subject: [PATCH] =?UTF-8?q?KilometerauswertungsRO=20und=20EmployeeKilomete?= =?UTF-8?q?rauswertungsRO=20-=20Erg=C3=A4nzung=20um=20KilometerPauschale?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EmployeeKilometerauswertungsListRO.cs | 35 +++++++++++++---- .../EmployeeKilometerauswertungsRO.cs | 39 +++++++++++++++---- .../KilometerauswertungsListRO.cs | 30 +++++++++++++- .../ReportObjects/KilometerauswertungsRO.cs | 31 +++++++++++++++ 4 files changed, 119 insertions(+), 16 deletions(-) diff --git a/Report/ReportObjects/EmployeeKilometerauswertungsListRO.cs b/Report/ReportObjects/EmployeeKilometerauswertungsListRO.cs index ea3c63f1c..a4ff6fc29 100644 --- a/Report/ReportObjects/EmployeeKilometerauswertungsListRO.cs +++ b/Report/ReportObjects/EmployeeKilometerauswertungsListRO.cs @@ -3,8 +3,11 @@ using System.Collections.Generic; using System.Linq; using BeWo.Data.Access; using BeWo.Data.Entities; +using BeWo.Service.DCEntityMapper; +using BS.Shared; using BS.Shared.Core; using BS.Shared.DataContracts.Compact; +using BS.Shared.Extensions; namespace BeWo.Report.ReportObjects { @@ -43,17 +46,14 @@ namespace BeWo.Report.ReportObjects { var start = StartDate; var end = EndDate.AddDays(1).AddTicks(-1); - var timeSpan = new DateTimeSpan(); timeSpan.StartDateTime = start; timeSpan.EndDateTime = end; - var rawData = DAOFactory.SearchDAO.FindListOfEmployeeServiceRecordsForKilometerauswertung(AllEmployees.Select(employee => employee.EmployeeOid).ToList(), LeistungenOids, timeSpan); foreach(var employeeOid2ServiceRecords in rawData) { var employee = AllEmployees.FirstOrDefault(e => e.EmployeeOid == employeeOid2ServiceRecords.Key); - if(employee != null) { var employee2KilometerauswertungsEntry = new Employee2EmployeeKilometerauswertungsEntry(employee, employeeOid2ServiceRecords.Value.OrderBy(serviceRecord => serviceRecord.Start)); @@ -73,32 +73,53 @@ namespace BeWo.Report.ReportObjects public double TotalDistanceInMeters { get; set; } + public double TotalKilometerPauschale { get; set; } + + public String TotalCustom1 { get; set; } + public Employee2EmployeeKilometerauswertungsEntry(CompactEmployeeDC employee, IEnumerable serviceRecords) { Employee = employee; - Entries = new List(); TotalDistanceInMeters = 0; + TotalKilometerPauschale = 0; + var preise = DAOFactory.GenericDAO.GetAllActive(); - foreach(var serviceRecord in serviceRecords.Where(serviceRecord => serviceRecord.DistanceInMeter.HasValue && serviceRecord.Start.HasValue)) + foreach (var serviceRecord in serviceRecords.Where(serviceRecord => serviceRecord.DistanceInMeter.HasValue && serviceRecord.Start.HasValue)) { var distance = (serviceRecord.GroupPersonCount == null) ? (double)serviceRecord.DistanceInMeter.Value : (double)serviceRecord.DistanceInMeter.Value / (double)serviceRecord.GroupPersonCount; var distanceRounded = Math.Round(distance, 2); - TotalDistanceInMeters += distanceRounded; - + var pauschVar = GetPreis(preise, "Kilometerpauschale", serviceRecord.Start.Value); var e = new EmployeeKilometerauswertungsEntry(serviceRecord.Start, serviceRecord.End, distanceRounded, serviceRecord.Customer?.Person?.LastNameFirstName ?? string.Empty, serviceRecord.Notice, serviceRecord); + e.KilometerPauschale = Math.Round(distanceRounded * (double)pauschVar, 2, MidpointRounding.AwayFromZero); e.Notice = serviceRecord.Notice; e.Notice2 = serviceRecord.Notice2; e.Notice3 = serviceRecord.Notice3; e.Notice4 = serviceRecord.Notice4; e.Notice5 = serviceRecord.Notice5; + TotalKilometerPauschale += e.KilometerPauschale; Entries.Add(e); } Entries = Entries.OrderBy(o => o.Datum).ToList(); } + + private static decimal GetPreis(IList allePreise, String name, DateTime datum) + { + var pausch = allePreise.Where(p => p.Name.Contains(name)).FirstOrDefault(); + if (pausch != null) + { + var crlist = MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(pausch.CostRatePeriods); + var cr = crlist.GetCostRatePeriodForDate(CostRatePeriodType.AmountOfMoney, datum); + if (cr != null && cr.CostRateValue.HasValue) + { + return cr.CostRateValue.Value; + } + } + return 0; + } } } diff --git a/Report/ReportObjects/EmployeeKilometerauswertungsRO.cs b/Report/ReportObjects/EmployeeKilometerauswertungsRO.cs index 4226e52d3..7e2589354 100644 --- a/Report/ReportObjects/EmployeeKilometerauswertungsRO.cs +++ b/Report/ReportObjects/EmployeeKilometerauswertungsRO.cs @@ -3,8 +3,11 @@ using System.Collections.Generic; using System.Linq; using BeWo.Data.Access; using BeWo.Data.Entities; +using BeWo.Service.DCEntityMapper; +using BS.Shared; using BS.Shared.Core; using BS.Shared.DataContracts.Compact; +using BS.Shared.Extensions; namespace BeWo.Report.ReportObjects { @@ -23,9 +26,11 @@ namespace BeWo.Report.ReportObjects public double TotalDistanceInMeters { get; set; } - public List LeistungenOids { get; set; } + public double TotalKilometerPauschale { get; set; } - + public String TotalCustom1 { get; set; } + + public List LeistungenOids { get; set; } public List Entries { get; set; } @@ -56,22 +61,26 @@ namespace BeWo.Report.ReportObjects Entries = new List(); TotalDistanceInMeters = 0; + TotalKilometerPauschale = 0; + var preise = DAOFactory.GenericDAO.GetAllActive(); - foreach(var serviceRecord in serviceRecords.Where(serviceRecord => serviceRecord.DistanceInMeter.HasValue && serviceRecord.DistanceInMeter > 0 && serviceRecord.Start.HasValue)) + foreach (var serviceRecord in serviceRecords.Where(serviceRecord => serviceRecord.DistanceInMeter.HasValue && serviceRecord.DistanceInMeter > 0 && serviceRecord.Start.HasValue)) { if (LeistungenOids == null || LeistungenOids.Count == 0 || LeistungenOids.Contains(serviceRecord.ServiceDescription.Oid.Value)) { var distance = (serviceRecord.GroupPersonCount == null) ? (double)serviceRecord.DistanceInMeter.Value : (double)serviceRecord.DistanceInMeter.Value / (double)serviceRecord.GroupPersonCount; var distanceRounded = Math.Round(distance, 2); - TotalDistanceInMeters += distanceRounded; + var pauschVar = GetPreis(preise, "Kilometerpauschale", serviceRecord.Start.Value); var e = new EmployeeKilometerauswertungsEntry(serviceRecord.Start, serviceRecord.End, distanceRounded, serviceRecord.Customer?.Person?.LastNameFirstName ?? string.Empty, serviceRecord.Notice, serviceRecord); + e.KilometerPauschale = Math.Round(distanceRounded * (double)pauschVar, 2, MidpointRounding.AwayFromZero); e.Notice = serviceRecord.Notice; e.Notice2 = serviceRecord.Notice2; e.Notice3 = serviceRecord.Notice3; e.Notice4 = serviceRecord.Notice4; e.Notice5 = serviceRecord.Notice5; + TotalKilometerPauschale += e.KilometerPauschale; Entries.Add(e); } @@ -79,6 +88,21 @@ namespace BeWo.Report.ReportObjects Entries = Entries.OrderBy(o => o.Datum).ToList(); } } + + private static decimal GetPreis(IList allePreise, String name, DateTime datum) + { + var pausch = allePreise.Where(p => p.Name.Contains(name)).FirstOrDefault(); + if (pausch != null) + { + var crlist = MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(pausch.CostRatePeriods); + var cr = crlist.GetCostRatePeriodForDate(CostRatePeriodType.AmountOfMoney, datum); + if (cr != null && cr.CostRateValue.HasValue) + { + return cr.CostRateValue.Value; + } + } + return 0; + } } public class EmployeeKilometerauswertungsEntry @@ -110,6 +134,10 @@ namespace BeWo.Report.ReportObjects public double DistanceInMeters { get; set; } + public double KilometerPauschale { get; set; } + + public String Custom1 { get; set; } + public string CustomerName { get; set; } public string Dokumentation { get; set; } @@ -129,16 +157,13 @@ namespace BeWo.Report.ReportObjects public EmployeeKilometerauswertungsEntry(DateTime? start, DateTime? end, double distanceInMeters, string customerName, string doku, ServiceRecord sr) { ServiceRecord = sr; - if (start.HasValue) { Datum = start; - if (start.Value.Second == 0) { StartTime = start; } - } if (end.HasValue && end.Value.Second == 0) diff --git a/Report/ReportObjects/KilometerauswertungsListRO.cs b/Report/ReportObjects/KilometerauswertungsListRO.cs index d7866c74f..6111efa3a 100644 --- a/Report/ReportObjects/KilometerauswertungsListRO.cs +++ b/Report/ReportObjects/KilometerauswertungsListRO.cs @@ -3,8 +3,11 @@ using System.Collections.Generic; using System.Linq; using BeWo.Data.Access; using BeWo.Data.Entities; +using BeWo.Service.DCEntityMapper; +using BS.Shared; using BS.Shared.Core; using BS.Shared.DataContracts.Compact; +using BS.Shared.Extensions; namespace BeWo.Report.ReportObjects { @@ -74,30 +77,53 @@ namespace BeWo.Report.ReportObjects public double TotalDistanceInMeters { get; set; } + public double TotalKilometerPauschale { get; set; } + + public String TotalCustom1 { get; set; } + public Customer2KilometerauswertungsEntry(CompactCustomerDC customer, IEnumerable serviceRecords) { Customer = customer; - Entries = new List(); TotalDistanceInMeters = 0; + TotalKilometerPauschale = 0; + var preise = DAOFactory.GenericDAO.GetAllActive(); - foreach(var serviceRecord in serviceRecords.Where(serviceRecord => serviceRecord.DistanceInMeter.HasValue && serviceRecord.Start.HasValue)) + foreach (var serviceRecord in serviceRecords.Where(serviceRecord => serviceRecord.DistanceInMeter.HasValue && serviceRecord.Start.HasValue)) { var distance = (serviceRecord.GroupPersonCount == null) ? (double)serviceRecord.DistanceInMeter.Value : (double)serviceRecord.DistanceInMeter.Value / (double)serviceRecord.GroupPersonCount; var distanceRounded = Math.Round(distance, 2); TotalDistanceInMeters += distanceRounded; + var pauschVar = GetPreis(preise, "Kilometerpauschale", serviceRecord.Start.Value); var e = new KilometerauswertungsEntry(serviceRecord.Start, serviceRecord.End, distanceRounded, serviceRecord.Employee.Person.LastNameFirstName); + e.KilometerPauschale = Math.Round(distanceRounded * (double)pauschVar, 2, MidpointRounding.AwayFromZero); e.Notice = serviceRecord.Notice; e.Notice2 = serviceRecord.Notice2; e.Notice3 = serviceRecord.Notice3; e.Notice4 = serviceRecord.Notice4; e.Notice5 = serviceRecord.Notice5; + TotalKilometerPauschale += e.KilometerPauschale; Entries.Add(e); } Entries = Entries.OrderBy(o => o.Datum).ToList(); } + + private static decimal GetPreis(IList allePreise, String name, DateTime datum) + { + var pausch = allePreise.Where(p => p.Name.Contains(name)).FirstOrDefault(); + if (pausch != null) + { + var crlist = MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(pausch.CostRatePeriods); + var cr = crlist.GetCostRatePeriodForDate(CostRatePeriodType.AmountOfMoney, datum); + if (cr != null && cr.CostRateValue.HasValue) + { + return cr.CostRateValue.Value; + } + } + return 0; + } } } diff --git a/Report/ReportObjects/KilometerauswertungsRO.cs b/Report/ReportObjects/KilometerauswertungsRO.cs index 6ccf54171..6256d2db5 100644 --- a/Report/ReportObjects/KilometerauswertungsRO.cs +++ b/Report/ReportObjects/KilometerauswertungsRO.cs @@ -2,8 +2,12 @@ using System.Collections.Generic; using System.Linq; using BeWo.Data.Access; +using BeWo.Data.Entities; +using BeWo.Service.DCEntityMapper; +using BS.Shared; using BS.Shared.Core; using BS.Shared.DataContracts.Compact; +using BS.Shared.Extensions; namespace BeWo.Report.ReportObjects { @@ -22,6 +26,10 @@ namespace BeWo.Report.ReportObjects public double TotalDistanceInMeters { get; set; } + public double TotalKilometerPauschale { get; set; } + + public String TotalCustom1 { get; set; } + public List LeistungenOids { get; set; } public List Entries { get; set; } @@ -53,6 +61,8 @@ namespace BeWo.Report.ReportObjects Entries = new List(); TotalDistanceInMeters = 0; + TotalKilometerPauschale = 0; + var preise = DAOFactory.GenericDAO.GetAllActive(); foreach (var serviceRecord in serviceRecords.Where(serviceRecord => serviceRecord.DistanceInMeter.HasValue && serviceRecord.DistanceInMeter > 0 && serviceRecord.Start.HasValue)) { @@ -61,13 +71,16 @@ namespace BeWo.Report.ReportObjects var distance = (serviceRecord.GroupPersonCount == null) ? (double)serviceRecord.DistanceInMeter.Value : (double)serviceRecord.DistanceInMeter.Value / (double)serviceRecord.GroupPersonCount; var distanceRounded = Math.Round(distance, 2); TotalDistanceInMeters += distanceRounded; + var pauschVar = GetPreis(preise, "Kilometerpauschale", serviceRecord.Start.Value); var e = new KilometerauswertungsEntry(serviceRecord.Start, serviceRecord.End, distanceRounded, serviceRecord.Employee.Person.LastNameFirstName); + e.KilometerPauschale = Math.Round(distanceRounded * (double)pauschVar, 2, MidpointRounding.AwayFromZero); e.Notice = serviceRecord.Notice; e.Notice2 = serviceRecord.Notice2; e.Notice3 = serviceRecord.Notice3; e.Notice4 = serviceRecord.Notice4; e.Notice5 = serviceRecord.Notice5; + TotalKilometerPauschale += e.KilometerPauschale; Entries.Add(e); } @@ -75,6 +88,20 @@ namespace BeWo.Report.ReportObjects Entries = Entries.OrderBy(o => o.Datum).ToList(); } + private static decimal GetPreis(IList allePreise, String name, DateTime datum) + { + var pausch = allePreise.Where(p => p.Name.Contains(name)).FirstOrDefault(); + if (pausch != null) + { + var crlist = MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(pausch.CostRatePeriods); + var cr = crlist.GetCostRatePeriodForDate(CostRatePeriodType.AmountOfMoney, datum); + if (cr != null && cr.CostRateValue.HasValue) + { + return cr.CostRateValue.Value; + } + } + return 0; + } } public class KilometerauswertungsEntry @@ -117,6 +144,10 @@ namespace BeWo.Report.ReportObjects public double DistanceInMeters { get; } + public double KilometerPauschale { get; set; } + + public String Custom1 { get; set; } + public string EmployeeName { get; } public KilometerauswertungsEntry(DateTime? start, DateTime? end, double distanceInMeters, string employeeName)