diff --git a/BeWo/Core/BeWoUtils.cs b/BeWo/Core/BeWoUtils.cs
index c5d964e77..d4e9ad2be 100644
--- a/BeWo/Core/BeWoUtils.cs
+++ b/BeWo/Core/BeWoUtils.cs
@@ -1677,9 +1677,21 @@ namespace BeWo.Core
}
break;
case ServiceRecordValidationResult.Custom:
- MessageBox.Show(result.Message, "Speichern nicht möglich", MessageBoxButton.OK, MessageBoxImage.Error);
- lValid = false;
- exitLoop = true;
+ if (result.Allow)
+ {
+ if (MessageBox.Show(result.Message, "Speichern", MessageBoxButton.YesNo, MessageBoxImage.Warning).Equals(MessageBoxResult.No))
+ {
+ lValid = false;
+ exitLoop = true;
+ }
+ }
+ else
+ {
+ MessageBox.Show(result.Message, "Speichern nicht möglich", MessageBoxButton.OK, MessageBoxImage.Error);
+ lValid = false;
+ exitLoop = true;
+ }
+
break;
}
@@ -1690,14 +1702,64 @@ namespace BeWo.Core
return lValid;
}
- ///
- /// Erzeugt einen Report mit Hilfe des ReportServices und zeigt ihn in einem BeWoWindow
- ///
- /// Titel des Fensters
- /// Documentpreview für den Report
- /// Dictionary mit Variablen für das ReportObject
- /// Der Typ des Reports (z.B. KalenderMonatsformatReport)
- public static void ShowReport(string title, DocumentPreview documentPreview, Dictionary variablen, ReportEnum reportType)
+ public static bool ValidateServiceRecordDeletion(ServiceRecordVM vm)
+ {
+ var lValid = true;
+
+
+ var dc = vm.CommitToDataContract();
+ var emp = BeWoApp.LoggedOnUser.Employee;
+
+
+ var r = new List();
+
+
+ //ServiceFacade.DoOperationsServiceSync(o => r = o.ValidateServiceRecord(dc, statistics, maxdays, employeeOids, cb2ScOids));
+
+
+ if (r.Count > 0)
+ {
+ var exitLoop = false;
+
+ foreach (var result in r)
+ {
+ switch (result.ResultType)
+ {
+
+ case ServiceRecordValidationResult.Custom:
+ if (result.Allow)
+ {
+ if (MessageBox.Show(result.Message, "Löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning).Equals(MessageBoxResult.No))
+ {
+ lValid = false;
+ exitLoop = true;
+ }
+ }
+ else
+ {
+ MessageBox.Show(result.Message, "Löschen nicht möglich", MessageBoxButton.OK, MessageBoxImage.Error);
+ lValid = false;
+ exitLoop = true;
+ }
+
+ break;
+ }
+
+ if (exitLoop) break;
+ }
+ }
+
+ return lValid;
+ }
+
+ ///
+ /// Erzeugt einen Report mit Hilfe des ReportServices und zeigt ihn in einem BeWoWindow
+ ///
+ /// Titel des Fensters
+ /// Documentpreview für den Report
+ /// Dictionary mit Variablen für das ReportObject
+ /// Der Typ des Reports (z.B. KalenderMonatsformatReport)
+ public static void ShowReport(string title, DocumentPreview documentPreview, Dictionary variablen, ReportEnum reportType)
{
switch (reportType)
{
diff --git a/BeWo/View/Detail/CustomerView.xaml b/BeWo/View/Detail/CustomerView.xaml
index 6e58b5075..7aa43a78e 100644
--- a/BeWo/View/Detail/CustomerView.xaml
+++ b/BeWo/View/Detail/CustomerView.xaml
@@ -438,25 +438,23 @@
-
+
-
-
-
+
-
+
-
-
+
+
@@ -466,13 +464,11 @@
-
-
-
+
-
+
@@ -487,7 +483,7 @@
@@ -1353,7 +1347,7 @@
-
@@ -1443,18 +1437,18 @@
-
+
-
+
diff --git a/BeWo/View/Detail/EnvironmentRoleView.xaml.cs b/BeWo/View/Detail/EnvironmentRoleView.xaml.cs
index b327c4081..98fddc953 100644
--- a/BeWo/View/Detail/EnvironmentRoleView.xaml.cs
+++ b/BeWo/View/Detail/EnvironmentRoleView.xaml.cs
@@ -32,50 +32,50 @@ namespace BeWo.View.Detail
public EnvironmentRoleView(ValueListEntryListVM pViewModelPerson, ValueListEntryListVM pViewModelOrganisation, ValueListEntryListVM pViewModelRoleInOrganisation, ValueListEntryListVM pViewModelRoleInFamily)
{
this.InitializeComponent();
-
+
+ roleInFamily = new ValueListView(pViewModelRoleInFamily);
personView = new ValueListView(pViewModelPerson);
organisationView = new ValueListView(pViewModelOrganisation);
roleInOrganisation = new ValueListView(pViewModelRoleInOrganisation);
- roleInFamily = new ValueListView(pViewModelRoleInFamily);
+
+
+
+ roleInFamily.SetValue(Grid.RowProperty, 0);
+ personView.SetValue(Grid.RowProperty, 1);
+ organisationView.SetValue(Grid.RowProperty, 2);
+ roleInOrganisation.SetValue(Grid.RowProperty, 3);
+
+
-
-
- personView.SetValue(Grid.RowProperty, 0);
- organisationView.SetValue(Grid.RowProperty, 1);
- roleInOrganisation.SetValue(Grid.RowProperty, 2);
- roleInFamily.SetValue(Grid.RowProperty, 3);
-
-
-
+ personView.Margin = new Thickness(0, 10, 0, 0);
organisationView.Margin = new Thickness(0, 10, 0, 0);
roleInOrganisation.Margin = new Thickness(0, 10, 0, 0);
- roleInFamily.Margin = new Thickness(0, 10, 0, 0);
-
+
+ rootGrid.Children.Add(roleInFamily);
rootGrid.Children.Add(personView);
rootGrid.Children.Add(organisationView);
rootGrid.Children.Add(roleInOrganisation);
- rootGrid.Children.Add(roleInFamily);
}
//Für Funktionen
- public EnvironmentRoleView(ValueListEntryListVM pViewModelOrganisation, ValueListEntryListVM pViewModelOrganisationFunktion)
+ public EnvironmentRoleView(ValueListEntryListVM personFunktionList, ValueListEntryListVM orgFunktionList)
{
this.InitializeComponent();
- organisationView = new ValueListView(pViewModelOrganisation);
- roleInOrganisation = new ValueListView(pViewModelOrganisationFunktion);
+ personView = new ValueListView(personFunktionList);
+ organisationView = new ValueListView(orgFunktionList);
-
- organisationView.SetValue(Grid.RowProperty, 0);
- roleInOrganisation.SetValue(Grid.RowProperty, 1);
- roleInOrganisation.Margin = new Thickness(0, 10, 0, 0);
+ personView.SetValue(Grid.RowProperty, 0);
+ organisationView.SetValue(Grid.RowProperty, 1);
+
+ organisationView.Margin = new Thickness(0, 10, 0, 0);
+ rootGrid.Children.Add(personView);
rootGrid.Children.Add(organisationView);
- rootGrid.Children.Add(roleInOrganisation);
}
public override bool IsDirty
diff --git a/BeWo/View/Detail/PersonView.xaml b/BeWo/View/Detail/PersonView.xaml
index 5596b80a0..f46301682 100644
--- a/BeWo/View/Detail/PersonView.xaml
+++ b/BeWo/View/Detail/PersonView.xaml
@@ -125,11 +125,11 @@
-
+
-
+
diff --git a/BeWo/View/Detail/ServiceRecordView2.xaml.cs b/BeWo/View/Detail/ServiceRecordView2.xaml.cs
index 47628ee09..d839e028a 100644
--- a/BeWo/View/Detail/ServiceRecordView2.xaml.cs
+++ b/BeWo/View/Detail/ServiceRecordView2.xaml.cs
@@ -249,17 +249,14 @@ namespace BeWo.View.Detail
ConfigureDocTypes();
ConfigureEndDate();
+
+ UnterschriftenHeader.Visible = BeWoApp.AppSettings.ShowSignatures;
}
private void ConfigureEndDate() {
var Settings = BeWoApp.AppSettings;
- if (!BeWoApp.AppSettings.ShowSignatures)
- {
- UnterschriftenHeader.Visible = true;
- }
-
if (Settings.IsOnlyYearMonthVisible)
{
GridMitJahrMonat.Visibility = Visibility.Visible;
@@ -649,6 +646,9 @@ namespace BeWo.View.Detail
return;
}
+ var result = BeWoUtils.ValidateServiceRecordDeletion(vm);
+
+
var msg = vm.GroupOid != null
? "ACHTUNG, wenn Sie fortfahren, löschen Sie die gesamte Gruppenbuchung.\nWenn Sie nur einzelne Klienten aus der Gruppe entfernen möchten,\neditieren Sie die Gruppe und entfernen den Klienten aus der Liste aller Hilfepläne.\nSind Sie sicher, dass Sie dem gesamten Gruppeneintrag löschen möchten?"
: "Sind Sie sicher, dass Sie den gewählten Eintrag löschen möchten?";
diff --git a/BeWo/View/Master/AdministrationView.xaml b/BeWo/View/Master/AdministrationView.xaml
index ccc193597..88866c2fc 100644
--- a/BeWo/View/Master/AdministrationView.xaml
+++ b/BeWo/View/Master/AdministrationView.xaml
@@ -59,7 +59,7 @@
-
diff --git a/BeWo/View/Master/AdministrationView.xaml.cs b/BeWo/View/Master/AdministrationView.xaml.cs
index 7a1b2437a..f76d61a48 100644
--- a/BeWo/View/Master/AdministrationView.xaml.cs
+++ b/BeWo/View/Master/AdministrationView.xaml.cs
@@ -224,9 +224,9 @@ namespace BeWo.View.Master
VMFactory.CreateValueListVMAsync(ValueListEntryType.FunctionType,
//personList => VMFactory.CreateValueListVMAsync(ValueListEntryType.RoleInOrganisationType,
- roleInOrgList => VMFactory.CreateValueListVMAsync(ValueListEntryType.OrganisationFunctionType,
- orgList =>
- this.Dispatch(() => AddView(tabitem_functions, new EnvironmentRoleView(/*personList,*/ orgList, roleInOrgList)))));
+ personFunctionList => VMFactory.CreateValueListVMAsync(ValueListEntryType.OrganisationFunctionType,
+ orgFunctionList =>
+ this.Dispatch(() => AddView(tabitem_functions, new EnvironmentRoleView(/*personList,*/ personFunctionList, orgFunctionList)))));
}
}
diff --git a/Model/Changes_15_02_2017.txt b/Model/Changes_15_02_2017.txt
index 4ef36326a..26117bba5 100644
--- a/Model/Changes_15_02_2017.txt
+++ b/Model/Changes_15_02_2017.txt
@@ -1,3 +1,2 @@
-ALTER TABLE `1234567890`.`customer2person`
-ADD COLUMN `IstFamilie`
-TINYINT(4) NULL DEFAULT NULL COMMENT '' AFTER `OrganisationOid`;
+ALTER TABLE `customer2person`
+ADD COLUMN `IstFamilie` TINYINT(4) NULL DEFAULT NULL COMMENT '';
\ No newline at end of file
diff --git a/Report/ReportObjects/MitarbeiterstundenkontoBerechnung.cs b/Report/ReportObjects/MitarbeiterstundenkontoBerechnung.cs
index 53fab59bf..f0c787f21 100644
--- a/Report/ReportObjects/MitarbeiterstundenkontoBerechnung.cs
+++ b/Report/ReportObjects/MitarbeiterstundenkontoBerechnung.cs
@@ -15,403 +15,413 @@ using DevExpress.XtraCharts.Native;
namespace BeWo.Report.ReportObjects
{
- public class MitarbeiterstundenkontoBerechnung
- {
- private decimal maxWochenstunden = 40;
- private AppSettings appSettings;
- private const int ANZ_WOCHENTAGE = 5;
+ public class MitarbeiterstundenkontoBerechnung
+ {
+ private decimal maxWochenstunden = 40;
+ private AppSettings appSettings;
+ private const int ANZ_WOCHENTAGE = 5;
- public MitarbeiterstundenkontoBerechnung()
- {
- appSettings = AppSettings.CreateSettings();
- }
+ public MitarbeiterstundenkontoBerechnung()
+ {
+ appSettings = AppSettings.CreateSettings();
+ }
- public MitarbeiterstundenkontoBerechnung(decimal maxWochenstunden) : this()
- {
- this.maxWochenstunden = maxWochenstunden;
- }
+ public MitarbeiterstundenkontoBerechnung(decimal maxWochenstunden) : this()
+ {
+ this.maxWochenstunden = maxWochenstunden;
+ }
- public virtual void CreateReport(MitarbeiterstundenkontoRO ro)
- {
- CreateEmployeeDetails(ro);
+ public virtual void CreateReport(MitarbeiterstundenkontoRO ro)
+ {
+ CreateEmployeeDetails(ro);
- CreateTeamDetails(ro);
+ CreateTeamDetails(ro);
- CreateTotals(ro);
-
-
- }
+ CreateTotals(ro);
- public virtual void CreateTotals(MitarbeiterstundenkontoRO ro)
- {
- foreach (var empDetail in ro.EmployeeDetailList)
- {
-
- ro.SollGesamt += empDetail.StundenSollOhneUrlaubKrankheit;
- ro.FlsSollGesamt += empDetail.FlsSoll;
- ro.FlsIstGesamt += empDetail.FlsIst;
- ro.MittelbarIst += empDetail.MittelbarIst;
- ro.FlsDiffGesamt += empDetail.FlsDiff;
- ro.StundenGesamt += empDetail.StundenGesamtIst;
- }
- if (ro.FlsSollGesamt != 0)
- ro.RelationIstSollGesamt = (ro.FlsIstGesamt / ro.FlsSollGesamt) * 100m;
+ }
- if (ro.FlsIstGesamt + ro.MittelbarIst != 0)
- ro.RelationFlsZuMittelbar = (ro.FlsIstGesamt / (ro.FlsIstGesamt + ro.MittelbarIst)) * 100;
- }
+ public virtual void CreateTotals(MitarbeiterstundenkontoRO ro)
+ {
+ foreach (var empDetail in ro.EmployeeDetailList)
+ {
- public virtual void CreateTeamDetails(MitarbeiterstundenkontoRO ro)
- {
- foreach (var teamDetail in ro.TeamDetailList)
- {
- teamDetail.EmployeeDetailList = FilterEmployeeList(teamDetail.EmployeeDetailList);
- foreach (var empDetail in teamDetail.EmployeeDetailList)
- {
- teamDetail.SollGesamt += empDetail.StundenSollOhneUrlaubKrankheit;
- teamDetail.FlsSollGesamt += empDetail.FlsSoll;
- teamDetail.FlsIstGesamt += empDetail.FlsIst;
- teamDetail.MittelbarIst += empDetail.MittelbarIst;
- teamDetail.FlsDiffGesamt += empDetail.FlsDiff;
- teamDetail.StundenGesamt += empDetail.StundenGesamtIst;
- }
- if (teamDetail.FlsSollGesamt != 0)
- teamDetail.RelationIstSollGesamt = (teamDetail.FlsIstGesamt / teamDetail.FlsSollGesamt) * 100m;
+ ro.SollGesamt += empDetail.StundenSollOhneUrlaubKrankheit;
+ ro.FlsSollGesamt += empDetail.FlsSoll;
+ ro.FlsIstGesamt += empDetail.FlsIst;
+ ro.MittelbarIst += empDetail.MittelbarIst;
+ ro.FlsDiffGesamt += empDetail.FlsDiff;
+ ro.StundenGesamt += empDetail.StundenGesamtIst;
+ }
- if (teamDetail.FlsIstGesamt + teamDetail.MittelbarIst != 0)
- teamDetail.RelationFlsZuMittelbar = (teamDetail.FlsIstGesamt / (teamDetail.FlsIstGesamt + teamDetail.MittelbarIst)) * 100;
- }
+ if (ro.FlsSollGesamt != 0)
+ ro.RelationIstSollGesamt = (ro.FlsIstGesamt / ro.FlsSollGesamt) * 100m;
-
- }
+ if (ro.FlsIstGesamt + ro.MittelbarIst != 0)
+ ro.RelationFlsZuMittelbar = (ro.FlsIstGesamt / (ro.FlsIstGesamt + ro.MittelbarIst)) * 100;
+ }
- public virtual void CreateEmployeeDetails(MitarbeiterstundenkontoRO ro)
- {
- foreach (var empDetail in ro.EmployeeDetailList)
- {
- DateTime monatsAnfang = ro.ReportStartDate;
- DateTime monatsEnde = monatsAnfang.AddMonths(1);
- DateTime berichtsAnfang = monatsAnfang;
- DateTime berichtsEnde = monatsEnde;
+ public virtual void CreateTeamDetails(MitarbeiterstundenkontoRO ro)
+ {
+ foreach (var teamDetail in ro.TeamDetailList)
+ {
+ teamDetail.EmployeeDetailList = FilterEmployeeList(teamDetail.EmployeeDetailList);
+ foreach (var empDetail in teamDetail.EmployeeDetailList)
+ {
+ teamDetail.SollGesamt += empDetail.StundenSollOhneUrlaubKrankheit;
+ teamDetail.FlsSollGesamt += empDetail.FlsSoll;
+ teamDetail.FlsIstGesamt += empDetail.FlsIst;
+ teamDetail.MittelbarIst += empDetail.MittelbarIst;
+ teamDetail.FlsDiffGesamt += empDetail.FlsDiff;
+ teamDetail.StundenGesamt += empDetail.StundenGesamtIst;
+ }
+ if (teamDetail.FlsSollGesamt != 0)
+ teamDetail.RelationIstSollGesamt = (teamDetail.FlsIstGesamt / teamDetail.FlsSollGesamt) * 100m;
- Employee emp = empDetail.Employee;
-
- decimal bu = 0;
+ if (teamDetail.FlsIstGesamt + teamDetail.MittelbarIst != 0)
+ teamDetail.RelationFlsZuMittelbar = (teamDetail.FlsIstGesamt / (teamDetail.FlsIstGesamt + teamDetail.MittelbarIst)) * 100;
+ }
+
+
+ }
+
+ public virtual void CreateEmployeeDetails(MitarbeiterstundenkontoRO ro)
+ {
+ foreach (var empDetail in ro.EmployeeDetailList)
+ {
+ DateTime monatsAnfang = ro.ReportStartDate;
+ DateTime monatsEnde = monatsAnfang.AddMonths(1);
+ DateTime berichtsAnfang = monatsAnfang;
+ DateTime berichtsEnde = monatsEnde;
+
+ Employee emp = empDetail.Employee;
+
+ decimal bu = 0;
int anzWochentage = ANZ_WOCHENTAGE;
Contract c = emp.GetValidContractForDate(ro.ReportStartDate);
- if (c == null) // Kein Vertrag vom 1. gefunden, gucken, ob es einen gibt, der mitten im Monat beginnt.
- {
- var c2 = GetNextValidContractForDate(ro.ReportStartDate, emp);
- if (c2 != null && c2.EntryDate.HasValue && c2.EntryDate.Value < ro.ReportEndDate)
- c = c2;
- }
- if (c != null)
- {
- if (c.EntryDate.HasValue && c.EntryDate > monatsAnfang)
- {
- berichtsAnfang = c.EntryDate.Value;
- }
- if (c.ContractEndDate.HasValue && c.ContractEndDate < monatsEnde)
- {
- berichtsEnde = c.ContractEndDate.Value.Date.AddDays(1);
- }
- empDetail.HasContract = true;
- }
+ if (c == null) // Kein Vertrag vom 1. gefunden, gucken, ob es einen gibt, der mitten im Monat beginnt.
+ {
+ var c2 = GetNextValidContractForDate(ro.ReportStartDate, emp);
+ if (c2 != null && c2.EntryDate.HasValue && c2.EntryDate.Value < ro.ReportEndDate)
+ c = c2;
+ }
+ if (c != null)
+ {
+ if (c.EntryDate.HasValue && c.EntryDate > monatsAnfang)
+ {
+ berichtsAnfang = c.EntryDate.Value;
+ }
+ if (c.ContractEndDate.HasValue && c.ContractEndDate < monatsEnde)
+ {
+ berichtsEnde = c.ContractEndDate.Value.Date.AddDays(1);
+ }
+ empDetail.HasContract = true;
+ }
- decimal flsIst = 0;
- decimal mittelbarIst = 0;
+ ServiceRecordSummary summaryTotal = new ServiceRecordSummary();
decimal pause1 = 0;
decimal pause2 = 0;
decimal weeklyTotalHours = 0;
- decimal flsSollGesamt = 0;
- decimal? fehlZeitenGesamt = null;
- decimal? tageUrlaubGesamt = null;
- decimal? tageKrankheitGesamt = null;
- decimal? abwesenheitTageGesamt = null;
- decimal workdaysTotal = 0;
- decimal stundenSollGesamt = 0;
- decimal tatsaechlicheSollStdGesamt = 0;
+ decimal flsSollGesamt = 0;
+ decimal? fehlZeitenGesamt = null;
+ decimal? tageUrlaubGesamt = null;
+ decimal? tageKrankheitGesamt = null;
+ decimal? abwesenheitTageGesamt = null;
+ decimal workdaysTotal = 0;
+ decimal stundenSollGesamt = 0;
+ decimal tatsaechlicheSollStdGesamt = 0;
- IList recordsAll = DAOFactory.SearchDAO.FindServiceRecords(emp.Oid, null);
- recordsAll = AnalysisServiceImp.FilterActiveServiceRecords(recordsAll);
+ IList recordsAll = DAOFactory.SearchDAO.FindServiceRecords(emp.Oid, null);
+ recordsAll = AnalysisServiceImp.FilterActiveServiceRecords(recordsAll);
- IList recordsThisMonth = new List();
- IList groupFilteredRecords = new List();
- Dictionary groupBookingDict = new Dictionary();
- foreach (var item in recordsAll)
- {
+ IList recordsImBerichtszeitraum = new List();
+ IList groupFilteredRecords = new List();
+ Dictionary groupBookingDict = new Dictionary();
+ foreach (var item in recordsAll)
+ {
- if (!item.GroupOid.HasValue || !groupBookingDict.ContainsKey(item.GroupOid.Value))
- {
- groupFilteredRecords.Add(item);
- if (item.GroupOid.HasValue)
- {
- groupBookingDict.Add(item.GroupOid.Value, true);
- }
- }
- }
+ if (!item.GroupOid.HasValue || !groupBookingDict.ContainsKey(item.GroupOid.Value))
+ {
+ groupFilteredRecords.Add(item);
+ if (item.GroupOid.HasValue)
+ {
+ groupBookingDict.Add(item.GroupOid.Value, true);
+ }
+ }
+ }
+
+ while (berichtsAnfang < berichtsEnde)
+ {
+ var arbeitstage = GetArbeitstageImBereich(berichtsAnfang, berichtsEnde, emp);
+ //if (anzWochentage != 5)
+ //{
+ // arbeitstage *= anzWochentage/5m;
+ //}
+ workdaysTotal += arbeitstage;
+ weeklyTotalHours = 0;
- while (berichtsAnfang < berichtsEnde)
- {
- var arbeitstage = GetArbeitstageImBereich(berichtsAnfang, berichtsEnde, emp);
- //if (anzWochentage != 5)
- //{
- // arbeitstage *= anzWochentage/5m;
- //}
- workdaysTotal += arbeitstage;
- weeklyTotalHours = 0;
-
if (c != null)
- {
- if (c.WeeklyTotalHours.HasValue)
- {
- weeklyTotalHours = c.WeeklyTotalHours.Value;
- bu = c.WeeklyTotalHours.Value/this.maxWochenstunden;
- }
+ {
+ if (c.WeeklyTotalHours.HasValue)
+ {
+ weeklyTotalHours = c.WeeklyTotalHours.Value;
+ bu = c.WeeklyTotalHours.Value / this.maxWochenstunden;
+ }
- //if (c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0)
- //{
- // anzWochentage = c.WeeklyDays.Value;
- //}
- //if (c.EntryDate > ro.ReportStartDate)
- // bu = 0;
+ //if (c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0)
+ //{
+ // anzWochentage = c.WeeklyDays.Value;
+ //}
+ //if (c.EntryDate > ro.ReportStartDate)
+ // bu = 0;
- }
+ }
var stundenSollProMonat = BerechneSollProMonat(emp, berichtsAnfang, berichtsEnde);
- var stundenSoll = stundenSollProMonat;
+ var stundenSoll = stundenSollProMonat;
if (!stundenSoll.HasValue)
- {
- stundenSoll = arbeitstage*(weeklyTotalHours/anzWochentage);
- }
-
+ {
+ stundenSoll = arbeitstage * (weeklyTotalHours / anzWochentage);
+ }
+
stundenSollGesamt += stundenSoll ?? 0;
- tatsaechlicheSollStdGesamt += stundenSoll ?? 0;
+ tatsaechlicheSollStdGesamt += stundenSoll ?? 0;
HandleServiceRecords(empDetail, groupFilteredRecords, c);
- foreach (var item in groupFilteredRecords)
- {
- if (!IsServiceRecordFehlzeit(item))
- {
- if (item.Start.Value >= berichtsAnfang && item.Start.Value < berichtsEnde)
- {
- String test = String.Format("{0:dd.MM.yyyy HH:mm}, {1:0} Minuten, {2}, {3}", item.Start, item.RoundedDuration, item.ServiceDescription.Name, item.Notice);
-
- HandleServiceRecord(empDetail, item);
- if (AddServiceRecordToDuration(item))
- {
- decimal duration = 0;
-
- if (item.GroupRoundedDuration.HasValue)
- {
- duration = item.GroupRoundedDuration.Value;
- }
- else
- {
- if (appSettings.ShowRoundedDurationInEmployeeAnalysis)
- {
- duration = item.RoundedDuration;
- }
- else
- {
- duration = (decimal) item.End.Value.Subtract(item.Start.Value).TotalMinutes;
- }
- }
-
- if (item.ServiceDescription != null &&
- item.ServiceDescription.ServiceCategory != null &&
- item.ServiceDescription.ServiceCategory.IsBillable)
- flsIst += duration;
- else
- mittelbarIst += duration;
- }
- recordsThisMonth.Add(item);
- }
- }
- }
+ var summary = BerechneStunden(empDetail, groupFilteredRecords, berichtsAnfang, berichtsEnde);
+ summaryTotal.IstAbrechenbar += summary.IstAbrechenbar;
+ summaryTotal.IstNichtAbrechenbar += summary.IstNichtAbrechenbar;
if (SollPauseBerechnen())
- {
- pause1 += BerechnePauseMinuten(recordsThisMonth);
- pause2 += BerechneAutoPausen(recordsThisMonth);
-
- }
+ {
+ pause1 += BerechnePauseMinuten(recordsImBerichtszeitraum);
+ pause2 += BerechneAutoPausen(recordsImBerichtszeitraum);
+
+ }
var flsSollProMonat = BerechneFlsSollProMonat(emp, berichtsAnfang, berichtsEnde);
decimal? fehlZeiten = GetFehlzeiten(groupFilteredRecords, berichtsAnfang, berichtsEnde);
- if (fehlZeiten.HasValue)
- {
- if (!fehlZeitenGesamt.HasValue)
- fehlZeitenGesamt = 0;
- fehlZeitenGesamt += fehlZeiten;
+ if (fehlZeiten.HasValue)
+ {
+ if (!fehlZeitenGesamt.HasValue)
+ fehlZeitenGesamt = 0;
+ fehlZeitenGesamt += fehlZeiten;
- tatsaechlicheSollStdGesamt -= fehlZeiten.Value;
- }
+ tatsaechlicheSollStdGesamt -= fehlZeiten.Value;
+ }
- var ath = GetAbsenceTimeDays(emp.AbsenceTimes, berichtsAnfang, berichtsEnde);
+ var ath = GetAbsenceTimeDays(emp.AbsenceTimes, berichtsAnfang, berichtsEnde);
- if (ath.TageUrlaub.HasValue)
- {
- if (!tageUrlaubGesamt.HasValue)
- tageUrlaubGesamt = 0;
- tageUrlaubGesamt += ath.TageUrlaub;
- }
- if (ath.TageKrankheit.HasValue)
- {
- if (!tageKrankheitGesamt.HasValue)
- tageKrankheitGesamt = 0;
- tageKrankheitGesamt += ath.TageKrankheit;
- }
+ if (ath.TageUrlaub.HasValue)
+ {
+ if (!tageUrlaubGesamt.HasValue)
+ tageUrlaubGesamt = 0;
+ tageUrlaubGesamt += ath.TageUrlaub;
+ }
+ if (ath.TageKrankheit.HasValue)
+ {
+ if (!tageKrankheitGesamt.HasValue)
+ tageKrankheitGesamt = 0;
+ tageKrankheitGesamt += ath.TageKrankheit;
+ }
empDetail.ArbeitstageProWoche = anzWochentage;
if (ath.TageGesamt.HasValue)
- {
- if (!abwesenheitTageGesamt.HasValue)
- abwesenheitTageGesamt = 0;
- abwesenheitTageGesamt += ath.TageGesamt;
+ {
+ if (!abwesenheitTageGesamt.HasValue)
+ abwesenheitTageGesamt = 0;
+ abwesenheitTageGesamt += ath.TageGesamt;
-
- if (c != null && c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0)
- {
+
+ if (c != null && c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0)
+ {
empDetail.ArbeitstageProWoche = c.WeeklyDays.Value;
- }
+ }
- if (stundenSollProMonat.HasValue)
- {
- decimal stundenProTag = stundenSollProMonat.Value/arbeitstage;
+ if (stundenSollProMonat.HasValue)
+ {
+ decimal stundenProTag = stundenSollProMonat.Value / arbeitstage;
tatsaechlicheSollStdGesamt -= (ath.TageGesamt.Value * stundenProTag);
}
- else
- {
+ else
+ {
tatsaechlicheSollStdGesamt -= (ath.TageGesamt.Value * (weeklyTotalHours / empDetail.ArbeitstageProWoche));
}
-
- }
+
+ }
flsSollGesamt = tatsaechlicheSollStdGesamt;
if (flsSollProMonat.HasValue)
- {
- if (stundenSollProMonat.HasValue)
- {
- flsSollGesamt *= flsSollProMonat.Value / stundenSollProMonat.Value;
- }
- }
- else
- {
-
+ {
+ if (stundenSollProMonat.HasValue)
+ {
+ flsSollGesamt *= flsSollProMonat.Value / stundenSollProMonat.Value;
+ }
+ }
+ else
+ {
+
if (c != null && c.WeeklyFLS.HasValue && c.WeeklyTotalHours.HasValue && c.WeeklyTotalHours.Value != 0)
flsSollGesamt *= c.WeeklyFLS.Value / c.WeeklyTotalHours.Value;
}
-
-
- berichtsAnfang = berichtsEnde;
- berichtsEnde = monatsEnde;
- c = GetNextValidContractForDate(berichtsAnfang, emp);
-
- if (c != null)
- {
- if (c.EntryDate.HasValue && c.EntryDate >= berichtsAnfang)
- berichtsAnfang = c.EntryDate.Value;
- if (c.ContractEndDate.HasValue && c.ContractEndDate < monatsEnde)
- {
- berichtsEnde = c.ContractEndDate.Value.Date.AddDays(1);
- }
- }
- }
-
- if (AddRateFactorToIst() != 1)
- {
- flsIst *= AddRateFactorToIst();
- }
- flsIst /= 60m;
- mittelbarIst /= 60m;
-
- empDetail.WorkDaysThisMonth = workdaysTotal;
- //decimal stundenSollMax = arbeitstage * (maxWochenstunden / xxx) * bu;
-
- empDetail.SollProTag = (weeklyTotalHours/ anzWochentage);
- empDetail.StundenSollMax = stundenSollGesamt;
- empDetail.Fehlzeiten = fehlZeitenGesamt;
- empDetail.TageUrlaub = tageUrlaubGesamt;
- empDetail.TageKrankheit = tageKrankheitGesamt;
- empDetail.UrlaubUndKrankheit = abwesenheitTageGesamt;
+ berichtsAnfang = berichtsEnde;
+ berichtsEnde = monatsEnde;
+ c = GetNextValidContractForDate(berichtsAnfang, emp);
- empDetail.StundenSollOhneUrlaubKrankheit = tatsaechlicheSollStdGesamt;
+ if (c != null)
+ {
+ if (c.EntryDate.HasValue && c.EntryDate >= berichtsAnfang)
+ berichtsAnfang = c.EntryDate.Value;
+ if (c.ContractEndDate.HasValue && c.ContractEndDate < monatsEnde)
+ {
+ berichtsEnde = c.ContractEndDate.Value.Date.AddDays(1);
+ }
+ }
+ }
- empDetail.FlsSoll = flsSollGesamt;
+ if (AddRateFactorToIst() != 1)
+ {
+ summaryTotal.IstAbrechenbar *= AddRateFactorToIst();
+ }
+ summaryTotal.IstAbrechenbar /= 60m;
+ summaryTotal.IstNichtAbrechenbar /= 60m;
-
+ empDetail.WorkDaysThisMonth = workdaysTotal;
+ //decimal stundenSollMax = arbeitstage * (maxWochenstunden / xxx) * bu;
- empDetail.MittelbarIst = mittelbarIst;
- empDetail.Bu = bu;
- empDetail.FlsIst = flsIst;
- empDetail.FlsDiff = flsIst - empDetail.FlsSoll;
- empDetail.StundenMittelbarIst = mittelbarIst;
- empDetail.StundenGesamtIst = flsIst + mittelbarIst;
+ empDetail.SollProTag = (weeklyTotalHours / anzWochentage);
+ empDetail.StundenSollMax = stundenSollGesamt;
- empDetail.StundenGesamtIst -= pause1/60;
- empDetail.StundenGesamtIst -= pause2/60;
+
+ empDetail.Fehlzeiten = fehlZeitenGesamt;
+ empDetail.TageUrlaub = tageUrlaubGesamt;
+ empDetail.TageKrankheit = tageKrankheitGesamt;
+ empDetail.UrlaubUndKrankheit = abwesenheitTageGesamt;
+
+ empDetail.StundenSollOhneUrlaubKrankheit = tatsaechlicheSollStdGesamt;
+
+ empDetail.FlsSoll = flsSollGesamt;
+
+
+
+ empDetail.MittelbarIst = summaryTotal.IstNichtAbrechenbar;
+ empDetail.Bu = bu;
+ empDetail.FlsIst = summaryTotal.IstAbrechenbar;
+ empDetail.FlsDiff = summaryTotal.IstAbrechenbar - empDetail.FlsSoll;
+ empDetail.StundenMittelbarIst = summaryTotal.IstNichtAbrechenbar;
+ empDetail.StundenGesamtIst = summaryTotal.IstAbrechenbar + summaryTotal.IstNichtAbrechenbar;
+
+ empDetail.StundenGesamtIst -= pause1 / 60;
+ empDetail.StundenGesamtIst -= pause2 / 60;
if (empDetail.FlsSoll != 0)
- empDetail.RelationIstSoll = (empDetail.FlsIst/empDetail.FlsSoll)*100m;
+ empDetail.RelationIstSoll = (empDetail.FlsIst / empDetail.FlsSoll) * 100m;
- if (flsIst + mittelbarIst != 0)
- empDetail.RelationFlsZuMittelbar = (flsIst/(flsIst + mittelbarIst))*100;
+ if (summaryTotal.IstAbrechenbar + summaryTotal.IstNichtAbrechenbar != 0)
+ empDetail.RelationFlsZuMittelbar = (summaryTotal.IstAbrechenbar / (summaryTotal.IstAbrechenbar + summaryTotal.IstNichtAbrechenbar)) * 100;
- decimal? ueberstunden = empDetail.StundenGesamtIst - empDetail.StundenSollOhneUrlaubKrankheit;
- decimal? ueberstundenVormonat;
+ decimal? ueberstunden = empDetail.StundenGesamtIst - empDetail.StundenSollOhneUrlaubKrankheit;
+ decimal? ueberstundenVormonat;
- decimal alteExtraUeberstunden = 0;
- BerechneUeberstundenBis(emp, groupFilteredRecords, ro.ReportStartDate, out ueberstundenVormonat,
- out alteExtraUeberstunden);
+ decimal alteExtraUeberstunden = 0;
+ BerechneUeberstundenBis(emp, groupFilteredRecords, ro.ReportStartDate, out ueberstundenVormonat,
+ out alteExtraUeberstunden);
- decimal extraStunden = 0;
+ decimal extraStunden = 0;
- BerechneExtraUeberstunden(emp, monatsAnfang, monatsEnde, out extraStunden);
+ BerechneExtraUeberstunden(emp, monatsAnfang, monatsEnde, out extraStunden);
- if (ShouldCreateDayDetails())
- {
-
- empDetail.Days = CreateDayDetails(monatsAnfang, monatsEnde, empDetail, recordsThisMonth);
- var ah = GetAdditionalHours(empDetail.Days, monatsAnfang, monatsEnde, empDetail, recordsThisMonth);
- ueberstunden += ah;
- empDetail.StundenGesamtIst += ah;
- }
+ if (ShouldCreateDayDetails())
+ {
+
+ empDetail.Days = CreateDayDetails(monatsAnfang, monatsEnde, empDetail, recordsImBerichtszeitraum);
+ var ah = GetAdditionalHours(empDetail.Days, monatsAnfang, monatsEnde, empDetail, recordsImBerichtszeitraum);
+ ueberstunden += ah;
+ empDetail.StundenGesamtIst += ah;
+ }
- empDetail.Ueberstunden = ueberstunden;
- empDetail.UeberstundenVormonat = ueberstundenVormonat;
- if (!empDetail.UeberstundenGesamt.HasValue)
- empDetail.UeberstundenGesamt = ((ueberstundenVormonat ?? 0) + (ueberstunden ?? 0)) + extraStunden;
- else
- empDetail.UeberstundenGesamt += ((ueberstundenVormonat ?? 0) + (ueberstunden ?? 0)) + extraStunden;
- empDetail.UeberstundenAusbezahlt = extraStunden;
+ empDetail.Ueberstunden = ueberstunden;
+ empDetail.UeberstundenVormonat = ueberstundenVormonat;
+ if (!empDetail.UeberstundenGesamt.HasValue)
+ empDetail.UeberstundenGesamt = ((ueberstundenVormonat ?? 0) + (ueberstunden ?? 0)) + extraStunden;
+ else
+ empDetail.UeberstundenGesamt += ((ueberstundenVormonat ?? 0) + (ueberstunden ?? 0)) + extraStunden;
+ empDetail.UeberstundenAusbezahlt = extraStunden;
- //Urlaubskonto (todo)
- empDetail.UrlaubGesamtImAktuellenJahr =
- GetAbsenceTimeDays(emp.AbsenceTimes, new DateTime(monatsAnfang.Year, 1, 1), monatsEnde).TageUrlaub;
- }
+ //Urlaubskonto (todo)
+ empDetail.UrlaubGesamtImAktuellenJahr =
+ GetAbsenceTimeDays(emp.AbsenceTimes, new DateTime(monatsAnfang.Year, 1, 1), monatsEnde).TageUrlaub;
+ }
- ro.EmployeeDetailList = FilterEmployeeList(ro.EmployeeDetailList);
- }
+ ro.EmployeeDetailList = FilterEmployeeList(ro.EmployeeDetailList);
+ }
+
+ protected virtual ServiceRecordSummary BerechneStunden(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList groupFilteredRecords, DateTime berichtsAnfang, DateTime berichtsEnde)
+ {
+ var sum = new ServiceRecordSummary();
+ sum.RecordsImBerichtszeitraum = new List();
+ foreach (var item in groupFilteredRecords)
+ {
+ if (!IsServiceRecordFehlzeit(item))
+ {
+ if (item.Start.Value >= berichtsAnfang && item.Start.Value < berichtsEnde)
+ {
+ //String test = String.Format("{0:dd.MM.yyyy HH:mm}, {1:0} Minuten, {2}, {3}", item.Start, item.RoundedDuration, item.ServiceDescription.Name, item.Notice);
+
+ HandleServiceRecord(empDetail, item);
+ if (AddServiceRecordToDuration(item))
+ {
+ decimal duration = 0;
+
+ if (item.GroupRoundedDuration.HasValue)
+ {
+ duration = item.GroupRoundedDuration.Value;
+ }
+ else
+ {
+ if (appSettings.ShowRoundedDurationInEmployeeAnalysis)
+ {
+ duration = item.RoundedDuration;
+ }
+ else
+ {
+ duration = (decimal)item.End.Value.Subtract(item.Start.Value).TotalMinutes;
+ }
+ }
+
+ if (item.ServiceDescription != null &&
+ item.ServiceDescription.ServiceCategory != null &&
+ item.ServiceDescription.ServiceCategory.IsBillable)
+ sum.IstAbrechenbar += duration;
+ else
+ sum.IstNichtAbrechenbar += duration;
+ }
+ sum.RecordsImBerichtszeitraum.Add(item);
+ }
+ }
+ }
+
+ return sum;
+ }
public virtual decimal BerechneAutoPausen(IList recordsThisMonth)
- {
- return 0;
- }
+ {
+ return 0;
+ }
public virtual decimal BerechnePauseMinuten(IList srList)
{
@@ -439,19 +449,19 @@ namespace BeWo.Report.ReportObjects
var pauseSpan = new DateTimeSpan
{
StartDateTime = pause.Start.Value,
- EndDateTime = pause.Start.Value.AddMinutes((double) pause.RoundedDuration)
+ EndDateTime = pause.Start.Value.AddMinutes((double)pause.RoundedDuration)
};
var arbeitszeitSpan = new DateTimeSpan
{
StartDateTime = arbeitszeit.Start.Value,
- EndDateTime = arbeitszeit.Start.Value.AddMinutes((double) arbeitszeit.RoundedDuration)
+ EndDateTime = arbeitszeit.Start.Value.AddMinutes((double)arbeitszeit.RoundedDuration)
};
if (arbeitszeit.GroupOid.HasValue)
{
arbeitszeitSpan.EndDateTime =
- arbeitszeit.Start.Value.AddMinutes((double) (arbeitszeit.GroupRoundedDuration ?? 0));
+ arbeitszeit.Start.Value.AddMinutes((double)(arbeitszeit.GroupRoundedDuration ?? 0));
}
@@ -466,7 +476,7 @@ namespace BeWo.Report.ReportObjects
if (arbeitszeitSpan.EndDateTime < endUeberlappung)
endUeberlappung = arbeitszeitSpan.EndDateTime;
- var overlapping = (decimal) endUeberlappung.Subtract(startUeberlappung).TotalMinutes;
+ var overlapping = (decimal)endUeberlappung.Subtract(startUeberlappung).TotalMinutes;
pausenZeit += overlapping;
}
@@ -476,12 +486,12 @@ namespace BeWo.Report.ReportObjects
}
public virtual bool SollPauseBerechnen()
- {
- return false;
- }
+ {
+ return false;
+ }
- public virtual List FilterEmployeeList(List employeeDetailList)
- {
+ public virtual List FilterEmployeeList(List employeeDetailList)
+ {
List newEmpList = new List();
foreach (var ed in employeeDetailList)
@@ -502,10 +512,10 @@ namespace BeWo.Report.ReportObjects
return newEmpList;
}
- public virtual void HandleServiceRecords(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList groupFilteredRecords, Contract contract)
- {
- //do nothing
- }
+ public virtual void HandleServiceRecords(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList groupFilteredRecords, Contract contract)
+ {
+ //do nothing
+ }
public virtual void CorrectOverlappingTimes(IList serviceRecords)
{
@@ -521,7 +531,7 @@ namespace BeWo.Report.ReportObjects
{
continue;
}
-
+
bool isGroup = false;
var minuten = newRecord.RoundedDuration;
if (newRecord.GroupRoundedDuration.HasValue)
@@ -609,11 +619,11 @@ namespace BeWo.Report.ReportObjects
}
public virtual bool CorrectOverlappingTime(ServiceRecord newRecord)
- {
- return true;
- }
+ {
+ return true;
+ }
- public virtual decimal? BerechneSollProMonat(Employee emp, DateTime start, DateTime ende)
+ public virtual decimal? BerechneSollProMonat(Employee emp, DateTime start, DateTime ende)
{
return null;
}
@@ -624,371 +634,371 @@ namespace BeWo.Report.ReportObjects
}
public virtual void HandleServiceRecord(MitarbeiterstundenkontoRO.EmployeeDetail emp, ServiceRecord item)
- {
- //do nothing
- }
+ {
+ //do nothing
+ }
- public virtual bool ShouldCreateDayDetails()
- {
- return false;
- }
+ public virtual bool ShouldCreateDayDetails()
+ {
+ return false;
+ }
- public virtual IList CreateDayDetails(DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList recordsAll)
- {
-
- Dictionary dayToDetail = new Dictionary();
+ public virtual IList CreateDayDetails(DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList recordsAll)
+ {
- for (int i = berichtStart.Day; i <= berichtEnde.AddDays(-1).Day; i++)
- {
- MitarbeiterstundenkontoRO.DayDetail dd = CreateDayDetail(new DateTime(berichtStart.Year, berichtStart.Month, i), ed);
- dayToDetail.Add(i, dd);
- }
+ Dictionary dayToDetail = new Dictionary();
- foreach (var sr in recordsAll)
- {
- if (sr.Start.HasValue && sr.Start >= berichtStart && sr.Start < berichtEnde && sr.End.HasValue)
- {
- var dd = dayToDetail[sr.Start.Value.Day];
+ for (int i = berichtStart.Day; i <= berichtEnde.AddDays(-1).Day; i++)
+ {
+ MitarbeiterstundenkontoRO.DayDetail dd = CreateDayDetail(new DateTime(berichtStart.Year, berichtStart.Month, i), ed);
+ dayToDetail.Add(i, dd);
+ }
- if (!IsServiceRecordFehlzeit(sr) && AddServiceRecordToDuration(sr))
- {
- decimal duration = 0;
- if (sr.GroupRoundedDuration.HasValue)
- {
- duration = sr.GroupRoundedDuration.Value;
- }
- else
- {
- if (appSettings.ShowRoundedDurationInEmployeeAnalysis)
- {
- duration = sr.RoundedDuration;
- }
- else
- {
- duration = (decimal)sr.End.Value.Subtract(sr.Start.Value).TotalMinutes;
- }
- }
-
- dd.MinutesTotal += duration;
- if (dd.ServiceRecords == null)
- dd.ServiceRecords = new List();
- dd.ServiceRecords.Add(sr);
+ foreach (var sr in recordsAll)
+ {
+ if (sr.Start.HasValue && sr.Start >= berichtStart && sr.Start < berichtEnde && sr.End.HasValue)
+ {
+ var dd = dayToDetail[sr.Start.Value.Day];
- CalculateSpecialHours(dd, sr, duration);
-
-
- }
- }
- }
+ if (!IsServiceRecordFehlzeit(sr) && AddServiceRecordToDuration(sr))
+ {
+ decimal duration = 0;
+ if (sr.GroupRoundedDuration.HasValue)
+ {
+ duration = sr.GroupRoundedDuration.Value;
+ }
+ else
+ {
+ if (appSettings.ShowRoundedDurationInEmployeeAnalysis)
+ {
+ duration = sr.RoundedDuration;
+ }
+ else
+ {
+ duration = (decimal)sr.End.Value.Subtract(sr.Start.Value).TotalMinutes;
+ }
+ }
- //Berechne von bis Zeiten
- foreach (var ddKeyValue in dayToDetail)
- {
- var dd = ddKeyValue.Value;
-
- if (dd.ServiceRecords != null)
- {
- var orderedList = dd.ServiceRecords.OrderBy(i => i.Start);
+ dd.MinutesTotal += duration;
+ if (dd.ServiceRecords == null)
+ dd.ServiceRecords = new List();
+ dd.ServiceRecords.Add(sr);
- DateTime lastEnd = DateTime.MinValue;
- var gapCount = -1;
-
- foreach (var sr in orderedList)
- {
- decimal duration = 0;
- if (sr.GroupRoundedDuration.HasValue)
- {
- duration = sr.GroupRoundedDuration.Value;
- }
- else
- {
- if (appSettings.ShowRoundedDurationInEmployeeAnalysis)
- {
- duration = sr.RoundedDuration;
- }
- else
- {
- duration = (decimal)sr.End.Value.Subtract(sr.Start.Value).TotalMinutes;
- }
- }
-
- DateTime dtEnd = sr.Start.Value.AddMinutes((double)duration);
- if (sr.Start > lastEnd)
- {
- gapCount++;
-
- }
- if (dtEnd > lastEnd)
- {
- lastEnd = dtEnd;
- }
- if (gapCount == 0)
- {
- if (!dd.StartDateTime1.HasValue || sr.Start < dd.StartDateTime1)
- {
- dd.StartDateTime1 = sr.Start;
- }
- if (!dd.EndDateTime1.HasValue || dtEnd > dd.EndDateTime1)
- {
- dd.EndDateTime1 = dtEnd;
- }
- }
- else if (gapCount == 1)
- {
- if (!dd.StartDateTime2.HasValue || sr.Start < dd.StartDateTime2)
- {
- dd.StartDateTime2 = sr.Start;
- }
- if (!dd.EndDateTime2.HasValue || dtEnd > dd.EndDateTime2)
- {
- dd.EndDateTime2 = dtEnd;
- }
- }
- else if (gapCount == 2)
- {
- if (!dd.StartDateTime3.HasValue || sr.Start < dd.StartDateTime3)
- {
- dd.StartDateTime3 = sr.Start;
- }
- if (!dd.EndDateTime3.HasValue || dtEnd > dd.EndDateTime3)
- {
- dd.EndDateTime3 = dtEnd;
- }
- }
- else
- {
- if (!dd.StartDateTime4.HasValue || sr.Start < dd.StartDateTime4)
- {
- dd.StartDateTime4 = sr.Start;
- }
- if (!dd.EndDateTime4.HasValue || dtEnd > dd.EndDateTime4)
- {
- dd.EndDateTime4 = dtEnd;
- }
- }
- }
- }
- }
-
-
+ CalculateSpecialHours(dd, sr, duration);
- return dayToDetail.Values.OrderBy(dd => dd.Date).ToList();
- }
+ }
+ }
+ }
- public virtual void CalculateSpecialHours(MitarbeiterstundenkontoRO.DayDetail dd, ServiceRecord sr, decimal duration)
- {
- if (sr.Start.Value.DayOfWeek == DayOfWeek.Sunday)
- {
- dd.HoursSunday += duration / 60;
- }
- else if (IstFeiertag(sr.Start.Value))
- {
- dd.HoursHoliday += duration / 60;
- }
- else if (dd.NightEnd.HasValue && dd.NightStart.HasValue)
- {
- DateTime dtEnd = sr.Start.Value.AddMinutes((double)duration);
+ //Berechne von bis Zeiten
+ foreach (var ddKeyValue in dayToDetail)
+ {
+ var dd = ddKeyValue.Value;
- if (dtEnd.Hour >= dd.NightStart.Value)
- {
- DateTime dtStart = dtEnd.Date.AddHours(dd.NightStart.Value);
- if (sr.Start.Value > dtStart)
- dtStart = sr.Start.Value;
+ if (dd.ServiceRecords != null)
+ {
+ var orderedList = dd.ServiceRecords.OrderBy(i => i.Start);
- TimeSpan ts = dtEnd.Subtract(dtStart);
- dd.SpecialHours += (decimal)ts.TotalMinutes / 60;
- }
+ DateTime lastEnd = DateTime.MinValue;
+ var gapCount = -1;
- if (sr.Start.Value.Hour < dd.NightEnd)
- {
- DateTime dtEnd2 = sr.Start.Value.Date.AddHours(dd.NightEnd.Value);
- if (dtEnd < dtEnd2)
- dtEnd2 = dtEnd;
- TimeSpan ts = dtEnd2.Subtract(sr.Start.Value);
- dd.SpecialHours += (decimal)(Math.Round(ts.TotalMinutes, 0) / 60);
- }
- }
- }
+ foreach (var sr in orderedList)
+ {
+ decimal duration = 0;
+ if (sr.GroupRoundedDuration.HasValue)
+ {
+ duration = sr.GroupRoundedDuration.Value;
+ }
+ else
+ {
+ if (appSettings.ShowRoundedDurationInEmployeeAnalysis)
+ {
+ duration = sr.RoundedDuration;
+ }
+ else
+ {
+ duration = (decimal)sr.End.Value.Subtract(sr.Start.Value).TotalMinutes;
+ }
+ }
- public virtual MitarbeiterstundenkontoRO.DayDetail CreateDayDetail(DateTime date, MitarbeiterstundenkontoRO.EmployeeDetail ed)
- {
- MitarbeiterstundenkontoRO.DayDetail dd = new MitarbeiterstundenkontoRO.DayDetail();
- dd.Date = date.Date;
- dd.NightStart = 20;
- dd.NightEnd = 6;
- dd.MaxHoursUntilBreak = 6;
- dd.BreakMinutes = 30;
+ DateTime dtEnd = sr.Start.Value.AddMinutes((double)duration);
+ if (sr.Start > lastEnd)
+ {
+ gapCount++;
- CalculateAbsenceTimesForDay(dd, ed);
- return dd;
- }
+ }
+ if (dtEnd > lastEnd)
+ {
+ lastEnd = dtEnd;
+ }
+ if (gapCount == 0)
+ {
+ if (!dd.StartDateTime1.HasValue || sr.Start < dd.StartDateTime1)
+ {
+ dd.StartDateTime1 = sr.Start;
+ }
+ if (!dd.EndDateTime1.HasValue || dtEnd > dd.EndDateTime1)
+ {
+ dd.EndDateTime1 = dtEnd;
+ }
+ }
+ else if (gapCount == 1)
+ {
+ if (!dd.StartDateTime2.HasValue || sr.Start < dd.StartDateTime2)
+ {
+ dd.StartDateTime2 = sr.Start;
+ }
+ if (!dd.EndDateTime2.HasValue || dtEnd > dd.EndDateTime2)
+ {
+ dd.EndDateTime2 = dtEnd;
+ }
+ }
+ else if (gapCount == 2)
+ {
+ if (!dd.StartDateTime3.HasValue || sr.Start < dd.StartDateTime3)
+ {
+ dd.StartDateTime3 = sr.Start;
+ }
+ if (!dd.EndDateTime3.HasValue || dtEnd > dd.EndDateTime3)
+ {
+ dd.EndDateTime3 = dtEnd;
+ }
+ }
+ else
+ {
+ if (!dd.StartDateTime4.HasValue || sr.Start < dd.StartDateTime4)
+ {
+ dd.StartDateTime4 = sr.Start;
+ }
+ if (!dd.EndDateTime4.HasValue || dtEnd > dd.EndDateTime4)
+ {
+ dd.EndDateTime4 = dtEnd;
+ }
+ }
+ }
+ }
+ }
- public virtual void CalculateAbsenceTimesForDay(MitarbeiterstundenkontoRO.DayDetail dd, MitarbeiterstundenkontoRO.EmployeeDetail ed)
- {
- var absenceTimes = ed.Employee.AbsenceTimes;
-
- if (absenceTimes != null)
- {
- foreach (var absenceTime in absenceTimes)
- {
-
- if (IsUrlaubAbsenceTime(absenceTime) || IsKrankheitAbsenceTime(absenceTime))
- {
- DateTimeSpan span = new DateTimeSpan();
- span.StartDate = dd.Date;
- if (absenceTime.Start.HasValue && absenceTime.Start.Value > span.StartDate)
- {
- span.StartDate = absenceTime.Start.Value;
- }
- span.EndDate = dd.Date.AddDays(1);
- if (absenceTime.End.HasValue && absenceTime.End.Value.Date.AddDays(1) < span.EndDate)
- {
- span.EndDate = absenceTime.End.Value.Date.AddDays(1);
- }
- if (span.EndDate > dd.Date && span.StartDate < dd.Date.AddDays(1))
- {
- DateTime day = span.StartDate;
- var faktor = GetFeiertagsFaktor(day);
- if (faktor < 1 && day.DayOfWeek != DayOfWeek.Saturday && day.DayOfWeek != DayOfWeek.Sunday)
- {
- var soll = ed.SollProTag;
- if (faktor != 0)
- {
- soll *= faktor; //halbe Feiertage etc. berücksichtigen
- }
- if (IsKrankheitAbsenceTime(absenceTime))
- {
- dd.HoursSick = soll;
- }
- else if (IsUrlaubAbsenceTime(absenceTime))
- {
- dd.HoursInVacation = soll;
- }
- dd.MinutesTotal += soll * 60;
- }
- }
- }
-
- //}
- }
- }
-
- }
+ return dayToDetail.Values.OrderBy(dd => dd.Date).ToList();
+ }
- public virtual bool IsKrankheitAbsenceTime(AbsenceTime absenceTime)
- {
- return !String.IsNullOrEmpty(absenceTime.AbsenceReason.Description) &&
- (absenceTime.AbsenceReason.Description.ToLower().IndexOf("arbeitsunfähig") >= 0
- || absenceTime.AbsenceReason.Description.ToLower().IndexOf("krank") >= 0);
- }
+ public virtual void CalculateSpecialHours(MitarbeiterstundenkontoRO.DayDetail dd, ServiceRecord sr, decimal duration)
+ {
+ if (sr.Start.Value.DayOfWeek == DayOfWeek.Sunday)
+ {
+ dd.HoursSunday += duration / 60;
+ }
+ else if (IstFeiertag(sr.Start.Value))
+ {
+ dd.HoursHoliday += duration / 60;
+ }
+ else if (dd.NightEnd.HasValue && dd.NightStart.HasValue)
+ {
+ DateTime dtEnd = sr.Start.Value.AddMinutes((double)duration);
- public virtual bool IsUrlaubAbsenceTime(AbsenceTime absenceTime)
- {
- return !String.IsNullOrEmpty(absenceTime.AbsenceReason.Description) &&
- absenceTime.AbsenceReason.Description.ToLower().IndexOf("urlaub") >= 0;
- }
+ if (dtEnd.Hour >= dd.NightStart.Value)
+ {
+ DateTime dtStart = dtEnd.Date.AddHours(dd.NightStart.Value);
+ if (sr.Start.Value > dtStart)
+ dtStart = sr.Start.Value;
- public virtual bool AddServiceRecordToDuration(ServiceRecord item)
- {
- return true;
- }
+ TimeSpan ts = dtEnd.Subtract(dtStart);
+ dd.SpecialHours += (decimal)ts.TotalMinutes / 60;
+ }
- public virtual decimal AddRateFactorToIst()
- {
- return 1;
- }
+ if (sr.Start.Value.Hour < dd.NightEnd)
+ {
+ DateTime dtEnd2 = sr.Start.Value.Date.AddHours(dd.NightEnd.Value);
+ if (dtEnd < dtEnd2)
+ dtEnd2 = dtEnd;
+ TimeSpan ts = dtEnd2.Subtract(sr.Start.Value);
+ dd.SpecialHours += (decimal)(Math.Round(ts.TotalMinutes, 0) / 60);
+ }
+ }
+ }
- private void BerechneUeberstundenBis(Employee emp, IList records, DateTime monat, out decimal? ueberstunden, out decimal alteExtraUeberstunden)
- {
- ueberstunden = null;
- alteExtraUeberstunden = 0;
+ public virtual MitarbeiterstundenkontoRO.DayDetail CreateDayDetail(DateTime date, MitarbeiterstundenkontoRO.EmployeeDetail ed)
+ {
+ MitarbeiterstundenkontoRO.DayDetail dd = new MitarbeiterstundenkontoRO.DayDetail();
+ dd.Date = date.Date;
+ dd.NightStart = 20;
+ dd.NightEnd = 6;
+ dd.MaxHoursUntilBreak = 6;
+ dd.BreakMinutes = 30;
- Contract c = emp.FirstContract;
-
- if (c != null)
- {
-
- Dictionary> srDict = CreateServiceRecordDictByDate(records);
+ CalculateAbsenceTimesForDay(dd, ed);
+ return dd;
+ }
- DateTime start = c.EntryDate.HasValue ? c.EntryDate.Value : new DateTime(2011, 1, 1);
- while (c != null && start < monat)
- {
- DateTime contractEnd = c.ContractEndDate.HasValue ? c.ContractEndDate.Value : DateTime.MaxValue;
- decimal bu = 0;
- decimal weeklyTotalHours = this.maxWochenstunden;
+ public virtual void CalculateAbsenceTimesForDay(MitarbeiterstundenkontoRO.DayDetail dd, MitarbeiterstundenkontoRO.EmployeeDetail ed)
+ {
+ var absenceTimes = ed.Employee.AbsenceTimes;
+
+ if (absenceTimes != null)
+ {
+ foreach (var absenceTime in absenceTimes)
+ {
+
+ if (IsUrlaubAbsenceTime(absenceTime) || IsKrankheitAbsenceTime(absenceTime))
+ {
+ DateTimeSpan span = new DateTimeSpan();
+
+ span.StartDate = dd.Date;
+
+ if (absenceTime.Start.HasValue && absenceTime.Start.Value > span.StartDate)
+ {
+ span.StartDate = absenceTime.Start.Value;
+ }
+ span.EndDate = dd.Date.AddDays(1);
+ if (absenceTime.End.HasValue && absenceTime.End.Value.Date.AddDays(1) < span.EndDate)
+ {
+ span.EndDate = absenceTime.End.Value.Date.AddDays(1);
+ }
+ if (span.EndDate > dd.Date && span.StartDate < dd.Date.AddDays(1))
+ {
+ DateTime day = span.StartDate;
+ var faktor = GetFeiertagsFaktor(day);
+
+ if (faktor < 1 && day.DayOfWeek != DayOfWeek.Saturday && day.DayOfWeek != DayOfWeek.Sunday)
+ {
+ var soll = ed.SollProTag;
+ if (faktor != 0)
+ {
+ soll *= faktor; //halbe Feiertage etc. berücksichtigen
+ }
+ if (IsKrankheitAbsenceTime(absenceTime))
+ {
+ dd.HoursSick = soll;
+ }
+ else if (IsUrlaubAbsenceTime(absenceTime))
+ {
+ dd.HoursInVacation = soll;
+ }
+ dd.MinutesTotal += soll * 60;
+ }
+ }
+ }
+
+ //}
+ }
+ }
+
+ }
+
+ public virtual bool IsKrankheitAbsenceTime(AbsenceTime absenceTime)
+ {
+ return !String.IsNullOrEmpty(absenceTime.AbsenceReason.Description) &&
+ (absenceTime.AbsenceReason.Description.ToLower().IndexOf("arbeitsunfähig") >= 0
+ || absenceTime.AbsenceReason.Description.ToLower().IndexOf("krank") >= 0);
+ }
+
+ public virtual bool IsUrlaubAbsenceTime(AbsenceTime absenceTime)
+ {
+ return !String.IsNullOrEmpty(absenceTime.AbsenceReason.Description) &&
+ absenceTime.AbsenceReason.Description.ToLower().IndexOf("urlaub") >= 0;
+ }
+
+ public virtual bool AddServiceRecordToDuration(ServiceRecord item)
+ {
+ return true;
+ }
+
+ public virtual decimal AddRateFactorToIst()
+ {
+ return 1;
+ }
+
+ private void BerechneUeberstundenBis(Employee emp, IList records, DateTime monat, out decimal? ueberstunden, out decimal alteExtraUeberstunden)
+ {
+ ueberstunden = null;
+ alteExtraUeberstunden = 0;
+
+ Contract c = emp.FirstContract;
+
+ if (c != null)
+ {
+
+ Dictionary> srDict = CreateServiceRecordDictByDate(records);
+
+ DateTime start = c.EntryDate.HasValue ? c.EntryDate.Value : new DateTime(2011, 1, 1);
+ while (c != null && start < monat)
+ {
+ DateTime contractEnd = c.ContractEndDate.HasValue ? c.ContractEndDate.Value : DateTime.MaxValue;
+ decimal bu = 0;
+ decimal weeklyTotalHours = this.maxWochenstunden;
int anzWochentage = ANZ_WOCHENTAGE;
- //if (c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0)
- //{
- // anzWochentage = c.WeeklyDays.Value;
- //}
+ //if (c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0)
+ //{
+ // anzWochentage = c.WeeklyDays.Value;
+ //}
if (c.WeeklyTotalHours.HasValue)
- {
- weeklyTotalHours = c.WeeklyTotalHours.Value;
- bu = c.WeeklyTotalHours.Value / maxWochenstunden;
- }
+ {
+ weeklyTotalHours = c.WeeklyTotalHours.Value;
+ bu = c.WeeklyTotalHours.Value / maxWochenstunden;
+ }
- while (start < monat && start < contractEnd)
- {
- decimal flsIst = 0;
- decimal mittelbarIst = 0;
- decimal minutenMonat = 0;
- DateTime ende = new DateTime(start.Year, start.Month, 1).AddMonths(1);
- if (contractEnd < DateTime.MaxValue && contractEnd.AddDays(1) < ende)
- ende = contractEnd.AddDays(1);
-
- IList recordsThisMonth = new List();
- String key = String.Format("{0:yyyyMM}", start);
+ while (start < monat && start < contractEnd)
+ {
+ decimal flsIst = 0;
+ decimal mittelbarIst = 0;
+ decimal minutenMonat = 0;
+ DateTime ende = new DateTime(start.Year, start.Month, 1).AddMonths(1);
+ if (contractEnd < DateTime.MaxValue && contractEnd.AddDays(1) < ende)
+ ende = contractEnd.AddDays(1);
- if (srDict.ContainsKey(key))
- {
- foreach (var item in srDict[key])
- {
- if (item.Start.HasValue && item.Start >= start && item.Start < ende)
- {
- if (AddServiceRecordToDuration(item))
- {
- decimal duration = 0;
+ IList recordsThisMonth = new List();
+ String key = String.Format("{0:yyyyMM}", start);
- if (item.GroupRoundedDuration.HasValue)
- {
- duration = item.GroupRoundedDuration.Value;
- }
- else
- {
- if (appSettings.ShowRoundedDurationInEmployeeAnalysis)
- {
- duration = item.RoundedDuration;
- }
- else
- {
- duration = (decimal)item.End.Value.Subtract(item.Start.Value).TotalMinutes;
- }
- }
- minutenMonat += duration;
+ if (srDict.ContainsKey(key))
+ {
+ foreach (var item in srDict[key])
+ {
+ if (item.Start.HasValue && item.Start >= start && item.Start < ende)
+ {
+ if (AddServiceRecordToDuration(item))
+ {
+ decimal duration = 0;
- if (AddRateFactorToIst() != 1)
- {
- if (item.ServiceDescription != null &&
- item.ServiceDescription.ServiceCategory != null &&
- item.ServiceDescription.ServiceCategory.IsBillable)
- flsIst += duration;
- else
- mittelbarIst += duration;
- }
- }
+ if (item.GroupRoundedDuration.HasValue)
+ {
+ duration = item.GroupRoundedDuration.Value;
+ }
+ else
+ {
+ if (appSettings.ShowRoundedDurationInEmployeeAnalysis)
+ {
+ duration = item.RoundedDuration;
+ }
+ else
+ {
+ duration = (decimal)item.End.Value.Subtract(item.Start.Value).TotalMinutes;
+ }
+ }
+ minutenMonat += duration;
+
+ if (AddRateFactorToIst() != 1)
+ {
+ if (item.ServiceDescription != null &&
+ item.ServiceDescription.ServiceCategory != null &&
+ item.ServiceDescription.ServiceCategory.IsBillable)
+ flsIst += duration;
+ else
+ mittelbarIst += duration;
+ }
+ }
recordsThisMonth.Add(item);
}
- }
- }
-
-
+ }
+ }
+
+
decimal arbeitstage = GetArbeitstageImBereich(start, ende, emp);
//if (anzWochentage != 5)
@@ -997,32 +1007,32 @@ namespace BeWo.Report.ReportObjects
//}
var stundenSollProMonat = BerechneSollProMonat(emp, start, ende);
var soll = stundenSollProMonat;
- if (!soll.HasValue)
- {
+ if (!soll.HasValue)
+ {
decimal maxSollMonat = arbeitstage * (maxWochenstunden / anzWochentage);
- soll = maxSollMonat*bu;
- }
+ soll = maxSollMonat * bu;
+ }
- decimal sollMitarbeiter = soll ?? 0;
-
- var ath = GetAbsenceTimeDays(emp.AbsenceTimes, start, ende);
- decimal? fehlzeit = GetFehlzeiten(records, start, ende);
+ decimal sollMitarbeiter = soll ?? 0;
- if (fehlzeit.HasValue)
- {
- sollMitarbeiter -= fehlzeit.Value;
-
- }
+ var ath = GetAbsenceTimeDays(emp.AbsenceTimes, start, ende);
+ decimal? fehlzeit = GetFehlzeiten(records, start, ende);
+
+ if (fehlzeit.HasValue)
+ {
+ sollMitarbeiter -= fehlzeit.Value;
+
+ }
var arbeitstageProWoche = anzWochentage;
if (ath.TageGesamt.HasValue)
- {
+ {
if (c != null && c.WeeklyDays.HasValue && c.WeeklyDays.Value > 0)
{
arbeitstageProWoche = c.WeeklyDays.Value;
}
-
+
if (stundenSollProMonat.HasValue)
{
@@ -1035,401 +1045,401 @@ namespace BeWo.Report.ReportObjects
}
}
- decimal stundenMonat = minutenMonat/60m;
- if (AddRateFactorToIst() != 1)
- {
- stundenMonat = ((flsIst*AddRateFactorToIst()) + mittelbarIst)/60m;
- }
+ decimal stundenMonat = minutenMonat / 60m;
+ if (AddRateFactorToIst() != 1)
+ {
+ stundenMonat = ((flsIst * AddRateFactorToIst()) + mittelbarIst) / 60m;
+ }
- if (!ueberstunden.HasValue)
- ueberstunden = 0;
- ueberstunden += stundenMonat - sollMitarbeiter;
+ if (!ueberstunden.HasValue)
+ ueberstunden = 0;
+ ueberstunden += stundenMonat - sollMitarbeiter;
if (SollPauseBerechnen())
{
var pause1 = BerechnePauseMinuten(recordsThisMonth);
var pause2 = BerechneAutoPausen(recordsThisMonth);
- ueberstunden -= pause1/60;
- ueberstunden -= pause2/60;
+ ueberstunden -= pause1 / 60;
+ ueberstunden -= pause2 / 60;
}
decimal extraUeberstunden = 0;
- BerechneExtraUeberstunden(emp, start, ende, out extraUeberstunden);
- ueberstunden += extraUeberstunden;
+ BerechneExtraUeberstunden(emp, start, ende, out extraUeberstunden);
+ ueberstunden += extraUeberstunden;
- alteExtraUeberstunden += extraUeberstunden;
+ alteExtraUeberstunden += extraUeberstunden;
- if (ShouldCreateDayDetails())
- {
- MitarbeiterstundenkontoRO.EmployeeDetail ed = new MitarbeiterstundenkontoRO.EmployeeDetail();
- ed.SollProTag = weeklyTotalHours/ anzWochentage;
- ed.ArbeitstageProWoche = arbeitstageProWoche;
+ if (ShouldCreateDayDetails())
+ {
+ MitarbeiterstundenkontoRO.EmployeeDetail ed = new MitarbeiterstundenkontoRO.EmployeeDetail();
+ ed.SollProTag = weeklyTotalHours / anzWochentage;
+ ed.ArbeitstageProWoche = arbeitstageProWoche;
ed.Employee = emp;
- var days = CreateDayDetails(start, ende, ed, records);
- var ah = GetAdditionalHours(days, start, ende, ed, records);
- ueberstunden += ah;
- }
+ var days = CreateDayDetails(start, ende, ed, records);
+ var ah = GetAdditionalHours(days, start, ende, ed, records);
+ ueberstunden += ah;
+ }
- start = ende;
- }
+ start = ende;
+ }
+
+ if (start >= contractEnd)
+ {
+ var ctemp = GetNextValidContractForDate(start, emp);
+ if (ctemp != null && ctemp.Oid != c.Oid)
+ {
+ c = ctemp;
+ }
+ else
+ {
+ c = null;
+ }
+
+ if (c != null && c.EntryDate.HasValue && c.EntryDate >= start)
+ start = c.EntryDate.Value;
+ else
+ {
+ start = start.AddMonths(1);
+ c = GetNextValidContractForDate(start, emp);
+ if (c != null && c.EntryDate.HasValue && c.EntryDate >= start)
+ start = c.EntryDate.Value;
+ }
+ }
+ }
+
+ }
+ }
- if (start >= contractEnd)
- {
- var ctemp = GetNextValidContractForDate(start, emp);
- if (ctemp != null && ctemp.Oid != c.Oid)
- {
- c = ctemp;
- }
- else
- {
- c = null;
- }
-
- if (c != null && c.EntryDate.HasValue && c.EntryDate >= start)
- start = c.EntryDate.Value;
- else
- {
- start = start.AddMonths(1);
- c = GetNextValidContractForDate(start, emp);
- if (c != null && c.EntryDate.HasValue && c.EntryDate >= start)
- start = c.EntryDate.Value;
- }
- }
- }
-
- }
- }
-
public virtual Dictionary> CreateServiceRecordDictByDate(IList records)
- {
- var dict = new Dictionary>();
- foreach (var item in records)
- {
- if (!IsServiceRecordFehlzeit(item))
- {
- if (item.Start.HasValue)
- {
- String key = String.Format("{0:yyyyMM}", item.Start.Value);
+ {
+ var dict = new Dictionary>();
+ foreach (var item in records)
+ {
+ if (!IsServiceRecordFehlzeit(item))
+ {
+ if (item.Start.HasValue)
+ {
+ String key = String.Format("{0:yyyyMM}", item.Start.Value);
- IList list;
- if (!dict.ContainsKey(key))
- {
- list = new List();
- dict.Add(key, list);
- }
- else
- {
- list = dict[key];
- }
- list.Add(item);
- }
- }
- }
- return dict;
- }
+ IList list;
+ if (!dict.ContainsKey(key))
+ {
+ list = new List();
+ dict.Add(key, list);
+ }
+ else
+ {
+ list = dict[key];
+ }
+ list.Add(item);
+ }
+ }
+ }
+ return dict;
+ }
- public virtual decimal GetAdditionalHours(IList days, DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList recordsAll)
- {
- decimal addHours = 0;
+ public virtual decimal GetAdditionalHours(IList days, DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList recordsAll)
+ {
+ decimal addHours = 0;
- foreach (var dayDetail in days)
- {
- if (dayDetail.BreakMinutes.HasValue && dayDetail.MaxHoursUntilBreak.HasValue)
- {
- if (dayDetail.EndDateTime1.HasValue && dayDetail.StartDateTime1.HasValue)
- {
- if (dayDetail.EndDateTime1.Value.Subtract(dayDetail.StartDateTime1.Value).TotalHours >
- dayDetail.MaxHoursUntilBreak.Value)
- {
- addHours -= (dayDetail.BreakMinutes.Value/60m);
- dayDetail.MinutesTotal -= dayDetail.BreakMinutes.Value;
- }
- }
- if (dayDetail.EndDateTime2.HasValue && dayDetail.StartDateTime2.HasValue)
- {
- if (dayDetail.EndDateTime2.Value.Subtract(dayDetail.StartDateTime2.Value).TotalHours >
- dayDetail.MaxHoursUntilBreak.Value)
- {
- addHours -= (dayDetail.BreakMinutes.Value/60m);
- dayDetail.MinutesTotal -= dayDetail.BreakMinutes.Value;
- }
- }
- if (dayDetail.EndDateTime3.HasValue && dayDetail.StartDateTime3.HasValue)
- {
- if (dayDetail.EndDateTime3.Value.Subtract(dayDetail.StartDateTime3.Value).TotalHours >
- dayDetail.MaxHoursUntilBreak.Value)
- {
- addHours -= (dayDetail.BreakMinutes.Value/60m);
- dayDetail.MinutesTotal -= dayDetail.BreakMinutes.Value;
- }
- }
- if (dayDetail.EndDateTime4.HasValue && dayDetail.StartDateTime4.HasValue)
- {
- if (dayDetail.EndDateTime4.Value.Subtract(dayDetail.StartDateTime4.Value).TotalHours >
- dayDetail.MaxHoursUntilBreak.Value)
- {
- addHours -= (dayDetail.BreakMinutes.Value / 60m);
- dayDetail.MinutesTotal -= dayDetail.BreakMinutes.Value;
- }
- }
- }
- }
+ foreach (var dayDetail in days)
+ {
+ if (dayDetail.BreakMinutes.HasValue && dayDetail.MaxHoursUntilBreak.HasValue)
+ {
+ if (dayDetail.EndDateTime1.HasValue && dayDetail.StartDateTime1.HasValue)
+ {
+ if (dayDetail.EndDateTime1.Value.Subtract(dayDetail.StartDateTime1.Value).TotalHours >
+ dayDetail.MaxHoursUntilBreak.Value)
+ {
+ addHours -= (dayDetail.BreakMinutes.Value / 60m);
+ dayDetail.MinutesTotal -= dayDetail.BreakMinutes.Value;
+ }
+ }
+ if (dayDetail.EndDateTime2.HasValue && dayDetail.StartDateTime2.HasValue)
+ {
+ if (dayDetail.EndDateTime2.Value.Subtract(dayDetail.StartDateTime2.Value).TotalHours >
+ dayDetail.MaxHoursUntilBreak.Value)
+ {
+ addHours -= (dayDetail.BreakMinutes.Value / 60m);
+ dayDetail.MinutesTotal -= dayDetail.BreakMinutes.Value;
+ }
+ }
+ if (dayDetail.EndDateTime3.HasValue && dayDetail.StartDateTime3.HasValue)
+ {
+ if (dayDetail.EndDateTime3.Value.Subtract(dayDetail.StartDateTime3.Value).TotalHours >
+ dayDetail.MaxHoursUntilBreak.Value)
+ {
+ addHours -= (dayDetail.BreakMinutes.Value / 60m);
+ dayDetail.MinutesTotal -= dayDetail.BreakMinutes.Value;
+ }
+ }
+ if (dayDetail.EndDateTime4.HasValue && dayDetail.StartDateTime4.HasValue)
+ {
+ if (dayDetail.EndDateTime4.Value.Subtract(dayDetail.StartDateTime4.Value).TotalHours >
+ dayDetail.MaxHoursUntilBreak.Value)
+ {
+ addHours -= (dayDetail.BreakMinutes.Value / 60m);
+ dayDetail.MinutesTotal -= dayDetail.BreakMinutes.Value;
+ }
+ }
+ }
+ }
- return addHours;
- }
+ return addHours;
+ }
- public virtual void BerechneExtraUeberstunden(Employee emp, DateTime start, DateTime ende, out decimal stunden)
- {
- stunden = 0;
-
- if (emp.Overtimes != null)
- {
- foreach (var ot in emp.Overtimes)
- {
- if (ot.Date >= start && ot.Date < ende)
- {
- stunden += ot.Betrag;
- }
- }
- }
- }
+ public virtual void BerechneExtraUeberstunden(Employee emp, DateTime start, DateTime ende, out decimal stunden)
+ {
+ stunden = 0;
- public Contract GetNextValidContractForDate(DateTime dt, Employee emp)
- {
- Contract contractNextToStartDate = emp.GetValidContractForDate(dt);
+ if (emp.Overtimes != null)
+ {
+ foreach (var ot in emp.Overtimes)
+ {
+ if (ot.Date >= start && ot.Date < ende)
+ {
+ stunden += ot.Betrag;
+ }
+ }
+ }
+ }
- if (contractNextToStartDate == null)
- {
+ public Contract GetNextValidContractForDate(DateTime dt, Employee emp)
+ {
+ Contract contractNextToStartDate = emp.GetValidContractForDate(dt);
- foreach (var item in emp.Contracts)
- {
- if (item.EntryDate.HasValue && item.EntryDate.Value >= dt)
- {
- if (contractNextToStartDate == null || item.EntryDate.Value < contractNextToStartDate.EntryDate.Value)
- {
- contractNextToStartDate = item;
- }
- }
+ if (contractNextToStartDate == null)
+ {
+
+ foreach (var item in emp.Contracts)
+ {
+ if (item.EntryDate.HasValue && item.EntryDate.Value >= dt)
+ {
+ if (contractNextToStartDate == null || item.EntryDate.Value < contractNextToStartDate.EntryDate.Value)
+ {
+ contractNextToStartDate = item;
+ }
+ }
- }
- }
- return contractNextToStartDate;
- }
+ }
+ }
+ return contractNextToStartDate;
+ }
- public virtual AbsenceTimeDays GetAbsenceTimeDays(IList absenceTimes, DateTime start, DateTime end)
- {
- var atd = new AbsenceTimeDays();
+ public virtual AbsenceTimeDays GetAbsenceTimeDays(IList absenceTimes, DateTime start, DateTime end)
+ {
+ var atd = new AbsenceTimeDays();
- decimal? tage = null;
- if (absenceTimes != null)
- {
- foreach (var item in absenceTimes)
- {
-
- DateTimeSpan span = new DateTimeSpan();
+ decimal? tage = null;
+ if (absenceTimes != null)
+ {
+ foreach (var item in absenceTimes)
+ {
- span.StartDate = start;
+ DateTimeSpan span = new DateTimeSpan();
- if (item.Start.HasValue && item.Start.Value > span.StartDate)
- {
- span.StartDate = item.Start.Value;
- }
- span.EndDate = end;
- if (item.End.HasValue && item.End.Value.Date.AddDays(1) < span.EndDate)
- {
- span.EndDate = item.End.Value.Date.AddDays(1);
- }
- if (span.EndDate >= start && span.StartDate < end)
- {
- DateTime day = span.StartDate;
- while (day < end && day < span.EndDate)
- {
- var faktor = GetFeiertagsFaktor(day);
+ span.StartDate = start;
- if (faktor < 1 && day.DayOfWeek != DayOfWeek.Saturday && day.DayOfWeek != DayOfWeek.Sunday)
- {
- if (!tage.HasValue)
- tage = 0;
+ if (item.Start.HasValue && item.Start.Value > span.StartDate)
+ {
+ span.StartDate = item.Start.Value;
+ }
+ span.EndDate = end;
+ if (item.End.HasValue && item.End.Value.Date.AddDays(1) < span.EndDate)
+ {
+ span.EndDate = item.End.Value.Date.AddDays(1);
+ }
+ if (span.EndDate >= start && span.StartDate < end)
+ {
+ DateTime day = span.StartDate;
+ while (day < end && day < span.EndDate)
+ {
+ var faktor = GetFeiertagsFaktor(day);
- var tag = 1m;
- var std = 24m;
- if (faktor != 0)
- {
- tag *= faktor;
- std *= faktor;
- }
-
-
-
- tage += std;
+ if (faktor < 1 && day.DayOfWeek != DayOfWeek.Saturday && day.DayOfWeek != DayOfWeek.Sunday)
+ {
+ if (!tage.HasValue)
+ tage = 0;
- if (IsKrankheitAbsenceTime(item))
- {
- if (!atd.TageKrankheit.HasValue)
- atd.TageKrankheit = 0;
+ var tag = 1m;
+ var std = 24m;
+ if (faktor != 0)
+ {
+ tag *= faktor;
+ std *= faktor;
+ }
- atd.TageKrankheit += tag;
- }
- if (IsUrlaubAbsenceTime(item))
- {
- if (!atd.TageUrlaub.HasValue)
- atd.TageUrlaub = 0;
- atd.TageUrlaub += tag;
- }
- }
- day = day.AddDays(1);
- }
-
- }
- //}
- }
- }
- if (tage.HasValue)
- tage /= 24;
- atd.TageGesamt = tage;
- return atd;
- }
- public virtual decimal? GetFehlzeiten(IList records, DateTime monat)
- {
+ tage += std;
- return GetFehlzeiten(records, monat, monat.AddMonths(1));
- }
+ if (IsKrankheitAbsenceTime(item))
+ {
+ if (!atd.TageKrankheit.HasValue)
+ atd.TageKrankheit = 0;
- public virtual decimal? GetFehlzeiten(IList records, DateTime start, DateTime ende)
- {
- decimal? stunden = null;
- decimal minuten = 0;
- if (records != null)
- {
- foreach (var item in records)
- {
- if (IsServiceRecordFehlzeit(item))
- {
- if (item.Start.Value >= start && item.Start.Value < ende)
- {
- if (item.GroupRoundedDuration.HasValue)
- {
- minuten += item.GroupRoundedDuration.Value;
- }
- else
- {
- if (appSettings.ShowRoundedDurationInEmployeeAnalysis)
- {
- minuten += item.RoundedDuration;
- }
- else
- {
- minuten += (decimal)item.End.Value.Subtract(item.Start.Value).TotalMinutes;
- }
- }
- }
- }
- }
- }
- if (minuten != 0)
- stunden = minuten / 60;
- return stunden;
- }
+ atd.TageKrankheit += tag;
+ }
+ if (IsUrlaubAbsenceTime(item))
+ {
+ if (!atd.TageUrlaub.HasValue)
+ atd.TageUrlaub = 0;
-
- public virtual decimal GetArbeitstageImMonat(DateTime datum, Employee emp)
- {
- Contract c = GetNextValidContractForDate(datum, emp);
- if (c == null)
- return 0;
-
- DateTime start = new DateTime(datum.Year, datum.Month, 1);
+ atd.TageUrlaub += tag;
+ }
+ }
+ day = day.AddDays(1);
+ }
- DateTime end = start.AddMonths(1);
+ }
+ //}
+ }
+ }
+ if (tage.HasValue)
+ tage /= 24;
+ atd.TageGesamt = tage;
+ return atd;
+ }
- if (c.EntryDate.HasValue)
- {
- if (c.EntryDate >= end)
- return 0;
+ public virtual decimal? GetFehlzeiten(IList records, DateTime monat)
+ {
- if (c.EntryDate > start)
- start = c.EntryDate.Value;
- }
- if (c.ContractEndDate.HasValue && c.ContractEndDate.Value.AddDays(1) < end)
- end = c.ContractEndDate.Value.AddDays(1);
+ return GetFehlzeiten(records, monat, monat.AddMonths(1));
+ }
- return GetArbeitstageImBereich(start, end, emp);
+ public virtual decimal? GetFehlzeiten(IList records, DateTime start, DateTime ende)
+ {
+ decimal? stunden = null;
+ decimal minuten = 0;
+ if (records != null)
+ {
+ foreach (var item in records)
+ {
+ if (IsServiceRecordFehlzeit(item))
+ {
+ if (item.Start.Value >= start && item.Start.Value < ende)
+ {
+ if (item.GroupRoundedDuration.HasValue)
+ {
+ minuten += item.GroupRoundedDuration.Value;
+ }
+ else
+ {
+ if (appSettings.ShowRoundedDurationInEmployeeAnalysis)
+ {
+ minuten += item.RoundedDuration;
+ }
+ else
+ {
+ minuten += (decimal)item.End.Value.Subtract(item.Start.Value).TotalMinutes;
+ }
+ }
+ }
+ }
+ }
+ }
+ if (minuten != 0)
+ stunden = minuten / 60;
+ return stunden;
+ }
- }
- public virtual decimal GetArbeitstageImBereich(DateTime von, DateTime bis, Employee emp)
- {
- DateTime dt = DateTime.Now;
+ public virtual decimal GetArbeitstageImMonat(DateTime datum, Employee emp)
+ {
+ Contract c = GetNextValidContractForDate(datum, emp);
+ if (c == null)
+ return 0;
- DateTime start = von;
- DateTime end = bis;
+ DateTime start = new DateTime(datum.Year, datum.Month, 1);
- TimeSpan ts = end.Subtract(start);
+ DateTime end = start.AddMonths(1);
- var maxDays = (decimal)ts.TotalDays;
+ if (c.EntryDate.HasValue)
+ {
+ if (c.EntryDate >= end)
+ return 0;
- while (start < end)
- {
- if (start.DayOfWeek == DayOfWeek.Saturday || start.DayOfWeek == DayOfWeek.Sunday)
- {
- maxDays -= 1;
- }
- else
- {
- maxDays -= GetFeiertagsFaktor(start);
- //if (IstFeiertag(start))
- // maxDays--;
- }
- start = start.AddDays(1);
- }
- return maxDays;
+ if (c.EntryDate > start)
+ start = c.EntryDate.Value;
+ }
+ if (c.ContractEndDate.HasValue && c.ContractEndDate.Value.AddDays(1) < end)
+ end = c.ContractEndDate.Value.AddDays(1);
- }
+ return GetArbeitstageImBereich(start, end, emp);
- //gibt 1 zurück wenn ganzer Feiertag und z.B. 0.5 bei halben etc.
- public virtual decimal GetFeiertagsFaktor(DateTime start)
- {
- if (IstFeiertag(start))
- {
- return 1;
- }
- return 0;
- }
+ }
- public virtual bool IstFeiertag(DateTime start)
- {
- List feiertage = GetFeiertage(start.Year);
+ public virtual decimal GetArbeitstageImBereich(DateTime von, DateTime bis, Employee emp)
+ {
+ DateTime dt = DateTime.Now;
- foreach (var ft in feiertage)
- {
- if (start.Date == ft)
- return true;
- }
- return false;
- }
+ DateTime start = von;
+ DateTime end = bis;
- public virtual List GetFeiertage(int year)
- {
- List list = new List();
- list.Add(new DateTime(year, 1, 1)); // "Neujahr"));
- //list.Add(new DateTime(year, 1, 6)); // , "Heilige Drei Könige"));
- list.Add(new DateTime(year, 5, 1)); // , "Tag der Arbeit"));
- //list.Add(new DateTime(year, 8, 15)); // , "Mariä Himmelfahrt"));
- list.Add(new DateTime(year, 10, 3)); // , "Tag der dt. Einheit"));
- //list.Add(new DateTime(year, 10, 31)); // , "Reformationstag"));
- list.Add(new DateTime(year, 11, 1)); // , "Allerheiligen "));
- list.Add(new DateTime(year, 12, 24)); // , "Heilig Abend"));
- list.Add(new DateTime(year, 12, 25)); // , "1. Weihnachtstag"));
- list.Add(new DateTime(year, 12, 26)); // , "2. Weihnachtstag"));
+ TimeSpan ts = end.Subtract(start);
+
+ var maxDays = (decimal)ts.TotalDays;
+
+ while (start < end)
+ {
+ if (start.DayOfWeek == DayOfWeek.Saturday || start.DayOfWeek == DayOfWeek.Sunday)
+ {
+ maxDays -= 1;
+ }
+ else
+ {
+ maxDays -= GetFeiertagsFaktor(start);
+ //if (IstFeiertag(start))
+ // maxDays--;
+ }
+ start = start.AddDays(1);
+ }
+ return maxDays;
+
+ }
+
+ //gibt 1 zurück wenn ganzer Feiertag und z.B. 0.5 bei halben etc.
+ public virtual decimal GetFeiertagsFaktor(DateTime start)
+ {
+ if (IstFeiertag(start))
+ {
+ return 1;
+ }
+ return 0;
+ }
+
+ public virtual bool IstFeiertag(DateTime start)
+ {
+ List feiertage = GetFeiertage(start.Year);
+
+ foreach (var ft in feiertage)
+ {
+ if (start.Date == ft)
+ return true;
+ }
+ return false;
+ }
+
+ public virtual List GetFeiertage(int year)
+ {
+ List list = new List();
+ list.Add(new DateTime(year, 1, 1)); // "Neujahr"));
+ //list.Add(new DateTime(year, 1, 6)); // , "Heilige Drei Könige"));
+ list.Add(new DateTime(year, 5, 1)); // , "Tag der Arbeit"));
+ //list.Add(new DateTime(year, 8, 15)); // , "Mariä Himmelfahrt"));
+ list.Add(new DateTime(year, 10, 3)); // , "Tag der dt. Einheit"));
+ //list.Add(new DateTime(year, 10, 31)); // , "Reformationstag"));
+ list.Add(new DateTime(year, 11, 1)); // , "Allerheiligen "));
+ list.Add(new DateTime(year, 12, 24)); // , "Heilig Abend"));
+ list.Add(new DateTime(year, 12, 25)); // , "1. Weihnachtstag"));
+ list.Add(new DateTime(year, 12, 26)); // , "2. Weihnachtstag"));
if (year == 2017)
{
@@ -1437,67 +1447,76 @@ namespace BeWo.Report.ReportObjects
}
DateTime osterSonntag = GetOsterSonntag(year);
- //list.Add(osterSonntag); // , "Ostersonntag"));
- //list.Add(osterSonntag.AddDays(-3)); // , "Gründonnerstag")); q
- //list.Add(osterSonntag.AddDays(-48)); // , "Rosenmontag"));
- list.Add(osterSonntag.AddDays(-2)); // , "Karfreitag"));
- list.Add(osterSonntag.AddDays(1)); // , "Ostermontag"));
- list.Add(osterSonntag.AddDays(39)); // , "Christi Himmelfahrt"));
- //list.Add(osterSonntag.AddDays(49)); // , "Pfingstsonntag"));
- list.Add(osterSonntag.AddDays(50)); // , "Pfingstmontag"));
- list.Add(osterSonntag.AddDays(60)); // , "Fronleichnam"));
+ //list.Add(osterSonntag); // , "Ostersonntag"));
+ //list.Add(osterSonntag.AddDays(-3)); // , "Gründonnerstag")); q
+ //list.Add(osterSonntag.AddDays(-48)); // , "Rosenmontag"));
+ list.Add(osterSonntag.AddDays(-2)); // , "Karfreitag"));
+ list.Add(osterSonntag.AddDays(1)); // , "Ostermontag"));
+ list.Add(osterSonntag.AddDays(39)); // , "Christi Himmelfahrt"));
+ //list.Add(osterSonntag.AddDays(49)); // , "Pfingstsonntag"));
+ list.Add(osterSonntag.AddDays(50)); // , "Pfingstmontag"));
+ list.Add(osterSonntag.AddDays(60)); // , "Fronleichnam"));
- //01.01. Neujahr
- //01.05. Tag der Arbeit
- //03.10. Tag der Deutschen Einheit
- //01.11. Allerheiligen
- //25.12. 1. Weihnachtstag
- //26.12. 2. Weihnachtstag
+ //01.01. Neujahr
+ //01.05. Tag der Arbeit
+ //03.10. Tag der Deutschen Einheit
+ //01.11. Allerheiligen
+ //25.12. 1. Weihnachtstag
+ //26.12. 2. Weihnachtstag
- //Karfreitag
- //Ostermontag
- //Christi Himmelfahrt (39 Tage nach Ostersonntag)
- //Pfingstmontag (50 Tage nach Ostersonntag)
- //Fronleichnam (60 Tage nach Ostersonntag)
+ //Karfreitag
+ //Ostermontag
+ //Christi Himmelfahrt (39 Tage nach Ostersonntag)
+ //Pfingstmontag (50 Tage nach Ostersonntag)
+ //Fronleichnam (60 Tage nach Ostersonntag)
- //24.12. Heilig Abend
+ //24.12. Heilig Abend
- return list;
- }
+ return list;
+ }
- protected DateTime GetOsterSonntag(int year)
- {
+ protected DateTime GetOsterSonntag(int year)
+ {
- int g, h, c, j, l, i;
+ int g, h, c, j, l, i;
- g = year % 19;
- c = year / 100;
- h = ((c - (c / 4)) - (((8 * c) + 13) / 25) + (19 * g) + 15) % 30;
- i = h - (h / 28) * (1 - (29 / (h + 1)) * ((21 - g) / 11));
- j = (year + (year / 4) + i + 2 - c + (c / 4)) % 7;
+ g = year % 19;
+ c = year / 100;
+ h = ((c - (c / 4)) - (((8 * c) + 13) / 25) + (19 * g) + 15) % 30;
+ i = h - (h / 28) * (1 - (29 / (h + 1)) * ((21 - g) / 11));
+ j = (year + (year / 4) + i + 2 - c + (c / 4)) % 7;
- l = i - j;
- int month = (int)(3 + ((l + 40) / 44));
- int day = (int)(l + 28 - 31 * (month / 4));
+ l = i - j;
+ int month = (int)(3 + ((l + 40) / 44));
+ int day = (int)(l + 28 - 31 * (month / 4));
- return new DateTime(year, month, day);
+ return new DateTime(year, month, day);
- }
+ }
- public virtual bool IsServiceRecordFehlzeit(ServiceRecord sr)
- {
- if (sr.ServiceDescription != null && sr.ServiceDescription.ServiceCategory != null && !String.IsNullOrEmpty(sr.ServiceDescription.ServiceCategory.Name) && sr.ServiceDescription.ServiceCategory.Name.ToLower().IndexOf("fehlzeit") >= 0)
- return true;
- return false;
- }
- }
+ public virtual bool IsServiceRecordFehlzeit(ServiceRecord sr)
+ {
+ if (sr.ServiceDescription != null && sr.ServiceDescription.ServiceCategory != null && !String.IsNullOrEmpty(sr.ServiceDescription.ServiceCategory.Name) && sr.ServiceDescription.ServiceCategory.Name.ToLower().IndexOf("fehlzeit") >= 0)
+ return true;
+ return false;
+ }
+ }
- public class AbsenceTimeDays
- {
- public decimal? TageUrlaub;
- public decimal? TageKrankheit;
- public decimal? TageGesamt;
- }
+ public class AbsenceTimeDays
+ {
+ public decimal? TageUrlaub;
+ public decimal? TageKrankheit;
+ public decimal? TageGesamt;
+ }
+
+ public class ServiceRecordSummary
+ {
+ public decimal IstAbrechenbar { get; set; }
+
+ public decimal IstNichtAbrechenbar { get; set; }
+
+ public IList RecordsImBerichtszeitraum { get; set; }
+ }
}
diff --git a/Service/Plugins/ServiceRecordValidator.cs b/Service/Plugins/ServiceRecordValidator.cs
index f25887ce7..ff24907a2 100644
--- a/Service/Plugins/ServiceRecordValidator.cs
+++ b/Service/Plugins/ServiceRecordValidator.cs
@@ -503,7 +503,9 @@ namespace BeWo.Service.Plugins
{
result.Add(new ServiceRecordValidationResultDC { ResultType = ServiceRecordValidationResult.Error });
}
- }
+
+
+ }
return result;
}
@@ -601,5 +603,22 @@ namespace BeWo.Service.Plugins
return false;
}
- }
+ public List ValidateServiceRecordDeletion(ServiceRecordDC serviceRecord, long employeeOid)
+ {
+ var result = new List();
+
+ // 1. Prüfe Unterschrift vorhanden
+
+ if (serviceRecord.SignatureOid.HasValue)
+ {
+ result.Add(new ServiceRecordValidationResultDC
+ {
+ ResultType = ServiceRecordValidationResult.Custom,
+ Message = "Dieser Eintrag wurde bereits unterschrieben."
+ });
+ }
+
+ return result;
+ }
+ }
}
\ No newline at end of file
diff --git a/Service/ServiceContracts/IOperationsService.cs b/Service/ServiceContracts/IOperationsService.cs
index cdd298e27..c8d016791 100644
--- a/Service/ServiceContracts/IOperationsService.cs
+++ b/Service/ServiceContracts/IOperationsService.cs
@@ -385,8 +385,12 @@ namespace BeWo.Service.ServiceContracts
List ValidateServiceRecord(ServiceRecordDC newServiceRecord,
SupportConceptStatisticsDC statistics, int maxDaysEditServiceRecordsAllowed,
IList employeeOids, IList cb2scOids);
-
- [FaultContract(typeof (BeWoFault))]
+
+ [FaultContract(typeof(BeWoFault))]
+ [OperationContract]
+ List ValidateServiceRecordDeletion(ServiceRecordDC serviceRecord, long employeeOid);
+
+ [FaultContract(typeof (BeWoFault))]
[OperationContract]
List InsertNewAdditionalServices(IEnumerable pAdditionalServiceDcs);
diff --git a/Service/ServiceImplementations/OperationsServiceImp.cs b/Service/ServiceImplementations/OperationsServiceImp.cs
index 4516f30fd..d9dd1754b 100644
--- a/Service/ServiceImplementations/OperationsServiceImp.cs
+++ b/Service/ServiceImplementations/OperationsServiceImp.cs
@@ -2237,6 +2237,14 @@ namespace BeWo.Service.ServiceImplementations
}
+ public List ValidateServiceRecordDeletion(ServiceRecordDC serviceRecord, long employeeOid)
+ {
+ var validator = PluginLoader.FindClass();
+ return validator.ValidateServiceRecordDeletion(serviceRecord, employeeOid);
+
+ }
+
+
public List CheckExistingSettlementInvoices(ServiceRecordDC pServiceRecord)
{
var result = new List();
diff --git a/Shared/Core/EnumTranslations.cs b/Shared/Core/EnumTranslations.cs
index 4ae990aa0..9b3566868 100644
--- a/Shared/Core/EnumTranslations.cs
+++ b/Shared/Core/EnumTranslations.cs
@@ -737,7 +737,7 @@ namespace BS.Shared.Core
ValueListEntryType.TitleType, "Titel"
},
{
- ValueListEntryType.FunctionType, "Funktionen"
+ ValueListEntryType.FunctionType, "Funktionen (Personen)"
},
{
ValueListEntryType.SupportConceptGoalCategoryType, "Grundsatzziele"
@@ -755,13 +755,13 @@ namespace BS.Shared.Core
ValueListEntryType.DocumentType, "Dokumentationstypen"
},
{
- ValueListEntryType.OrganisationFunctionType,"Funktionen Organisation"
+ ValueListEntryType.OrganisationFunctionType,"Funktionen (Organisationen)"
},
{
ValueListEntryType.RoleInOrganisationType,"Rolle in der Organisation"
},
{
- ValueListEntryType.RoleInFamily,"Rollen des Umfeldes (Familie)"
+ ValueListEntryType.RoleInFamily,"Rollen des Umfeldes (Angehörige)"
},
{
ValueListEntryType.Nationality,"Nationalität"
@@ -812,7 +812,7 @@ namespace BS.Shared.Core
ValueListEntryType.TitleType, "Titel"
},
{
- ValueListEntryType.FunctionType, "Funktionen"
+ ValueListEntryType.FunctionType, "Funktionen (Personen)"
},
{
ValueListEntryType.SupportConceptGoalCategoryType, "Grundsatzziele"
@@ -833,13 +833,13 @@ namespace BS.Shared.Core
ValueListEntryType.DocumentType, "Dokumentationstypen"
},
{
- ValueListEntryType.OrganisationFunctionType,"Funktionen Organisation"
+ ValueListEntryType.OrganisationFunctionType,"Funktionen (Organisationen)"
},
{
ValueListEntryType.RoleInOrganisationType, "Rolle in der Organisation"
},
{
- ValueListEntryType.RoleInFamily, "Rollen des Umfeldes (Familie)"
+ ValueListEntryType.RoleInFamily, "Rollen des Umfeldes (Angehörige)"
},
{
ValueListEntryType.Nationality,"Nationalität"
diff --git a/Shared/DataContracts/ServiceRecordValidationResultDC.cs b/Shared/DataContracts/ServiceRecordValidationResultDC.cs
index cdd3acc4c..c7a254e0a 100644
--- a/Shared/DataContracts/ServiceRecordValidationResultDC.cs
+++ b/Shared/DataContracts/ServiceRecordValidationResultDC.cs
@@ -34,5 +34,8 @@ namespace BS.Shared.DataContracts
[DataMember]
public string CustomerName { get; set; }
- }
+
+ [DataMember]
+ public bool Allow { get; set; }
+ }
}