Files
BeWoPlaner/ReportImp/ChristinaFrommen/CustomMitarbeiterstundenkontoBerechnung.cs

121 lines
4.6 KiB
C#

using System;
using System.Collections.Generic;
using BeWo.Data.Entities;
using BeWo.Report.ReportObjects;
using BeWo.Service.Configuration;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BeWo.Service.Dienstplanung;
namespace ChristinaFrommen
{
public class CustomMitarbeiterStundenkontoBerechnung : MitarbeiterstundenkontoBerechnung
{
public override List<DateTime> GetFeiertage(int year)
{
var feiertage = base.GetFeiertage(year);
feiertage.Add(new DateTime(year, 12, 31));
return feiertage;
}
public override decimal GetFeiertagsFaktor(DateTime start)
{
if (start.Month == 12 && (start.Day == 24 || start.Day == 31))
return 0.5m;
else
return base.GetFeiertagsFaktor(start);
}
public override bool ShouldCreateDayDetails()
{
return true;
}
public override MitarbeiterstundenkontoRO.DayDetail CreateDayDetail(DateTime date, MitarbeiterstundenkontoRO.EmployeeDetail ed)
{
var dd = base.CreateDayDetail(date, ed);
dd.MaxHoursUntilBreak = null;
dd.MaxHoursUntilBreak2 = null;
dd.BreakMinutes = null;
dd.BreakMinutes2 = null;
return dd;
}
protected override ServiceRecordSummary BerechneStunden(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList<StundenkontoServiceRecord> groupFilteredRecords, DateTime berichtsAnfang,
DateTime berichtsEnde)
{
var sum = new ServiceRecordSummary();
sum.RecordsImBerichtszeitraum = new List<StundenkontoServiceRecord>();
var settings = AppSettings.CreateSettings();
empDetail.ServiceRecordsInSelectedTimeSpan = new List<StundenkontoServiceRecord>();
foreach (var item in groupFilteredRecords)
{
if (!IsServiceRecordFehlzeit(item))
{
if (item.Start >= berichtsAnfang && item.Start < berichtsEnde)
{
//String test = String.Format("{0:dd.MM.yyyy HH:mm}, {1:0} Minuten, {2}, {3}", item.Start, item.RoundedDuration, item.ServiceDescription.Name, item.Notice);
HandleServiceRecord(empDetail, item);
if (AddServiceRecordToDuration(item))
{
empDetail.ServiceRecordsInSelectedTimeSpan.Add(item);
String test = String.Format("{0:dd.MM. HH:mm} - {1:HH:mm}, {2}", item.Start, item.End, item.RoundedDuration);
decimal duration = 0;
decimal durationNA = 0;
if (item.GroupRoundedDuration.HasValue)
{
duration = item.GroupRoundedDuration.Value;
}
else
{
if (settings.ShowRoundedDurationInEmployeeAnalysis)
{
duration = item.RoundedDuration;
}
else
{
duration = (decimal)item.End.Subtract(item.Start).TotalMinutes;
}
}
if (item.ServiceDescription.Name.Contains("Fehlkontakt"))
{
durationNA = duration * 0.2m;
duration *= 0.8m;
}
if (item.ServiceDescription != null &&
item.ServiceDescription.Category != null &&
item.ServiceDescription.Category.IsBillable)
{
sum.IstAbrechenbar += duration;
sum.IstNichtAbrechenbar += durationNA;
}
else
sum.IstNichtAbrechenbar += duration;
if (durationNA > 0)
{
int test2 = 0;
}
}
sum.RecordsImBerichtszeitraum.Add(item);
}
}
}
return sum;
}
}
}