MH: Monvita Stundenkonto WorkTime erst ab 01.03.26

This commit is contained in:
2026-02-02 11:38:27 +01:00
parent 543ee0d393
commit fd1bb1ee43
3 changed files with 155 additions and 0 deletions

View File

@@ -0,0 +1,126 @@
using BeWo.Data.Entities;
using BeWo.Report.ReportObjects;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Monvita
{
public class CustomMitarbeiterstundenkontoBerechnung : MitarbeiterstundenkontoBerechnung
{
protected override ServiceRecordSummary BerechneStunden(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList<ServiceRecord> groupFilteredRecords, DateTime berichtsAnfang, DateTime berichtsEnde)
{
#region Standard
decimal flsGesamt = 0;
decimal arbeitszeit = 0;
var sum = new ServiceRecordSummary();
sum.RecordsImBerichtszeitraum = new List<ServiceRecord>();
empDetail.ServiceRecordsInSelectedTimeSpan = new List<ServiceRecord>();
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);
#endregion
// Die Workttime-Settings sollen erst ab dem 01.03.2026 greifen
if (berichtsAnfang >= new DateTime(2026, 03, 01) && Settings.ShowWorktime && Settings.EnableArbeitszeiterfassung)
{
empDetail.ServiceRecordsInSelectedTimeSpan.Add(item);
decimal duration = GetDuration(item, empDetail);
if (IstArbeitszeit(item))
{
arbeitszeit += duration;
}
else if (item.ServiceDescription != null && item.ServiceDescription.ServiceCategory != null && item.ServiceDescription.ServiceCategory.IsBillable)
{
flsGesamt += duration;
}
}
else if (AddServiceRecordToDuration(item))
{
empDetail.ServiceRecordsInSelectedTimeSpan.Add(item);
decimal duration = GetDuration(item, empDetail);
if (item.ServiceDescription != null &&
item.ServiceDescription.ServiceCategory != null &&
item.ServiceDescription.ServiceCategory.IsBillable)
sum.IstAbrechenbar += duration;
else
sum.IstNichtAbrechenbar += duration;
//Prüfe ProzentStundenkonto, wenn der Wert != 100 ist, dann packe die prozentuale Differenz von abbrechenbar auf nicht abbrechenbar
decimal prozent = 100;
if (item.ServiceDescription.ProzentStundenkonto.HasValue)
{
prozent = item.ServiceDescription.ProzentStundenkonto.Value;
}
else if (item.ServiceDescription.ServiceCategory.ProzentStundenkonto.HasValue)
{
prozent = item.ServiceDescription.ServiceCategory.ProzentStundenkonto.Value;
}
if (prozent == 0)
{
int test = 0;
}
if (prozent != 100 && prozent > 0)
{
var ohneProzent = duration / prozent * 100;
var diff = duration - ohneProzent;
sum.IstAbrechenbar -= diff;
sum.IstNichtAbrechenbar += diff;
}
}
sum.RecordsImBerichtszeitraum.Add(item);
}
}
}
if (berichtsAnfang >= new DateTime(2026, 03, 01) && Settings.ShowWorktime && Settings.EnableArbeitszeiterfassung)
{
sum.IstAbrechenbar = flsGesamt;
sum.IstNichtAbrechenbar = arbeitszeit - flsGesamt;
}
return sum;
}
public override void ConfigurePauseSettings(MitarbeiterstundenkontoRO.DayDetail dd)
{
if (dd.Date >= new DateTime(2026, 03, 01) && Settings.ShowWorktime && Settings.EnableArbeitszeiterfassung)
{
if (Settings.EnableAutomaticPauses)
{
dd.MaxHoursUntilBreak = 6;
dd.BreakMinutes = 30;
dd.MaxHoursUntilBreak2 = 9;
dd.BreakMinutes2 = 15;
}
}
}
public override bool AddServiceRecordToDuration(ServiceRecord item)
{
if (item.Start.HasValue && item.Start.Value >= new DateTime(2026, 03, 01) && Settings.ShowWorktime && Settings.EnableArbeitszeiterfassung)
{
return IstArbeitszeit(item);
}
return true;
}
}
}

View File

@@ -0,0 +1,17 @@
using BeWo.Report.ReportObjects;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Monvita
{
public class CustomMitarbeiterstundenkontoBerechnungMonate : MitarbeiterstundenkontoBerechnungMonate
{
public override MitarbeiterstundenkontoBerechnung CreateMitarbeiterstundenkontoBerechnung()
{
return new CustomMitarbeiterstundenkontoBerechnung();
}
}
}

View File

@@ -33,12 +33,14 @@
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.DataAccess.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.Drawing.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Data.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Pdf.v23.2.Core, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Printing.v23.2.Core, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Data.Desktop.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Utils.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Xpo.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<Reference Include="DevExpress.XtraPrinting.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Charts.v23.2.Core, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraCharts.v23.2.Wizard, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
@@ -70,6 +72,8 @@
<Compile Include="CustomerDataReport.Designer.cs">
<DependentUpon>CustomerDataReport.cs</DependentUpon>
</Compile>
<Compile Include="CustomMitarbeiterstundenkontoBerechnung.cs" />
<Compile Include="CustomMitarbeiterstundenkontoBerechnungMonate.cs" />
<Compile Include="CustomReportCreator.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ServicesOverviewReportAlt.cs">
@@ -101,10 +105,18 @@
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Data\Data.csproj">
<Project>{b0d73e3d-4ae7-4024-93a6-db1f46d7ccee}</Project>
<Name>Data</Name>
</ProjectReference>
<ProjectReference Include="..\..\Report\Report.csproj">
<Project>{40D8B312-EA64-49E3-A31A-5E57ED4D5654}</Project>
<Name>Report</Name>
</ProjectReference>
<ProjectReference Include="..\..\Service\Service.csproj">
<Project>{094331c3-ecee-4c89-bbfd-4c9ded89f0ef}</Project>
<Name>Service</Name>
</ProjectReference>
<ProjectReference Include="..\..\Shared\Shared.csproj">
<Project>{2F50B83D-A3F0-4EC4-979A-3F9B7E3D8ED4}</Project>
<Name>Shared</Name>