Bugfix Berechnung vom Soll bei Sonderfällen in Soll/Ist Auswertung

This commit is contained in:
2026-06-18 10:56:45 +02:00
parent 576b29ea08
commit db9dc64830
3 changed files with 87 additions and 18 deletions

View File

@@ -38,7 +38,7 @@ namespace BeWo.Report.DefaultReports
{
foreach (var woche in grp.WochenSummen)
{
String key = GetWochenKey(woche);
String key = woche.WochenString;
if (!summeIstNachWochenString.ContainsKey(key))
{
@@ -55,10 +55,7 @@ namespace BeWo.Report.DefaultReports
this.bindingSource1.DataSource = pRO;
}
private String GetWochenKey(FLSSollIstReportRO.FLSSollIstWochenSummen woche)
{
return String.Format("{3}: KW {0}, {1:dd.MM.yy} - {2:dd.MM.yy}", woche.KalenderWoche, woche.WocheStart, woche.WocheEnde, woche.ObjectOid);
}
private void CreateTableCells(List<FLSSollIstReportRO.FLSSollIstWochenSummen> wochen)
{
xrTableHeader.BeginInit();
@@ -201,7 +198,7 @@ namespace BeWo.Report.DefaultReports
{
if (tag.Contains("Gesamt"))
{
var key = GetWochenKey(ws);
var key = ws.WochenString;
if (tag.Contains("Ist"))
{

View File

@@ -114,6 +114,14 @@ namespace BeWo.Report.ReportObjects
}
public List<ServiceRecordFLSOverviewDC> ServiceRecords { get; internal set; } = new List<ServiceRecordFLSOverviewDC>();
public String WochenString
{
get
{
return String.Format("{3}: KW {0}, {1:dd.MM.yy} - {2:dd.MM.yy}", KalenderWoche, WocheStart, WocheEnde, ObjectOid);
}
}
}
public static FLSSollIstReportRO Create(List<FLSAnalysisRootDC> dcList, FLSAnalysisConfigDC config)
@@ -197,15 +205,50 @@ namespace BeWo.Report.ReportObjects
{
if (!ws.SollStunden.HasValue)
{
ws.SollStunden = root.SollFLSPerWeek;
//ws.SollStunden = root.SollFLSPerWeek;
}
}
grpRo.IstGesamt = grpRo.IstGesamt / 60;
rootRo.IstGesamt += grpRo.IstGesamt;
rootRo.SollGesamt = grpRo.WochenSummen.Sum(w => w.SollStunden) ?? 0;
rootRo.Groups.Add(grpRo);
}
var woche2Soll = new Dictionary<string, decimal>();
foreach (var grp in rootRo.Groups)
{
foreach (var ws in grp.WochenSummen)
{
if (ws.SollStunden.HasValue)
{
if (!woche2Soll.ContainsKey(ws.WochenString))
{
woche2Soll.Add(ws.WochenString, 0);
}
woche2Soll[ws.WochenString] = ws.SollStunden.Value;
}
}
foreach (var ws in grp.WochenSummen)
{
if (!ws.SollStunden.HasValue)
{
if (woche2Soll.ContainsKey(ws.WochenString))
{
ws.SollStunden = woche2Soll[ws.WochenString];
}
else
{
ws.SollStunden = root.SollFLSPerWeek;
}
}
}
rootRo.SollGesamt = grp.WochenSummen.Sum(w => w.SollStunden) ?? 0;
}
rootRo.DifferenzSollIstGesamt = rootRo.IstGesamt - rootRo.SollGesamt;
if (rootRo.Groups.Count > 0)

View File

@@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using BeWo.Data;
using BeWo.Data;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.Configuration;
@@ -13,6 +9,11 @@ using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;
using BS.Shared.Services;
using DevExpress.XtraPrinting;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Utils = BS.Shared.Core.Utils;
namespace BeWo.Service.Plugins
@@ -215,7 +216,7 @@ namespace BeWo.Service.Plugins
if (config.FetchApprovedFLS)
{
CalculateApprovedFLSForCustomer(rootDC, groupDC, scDC, config.StartDate ?? DateTime.MinValue, config.EndDate ?? DateTime.MaxValue);
CalculateApprovedFLSForCustomer(rootDC, groupDC, scDC, config.StartDate ?? DateTime.MinValue, config.EndDate ?? DateTime.MaxValue, sr.Start.Value, config);
}
groupDC.SupportConcepts.Add(scDC);
@@ -224,7 +225,22 @@ namespace BeWo.Service.Plugins
if (config.FetchApprovedFLS)
{
var calc = PluginLoader.FindClass<Calculations>(scDC.CostbearerID) ?? Calculations.GetInstance(scDC.CostbearerID);
srDC.SollFLSPerWeek = calc.GetApprovedHoursPerWeek(scDC.SupportConcept2CostBearer, sr.Start.Value) ?? 0;
if (config.ServiceDescriptionOids != null && config.ServiceDescriptionOids.Count > 0 && scDC.SupportConcept2CostBearer.ApprovalPeriodList != null && scDC.SupportConcept2CostBearer.ApprovalPeriodList.Count > 1)
{
var desc = DAOFactory.GenericDAO.LoadByID<ServiceDescription>(config.ServiceDescriptionOids[0]);
var scap = scDC.SupportConcept2CostBearer.ApprovalPeriodList.FirstOrDefault(a => a.ServiceCategory != null && a.ServiceCategory.ServiceCategoryOid == desc.ServiceCategory.Oid && sr.Start.Value.InBetween(a.Span, true));
if (scap != null)
{
srDC.SollFLSPerWeek = calc.GetApprovedHoursPerWeek(scap, scDC.SupportConcept2CostBearer.CostBearer.CostRatePeriods) ?? 0;
}
}
else
{
srDC.SollFLSPerWeek = calc.GetApprovedHoursPerWeek(scDC.SupportConcept2CostBearer, sr.Start.Value) ?? 0;
}
}
scDC.ServiceRecords.Add(srDC);
@@ -235,11 +251,24 @@ namespace BeWo.Service.Plugins
return rootDC;
}
private void CalculateApprovedFLSForCustomer(FLSAnalysisRootDC rootDC, FLSAnalysisGroupDC groupDC, SupportConceptFLSOverviewDC scDC, DateTime startdate, DateTime enddate)
private void CalculateApprovedFLSForCustomer(FLSAnalysisRootDC rootDC, FLSAnalysisGroupDC groupDC, SupportConceptFLSOverviewDC scDC, DateTime startdatePeriod, DateTime enddatePeriod, DateTime datum, FLSAnalysisConfigDC config)
{
var calc = PluginLoader.FindClass<Calculations>(scDC.CostbearerID) ?? Calculations.GetInstance(scDC.CostbearerID);
rootDC.SollFLSPerWeek = calc.GetApprovedHoursPerWeek(scDC.SupportConcept2CostBearer, startdate) ?? 0m;
rootDC.SollFLSTotal = calc.GetApprovedHoursForPeriod(scDC.SupportConcept2CostBearer, startdate, enddate);
if (config.ServiceDescriptionOids != null && config.ServiceDescriptionOids.Count > 0 && scDC.SupportConcept2CostBearer.ApprovalPeriodList != null && scDC.SupportConcept2CostBearer.ApprovalPeriodList.Count > 1)
{
var desc = DAOFactory.GenericDAO.LoadByID<ServiceDescription>(config.ServiceDescriptionOids[0]);
var scap = scDC.SupportConcept2CostBearer.ApprovalPeriodList.FirstOrDefault(a => a.ServiceCategory != null && a.ServiceCategory.ServiceCategoryOid == desc.ServiceCategory.Oid && datum.InBetween(a.Span, true));
if (scap != null)
{
rootDC.SollFLSPerWeek = calc.GetApprovedHoursPerWeek(scap, scDC.SupportConcept2CostBearer.CostBearer.CostRatePeriods) ?? 0;
rootDC.SollFLSTotal = calc.GetApprovedHoursForPeriod(scDC.SupportConcept2CostBearer, scap, scDC.SupportConcept2CostBearer.CostBearer.CostRatePeriods, startdatePeriod, enddatePeriod, true) ?? 0;
return;
}
}
rootDC.SollFLSPerWeek = calc.GetApprovedHoursPerWeek(scDC.SupportConcept2CostBearer, datum) ?? 0m;
rootDC.SollFLSTotal = calc.GetApprovedHoursForPeriod(scDC.SupportConcept2CostBearer, startdatePeriod, enddatePeriod);
}
public virtual bool AllowCustomerAnalysis(Customer customer, FLSAnalysisConfigDC config, IList<IServiceRecord> serviceRecords)