Performance Verbesserungen Urlaubskonto/Stundenkonto
This commit is contained in:
@@ -1,19 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
using BeWo.Report;
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Data.Entities;
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Report;
|
||||
using BeWo.Service.Configuration;
|
||||
using BeWo.Service.DCEntityMapper;
|
||||
using BeWo.Service.Dienstplanung;
|
||||
using BeWo.Service.Plugins;
|
||||
using BeWo.Service.ServiceImplementations;
|
||||
using BS.Shared;
|
||||
using BS.Shared.Core;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.Extensions;
|
||||
using DevExpress.XtraCharts.Native;
|
||||
using BS.Shared.DataContracts;
|
||||
using BeWo.Service.Plugins;
|
||||
using BeWo.Service.DCEntityMapper;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace BeWo.Report.ReportObjects
|
||||
{
|
||||
@@ -23,8 +25,9 @@ namespace BeWo.Report.ReportObjects
|
||||
private AppSettings appSettings;
|
||||
private const int ANZ_WOCHENTAGE = 5;
|
||||
protected VacationService vacationService;
|
||||
private IList<ServiceRecord> serviceRecordPool = null;
|
||||
|
||||
public MitarbeiterstundenkontoRO.EmployeeDetail AktuellBearbeitetesEmployeeDetail { get; set; }
|
||||
public MitarbeiterstundenkontoRO.EmployeeDetail AktuellBearbeitetesEmployeeDetail { get; set; }
|
||||
|
||||
|
||||
|
||||
@@ -68,6 +71,10 @@ namespace BeWo.Report.ReportObjects
|
||||
|
||||
public virtual void CreateReport(MitarbeiterstundenkontoRO ro)
|
||||
{
|
||||
if (ro.AllServiceRecords == null)
|
||||
{
|
||||
ro.BerechneServiceRecordPool();
|
||||
}
|
||||
CreateEmployeeDetails(ro);
|
||||
|
||||
CreateTeamDetails(ro);
|
||||
@@ -154,7 +161,7 @@ namespace BeWo.Report.ReportObjects
|
||||
}
|
||||
|
||||
ServiceRecordSummary summaryTotal = new ServiceRecordSummary();
|
||||
summaryTotal.RecordsImBerichtszeitraum = new List<ServiceRecord>();
|
||||
summaryTotal.RecordsImBerichtszeitraum = new List<StundenkontoServiceRecord>();
|
||||
|
||||
decimal pause1 = 0;
|
||||
decimal pause2 = 0;
|
||||
@@ -169,14 +176,14 @@ namespace BeWo.Report.ReportObjects
|
||||
decimal tatSollStdGesamt = 0;
|
||||
decimal azDurchFeiertage = 0;
|
||||
|
||||
IList<ServiceRecord> groupFilteredRecords = empDetail.AllServiceRecords;
|
||||
IList<StundenkontoServiceRecord> groupFilteredRecords = empDetail.AllServiceRecords;
|
||||
if (groupFilteredRecords == null)
|
||||
{
|
||||
IList<ServiceRecord> recordsAll = DAOFactory.SearchDAO.FindServiceRecords(emp.Oid, null);
|
||||
recordsAll = AnalysisServiceImp.FilterActiveServiceRecords(recordsAll);
|
||||
|
||||
//
|
||||
groupFilteredRecords = new List<ServiceRecord>();
|
||||
Debug.WriteLine($"Hole ServiceRecords with EmpOid: {emp.Oid}");
|
||||
IList<StundenkontoServiceRecord> recordsAll = ro.AllServiceRecords.Where(s => s.EmployeeOid.HasValue && s.EmployeeOid == emp.Oid).ToList();
|
||||
//IList<StundenkontoServiceRecord> recordsAll = new List<StundenkontoServiceRecord>();
|
||||
|
||||
groupFilteredRecords = new List<StundenkontoServiceRecord>();
|
||||
Dictionary<long, bool> groupBookingDict = new Dictionary<long, bool>();
|
||||
foreach (var item in recordsAll)
|
||||
{
|
||||
@@ -456,15 +463,15 @@ namespace BeWo.Report.ReportObjects
|
||||
BerechneUeberstundenBis(empDetail, groupFilteredRecords, ro.ReportStartDate, out ueberstundenVormonat,
|
||||
out alteExtraUeberstunden);
|
||||
|
||||
var alleDiensteintraege = DAOFactory.GenericDAO.GetAllActive<DienstEintrag>().Where(d => d.EmployeeOid == empDetail.Employee.Oid).ToList();
|
||||
var alleDienstvertretungen = DAOFactory.GenericDAO.GetAllActive<Dienstvertretung>().Where(d => d.EmployeeOid == empDetail.Employee.Oid).ToList();
|
||||
//var alleDiensteintraege = DAOFactory.GenericDAO.GetAllActive<DienstEintrag>().Where(d => d.EmployeeOid == empDetail.Employee.Oid).ToList();
|
||||
//var alleDienstvertretungen = DAOFactory.GenericDAO.GetAllActive<Dienstvertretung>().Where(d => d.EmployeeOid == empDetail.Employee.Oid).ToList();
|
||||
|
||||
decimal? ueberstundenVormonatFuerDienstplanung;
|
||||
decimal? alteExtraUeberstundenDienstplanung;
|
||||
empDetail.DienstplanIst += BerechneDienstplanIst(empDetail, alleDiensteintraege, alleDienstvertretungen, ro.ReportStartDate,
|
||||
out ueberstundenVormonatFuerDienstplanung, out alteExtraUeberstundenDienstplanung); // ABCDEF
|
||||
//decimal? ueberstundenVormonatFuerDienstplanung;
|
||||
//decimal? alteExtraUeberstundenDienstplanung;
|
||||
//empDetail.DienstplanIst += BerechneDienstplanIst(empDetail, alleDiensteintraege, alleDienstvertretungen, ro.ReportStartDate,
|
||||
// out ueberstundenVormonatFuerDienstplanung, out alteExtraUeberstundenDienstplanung); // ABCDEF
|
||||
|
||||
var dienstplanIstAlsStunden = empDetail.DienstplanIst / 60;
|
||||
//var dienstplanIstAlsStunden = empDetail.DienstplanIst / 60;
|
||||
|
||||
decimal extraStunden = 0;
|
||||
|
||||
@@ -495,9 +502,8 @@ namespace BeWo.Report.ReportObjects
|
||||
GetAbsenceTimeDaysWithWorkWeeks(emp, new DateTime(monatsAnfang.Year, 1, 1), monatsEnde, empDetail.ArbeitstageProWoche).TageUrlaub;
|
||||
|
||||
// Aktuellen Resturlaub berechnen
|
||||
var vs = PluginLoader.FindClass<VacationService>();
|
||||
// Darstellungsvariante, da das normale Urlaubskonto nur den Resturlaubsstand vom Ende des Jahres anzeigt.
|
||||
var konto = vs.BerechneUrlaubskontoZurDarstellung(MapperFactory.EmployeeDC_Employee.MapToNewDC(emp), ro.ReportStartDate.Year, berichtsEnde.AddDays(-1));
|
||||
// Darstellungsvariante, da das normale Urlaubskonto nur den Resturlaubsstand vom Ende des Jahres anzeigt.
|
||||
var konto = vacationService.BerechneUrlaubskontoZurDarstellung(emp, ro.ReportStartDate.Year, berichtsEnde.AddDays(-1));
|
||||
if (konto != null && konto.Count > 0)
|
||||
{
|
||||
var alleVertraglichenBudgets = konto
|
||||
@@ -505,7 +511,7 @@ namespace BeWo.Report.ReportObjects
|
||||
.ToList();
|
||||
|
||||
empDetail.Resturlaub = alleVertraglichenBudgets.Sum(b => Convert.ToDecimal(b.AnzahlTage));
|
||||
|
||||
|
||||
// Jeder Entry enthält den Zeitraum und die abzuziehenden Tage vom Gesamtbudget.
|
||||
foreach (var entry in konto)
|
||||
{
|
||||
@@ -520,7 +526,7 @@ namespace BeWo.Report.ReportObjects
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
CalculateEmployeeSalary(empDetail, berichtsAnfang, berichtsEnde);
|
||||
}
|
||||
|
||||
@@ -766,7 +772,7 @@ namespace BeWo.Report.ReportObjects
|
||||
}
|
||||
|
||||
|
||||
protected virtual AbsenceTimeHours GetAbwesenheitenDurchServiceRecords(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, Contract c, IList<ServiceRecord> groupFilteredRecords, DateTime berichtsAnfang, DateTime berichtsEnde)
|
||||
protected virtual AbsenceTimeHours GetAbwesenheitenDurchServiceRecords(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, Contract c, IList<StundenkontoServiceRecord> groupFilteredRecords, DateTime berichtsAnfang, DateTime berichtsEnde)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@@ -1002,7 +1008,7 @@ namespace BeWo.Report.ReportObjects
|
||||
{
|
||||
foreach (var sr in empDetail.ServiceRecordsInSelectedTimeSpan)
|
||||
{
|
||||
if (sr.ServiceDescription.Name != "Freizeit" || sr.ServiceDescription.ServiceCategory.Name != "Selbstzahler Freizeit")
|
||||
if (sr.ServiceDescription.Name != "Freizeit" || sr.ServiceDescription.Category.Name != "Selbstzahler Freizeit")
|
||||
{
|
||||
Contract con = empDetail.Employee.GetValidContractForDate(sr.Start);
|
||||
if (con != null && con.HourlyRate.HasValue)
|
||||
@@ -1017,21 +1023,21 @@ namespace BeWo.Report.ReportObjects
|
||||
empDetail.EmployeeSalaryByHours = salary;
|
||||
}
|
||||
|
||||
protected virtual ServiceRecordSummary BerechneStunden(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList<ServiceRecord> groupFilteredRecords, DateTime berichtsAnfang, DateTime berichtsEnde)
|
||||
protected virtual 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<ServiceRecord>();
|
||||
sum.RecordsImBerichtszeitraum = new List<StundenkontoServiceRecord>();
|
||||
|
||||
empDetail.ServiceRecordsInSelectedTimeSpan = new List<ServiceRecord>();
|
||||
empDetail.ServiceRecordsInSelectedTimeSpan = new List<StundenkontoServiceRecord>();
|
||||
|
||||
foreach (var item in groupFilteredRecords)
|
||||
{
|
||||
if (!IsServiceRecordFehlzeit(item))
|
||||
{
|
||||
if (item.Start.Value >= berichtsAnfang && item.Start.Value < berichtsEnde)
|
||||
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);
|
||||
|
||||
@@ -1047,7 +1053,7 @@ namespace BeWo.Report.ReportObjects
|
||||
{
|
||||
arbeitszeit += duration;
|
||||
}
|
||||
else if (item.ServiceDescription != null && item.ServiceDescription.ServiceCategory != null && item.ServiceDescription.ServiceCategory.IsBillable)
|
||||
else if (item.ServiceDescription != null && item.ServiceDescription.Category != null && item.ServiceDescription.Category.IsBillable)
|
||||
{
|
||||
flsGesamt += duration;
|
||||
}
|
||||
@@ -1059,8 +1065,8 @@ namespace BeWo.Report.ReportObjects
|
||||
decimal duration = GetDuration(item, empDetail);
|
||||
|
||||
if (item.ServiceDescription != null &&
|
||||
item.ServiceDescription.ServiceCategory != null &&
|
||||
item.ServiceDescription.ServiceCategory.IsBillable)
|
||||
item.ServiceDescription.Category != null &&
|
||||
item.ServiceDescription.Category.IsBillable)
|
||||
sum.IstAbrechenbar += duration;
|
||||
else
|
||||
sum.IstNichtAbrechenbar += duration;
|
||||
@@ -1072,9 +1078,9 @@ namespace BeWo.Report.ReportObjects
|
||||
{
|
||||
prozent = item.ServiceDescription.ProzentStundenkonto.Value;
|
||||
}
|
||||
else if (item.ServiceDescription.ServiceCategory.ProzentStundenkonto.HasValue)
|
||||
else if (item.ServiceDescription.Category.ProzentStundenkonto.HasValue)
|
||||
{
|
||||
prozent = item.ServiceDescription.ServiceCategory.ProzentStundenkonto.Value;
|
||||
prozent = item.ServiceDescription.Category.ProzentStundenkonto.Value;
|
||||
}
|
||||
if (prozent == 0)
|
||||
{
|
||||
@@ -1110,17 +1116,17 @@ namespace BeWo.Report.ReportObjects
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual decimal BerechneAutoPausen(IList<ServiceRecord> recordsThisMonth)
|
||||
public virtual decimal BerechneAutoPausen(IList<StundenkontoServiceRecord> recordsThisMonth)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
public virtual decimal BerechnePauseMinuten(IList<ServiceRecord> srList)
|
||||
public virtual decimal BerechnePauseMinuten(IList<StundenkontoServiceRecord> srList)
|
||||
{
|
||||
decimal pausenZeit = 0;
|
||||
|
||||
List<ServiceRecord> pausen = new List<ServiceRecord>();
|
||||
List<ServiceRecord> nichtpausen = new List<ServiceRecord>();
|
||||
List<StundenkontoServiceRecord> pausen = new List<StundenkontoServiceRecord>();
|
||||
List<StundenkontoServiceRecord> nichtpausen = new List<StundenkontoServiceRecord>();
|
||||
|
||||
foreach (var sr in srList)
|
||||
{
|
||||
@@ -1140,20 +1146,20 @@ namespace BeWo.Report.ReportObjects
|
||||
{
|
||||
var pauseSpan = new DateTimeSpan
|
||||
{
|
||||
StartDateTime = pause.Start.Value,
|
||||
EndDateTime = pause.Start.Value.AddMinutes((double)pause.RoundedDuration)
|
||||
StartDateTime = pause.Start,
|
||||
EndDateTime = pause.Start.AddMinutes((double)pause.RoundedDuration)
|
||||
};
|
||||
|
||||
var arbeitszeitSpan = new DateTimeSpan
|
||||
{
|
||||
StartDateTime = arbeitszeit.Start.Value,
|
||||
EndDateTime = arbeitszeit.Start.Value.AddMinutes((double)arbeitszeit.RoundedDuration)
|
||||
StartDateTime = arbeitszeit.Start,
|
||||
EndDateTime = arbeitszeit.Start.AddMinutes((double)arbeitszeit.RoundedDuration)
|
||||
};
|
||||
|
||||
if (arbeitszeit.GroupOid.HasValue)
|
||||
{
|
||||
arbeitszeitSpan.EndDateTime =
|
||||
arbeitszeit.Start.Value.AddMinutes((double)(arbeitszeit.GroupRoundedDuration ?? 0));
|
||||
arbeitszeit.Start.AddMinutes((double)(arbeitszeit.GroupRoundedDuration ?? 0));
|
||||
}
|
||||
|
||||
|
||||
@@ -1209,14 +1215,14 @@ namespace BeWo.Report.ReportObjects
|
||||
return newEmpList;
|
||||
}
|
||||
|
||||
public virtual void HandleServiceRecords(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList<ServiceRecord> groupFilteredRecords, Contract contract)
|
||||
public virtual void HandleServiceRecords(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList<StundenkontoServiceRecord> groupFilteredRecords, Contract contract)
|
||||
{
|
||||
//do nothing
|
||||
}
|
||||
|
||||
public virtual void CorrectOverlappingTimes(IList<ServiceRecord> serviceRecords)
|
||||
public virtual void CorrectOverlappingTimes(IList<StundenkontoServiceRecord> serviceRecords)
|
||||
{
|
||||
List<ServiceRecord> oldRecords = new List<ServiceRecord>();
|
||||
List<StundenkontoServiceRecord> oldRecords = new List<StundenkontoServiceRecord>();
|
||||
|
||||
foreach (var newRecord in serviceRecords)
|
||||
{
|
||||
@@ -1224,7 +1230,7 @@ namespace BeWo.Report.ReportObjects
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (newRecord.Start.HasValue && newRecord.Start.Value.Second > 0)
|
||||
if (newRecord.Start.Second > 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -1238,8 +1244,8 @@ namespace BeWo.Report.ReportObjects
|
||||
}
|
||||
var newSpan = new DateTimeSpan
|
||||
{
|
||||
StartDateTime = newRecord.Start.Value,
|
||||
EndDateTime = newRecord.Start.Value.AddMinutes((double)minuten)
|
||||
StartDateTime = newRecord.Start,
|
||||
EndDateTime = newRecord.Start.AddMinutes((double)minuten)
|
||||
};
|
||||
|
||||
foreach (var oldRecord in oldRecords)
|
||||
@@ -1250,12 +1256,12 @@ namespace BeWo.Report.ReportObjects
|
||||
}
|
||||
var oldSpan = new DateTimeSpan
|
||||
{
|
||||
StartDateTime = oldRecord.Start.Value,
|
||||
EndDateTime = oldRecord.Start.Value.AddMinutes((double)oldRecord.RoundedDuration)
|
||||
StartDateTime = oldRecord.Start,
|
||||
EndDateTime = oldRecord.Start.AddMinutes((double)oldRecord.RoundedDuration)
|
||||
};
|
||||
if (oldRecord.GroupRoundedDuration.HasValue)
|
||||
{
|
||||
oldSpan.EndDateTime = oldRecord.Start.Value.AddMinutes((double)oldRecord.GroupRoundedDuration);
|
||||
oldSpan.EndDateTime = oldRecord.Start.AddMinutes((double)oldRecord.GroupRoundedDuration);
|
||||
}
|
||||
|
||||
if (oldSpan.Overlaps(newSpan))
|
||||
@@ -1283,11 +1289,11 @@ namespace BeWo.Report.ReportObjects
|
||||
if (!isGroup)
|
||||
{
|
||||
newRecord.RoundedDuration =
|
||||
(decimal)newRecord.End.Value.Subtract(newRecord.Start.Value).TotalMinutes;
|
||||
(decimal)newRecord.End.Subtract(newRecord.Start).TotalMinutes;
|
||||
}
|
||||
else
|
||||
{
|
||||
newRecord.GroupRoundedDuration = (decimal)newRecord.End.Value.Subtract(newRecord.Start.Value).TotalMinutes;
|
||||
newRecord.GroupRoundedDuration = (decimal)newRecord.End.Subtract(newRecord.Start).TotalMinutes;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1304,11 +1310,11 @@ namespace BeWo.Report.ReportObjects
|
||||
if (!oldRecord.GroupRoundedDuration.HasValue)
|
||||
//if (!isGroup)
|
||||
{
|
||||
oldRecord.RoundedDuration = (decimal)oldRecord.End.Value.Subtract(oldRecord.Start.Value).TotalMinutes;
|
||||
oldRecord.RoundedDuration = (decimal)oldRecord.End.Subtract(oldRecord.Start).TotalMinutes;
|
||||
}
|
||||
else
|
||||
{
|
||||
oldRecord.GroupRoundedDuration = (decimal)oldRecord.End.Value.Subtract(oldRecord.Start.Value).TotalMinutes;
|
||||
oldRecord.GroupRoundedDuration = (decimal)oldRecord.End.Subtract(oldRecord.Start).TotalMinutes;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1320,12 +1326,12 @@ namespace BeWo.Report.ReportObjects
|
||||
}
|
||||
}
|
||||
|
||||
public virtual bool CorrectOverlappingTime(ServiceRecord newRecord)
|
||||
public virtual bool CorrectOverlappingTime(StundenkontoServiceRecord newRecord)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public virtual bool CorrectOverlappingTime(ServiceRecord record1, ServiceRecord record2)
|
||||
public virtual bool CorrectOverlappingTime(StundenkontoServiceRecord record1, StundenkontoServiceRecord record2)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -1396,7 +1402,7 @@ namespace BeWo.Report.ReportObjects
|
||||
return null;
|
||||
}
|
||||
|
||||
public virtual void HandleServiceRecord(MitarbeiterstundenkontoRO.EmployeeDetail emp, ServiceRecord item)
|
||||
public virtual void HandleServiceRecord(MitarbeiterstundenkontoRO.EmployeeDetail emp, StundenkontoServiceRecord item)
|
||||
{
|
||||
//do nothing
|
||||
}
|
||||
@@ -1416,7 +1422,7 @@ namespace BeWo.Report.ReportObjects
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual IList<MitarbeiterstundenkontoRO.DayDetail> CreateDayDetails(DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList<ServiceRecord> recordsAll)
|
||||
public virtual IList<MitarbeiterstundenkontoRO.DayDetail> CreateDayDetails(DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList<StundenkontoServiceRecord> recordsAll)
|
||||
{
|
||||
if (ShouldCreateDayDetailsForEachServiceRecord())
|
||||
{
|
||||
@@ -1433,13 +1439,9 @@ namespace BeWo.Report.ReportObjects
|
||||
|
||||
foreach (var sr in recordsAll)
|
||||
{
|
||||
if (sr.Start.HasValue && sr.Start >= berichtStart && sr.Start < berichtEnde && sr.End.HasValue)
|
||||
if (sr.Start >= berichtStart && sr.Start < berichtEnde)
|
||||
{
|
||||
if (sr.Start.Value.Year == 2023 && sr.Start.Value.Month == 10 && sr.Start.Value.Day == 3)
|
||||
{
|
||||
int test = 0;
|
||||
}
|
||||
var dd = dayToDetail[sr.Start.Value.Day];
|
||||
var dd = dayToDetail[sr.Start.Day];
|
||||
|
||||
if (!IsServiceRecordFehlzeit(sr) && AddServiceRecordToDuration(sr))
|
||||
{
|
||||
@@ -1448,7 +1450,7 @@ namespace BeWo.Report.ReportObjects
|
||||
TimeSpan tspan = TimeSpan.FromMinutes((double)dd.MinutesTotal);
|
||||
dd.TimeTotal = String.Format("{0:00}:{1:00}", tspan.Hours, tspan.Minutes);
|
||||
if (dd.ServiceRecords == null)
|
||||
dd.ServiceRecords = new List<ServiceRecord>();
|
||||
dd.ServiceRecords = new List<StundenkontoServiceRecord>();
|
||||
dd.ServiceRecords.Add(sr);
|
||||
|
||||
CalculateSpecialHours(dd, sr, duration);
|
||||
@@ -1474,14 +1476,14 @@ namespace BeWo.Report.ReportObjects
|
||||
|
||||
foreach (var sr in orderedList)
|
||||
{
|
||||
if (sr.Start.HasValue && sr.Start.Value.Hour == 0 && sr.Start.Value.Second > 0)
|
||||
if (sr.Start.Hour == 0 && sr.Start.Second > 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
decimal duration = GetDuration(sr, ed);
|
||||
|
||||
|
||||
DateTime dtEnd = sr.Start.Value.AddMinutes((double)duration);
|
||||
DateTime dtEnd = sr.Start.AddMinutes((double)duration);
|
||||
if (sr.Start > lastEnd)
|
||||
{
|
||||
gapCount++;
|
||||
@@ -1507,7 +1509,7 @@ namespace BeWo.Report.ReportObjects
|
||||
|
||||
if (sr.Start < currentSpan.StartDateTime)
|
||||
{
|
||||
currentSpan.StartDateTime = sr.Start.Value;
|
||||
currentSpan.StartDateTime = sr.Start;
|
||||
}
|
||||
if (dtEnd > currentSpan.EndDateTime)
|
||||
{
|
||||
@@ -1568,21 +1570,21 @@ namespace BeWo.Report.ReportObjects
|
||||
return dayToDetail.Values.OrderBy(dd => dd.Date).ToList();
|
||||
}
|
||||
|
||||
public virtual IList<MitarbeiterstundenkontoRO.DayDetail> CreateDayDetailsForEachServiceRecord(DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList<ServiceRecord> recordsAll)
|
||||
public virtual IList<MitarbeiterstundenkontoRO.DayDetail> CreateDayDetailsForEachServiceRecord(DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList<StundenkontoServiceRecord> recordsAll)
|
||||
{
|
||||
var details = new List<MitarbeiterstundenkontoRO.DayDetail>();
|
||||
|
||||
foreach (var sr in recordsAll)
|
||||
{
|
||||
if (sr.Start.HasValue && sr.Start >= berichtStart && sr.Start < berichtEnde && sr.End.HasValue)
|
||||
if (sr.Start >= berichtStart && sr.Start < berichtEnde)
|
||||
{
|
||||
if (sr.Start.Value.Day == 8)
|
||||
if (sr.Start.Day == 8)
|
||||
{
|
||||
int test = 0;
|
||||
}
|
||||
if (!IsServiceRecordFehlzeit(sr) && AddServiceRecordToDuration(sr))
|
||||
{
|
||||
var dd = CreateDayDetail(sr.Start.Value, ed);
|
||||
var dd = CreateDayDetail(sr.Start, ed);
|
||||
details.Add(dd);
|
||||
|
||||
decimal duration = GetDuration(sr, ed);
|
||||
@@ -1592,14 +1594,14 @@ namespace BeWo.Report.ReportObjects
|
||||
TimeSpan tspan = TimeSpan.FromMinutes((double)dd.MinutesTotal);
|
||||
dd.TimeTotal = String.Format("{0:00}:{1:00}", tspan.Hours, tspan.Minutes);
|
||||
if (dd.ServiceRecords == null)
|
||||
dd.ServiceRecords = new List<ServiceRecord>();
|
||||
dd.ServiceRecords = new List<StundenkontoServiceRecord>();
|
||||
dd.ServiceRecords.Add(sr);
|
||||
|
||||
dd.Date = sr.Start.Value;
|
||||
dd.Date = sr.Start;
|
||||
|
||||
if (sr.Start.Value.Second == 0)
|
||||
if (sr.Start.Second == 0)
|
||||
{
|
||||
DateTime dtEnd = sr.Start.Value.AddMinutes((double)duration);
|
||||
DateTime dtEnd = sr.Start.AddMinutes((double)duration);
|
||||
dd.StartDateTime1 = sr.Start;
|
||||
|
||||
dd.EndDateTime1 = dtEnd;
|
||||
@@ -1615,7 +1617,7 @@ namespace BeWo.Report.ReportObjects
|
||||
return details.OrderBy(dd => dd.Date).ToList();
|
||||
}
|
||||
|
||||
protected virtual decimal GetDuration(ServiceRecord sr, MitarbeiterstundenkontoRO.EmployeeDetail ed)
|
||||
protected virtual decimal GetDuration(StundenkontoServiceRecord sr, MitarbeiterstundenkontoRO.EmployeeDetail ed)
|
||||
{
|
||||
|
||||
foreach (var at in ed.Employee.AbsenceTimes)
|
||||
@@ -1660,13 +1662,13 @@ namespace BeWo.Report.ReportObjects
|
||||
}
|
||||
else
|
||||
{
|
||||
duration = (decimal)sr.End.Value.Subtract(sr.Start.Value).TotalMinutes;
|
||||
duration = (decimal)sr.End.Subtract(sr.Start).TotalMinutes;
|
||||
}
|
||||
}
|
||||
|
||||
if (UseServiceDescriptionPercentage())
|
||||
{
|
||||
decimal prozent = sr.ServiceDescription.ServiceCategory.ProzentStundenkonto ?? sr.ServiceDescription.ServiceCategory.ProzentAbrechnung;
|
||||
decimal prozent = sr.ServiceDescription.Category.ProzentStundenkonto ?? sr.ServiceDescription.Category.Percentage;
|
||||
|
||||
if (sr.ServiceDescription.ProzentStundenkonto.HasValue)
|
||||
{
|
||||
@@ -1681,9 +1683,9 @@ namespace BeWo.Report.ReportObjects
|
||||
{
|
||||
prozent = sr.ServiceDescription.ProzentStundenkonto.Value;
|
||||
}
|
||||
else if (sr.ServiceDescription.ServiceCategory.ProzentStundenkonto.HasValue)
|
||||
else if (sr.ServiceDescription.Category.ProzentStundenkonto.HasValue)
|
||||
{
|
||||
prozent = sr.ServiceDescription.ServiceCategory.ProzentStundenkonto.Value;
|
||||
prozent = sr.ServiceDescription.Category.ProzentStundenkonto.Value;
|
||||
}
|
||||
|
||||
|
||||
@@ -1695,42 +1697,42 @@ namespace BeWo.Report.ReportObjects
|
||||
}
|
||||
|
||||
//Mit "SpecialHours" sind Sonderzeiten wie Nachtzeiten oder Arbeitszeiten sonn- und feiertags gemeint. Da diese gesondert abgerechnet werden können.
|
||||
public virtual void CalculateSpecialHours(MitarbeiterstundenkontoRO.DayDetail dd, ServiceRecord sr, decimal duration)
|
||||
public virtual void CalculateSpecialHours(MitarbeiterstundenkontoRO.DayDetail dd, StundenkontoServiceRecord sr, decimal duration)
|
||||
{
|
||||
//Prüfe, ob Start oder Ende des Eintrags an einem Sonntag sind, dann die am Sonntag geleisteten Minuten berechnen
|
||||
//Todo: Bei mehrtägigen Einträgen prüfen, ob sie vor einem Sonntag anfangen und nach einem Sonntag enden. Unklar, ob das vorkommen kann und ob dann Sonntagszuschläge berechnet werden müssen
|
||||
if (sr.Start.Value.DayOfWeek == DayOfWeek.Sunday || sr.End.Value.DayOfWeek == DayOfWeek.Sunday)
|
||||
if (sr.Start.DayOfWeek == DayOfWeek.Sunday || sr.End.DayOfWeek == DayOfWeek.Sunday)
|
||||
{
|
||||
DateTime sonntag = sr.Start.Value.Date;
|
||||
if (sr.Start.Value.DayOfWeek != DayOfWeek.Sunday && sr.End.Value.DayOfWeek == DayOfWeek.Sunday)
|
||||
DateTime sonntag = sr.Start.Date;
|
||||
if (sr.Start.DayOfWeek != DayOfWeek.Sunday && sr.End.DayOfWeek == DayOfWeek.Sunday)
|
||||
{
|
||||
sonntag = sr.End.Value.Date;
|
||||
sonntag = sr.End.Date;
|
||||
}
|
||||
|
||||
var sonnatgsMinuten = GetOverlappingMinutes(sr.Start.Value, sr.End.Value, sonntag, sonntag.AddDays(1));
|
||||
var sonnatgsMinuten = GetOverlappingMinutes(sr.Start, sr.End, sonntag, sonntag.AddDays(1));
|
||||
dd.HoursSunday += (decimal)sonnatgsMinuten / 60;
|
||||
}
|
||||
//Prüfe, ob Start oder Ende des Eintrags an einem Feiertag sind, dann die am Feiertag geleisteten Minuten berechnen
|
||||
//Todo: Bei mehrtägigen Einträgen prüfen, ob sie vor einem Feiertag anfangen und nach einem Feiertag enden. Unklar, ob das vorkommen kann
|
||||
else if (IstFeiertag(sr.Start.Value) || IstFeiertag(sr.End.Value))
|
||||
else if (IstFeiertag(sr.Start) || IstFeiertag(sr.End))
|
||||
{
|
||||
var feiertagsMinuten = duration;
|
||||
DateTime feiertag = sr.Start.Value.Date;
|
||||
if (IstFeiertag(sr.Start.Value) && !IstFeiertag(sr.End.Value))
|
||||
DateTime feiertag = sr.Start.Date;
|
||||
if (IstFeiertag(sr.Start) && !IstFeiertag(sr.End))
|
||||
{
|
||||
feiertagsMinuten = (decimal) GetOverlappingMinutes(sr.Start.Value, sr.End.Value, feiertag, feiertag.AddDays(1));
|
||||
feiertagsMinuten = (decimal) GetOverlappingMinutes(sr.Start, sr.End, feiertag, feiertag.AddDays(1));
|
||||
}
|
||||
else if (!IstFeiertag(sr.Start.Value) && IstFeiertag(sr.End.Value))
|
||||
else if (!IstFeiertag(sr.Start) && IstFeiertag(sr.End))
|
||||
{
|
||||
feiertag = sr.End.Value.Date;
|
||||
feiertagsMinuten = (decimal) GetOverlappingMinutes(sr.Start.Value, sr.End.Value, feiertag, feiertag.AddDays(1));
|
||||
feiertag = sr.End.Date;
|
||||
feiertagsMinuten = (decimal) GetOverlappingMinutes(sr.Start, sr.End, feiertag, feiertag.AddDays(1));
|
||||
}
|
||||
dd.HoursHoliday += feiertagsMinuten / 60;
|
||||
}
|
||||
|
||||
if (sr.Start.Value.Second == 0 && dd.NightEnd.HasValue && dd.NightStart.HasValue)
|
||||
if (sr.Start.Second == 0 && dd.NightEnd.HasValue && dd.NightStart.HasValue)
|
||||
{
|
||||
var minuten = CheckNachtzeiten(sr.Start.Value, dd.NightStart.Value, dd.NightEnd.Value, (double)duration);
|
||||
var minuten = CheckNachtzeiten(sr.Start, dd.NightStart.Value, dd.NightEnd.Value, (double)duration);
|
||||
|
||||
if (minuten > 0)
|
||||
{
|
||||
@@ -2174,7 +2176,7 @@ namespace BeWo.Report.ReportObjects
|
||||
}
|
||||
|
||||
|
||||
public virtual bool AddServiceRecordToDuration(ServiceRecord item)
|
||||
public virtual bool AddServiceRecordToDuration(StundenkontoServiceRecord item)
|
||||
{
|
||||
if (Settings.ShowWorktime && Settings.EnableArbeitszeiterfassung)
|
||||
{
|
||||
@@ -2185,11 +2187,11 @@ namespace BeWo.Report.ReportObjects
|
||||
return true;
|
||||
}
|
||||
|
||||
public virtual bool IstArbeitszeit(ServiceRecord item)
|
||||
public virtual bool IstArbeitszeit(StundenkontoServiceRecord item)
|
||||
{
|
||||
if (item.ServiceDescription != null && item.ServiceDescription.ServiceCategory != null)
|
||||
if (item.ServiceDescription != null && item.ServiceDescription.Category != null)
|
||||
{
|
||||
if (item.ServiceDescription.Name.StartsWith("Arbeitszeit") || item.ServiceDescription.ServiceCategory.Name.StartsWith("Arbeitszeit")) //Arbeitszeit und Arbeitszeiterfassung etc.
|
||||
if (item.ServiceDescription.Name.StartsWith("Arbeitszeit") || item.ServiceDescription.Category.Name.StartsWith("Arbeitszeit")) //Arbeitszeit und Arbeitszeiterfassung etc.
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -2202,7 +2204,7 @@ namespace BeWo.Report.ReportObjects
|
||||
return 1;
|
||||
}
|
||||
|
||||
public virtual MitarbeiterstundenkontoRO.EmployeeDetail BerechneUeberstundenBis(MitarbeiterstundenkontoRO.EmployeeDetail edOrig, IList<ServiceRecord> records, DateTime monat, out decimal? ueberstunden, out decimal alteExtraUeberstunden)
|
||||
public virtual MitarbeiterstundenkontoRO.EmployeeDetail BerechneUeberstundenBis(MitarbeiterstundenkontoRO.EmployeeDetail edOrig, IList<StundenkontoServiceRecord> records, DateTime monat, out decimal? ueberstunden, out decimal alteExtraUeberstunden)
|
||||
{
|
||||
MitarbeiterstundenkontoRO.EmployeeDetail edTotal = new MitarbeiterstundenkontoRO.EmployeeDetail();
|
||||
|
||||
@@ -2218,7 +2220,7 @@ namespace BeWo.Report.ReportObjects
|
||||
if (c != null)
|
||||
{
|
||||
|
||||
Dictionary<String, IList<ServiceRecord>> srDict = CreateServiceRecordDictByDate(records);
|
||||
Dictionary<String, IList<StundenkontoServiceRecord>> srDict = CreateServiceRecordDictByDate(records);
|
||||
|
||||
DateTime start = c.EntryDate.HasValue ? c.EntryDate.Value : new DateTime(2011, 1, 1);
|
||||
if (BerechnungsStartdatum > start)
|
||||
@@ -2260,14 +2262,14 @@ namespace BeWo.Report.ReportObjects
|
||||
if (contractEnd < DateTime.MaxValue && contractEnd.Date.AddDays(1) < ende)
|
||||
ende = contractEnd.Date.AddDays(1);
|
||||
|
||||
IList<ServiceRecord> recordsThisMonth = new List<ServiceRecord>();
|
||||
IList<StundenkontoServiceRecord> recordsThisMonth = new List<StundenkontoServiceRecord>();
|
||||
String key = String.Format("{0:yyyyMM}", start);
|
||||
|
||||
if (srDict.ContainsKey(key))
|
||||
{
|
||||
foreach (var item in srDict[key])
|
||||
{
|
||||
if (item.Start.HasValue && item.Start >= start && item.Start < ende)
|
||||
if (item.Start >= start && item.Start < ende)
|
||||
{
|
||||
if (AddServiceRecordToDuration(item))
|
||||
{
|
||||
@@ -2278,8 +2280,8 @@ namespace BeWo.Report.ReportObjects
|
||||
minutenMonat += duration;
|
||||
|
||||
if (item.ServiceDescription != null &&
|
||||
item.ServiceDescription.ServiceCategory != null &&
|
||||
item.ServiceDescription.ServiceCategory.IsBillable)
|
||||
item.ServiceDescription.Category != null &&
|
||||
item.ServiceDescription.Category.IsBillable)
|
||||
flsIst += duration;
|
||||
else
|
||||
mittelbarIst += duration;
|
||||
@@ -2783,35 +2785,34 @@ namespace BeWo.Report.ReportObjects
|
||||
return stunden;
|
||||
}
|
||||
|
||||
public virtual Dictionary<string, IList<ServiceRecord>> CreateServiceRecordDictByDate(IList<ServiceRecord> records)
|
||||
public virtual Dictionary<string, IList<StundenkontoServiceRecord>> CreateServiceRecordDictByDate(IList<StundenkontoServiceRecord> records)
|
||||
{
|
||||
var dict = new Dictionary<string, IList<ServiceRecord>>();
|
||||
var dict = new Dictionary<string, IList<StundenkontoServiceRecord>>();
|
||||
foreach (var item in records)
|
||||
{
|
||||
if (!IsServiceRecordFehlzeit(item))
|
||||
{
|
||||
if (item.Start.HasValue)
|
||||
{
|
||||
String key = String.Format("{0:yyyyMM}", item.Start.Value);
|
||||
|
||||
String key = String.Format("{0:yyyyMM}", item.Start);
|
||||
|
||||
IList<ServiceRecord> list;
|
||||
if (!dict.ContainsKey(key))
|
||||
{
|
||||
list = new List<ServiceRecord>();
|
||||
dict.Add(key, list);
|
||||
}
|
||||
else
|
||||
{
|
||||
list = dict[key];
|
||||
}
|
||||
list.Add(item);
|
||||
IList<StundenkontoServiceRecord> list;
|
||||
if (!dict.ContainsKey(key))
|
||||
{
|
||||
list = new List<StundenkontoServiceRecord>();
|
||||
dict.Add(key, list);
|
||||
}
|
||||
else
|
||||
{
|
||||
list = dict[key];
|
||||
}
|
||||
list.Add(item);
|
||||
|
||||
}
|
||||
}
|
||||
return dict;
|
||||
}
|
||||
|
||||
public virtual decimal GetAdditionalHours(IList<MitarbeiterstundenkontoRO.DayDetail> days, DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList<ServiceRecord> recordsAll)
|
||||
public virtual decimal GetAdditionalHours(IList<MitarbeiterstundenkontoRO.DayDetail> days, DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList<StundenkontoServiceRecord> recordsAll)
|
||||
{
|
||||
decimal addHours = 0;
|
||||
|
||||
@@ -3497,13 +3498,13 @@ namespace BeWo.Report.ReportObjects
|
||||
return GetAbsenceTimeDaysWithWorkWeeks(absenceTimes, start, end, ANZ_WOCHENTAGE);
|
||||
}
|
||||
|
||||
public virtual decimal? GetFehlzeiten(IList<ServiceRecord> records, DateTime monat)
|
||||
public virtual decimal? GetFehlzeiten(IList<StundenkontoServiceRecord> records, DateTime monat)
|
||||
{
|
||||
|
||||
return GetFehlzeiten(records, monat, monat.AddMonths(1));
|
||||
}
|
||||
|
||||
public virtual decimal? GetFehlzeiten(IList<ServiceRecord> records, DateTime start, DateTime ende)
|
||||
public virtual decimal? GetFehlzeiten(IList<StundenkontoServiceRecord> records, DateTime start, DateTime ende)
|
||||
{
|
||||
decimal? stunden = null;
|
||||
decimal minuten = 0;
|
||||
@@ -3513,7 +3514,7 @@ namespace BeWo.Report.ReportObjects
|
||||
{
|
||||
if (IsServiceRecordFehlzeit(item))
|
||||
{
|
||||
if (item.Start.Value >= start && item.Start.Value < ende)
|
||||
if (item.Start >= start && item.Start < ende)
|
||||
{
|
||||
if (item.GroupRoundedDuration.HasValue)
|
||||
{
|
||||
@@ -3527,7 +3528,7 @@ namespace BeWo.Report.ReportObjects
|
||||
}
|
||||
else
|
||||
{
|
||||
minuten += (decimal)item.End.Value.Subtract(item.Start.Value).TotalMinutes;
|
||||
minuten += (decimal)item.End.Subtract(item.Start).TotalMinutes;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3684,9 +3685,9 @@ namespace BeWo.Report.ReportObjects
|
||||
return VacationService.GetOsterSonntag(year);
|
||||
}
|
||||
|
||||
public virtual bool IsServiceRecordFehlzeit(ServiceRecord sr)
|
||||
public virtual bool IsServiceRecordFehlzeit(StundenkontoServiceRecord sr)
|
||||
{
|
||||
if (sr.ServiceDescription != null && sr.ServiceDescription.ServiceCategory != null && !String.IsNullOrEmpty(sr.ServiceDescription.ServiceCategory.Name) && sr.ServiceDescription.ServiceCategory.Name.ToLower().IndexOf("fehlzeit") >= 0)
|
||||
if (sr.ServiceDescription != null && sr.ServiceDescription.Category != null && !String.IsNullOrEmpty(sr.ServiceDescription.Category.Name) && sr.ServiceDescription.Category.Name.ToLower().IndexOf("fehlzeit") >= 0)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
@@ -3772,6 +3773,6 @@ namespace BeWo.Report.ReportObjects
|
||||
|
||||
public decimal IstNichtAbrechenbar { get; set; }
|
||||
|
||||
public IList<ServiceRecord> RecordsImBerichtszeitraum { get; set; }
|
||||
public IList<StundenkontoServiceRecord> RecordsImBerichtszeitraum { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
using BeWo.Report;
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Data.Entities;
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Report;
|
||||
using BeWo.Service.Configuration;
|
||||
using BeWo.Service.Dienstplanung;
|
||||
using BeWo.Service.Plugins;
|
||||
using BS.Shared;
|
||||
using BS.Shared.Core;
|
||||
using BS.Shared.Extensions;
|
||||
using BeWo.Service.Plugins;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace BeWo.Report.ReportObjects
|
||||
{
|
||||
@@ -20,6 +21,8 @@ namespace BeWo.Report.ReportObjects
|
||||
DateTime start = ro.ReportStartDate;
|
||||
|
||||
var list = new List<MitarbeiterstundenkontoRO>();
|
||||
List<StundenkontoServiceRecord> allServiceRecords = null;
|
||||
|
||||
while (start < ro.ReportEndDate)
|
||||
{
|
||||
DateTime monatStart = new DateTime(start.Year, start.Month, 1);
|
||||
@@ -27,6 +30,17 @@ namespace BeWo.Report.ReportObjects
|
||||
|
||||
MitarbeiterstundenkontoRO roMonat = MitarbeiterstundenkontoRO.Create(ro.EmployeeOid, ro.TeamOids,
|
||||
monatStart, monatEnde, ro.EmployeeOids);
|
||||
|
||||
if (allServiceRecords == null)
|
||||
{
|
||||
roMonat.BerechneServiceRecordPool();
|
||||
allServiceRecords = roMonat.AllServiceRecords;
|
||||
}
|
||||
else
|
||||
{
|
||||
roMonat.AllServiceRecords = allServiceRecords;
|
||||
}
|
||||
|
||||
var b = CreateMitarbeiterstundenkontoBerechnung();
|
||||
b.CreateReport(roMonat);
|
||||
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using BS.Shared.Core;
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Data.Entities;
|
||||
using BeWo.Service.DCEntityMapper;
|
||||
using BeWo.Service.Dienstplanung;
|
||||
using BS.Shared;
|
||||
using BS.Shared.Core;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.Extensions;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
|
||||
namespace BeWo.Report.ReportObjects
|
||||
{
|
||||
@@ -15,8 +17,8 @@ namespace BeWo.Report.ReportObjects
|
||||
{
|
||||
List<EmployeeDetail> _EmployeeDetailList = new List<EmployeeDetail>();
|
||||
List<TeamDetail> _TeamDetailList = new List<TeamDetail>();
|
||||
|
||||
public DateTime ReportStartDate { get; set; }
|
||||
List<StundenkontoServiceRecord> _AllServiceRecords = null;
|
||||
public DateTime ReportStartDate { get; set; }
|
||||
public DateTime ReportEndDate { get; set; }
|
||||
public decimal SollGesamt { get; set; }
|
||||
|
||||
@@ -50,7 +52,13 @@ namespace BeWo.Report.ReportObjects
|
||||
set { this._TeamDetailList = value; }
|
||||
}
|
||||
|
||||
public static MitarbeiterstundenkontoRO Create(long? employeeOid, IList<long> teamOids, DateTime startDate, DateTime endDate, IEnumerable<long> employeeOids)
|
||||
public List<StundenkontoServiceRecord> AllServiceRecords
|
||||
{
|
||||
get { return this._AllServiceRecords; }
|
||||
set { this._AllServiceRecords = value; }
|
||||
}
|
||||
|
||||
public static MitarbeiterstundenkontoRO Create(long? employeeOid, IList<long> teamOids, DateTime startDate, DateTime endDate, IEnumerable<long> employeeOids)
|
||||
{
|
||||
Team team = null;
|
||||
|
||||
@@ -171,7 +179,73 @@ namespace BeWo.Report.ReportObjects
|
||||
return ro;
|
||||
}
|
||||
|
||||
|
||||
public void BerechneServiceRecordPool()
|
||||
{
|
||||
_AllServiceRecords = new List<StundenkontoServiceRecord>();
|
||||
|
||||
var allServiceDescs = DAOFactory.GenericDAO.GetAll<ServiceDescription>();
|
||||
Dictionary<long, ServiceDescriptionDC> serviceDict = new Dictionary<long, ServiceDescriptionDC>();
|
||||
foreach (var item in allServiceDescs)
|
||||
{
|
||||
serviceDict.Add(item.Oid.Value, MapperFactory.ServiceDescriptionDC_ServiceDescription.MapToNewDC(item));
|
||||
}
|
||||
|
||||
String sql = "SELECT Oid, StartDate, EndDate, RoundedDuration, GroupEmployeeCount, GroupPersonCount, GroupRoundedDuration, GroupOid, DistanceInMeter, Betrag, CostBearer2SupportConceptOid, ServiceDescriptionOid, CustomerOid, EmployeeOid FROM servicerecord";
|
||||
sql += String.Format(" WHERE EmployeeOid in ({0})", String.Join(",", EmployeeDetailList.Select(e => e.Employee.Oid.Value)));
|
||||
sql += String.Format(" AND (CustomerOid is null OR CustomerOID not in (select oid from customer where isactive = 0))");
|
||||
sql += String.Format(" AND (CostBearer2SupportConceptOid is null OR CostBearer2SupportConceptOid not in (select c2s.oid from CostBearer2SupportConcept c2s join supportconcept sc on c2s.SupportConceptOid = sc.Oid where sc.isactive = 0))");
|
||||
var sqlresult = DAOFactory.SearchDAO.GetSqlResult(sql);
|
||||
//
|
||||
//update customer set debitornumber = '5' + debitornumber where debitornumber is not null
|
||||
foreach (object[] srRow in sqlresult)
|
||||
{
|
||||
var sr = CreateServiceRecord(srRow, serviceDict);
|
||||
_AllServiceRecords.Add(sr);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static StundenkontoServiceRecord CreateServiceRecord(object[] sqlRow, Dictionary<long, ServiceDescriptionDC> serviceDict)
|
||||
{
|
||||
var dc = new StundenkontoServiceRecord();
|
||||
//"SELECT Oid, StartDate, EndDate, RoundedDuration, GroupEmployeeCount, GroupPersonCount, GroupRoundedDuration, GroupOid, DistanceInMeter, Betrag, CostBearer2SupportConceptOid, ServiceDescriptionOid, CustomerOid, EmployeeOid FROM servicerecord";
|
||||
dc.ServiceRecordOid = (long?)sqlRow[0];
|
||||
dc.Start = (DateTime)sqlRow[1];
|
||||
dc.End = (DateTime)sqlRow[2];
|
||||
dc.RoundedDuration = (decimal)sqlRow[3];
|
||||
dc.GroupEmployeeCount = (int?)sqlRow[4];
|
||||
dc.GroupPersonCount = (int?)sqlRow[5];
|
||||
dc.GroupRoundedDuration = (decimal?)sqlRow[6];
|
||||
dc.GroupOid = (long?)sqlRow[7];
|
||||
|
||||
var test = sqlRow[8];
|
||||
if (test != null)
|
||||
{
|
||||
decimal meter = 0;
|
||||
|
||||
if (Decimal.TryParse(test.ToString(), out meter))
|
||||
{
|
||||
dc.DistanceInMeter = meter;
|
||||
}
|
||||
}
|
||||
dc.Betrag = (decimal?)sqlRow[9];
|
||||
|
||||
dc.CostBearer2SupportConceptOid = (long?)sqlRow[10];
|
||||
|
||||
|
||||
long? sdOid = (long?)sqlRow[11];
|
||||
if (sdOid.HasValue && serviceDict.ContainsKey(sdOid.Value))
|
||||
{
|
||||
dc.ServiceDescription = serviceDict[sdOid.Value];
|
||||
}
|
||||
|
||||
dc.CustomerOid = (long?)sqlRow[12];
|
||||
dc.EmployeeOid = (long?)sqlRow[13];
|
||||
|
||||
return dc;
|
||||
|
||||
}
|
||||
|
||||
private static Contract GetNextValidContractForDate(DateTime dt, Employee emp)
|
||||
{
|
||||
Contract contractNextToStartDate = emp.GetValidContractForDate(dt);
|
||||
@@ -277,9 +351,9 @@ namespace BeWo.Report.ReportObjects
|
||||
|
||||
public IList<DayDetail> Days { get; set; }
|
||||
|
||||
public IList<ServiceRecord> AllServiceRecords { get; set; }
|
||||
public IList<StundenkontoServiceRecord> AllServiceRecords { get; set; }
|
||||
|
||||
public IList<ServiceRecord> ServiceRecordsInSelectedTimeSpan { get; set; }
|
||||
public IList<StundenkontoServiceRecord> ServiceRecordsInSelectedTimeSpan { get; set; }
|
||||
|
||||
public Employee Employee { get; set; }
|
||||
|
||||
@@ -488,7 +562,7 @@ namespace BeWo.Report.ReportObjects
|
||||
|
||||
public String Custom10 { get; set; }
|
||||
|
||||
public IList<ServiceRecord> ServiceRecords { get; set; }
|
||||
public IList<StundenkontoServiceRecord> ServiceRecords { get; set; }
|
||||
|
||||
public int? NightStart { get; set; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user