260 lines
9.5 KiB
C#
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;
|
|
}
|
|
|
|
}
|
|
}
|