Files
BeWoPlaner/ReportImp/LebenshilfeKoblenz/CustomerMitarbeiterstundenkontoBerechnung.cs

260 lines
9.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using BeWo.Data.Entities;
using BeWo.Report.ReportObjects;
using BS.Shared.Core;
using BeWo.Service.Dienstplanung;
namespace LebenshilfeKoblenz
{
public class CustomerMitarbeiterstundenkontoBerechnung : MitarbeiterstundenkontoBerechnung
{
public override MitarbeiterstundenkontoRO.DayDetail CreateDayDetail(DateTime date, MitarbeiterstundenkontoRO.EmployeeDetail ed)
{
var dd = base.CreateDayDetail(date, ed);
dd.MaxHoursUntilBreak = 0;
dd.BreakMinutes = 0;
dd.MaxHoursUntilBreak2 = 0;
dd.BreakMinutes2 = 0;
return dd;
}
// public virtual IList<MitarbeiterstundenkontoRO.DayDetail> CreateDayDetails(DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList<StundenkontoServiceRecord> recordsAll)
// {
// Dictionary<int, MitarbeiterstundenkontoRO.DayDetail> dayToDetail = new Dictionary<int, MitarbeiterstundenkontoRO.DayDetail>();
// for (int i = berichtStart.Day; i <= berichtEnde.AddDays(-1).Day; i++)
// {
// MitarbeiterstundenkontoRO.DayDetail dd = CreateDayDetail(new DateTime(berichtStart.Year, berichtStart.Month, i), ed);
// dayToDetail.Add(i, dd);
// }
// foreach (var sr in recordsAll)
// {
// if (sr.Start.HasValue && sr.Start >= berichtStart && sr.Start < berichtEnde && sr.End.HasValue)
// {
// var dd = dayToDetail[sr.Start.Value.Day];
// if (!IsServiceRecordFehlzeit(sr) && AddServiceRecordToDuration(sr))
// {
// decimal duration = GetDurationCustom(sr);
// dd.MinutesTotal += duration;
// if (dd.ServiceRecords == null)
// dd.ServiceRecords = new List<StundenkontoServiceRecord>();
// dd.ServiceRecords.Add(sr);
// CalculateSpecialHours(dd, sr, duration);
// }
// }
// }
// //Berechne von bis Zeiten
// foreach (var ddKeyValue in dayToDetail)
// {
// var dd = ddKeyValue.Value;
// if (dd.ZusammenhaengendeZeitraeume == null)
// {
// dd.ZusammenhaengendeZeitraeume = new List<DateTimeSpan>();
// }
// if (dd.ServiceRecords != null)
// {
// var orderedList = dd.ServiceRecords.OrderBy(i => i.Start);
// DateTime lastEnd = DateTime.MinValue;
// var gapCount = -1;
// foreach (var sr in orderedList)
// {
// decimal duration = GetDurationCustom(sr);
// DateTime dtEnd = sr.Start.Value.AddMinutes((double)duration);
// if (sr.Start > lastEnd)
// {
// gapCount++;
// }
// if (dtEnd > lastEnd)
// {
// lastEnd = dtEnd;
// }
// DateTimeSpan currentSpan = null;
// if (gapCount + 1 > dd.ZusammenhaengendeZeitraeume.Count)
// {
// currentSpan = new DateTimeSpan();
// currentSpan.StartDateTime = DateTime.MaxValue;
// currentSpan.EndDateTime = DateTime.MinValue;
// dd.ZusammenhaengendeZeitraeume.Add(currentSpan);
// }
// else
// {
// currentSpan = dd.ZusammenhaengendeZeitraeume[gapCount];
// }
// if (sr.Start < currentSpan.StartDateTime)
// {
// currentSpan.StartDateTime = sr.Start.Value;
// }
// if (dtEnd > currentSpan.EndDateTime)
// {
// currentSpan.EndDateTime = dtEnd;
// }
// if (gapCount == 0)
// {
// if (!dd.StartDateTime1.HasValue || sr.Start < dd.StartDateTime1)
// {
// dd.StartDateTime1 = sr.Start;
// }
// if (!dd.EndDateTime1.HasValue || dtEnd > dd.EndDateTime1)
// {
// dd.EndDateTime1 = dtEnd;
// }
// }
// else if (gapCount == 1)
// {
// if (!dd.StartDateTime2.HasValue || sr.Start < dd.StartDateTime2)
// {
// dd.StartDateTime2 = sr.Start;
// }
// if (!dd.EndDateTime2.HasValue || dtEnd > dd.EndDateTime2)
// {
// dd.EndDateTime2 = dtEnd;
// }
// }
// else if (gapCount == 2)
// {
// if (!dd.StartDateTime3.HasValue || sr.Start < dd.StartDateTime3)
// {
// dd.StartDateTime3 = sr.Start;
// }
// if (!dd.EndDateTime3.HasValue || dtEnd > dd.EndDateTime3)
// {
// dd.EndDateTime3 = dtEnd;
// }
// }
// else
// {
// if (!dd.StartDateTime4.HasValue || sr.Start < dd.StartDateTime4)
// {
// dd.StartDateTime4 = sr.Start;
// }
// if (!dd.EndDateTime4.HasValue || dtEnd > dd.EndDateTime4)
// {
// dd.EndDateTime4 = dtEnd;
// }
// }
// }
// }
// }
// return dayToDetail.Values.OrderBy(dd => dd.Date).ToList();
// }
//private decimal GetDurationCustom(StundenkontoServiceRecord sr)
//{
// decimal duration = 0;
// if (sr.GroupRoundedDuration.HasValue)
// {
// duration = sr.GroupRoundedDuration.Value;
// }
// else
// {
// duration = sr.RoundedDuration;
// }
// return duration;
//}
public override bool ShouldCreateDayDetails()
{
return true;
}
public override bool AddServiceRecordToDuration(StundenkontoServiceRecord item)
{
if (item.ServiceDescription != null && item.ServiceDescription.Category != null)
{
if (item.ServiceDescription.Category.Name == "Arbeitszeiterfassung")
{
return true;
}
}
return false;
}
public override bool IsUrlaubAbsenceTime(AbsenceTime absenceTime)
{
if (!IsKrankheitAbsenceTime(absenceTime))
return true;
return false;
}
protected override ServiceRecordSummary BerechneStunden(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList<StundenkontoServiceRecord> groupFilteredRecords, DateTime berichtsAnfang,
DateTime berichtsEnde)
{
decimal flsGesamt = 0;
decimal arbeitszeit = 0;
var sum = new ServiceRecordSummary();
sum.RecordsImBerichtszeitraum = new List<StundenkontoServiceRecord>();
//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.IsBillable)
{
flsGesamt += duration;
}
else if (item.ServiceDescription.Category.Name == "Arbeitszeiterfassung")
{
arbeitszeit += duration;
}
}
sum.RecordsImBerichtszeitraum.Add(item);
}
}
}
sum.IstAbrechenbar = flsGesamt;
sum.IstNichtAbrechenbar = arbeitszeit - flsGesamt;
return sum;
}
}
}