Performance Verbesserungen Urlaubskonto/Stundenkonto
This commit is contained in:
@@ -43,12 +43,12 @@
|
||||
<TargetCulture>de-DE</TargetCulture>
|
||||
<ProductName>BeWoPlaner</ProductName>
|
||||
<PublisherName>ownSoft GmbH</PublisherName>
|
||||
<MinimumRequiredVersion>2.0.1.298</MinimumRequiredVersion>
|
||||
<MinimumRequiredVersion>2.0.1.299</MinimumRequiredVersion>
|
||||
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
|
||||
<WebPage>publish.htm</WebPage>
|
||||
<OpenBrowserOnPublish>false</OpenBrowserOnPublish>
|
||||
<TrustUrlParameters>true</TrustUrlParameters>
|
||||
<ApplicationRevision>299</ApplicationRevision>
|
||||
<ApplicationRevision>300</ApplicationRevision>
|
||||
<ApplicationVersion>2.0.1.%2a</ApplicationVersion>
|
||||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
||||
|
||||
@@ -94,14 +94,9 @@ namespace BeWo.View.Detail.Report
|
||||
|
||||
try
|
||||
{
|
||||
var filter = _SelectedFilter;
|
||||
UrlaubsplanerRootObj = await Task.Run(() =>
|
||||
ServiceFacade.DoEmployeeServiceSync(s => s.BuildUrlaubsplanerRootObject(filter)));
|
||||
|
||||
var absenceOverview = await Task.Run(() =>
|
||||
ServiceFacade.DoEmployeeServiceSync(x => x.GetAbsenceOverview(filter)));
|
||||
|
||||
UpdateScheduler(false, absenceOverview);
|
||||
ServiceFacade.DoEmployeeServiceSync(s => s.BuildUrlaubsplanerRootObject(_SelectedFilter)));
|
||||
UpdateScheduler(false);
|
||||
ColorizeFeiertage();
|
||||
ApplyFeiertagCellStyle();
|
||||
}
|
||||
@@ -276,14 +271,19 @@ namespace BeWo.View.Detail.Report
|
||||
}
|
||||
|
||||
// Claude - optionaler Parameter absenceOverview: vorgeladene Daten aus Button_Click werden übergeben, um doppelten Serviceaufruf zu vermeiden
|
||||
public void UpdateScheduler(bool neuLaden, List<EmployeeDC> absenceOverview = null)
|
||||
public async void UpdateScheduler(bool neuLaden)
|
||||
{
|
||||
if (neuLaden || UrlaubsplanerRootObj == null)
|
||||
{
|
||||
UrlaubsplanerRootObj = await Task.Run(() =>
|
||||
ServiceFacade.DoEmployeeServiceSync(s => s.BuildUrlaubsplanerRootObject(_SelectedFilter)));
|
||||
|
||||
}
|
||||
|
||||
|
||||
var absenceReasons = _AbsenceReasonDCs;
|
||||
|
||||
if (absenceOverview == null)
|
||||
absenceOverview = ServiceFacade.DoEmployeeServiceSync(x => x.GetAbsenceOverview(_SelectedFilter));
|
||||
|
||||
_ListOfEmployee = absenceOverview;
|
||||
_ListOfEmployee = UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs.Select(i => i.Employee).ToList();
|
||||
var start = new DateTime(_SelectedFilter.Year, _SelectedFilter.Month, 1);
|
||||
|
||||
try
|
||||
@@ -314,14 +314,14 @@ namespace BeWo.View.Detail.Report
|
||||
_AppointmentStorage.Clear();
|
||||
//UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs = new List<AbwesenheitsInformationDC>();
|
||||
int counter = 0;
|
||||
foreach (var employee in absenceOverview)
|
||||
foreach (var employee in _ListOfEmployee)
|
||||
{
|
||||
if (neuLaden == true)
|
||||
{
|
||||
var tageUrlaub = ServiceFacade.DoEmployeeServiceSync(s => s.CountUrlaubstage(UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter]));
|
||||
UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter].TageUrlaub = ServiceFacade.DoEmployeeServiceSync(s => s.CountUrlaubstage(UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter]));
|
||||
UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter].TageKrankheit = ServiceFacade.DoEmployeeServiceSync(s => s.CountKrankheitstage(UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter]));
|
||||
}
|
||||
//if (neuLaden == true)
|
||||
//{
|
||||
// var tageUrlaub = ServiceFacade.DoEmployeeServiceSync(s => s.CountUrlaubstage(UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter]));
|
||||
// UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter].TageUrlaub = ServiceFacade.DoEmployeeServiceSync(s => s.CountUrlaubstage(UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter]));
|
||||
// UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter].TageKrankheit = ServiceFacade.DoEmployeeServiceSync(s => s.CountKrankheitstage(UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter]));
|
||||
//}
|
||||
|
||||
#region auskommentiert
|
||||
//AbwesenheitsInformationDC infoDC = new AbwesenheitsInformationDC
|
||||
|
||||
@@ -71,7 +71,7 @@ namespace BeWo.View.Detail
|
||||
urlaubskonto = new List<UrlaubskontoDarstellungDC>();
|
||||
urlaubskonto.Add(new UrlaubskontoDarstellungDC()
|
||||
{
|
||||
Erlaeuterung = "Es existiert kein Vertrag für ausgewähltes Jahr",
|
||||
Erlaeuterung = "Es existiert kein Vertrag für das ausgewählte Jahr",
|
||||
});
|
||||
button_openLeaveDayDialogue.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
|
||||
@@ -44,9 +44,13 @@ namespace Host
|
||||
|
||||
var test = Request.Params["mode"];
|
||||
|
||||
var report = CreateReport();
|
||||
var sw = System.Diagnostics.Stopwatch.StartNew();
|
||||
|
||||
using (var repxStream = new MemoryStream())
|
||||
var report = CreateReport();
|
||||
sw.Stop();
|
||||
Console.WriteLine(sw.Elapsed.TotalMilliseconds);
|
||||
|
||||
using (var repxStream = new MemoryStream())
|
||||
{
|
||||
if (Request.Params["mode"] == "pdf")
|
||||
{
|
||||
|
||||
@@ -1369,17 +1369,18 @@ namespace BeWo.Report
|
||||
public override XtraReport CreateAbsenceReport(DateTime dt, List<long> abs, List<long> empTypes, List<long> teams, List<int> feiertage)
|
||||
{
|
||||
var report = FindReportImp<AbsenceRO>();
|
||||
var service = new OperationsServiceImp();
|
||||
var es = new EmployeeServiceImp();
|
||||
var os = new OperationsServiceImp();
|
||||
|
||||
var filter = new AbsenceOverviewFilterDC() { AbsenceReasons = abs, EmploymentType = empTypes, Year = dt.Year, Month = dt.Month, Teams = teams };
|
||||
List<CompactTeamDC> compactTeams = new List<CompactTeamDC>();
|
||||
if (teams != null)
|
||||
{
|
||||
if (teams.Count > 0)
|
||||
compactTeams = service.GetCertainTeamsById(teams);
|
||||
compactTeams = os.GetCertainTeamsById(teams);
|
||||
}
|
||||
|
||||
report.SetReportDataSource(AbsenceRO.Create(service.GetAbsenceOverview(filter), filter, compactTeams, feiertage));
|
||||
report.SetReportDataSource(AbsenceRO.Create(es.GetAbsenceOverview(filter), filter, compactTeams, feiertage));
|
||||
|
||||
return report as XtraReport;
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using BeWo.Data;
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Data.Entities;
|
||||
using BeWo.Report;
|
||||
using BeWo.Report.DefaultReports;
|
||||
using BeWo.Report.ReportObjects;
|
||||
using BeWo.Service.Plugins;
|
||||
using BS.Shared;
|
||||
using BS.Shared.Core;
|
||||
using BS.Shared.DataContracts;
|
||||
using DevExpress.XtraReports.UI;
|
||||
|
||||
namespace LebenshilfeBadKreuznachAutismuszentrum
|
||||
{
|
||||
public class CustomReportCreator : DefaultReportCreator
|
||||
{
|
||||
public override XtraReport CreateQueryReport(long queryOid, string queryReportId)
|
||||
{
|
||||
if (queryOid == 1000)
|
||||
{
|
||||
return CreateStundenkontrolleAbwNachWochen(CreateQueryRO(queryOid, queryReportId));
|
||||
}
|
||||
if (queryOid == 1100)
|
||||
{
|
||||
return CreateStundenkontrolleAbwGesamt(CreateQueryRO(queryOid, queryReportId));
|
||||
}
|
||||
|
||||
return base.CreateQueryReport(queryOid, queryReportId);
|
||||
}
|
||||
|
||||
private XtraReport CreateStundenkontrolleAbwNachWochen(QueryRO qro)
|
||||
{
|
||||
var ro = CreateFLSSollIstReportRO(qro);
|
||||
|
||||
if (ro != null)
|
||||
{
|
||||
var druck = new FLSSollIstWeeklyReport();
|
||||
druck.SetReportDataSource(ro);
|
||||
|
||||
return druck;
|
||||
}
|
||||
return new XtraReport();
|
||||
}
|
||||
|
||||
private XtraReport CreateStundenkontrolleAbwGesamt(QueryRO qro)
|
||||
{
|
||||
var ro = CreateFLSSollIstReportRO(qro);
|
||||
|
||||
if (ro != null)
|
||||
{
|
||||
var druck = new LebenshilfeBadKreuznachAutismuszentrum.FLSSollIstReport();
|
||||
druck.SetReportDataSource(ro);
|
||||
|
||||
return druck;
|
||||
}
|
||||
return new XtraReport();
|
||||
}
|
||||
|
||||
private FLSSollIstReportRO CreateFLSSollIstReportRO(QueryRO qro)
|
||||
{
|
||||
|
||||
if (qro.Rows.Count > 0)
|
||||
{
|
||||
DateTime start = DateTime.Now;
|
||||
start = new DateTime(start.Year, start.Month, 1);
|
||||
|
||||
DateTime dt = DateTime.Now;
|
||||
if (DateTime.TryParse(qro.Rows[0].Field1.ToString(), out dt) && dt > DateTime.MinValue)
|
||||
{
|
||||
start = dt;
|
||||
|
||||
}
|
||||
|
||||
DateTime ende = start.AddMonths(1).AddTicks(-1);
|
||||
|
||||
if (DateTime.TryParse(qro.Rows[0].Field2.ToString(), out dt) && dt < DateTime.MaxValue.Date)
|
||||
{
|
||||
ende = dt.AddTicks(-1);
|
||||
|
||||
}
|
||||
|
||||
var config = new FLSAnalysisConfigDC();
|
||||
config.StartDate = start;
|
||||
config.EndDate = ende;
|
||||
config.FetchApprovedFLS = true;
|
||||
config.ReportType = FLSReportType.Customer;
|
||||
|
||||
if (qro.Rows[0].Field3 != null && Int64.TryParse(qro.Rows[0].Field3.ToString(), out var catOid))
|
||||
{
|
||||
if (catOid > 0)
|
||||
{
|
||||
config.ServiceDescriptionOids = DAOFactory.SearchDAO.FindServiceDescriptionForCategory(catOid).Select(d => d.Oid.Value).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
if (qro.Rows[0].Field4 != null && Int64.TryParse(qro.Rows[0].Field4.ToString(), out var teamOid))
|
||||
{
|
||||
if (teamOid > 0)
|
||||
{
|
||||
config.TeamOids = new List<long> { teamOid };
|
||||
}
|
||||
}
|
||||
|
||||
var plugin = PluginLoader.FindClass<StundenuebersichtAuswertung>();
|
||||
|
||||
var reportDcList = plugin.GetCustomerFLSAnalysis(config);
|
||||
|
||||
return FLSSollIstReportRO.Create(reportDcList, config);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
835
ReportImp/LebenshilfeBadKreuznachAutismuszentrum/FLSSollIstReport.Designer.cs
generated
Normal file
835
ReportImp/LebenshilfeBadKreuznachAutismuszentrum/FLSSollIstReport.Designer.cs
generated
Normal file
@@ -0,0 +1,835 @@
|
||||
using BeWo.Report.ReportObjects;
|
||||
namespace LebenshilfeBadKreuznachAutismuszentrum
|
||||
{
|
||||
partial class FLSSollIstReport
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
DevExpress.XtraReports.UI.XRWatermark xrWatermark1 = new DevExpress.XtraReports.UI.XRWatermark();
|
||||
this.Detail = new DevExpress.XtraReports.UI.DetailBand();
|
||||
this.xrTableCell1 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableRow1 = new DevExpress.XtraReports.UI.XRTableRow();
|
||||
this.xrTable1 = new DevExpress.XtraReports.UI.XRTable();
|
||||
this.Detail1 = new DevExpress.XtraReports.UI.DetailBand();
|
||||
this.DetailReport = new DevExpress.XtraReports.UI.DetailReportBand();
|
||||
this.DetailReport1 = new DevExpress.XtraReports.UI.DetailReportBand();
|
||||
this.Detail2 = new DevExpress.XtraReports.UI.DetailBand();
|
||||
this.xrTable4 = new DevExpress.XtraReports.UI.XRTable();
|
||||
this.xrTableRow4 = new DevExpress.XtraReports.UI.XRTableRow();
|
||||
this.xrTableCell3 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableCell9 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableCell13 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableCell4 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableCell17 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableCell18 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableCell19 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.GroupHeader2 = new DevExpress.XtraReports.UI.GroupHeaderBand();
|
||||
this.xrTable2 = new DevExpress.XtraReports.UI.XRTable();
|
||||
this.xrTableRow2 = new DevExpress.XtraReports.UI.XRTableRow();
|
||||
this.xrTableCell5 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableCell7 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableCell12 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableCell2 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableCell14 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableCell15 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableCell16 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.GroupFooter3 = new DevExpress.XtraReports.UI.GroupFooterBand();
|
||||
this.xrTable3 = new DevExpress.XtraReports.UI.XRTable();
|
||||
this.xrTableRow3 = new DevExpress.XtraReports.UI.XRTableRow();
|
||||
this.xrTableCell6 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableCell8 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableCell10 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableCell11 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.formattingRuleDiffNegativ = new DevExpress.XtraReports.UI.FormattingRule();
|
||||
this.xrTableCell20 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableCell21 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.xrTableCell22 = new DevExpress.XtraReports.UI.XRTableCell();
|
||||
this.ReportHeader = new DevExpress.XtraReports.UI.ReportHeaderBand();
|
||||
this.xrLabel5 = new DevExpress.XtraReports.UI.XRLabel();
|
||||
this.xrLabel4 = new DevExpress.XtraReports.UI.XRLabel();
|
||||
this.xrLabel3 = new DevExpress.XtraReports.UI.XRLabel();
|
||||
this.xrLabel2 = new DevExpress.XtraReports.UI.XRLabel();
|
||||
this.xrLabel1 = new DevExpress.XtraReports.UI.XRLabel();
|
||||
this.pageFooterBand1 = new DevExpress.XtraReports.UI.PageFooterBand();
|
||||
this.xrPageInfo2 = new DevExpress.XtraReports.UI.XRPageInfo();
|
||||
this.xrPageInfo1 = new DevExpress.XtraReports.UI.XRPageInfo();
|
||||
this.Title = new DevExpress.XtraReports.UI.XRControlStyle();
|
||||
this.FieldCaption = new DevExpress.XtraReports.UI.XRControlStyle();
|
||||
this.PageInfo = new DevExpress.XtraReports.UI.XRControlStyle();
|
||||
this.DataField = new DevExpress.XtraReports.UI.XRControlStyle();
|
||||
this.fieldFLS = new DevExpress.XtraReports.UI.CalculatedField();
|
||||
this.topMarginBand1 = new DevExpress.XtraReports.UI.TopMarginBand();
|
||||
this.bottomMarginBand1 = new DevExpress.XtraReports.UI.BottomMarginBand();
|
||||
this.fieldDifferenzWoche1 = new DevExpress.XtraReports.UI.CalculatedField();
|
||||
this.fieldDifferenzWoche2 = new DevExpress.XtraReports.UI.CalculatedField();
|
||||
this.fieldDifferenzWoche3 = new DevExpress.XtraReports.UI.CalculatedField();
|
||||
this.fieldDifferenzWoche4 = new DevExpress.XtraReports.UI.CalculatedField();
|
||||
this.fieldDifferenzGesamt = new DevExpress.XtraReports.UI.CalculatedField();
|
||||
this.formattingRuleBetragNegativ = new DevExpress.XtraReports.UI.FormattingRule();
|
||||
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
|
||||
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.xrTable4)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.xrTable2)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
|
||||
//
|
||||
// Detail
|
||||
//
|
||||
this.Detail.HeightF = 0F;
|
||||
this.Detail.Name = "Detail";
|
||||
this.Detail.Padding = new DevExpress.XtraPrinting.PaddingInfo(0, 0, 0, 0, 100F);
|
||||
this.Detail.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopLeft;
|
||||
//
|
||||
// xrTableCell1
|
||||
//
|
||||
this.xrTableCell1.Borders = DevExpress.XtraPrinting.BorderSide.None;
|
||||
this.xrTableCell1.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
|
||||
new DevExpress.XtraReports.UI.XRBinding("Text", null, "RootObjectList.Name")});
|
||||
this.xrTableCell1.Font = new DevExpress.Drawing.DXFont("Arial", 12F, DevExpress.Drawing.DXFontStyle.Bold);
|
||||
this.xrTableCell1.Name = "xrTableCell1";
|
||||
this.xrTableCell1.StylePriority.UseBorderColor = false;
|
||||
this.xrTableCell1.StylePriority.UseBorders = false;
|
||||
this.xrTableCell1.StylePriority.UseFont = false;
|
||||
this.xrTableCell1.Text = "xrTableCell1";
|
||||
this.xrTableCell1.Weight = 6.9183673469387754D;
|
||||
//
|
||||
// xrTableRow1
|
||||
//
|
||||
this.xrTableRow1.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
|
||||
this.xrTableCell1});
|
||||
this.xrTableRow1.Name = "xrTableRow1";
|
||||
this.xrTableRow1.Weight = 1D;
|
||||
//
|
||||
// xrTable1
|
||||
//
|
||||
this.xrTable1.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right)
|
||||
| DevExpress.XtraPrinting.BorderSide.Bottom)));
|
||||
this.xrTable1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 30F);
|
||||
this.xrTable1.Name = "xrTable1";
|
||||
this.xrTable1.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
|
||||
this.xrTableRow1});
|
||||
this.xrTable1.SizeF = new System.Drawing.SizeF(560F, 25F);
|
||||
this.xrTable1.StylePriority.UseBorders = false;
|
||||
this.xrTable1.StylePriority.UsePadding = false;
|
||||
//
|
||||
// Detail1
|
||||
//
|
||||
this.Detail1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
|
||||
this.xrTable1});
|
||||
this.Detail1.Font = new DevExpress.Drawing.DXFont("Arial", 9.75F, DevExpress.Drawing.DXFontStyle.Regular, DevExpress.Drawing.DXGraphicsUnit.Point, new DevExpress.Drawing.DXFontAdditionalProperty[] {
|
||||
new DevExpress.Drawing.DXFontAdditionalProperty("GdiCharSet", ((byte)(0)))});
|
||||
this.Detail1.HeightF = 69.66665F;
|
||||
this.Detail1.KeepTogether = true;
|
||||
this.Detail1.KeepTogetherWithDetailReports = true;
|
||||
this.Detail1.Name = "Detail1";
|
||||
this.Detail1.StylePriority.UseFont = false;
|
||||
//
|
||||
// DetailReport
|
||||
//
|
||||
this.DetailReport.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
|
||||
this.Detail1,
|
||||
this.DetailReport1});
|
||||
this.DetailReport.DataMember = "RootObjectList";
|
||||
this.DetailReport.DataSource = this.bindingSource1;
|
||||
this.DetailReport.Level = 0;
|
||||
this.DetailReport.Name = "DetailReport";
|
||||
//
|
||||
// DetailReport1
|
||||
//
|
||||
this.DetailReport1.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
|
||||
this.Detail2,
|
||||
this.GroupHeader2,
|
||||
this.GroupFooter3});
|
||||
this.DetailReport1.DataMember = "RootObjectList.Groups";
|
||||
this.DetailReport1.DataSource = this.bindingSource1;
|
||||
this.DetailReport1.Level = 0;
|
||||
this.DetailReport1.Name = "DetailReport1";
|
||||
//
|
||||
// Detail2
|
||||
//
|
||||
this.Detail2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
|
||||
this.xrTable4});
|
||||
this.Detail2.HeightF = 25F;
|
||||
this.Detail2.Name = "Detail2";
|
||||
//
|
||||
// xrTable4
|
||||
//
|
||||
this.xrTable4.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right)
|
||||
| DevExpress.XtraPrinting.BorderSide.Bottom)));
|
||||
this.xrTable4.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
|
||||
this.xrTable4.Name = "xrTable4";
|
||||
this.xrTable4.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 0, 0, 0, 100F);
|
||||
this.xrTable4.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
|
||||
this.xrTableRow4});
|
||||
this.xrTable4.SizeF = new System.Drawing.SizeF(890F, 25F);
|
||||
this.xrTable4.StylePriority.UseBorders = false;
|
||||
this.xrTable4.StylePriority.UsePadding = false;
|
||||
//
|
||||
// xrTableRow4
|
||||
//
|
||||
this.xrTableRow4.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
|
||||
this.xrTableCell3,
|
||||
this.xrTableCell9,
|
||||
this.xrTableCell13,
|
||||
this.xrTableCell4,
|
||||
this.xrTableCell18,
|
||||
this.xrTableCell17,
|
||||
this.xrTableCell19});
|
||||
this.xrTableRow4.Name = "xrTableRow4";
|
||||
this.xrTableRow4.Weight = 1D;
|
||||
//
|
||||
// xrTableCell3
|
||||
//
|
||||
this.xrTableCell3.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
|
||||
new DevExpress.XtraReports.UI.XRBinding("Text", null, "RootObjectList.Groups.Name", "{0:dd/MM/yyyy}")});
|
||||
this.xrTableCell3.Font = new DevExpress.Drawing.DXFont("Arial", 9.75F);
|
||||
this.xrTableCell3.Name = "xrTableCell3";
|
||||
this.xrTableCell3.StylePriority.UseFont = false;
|
||||
this.xrTableCell3.Text = "xrTableCell3";
|
||||
this.xrTableCell3.Weight = 1.3605442176870746D;
|
||||
//
|
||||
// xrTableCell9
|
||||
//
|
||||
this.xrTableCell9.Font = new DevExpress.Drawing.DXFont("Arial", 9.75F);
|
||||
this.xrTableCell9.Name = "xrTableCell9";
|
||||
this.xrTableCell9.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell9.StylePriority.UseFont = false;
|
||||
this.xrTableCell9.StylePriority.UsePadding = false;
|
||||
this.xrTableCell9.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell9.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell9.TextFormatString = "{0:0.00}";
|
||||
this.xrTableCell9.Weight = 0.68027210884353728D;
|
||||
//
|
||||
// xrTableCell13
|
||||
//
|
||||
this.xrTableCell13.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
|
||||
new DevExpress.XtraReports.UI.XRBinding("Text", null, "RootObjectList.Groups.IstGesamt")});
|
||||
this.xrTableCell13.Font = new DevExpress.Drawing.DXFont("Arial", 9.75F);
|
||||
this.xrTableCell13.Multiline = true;
|
||||
this.xrTableCell13.Name = "xrTableCell13";
|
||||
this.xrTableCell13.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell13.StylePriority.UseFont = false;
|
||||
this.xrTableCell13.StylePriority.UsePadding = false;
|
||||
this.xrTableCell13.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell13.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell13.TextFormatString = "{0:0.00}";
|
||||
this.xrTableCell13.Weight = 0.6802721088435375D;
|
||||
//
|
||||
// xrTableCell4
|
||||
//
|
||||
this.xrTableCell4.Font = new DevExpress.Drawing.DXFont("Arial", 9.75F);
|
||||
this.xrTableCell4.Multiline = true;
|
||||
this.xrTableCell4.Name = "xrTableCell4";
|
||||
this.xrTableCell4.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell4.StylePriority.UseFont = false;
|
||||
this.xrTableCell4.StylePriority.UsePadding = false;
|
||||
this.xrTableCell4.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell4.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell4.Weight = 0.6802721088435375D;
|
||||
//
|
||||
// xrTableCell17
|
||||
//
|
||||
this.xrTableCell17.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
|
||||
new DevExpress.XtraReports.UI.XRBinding("Text", null, "RootObjectList.Groups.CustomValue1")});
|
||||
this.xrTableCell17.Font = new DevExpress.Drawing.DXFont("Arial", 9.75F);
|
||||
this.xrTableCell17.Multiline = true;
|
||||
this.xrTableCell17.Name = "xrTableCell17";
|
||||
this.xrTableCell17.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell17.StylePriority.UseFont = false;
|
||||
this.xrTableCell17.StylePriority.UsePadding = false;
|
||||
this.xrTableCell17.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell17.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell17.Weight = 0.88435374149659873D;
|
||||
//
|
||||
// xrTableCell18
|
||||
//
|
||||
this.xrTableCell18.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
|
||||
new DevExpress.XtraReports.UI.XRBinding("Text", null, "RootObjectList.Groups.CustomValue2")});
|
||||
this.xrTableCell18.Font = new DevExpress.Drawing.DXFont("Arial", 9.75F);
|
||||
this.xrTableCell18.Multiline = true;
|
||||
this.xrTableCell18.Name = "xrTableCell18";
|
||||
this.xrTableCell18.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell18.StylePriority.UseFont = false;
|
||||
this.xrTableCell18.StylePriority.UsePadding = false;
|
||||
this.xrTableCell18.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell18.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell18.Weight = 0.88435374149659873D;
|
||||
//
|
||||
// xrTableCell19
|
||||
//
|
||||
this.xrTableCell19.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
|
||||
new DevExpress.XtraReports.UI.XRBinding("Text", null, "RootObjectList.Groups.CustomValue3")});
|
||||
this.xrTableCell19.Font = new DevExpress.Drawing.DXFont("Arial", 9.75F);
|
||||
this.xrTableCell19.Multiline = true;
|
||||
this.xrTableCell19.Name = "xrTableCell19";
|
||||
this.xrTableCell19.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell19.StylePriority.UseFont = false;
|
||||
this.xrTableCell19.StylePriority.UsePadding = false;
|
||||
this.xrTableCell19.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell19.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell19.Weight = 0.88435374149659873D;
|
||||
//
|
||||
// GroupHeader2
|
||||
//
|
||||
this.GroupHeader2.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
|
||||
this.xrTable2});
|
||||
this.GroupHeader2.HeightF = 40F;
|
||||
this.GroupHeader2.Name = "GroupHeader2";
|
||||
this.GroupHeader2.RepeatEveryPage = true;
|
||||
//
|
||||
// xrTable2
|
||||
//
|
||||
this.xrTable2.Borders = ((DevExpress.XtraPrinting.BorderSide)((((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top)
|
||||
| DevExpress.XtraPrinting.BorderSide.Right)
|
||||
| DevExpress.XtraPrinting.BorderSide.Bottom)));
|
||||
this.xrTable2.Font = new DevExpress.Drawing.DXFont("Arial", 10F, DevExpress.Drawing.DXFontStyle.Bold);
|
||||
this.xrTable2.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
|
||||
this.xrTable2.Name = "xrTable2";
|
||||
this.xrTable2.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 0, 0, 0, 100F);
|
||||
this.xrTable2.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
|
||||
this.xrTableRow2});
|
||||
this.xrTable2.SizeF = new System.Drawing.SizeF(890F, 40F);
|
||||
this.xrTable2.StylePriority.UseBorders = false;
|
||||
this.xrTable2.StylePriority.UseFont = false;
|
||||
this.xrTable2.StylePriority.UsePadding = false;
|
||||
//
|
||||
// xrTableRow2
|
||||
//
|
||||
this.xrTableRow2.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
|
||||
this.xrTableCell5,
|
||||
this.xrTableCell7,
|
||||
this.xrTableCell12,
|
||||
this.xrTableCell2,
|
||||
this.xrTableCell15,
|
||||
this.xrTableCell14,
|
||||
this.xrTableCell16});
|
||||
this.xrTableRow2.Name = "xrTableRow2";
|
||||
this.xrTableRow2.Weight = 1.6D;
|
||||
//
|
||||
// xrTableCell5
|
||||
//
|
||||
this.xrTableCell5.Name = "xrTableCell5";
|
||||
this.xrTableCell5.Text = "Mitarbeiter/in";
|
||||
this.xrTableCell5.Weight = 1.3605442176870746D;
|
||||
//
|
||||
// xrTableCell7
|
||||
//
|
||||
this.xrTableCell7.Name = "xrTableCell7";
|
||||
this.xrTableCell7.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell7.StylePriority.UsePadding = false;
|
||||
this.xrTableCell7.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell7.Text = "Soll";
|
||||
this.xrTableCell7.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell7.Weight = 0.6802721088435375D;
|
||||
//
|
||||
// xrTableCell12
|
||||
//
|
||||
this.xrTableCell12.Multiline = true;
|
||||
this.xrTableCell12.Name = "xrTableCell12";
|
||||
this.xrTableCell12.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell12.StylePriority.UsePadding = false;
|
||||
this.xrTableCell12.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell12.Text = "Ist";
|
||||
this.xrTableCell12.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell12.Weight = 0.68027210884353739D;
|
||||
//
|
||||
// xrTableCell2
|
||||
//
|
||||
this.xrTableCell2.Multiline = true;
|
||||
this.xrTableCell2.Name = "xrTableCell2";
|
||||
this.xrTableCell2.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell2.StylePriority.UsePadding = false;
|
||||
this.xrTableCell2.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell2.Text = "Diff.";
|
||||
this.xrTableCell2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell2.Weight = 0.6802721088435375D;
|
||||
//
|
||||
// xrTableCell14
|
||||
//
|
||||
this.xrTableCell14.Multiline = true;
|
||||
this.xrTableCell14.Name = "xrTableCell14";
|
||||
this.xrTableCell14.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell14.StylePriority.UsePadding = false;
|
||||
this.xrTableCell14.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell14.Text = "erwirtschafteter\r\nBetrag";
|
||||
this.xrTableCell14.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell14.Weight = 0.88435374149659862D;
|
||||
//
|
||||
// xrTableCell15
|
||||
//
|
||||
this.xrTableCell15.Multiline = true;
|
||||
this.xrTableCell15.Name = "xrTableCell15";
|
||||
this.xrTableCell15.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell15.StylePriority.UsePadding = false;
|
||||
this.xrTableCell15.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell15.Text = "Möglicher Betrag";
|
||||
this.xrTableCell15.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell15.Weight = 0.88435374149659862D;
|
||||
//
|
||||
// xrTableCell16
|
||||
//
|
||||
this.xrTableCell16.Multiline = true;
|
||||
this.xrTableCell16.Name = "xrTableCell16";
|
||||
this.xrTableCell16.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell16.StylePriority.UsePadding = false;
|
||||
this.xrTableCell16.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell16.Text = "Differenz";
|
||||
this.xrTableCell16.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell16.Weight = 0.88435374149659862D;
|
||||
//
|
||||
// GroupFooter3
|
||||
//
|
||||
this.GroupFooter3.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
|
||||
this.xrTable3});
|
||||
this.GroupFooter3.HeightF = 25F;
|
||||
this.GroupFooter3.Name = "GroupFooter3";
|
||||
//
|
||||
// xrTable3
|
||||
//
|
||||
this.xrTable3.Borders = ((DevExpress.XtraPrinting.BorderSide)(((DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Right)
|
||||
| DevExpress.XtraPrinting.BorderSide.Bottom)));
|
||||
this.xrTable3.Font = new DevExpress.Drawing.DXFont("Arial", 10F, DevExpress.Drawing.DXFontStyle.Bold);
|
||||
this.xrTable3.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
|
||||
this.xrTable3.Name = "xrTable3";
|
||||
this.xrTable3.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 0, 0, 0, 100F);
|
||||
this.xrTable3.Rows.AddRange(new DevExpress.XtraReports.UI.XRTableRow[] {
|
||||
this.xrTableRow3});
|
||||
this.xrTable3.SizeF = new System.Drawing.SizeF(890F, 25F);
|
||||
this.xrTable3.StylePriority.UseBorders = false;
|
||||
this.xrTable3.StylePriority.UseFont = false;
|
||||
this.xrTable3.StylePriority.UsePadding = false;
|
||||
//
|
||||
// xrTableRow3
|
||||
//
|
||||
this.xrTableRow3.Cells.AddRange(new DevExpress.XtraReports.UI.XRTableCell[] {
|
||||
this.xrTableCell6,
|
||||
this.xrTableCell8,
|
||||
this.xrTableCell10,
|
||||
this.xrTableCell11,
|
||||
this.xrTableCell21,
|
||||
this.xrTableCell20,
|
||||
this.xrTableCell22});
|
||||
this.xrTableRow3.Name = "xrTableRow3";
|
||||
this.xrTableRow3.Weight = 1D;
|
||||
//
|
||||
// xrTableCell6
|
||||
//
|
||||
this.xrTableCell6.Name = "xrTableCell6";
|
||||
this.xrTableCell6.Text = "Summe";
|
||||
this.xrTableCell6.Weight = 1.3605442176870746D;
|
||||
//
|
||||
// xrTableCell8
|
||||
//
|
||||
this.xrTableCell8.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
|
||||
new DevExpress.XtraReports.UI.XRBinding("Text", null, "RootObjectList.SollGesamt")});
|
||||
this.xrTableCell8.Name = "xrTableCell8";
|
||||
this.xrTableCell8.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell8.StylePriority.UsePadding = false;
|
||||
this.xrTableCell8.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell8.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell8.TextFormatString = "{0:0.00}";
|
||||
this.xrTableCell8.Weight = 0.6802721088435375D;
|
||||
//
|
||||
// xrTableCell10
|
||||
//
|
||||
this.xrTableCell10.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
|
||||
new DevExpress.XtraReports.UI.XRBinding("Text", null, "RootObjectList.IstGesamt")});
|
||||
this.xrTableCell10.Multiline = true;
|
||||
this.xrTableCell10.Name = "xrTableCell10";
|
||||
this.xrTableCell10.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell10.StylePriority.UsePadding = false;
|
||||
this.xrTableCell10.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell10.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell10.TextFormatString = "{0:0.00}";
|
||||
this.xrTableCell10.Weight = 0.68027210884353739D;
|
||||
//
|
||||
// xrTableCell11
|
||||
//
|
||||
this.xrTableCell11.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
|
||||
new DevExpress.XtraReports.UI.XRBinding("Text", null, "RootObjectList.DifferenzSollIstGesamt")});
|
||||
this.xrTableCell11.FormattingRules.Add(this.formattingRuleDiffNegativ);
|
||||
this.xrTableCell11.Multiline = true;
|
||||
this.xrTableCell11.Name = "xrTableCell11";
|
||||
this.xrTableCell11.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell11.StylePriority.UsePadding = false;
|
||||
this.xrTableCell11.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell11.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell11.TextFormatString = "{0:0.00}";
|
||||
this.xrTableCell11.Weight = 0.6802721088435375D;
|
||||
//
|
||||
// formattingRuleDiffNegativ
|
||||
//
|
||||
this.formattingRuleDiffNegativ.Condition = "[DifferenzSollIstGesamt] < 0";
|
||||
this.formattingRuleDiffNegativ.DataMember = "RootObjectList";
|
||||
this.formattingRuleDiffNegativ.Formatting.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
|
||||
this.formattingRuleDiffNegativ.Name = "formattingRuleDiffNegativ";
|
||||
//
|
||||
// xrTableCell20
|
||||
//
|
||||
this.xrTableCell20.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
|
||||
new DevExpress.XtraReports.UI.XRBinding("Text", null, "RootObjectList.CustomValue1")});
|
||||
this.xrTableCell20.Multiline = true;
|
||||
this.xrTableCell20.Name = "xrTableCell20";
|
||||
this.xrTableCell20.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell20.StylePriority.UsePadding = false;
|
||||
this.xrTableCell20.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell20.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell20.Weight = 0.88435374149659873D;
|
||||
//
|
||||
// xrTableCell21
|
||||
//
|
||||
this.xrTableCell21.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
|
||||
new DevExpress.XtraReports.UI.XRBinding("Text", null, "RootObjectList.CustomValue2")});
|
||||
this.xrTableCell21.Multiline = true;
|
||||
this.xrTableCell21.Name = "xrTableCell21";
|
||||
this.xrTableCell21.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell21.StylePriority.UsePadding = false;
|
||||
this.xrTableCell21.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell21.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell21.Weight = 0.88435374149659873D;
|
||||
//
|
||||
// xrTableCell22
|
||||
//
|
||||
this.xrTableCell22.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
|
||||
new DevExpress.XtraReports.UI.XRBinding("Text", null, "RootObjectList.CustomValue3")});
|
||||
this.xrTableCell22.FormattingRules.Add(this.formattingRuleBetragNegativ);
|
||||
this.xrTableCell22.Multiline = true;
|
||||
this.xrTableCell22.Name = "xrTableCell22";
|
||||
this.xrTableCell22.Padding = new DevExpress.XtraPrinting.PaddingInfo(5, 5, 0, 0, 100F);
|
||||
this.xrTableCell22.StylePriority.UsePadding = false;
|
||||
this.xrTableCell22.StylePriority.UseTextAlignment = false;
|
||||
this.xrTableCell22.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrTableCell22.Weight = 0.88435374149659873D;
|
||||
//
|
||||
// ReportHeader
|
||||
//
|
||||
this.ReportHeader.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
|
||||
this.xrLabel5,
|
||||
this.xrLabel4,
|
||||
this.xrLabel3,
|
||||
this.xrLabel2,
|
||||
this.xrLabel1});
|
||||
this.ReportHeader.HeightF = 50F;
|
||||
this.ReportHeader.Name = "ReportHeader";
|
||||
//
|
||||
// xrLabel5
|
||||
//
|
||||
this.xrLabel5.Font = new DevExpress.Drawing.DXFont("Arial", 12F);
|
||||
this.xrLabel5.LocationFloat = new DevExpress.Utils.PointFloat(175F, 25F);
|
||||
this.xrLabel5.Name = "xrLabel5";
|
||||
this.xrLabel5.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
|
||||
this.xrLabel5.SizeF = new System.Drawing.SizeF(17F, 25F);
|
||||
this.xrLabel5.StylePriority.UseFont = false;
|
||||
this.xrLabel5.StylePriority.UseTextAlignment = false;
|
||||
this.xrLabel5.Text = "-";
|
||||
this.xrLabel5.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopCenter;
|
||||
//
|
||||
// xrLabel4
|
||||
//
|
||||
this.xrLabel4.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
|
||||
new DevExpress.XtraReports.UI.XRBinding("Text", null, "ReportEndDate", "{0:dd/MM/yyyy}")});
|
||||
this.xrLabel4.Font = new DevExpress.Drawing.DXFont("Arial", 12F);
|
||||
this.xrLabel4.LocationFloat = new DevExpress.Utils.PointFloat(192.0001F, 25F);
|
||||
this.xrLabel4.Name = "xrLabel4";
|
||||
this.xrLabel4.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
|
||||
this.xrLabel4.SizeF = new System.Drawing.SizeF(367.9999F, 25F);
|
||||
this.xrLabel4.StylePriority.UseFont = false;
|
||||
this.xrLabel4.Text = "xrLabel4";
|
||||
//
|
||||
// xrLabel3
|
||||
//
|
||||
this.xrLabel3.DataBindings.AddRange(new DevExpress.XtraReports.UI.XRBinding[] {
|
||||
new DevExpress.XtraReports.UI.XRBinding("Text", null, "ReportStartDate", "{0:dd/MM/yyyy}")});
|
||||
this.xrLabel3.Font = new DevExpress.Drawing.DXFont("Arial", 12F);
|
||||
this.xrLabel3.LocationFloat = new DevExpress.Utils.PointFloat(83F, 25F);
|
||||
this.xrLabel3.Name = "xrLabel3";
|
||||
this.xrLabel3.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
|
||||
this.xrLabel3.SizeF = new System.Drawing.SizeF(92F, 25F);
|
||||
this.xrLabel3.StylePriority.UseFont = false;
|
||||
this.xrLabel3.StylePriority.UseTextAlignment = false;
|
||||
this.xrLabel3.Text = "xrLabel3";
|
||||
this.xrLabel3.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
//
|
||||
// xrLabel2
|
||||
//
|
||||
this.xrLabel2.Font = new DevExpress.Drawing.DXFont("Arial", 12F);
|
||||
this.xrLabel2.LocationFloat = new DevExpress.Utils.PointFloat(0F, 25F);
|
||||
this.xrLabel2.Name = "xrLabel2";
|
||||
this.xrLabel2.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
|
||||
this.xrLabel2.SizeF = new System.Drawing.SizeF(83F, 25F);
|
||||
this.xrLabel2.StylePriority.UseFont = false;
|
||||
this.xrLabel2.Text = "Zeitraum:";
|
||||
//
|
||||
// xrLabel1
|
||||
//
|
||||
this.xrLabel1.Font = new DevExpress.Drawing.DXFont("Arial", 14F);
|
||||
this.xrLabel1.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F);
|
||||
this.xrLabel1.Multiline = true;
|
||||
this.xrLabel1.Name = "xrLabel1";
|
||||
this.xrLabel1.SizeF = new System.Drawing.SizeF(560F, 25F);
|
||||
this.xrLabel1.StyleName = "Title";
|
||||
this.xrLabel1.StylePriority.UseFont = false;
|
||||
this.xrLabel1.Text = "Auswertung über geleistete Stunden";
|
||||
//
|
||||
// pageFooterBand1
|
||||
//
|
||||
this.pageFooterBand1.Controls.AddRange(new DevExpress.XtraReports.UI.XRControl[] {
|
||||
this.xrPageInfo2,
|
||||
this.xrPageInfo1});
|
||||
this.pageFooterBand1.HeightF = 48F;
|
||||
this.pageFooterBand1.Name = "pageFooterBand1";
|
||||
//
|
||||
// xrPageInfo2
|
||||
//
|
||||
this.xrPageInfo2.Font = new DevExpress.Drawing.DXFont("Arial", 8F);
|
||||
this.xrPageInfo2.LocationFloat = new DevExpress.Utils.PointFloat(938.9998F, 25F);
|
||||
this.xrPageInfo2.Name = "xrPageInfo2";
|
||||
this.xrPageInfo2.SizeF = new System.Drawing.SizeF(100F, 23F);
|
||||
this.xrPageInfo2.StyleName = "PageInfo";
|
||||
this.xrPageInfo2.StylePriority.UseFont = false;
|
||||
this.xrPageInfo2.TextAlignment = DevExpress.XtraPrinting.TextAlignment.TopRight;
|
||||
this.xrPageInfo2.TextFormatString = "Seite {0} von {1}";
|
||||
//
|
||||
// xrPageInfo1
|
||||
//
|
||||
this.xrPageInfo1.Font = new DevExpress.Drawing.DXFont("Arial", 8F);
|
||||
this.xrPageInfo1.LocationFloat = new DevExpress.Utils.PointFloat(7.999878F, 25F);
|
||||
this.xrPageInfo1.Name = "xrPageInfo1";
|
||||
this.xrPageInfo1.PageInfo = DevExpress.XtraPrinting.PageInfo.DateTime;
|
||||
this.xrPageInfo1.SizeF = new System.Drawing.SizeF(262.0001F, 23F);
|
||||
this.xrPageInfo1.StyleName = "PageInfo";
|
||||
this.xrPageInfo1.StylePriority.UseFont = false;
|
||||
//
|
||||
// Title
|
||||
//
|
||||
this.Title.BackColor = System.Drawing.Color.White;
|
||||
this.Title.BorderColor = System.Drawing.SystemColors.ControlText;
|
||||
this.Title.Borders = DevExpress.XtraPrinting.BorderSide.None;
|
||||
this.Title.BorderWidth = 1F;
|
||||
this.Title.Font = new DevExpress.Drawing.DXFont("Times New Roman", 24F);
|
||||
this.Title.ForeColor = System.Drawing.Color.Black;
|
||||
this.Title.Name = "Title";
|
||||
//
|
||||
// FieldCaption
|
||||
//
|
||||
this.FieldCaption.BackColor = System.Drawing.Color.White;
|
||||
this.FieldCaption.BorderColor = System.Drawing.SystemColors.ControlText;
|
||||
this.FieldCaption.Borders = DevExpress.XtraPrinting.BorderSide.None;
|
||||
this.FieldCaption.BorderWidth = 1F;
|
||||
this.FieldCaption.Font = new DevExpress.Drawing.DXFont("Times New Roman", 10F, DevExpress.Drawing.DXFontStyle.Bold);
|
||||
this.FieldCaption.ForeColor = System.Drawing.Color.Black;
|
||||
this.FieldCaption.Name = "FieldCaption";
|
||||
//
|
||||
// PageInfo
|
||||
//
|
||||
this.PageInfo.BackColor = System.Drawing.Color.White;
|
||||
this.PageInfo.BorderColor = System.Drawing.SystemColors.ControlText;
|
||||
this.PageInfo.Borders = DevExpress.XtraPrinting.BorderSide.None;
|
||||
this.PageInfo.BorderWidth = 1F;
|
||||
this.PageInfo.Font = new DevExpress.Drawing.DXFont("Times New Roman", 8F);
|
||||
this.PageInfo.ForeColor = System.Drawing.Color.Black;
|
||||
this.PageInfo.Name = "PageInfo";
|
||||
//
|
||||
// DataField
|
||||
//
|
||||
this.DataField.BackColor = System.Drawing.Color.White;
|
||||
this.DataField.BorderColor = System.Drawing.SystemColors.ControlText;
|
||||
this.DataField.Borders = DevExpress.XtraPrinting.BorderSide.None;
|
||||
this.DataField.BorderWidth = 1F;
|
||||
this.DataField.Font = new DevExpress.Drawing.DXFont("Times New Roman", 8F);
|
||||
this.DataField.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this.DataField.Name = "DataField";
|
||||
//
|
||||
// fieldFLS
|
||||
//
|
||||
this.fieldFLS.DataMember = "FLSReportGroups";
|
||||
this.fieldFLS.Expression = "[TotalFLM] / 60";
|
||||
this.fieldFLS.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
|
||||
this.fieldFLS.Name = "fieldFLS";
|
||||
//
|
||||
// topMarginBand1
|
||||
//
|
||||
this.topMarginBand1.HeightF = 50F;
|
||||
this.topMarginBand1.Name = "topMarginBand1";
|
||||
//
|
||||
// bottomMarginBand1
|
||||
//
|
||||
this.bottomMarginBand1.HeightF = 50F;
|
||||
this.bottomMarginBand1.Name = "bottomMarginBand1";
|
||||
//
|
||||
// fieldDifferenzWoche1
|
||||
//
|
||||
this.fieldDifferenzWoche1.DataMember = "RootObjectList.Groups";
|
||||
this.fieldDifferenzWoche1.Expression = "[Ist] - [Soll]";
|
||||
this.fieldDifferenzWoche1.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
|
||||
this.fieldDifferenzWoche1.Name = "fieldDifferenzWoche1";
|
||||
//
|
||||
// fieldDifferenzWoche2
|
||||
//
|
||||
this.fieldDifferenzWoche2.DataMember = "RootObjectList.Groups";
|
||||
this.fieldDifferenzWoche2.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
|
||||
this.fieldDifferenzWoche2.Name = "fieldDifferenzWoche2";
|
||||
//
|
||||
// fieldDifferenzWoche3
|
||||
//
|
||||
this.fieldDifferenzWoche3.DataMember = "RootObjectList.Groups";
|
||||
this.fieldDifferenzWoche3.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
|
||||
this.fieldDifferenzWoche3.Name = "fieldDifferenzWoche3";
|
||||
//
|
||||
// fieldDifferenzWoche4
|
||||
//
|
||||
this.fieldDifferenzWoche4.DataMember = "RootObjectList.Groups";
|
||||
this.fieldDifferenzWoche4.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
|
||||
this.fieldDifferenzWoche4.Name = "fieldDifferenzWoche4";
|
||||
//
|
||||
// fieldDifferenzGesamt
|
||||
//
|
||||
this.fieldDifferenzGesamt.DataMember = "RootObjectList.Groups";
|
||||
this.fieldDifferenzGesamt.Expression = "[IstGesamt] - [SollGesamt]";
|
||||
this.fieldDifferenzGesamt.FieldType = DevExpress.XtraReports.UI.FieldType.Decimal;
|
||||
this.fieldDifferenzGesamt.Name = "fieldDifferenzGesamt";
|
||||
//
|
||||
// formattingRuleBetragNegativ
|
||||
//
|
||||
this.formattingRuleBetragNegativ.Condition = "ToDecimal([CustomValue4]) < 0";
|
||||
this.formattingRuleBetragNegativ.DataMember = "RootObjectList";
|
||||
this.formattingRuleBetragNegativ.Formatting.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
|
||||
this.formattingRuleBetragNegativ.Name = "formattingRuleBetragNegativ";
|
||||
//
|
||||
// bindingSource1
|
||||
//
|
||||
this.bindingSource1.DataSource = typeof(BeWo.Report.ReportObjects.FLSSollIstReportRO);
|
||||
//
|
||||
// FLSSollIstReport
|
||||
//
|
||||
this.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] {
|
||||
this.Detail,
|
||||
this.DetailReport,
|
||||
this.ReportHeader,
|
||||
this.pageFooterBand1,
|
||||
this.topMarginBand1,
|
||||
this.bottomMarginBand1});
|
||||
this.CalculatedFields.AddRange(new DevExpress.XtraReports.UI.CalculatedField[] {
|
||||
this.fieldFLS,
|
||||
this.fieldDifferenzWoche1,
|
||||
this.fieldDifferenzWoche2,
|
||||
this.fieldDifferenzWoche3,
|
||||
this.fieldDifferenzWoche4,
|
||||
this.fieldDifferenzGesamt});
|
||||
this.DataSource = this.bindingSource1;
|
||||
this.FormattingRuleSheet.AddRange(new DevExpress.XtraReports.UI.FormattingRule[] {
|
||||
this.formattingRuleDiffNegativ,
|
||||
this.formattingRuleBetragNegativ});
|
||||
this.Landscape = true;
|
||||
this.Margins = new DevExpress.Drawing.DXMargins(60F, 60F, 50F, 50F);
|
||||
this.PageHeight = 827;
|
||||
this.PageWidth = 1169;
|
||||
this.PaperKind = DevExpress.Drawing.Printing.DXPaperKind.A4;
|
||||
this.StyleSheet.AddRange(new DevExpress.XtraReports.UI.XRControlStyle[] {
|
||||
this.Title,
|
||||
this.FieldCaption,
|
||||
this.PageInfo,
|
||||
this.DataField});
|
||||
this.Version = "23.2";
|
||||
xrWatermark1.Id = "Watermark1";
|
||||
this.Watermarks.Add(xrWatermark1);
|
||||
((System.ComponentModel.ISupportInitialize)(this.xrTable1)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.xrTable4)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.xrTable2)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.xrTable3)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this)).EndInit();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private DevExpress.XtraReports.UI.DetailBand Detail;
|
||||
private System.Windows.Forms.BindingSource bindingSource1;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell1;
|
||||
private DevExpress.XtraReports.UI.XRTableRow xrTableRow1;
|
||||
private DevExpress.XtraReports.UI.XRTable xrTable1;
|
||||
private DevExpress.XtraReports.UI.DetailBand Detail1;
|
||||
private DevExpress.XtraReports.UI.DetailReportBand DetailReport;
|
||||
private DevExpress.XtraReports.UI.ReportHeaderBand ReportHeader;
|
||||
private DevExpress.XtraReports.UI.XRLabel xrLabel1;
|
||||
private DevExpress.XtraReports.UI.PageFooterBand pageFooterBand1;
|
||||
private DevExpress.XtraReports.UI.XRPageInfo xrPageInfo2;
|
||||
private DevExpress.XtraReports.UI.XRPageInfo xrPageInfo1;
|
||||
private DevExpress.XtraReports.UI.XRControlStyle Title;
|
||||
private DevExpress.XtraReports.UI.XRControlStyle FieldCaption;
|
||||
private DevExpress.XtraReports.UI.XRControlStyle PageInfo;
|
||||
private DevExpress.XtraReports.UI.XRControlStyle DataField;
|
||||
private DevExpress.XtraReports.UI.XRTable xrTable2;
|
||||
private DevExpress.XtraReports.UI.XRTableRow xrTableRow2;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell5;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell7;
|
||||
private DevExpress.XtraReports.UI.DetailReportBand DetailReport1;
|
||||
private DevExpress.XtraReports.UI.DetailBand Detail2;
|
||||
private DevExpress.XtraReports.UI.XRTable xrTable4;
|
||||
private DevExpress.XtraReports.UI.XRTableRow xrTableRow4;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell3;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell9;
|
||||
private DevExpress.XtraReports.UI.XRLabel xrLabel5;
|
||||
private DevExpress.XtraReports.UI.XRLabel xrLabel4;
|
||||
private DevExpress.XtraReports.UI.XRLabel xrLabel3;
|
||||
private DevExpress.XtraReports.UI.XRLabel xrLabel2;
|
||||
private DevExpress.XtraReports.UI.GroupHeaderBand GroupHeader2;
|
||||
private DevExpress.XtraReports.UI.CalculatedField fieldFLS;
|
||||
private DevExpress.XtraReports.UI.TopMarginBand topMarginBand1;
|
||||
private DevExpress.XtraReports.UI.BottomMarginBand bottomMarginBand1;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell13;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell12;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell4;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell2;
|
||||
private DevExpress.XtraReports.UI.CalculatedField fieldDifferenzWoche1;
|
||||
private DevExpress.XtraReports.UI.CalculatedField fieldDifferenzWoche2;
|
||||
private DevExpress.XtraReports.UI.CalculatedField fieldDifferenzWoche3;
|
||||
private DevExpress.XtraReports.UI.CalculatedField fieldDifferenzWoche4;
|
||||
private DevExpress.XtraReports.UI.CalculatedField fieldDifferenzGesamt;
|
||||
private DevExpress.XtraReports.UI.XRTable xrTable3;
|
||||
private DevExpress.XtraReports.UI.XRTableRow xrTableRow3;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell6;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell8;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell10;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell11;
|
||||
private DevExpress.XtraReports.UI.GroupFooterBand GroupFooter3;
|
||||
private DevExpress.XtraReports.UI.FormattingRule formattingRuleDiffNegativ;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell14;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell15;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell16;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell17;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell18;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell19;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell20;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell21;
|
||||
private DevExpress.XtraReports.UI.XRTableCell xrTableCell22;
|
||||
private DevExpress.XtraReports.UI.FormattingRule formattingRuleBetragNegativ;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Data.Entities;
|
||||
using BeWo.Report;
|
||||
using BeWo.Report.ReportObjects;
|
||||
using BeWo.Service.DCEntityMapper;
|
||||
using BS.Shared;
|
||||
using BS.Shared.Extensions;
|
||||
using System;
|
||||
|
||||
namespace LebenshilfeBadKreuznachAutismuszentrum
|
||||
{
|
||||
public partial class FLSSollIstReport : DevExpress.XtraReports.UI.XtraReport, IBeWoReport<FLSSollIstReportRO>
|
||||
{
|
||||
public FLSSollIstReport()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public void SetReportDataSource(FLSSollIstReportRO pRO)
|
||||
{
|
||||
//foreach (var group in pRO.FLSReportGroups)
|
||||
//{
|
||||
// foreach (var sr in group.ServiceRecords)
|
||||
// {
|
||||
// if (!sr.DistanceInMeter.HasValue && sr.ServiceRecordOid.HasValue)
|
||||
// {
|
||||
// var srBO = DAOFactory.GenericDAO.LoadByID<ServiceRecord>(sr.ServiceRecordOid.Value);
|
||||
// sr.DistanceInMeter = srBO.DistanceInMeter;
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
BerechneBetraege(pRO);
|
||||
|
||||
this.bindingSource1.DataSource = pRO;
|
||||
}
|
||||
|
||||
private void BerechneBetraege(FLSSollIstReportRO pRO)
|
||||
{
|
||||
decimal stundenSatz = BerechneStundensatz(pRO);
|
||||
foreach (var item in pRO.RootObjectList)
|
||||
{
|
||||
foreach (var g in item.Groups)
|
||||
{
|
||||
decimal istPreisGruppe = 0;
|
||||
decimal sollPreisGruppe = 0;
|
||||
|
||||
foreach (var week in g.WochenSummen)
|
||||
{
|
||||
istPreisGruppe += (week.IstStunden ?? 0) * stundenSatz;
|
||||
sollPreisGruppe += (week.SollStunden ?? 0) * stundenSatz;
|
||||
}
|
||||
|
||||
g.CustomValue1 = String.Format("{0:c}", istPreisGruppe);
|
||||
}
|
||||
|
||||
item.CustomValue1 = String.Format("{0:c}", item.IstGesamt * stundenSatz);
|
||||
item.CustomValue2 = String.Format("{0:c}", item.SollGesamt * stundenSatz);
|
||||
item.CustomValue3 = String.Format("{0:c}", (item.IstGesamt - item.SollGesamt) * stundenSatz);
|
||||
item.CustomValue4 = String.Format("{0:0.00}", (item.IstGesamt - item.SollGesamt) * stundenSatz);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private decimal BerechneStundensatz(FLSSollIstReportRO pRO)
|
||||
{
|
||||
decimal stundenSatz = 0;
|
||||
|
||||
if (pRO.ReportConfig.ServiceDescriptionOids != null && pRO.ReportConfig.ServiceDescriptionOids.Count > 0)
|
||||
{
|
||||
var cat = DAOFactory.GenericDAO.LoadByID<ServiceDescription>(pRO.ReportConfig.ServiceDescriptionOids[0]).ServiceCategory;
|
||||
|
||||
var crps = MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(cat.CostRatePeriods);
|
||||
|
||||
var cp = crps.GetCostRatePeriodForDate(CostRatePeriodType.AmountOfMoney, pRO.ReportStartDate.Value);
|
||||
|
||||
if (cp != null && cp.CostRateValue.HasValue)
|
||||
{
|
||||
return cp.CostRateValue.Value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return stundenSatz;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
@@ -10,68 +10,5 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace PerspektivenEV.Service
|
||||
{
|
||||
public class CustomEmployeeServiceImp : EmployeeServiceImp
|
||||
{
|
||||
public override Dictionary<string, decimal> GetSonderurlaubForEmployee(long empOid, int berechnungsjahr)
|
||||
{
|
||||
Dictionary<string, decimal> sonderurlaub = new Dictionary<string, decimal>();
|
||||
try
|
||||
{
|
||||
var emp = DAOFactory.GenericDAO.GetByID<Employee>(empOid);
|
||||
Contract contract = null;
|
||||
foreach (var c in emp.Contracts)
|
||||
{
|
||||
if (c.EntryDate.HasValue && !c.ContractEndDate.HasValue || c.EntryDate.HasValue && c.ContractEndDate.HasValue &&
|
||||
berechnungsjahr >= c.EntryDate.Value.Year && berechnungsjahr <= c.ContractEndDate.Value.Year)
|
||||
{
|
||||
contract = c;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Wenn eine Behinderung von mind. 50 vorliegt stehen standardmäßig 5 Sonderurlaubstage zu
|
||||
if (contract != null && (contract.EntryDate.HasValue && contract.ContractEndDate.HasValue || contract.EntryDate.HasValue && !contract.ContractEndDate.HasValue))
|
||||
{
|
||||
var yearStart = new DateTime(berechnungsjahr, 1, 1);
|
||||
var yearEnd = new DateTime(berechnungsjahr, 12, 31);
|
||||
|
||||
// Schnittmenge aus Vertrag + Ausweis
|
||||
var overlapStart = contract.EntryDate > emp.AusweisGueltigVon ? contract.EntryDate : emp.AusweisGueltigVon;
|
||||
var overlapEnd = (contract.ContractEndDate ?? DateTime.MaxValue) < (emp.AusweisGueltigBis ?? DateTime.MaxValue) ? (contract.ContractEndDate ?? DateTime.MaxValue) : (emp.AusweisGueltigBis ?? DateTime.MaxValue);
|
||||
|
||||
// Jetzt prüfen: gibt es davon etwas im Jahr?
|
||||
if (overlapStart <= overlapEnd && overlapStart <= yearEnd && overlapEnd >= yearStart)
|
||||
{
|
||||
if (emp.GradDerBehinderung != null && emp.GradDerBehinderung != "")
|
||||
{
|
||||
int.TryParse(emp.GradDerBehinderung, out int grad);
|
||||
if (grad >= 50)
|
||||
{
|
||||
// TODO Anteilig berechnen, (wenn Behinderung erst im Berechnungsjahr beginnt nur die "aktiven" Monate anrechnen und ab
|
||||
|
||||
// Wenn keine Anzahl der wöchentlichen Arbeitstage gesetzt ist, 5 Tage
|
||||
// Sonst Anzahl der wöchentlichen Arbeitstage (gesdetzlich so geregelt)
|
||||
sonderurlaub.Add("Sonderurlaub aufgrund von Behinderungsgrad über 50", 5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Anpassung für Perspektiven:
|
||||
// CancellationPeriod im Vertrag sind die Regenerationstage hier.
|
||||
// Die Anzahl Tage, die da drin steht, soll als Sonderurlaub gutgeschrieben werden
|
||||
if (contract.CancellationPeriod != null && contract.CancellationPeriod > 0)
|
||||
sonderurlaub.Add("Regenerationstage", contract.CancellationPeriod);
|
||||
|
||||
}
|
||||
|
||||
return sonderurlaub;
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(ex);
|
||||
}
|
||||
|
||||
return sonderurlaub;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -30,281 +30,15 @@ namespace PerspektivenEV.Service
|
||||
return new DateTime(year, 12, 31);
|
||||
}
|
||||
|
||||
public override List<UrlaubskontoDarstellungDC> BerechneUrlaubskontoZurDarstellung(EmployeeDC emp, int year, DateTime? endeDerBerechnung = null)
|
||||
public override List<UrlaubskontoDarstellungDC> BerechneUrlaubskontoZurDarstellung(Employee emp, int year, DateTime? endeDerBerechnung = null)
|
||||
{
|
||||
// Claude: Kein Urlaubskonto vor 2026
|
||||
if (year < 2026)
|
||||
return null;
|
||||
|
||||
// ab hier Standard
|
||||
List<UrlaubskontoDarstellungDC> dcs = new List<UrlaubskontoDarstellungDC>();
|
||||
EmployeeServiceImp es = PluginLoader.FindClass<EmployeeServiceImp>();
|
||||
|
||||
// Urlaubskonto erstellen
|
||||
var ent = DAOFactory.GenericDAO.LoadByID<Employee>((long)emp.EmployeeOid);
|
||||
var urlaubskonten = BerechneUrlaubskonto(ent, year);
|
||||
var aktuellesKonto = urlaubskonten.First(u => u.Key == year);
|
||||
|
||||
var geschenkteUrlaubstage = es.GetGeschenkteUrlaubstageForEmployee((long)emp.EmployeeOid);
|
||||
decimal sonderurlaub = 0;
|
||||
|
||||
|
||||
// Benötigt werden:
|
||||
// 1. Vetragliche Urlaubstage für´s Jahr
|
||||
List<ContractDC> contracts = new List<ContractDC>();
|
||||
Dictionary<ContractDC, int> contractsAndWeeklyDays = new Dictionary<ContractDC, int>();
|
||||
|
||||
// Vertrag für Jahr raussuchen
|
||||
foreach (var c in emp.Contracts)
|
||||
{
|
||||
DateTime contractEndDate = new DateTime();
|
||||
if (c.ContractEndDate == null)
|
||||
contractEndDate = new DateTime(2099, 12, 31);
|
||||
else
|
||||
contractEndDate = c.ContractEndDate.Value;
|
||||
|
||||
DateTime contractStartDate = new DateTime();
|
||||
if (c.EntryDate == null)
|
||||
contractStartDate = new DateTime(year, 01, 01);
|
||||
else
|
||||
contractStartDate = c.EntryDate.Value;
|
||||
|
||||
if (year >= contractStartDate.Year && year <= contractEndDate.Year) // Wenn das ausgewählte Jahr zwischen Vertragsbeginn und -ende liegt
|
||||
{
|
||||
contracts.Add(c);
|
||||
contractsAndWeeklyDays.Add(c, c.WeeklyDays);
|
||||
}
|
||||
}
|
||||
if (contracts.Count == 0) // Kein Vertrag = kein Urlaubskonto
|
||||
return null;
|
||||
|
||||
|
||||
// 2. Abzuziehende Tage wegen Vertragsbeginn mitten im Jahr
|
||||
foreach (var contractAndWeeklyDays in contractsAndWeeklyDays)
|
||||
{
|
||||
var contract = contractAndWeeklyDays.Key;
|
||||
#region Vielleicht bald unnötig
|
||||
// Zahlen für Darstellung in View
|
||||
decimal tageNachAbzug = 0;
|
||||
decimal abzuziehendeTage = 0;
|
||||
|
||||
int arbeitstage = contract.WeeklyDays; // Vertragliche Arbeitstage
|
||||
DateTime? endDate = contract.ContractEndDate == null ? new DateTime(year, 12, 31) : contract.ContractEndDate; // Ende des Vertrags auf letzten Tag des Jahres setzen, wenn kein Ende
|
||||
var leaveDays = contract.EmploymentType?.LeaveDays == null ? contract.LeaveDays : contract.EmploymentType.LeaveDays; // Vertragliche Urlaubstage
|
||||
if (!leaveDays.HasValue)
|
||||
{
|
||||
leaveDays = 0;
|
||||
}
|
||||
if (contract.EntryDate.HasValue && (contract.EntryDate.Value.Year == year || endDate.Value.Year == year)) // Wenn Vertrag im gewählten Jahr beginnt oder endet
|
||||
{
|
||||
if (contract.EntryDate.Value.Year == year) // Wenn Vertrag im gewählten Jahr beginnt
|
||||
{
|
||||
if (endDate >= new DateTime(contract.EntryDate.Value.Year, 12, 31)) // Wenn Vertrag länger gilt als das gewählte Jahr
|
||||
{
|
||||
int restlicheTageImJahr = Convert.ToInt32((new DateTime(contract.EntryDate.Value.Year, 12, 31) - contract.EntryDate.Value.Date).TotalDays);
|
||||
tageNachAbzug = CalcCorrectNumberOfLeaveDaysForSpecialContractSituation((DateTime)contract.EntryDate, endDate, arbeitstage, restlicheTageImJahr, leaveDays);
|
||||
}
|
||||
else // Wenn Ende des Vertrags im gleichen Jahr vor Jahresende ist
|
||||
{
|
||||
int restlicheTageImJahr = Convert.ToInt32((contract.ContractEndDate.Value.Date - contract.EntryDate.Value.Date).TotalDays);
|
||||
tageNachAbzug = CalcCorrectNumberOfLeaveDaysForSpecialContractSituation((DateTime)contract.EntryDate, endDate, arbeitstage, restlicheTageImJahr, leaveDays);
|
||||
}
|
||||
}
|
||||
else if (endDate.Value.Year == year) // Wenn Vertrag im gewählten Jahr endet
|
||||
{
|
||||
int restlicheTageImJahr = Convert.ToInt32(((DateTime)endDate - new DateTime(year, 1, 1)).TotalDays);
|
||||
tageNachAbzug = CalcCorrectNumberOfLeaveDaysForSpecialContractSituation((DateTime)contract.EntryDate, endDate, arbeitstage, restlicheTageImJahr, leaveDays);
|
||||
}
|
||||
// Abzuziehende Tage = Vertragliche Urlaubstage - Tage, die nach Abzug der verfallenden Tage übrig bleiben
|
||||
abzuziehendeTage = (decimal)leaveDays - tageNachAbzug;
|
||||
}
|
||||
#endregion
|
||||
if (contract == null || contract != null && !contract.EntryDate.HasValue)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var contractStart = contract.EntryDate.Value.ToString().Split(' ');
|
||||
var contractEnd = contract.ContractEndDate != null ? contract.ContractEndDate.Value.ToString().Split(' ') : null;
|
||||
|
||||
var anzahlTage = leaveDays - abzuziehendeTage;
|
||||
|
||||
var obereZeile = new UrlaubskontoDarstellungDC()
|
||||
{
|
||||
AnzahlTage = string.Format("{0:0.00}", anzahlTage),
|
||||
Herkunft = string.Format("EmpOid:{0} ContractOid:{1}", emp.EmployeeOid, contract.ContractOid),
|
||||
Tooltip = null,
|
||||
IsDeletable = false,
|
||||
DatumZurSortierung = null
|
||||
};
|
||||
obereZeile.Erlaeuterung = contractEnd == null ? "Urlaubstage laut Vertrag vom " + contractStart[0] + ":" : "Urlaubstage laut Vertrag vom " + contractStart[0] + " bis " + contractEnd[0] + ":";
|
||||
dcs.Add(obereZeile);
|
||||
|
||||
// Standardmäßig Sonderurlaub bei Schwerbehinderung, aber modifizierbar
|
||||
List<UrlaubskontoDarstellungDC> sonderurlaubItems = CreateSonderurlaubItems(emp, contract, es.GetSonderurlaubForEmployee(emp.EmployeeOid.Value, year), dcs);
|
||||
//List<UrlaubskontoDarstellungDC> sonderurlaubItems = AddSonderurlaub(emp, contract, year);
|
||||
if (sonderurlaubItems.Count > 0 && !dcs.Any(d => d.Erlaeuterung == "Sonderurlaub aufgrund von Behinderungsgrad über 50"))
|
||||
{
|
||||
dcs.AddRange(sonderurlaubItems);
|
||||
sonderurlaub += sonderurlaubItems.Sum(s => Convert.ToDecimal(s.AnzahlTage));
|
||||
}
|
||||
|
||||
#region Würde Code von 2. sparen, klappt aber leider nur dann, wenn es nicht mehr als einen Vertrag im Jahr gibt
|
||||
//decimal anzGeschenkteTage = 0.0m;
|
||||
//if (geschenkteUrlaubstage != null)
|
||||
//{
|
||||
// foreach (var item in geschenkteUrlaubstage)
|
||||
// {
|
||||
// if (item.Date.Year == year)
|
||||
// anzGeschenkteTage += item.AnzahlTage;
|
||||
// }
|
||||
//}
|
||||
//var testvar = aktuellesKonto.Value.Urlaubsanspruch - anzGeschenkteTage;
|
||||
//var obereZeile = new UrlaubskontoDarstellungDC()
|
||||
//{
|
||||
// AnzahlTage = testvar,
|
||||
// Herkunft = string.Format("EmpOid:{0} ContractOid:{1}", emp.EmployeeOid, contract.ContractOid),
|
||||
// Tooltip = null,
|
||||
// IsDeletable = false,
|
||||
// DatumZurSortierung = null
|
||||
//};
|
||||
//obereZeile.Erlaeuterung = contractEnd == null ? "Urlaubstage laut Vertrag vom " + contractStart[0] + ":" : "Urlaubstage laut Vertrag vom " + contractStart[0] + " bis " + contractEnd[0] + ":";
|
||||
//dcs.Add(obereZeile);
|
||||
#endregion
|
||||
}
|
||||
|
||||
// 3. Geschenkte Urlaubstage im Jahr
|
||||
if (geschenkteUrlaubstage.Count > 0 && geschenkteUrlaubstage.Any(g => g.Date.Year == year))
|
||||
{
|
||||
// Einen Eintrag pro geschenktem Urlaubstag
|
||||
foreach (var eintrag in geschenkteUrlaubstage)
|
||||
{
|
||||
if (eintrag.Date.Year == year)
|
||||
{
|
||||
var tempDate = eintrag.Date.ToString().Split(' ');
|
||||
dcs.Add(new UrlaubskontoDarstellungDC()
|
||||
{
|
||||
Erlaeuterung = string.Format("Tage geschenkt am {0} von {1} ({2})", tempDate[0], eintrag.InsUser, eintrag.GeschenkterUrlaubstagNotice),
|
||||
AnzahlTage = eintrag.AnzahlTage > 0 ? string.Format("+{0:0.00}", eintrag.AnzahlTage) : string.Format("{0:0.00}", eintrag.AnzahlTage),
|
||||
Herkunft = string.Format("GeschenkterUrlaubstagOid:{0}", eintrag.GeschenkterUrlaubstagOid),
|
||||
Tooltip = eintrag.GeschenkterUrlaubstagNotice,
|
||||
IsDeletable = true,
|
||||
DatumZurSortierung = eintrag.Date
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 4. Verfallener Resturlaub
|
||||
// Verfallsdatum der Urlaubstage des letzten Jahres zur Darstellung (also ohne Uhrzeit)
|
||||
|
||||
|
||||
// Resturlaub und den verbleibenden Resturlaub nach Verfall erstellen
|
||||
if (aktuellesKonto.Value.ResturlaubVorjahrTotal > 0) // Wenn Urlaub aus dem Vorjahr mitgenommen wurde
|
||||
{
|
||||
dcs.Add(new UrlaubskontoDarstellungDC()
|
||||
{
|
||||
Erlaeuterung = "Resturlaub aus " + (year - 1) + " :",
|
||||
AnzahlTage = string.Format("+{0:0.00}", aktuellesKonto.Value.ResturlaubVorjahrTotal),
|
||||
Herkunft = string.Format("EmpOid:{0} Urlaubskonto:{1}", emp.EmployeeOid, year),
|
||||
Tooltip = null,
|
||||
IsDeletable = false
|
||||
});
|
||||
}
|
||||
else if (urlaubskonten.ContainsKey(year - 1) && urlaubskonten[year - 1].Resturlaub > 0)
|
||||
{
|
||||
var vorherigesKonto = urlaubskonten[year - 1];
|
||||
aktuellesKonto.Value.ResturlaubVorjahrTotal += vorherigesKonto.Resturlaub;
|
||||
aktuellesKonto.Value.ResturlaubVorjahr += vorherigesKonto.Resturlaub;
|
||||
|
||||
dcs.Add(new UrlaubskontoDarstellungDC()
|
||||
{
|
||||
Erlaeuterung = "Resturlaub aus " + (year - 1) + " :",
|
||||
AnzahlTage = string.Format("+{0:0.00}", aktuellesKonto.Value.ResturlaubVorjahrTotal),
|
||||
Herkunft = string.Format("EmpOid:{0} Urlaubskonto:{1}", emp.EmployeeOid, year),
|
||||
Tooltip = null,
|
||||
IsDeletable = false
|
||||
});
|
||||
}
|
||||
var expDate = GetExpirationDate(year);
|
||||
if (expDate != null)
|
||||
{
|
||||
var expDateString = GetExpirationDate(year).ToString().Split(' ');
|
||||
|
||||
if (aktuellesKonto.Value.VerfallenerUrlaub > 0) // Wenn Urlaubstage verfallen sind
|
||||
{
|
||||
dcs.Add(new UrlaubskontoDarstellungDC()
|
||||
{
|
||||
Erlaeuterung = string.Format("Urlaub am {0} verfallen: ", expDateString[0]),
|
||||
AnzahlTage = string.Format("-{0:0.00}", aktuellesKonto.Value.VerfallenerUrlaub),
|
||||
DatumZurSortierung = GetExpirationDate(year),
|
||||
Tooltip = null,
|
||||
IsDeletable = false
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 5. Alle Urlaube, die Anfang oder Ende im gewählten Jahr haben
|
||||
var absences = GetAllVacationAbsences(emp.AbsenceTimes, year, true);
|
||||
|
||||
if (absences.Count > 0) // Wenn es Urlaube in dem Jahr gibt
|
||||
{
|
||||
// Urlaube durchgehen und die Tage zählen
|
||||
foreach (var spanne in absences)
|
||||
{
|
||||
// Im Stundenkonto wird auch Resturlaub angezeigt. Geht eine Abwesenheit über das Ende des Stundenkontomonats hinaus,
|
||||
// Abwesenheit auf endeDerBerechnung setzen, damit Urlaubstage vom nachfolgenden Monat nicht zu früh abgezogen werden
|
||||
if (endeDerBerechnung.HasValue && spanne.End.HasValue && spanne.End.Value > endeDerBerechnung.Value)
|
||||
spanne.End = endeDerBerechnung;
|
||||
if (spanne.End.HasValue && spanne.End.Value.Year > year)
|
||||
spanne.End = new DateTime(year, 12, 31);
|
||||
if (spanne.Start.HasValue && spanne.Start.Value.Year < year)
|
||||
spanne.Start = new DateTime(year, 01, 01);
|
||||
|
||||
decimal summeTage = 0;
|
||||
|
||||
#region Urlaubstage zählen
|
||||
summeTage = CountAbwesenheitstage(emp, spanne, year, contractsAndWeeklyDays);
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
// Start- und Enddatum des Urlaubs für Darstellung vorbereiten
|
||||
var startAsArray = spanne.Start.Value.ToString().Split(' ');
|
||||
var endAsArray = spanne.End.Value.ToString().Split(' ');
|
||||
// Eintrag für Urlaubstag setzen (Erläuterung abhängig davon, ob Urlaub nur ein Tag geht oder über mehrere
|
||||
dcs.Add(new UrlaubskontoDarstellungDC()
|
||||
{
|
||||
Erlaeuterung = startAsArray[0] == endAsArray[0] ? string.Format("Urlaub genommen am {0}", startAsArray[0]) :
|
||||
string.Format("Urlaub genommen vom {0} bis {1}", startAsArray[0], endAsArray[0]),
|
||||
AnzahlTage = string.Format("-{0:0.00}", summeTage),
|
||||
AnzahlTageUrlaub = summeTage,
|
||||
Herkunft = string.Format("AbsenceOid: {0}", spanne.AbsenceTimeOid),
|
||||
Tooltip = spanne.Notice,
|
||||
IsDeletable = false,
|
||||
DatumZurSortierung = spanne.Start.Value
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 6. Anzahl der aus 1.-5. resultierenden Resturlaubstage fürs Jahr, also Resturlaub vom Urlaubskonto
|
||||
var anzTage = aktuellesKonto.Value.ResturlaubVorjahrTotal > 0 && aktuellesKonto.Value.VerfallenerUrlaub <= 0 ? aktuellesKonto.Value.Resturlaub + aktuellesKonto.Value.ResturlaubVorjahr : aktuellesKonto.Value.Resturlaub;
|
||||
dcs.Add(new UrlaubskontoDarstellungDC()
|
||||
{
|
||||
AnzahlTage = string.Format("{0:0.00}", anzTage),
|
||||
Erlaeuterung = "Summe der verbleibenden Urlaubstage: ",
|
||||
Herkunft = "UrlaubskontoEmpOid" + aktuellesKonto.Value.EmployeeOid,
|
||||
Tooltip = null,
|
||||
IsDeletable = false,
|
||||
DatumZurSortierung = new DateTime(2999, 12, 31)
|
||||
});
|
||||
|
||||
// 7. Liste der DCs nach Datum sortieren, um eine zeitliche Hierarchie zu schaffen
|
||||
var sortierteDCs = dcs.OrderBy(dc => dc.DatumZurSortierung).ToList();
|
||||
|
||||
return sortierteDCs;
|
||||
return base.BerechneUrlaubskontoZurDarstellung(emp, year, endeDerBerechnung);
|
||||
}
|
||||
|
||||
public override Dictionary<int, UrlaubskontoDC> BerechneUrlaubskonto(Employee emp, int year)
|
||||
{
|
||||
try
|
||||
@@ -346,12 +80,12 @@ namespace PerspektivenEV.Service
|
||||
|
||||
int? workdays = 0;
|
||||
List<ArbeitszeitDC> arbeitszeiten = new List<ArbeitszeitDC>();
|
||||
Dictionary<ContractDC, int> contractsAndWeeklyDays = new Dictionary<ContractDC, int>();
|
||||
Dictionary<Contract, int> contractsAndWeeklyDays = new Dictionary<Contract, int>();
|
||||
|
||||
// Jahresurlaubanspruch berechnen (noch kein Resturlaub Vorjahr in dieser Schleife, nur Jahresanspruch + Sonderfall Vertragsstart oder -ende mitten im Jahr)
|
||||
foreach (var contract in emp.Contracts)
|
||||
{
|
||||
contractsAndWeeklyDays.Add(MapperFactory.ContractDC_Contract.MapToNewDC(contract), contract.WeeklyDays.HasValue ? contract.WeeklyDays.Value : 0);
|
||||
contractsAndWeeklyDays.Add(contract, contract.WeeklyDays ?? 5);
|
||||
|
||||
var start = contract.EntryDate?.Year ?? firstYear;
|
||||
var end = contract.ContractEndDate?.Year ?? year;
|
||||
@@ -436,7 +170,7 @@ namespace PerspektivenEV.Service
|
||||
absencesYear = absencesYear.OrderBy(x => x.Item1).ToList();
|
||||
|
||||
Dictionary<int, decimal> zuVerfallZuAddieren = new Dictionary<int, decimal>();
|
||||
var geschenkteUrlaubstage = empService.GetGeschenkteUrlaubstageForEmployee((long)emp.Oid);
|
||||
var geschenkteUrlaubstage = GetGeschenkteUrlaubstageForEmployee((long)emp.Oid);
|
||||
|
||||
// Alle Abwesenheiten durchlaufen, deren Dauer berechnen und vom Resturlaub + Geschenkte Tage Vorjahr abziehen, sofern es nicht nutzbaren Resturlaub vom Vorjahr gibt
|
||||
// Tuple = Key-Value-Paar
|
||||
@@ -456,7 +190,7 @@ namespace PerspektivenEV.Service
|
||||
while (berechnungsjahr < absYear)
|
||||
{
|
||||
var geschenkteTageFuerAbrechnungsjahr = geschenkteUrlaubstage.Where(g => g.Date.Year == berechnungsjahr).ToList();
|
||||
var sonderurlaubFuerAbrechnungsjahr = empService.GetSonderurlaubForEmployee((long)emp.Oid, berechnungsjahr);
|
||||
var sonderurlaubFuerAbrechnungsjahr = GetSonderurlaubForEmployee(emp, berechnungsjahr);
|
||||
|
||||
|
||||
var tmp = konten[berechnungsjahr];
|
||||
@@ -488,7 +222,7 @@ namespace PerspektivenEV.Service
|
||||
if (absence.Start.HasValue && absence.Start.Value.Year < absYear)
|
||||
absence.Start = new DateTime(absYear, 01, 01);
|
||||
|
||||
dauer = CountAbwesenheitstage(MapperFactory.EmployeeDC_Employee.MapToNewDC(emp), absence, absYear, contractsAndWeeklyDays);
|
||||
dauer = CountAbwesenheitstage(emp, absence, absYear, contractsAndWeeklyDays);
|
||||
//dauer = BerechneAnzahlUrlaubstage(absence, null, absYear, workdays); // HIER MÜSSEN PARAMETER FÜR ISTWOCHENENDE() MITGEGEBEN WERDEN
|
||||
|
||||
// Verfallsdatum des Urlaubs festlegen
|
||||
@@ -573,7 +307,7 @@ namespace PerspektivenEV.Service
|
||||
konto.Value.Resturlaub += anzGeschenkteTage;
|
||||
}
|
||||
// Wenn es Sonderurlaube gibt, Liste durchlaufen und für jeden Eintrag den Zähler entsprechend der Tage erhöhen
|
||||
var sonderurlaube = empService.GetSonderurlaubForEmployee((long)emp.Oid, i);
|
||||
var sonderurlaube = GetSonderurlaubForEmployee(emp, i);
|
||||
if (sonderurlaube != null)
|
||||
{
|
||||
decimal anzSonderurlaubTage = 0.0m;
|
||||
@@ -597,6 +331,59 @@ namespace PerspektivenEV.Service
|
||||
}
|
||||
}
|
||||
|
||||
public override Dictionary<string, decimal> GetSonderurlaubForEmployee(Employee employee, int berechnungsjahr)
|
||||
{
|
||||
Dictionary<string, decimal> sonderurlaub = new Dictionary<string, decimal>();
|
||||
|
||||
Contract contract = null;
|
||||
foreach (var c in employee.Contracts)
|
||||
{
|
||||
if (c.EntryDate.HasValue && !c.ContractEndDate.HasValue || c.EntryDate.HasValue && c.ContractEndDate.HasValue &&
|
||||
berechnungsjahr >= c.EntryDate.Value.Year && berechnungsjahr <= c.ContractEndDate.Value.Year)
|
||||
{
|
||||
contract = c;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Wenn eine Behinderung von mind. 50 vorliegt stehen standardmäßig 5 Sonderurlaubstage zu
|
||||
if (contract != null && (contract.EntryDate.HasValue && contract.ContractEndDate.HasValue || contract.EntryDate.HasValue && !contract.ContractEndDate.HasValue))
|
||||
{
|
||||
var yearStart = new DateTime(berechnungsjahr, 1, 1);
|
||||
var yearEnd = new DateTime(berechnungsjahr, 12, 31);
|
||||
|
||||
// Schnittmenge aus Vertrag + Ausweis
|
||||
var overlapStart = contract.EntryDate > employee.AusweisGueltigVon ? contract.EntryDate : employee.AusweisGueltigVon;
|
||||
var overlapEnd = (contract.ContractEndDate ?? DateTime.MaxValue) < (employee.AusweisGueltigBis ?? DateTime.MaxValue) ? (contract.ContractEndDate ?? DateTime.MaxValue) : (employee.AusweisGueltigBis ?? DateTime.MaxValue);
|
||||
|
||||
// Jetzt prüfen: gibt es davon etwas im Jahr?
|
||||
if (overlapStart <= overlapEnd && overlapStart <= yearEnd && overlapEnd >= yearStart)
|
||||
{
|
||||
if (employee.GradDerBehinderung != null && employee.GradDerBehinderung != "")
|
||||
{
|
||||
int.TryParse(employee.GradDerBehinderung, out int grad);
|
||||
if (grad >= 50)
|
||||
{
|
||||
// TODO Anteilig berechnen, (wenn Behinderung erst im Berechnungsjahr beginnt nur die "aktiven" Monate anrechnen und ab
|
||||
|
||||
// Wenn keine Anzahl der wöchentlichen Arbeitstage gesetzt ist, 5 Tage
|
||||
// Sonst Anzahl der wöchentlichen Arbeitstage (gesdetzlich so geregelt)
|
||||
sonderurlaub.Add("Sonderurlaub aufgrund von Behinderungsgrad über 50", 5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Anpassung für Perspektiven:
|
||||
// CancellationPeriod im Vertrag sind die Regenerationstage hier.
|
||||
// Die Anzahl Tage, die da drin steht, soll als Sonderurlaub gutgeschrieben werden
|
||||
if (contract.CancellationPeriod > 0)
|
||||
sonderurlaub.Add("Regenerationstage", contract.CancellationPeriod);
|
||||
|
||||
}
|
||||
|
||||
return sonderurlaub;
|
||||
|
||||
}
|
||||
|
||||
public override List<long> GetVacationReasonIDs()
|
||||
{
|
||||
var res = new List<long>();
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Linq;
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Data.Entities;
|
||||
using BeWo.Report.ReportObjects;
|
||||
using BeWo.Service.Dienstplanung;
|
||||
using BS.Shared;
|
||||
using BS.Shared.DataContracts;
|
||||
|
||||
@@ -365,13 +366,13 @@ namespace SHKServiceSBD
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool AddServiceRecordToDuration(ServiceRecord item)
|
||||
public override bool AddServiceRecordToDuration(StundenkontoServiceRecord item)
|
||||
{
|
||||
if (item.ServiceDescription != null && item.ServiceDescription.ServiceCategory != null)
|
||||
if (item.ServiceDescription != null && item.ServiceDescription.Category != null)
|
||||
{
|
||||
if (!item.ServiceDescription.Name.Contains("Pause") && item.ServiceDescription.Name != "Zeitabzug")
|
||||
{
|
||||
if (item.ServiceDescription.ServiceCategory.Name == "Arbeitszeit" || item.ServiceDescription.ServiceCategory.Name == "Buchhaltung")
|
||||
if (item.ServiceDescription.Category.Name == "Arbeitszeit" || item.ServiceDescription.Category.Name == "Buchhaltung")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -409,21 +410,21 @@ namespace SHKServiceSBD
|
||||
|
||||
}
|
||||
|
||||
protected override ServiceRecordSummary BerechneStunden(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList<ServiceRecord> groupFilteredRecords, DateTime berichtsAnfang,
|
||||
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<ServiceRecord>();
|
||||
sum.RecordsImBerichtszeitraum = new List<StundenkontoServiceRecord>();
|
||||
//base.CorrectOverlappingTimes(groupFilteredRecords);
|
||||
|
||||
foreach (var item in groupFilteredRecords)
|
||||
{
|
||||
if (!IsServiceRecordFehlzeit(item))
|
||||
{
|
||||
if (item.Start.Value >= berichtsAnfang && item.Start.Value < berichtsEnde)
|
||||
if (item.Start >= berichtsAnfang && item.Start < berichtsEnde)
|
||||
{
|
||||
//if (AddServiceRecordToDuration(item))
|
||||
//{
|
||||
@@ -431,9 +432,9 @@ namespace SHKServiceSBD
|
||||
|
||||
|
||||
if (item.ServiceDescription != null &&
|
||||
item.ServiceDescription.ServiceCategory != null)
|
||||
item.ServiceDescription.Category != null)
|
||||
{
|
||||
if (item.ServiceDescription.ServiceCategory.Name == "Arbeitszeit" || item.ServiceDescription.ServiceCategory.Name == "Buchhaltung")
|
||||
if (item.ServiceDescription.Category.Name == "Arbeitszeit" || item.ServiceDescription.Category.Name == "Buchhaltung")
|
||||
{
|
||||
if (!item.ServiceDescription.Name.Contains("Pause"))
|
||||
{
|
||||
@@ -444,7 +445,7 @@ namespace SHKServiceSBD
|
||||
//arbeitszeit -= duration;
|
||||
}
|
||||
}
|
||||
else if (item.ServiceDescription.ServiceCategory.IsBillable)
|
||||
else if (item.ServiceDescription.Category.IsBillable)
|
||||
{
|
||||
flsGesamt += duration;
|
||||
}
|
||||
@@ -462,7 +463,7 @@ namespace SHKServiceSBD
|
||||
}
|
||||
|
||||
|
||||
public override IList<MitarbeiterstundenkontoRO.DayDetail> CreateDayDetails(DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList<ServiceRecord> recordsAll)
|
||||
public override IList<MitarbeiterstundenkontoRO.DayDetail> CreateDayDetails(DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList<StundenkontoServiceRecord> recordsAll)
|
||||
{
|
||||
var list = base.CreateDayDetails(berichtStart, berichtEnde, ed, recordsAll);
|
||||
foreach (var dd in list)
|
||||
@@ -471,7 +472,7 @@ namespace SHKServiceSBD
|
||||
|
||||
foreach (var sr in recordsAll)
|
||||
{
|
||||
if (sr.Start.HasValue && sr.Start >= berichtStart && sr.Start < berichtEnde && sr.End.HasValue && sr.Start.Value.Day == dd.Date.Day)
|
||||
if (sr.Start >= berichtStart && sr.Start < berichtEnde && sr.Start.Day == dd.Date.Day)
|
||||
{
|
||||
decimal duration = GetDuration(sr, ed);
|
||||
|
||||
@@ -857,11 +858,11 @@ namespace SHKServiceSBD
|
||||
return dd;
|
||||
}
|
||||
|
||||
protected override decimal GetDuration(ServiceRecord sr, MitarbeiterstundenkontoRO.EmployeeDetail ed)
|
||||
protected override decimal GetDuration(StundenkontoServiceRecord sr, MitarbeiterstundenkontoRO.EmployeeDetail ed)
|
||||
{
|
||||
var d = base.GetDuration(sr, ed);
|
||||
|
||||
if (sr.ServiceDescription.ServiceCategory.Name == "Buchhaltung" && sr.ServiceDescription.Name.Contains("negativ"))
|
||||
if (sr.ServiceDescription.Category.Name == "Buchhaltung" && sr.ServiceDescription.Name.Contains("negativ"))
|
||||
{
|
||||
d *= -1;
|
||||
}
|
||||
@@ -891,13 +892,13 @@ namespace SHKServiceSBD
|
||||
return base.GetFeiertagsFaktor(start);
|
||||
}
|
||||
|
||||
public override decimal BerechnePauseMinuten(IList<ServiceRecord> srListAlle)
|
||||
public override decimal BerechnePauseMinuten(IList<StundenkontoServiceRecord> srListAlle)
|
||||
{
|
||||
var srList = srListAlle.Where(s => s.ServiceDescription.ServiceCategory.Name == "Arbeitszeit");
|
||||
var srList = srListAlle.Where(s => s.ServiceDescription.Category.Name == "Arbeitszeit");
|
||||
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)
|
||||
{
|
||||
|
||||
@@ -1,48 +1,53 @@
|
||||
using System;
|
||||
using BeWo.Data.Entities;
|
||||
using BeWo.Report;
|
||||
using BeWo.Report.ReportObjects;
|
||||
using BeWo.Service.Dienstplanung;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
using BeWo.Report;
|
||||
using BeWo.Data.Entities;
|
||||
using BeWo.Report.ReportObjects;
|
||||
|
||||
|
||||
namespace SHKServiceSBD
|
||||
{
|
||||
public class CustomMitarbeiterstundenkontoBerechnungMonate : MitarbeiterstundenkontoBerechnungMonate
|
||||
{
|
||||
public override void CreateReport(MitarbeiterstundenkontoMonateRO ro)
|
||||
{
|
||||
DateTime start = ro.ReportStartDate;
|
||||
//public override void CreateReport(MitarbeiterstundenkontoMonateRO ro)
|
||||
//{
|
||||
// DateTime start = ro.ReportStartDate;
|
||||
|
||||
var roDieserMonat = MitarbeiterstundenkontoRO.Create(ro.EmployeeOid, ro.TeamOids, start, start.AddMonths(1), ro.EmployeeOids);
|
||||
var b = CreateMitarbeiterstundenkontoBerechnung();
|
||||
b.CreateReport(roDieserMonat);
|
||||
// var roDieserMonat = MitarbeiterstundenkontoRO.Create(ro.EmployeeOid, ro.TeamOids, start, start.AddMonths(1), ro.EmployeeOids);
|
||||
// var b = CreateMitarbeiterstundenkontoBerechnung();
|
||||
// b.CreateReport(roDieserMonat);
|
||||
|
||||
var list = new List<MitarbeiterstundenkontoRO>();
|
||||
while (start < ro.ReportEndDate)
|
||||
{
|
||||
DateTime monatStart = new DateTime(start.Year, start.Month, 1);
|
||||
DateTime monatEnde = monatStart.AddMonths(1);
|
||||
// var list = new List<MitarbeiterstundenkontoRO>();
|
||||
// List<StundenkontoServiceRecord> allServiceRecords = roDieserMonat.AllServiceRecords;
|
||||
|
||||
if (monatStart == ro.ReportStartDate)
|
||||
{
|
||||
MitarbeiterstundenkontoRO roMonat = MitarbeiterstundenkontoRO.Create(ro.EmployeeOid, ro.TeamOids, monatStart, monatEnde, ro.EmployeeOids);
|
||||
b = CreateMitarbeiterstundenkontoBerechnung();
|
||||
b.CreateReport(roMonat);
|
||||
// while (start < ro.ReportEndDate)
|
||||
// {
|
||||
// DateTime monatStart = new DateTime(start.Year, start.Month, 1);
|
||||
// DateTime monatEnde = monatStart.AddMonths(1);
|
||||
|
||||
list.Add(roMonat);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Schon oben erzeugt
|
||||
list.Add(roDieserMonat);
|
||||
}
|
||||
start = start.AddMonths(1);
|
||||
}
|
||||
// if (monatStart == ro.ReportStartDate)
|
||||
// {
|
||||
// MitarbeiterstundenkontoRO roMonat = MitarbeiterstundenkontoRO.Create(ro.EmployeeOid, ro.TeamOids, monatStart, monatEnde, ro.EmployeeOids);
|
||||
// roMonat.AllServiceRecords = allServiceRecords;
|
||||
// b = CreateMitarbeiterstundenkontoBerechnung();
|
||||
// b.CreateReport(roMonat);
|
||||
|
||||
// list.Add(roMonat);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// //Schon oben erzeugt
|
||||
// list.Add(roDieserMonat);
|
||||
// }
|
||||
// start = start.AddMonths(1);
|
||||
// }
|
||||
|
||||
// InitData(ro, list);
|
||||
//}
|
||||
|
||||
InitData(ro, list);
|
||||
}
|
||||
public override MitarbeiterstundenkontoBerechnung CreateMitarbeiterstundenkontoBerechnung()
|
||||
{
|
||||
return new CustomMitarbeiterstundenkontoBerechnung();
|
||||
|
||||
@@ -870,10 +870,10 @@ namespace BeWo.Service.Dienstplanung
|
||||
public static List<DienstplanerMonthlySummaryDC> BerechneSollSaldoUndIst(DienstplanerRootDC root, DateTime date, List<long> empOids)
|
||||
{
|
||||
VacationService vs = PluginLoader.FindClass<VacationService>();
|
||||
var konto = MitarbeiterstundenkontoRO.Create(null, null, date, date.AddMonths(1), empOids);
|
||||
var konto = MitarbeiterstundenkontoRONeu.Create(null, null, date, date.AddMonths(1), empOids);
|
||||
DienstplanungsManager manager = PluginLoader.FindClass<DienstplanungsManager>();
|
||||
|
||||
var berechnung = PluginLoader.FindClass<MitarbeiterstundenkontoBerechnung>();
|
||||
var berechnung = PluginLoader.FindClass<MitarbeiterstundenkontoBerechnungNeu>();
|
||||
berechnung.CreateReport(konto);
|
||||
List<DienstplanerMonthlySummaryDC> monatsZusammenfassung = new List<DienstplanerMonthlySummaryDC>();
|
||||
root.StundenBeiAbwesenheit = new Dictionary<long?, decimal>();
|
||||
@@ -1066,9 +1066,9 @@ namespace BeWo.Service.Dienstplanung
|
||||
{
|
||||
VacationService vs = new VacationService();
|
||||
List<long> empOids = new List<long>() { empOid };
|
||||
var konto = MitarbeiterstundenkontoRO.Create(null, null, date, date.AddMonths(1), empOids);
|
||||
var konto = MitarbeiterstundenkontoRONeu.Create(null, null, date, date.AddMonths(1), empOids);
|
||||
|
||||
var berechnung = PluginLoader.FindClass<MitarbeiterstundenkontoBerechnung>();
|
||||
var berechnung = PluginLoader.FindClass<MitarbeiterstundenkontoBerechnungNeu>();
|
||||
berechnung.CreateReport(konto);
|
||||
DienstplanerMonthlySummaryDC dc = new DienstplanerMonthlySummaryDC();
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ using System.Diagnostics;
|
||||
|
||||
namespace BeWo.Service.Dienstplanung
|
||||
{
|
||||
public class MitarbeiterstundenkontoRO
|
||||
public class MitarbeiterstundenkontoRONeu
|
||||
{
|
||||
List<EmployeeDetail> _EmployeeDetailList = new List<EmployeeDetail>();
|
||||
List<TeamDetail> _TeamDetailList = new List<TeamDetail>();
|
||||
@@ -48,13 +48,13 @@ namespace BeWo.Service.Dienstplanung
|
||||
set { this._TeamDetailList = value; }
|
||||
}
|
||||
|
||||
public static MitarbeiterstundenkontoRO Create(long? employeeOid, IList<long> teamOids, DateTime startDate, DateTime endDate, IEnumerable<long> employeeOids)
|
||||
public static MitarbeiterstundenkontoRONeu Create(long? employeeOid, IList<long> teamOids, DateTime startDate, DateTime endDate, IEnumerable<long> employeeOids)
|
||||
{
|
||||
Team team = null;
|
||||
|
||||
Dictionary<long, bool> empOidDict = new Dictionary<long, bool>();
|
||||
|
||||
var ro = new MitarbeiterstundenkontoRO {ReportStartDate = startDate, ReportEndDate = endDate};
|
||||
var ro = new MitarbeiterstundenkontoRONeu {ReportStartDate = startDate, ReportEndDate = endDate};
|
||||
|
||||
IList<Employee> employees = null;
|
||||
|
||||
@@ -324,7 +324,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
|
||||
public decimal ArbeitstageImBerichtszeitraum { get; set; }
|
||||
|
||||
public AbsenceTimeDays AbsenceTimeDays { get; set; }
|
||||
public AbsenceTimeDaysNeu AbsenceTimeDays { get; set; }
|
||||
public decimal? HourlyRate { get; set; }
|
||||
public decimal? WeeklyFLS { get; set; }
|
||||
public decimal? EmployeeSalaryByContract { get; set; }
|
||||
|
||||
@@ -14,27 +14,27 @@ using DevExpress.XtraCharts.Native;
|
||||
|
||||
namespace BeWo.Service.Dienstplanung
|
||||
{
|
||||
public class MitarbeiterstundenkontoBerechnung
|
||||
public class MitarbeiterstundenkontoBerechnungNeu
|
||||
{
|
||||
private decimal maxWochenstunden = 40;
|
||||
private AppSettings appSettings;
|
||||
private const int ANZ_WOCHENTAGE = 5;
|
||||
|
||||
|
||||
public MitarbeiterstundenkontoBerechnung()
|
||||
public MitarbeiterstundenkontoBerechnungNeu()
|
||||
{
|
||||
appSettings = AppSettings.CreateSettings();
|
||||
CheckIst = true;
|
||||
}
|
||||
|
||||
public MitarbeiterstundenkontoBerechnung(decimal maxWochenstunden) : this()
|
||||
public MitarbeiterstundenkontoBerechnungNeu(decimal maxWochenstunden) : this()
|
||||
{
|
||||
this.maxWochenstunden = maxWochenstunden;
|
||||
}
|
||||
|
||||
public bool CheckIst { get; set; }
|
||||
|
||||
public virtual void CreateReport(MitarbeiterstundenkontoRO ro)
|
||||
public virtual void CreateReport(MitarbeiterstundenkontoRONeu ro)
|
||||
{
|
||||
CreateEmployeeDetails(ro);
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
|
||||
}
|
||||
|
||||
public virtual void CreateTotals(MitarbeiterstundenkontoRO ro)
|
||||
public virtual void CreateTotals(MitarbeiterstundenkontoRONeu ro)
|
||||
{
|
||||
foreach (var empDetail in ro.EmployeeDetailList)
|
||||
{
|
||||
@@ -65,7 +65,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
ro.RelationFlsZuMittelbar = (ro.FlsIstGesamt / (ro.FlsIstGesamt + ro.MittelbarIst)) * 100;
|
||||
}
|
||||
|
||||
public virtual void CreateTeamDetails(MitarbeiterstundenkontoRO ro)
|
||||
public virtual void CreateTeamDetails(MitarbeiterstundenkontoRONeu ro)
|
||||
{
|
||||
foreach (var teamDetail in ro.TeamDetailList)
|
||||
{
|
||||
@@ -89,7 +89,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
|
||||
}
|
||||
|
||||
public virtual void CreateEmployeeDetails(MitarbeiterstundenkontoRO ro)
|
||||
public virtual void CreateEmployeeDetails(MitarbeiterstundenkontoRONeu ro)
|
||||
{
|
||||
foreach (var empDetail in ro.EmployeeDetailList)
|
||||
{
|
||||
@@ -117,7 +117,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
empDetail.HasContract = true;
|
||||
}
|
||||
|
||||
ServiceRecordSummary summaryTotal = new ServiceRecordSummary();
|
||||
var summaryTotal = new ServiceRecordSummaryNeu();
|
||||
summaryTotal.RecordsImBerichtszeitraum = new List<ServiceRecord>();
|
||||
|
||||
decimal pause1 = 0;
|
||||
@@ -432,7 +432,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
}
|
||||
|
||||
|
||||
protected virtual AbsenceTimeHours GetAbwesenheitenDurchServiceRecords(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, Contract c, IList<ServiceRecord> groupFilteredRecords, DateTime berichtsAnfang, DateTime berichtsEnde)
|
||||
protected virtual AbsenceTimeHoursNeu GetAbwesenheitenDurchServiceRecords(MitarbeiterstundenkontoRONeu.EmployeeDetail empDetail, Contract c, IList<ServiceRecord> groupFilteredRecords, DateTime berichtsAnfang, DateTime berichtsEnde)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
@@ -632,7 +632,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
return false;
|
||||
}
|
||||
|
||||
protected virtual void CalculateEmployeeSalary(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, DateTime start, DateTime ende)
|
||||
protected virtual void CalculateEmployeeSalary(MitarbeiterstundenkontoRONeu.EmployeeDetail empDetail, DateTime start, DateTime ende)
|
||||
{
|
||||
decimal maxpayment = 0;
|
||||
|
||||
@@ -689,9 +689,9 @@ namespace BeWo.Service.Dienstplanung
|
||||
empDetail.EmployeeSalaryByHours = salary;
|
||||
}
|
||||
|
||||
protected virtual ServiceRecordSummary BerechneStunden(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList<ServiceRecord> groupFilteredRecords, DateTime berichtsAnfang, DateTime berichtsEnde)
|
||||
protected virtual ServiceRecordSummaryNeu BerechneStunden(MitarbeiterstundenkontoRONeu.EmployeeDetail empDetail, IList<ServiceRecord> groupFilteredRecords, DateTime berichtsAnfang, DateTime berichtsEnde)
|
||||
{
|
||||
var sum = new ServiceRecordSummary();
|
||||
var sum = new ServiceRecordSummaryNeu();
|
||||
sum.RecordsImBerichtszeitraum = new List<ServiceRecord>();
|
||||
|
||||
empDetail.ServiceRecordsInSelectedTimeSpan = new List<ServiceRecord>();
|
||||
@@ -837,9 +837,9 @@ namespace BeWo.Service.Dienstplanung
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual List<MitarbeiterstundenkontoRO.EmployeeDetail> FilterEmployeeList(List<MitarbeiterstundenkontoRO.EmployeeDetail> employeeDetailList)
|
||||
public virtual List<MitarbeiterstundenkontoRONeu.EmployeeDetail> FilterEmployeeList(List<MitarbeiterstundenkontoRONeu.EmployeeDetail> employeeDetailList)
|
||||
{
|
||||
List<MitarbeiterstundenkontoRO.EmployeeDetail> newEmpList = new List<MitarbeiterstundenkontoRO.EmployeeDetail>();
|
||||
List<MitarbeiterstundenkontoRONeu.EmployeeDetail> newEmpList = new List<MitarbeiterstundenkontoRONeu.EmployeeDetail>();
|
||||
|
||||
foreach (var ed in employeeDetailList)
|
||||
{
|
||||
@@ -859,7 +859,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
return newEmpList;
|
||||
}
|
||||
|
||||
public virtual void HandleServiceRecords(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList<ServiceRecord> groupFilteredRecords, Contract contract)
|
||||
public virtual void HandleServiceRecords(MitarbeiterstundenkontoRONeu.EmployeeDetail empDetail, IList<ServiceRecord> groupFilteredRecords, Contract contract)
|
||||
{
|
||||
//do nothing
|
||||
}
|
||||
@@ -1037,7 +1037,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
return null;
|
||||
}
|
||||
|
||||
public virtual void HandleServiceRecord(MitarbeiterstundenkontoRO.EmployeeDetail emp, ServiceRecord item)
|
||||
public virtual void HandleServiceRecord(MitarbeiterstundenkontoRONeu.EmployeeDetail emp, ServiceRecord item)
|
||||
{
|
||||
//do nothing
|
||||
}
|
||||
@@ -1052,18 +1052,18 @@ namespace BeWo.Service.Dienstplanung
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual IList<MitarbeiterstundenkontoRO.DayDetail> CreateDayDetails(DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList<ServiceRecord> recordsAll)
|
||||
public virtual IList<MitarbeiterstundenkontoRONeu.DayDetail> CreateDayDetails(DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRONeu.EmployeeDetail ed, IList<ServiceRecord> recordsAll)
|
||||
{
|
||||
if (ShouldCreateDayDetailsForEachServiceRecord())
|
||||
{
|
||||
return CreateDayDetailsForEachServiceRecord(berichtStart, berichtEnde, ed, recordsAll);
|
||||
}
|
||||
|
||||
Dictionary<int, MitarbeiterstundenkontoRO.DayDetail> dayToDetail = new Dictionary<int, MitarbeiterstundenkontoRO.DayDetail>();
|
||||
Dictionary<int, MitarbeiterstundenkontoRONeu.DayDetail> dayToDetail = new Dictionary<int, MitarbeiterstundenkontoRONeu.DayDetail>();
|
||||
|
||||
for (int i = berichtStart.Day; i <= berichtEnde.AddDays(-1).Day; i++)
|
||||
{
|
||||
MitarbeiterstundenkontoRO.DayDetail dd = CreateDayDetail(new DateTime(berichtStart.Year, berichtStart.Month, i), ed);
|
||||
MitarbeiterstundenkontoRONeu.DayDetail dd = CreateDayDetail(new DateTime(berichtStart.Year, berichtStart.Month, i), ed);
|
||||
dayToDetail.Add(i, dd);
|
||||
}
|
||||
|
||||
@@ -1200,9 +1200,9 @@ namespace BeWo.Service.Dienstplanung
|
||||
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<MitarbeiterstundenkontoRONeu.DayDetail> CreateDayDetailsForEachServiceRecord(DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRONeu.EmployeeDetail ed, IList<ServiceRecord> recordsAll)
|
||||
{
|
||||
var details = new List<MitarbeiterstundenkontoRO.DayDetail>();
|
||||
var details = new List<MitarbeiterstundenkontoRONeu.DayDetail>();
|
||||
|
||||
foreach (var sr in recordsAll)
|
||||
{
|
||||
@@ -1268,7 +1268,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
return duration;
|
||||
}
|
||||
|
||||
public virtual void CalculateSpecialHours(MitarbeiterstundenkontoRO.DayDetail dd, ServiceRecord sr, decimal duration)
|
||||
public virtual void CalculateSpecialHours(MitarbeiterstundenkontoRONeu.DayDetail dd, ServiceRecord sr, decimal duration)
|
||||
{
|
||||
if (sr.Start.Value.DayOfWeek == DayOfWeek.Sunday)
|
||||
{
|
||||
@@ -1348,9 +1348,9 @@ namespace BeWo.Service.Dienstplanung
|
||||
return 0;
|
||||
}
|
||||
|
||||
public virtual MitarbeiterstundenkontoRO.DayDetail CreateDayDetail(DateTime date, MitarbeiterstundenkontoRO.EmployeeDetail ed)
|
||||
public virtual MitarbeiterstundenkontoRONeu.DayDetail CreateDayDetail(DateTime date, MitarbeiterstundenkontoRONeu.EmployeeDetail ed)
|
||||
{
|
||||
MitarbeiterstundenkontoRO.DayDetail dd = new MitarbeiterstundenkontoRO.DayDetail();
|
||||
MitarbeiterstundenkontoRONeu.DayDetail dd = new MitarbeiterstundenkontoRONeu.DayDetail();
|
||||
dd.ZusammenhaengendeZeitraeume = new List<DateTimeSpan>();
|
||||
|
||||
dd.Date = date.Date;
|
||||
@@ -1363,7 +1363,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
return dd;
|
||||
}
|
||||
|
||||
public virtual void CalculateAbsenceTimesForDay(MitarbeiterstundenkontoRO.DayDetail dd, MitarbeiterstundenkontoRO.EmployeeDetail ed)
|
||||
public virtual void CalculateAbsenceTimesForDay(MitarbeiterstundenkontoRONeu.DayDetail dd, MitarbeiterstundenkontoRONeu.EmployeeDetail ed)
|
||||
{
|
||||
var absenceTimes = ed.Employee.AbsenceTimes;
|
||||
|
||||
@@ -1483,9 +1483,9 @@ namespace BeWo.Service.Dienstplanung
|
||||
return 1;
|
||||
}
|
||||
|
||||
public virtual MitarbeiterstundenkontoRO.EmployeeDetail BerechneUeberstundenBis(MitarbeiterstundenkontoRO.EmployeeDetail edOrig, IList<ServiceRecord> records, DateTime monat, out decimal? ueberstunden, out decimal alteExtraUeberstunden)
|
||||
public virtual MitarbeiterstundenkontoRONeu.EmployeeDetail BerechneUeberstundenBis(MitarbeiterstundenkontoRONeu.EmployeeDetail edOrig, IList<ServiceRecord> records, DateTime monat, out decimal? ueberstunden, out decimal alteExtraUeberstunden)
|
||||
{
|
||||
MitarbeiterstundenkontoRO.EmployeeDetail edTotal = new MitarbeiterstundenkontoRO.EmployeeDetail();
|
||||
MitarbeiterstundenkontoRONeu.EmployeeDetail edTotal = new MitarbeiterstundenkontoRONeu.EmployeeDetail();
|
||||
|
||||
ueberstunden = null;
|
||||
alteExtraUeberstunden = 0;
|
||||
@@ -1628,9 +1628,9 @@ namespace BeWo.Service.Dienstplanung
|
||||
sollMitarbeiter -= fehlzeit.Value;
|
||||
|
||||
}
|
||||
|
||||
|
||||
MitarbeiterstundenkontoRO.EmployeeDetail ed = new MitarbeiterstundenkontoRO.EmployeeDetail();
|
||||
|
||||
MitarbeiterstundenkontoRONeu.EmployeeDetail ed = new MitarbeiterstundenkontoRONeu.EmployeeDetail();
|
||||
ed.SollProTag = weeklyTotalHours / arbeitstageProWoche;
|
||||
ed.ArbeitstageProWoche = arbeitstageProWoche;
|
||||
ed.ArbeitstageImBerichtszeitraum = arbeitstage;
|
||||
@@ -1764,12 +1764,12 @@ namespace BeWo.Service.Dienstplanung
|
||||
return edTotal;
|
||||
}
|
||||
|
||||
protected virtual decimal? BerechneUeberstunden(MitarbeiterstundenkontoRO.EmployeeDetail ed, decimal? ueberstundenStd, Contract contract, DateTime start, DateTime ende)
|
||||
protected virtual decimal? BerechneUeberstunden(MitarbeiterstundenkontoRONeu.EmployeeDetail ed, decimal? ueberstundenStd, Contract contract, DateTime start, DateTime ende)
|
||||
{
|
||||
return ueberstundenStd;
|
||||
}
|
||||
|
||||
public virtual decimal BerechneSollProWoche(Contract c, MitarbeiterstundenkontoRO.EmployeeDetail ed)
|
||||
public virtual decimal BerechneSollProWoche(Contract c, MitarbeiterstundenkontoRONeu.EmployeeDetail ed)
|
||||
{
|
||||
if (c != null)
|
||||
{
|
||||
@@ -1796,7 +1796,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
}
|
||||
|
||||
|
||||
public virtual decimal BerechneStundenDurchAbwesenheiten(AbsenceTimeDays ath, DateTime start, DateTime ende, Contract c, MitarbeiterstundenkontoRO.EmployeeDetail ed)
|
||||
public virtual decimal BerechneStundenDurchAbwesenheiten(AbsenceTimeDaysNeu ath, DateTime start, DateTime ende, Contract c, MitarbeiterstundenkontoRONeu.EmployeeDetail ed)
|
||||
{
|
||||
if (BerechneAlteAbwesenheitsStunden(start))
|
||||
{
|
||||
@@ -1938,7 +1938,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
return false;
|
||||
}
|
||||
|
||||
private decimal BerechneStundenDurchAbwesenheitenAlt(AbsenceTimeDays ath, DateTime start, DateTime ende, Contract c, MitarbeiterstundenkontoRO.EmployeeDetail ed)
|
||||
private decimal BerechneStundenDurchAbwesenheitenAlt(AbsenceTimeDaysNeu ath, DateTime start, DateTime ende, Contract c, MitarbeiterstundenkontoRONeu.EmployeeDetail ed)
|
||||
{
|
||||
|
||||
decimal? sollProMonat = BerechneSollProMonat(ed.Employee, start, ende);
|
||||
@@ -1982,7 +1982,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
}
|
||||
}
|
||||
|
||||
public virtual decimal GetSollArbeitszeitProArbeitstag(Contract contract, MitarbeiterstundenkontoRO.EmployeeDetail ed)
|
||||
public virtual decimal GetSollArbeitszeitProArbeitstag(Contract contract, MitarbeiterstundenkontoRONeu.EmployeeDetail ed)
|
||||
{
|
||||
if (contract.MonthlyTotalHours.HasValue && contract.MonthlyTotalHours.Value > 0 && ed.ArbeitstageImBerichtszeitraum > 0)
|
||||
{
|
||||
@@ -1997,7 +1997,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
}
|
||||
|
||||
//Wird nicht mehr benutzt
|
||||
public virtual decimal BerechneStundenDurchAbwesenheiten(AbsenceTimeDays ath, DateTime start, DateTime ende, int arbeitstageProWoche, decimal sollProWoche)
|
||||
public virtual decimal BerechneStundenDurchAbwesenheiten(AbsenceTimeDaysNeu ath, DateTime start, DateTime ende, int arbeitstageProWoche, decimal sollProWoche)
|
||||
{
|
||||
decimal stunden = 0;
|
||||
|
||||
@@ -2057,7 +2057,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
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<MitarbeiterstundenkontoRONeu.DayDetail> days, DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRONeu.EmployeeDetail ed, IList<ServiceRecord> recordsAll)
|
||||
{
|
||||
decimal addHours = 0;
|
||||
|
||||
@@ -2077,7 +2077,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
return addHours;
|
||||
}
|
||||
|
||||
public virtual decimal CalculateBreakMinutes(MitarbeiterstundenkontoRO.DayDetail dayDetail, int maxHoursUntilBreak, int breakMinutes)
|
||||
public virtual decimal CalculateBreakMinutes(MitarbeiterstundenkontoRONeu.DayDetail dayDetail, int maxHoursUntilBreak, int breakMinutes)
|
||||
{
|
||||
decimal addHours = 0;
|
||||
|
||||
@@ -2175,7 +2175,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
return contractNextToStartDate;
|
||||
}
|
||||
|
||||
public virtual AbsenceTimeDays GetAbsenceTimeDaysWithWorkWeeks(Employee emp, DateTime start, DateTime end, int arbeitstageProWoche)
|
||||
public virtual AbsenceTimeDaysNeu GetAbsenceTimeDaysWithWorkWeeks(Employee emp, DateTime start, DateTime end, int arbeitstageProWoche)
|
||||
{
|
||||
if (HatArbeitszeitImZeitraum(emp.Arbeitszeiten, start, end))
|
||||
{
|
||||
@@ -2185,9 +2185,9 @@ namespace BeWo.Service.Dienstplanung
|
||||
|
||||
}
|
||||
|
||||
public virtual AbsenceTimeDays GetAbsenceTimeDaysNachArbeitszeiten(Employee emp, DateTime start, DateTime end, int arbeitstageProWoche)
|
||||
public virtual AbsenceTimeDaysNeu GetAbsenceTimeDaysNachArbeitszeiten(Employee emp, DateTime start, DateTime end, int arbeitstageProWoche)
|
||||
{
|
||||
var atd = new AbsenceTimeDays();
|
||||
var atd = new AbsenceTimeDaysNeu();
|
||||
|
||||
decimal? tage = null;
|
||||
|
||||
@@ -2204,7 +2204,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
return atd;
|
||||
}
|
||||
|
||||
public virtual void AddAbsenceDaysNachArbeitszeitenFuerTag(AbsenceTimeDays atd, Employee emp, DateTime tag)
|
||||
public virtual void AddAbsenceDaysNachArbeitszeitenFuerTag(AbsenceTimeDaysNeu atd, Employee emp, DateTime tag)
|
||||
{
|
||||
Dictionary<String, bool> daysDict = new Dictionary<String, bool>();
|
||||
foreach (var az in emp.Arbeitszeiten)
|
||||
@@ -2241,7 +2241,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
}
|
||||
}
|
||||
|
||||
private void AddAbsenceDaysFuerTag(AbsenceTimeDays atd, Employee emp, DateTime arbeitstagStart, DateTime arbeitstagEnde)
|
||||
private void AddAbsenceDaysFuerTag(AbsenceTimeDaysNeu atd, Employee emp, DateTime arbeitstagStart, DateTime arbeitstagEnde)
|
||||
{
|
||||
var hours = (decimal)arbeitstagEnde.Subtract(arbeitstagStart).TotalHours;
|
||||
|
||||
@@ -2290,9 +2290,9 @@ namespace BeWo.Service.Dienstplanung
|
||||
|
||||
}
|
||||
|
||||
public virtual AbsenceTimeDays GetAbsenceTimeDaysWithWorkWeeks(IList<AbsenceTime> absenceTimes, DateTime start, DateTime end, int arbeitstageProWoche)
|
||||
public virtual AbsenceTimeDaysNeu GetAbsenceTimeDaysWithWorkWeeks(IList<AbsenceTime> absenceTimes, DateTime start, DateTime end, int arbeitstageProWoche)
|
||||
{
|
||||
var atd = new AbsenceTimeDays();
|
||||
var atd = new AbsenceTimeDaysNeu();
|
||||
var totalSpan = new DateTimeSpan();
|
||||
totalSpan.StartDate = start;
|
||||
totalSpan.EndDate = end.AddDays(-1);
|
||||
@@ -2413,7 +2413,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
}
|
||||
|
||||
|
||||
public virtual AbsenceTimeDays GetAbsenceTimeDays(IList<AbsenceTime> absenceTimes, DateTime start, DateTime end)
|
||||
public virtual AbsenceTimeDaysNeu GetAbsenceTimeDays(IList<AbsenceTime> absenceTimes, DateTime start, DateTime end)
|
||||
{
|
||||
return GetAbsenceTimeDaysWithWorkWeeks(absenceTimes, start, end, ANZ_WOCHENTAGE);
|
||||
}
|
||||
@@ -2640,7 +2640,7 @@ namespace BeWo.Service.Dienstplanung
|
||||
}
|
||||
}
|
||||
|
||||
public class AbsenceTimeDays
|
||||
public class AbsenceTimeDaysNeu
|
||||
{
|
||||
public decimal? TageUrlaub;
|
||||
public decimal? TageKrankheit;
|
||||
@@ -2650,14 +2650,14 @@ namespace BeWo.Service.Dienstplanung
|
||||
public Dictionary<DateTimeSpan, decimal> RestStundenProWocheDict;
|
||||
}
|
||||
|
||||
public class AbsenceTimeHours
|
||||
public class AbsenceTimeHoursNeu
|
||||
{
|
||||
public decimal StundenUrlaub;
|
||||
public decimal StundenKrankheit;
|
||||
public decimal StundenSonstiges;
|
||||
}
|
||||
|
||||
public class ServiceRecordSummary
|
||||
public class ServiceRecordSummaryNeu
|
||||
{
|
||||
public decimal IstAbrechenbar { get; set; }
|
||||
|
||||
|
||||
32
Service/Dienstplanung/StundenkontoServiceRecord.cs
Normal file
32
Service/Dienstplanung/StundenkontoServiceRecord.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows.Ink;
|
||||
using BS.Shared.Core;
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Data.Entities;
|
||||
using BS.Shared;
|
||||
using BS.Shared.Extensions;
|
||||
using System.Diagnostics;
|
||||
using BS.Shared.DataContracts;
|
||||
|
||||
namespace BeWo.Service.Dienstplanung
|
||||
{
|
||||
public class StundenkontoServiceRecord
|
||||
{
|
||||
public long? ServiceRecordOid { get; set; }
|
||||
public DateTime Start { get; set; }
|
||||
public DateTime End { get; set; }
|
||||
public decimal RoundedDuration { get; set; }
|
||||
public int? GroupEmployeeCount { get; set; }
|
||||
public int? GroupPersonCount { get; set; }
|
||||
public decimal? GroupRoundedDuration { get; set; }
|
||||
public long? GroupOid { get; set; }
|
||||
public decimal DistanceInMeter { get; set; }
|
||||
public decimal? Betrag { get; set; }
|
||||
public ServiceDescriptionDC ServiceDescription { get; set; }
|
||||
public long? CostBearer2SupportConceptOid { get; set; }
|
||||
public long? CustomerOid { get; set; }
|
||||
public long? EmployeeOid { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -330,7 +330,7 @@ namespace BeWo.Service.Plugins
|
||||
//t = "5065709552"; // Biotop e.V.
|
||||
//t = "9094672461"; // Transkulturelles Betreuungsbüro (Toprak GmbH)
|
||||
//t = "9008813932"; // Aids Hilfe Giessen
|
||||
//t = "4052216789"; // Perspektiven e.V.
|
||||
t = "4052216789"; // Perspektiven e.V.
|
||||
//t = "7663765314"; // Christina Frommen (Frommen BeWo)
|
||||
//t = "5462295916"; // BeWo Dellbrueck
|
||||
//t = "2120989920"; // Sozialbüro Schüßler und Wilckens GbR
|
||||
@@ -407,7 +407,7 @@ namespace BeWo.Service.Plugins
|
||||
//t = "9520730180"; // Arbeitskreis Jugend- und Drogenberatung Waf
|
||||
//t = "8365918329"; // Lebenshilfe Stade e.V. Schulbegleitender Dienst
|
||||
//t = "6203102637"; // BeWo Neuss-Lauth u. Lauth GbR
|
||||
t = "7060431533"; // Arche Tecklenburg e.V.
|
||||
//t = "7060431533"; // Arche Tecklenburg e.V.
|
||||
//t = "1159580198"; // Wendepunkt Velbert gGmbH
|
||||
//t = "5094575560"; // Christopherus Haus MID
|
||||
//t = "5261046426"; // SelbstWerk EN / Bettina Heckrodt
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Data.Access;
|
||||
using BeWo.Data.Entities;
|
||||
using BeWo.Service.DCEntityMapper;
|
||||
using BeWo.Service.ServiceImplementations;
|
||||
@@ -11,12 +7,20 @@ using BS.Shared.Core;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.Extensions;
|
||||
using DevExpress.CodeParser;
|
||||
using DevExpress.XtraRichEdit.Import.Html;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace BeWo.Service.Plugins
|
||||
{
|
||||
public class VacationService : AbstractIDSpecificDefaultClass<VacationService>
|
||||
{
|
||||
private List<FeiertagDC> databaseFeiertage = null;
|
||||
private IList<AbsenceReason> allAbsenceReasons = null;
|
||||
private IList<GeschenkterUrlaubstag> allGeschenkteUrlaubstage = null;
|
||||
private List<DateTime> _Feiertage { get;set; }
|
||||
private string _Bundesland = "NRW";
|
||||
|
||||
@@ -141,6 +145,31 @@ namespace BeWo.Service.Plugins
|
||||
return databaseFeiertage.Where(f => f.Datum >= new DateTime(year, 1, 1) && f.Datum < new DateTime(year + 1, 1, 1)).ToList();
|
||||
}
|
||||
|
||||
private IList<AbsenceReason> AllAbsenceReasons
|
||||
{
|
||||
get
|
||||
{
|
||||
if (allAbsenceReasons == null)
|
||||
{
|
||||
allAbsenceReasons = DAOFactory.GenericDAO.GetAll<AbsenceReason>();
|
||||
}
|
||||
|
||||
return allAbsenceReasons;
|
||||
}
|
||||
}
|
||||
|
||||
private IList<GeschenkterUrlaubstag> AllGeschenkteUrlaubstage
|
||||
{
|
||||
get
|
||||
{
|
||||
return allGeschenkteUrlaubstage;
|
||||
}
|
||||
set
|
||||
{
|
||||
allGeschenkteUrlaubstage = value;
|
||||
}
|
||||
}
|
||||
|
||||
public static DateTime GetOsterSonntag(int year)
|
||||
{
|
||||
|
||||
@@ -456,54 +485,37 @@ namespace BeWo.Service.Plugins
|
||||
_Feiertage = GetFeiertage(year);
|
||||
}
|
||||
|
||||
public virtual List<AbsenceTimeDC> GetAllVacationAbsences(List<AbsenceTimeDC> absenceTimes, int year, bool inklEndeEinerAbsenceTime)
|
||||
public virtual List<AbsenceTimeDC> GetAllVacationAbsences(IList<AbsenceTimeDC> absenceTimes, int year, bool inklEndeEinerAbsenceTime)
|
||||
{
|
||||
List<AbsenceTimeDC> absences = new List<AbsenceTimeDC>();
|
||||
var absReason = GetVacationReasonIDs();
|
||||
|
||||
if (inklEndeEinerAbsenceTime)
|
||||
{
|
||||
absences = absenceTimes.Where(x => absReason.Contains(x.Reason.AbsenceReasonOid.Value) && (x.Start.HasValue && x.Start.Value.Year == year)
|
||||
|| absReason.Contains(x.Reason.AbsenceReasonOid.Value) && (x.End.HasValue && x.End.Value.Year == year))
|
||||
.OrderBy(x => x.Start).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
absences = absenceTimes.Where(x => absReason.Contains(x.Reason.AbsenceReasonOid.Value) &&
|
||||
(x.Start.HasValue && x.Start.Value.Year <= year))
|
||||
.OrderBy(x => x.Start).ToList();
|
||||
}
|
||||
|
||||
|
||||
return absences;
|
||||
return GetAllAbsencesWithReasonOid(absenceTimes, absReason, year, inklEndeEinerAbsenceTime);
|
||||
}
|
||||
public virtual List<AbsenceTimeDC> GetAllSickAbsences(List<AbsenceTimeDC> absenceTimes, int year, bool inklEndeEinerAbsenceTime)
|
||||
public virtual List<AbsenceTimeDC> GetAllSickAbsences(IList<AbsenceTimeDC> absenceTimes, int year, bool inklEndeEinerAbsenceTime)
|
||||
{
|
||||
List<AbsenceTimeDC> absences = new List<AbsenceTimeDC>();
|
||||
var absReason = GetSickReasonIDs();
|
||||
|
||||
return GetAllAbsencesWithReasonOid(absenceTimes, absReason, year, inklEndeEinerAbsenceTime);
|
||||
}
|
||||
|
||||
public virtual List<AbsenceTimeDC> GetAllAbsencesWithReasonOid(IList<AbsenceTimeDC> absenceTimes, IList<long> reasonOids, int year, bool inklEndeEinerAbsenceTime)
|
||||
{
|
||||
if (inklEndeEinerAbsenceTime)
|
||||
{
|
||||
absences = absenceTimes.Where(x => absReason.Contains(x.Reason.AbsenceReasonOid.Value) && (x.Start.HasValue && x.Start.Value.Year == year)
|
||||
|| absReason.Contains(x.Reason.AbsenceReasonOid.Value) && (x.End.HasValue && x.End.Value.Year == year))
|
||||
return absenceTimes.Where(x => reasonOids.Contains(x.Reason.AbsenceReasonOid.Value) && (x.Start.HasValue && x.Start.Value.Year == year)
|
||||
|| reasonOids.Contains(x.Reason.AbsenceReasonOid.Value) && (x.End.HasValue && x.End.Value.Year == year))
|
||||
.OrderBy(x => x.Start).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
absences = absenceTimes.Where(x => absReason.Contains(x.Reason.AbsenceReasonOid.Value) &&
|
||||
return absenceTimes.Where(x => reasonOids.Contains(x.Reason.AbsenceReasonOid.Value) &&
|
||||
(x.Start.HasValue && x.Start.Value.Year <= year))
|
||||
.OrderBy(x => x.Start).ToList();
|
||||
}
|
||||
|
||||
|
||||
return absences;
|
||||
}
|
||||
|
||||
public virtual List<long> GetVacationReasonIDs()
|
||||
{
|
||||
var res = new List<long>();
|
||||
var filters = new List<string> { "URLAUB" };
|
||||
var reasons = DAOFactory.GenericDAO.GetAll<AbsenceReason>();
|
||||
var reasons = AllAbsenceReasons;
|
||||
|
||||
foreach (var reason in reasons)
|
||||
{
|
||||
@@ -525,7 +537,7 @@ namespace BeWo.Service.Plugins
|
||||
{
|
||||
var res = new List<long>();
|
||||
var filters = new List<string> { "KRANK" };
|
||||
var reasons = DAOFactory.GenericDAO.GetAll<AbsenceReason>();
|
||||
var reasons = AllAbsenceReasons;
|
||||
|
||||
foreach (var reason in reasons)
|
||||
{
|
||||
@@ -579,24 +591,28 @@ namespace BeWo.Service.Plugins
|
||||
// 6. Anzahl der aus 1.-5. resultierenden Resturlaubstage fürs Jahr, also Resturlaub vom Urlaubskonto
|
||||
// 7. Liste der DCs nach Datum sortieren, um eine zeitliche Hierarchie zu schaffen
|
||||
|
||||
public virtual List<UrlaubskontoDarstellungDC> BerechneUrlaubskontoZurDarstellung(EmployeeDC emp, int year, DateTime? endeDerBerechnung = null)
|
||||
public virtual List<UrlaubskontoDarstellungDC> BerechneUrlaubskontoZurDarstellung(Employee emp, int year, DateTime? endeDerBerechnung = null)
|
||||
{
|
||||
Stopwatch stopwatch = Stopwatch.StartNew();
|
||||
|
||||
|
||||
|
||||
List<UrlaubskontoDarstellungDC> dcs = new List<UrlaubskontoDarstellungDC>();
|
||||
EmployeeServiceImp es = PluginLoader.FindClass<EmployeeServiceImp>();
|
||||
//EmployeeServiceImp es = PluginLoader.FindClass<EmployeeServiceImp>();
|
||||
|
||||
// Urlaubskonto erstellen
|
||||
var ent = DAOFactory.GenericDAO.LoadByID<Employee>((long)emp.EmployeeOid);
|
||||
var urlaubskonten = BerechneUrlaubskonto(ent, year);
|
||||
//var ent = DAOFactory.GenericDAO.LoadByID<Employee>((long)emp.EmployeeOid);
|
||||
var urlaubskonten = BerechneUrlaubskonto(emp, year);
|
||||
var aktuellesKonto = urlaubskonten.First(u => u.Key == year);
|
||||
|
||||
var geschenkteUrlaubstage = es.GetGeschenkteUrlaubstageForEmployee((long)emp.EmployeeOid);
|
||||
var geschenkteUrlaubstage = GetGeschenkteUrlaubstageForEmployee(emp.Oid.Value);
|
||||
decimal sonderurlaub = 0;
|
||||
|
||||
|
||||
// Benötigt werden:
|
||||
// 1. Vetragliche Urlaubstage für´s Jahr
|
||||
List<ContractDC> contracts = new List<ContractDC>();
|
||||
Dictionary<ContractDC, int> contractsAndWeeklyDays = new Dictionary<ContractDC, int>();
|
||||
List<Contract> contracts = new List<Contract>();
|
||||
Dictionary<Contract, int> contractsAndWeeklyDays = new Dictionary<Contract, int>();
|
||||
|
||||
// Vertrag für Jahr raussuchen
|
||||
foreach (var c in emp.Contracts)
|
||||
@@ -616,7 +632,7 @@ namespace BeWo.Service.Plugins
|
||||
if (year >= contractStartDate.Year && year <= contractEndDate.Year) // Wenn das ausgewählte Jahr zwischen Vertragsbeginn und -ende liegt
|
||||
{
|
||||
contracts.Add(c);
|
||||
contractsAndWeeklyDays.Add(c, c.WeeklyDays);
|
||||
contractsAndWeeklyDays.Add(c, c.WeeklyDays ?? 5);
|
||||
}
|
||||
}
|
||||
if (contracts.Count == 0) // Kein Vertrag = kein Urlaubskonto
|
||||
@@ -632,7 +648,7 @@ namespace BeWo.Service.Plugins
|
||||
decimal tageNachAbzug = 0;
|
||||
decimal abzuziehendeTage = 0;
|
||||
|
||||
int arbeitstage = contract.WeeklyDays; // Vertragliche Arbeitstage
|
||||
int arbeitstage = contract.WeeklyDays ?? 5; // Vertragliche Arbeitstage
|
||||
DateTime? endDate = contract.ContractEndDate == null ? new DateTime(year, 12, 31) : contract.ContractEndDate; // Ende des Vertrags auf letzten Tag des Jahres setzen, wenn kein Ende
|
||||
var leaveDays = contract.EmploymentType?.LeaveDays == null ? contract.LeaveDays : contract.EmploymentType.LeaveDays; // Vertragliche Urlaubstage
|
||||
if (!leaveDays.HasValue)
|
||||
@@ -675,7 +691,7 @@ namespace BeWo.Service.Plugins
|
||||
var obereZeile = new UrlaubskontoDarstellungDC()
|
||||
{
|
||||
AnzahlTage = string.Format("{0:0.00}", anzahlTage),
|
||||
Herkunft = string.Format("EmpOid:{0} ContractOid:{1}", emp.EmployeeOid, contract.ContractOid),
|
||||
Herkunft = string.Format("EmpOid:{0} ContractOid:{1}", emp.Oid, contract.Oid),
|
||||
Tooltip = null,
|
||||
IsDeletable = false,
|
||||
DatumZurSortierung = null
|
||||
@@ -684,7 +700,7 @@ namespace BeWo.Service.Plugins
|
||||
dcs.Add(obereZeile);
|
||||
|
||||
// Standardmäßig Sonderurlaub bei Schwerbehinderung, aber modifizierbar
|
||||
List<UrlaubskontoDarstellungDC> sonderurlaubItems = CreateSonderurlaubItems(emp, contract, es.GetSonderurlaubForEmployee(emp.EmployeeOid.Value, year), dcs);
|
||||
List<UrlaubskontoDarstellungDC> sonderurlaubItems = CreateSonderurlaubItems(emp, contract, GetSonderurlaubForEmployee(emp, year), dcs);
|
||||
//List<UrlaubskontoDarstellungDC> sonderurlaubItems = AddSonderurlaub(emp, contract, year);
|
||||
if (sonderurlaubItems.Count > 0 && !dcs.Any(d => d.Erlaeuterung == "Sonderurlaub aufgrund von Behinderungsgrad über 50"))
|
||||
{
|
||||
@@ -727,10 +743,10 @@ namespace BeWo.Service.Plugins
|
||||
var tempDate = eintrag.Date.ToString().Split(' ');
|
||||
dcs.Add(new UrlaubskontoDarstellungDC()
|
||||
{
|
||||
Erlaeuterung = string.Format("Tage geschenkt am {0} von {1} ({2})", tempDate[0], eintrag.InsUser, eintrag.GeschenkterUrlaubstagNotice),
|
||||
Erlaeuterung = string.Format("Tage geschenkt am {0} von {1} ({2})", tempDate[0], eintrag.InsUser, eintrag.Notice),
|
||||
AnzahlTage = eintrag.AnzahlTage > 0 ? string.Format("+{0:0.00}", eintrag.AnzahlTage) : string.Format("{0:0.00}", eintrag.AnzahlTage),
|
||||
Herkunft = string.Format("GeschenkterUrlaubstagOid:{0}", eintrag.GeschenkterUrlaubstagOid),
|
||||
Tooltip = eintrag.GeschenkterUrlaubstagNotice,
|
||||
Herkunft = string.Format("GeschenkterUrlaubstagOid:{0}", eintrag.Oid),
|
||||
Tooltip = eintrag.Notice,
|
||||
IsDeletable = true,
|
||||
DatumZurSortierung = eintrag.Date
|
||||
});
|
||||
@@ -749,7 +765,7 @@ namespace BeWo.Service.Plugins
|
||||
{
|
||||
Erlaeuterung = "Resturlaub aus " + (year - 1) + " :",
|
||||
AnzahlTage = string.Format("+{0:0.00}", aktuellesKonto.Value.ResturlaubVorjahrTotal),
|
||||
Herkunft = string.Format("EmpOid:{0} Urlaubskonto:{1}", emp.EmployeeOid, year),
|
||||
Herkunft = string.Format("EmpOid:{0} Urlaubskonto:{1}", emp.Oid, year),
|
||||
Tooltip = null,
|
||||
IsDeletable = false
|
||||
});
|
||||
@@ -764,7 +780,7 @@ namespace BeWo.Service.Plugins
|
||||
{
|
||||
Erlaeuterung = "Resturlaub aus " + (year - 1) + " :",
|
||||
AnzahlTage = string.Format("+{0:0.00}", aktuellesKonto.Value.ResturlaubVorjahrTotal),
|
||||
Herkunft = string.Format("EmpOid:{0} Urlaubskonto:{1}", emp.EmployeeOid, year),
|
||||
Herkunft = string.Format("EmpOid:{0} Urlaubskonto:{1}", emp.Oid, year),
|
||||
Tooltip = null,
|
||||
IsDeletable = false
|
||||
});
|
||||
@@ -787,10 +803,10 @@ namespace BeWo.Service.Plugins
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var absDcs = MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDCs(emp.AbsenceTimes);
|
||||
|
||||
// 5. Alle Urlaube, die Anfang oder Ende im gewählten Jahr haben
|
||||
var absences = GetAllVacationAbsences(emp.AbsenceTimes, year, true); // Abwesenheiten nur auf Urlaube filtern
|
||||
var absences = GetAllVacationAbsences(absDcs, year, true); // Abwesenheiten nur auf Urlaube filtern
|
||||
|
||||
if (absences.Count > 0) // Wenn es Urlaube in dem Jahr gibt
|
||||
{
|
||||
@@ -846,12 +862,18 @@ namespace BeWo.Service.Plugins
|
||||
// 7. Liste der DCs nach Datum sortieren, um eine zeitliche Hierarchie zu schaffen
|
||||
var sortierteDCs = dcs.OrderBy(dc => dc.DatumZurSortierung).ToList();
|
||||
|
||||
|
||||
stopwatch.Stop();
|
||||
|
||||
Console.WriteLine($"Laufzeit: {stopwatch.ElapsedMilliseconds} ms");
|
||||
Console.WriteLine($"Laufzeit: {stopwatch.Elapsed}");
|
||||
|
||||
return sortierteDCs;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public virtual List<UrlaubskontoDarstellungDC> CreateSonderurlaubItems(EmployeeDC emp, ContractDC contract, Dictionary<string, decimal> sonderurlaubDict, List<UrlaubskontoDarstellungDC> darstellungList)
|
||||
public virtual List<UrlaubskontoDarstellungDC> CreateSonderurlaubItems(Employee emp, Contract contract, Dictionary<string, decimal> sonderurlaubDict, List<UrlaubskontoDarstellungDC> darstellungList)
|
||||
{
|
||||
List<UrlaubskontoDarstellungDC> sonderurlaubItems = new List<UrlaubskontoDarstellungDC>();
|
||||
|
||||
@@ -861,7 +883,7 @@ namespace BeWo.Service.Plugins
|
||||
var sonderurlaub = new UrlaubskontoDarstellungDC()
|
||||
{
|
||||
AnzahlTage = string.Format("{0:0.00}", item.Value), // Standardmäßig 5 Tage
|
||||
Herkunft = string.Format("EmpOid:{0} ContractOid:{1}", emp.EmployeeOid, contract.ContractOid),
|
||||
Herkunft = string.Format("EmpOid:{0} ContractOid:{1}", emp.Oid, contract.Oid),
|
||||
Tooltip = "",
|
||||
IsDeletable = false,
|
||||
DatumZurSortierung = null,
|
||||
@@ -903,7 +925,7 @@ namespace BeWo.Service.Plugins
|
||||
return sonderurlaub;
|
||||
}
|
||||
|
||||
public decimal CountAbwesenheitstage(EmployeeDC emp, AbsenceTimeDC spanne, int year, Dictionary<ContractDC, int> contractsAndWeeklyDays)
|
||||
public decimal CountAbwesenheitstage(Employee emp, AbsenceTimeDC spanne, int year, Dictionary<Contract, int> contractsAndWeeklyDays)
|
||||
{
|
||||
decimal summeTage = 0;
|
||||
if (emp.Arbeitszeiten != null && emp.Arbeitszeiten.Count > 0)
|
||||
@@ -913,7 +935,7 @@ namespace BeWo.Service.Plugins
|
||||
if (az.GueltigVon.HasValue)
|
||||
{
|
||||
var azEnde = !az.GueltigBis.HasValue ? new DateTime(year, 12, 31) : az.GueltigBis.Value;
|
||||
if (new DateTimeSpan(az.GueltigVon.Value, azEnde).ContainsDate(spanne.AbsenceSpan.StartDate) && az.Eintraege != null && az.Eintraege.Count > 0)
|
||||
if (new DateTimeSpan(az.GueltigVon.Value, azEnde).ContainsDate(spanne.AbsenceSpan.StartDate) && az.ArbeitszeitEintraege != null && az.ArbeitszeitEintraege.Count > 0)
|
||||
{
|
||||
summeTage = CountAbwesenheitstageArbeitszeiten(spanne, year, az);
|
||||
break;
|
||||
@@ -930,7 +952,7 @@ namespace BeWo.Service.Plugins
|
||||
|
||||
return summeTage;
|
||||
}
|
||||
public decimal CountAbwesenheistageStandard(AbsenceTimeDC spanne, int year, Dictionary<ContractDC, int> contractsAndWeeklyDays)
|
||||
public decimal CountAbwesenheistageStandard(AbsenceTimeDC spanne, int year, Dictionary<Contract, int> contractsAndWeeklyDays)
|
||||
{
|
||||
var summeTage = 0m;
|
||||
if (spanne.End == null) // Wenn es kein Ende gibt, Ende auf letzten Tag im Jahr setzen
|
||||
@@ -985,7 +1007,7 @@ namespace BeWo.Service.Plugins
|
||||
|
||||
return summeTage;
|
||||
}
|
||||
public decimal CountAbwesenheitstageArbeitszeiten(AbsenceTimeDC spanne, int year, ArbeitszeitDC az)
|
||||
public decimal CountAbwesenheitstageArbeitszeiten(AbsenceTimeDC spanne, int year, Arbeitszeit az)
|
||||
{
|
||||
//var feiertage = GetFeiertage(year);
|
||||
var feiertage = GetFeiertage(year, Bundesland);
|
||||
@@ -995,7 +1017,7 @@ namespace BeWo.Service.Plugins
|
||||
spanne.End = new DateTime(year, 12, 31);
|
||||
|
||||
if (spanne.Start.Value.Date == spanne.End.Value.Date && spanne.Start.Value.TimeOfDay == spanne.End.Value.TimeOfDay &&
|
||||
az.Eintraege.Any(e => e.DayOfWeek == spanne.Start.Value.DayOfWeek)) // ein ganzer Tag Urlaub
|
||||
az.ArbeitszeitEintraege.Any(e => BS.Shared.Core.DateTimeUtils.ConvertAppointmentDayOfWeekToDayOfWeek(e.Tag) == spanne.Start.Value.DayOfWeek)) // ein ganzer Tag Urlaub
|
||||
{
|
||||
if (!feiertage.Any(f => f.Datum == spanne.Start.Value.Date))
|
||||
summeTage++;
|
||||
@@ -1003,7 +1025,7 @@ namespace BeWo.Service.Plugins
|
||||
summeTage += (1 - GetFeiertagsFaktor(spanne.Start.Value));
|
||||
}
|
||||
else if (spanne.Start.Value.Date == spanne.End.Value.Date && spanne.Start.Value.TimeOfDay != spanne.End.Value.TimeOfDay &&
|
||||
az.Eintraege.Any(e => e.DayOfWeek == spanne.Start.Value.DayOfWeek) && !feiertage.Any(f => f.Datum == spanne.Start.Value.Date)) // ein halber Tag Urlaub
|
||||
az.ArbeitszeitEintraege.Any(e => BS.Shared.Core.DateTimeUtils.ConvertAppointmentDayOfWeekToDayOfWeek(e.Tag) == spanne.Start.Value.DayOfWeek) && !feiertage.Any(f => f.Datum == spanne.Start.Value.Date)) // ein halber Tag Urlaub
|
||||
summeTage += 0.5m;
|
||||
else // Mehr als ein Tag Urlaub
|
||||
{
|
||||
@@ -1017,7 +1039,7 @@ namespace BeWo.Service.Plugins
|
||||
#endregion
|
||||
while (startForLoop <= spanne.End.Value)
|
||||
{
|
||||
if (az.Eintraege.Any(e => e.DayOfWeek == startForLoop.DayOfWeek))
|
||||
if (az.ArbeitszeitEintraege.Any(e => BS.Shared.Core.DateTimeUtils.ConvertAppointmentDayOfWeekToDayOfWeek(e.Tag) == startForLoop.DayOfWeek))
|
||||
{
|
||||
if (!feiertage.Any(f => f.Datum == startForLoop.Date) && GetFeiertagsFaktor(startForLoop.Date) == 0)
|
||||
summeTage++;
|
||||
@@ -1052,7 +1074,7 @@ namespace BeWo.Service.Plugins
|
||||
SetLokaleFeiertagListe(year);
|
||||
|
||||
// Alle Abwesenheiten bis zu dem Jahr raussuchen, für das man das Urlaubskonto berechnen will
|
||||
List<AbsenceTimeDC> absences = new List<AbsenceTimeDC>();
|
||||
var absences = new List<AbsenceTimeDC>();
|
||||
|
||||
// Abwesenheiten nur auf Urlaube filtern
|
||||
if (emp.AbsenceTimes != null && emp.AbsenceTimes.Count > 0)
|
||||
@@ -1074,12 +1096,12 @@ namespace BeWo.Service.Plugins
|
||||
|
||||
int? workdays = 0;
|
||||
List<ArbeitszeitDC> arbeitszeiten = new List<ArbeitszeitDC>();
|
||||
Dictionary<ContractDC, int> contractsAndWeeklyDays = new Dictionary<ContractDC, int>();
|
||||
Dictionary<Contract, int> contractsAndWeeklyDays = new Dictionary<Contract, int>();
|
||||
|
||||
// Jahresurlaubanspruch berechnen (noch kein Resturlaub Vorjahr in dieser Schleife, nur Jahresanspruch + Sonderfall Vertragsstart oder -ende mitten im Jahr)
|
||||
foreach (var contract in emp.Contracts)
|
||||
{
|
||||
contractsAndWeeklyDays.Add(MapperFactory.ContractDC_Contract.MapToNewDC(contract), contract.WeeklyDays.HasValue ? contract.WeeklyDays.Value : 0);
|
||||
contractsAndWeeklyDays.Add(contract, contract.WeeklyDays.HasValue ? contract.WeeklyDays.Value : 0);
|
||||
|
||||
var start = contract.EntryDate?.Year ?? firstYear;
|
||||
var end = contract.ContractEndDate?.Year ?? year;
|
||||
@@ -1164,7 +1186,7 @@ namespace BeWo.Service.Plugins
|
||||
absencesYear = absencesYear.OrderBy(x => x.Item1).ToList();
|
||||
|
||||
Dictionary<int, decimal> zuVerfallZuAddieren = new Dictionary<int, decimal>();
|
||||
var geschenkteUrlaubstage = empService.GetGeschenkteUrlaubstageForEmployee((long)emp.Oid);
|
||||
var geschenkteUrlaubstage = GetGeschenkteUrlaubstageForEmployee((long)emp.Oid);
|
||||
|
||||
// Alle Abwesenheiten durchlaufen, deren Dauer berechnen und vom Resturlaub + Geschenkte Tage Vorjahr abziehen, sofern es nicht nutzbaren Resturlaub vom Vorjahr gibt
|
||||
// Tuple = Key-Value-Paar
|
||||
@@ -1224,7 +1246,7 @@ namespace BeWo.Service.Plugins
|
||||
if (absence.Start.HasValue && absence.Start.Value.Year < absYear)
|
||||
absence.Start = new DateTime(absYear, 01, 01);
|
||||
|
||||
dauer = CountAbwesenheitstage(MapperFactory.EmployeeDC_Employee.MapToNewDC(emp), absence, absYear, contractsAndWeeklyDays);
|
||||
dauer = CountAbwesenheitstage(emp, absence, absYear, contractsAndWeeklyDays);
|
||||
|
||||
//dauer = BerechneAnzahlUrlaubstage(absence, null, absYear, workdays); // HIER MÜSSEN PARAMETER FÜR ISTWOCHENENDE() MITGEGEBEN WERDEN
|
||||
|
||||
@@ -1245,7 +1267,7 @@ namespace BeWo.Service.Plugins
|
||||
// dauer und dauerVorjahr per Definition ueberein. (Behebt zugleich das falsche, ans Zieljahr gebundene workdays.)
|
||||
var originalEnd = absence.End;
|
||||
absence.End = firstEnd;
|
||||
var dauerVorjahr = CountAbwesenheitstage(MapperFactory.EmployeeDC_Employee.MapToNewDC(emp), absence, absYear, contractsAndWeeklyDays);
|
||||
var dauerVorjahr = CountAbwesenheitstage(emp, absence, absYear, contractsAndWeeklyDays);
|
||||
absence.End = originalEnd;
|
||||
|
||||
var bucheVorjahr = Math.Min(current.ResturlaubVorjahr, dauerVorjahr);
|
||||
@@ -1321,6 +1343,61 @@ namespace BeWo.Service.Plugins
|
||||
}
|
||||
}
|
||||
|
||||
public virtual IList<GeschenkterUrlaubstag> GetGeschenkteUrlaubstageForEmployee(long oid)
|
||||
{
|
||||
if (AllGeschenkteUrlaubstage == null)
|
||||
{
|
||||
AllGeschenkteUrlaubstage = DAOFactory.GenericDAO.GetAllActive<GeschenkterUrlaubstag>();
|
||||
}
|
||||
return AllGeschenkteUrlaubstage.Where(u => u.Employee == oid).ToList();
|
||||
}
|
||||
|
||||
public virtual Dictionary<string, decimal> GetSonderurlaubForEmployee(Employee employee, int berechnungsjahr)
|
||||
{
|
||||
Dictionary<string, decimal> sonderurlaub = new Dictionary<string, decimal>();
|
||||
|
||||
Contract contract = null;
|
||||
foreach (var c in employee.Contracts)
|
||||
{
|
||||
if (c.EntryDate.HasValue && !c.ContractEndDate.HasValue || c.EntryDate.HasValue && c.ContractEndDate.HasValue &&
|
||||
berechnungsjahr >= c.EntryDate.Value.Year && berechnungsjahr <= c.ContractEndDate.Value.Year)
|
||||
{
|
||||
contract = c;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Wenn eine Behinderung von mind. 50 vorliegt stehen standardmäßig 5 Sonderurlaubstage zu
|
||||
if (contract != null && (contract.EntryDate.HasValue && contract.ContractEndDate.HasValue || contract.EntryDate.HasValue && !contract.ContractEndDate.HasValue))
|
||||
{
|
||||
var yearStart = new DateTime(berechnungsjahr, 1, 1);
|
||||
var yearEnd = new DateTime(berechnungsjahr, 12, 31);
|
||||
|
||||
// Schnittmenge aus Vertrag + Ausweis
|
||||
var overlapStart = contract.EntryDate > employee.AusweisGueltigVon ? contract.EntryDate : employee.AusweisGueltigVon;
|
||||
var overlapEnd = (contract.ContractEndDate ?? DateTime.MaxValue) < (employee.AusweisGueltigBis ?? DateTime.MaxValue) ? (contract.ContractEndDate ?? DateTime.MaxValue) : (employee.AusweisGueltigBis ?? DateTime.MaxValue);
|
||||
|
||||
// Jetzt prüfen: gibt es davon etwas im Jahr?
|
||||
if (overlapStart <= overlapEnd && overlapStart <= yearEnd && overlapEnd >= yearStart)
|
||||
{
|
||||
if (employee.GradDerBehinderung.IsNotNullOrEmpty())
|
||||
{
|
||||
int.TryParse(employee.GradDerBehinderung, out int grad);
|
||||
if (grad >= 50)
|
||||
{
|
||||
// TODO Anteilig berechnen, (wenn Behinderung erst im Berechnungsjahr beginnt nur die "aktiven" Monate anrechnen und ab
|
||||
|
||||
// Wenn keine Anzahl der wöchentlichen Arbeitstage gesetzt ist, 5 Tage
|
||||
// Sonst Anzahl der wöchentlichen Arbeitstage (gesdetzlich so geregelt)
|
||||
sonderurlaub.Add("Sonderurlaub aufgrund von Behinderungsgrad über 50", 5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sonderurlaub;
|
||||
|
||||
}
|
||||
|
||||
public virtual DateTime GetFirstEnd(DateTime? end, DateTime expiration)
|
||||
{
|
||||
return (DateTime)DateTimeExtensions.GetMin(end, expiration);
|
||||
|
||||
@@ -424,6 +424,7 @@
|
||||
<Compile Include="DCEntityMapper\ValueListEntryDC_ValueListEntry.cs" />
|
||||
<Compile Include="DCEntityMapper\VarFieldDC_VarFieldDefMapper.cs" />
|
||||
<Compile Include="Dienstplanung\DienstplanungsManager.cs" />
|
||||
<Compile Include="Dienstplanung\StundenkontoServiceRecord.cs" />
|
||||
<Compile Include="Dienstplanung\MitarbeiterstundenkontoBerechnung.cs" />
|
||||
<Compile Include="Dienstplanung\Mitarbeiterstundenkonto.cs" />
|
||||
<Compile Include="Dokumentverwaltung\WohnheimPlaceholderManager.cs" />
|
||||
|
||||
@@ -1923,7 +1923,7 @@ namespace BeWo.Service.ServiceImplementations
|
||||
{
|
||||
try
|
||||
{
|
||||
UrlaubsplanungsManager manager = new UrlaubsplanungsManager();
|
||||
var manager = PluginLoader.FindClass<UrlaubsplanungsManager>();
|
||||
return manager.BuildUrlaubsplanerRootObject(filter);
|
||||
}
|
||||
catch (Exception exception)
|
||||
@@ -2074,57 +2074,59 @@ namespace BeWo.Service.ServiceImplementations
|
||||
}
|
||||
public virtual Dictionary<string, decimal> GetSonderurlaubForEmployee(long empOid, int berechnungsjahr)
|
||||
{
|
||||
Dictionary<string, decimal> sonderurlaub = new Dictionary<string, decimal>();
|
||||
try
|
||||
{
|
||||
var emp = DAOFactory.GenericDAO.GetByID<Employee>(empOid);
|
||||
Contract contract = null;
|
||||
foreach (var c in emp.Contracts)
|
||||
{
|
||||
if (c.EntryDate.HasValue && !c.ContractEndDate.HasValue || c.EntryDate.HasValue && c.ContractEndDate.HasValue &&
|
||||
berechnungsjahr >= c.EntryDate.Value.Year && berechnungsjahr <= c.ContractEndDate.Value.Year)
|
||||
{
|
||||
contract = c;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Wenn eine Behinderung von mind. 50 vorliegt stehen standardmäßig 5 Sonderurlaubstage zu
|
||||
if (contract != null && (contract.EntryDate.HasValue && contract.ContractEndDate.HasValue || contract.EntryDate.HasValue && !contract.ContractEndDate.HasValue))
|
||||
{
|
||||
var yearStart = new DateTime(berechnungsjahr, 1, 1);
|
||||
var yearEnd = new DateTime(berechnungsjahr, 12, 31);
|
||||
//Wird im Client nicht benutzt, daher in den VacationService ausgelagert
|
||||
throw new NotSupportedException();
|
||||
//Dictionary<string, decimal> sonderurlaub = new Dictionary<string, decimal>();
|
||||
//try
|
||||
//{
|
||||
// var emp = DAOFactory.GenericDAO.GetByID<Employee>(empOid);
|
||||
// Contract contract = null;
|
||||
// foreach (var c in emp.Contracts)
|
||||
// {
|
||||
// if (c.EntryDate.HasValue && !c.ContractEndDate.HasValue || c.EntryDate.HasValue && c.ContractEndDate.HasValue &&
|
||||
// berechnungsjahr >= c.EntryDate.Value.Year && berechnungsjahr <= c.ContractEndDate.Value.Year)
|
||||
// {
|
||||
// contract = c;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// // Wenn eine Behinderung von mind. 50 vorliegt stehen standardmäßig 5 Sonderurlaubstage zu
|
||||
// if (contract != null && (contract.EntryDate.HasValue && contract.ContractEndDate.HasValue || contract.EntryDate.HasValue && !contract.ContractEndDate.HasValue))
|
||||
// {
|
||||
// var yearStart = new DateTime(berechnungsjahr, 1, 1);
|
||||
// var yearEnd = new DateTime(berechnungsjahr, 12, 31);
|
||||
|
||||
// Schnittmenge aus Vertrag + Ausweis
|
||||
var overlapStart = contract.EntryDate > emp.AusweisGueltigVon ? contract.EntryDate : emp.AusweisGueltigVon;
|
||||
var overlapEnd = (contract.ContractEndDate ?? DateTime.MaxValue) < (emp.AusweisGueltigBis ?? DateTime.MaxValue) ? (contract.ContractEndDate ?? DateTime.MaxValue) : (emp.AusweisGueltigBis ?? DateTime.MaxValue);
|
||||
// // Schnittmenge aus Vertrag + Ausweis
|
||||
// var overlapStart = contract.EntryDate > emp.AusweisGueltigVon ? contract.EntryDate : emp.AusweisGueltigVon;
|
||||
// var overlapEnd = (contract.ContractEndDate ?? DateTime.MaxValue) < (emp.AusweisGueltigBis ?? DateTime.MaxValue) ? (contract.ContractEndDate ?? DateTime.MaxValue) : (emp.AusweisGueltigBis ?? DateTime.MaxValue);
|
||||
|
||||
// Jetzt prüfen: gibt es davon etwas im Jahr?
|
||||
if (overlapStart <= overlapEnd && overlapStart <= yearEnd && overlapEnd >= yearStart)
|
||||
{
|
||||
if (emp.GradDerBehinderung.IsNotNullOrEmpty())
|
||||
{
|
||||
int.TryParse(emp.GradDerBehinderung, out int grad);
|
||||
if (grad >= 50)
|
||||
{
|
||||
// TODO Anteilig berechnen, (wenn Behinderung erst im Berechnungsjahr beginnt nur die "aktiven" Monate anrechnen und ab
|
||||
// // Jetzt prüfen: gibt es davon etwas im Jahr?
|
||||
// if (overlapStart <= overlapEnd && overlapStart <= yearEnd && overlapEnd >= yearStart)
|
||||
// {
|
||||
// if (emp.GradDerBehinderung.IsNotNullOrEmpty())
|
||||
// {
|
||||
// int.TryParse(emp.GradDerBehinderung, out int grad);
|
||||
// if (grad >= 50)
|
||||
// {
|
||||
// // TODO Anteilig berechnen, (wenn Behinderung erst im Berechnungsjahr beginnt nur die "aktiven" Monate anrechnen und ab
|
||||
|
||||
// Wenn keine Anzahl der wöchentlichen Arbeitstage gesetzt ist, 5 Tage
|
||||
// Sonst Anzahl der wöchentlichen Arbeitstage (gesdetzlich so geregelt)
|
||||
sonderurlaub.Add("Sonderurlaub aufgrund von Behinderungsgrad über 50", 5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// // Wenn keine Anzahl der wöchentlichen Arbeitstage gesetzt ist, 5 Tage
|
||||
// // Sonst Anzahl der wöchentlichen Arbeitstage (gesdetzlich so geregelt)
|
||||
// sonderurlaub.Add("Sonderurlaub aufgrund von Behinderungsgrad über 50", 5);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
return sonderurlaub;
|
||||
// return sonderurlaub;
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(ex);
|
||||
}
|
||||
//}
|
||||
//catch (Exception ex)
|
||||
//{
|
||||
// throw Utils.CreateBeWoFaultException(ex);
|
||||
//}
|
||||
|
||||
return sonderurlaub;
|
||||
//return sonderurlaub;
|
||||
}
|
||||
public List<AbwesenheitsInformationPrintDC> InsertAbwesenheitsInformationPrint(List<AbwesenheitsInformationPrintDC> abwesenheitsInformationPrints)
|
||||
{
|
||||
@@ -2184,7 +2186,8 @@ namespace BeWo.Service.ServiceImplementations
|
||||
try
|
||||
{
|
||||
var vs = PluginLoader.FindClass<VacationService>();
|
||||
return vs.BerechneUrlaubskontoZurDarstellung(emp, year);
|
||||
var entity = DAOFactory.GenericDAO.LoadByID<Employee>(emp.EmployeeOid.Value);
|
||||
return vs.BerechneUrlaubskontoZurDarstellung(entity, year);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -2208,7 +2211,8 @@ namespace BeWo.Service.ServiceImplementations
|
||||
try
|
||||
{
|
||||
var manager = new UrlaubsplanungsManager();
|
||||
return manager.CountKrankheitstage(infoDC);
|
||||
manager.BerechneUrlaubsUndKrankheitstage(infoDC, null);
|
||||
return infoDC.TageKrankheit;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -2220,7 +2224,8 @@ namespace BeWo.Service.ServiceImplementations
|
||||
try
|
||||
{
|
||||
var manager = new UrlaubsplanungsManager();
|
||||
return manager.CountUrlaubstage(infoDC);
|
||||
manager.BerechneUrlaubsUndKrankheitstage(infoDC, null);
|
||||
return infoDC.TageUrlaub;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -2232,69 +2237,9 @@ namespace BeWo.Service.ServiceImplementations
|
||||
{
|
||||
try
|
||||
{
|
||||
var res = new List<EmployeeDC>();
|
||||
var vs = PluginLoader.FindClass<VacationService>();
|
||||
var manager = PluginLoader.FindClass<UrlaubsplanungsManager>();
|
||||
|
||||
var allEmployees = DAOFactory.GenericDAO.GetAllActive<Employee>().ToList();
|
||||
|
||||
List<Team> teams = new List<Team>();
|
||||
if (filter.Teams != null)
|
||||
teams = DAOFactory.GenericDAO.GetActiveByIDs<Team>(filter.Teams) as List<Team>;
|
||||
|
||||
|
||||
//foreach (var emp in allEmployees.OrderBy(x => x.Person.LastNameFirstName))
|
||||
List<Employee> benoetigteMitarbeiter = new List<Employee>();
|
||||
if (teams.Count == 0)
|
||||
benoetigteMitarbeiter = allEmployees;
|
||||
else
|
||||
{
|
||||
foreach (var team in teams)
|
||||
{
|
||||
benoetigteMitarbeiter.AddRange(team.MemberList);
|
||||
}
|
||||
}
|
||||
benoetigteMitarbeiter.OrderBy(x => x.Person.LastNameFirstName).ToList();
|
||||
|
||||
foreach (var emp in benoetigteMitarbeiter)
|
||||
{
|
||||
if (filter.EmploymentType != null)
|
||||
if (!emp.Contracts.Any(x => x.EmploymentType != null && filter.EmploymentType.Contains(x.EmploymentType.Oid.Value)))
|
||||
continue;
|
||||
|
||||
if (res.Any(e => e.EmployeeOid == emp.Oid))
|
||||
continue;
|
||||
|
||||
var dict = vs.BerechneUrlaubskonto(emp, filter.Year);
|
||||
|
||||
if (filter.AbsenceReasons != null)
|
||||
emp.AbsenceTimes.RemoveRange(x => !filter.AbsenceReasons.Contains(x.AbsenceReason.Oid.Value));
|
||||
|
||||
//if (filter.Teams != null)
|
||||
//{
|
||||
// bool isInTeam = false;
|
||||
// foreach (var team in teams)
|
||||
// {
|
||||
// if (team.MemberList.Contains(emp))
|
||||
// isInTeam = true;
|
||||
// }
|
||||
// if (!isInTeam)
|
||||
// continue;
|
||||
//}
|
||||
|
||||
var empDC = MapperFactory.EmployeeDC_Employee.MapToNewDC(emp);
|
||||
if (dict.ContainsKey(filter.Year))
|
||||
{
|
||||
empDC.Urlaubskonto = dict[filter.Year];
|
||||
}
|
||||
else
|
||||
{
|
||||
int test = 0;
|
||||
}
|
||||
|
||||
res.Add(empDC);
|
||||
}
|
||||
|
||||
return res.OrderBy(e => e.LastNameFirstName).ToList();
|
||||
return manager.GetAbsenceOverview(filter);
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
|
||||
@@ -7296,8 +7296,6 @@ namespace BeWo.Service.ServiceImplementations
|
||||
try
|
||||
{
|
||||
var vs = PluginLoader.FindClass<VacationService>();
|
||||
var ber = PluginLoader.FindClass<MitarbeiterstundenkontoBerechnung>();
|
||||
var altList = ber.GetFeiertage(year);
|
||||
var list = vs.GetFeiertage(year, vs.Bundesland);
|
||||
|
||||
return list;
|
||||
@@ -7486,77 +7484,78 @@ namespace BeWo.Service.ServiceImplementations
|
||||
}
|
||||
}
|
||||
|
||||
public List<EmployeeDC> GetAbsenceOverview(AbsenceOverviewFilterDC filter)
|
||||
{
|
||||
try
|
||||
{
|
||||
var res = new List<EmployeeDC>();
|
||||
var vs = PluginLoader.FindClass<VacationService>();
|
||||
//CB, 14.07.2026 Ist doppelt im EmployeeServiceImp vorhanden
|
||||
//public List<EmployeeDC> GetAbsenceOverview(AbsenceOverviewFilterDC filter)
|
||||
//{
|
||||
// try
|
||||
// {
|
||||
// var res = new List<EmployeeDC>();
|
||||
// var vs = PluginLoader.FindClass<VacationService>();
|
||||
|
||||
var allEmployees = DAOFactory.GenericDAO.GetAllActive<Employee>().ToList();
|
||||
// var allEmployees = DAOFactory.GenericDAO.GetAllActive<Employee>().ToList();
|
||||
|
||||
List<Team> teams = new List<Team>();
|
||||
if (filter.Teams != null)
|
||||
teams = DAOFactory.GenericDAO.GetActiveByIDs<Team>(filter.Teams) as List<Team>;
|
||||
// List<Team> teams = new List<Team>();
|
||||
// if (filter.Teams != null)
|
||||
// teams = DAOFactory.GenericDAO.GetActiveByIDs<Team>(filter.Teams) as List<Team>;
|
||||
|
||||
|
||||
//foreach (var emp in allEmployees.OrderBy(x => x.Person.LastNameFirstName))
|
||||
List<Employee> benoetigteMitarbeiter = new List<Employee>();
|
||||
if (teams.Count == 0)
|
||||
benoetigteMitarbeiter = allEmployees;
|
||||
else
|
||||
{
|
||||
foreach (var team in teams)
|
||||
{
|
||||
benoetigteMitarbeiter.AddRange(team.MemberList);
|
||||
}
|
||||
}
|
||||
benoetigteMitarbeiter.OrderBy(x => x.Person.LastNameFirstName).ToList();
|
||||
// //foreach (var emp in allEmployees.OrderBy(x => x.Person.LastNameFirstName))
|
||||
// List<Employee> benoetigteMitarbeiter = new List<Employee>();
|
||||
// if (teams.Count == 0)
|
||||
// benoetigteMitarbeiter = allEmployees;
|
||||
// else
|
||||
// {
|
||||
// foreach (var team in teams)
|
||||
// {
|
||||
// benoetigteMitarbeiter.AddRange(team.MemberList);
|
||||
// }
|
||||
// }
|
||||
// benoetigteMitarbeiter.OrderBy(x => x.Person.LastNameFirstName).ToList();
|
||||
|
||||
foreach (var emp in benoetigteMitarbeiter)
|
||||
{
|
||||
if (filter.EmploymentType != null)
|
||||
if (!emp.Contracts.Any(x => x.EmploymentType != null && filter.EmploymentType.Contains(x.EmploymentType.Oid.Value)))
|
||||
continue;
|
||||
// foreach (var emp in benoetigteMitarbeiter)
|
||||
// {
|
||||
// if (filter.EmploymentType != null)
|
||||
// if (!emp.Contracts.Any(x => x.EmploymentType != null && filter.EmploymentType.Contains(x.EmploymentType.Oid.Value)))
|
||||
// continue;
|
||||
|
||||
|
||||
var dict = vs.BerechneUrlaubskonto(emp, filter.Year);
|
||||
// var dict = vs.BerechneUrlaubskonto(emp, filter.Year);
|
||||
|
||||
if (filter.AbsenceReasons != null)
|
||||
emp.AbsenceTimes.RemoveRange(x => !filter.AbsenceReasons.Contains(x.AbsenceReason.Oid.Value));
|
||||
// if (filter.AbsenceReasons != null)
|
||||
// emp.AbsenceTimes.RemoveRange(x => !filter.AbsenceReasons.Contains(x.AbsenceReason.Oid.Value));
|
||||
|
||||
//if (filter.Teams != null)
|
||||
//{
|
||||
// bool isInTeam = false;
|
||||
// foreach (var team in teams)
|
||||
// {
|
||||
// if (team.MemberList.Contains(emp))
|
||||
// isInTeam = true;
|
||||
// }
|
||||
// if (!isInTeam)
|
||||
// continue;
|
||||
//}
|
||||
// //if (filter.Teams != null)
|
||||
// //{
|
||||
// // bool isInTeam = false;
|
||||
// // foreach (var team in teams)
|
||||
// // {
|
||||
// // if (team.MemberList.Contains(emp))
|
||||
// // isInTeam = true;
|
||||
// // }
|
||||
// // if (!isInTeam)
|
||||
// // continue;
|
||||
// //}
|
||||
|
||||
var empDC = MapperFactory.EmployeeDC_Employee.MapToNewDC(emp);
|
||||
if (dict.ContainsKey(filter.Year))
|
||||
{
|
||||
empDC.Urlaubskonto = dict[filter.Year];
|
||||
}
|
||||
else
|
||||
{
|
||||
int test = 0;
|
||||
}
|
||||
// var empDC = MapperFactory.EmployeeDC_Employee.MapToNewDC(emp);
|
||||
// if (dict.ContainsKey(filter.Year))
|
||||
// {
|
||||
// empDC.Urlaubskonto = dict[filter.Year];
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// int test = 0;
|
||||
// }
|
||||
|
||||
res.Add(empDC);
|
||||
}
|
||||
// res.Add(empDC);
|
||||
// }
|
||||
|
||||
return res.OrderBy(e => e.LastNameFirstName).ToList();
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
throw Utils.CreateBeWoFaultException(exception);
|
||||
}
|
||||
}
|
||||
// return res.OrderBy(e => e.LastNameFirstName).ToList();
|
||||
// }
|
||||
// catch (Exception exception)
|
||||
// {
|
||||
// throw Utils.CreateBeWoFaultException(exception);
|
||||
// }
|
||||
//}
|
||||
public List<CompactTeamDC> GetCertainTeamsById(List<long> oids)
|
||||
{
|
||||
var teams = DAOFactory.GenericDAO.GetActiveByIDs<Team>(oids);
|
||||
@@ -8518,36 +8517,36 @@ namespace BeWo.Service.ServiceImplementations
|
||||
}
|
||||
}
|
||||
|
||||
public UrlaubsplanerRootDC BuildUrlaubsplanerRootObject(AbsenceOverviewFilterDC filter)
|
||||
{
|
||||
UrlaubsplanerRootDC root = new UrlaubsplanerRootDC();
|
||||
var empService = new EmployeeServiceImp();
|
||||
//public UrlaubsplanerRootDC BuildUrlaubsplanerRootObject(AbsenceOverviewFilterDC filter)
|
||||
//{
|
||||
// UrlaubsplanerRootDC root = new UrlaubsplanerRootDC();
|
||||
// var empService = new EmployeeServiceImp();
|
||||
|
||||
root.Feiertage = GetDefaultFeiertageForYear(filter.Year).Where(f => f.Datum.Month == filter.Month).ToList();
|
||||
root.Abwesenheiten = empService.GetAllEmployeeAbsenceTimesForMonth(filter.Year, filter.Month);
|
||||
root.GeschenkteUrlaubstage = empService.GetGeschenkteUrlaubstageForYear(filter.Year);
|
||||
// root.Feiertage = GetDefaultFeiertageForYear(filter.Year).Where(f => f.Datum.Month == filter.Month).ToList();
|
||||
// root.Abwesenheiten = empService.GetAllEmployeeAbsenceTimesForMonth(filter.Year, filter.Month);
|
||||
// root.GeschenkteUrlaubstage = empService.GetGeschenkteUrlaubstageForYear(filter.Year);
|
||||
|
||||
var DCsToDelete = empService.GetAllAbwesenheitsInformationPrints();
|
||||
empService.DeleteAbwesenheitsInformationPrints(DCsToDelete);
|
||||
// var DCsToDelete = empService.GetAllAbwesenheitsInformationPrints();
|
||||
// empService.DeleteAbwesenheitsInformationPrints(DCsToDelete);
|
||||
|
||||
//root.AlleAbwesenheitsInformationDCs = new List<AbwesenheitsInformationDC>();
|
||||
// //root.AlleAbwesenheitsInformationDCs = new List<AbwesenheitsInformationDC>();
|
||||
|
||||
//var employee = GetAbsenceOverview(filter);
|
||||
// //var employee = GetAbsenceOverview(filter);
|
||||
|
||||
//foreach (var emp in employee)
|
||||
//{
|
||||
// root.AlleAbwesenheitsInformationDCs.Add(new AbwesenheitsInformationDC()
|
||||
// {
|
||||
// Employee = emp,
|
||||
// Month = filter.Month,
|
||||
// Year = filter.Year,
|
||||
// AbsenceTimes = root.Abwesenheiten.Where(a => a.EmployeeOid == emp.EmployeeOid).ToList(),
|
||||
// GeschenkteUrlaubstage = root.GeschenkteUrlaubstage.Where(u => u.Employee == emp.EmployeeOid).ToList()
|
||||
// });
|
||||
//}
|
||||
// //foreach (var emp in employee)
|
||||
// //{
|
||||
// // root.AlleAbwesenheitsInformationDCs.Add(new AbwesenheitsInformationDC()
|
||||
// // {
|
||||
// // Employee = emp,
|
||||
// // Month = filter.Month,
|
||||
// // Year = filter.Year,
|
||||
// // AbsenceTimes = root.Abwesenheiten.Where(a => a.EmployeeOid == emp.EmployeeOid).ToList(),
|
||||
// // GeschenkteUrlaubstage = root.GeschenkteUrlaubstage.Where(u => u.Employee == emp.EmployeeOid).ToList()
|
||||
// // });
|
||||
// //}
|
||||
|
||||
return root;
|
||||
}
|
||||
// return root;
|
||||
//}
|
||||
|
||||
public string GetInformationStringForUrlaubsplaner(UrlaubskontoDC dc, decimal tageUrlaub, decimal tageKrank, bool urlaubVerfallen)
|
||||
{
|
||||
|
||||
@@ -5,6 +5,10 @@ using BeWo.Service.DCEntityMapper;
|
||||
using BeWo.Service.Plugins;
|
||||
using BeWo.Service.ServiceImplementations;
|
||||
using BS.Shared.DataContracts;
|
||||
using BS.Shared.Extensions;
|
||||
using DevExpress.Pdf.Native;
|
||||
using DevExpress.Utils.About;
|
||||
using DevExpress.XtraPrinting;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -13,17 +17,32 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BeWo.Service.Urlaubsplanung
|
||||
{
|
||||
class UrlaubsplanungsManager
|
||||
public class UrlaubsplanungsManager
|
||||
{
|
||||
private VacationService vacationService;
|
||||
|
||||
public VacationService VacationService
|
||||
{
|
||||
get
|
||||
{
|
||||
if (vacationService == null)
|
||||
{
|
||||
vacationService = PluginLoader.FindClass<VacationService>();
|
||||
}
|
||||
return vacationService;
|
||||
}
|
||||
}
|
||||
|
||||
public UrlaubsplanerRootDC BuildUrlaubsplanerRootObject(AbsenceOverviewFilterDC filter)
|
||||
{
|
||||
var sw = System.Diagnostics.Stopwatch.StartNew();
|
||||
|
||||
UrlaubsplanerRootDC root = new UrlaubsplanerRootDC();
|
||||
VacationService vs = PluginLoader.FindClass<VacationService>();
|
||||
var empService = new EmployeeServiceImp();
|
||||
var feiertagDaten = vs.GetFeiertage(filter.Year).Where(f => f.Month == filter.Month).ToList();
|
||||
|
||||
var feiertagDaten = VacationService.GetFeiertage(filter.Year).Where(f => f.Month == filter.Month).ToList();
|
||||
root.Feiertage = new List<FeiertagDC>();
|
||||
foreach (var datum in feiertagDaten)
|
||||
root.Feiertage.Add(vs.GetFeiertag(datum));
|
||||
root.Feiertage.Add(VacationService.GetFeiertag(datum));
|
||||
|
||||
|
||||
root.Abwesenheiten = GetAllEmployeeAbsenceTimesForMonth(filter.Year, filter.Month);
|
||||
@@ -32,11 +51,10 @@ namespace BeWo.Service.Urlaubsplanung
|
||||
var DCsToDelete = GetAllAbwesenheitsInformationPrints();
|
||||
DeleteAbwesenheitsInformationPrints(DCsToDelete);
|
||||
|
||||
#region auskommentiert
|
||||
|
||||
root.AlleAbwesenheitsInformationDCs = new List<AbwesenheitsInformationDC>();
|
||||
|
||||
var es = PluginLoader.FindClass<EmployeeServiceImp>();
|
||||
var employee = es.GetAbsenceOverview(filter);
|
||||
var employee = GetAllFilteredEmployees(filter);
|
||||
|
||||
foreach (var emp in employee)
|
||||
{
|
||||
@@ -44,37 +62,116 @@ namespace BeWo.Service.Urlaubsplanung
|
||||
|
||||
var infoDC = new AbwesenheitsInformationDC()
|
||||
{
|
||||
Employee = emp,
|
||||
Employee = ErstelleCompactEmployeeDC(emp, filter),
|
||||
Month = filter.Month,
|
||||
Year = filter.Year,
|
||||
AbsenceTimes = root.Abwesenheiten.Where(a => a.EmployeeOid == emp.EmployeeOid).ToList(),
|
||||
GeschenkteUrlaubstage = root.GeschenkteUrlaubstage.Where(u => u.Employee == emp.EmployeeOid).ToList()
|
||||
AbsenceTimes = root.Abwesenheiten.Where(a => a.EmployeeOid == emp.Oid).ToList(),
|
||||
GeschenkteUrlaubstage = root.GeschenkteUrlaubstage.Where(u => u.Employee == emp.Oid).ToList()
|
||||
};
|
||||
infoDC.TageUrlaub = CountUrlaubstage(infoDC);
|
||||
infoDC.TageKrankheit = CountKrankheitstage(infoDC);
|
||||
BerechneUrlaubsUndKrankheitstage(infoDC, emp);
|
||||
|
||||
root.AlleAbwesenheitsInformationDCs.Add(infoDC);
|
||||
}
|
||||
|
||||
#endregion
|
||||
sw.Stop();
|
||||
Console.WriteLine(sw.Elapsed.TotalMilliseconds);
|
||||
|
||||
return root;
|
||||
}
|
||||
public decimal CountUrlaubstage(AbwesenheitsInformationDC info)
|
||||
|
||||
private EmployeeDC ErstelleCompactEmployeeDC(Employee emp, AbsenceOverviewFilterDC filter)
|
||||
{
|
||||
var dc = new EmployeeDC();
|
||||
dc.FirstName = emp.Person.FirstName;
|
||||
dc.LastName = emp.Person.LastName;
|
||||
dc.EmployeeOid = emp.Oid;
|
||||
dc.PersonOid = emp.Person.Oid;
|
||||
dc.Type = BS.Shared.PersonType.Employee;
|
||||
|
||||
var dict = VacationService.BerechneUrlaubskonto(emp, filter.Year);
|
||||
dc.AbsenceTimes = MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDCs(emp.AbsenceTimes);
|
||||
if (filter.AbsenceReasons != null)
|
||||
dc.AbsenceTimes.RemoveRange(x => !filter.AbsenceReasons.Contains(x.Reason.AbsenceReasonOid.Value));
|
||||
|
||||
|
||||
if (dict.ContainsKey(filter.Year))
|
||||
{
|
||||
dc.Urlaubskonto = dict[filter.Year];
|
||||
}
|
||||
|
||||
return dc;
|
||||
}
|
||||
|
||||
public List<EmployeeDC> GetAbsenceOverview(AbsenceOverviewFilterDC filter)
|
||||
{
|
||||
var res = new List<EmployeeDC>();
|
||||
var employees = GetAllFilteredEmployees(filter);
|
||||
|
||||
foreach (var emp in employees)
|
||||
{
|
||||
res.Add(ErstelleCompactEmployeeDC(emp, filter));
|
||||
}
|
||||
|
||||
return res.OrderBy(e => e.LastNameFirstName).ToList();
|
||||
}
|
||||
|
||||
public List<Employee> GetAllFilteredEmployees(AbsenceOverviewFilterDC filter)
|
||||
{
|
||||
var res = new List<Employee>();
|
||||
|
||||
var allEmployees = DAOFactory.GenericDAO.GetAllActive<Employee>().ToList();
|
||||
|
||||
List<Team> teams = new List<Team>();
|
||||
if (filter.Teams != null)
|
||||
teams = DAOFactory.GenericDAO.GetActiveByIDs<Team>(filter.Teams) as List<Team>;
|
||||
|
||||
|
||||
List<Employee> benoetigteMitarbeiter = new List<Employee>();
|
||||
if (teams.Count == 0)
|
||||
benoetigteMitarbeiter = allEmployees;
|
||||
else
|
||||
{
|
||||
foreach (var team in teams)
|
||||
{
|
||||
benoetigteMitarbeiter.AddRange(team.MemberList);
|
||||
benoetigteMitarbeiter.Add(team.Leader);
|
||||
}
|
||||
}
|
||||
benoetigteMitarbeiter.OrderBy(x => x.Person.LastNameFirstName).ToList();
|
||||
|
||||
foreach (var emp in benoetigteMitarbeiter)
|
||||
{
|
||||
if (filter.EmploymentType != null)
|
||||
if (!emp.Contracts.Any(x => x.EmploymentType != null && filter.EmploymentType.Contains(x.EmploymentType.Oid.Value)))
|
||||
continue;
|
||||
|
||||
if (res.Any(e => e.Oid == emp.Oid))
|
||||
continue;
|
||||
|
||||
res.Add(emp);
|
||||
}
|
||||
|
||||
return res.OrderBy(e => e.Person.LastNameFirstName).ToList();
|
||||
}
|
||||
|
||||
public void BerechneUrlaubsUndKrankheitstage(AbwesenheitsInformationDC info, Employee employee)
|
||||
{
|
||||
decimal tageUrlaub = 0;
|
||||
decimal tageKrankheit = 0;
|
||||
|
||||
VacationService vs = PluginLoader.FindClass<VacationService>();
|
||||
|
||||
if (employee == null)
|
||||
{
|
||||
employee = DAOFactory.GenericDAO.LoadByID<Employee>(info.Employee.EmployeeOid.Value);
|
||||
}
|
||||
// Urlaube setzen so wie im Urlaubskonto
|
||||
Dictionary<ContractDC, int> contractsAndWeeklyDays = new Dictionary<ContractDC, int>();
|
||||
Dictionary<Contract, int> contractsAndWeeklyDays = new Dictionary<Contract, int>();
|
||||
|
||||
// Vertrag für Jahr raussuchen
|
||||
foreach (var c in info.Employee.Contracts)
|
||||
foreach (var c in employee.Contracts)
|
||||
{
|
||||
DateTime contractEndDate = new DateTime();
|
||||
if (c.ContractEndDate == null)
|
||||
contractEndDate = new DateTime(2099, 12, 31);
|
||||
contractEndDate = new DateTime(DateTime.Now.Year + 10, 12, 31);
|
||||
else
|
||||
contractEndDate = c.ContractEndDate.Value;
|
||||
|
||||
@@ -86,62 +183,32 @@ namespace BeWo.Service.Urlaubsplanung
|
||||
|
||||
if (info.Year >= contractStartDate.Year && info.Year <= contractEndDate.Year) // Wenn das ausgewählte Jahr zwischen Vertragsbeginn und -ende liegt
|
||||
{
|
||||
contractsAndWeeklyDays.Add(c, c.WeeklyDays);
|
||||
contractsAndWeeklyDays.Add(c, c.WeeklyDays ?? 5);
|
||||
}
|
||||
}
|
||||
|
||||
// Urlaubstage im Zeitraum zählen
|
||||
var urlaubAbsences = vs.GetAllVacationAbsences(info.AbsenceTimes, info.Year, true);
|
||||
var urlaubAbsences = VacationService.GetAllVacationAbsences(info.AbsenceTimes, info.Year, true);
|
||||
// Krankheitstage im Zeitraum zählen
|
||||
var sickAbsences = VacationService.GetAllSickAbsences(info.AbsenceTimes, info.Year, true);
|
||||
|
||||
foreach (var abs in urlaubAbsences)
|
||||
{
|
||||
tageUrlaub += vs.CountAbwesenheitstage(info.Employee, abs, info.Year, contractsAndWeeklyDays);
|
||||
tageUrlaub += VacationService.CountAbwesenheitstage(employee, abs, info.Year, contractsAndWeeklyDays);
|
||||
}
|
||||
|
||||
return tageUrlaub;
|
||||
}
|
||||
|
||||
public decimal CountKrankheitstage(AbwesenheitsInformationDC info)
|
||||
{
|
||||
decimal tageKrankheit = 0;
|
||||
|
||||
VacationService vs = PluginLoader.FindClass<VacationService>();
|
||||
|
||||
// Krankheiten setzen so wie Urlaube im Urlaubskonto
|
||||
Dictionary<ContractDC, int> contractsAndWeeklyDays = new Dictionary<ContractDC, int>();
|
||||
|
||||
// Vertrag für Jahr raussuchen
|
||||
foreach (var c in info.Employee.Contracts)
|
||||
{
|
||||
DateTime contractEndDate = new DateTime();
|
||||
if (c.ContractEndDate == null)
|
||||
contractEndDate = new DateTime(2099, 12, 31);
|
||||
else
|
||||
contractEndDate = c.ContractEndDate.Value;
|
||||
|
||||
DateTime contractStartDate = new DateTime();
|
||||
if (c.EntryDate == null)
|
||||
contractStartDate = new DateTime(info.Year, 01, 01);
|
||||
else
|
||||
contractStartDate = c.EntryDate.Value;
|
||||
|
||||
if (info.Year >= contractStartDate.Year && info.Year <= contractEndDate.Year) // Wenn das ausgewählte Jahr zwischen Vertragsbeginn und -ende liegt
|
||||
{
|
||||
contractsAndWeeklyDays.Add(c, c.WeeklyDays);
|
||||
}
|
||||
}
|
||||
|
||||
// Krankheitstage im Zeitraum zählen
|
||||
var sickAbsences = vs.GetAllSickAbsences(info.AbsenceTimes, info.Year, true);
|
||||
foreach (var abs in sickAbsences)
|
||||
{
|
||||
// CountAbwesenheitstage zählt nur eine Liste an Abwesenheiten, also kann hier auch auf Krankheiten gefiltert und diese
|
||||
// Liste übergeben werden. Es werden dann nach den selben Regeln die Krankheiten gezählt.
|
||||
tageKrankheit += vs.CountAbwesenheitstage(info.Employee, abs, info.Year, contractsAndWeeklyDays);
|
||||
tageKrankheit += VacationService.CountAbwesenheitstage(employee, abs, info.Year, contractsAndWeeklyDays);
|
||||
}
|
||||
|
||||
return tageKrankheit;
|
||||
info.TageUrlaub = tageUrlaub;
|
||||
info.TageKrankheit = tageKrankheit;
|
||||
}
|
||||
|
||||
|
||||
public List<AbsenceTimeDC> GetAllEmployeeAbsenceTimesForMonth(int year, int month)
|
||||
{
|
||||
try
|
||||
@@ -207,8 +274,7 @@ namespace BeWo.Service.Urlaubsplanung
|
||||
|
||||
private List<DateTime> GetArbeitsfreieTage(AbwesenheitsInformationDC info)
|
||||
{
|
||||
VacationService vs = PluginLoader.FindClass<VacationService>();
|
||||
var feiertage = vs.GetFeiertage(info.Year);
|
||||
var feiertage = VacationService.GetFeiertage(info.Year);
|
||||
|
||||
List<DateTime> wochenendtage = new List<DateTime>();
|
||||
for (int i = 1; i <= DateTime.DaysInMonth(info.Year, info.Month); i++)
|
||||
|
||||
Reference in New Issue
Block a user