104 lines
3.9 KiB
C#
104 lines
3.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using BeWo.Data.Access;
|
|
using BeWo.Data.Entities;
|
|
using BS.Shared.Core;
|
|
using BS.Shared.DataContracts.Compact;
|
|
|
|
namespace BeWo.Report.ReportObjects
|
|
{
|
|
public class KilometerauswertungsListRO : AbstractBeWoReportObject<KilometerauswertungsListRO>
|
|
{
|
|
public List<CompactCustomerDC> AllCustomers { get; set; }
|
|
|
|
// Alt
|
|
public DateTime MonthInformation { get; set; }
|
|
|
|
public DateTime StartDate { get; set; }
|
|
|
|
public DateTime EndDate { get; set; }
|
|
|
|
public List<long> LeistungenOids { get; set; }
|
|
|
|
public List<Customer2KilometerauswertungsEntry> Customer2Entries { get; set; } = new List<Customer2KilometerauswertungsEntry>();
|
|
|
|
|
|
public static KilometerauswertungsListRO Create(List<CompactCustomerDC> customers, List<long> leistungenOids, DateTime start, DateTime end)
|
|
{
|
|
var kilometerauswertungsListRO = new KilometerauswertungsListRO
|
|
{
|
|
AllCustomers = customers,
|
|
MonthInformation = start,
|
|
LeistungenOids = leistungenOids,
|
|
StartDate = start,
|
|
EndDate = end
|
|
};
|
|
|
|
kilometerauswertungsListRO.CreateEntries();
|
|
|
|
return kilometerauswertungsListRO;
|
|
}
|
|
|
|
public void CreateEntries()
|
|
{
|
|
var start = StartDate;
|
|
var end = EndDate.AddDays(1).AddTicks(-1);
|
|
|
|
var timeSpan = new DateTimeSpan();
|
|
timeSpan.StartDateTime = start;
|
|
timeSpan.EndDateTime = end;
|
|
|
|
var rawData = DAOFactory.SearchDAO.FindListOfCustomerServiceRecordsForKilometerauswertung(AllCustomers.Select(customer => customer.CustomerOid).ToList(), LeistungenOids, timeSpan);
|
|
|
|
foreach(var customerOid2Servicerecords in rawData)
|
|
{
|
|
var customer = AllCustomers.FirstOrDefault(c => c.CustomerOid == customerOid2Servicerecords.Key);
|
|
|
|
if(customer != null)
|
|
{
|
|
var customer2KilometerauswertungsEntry = new Customer2KilometerauswertungsEntry(customer, customerOid2Servicerecords.Value.OrderBy(serviceRecord => serviceRecord.Start));
|
|
Customer2Entries.Add(customer2KilometerauswertungsEntry);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public class Customer2KilometerauswertungsEntry
|
|
{
|
|
public CompactCustomerDC Customer { get; set; }
|
|
|
|
public string CustomerName => Customer?.ToString();
|
|
|
|
public List<KilometerauswertungsEntry> Entries { get; set; }
|
|
|
|
public double TotalDistanceInMeters { get; set; }
|
|
|
|
public Customer2KilometerauswertungsEntry(CompactCustomerDC customer, IEnumerable<ServiceRecord> serviceRecords)
|
|
{
|
|
Customer = customer;
|
|
|
|
Entries = new List<KilometerauswertungsEntry>();
|
|
TotalDistanceInMeters = 0;
|
|
|
|
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 e = new KilometerauswertungsEntry(serviceRecord.Start, serviceRecord.End, distanceRounded, serviceRecord.Employee.Person.LastNameFirstName);
|
|
e.Notice = serviceRecord.Notice;
|
|
e.Notice2 = serviceRecord.Notice2;
|
|
e.Notice3 = serviceRecord.Notice3;
|
|
e.Notice4 = serviceRecord.Notice4;
|
|
e.Notice5 = serviceRecord.Notice5;
|
|
|
|
Entries.Add(e);
|
|
}
|
|
|
|
Entries = Entries.OrderBy(o => o.Datum).ToList();
|
|
}
|
|
}
|
|
}
|