using System; using System.Collections.Generic; using System.Linq; using BeWo.Data.Entities; using BeWo.Report.ReportObjects; using BeWo.Service.Dienstplanung; namespace Biotop { public class CustomMitarbeiterstundenkontoBerechnung : MitarbeiterstundenkontoBerechnung { public override bool ShouldCreateDayDetails() { return true; } public override MitarbeiterstundenkontoRO.DayDetail CreateDayDetail(DateTime date, MitarbeiterstundenkontoRO.EmployeeDetail ed) { if (date.Date < new DateTime(2024, 01, 01)) return base.CreateDayDetail(date, ed); var dd = base.CreateDayDetail(date, ed); dd.MaxHoursUntilBreak = 6; dd.MaxHoursUntilBreak2 = 9; dd.BreakMinutes = 30; dd.BreakMinutes2 = 15; return dd; } public override bool AddServiceRecordToDuration(StundenkontoServiceRecord item) { if (item.Start.Date < new DateTime(2024, 01, 01)) return base.AddServiceRecordToDuration(item); if (item.ServiceDescription != null && item.ServiceDescription.Category != null) { if (item.ServiceDescription.Category.Name.ToLower().Contains("arbeitszeit")/* && !item.ServiceDescription.Name.ToLower().Contains("bürozeit")*/) { return true; } } return false; } //protected override decimal GetDuration(StundenkontoServiceRecord sr, MitarbeiterstundenkontoRO.EmployeeDetail ed) //{ // var duration = base.GetDuration(sr, ed); // if (sr.ServiceDescription.Name.ToLower().Contains("bürozeit")) // duration = 0; // return duration; //} protected override ServiceRecordSummary BerechneStunden(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList groupFilteredRecords, DateTime berichtsAnfang, DateTime berichtsEnde) { decimal flsGesamt = 0; decimal arbeitszeit = 0; var sum = new ServiceRecordSummary(); sum.RecordsImBerichtszeitraum = new List(); //base.CorrectOverlappingTimes(groupFilteredRecords); foreach (var item in groupFilteredRecords) { if (!IsServiceRecordFehlzeit(item)) { if (item.Start >= berichtsAnfang && item.Start < berichtsEnde) { //if (AddServiceRecordToDuration(item)) //{ decimal duration = 0; if (item.GroupRoundedDuration.HasValue) { duration = item.GroupRoundedDuration.Value; } else { duration = item.RoundedDuration; } if (item.ServiceDescription != null && item.ServiceDescription.Category != null) { if (item.ServiceDescription.Category.Name.ToLower().Contains("arbeitszeit") /*&& !item.ServiceDescription.Name.ToLower().Contains("bürozeit")*/ && item.Start.Date >= new DateTime(2024, 01, 01)) { if (item.ServiceDescription.Name.ToLower().Contains("bürozeit")) { arbeitszeit += 0; empDetail.Custom1 += duration / 60; } else arbeitszeit += duration; } else if (item.Start.Date < new DateTime(2024, 01, 01)) { arbeitszeit += duration; } else if (item.ServiceDescription.Category.IsBillable) { flsGesamt += duration; } } sum.RecordsImBerichtszeitraum.Add(item); } } } sum.IstAbrechenbar = flsGesamt; sum.IstNichtAbrechenbar = arbeitszeit - flsGesamt; return sum; } } }