2020-07-07 16:09:48 +02:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using BeWo.Data.Access;
|
2025-01-28 15:16:58 +01:00
|
|
|
|
using BeWo.Data.Entities;
|
|
|
|
|
|
using BeWo.Service.DCEntityMapper;
|
|
|
|
|
|
using BS.Shared;
|
2020-07-07 16:09:48 +02:00
|
|
|
|
using BS.Shared.Core;
|
|
|
|
|
|
using BS.Shared.DataContracts.Compact;
|
2025-01-28 15:16:58 +01:00
|
|
|
|
using BS.Shared.Extensions;
|
2020-07-07 16:09:48 +02:00
|
|
|
|
|
|
|
|
|
|
namespace BeWo.Report.ReportObjects
|
|
|
|
|
|
{
|
|
|
|
|
|
public class KilometerauswertungsRO : AbstractBeWoReportObject<KilometerauswertungsRO>
|
|
|
|
|
|
{
|
|
|
|
|
|
public CompactCustomerDC Customer { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
public string CustomerName => Customer?.ToString();
|
|
|
|
|
|
|
2023-03-14 18:12:07 +01:00
|
|
|
|
// Alt
|
2020-07-07 16:09:48 +02:00
|
|
|
|
public DateTime MonthInformation { get; set; }
|
|
|
|
|
|
|
2023-03-14 18:12:07 +01:00
|
|
|
|
public DateTime StartDate { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
public DateTime EndDate { get; set; }
|
|
|
|
|
|
|
2021-01-29 14:37:43 +01:00
|
|
|
|
public double TotalDistanceInMeters { get; set; }
|
2020-07-07 16:09:48 +02:00
|
|
|
|
|
2025-01-28 15:16:58 +01:00
|
|
|
|
public double TotalKilometerPauschale { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
public String TotalCustom1 { get; set; }
|
|
|
|
|
|
|
2023-03-14 18:12:07 +01:00
|
|
|
|
public List<long> LeistungenOids { get; set; }
|
|
|
|
|
|
|
2020-07-07 16:09:48 +02:00
|
|
|
|
public List<KilometerauswertungsEntry> Entries { get; set; }
|
|
|
|
|
|
|
2023-03-14 18:12:07 +01:00
|
|
|
|
public static KilometerauswertungsRO Create(CompactCustomerDC customer, List<long> leistungenOids, DateTime start, DateTime end)
|
2020-07-07 16:09:48 +02:00
|
|
|
|
{
|
|
|
|
|
|
var kilometerauswertung = new KilometerauswertungsRO
|
|
|
|
|
|
{
|
2023-03-14 18:12:07 +01:00
|
|
|
|
Customer = customer,
|
|
|
|
|
|
MonthInformation = start,
|
|
|
|
|
|
LeistungenOids = leistungenOids,
|
|
|
|
|
|
StartDate = start,
|
|
|
|
|
|
EndDate = end
|
2020-07-07 16:09:48 +02:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
return kilometerauswertung;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void CreateDistanceList()
|
|
|
|
|
|
{
|
2023-03-14 18:12:07 +01:00
|
|
|
|
var start = StartDate;
|
|
|
|
|
|
var end = EndDate.AddDays(1).AddTicks(-1);
|
2020-12-05 15:47:00 +01:00
|
|
|
|
|
|
|
|
|
|
var timeSpan = new DateTimeSpan();
|
|
|
|
|
|
timeSpan.StartDateTime = start;
|
|
|
|
|
|
timeSpan.EndDateTime = end;
|
2020-07-07 16:09:48 +02:00
|
|
|
|
|
|
|
|
|
|
var serviceRecords = DAOFactory.SearchDAO.FindCustomerServiceRecordsForKilometerauswertung(Customer.CustomerOid, timeSpan);
|
|
|
|
|
|
|
|
|
|
|
|
Entries = new List<KilometerauswertungsEntry>();
|
|
|
|
|
|
TotalDistanceInMeters = 0;
|
2025-01-28 15:16:58 +01:00
|
|
|
|
TotalKilometerPauschale = 0;
|
|
|
|
|
|
var preise = DAOFactory.GenericDAO.GetAllActive<Preis>();
|
2020-07-07 16:09:48 +02:00
|
|
|
|
|
2023-03-14 18:12:07 +01:00
|
|
|
|
foreach (var serviceRecord in serviceRecords.Where(serviceRecord => serviceRecord.DistanceInMeter.HasValue && serviceRecord.DistanceInMeter > 0 && serviceRecord.Start.HasValue))
|
2020-07-07 16:09:48 +02:00
|
|
|
|
{
|
2023-03-24 13:07:59 +01:00
|
|
|
|
if (LeistungenOids == null || LeistungenOids.Count == 0 || LeistungenOids.Contains(serviceRecord.ServiceDescription.Oid.Value))
|
2023-03-14 18:12:07 +01:00
|
|
|
|
{
|
|
|
|
|
|
var distance = (serviceRecord.GroupPersonCount == null) ? (double)serviceRecord.DistanceInMeter.Value : (double)serviceRecord.DistanceInMeter.Value / (double)serviceRecord.GroupPersonCount;
|
|
|
|
|
|
var distanceRounded = Math.Round(distance, 2);
|
|
|
|
|
|
TotalDistanceInMeters += distanceRounded;
|
2025-01-28 15:16:58 +01:00
|
|
|
|
var pauschVar = GetPreis(preise, "Kilometerpauschale", serviceRecord.Start.Value);
|
2023-03-14 18:12:07 +01:00
|
|
|
|
|
|
|
|
|
|
var e = new KilometerauswertungsEntry(serviceRecord.Start, serviceRecord.End, distanceRounded, serviceRecord.Employee.Person.LastNameFirstName);
|
2025-01-28 15:16:58 +01:00
|
|
|
|
e.KilometerPauschale = Math.Round(distanceRounded * (double)pauschVar, 2, MidpointRounding.AwayFromZero);
|
2023-03-14 18:12:07 +01:00
|
|
|
|
e.Notice = serviceRecord.Notice;
|
|
|
|
|
|
e.Notice2 = serviceRecord.Notice2;
|
|
|
|
|
|
e.Notice3 = serviceRecord.Notice3;
|
|
|
|
|
|
e.Notice4 = serviceRecord.Notice4;
|
|
|
|
|
|
e.Notice5 = serviceRecord.Notice5;
|
2025-01-28 15:16:58 +01:00
|
|
|
|
TotalKilometerPauschale += e.KilometerPauschale;
|
2023-03-14 18:12:07 +01:00
|
|
|
|
|
|
|
|
|
|
Entries.Add(e);
|
|
|
|
|
|
}
|
2020-07-07 16:09:48 +02:00
|
|
|
|
}
|
2021-01-29 14:37:43 +01:00
|
|
|
|
|
2021-02-02 23:40:30 +01:00
|
|
|
|
Entries = Entries.OrderBy(o => o.Datum).ToList();
|
2020-07-07 16:09:48 +02:00
|
|
|
|
}
|
2025-01-28 15:16:58 +01:00
|
|
|
|
private static decimal GetPreis(IList<Preis> 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;
|
|
|
|
|
|
}
|
2020-07-07 16:09:48 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public class KilometerauswertungsEntry
|
|
|
|
|
|
{
|
2021-02-02 23:23:05 +01:00
|
|
|
|
public DateTime? Datum { get; }
|
|
|
|
|
|
|
|
|
|
|
|
public DateTime? StartTime { get; }
|
|
|
|
|
|
|
|
|
|
|
|
public DateTime? EndTime { get; }
|
|
|
|
|
|
|
2022-11-09 09:44:24 +01:00
|
|
|
|
public String Notice { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
public String Notice2 { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
public String Notice3 { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
public String Notice4 { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
public String Notice5 { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-02-02 23:23:05 +01:00
|
|
|
|
public String TimeRange
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
String v = "";
|
|
|
|
|
|
if (StartTime.HasValue)
|
|
|
|
|
|
{
|
|
|
|
|
|
v = String.Format("{0:HH:mm}", StartTime);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (EndTime.HasValue)
|
|
|
|
|
|
{
|
|
|
|
|
|
v += String.Format("- {0:HH:mm}", EndTime);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return v;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2020-07-07 16:09:48 +02:00
|
|
|
|
|
2021-01-29 14:37:43 +01:00
|
|
|
|
public double DistanceInMeters { get; }
|
2020-07-07 16:09:48 +02:00
|
|
|
|
|
2025-01-28 15:16:58 +01:00
|
|
|
|
public double KilometerPauschale { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
public String Custom1 { get; set; }
|
|
|
|
|
|
|
2020-07-07 16:09:48 +02:00
|
|
|
|
public string EmployeeName { get; }
|
|
|
|
|
|
|
2021-02-02 23:40:30 +01:00
|
|
|
|
public KilometerauswertungsEntry(DateTime? start, DateTime? end, double distanceInMeters, string employeeName)
|
2020-07-07 16:09:48 +02:00
|
|
|
|
{
|
2021-02-02 23:23:05 +01:00
|
|
|
|
if (start.HasValue)
|
|
|
|
|
|
{
|
|
|
|
|
|
Datum = start;
|
|
|
|
|
|
|
|
|
|
|
|
if (start.Value.Second == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
StartTime = start;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (end.HasValue && end.Value.Second == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
EndTime = end;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-07-07 16:09:48 +02:00
|
|
|
|
DistanceInMeters = distanceInMeters;
|
|
|
|
|
|
EmployeeName = employeeName;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|