diff --git a/Report/DefaultReports/FLSSollIstWeeklyReport.cs b/Report/DefaultReports/FLSSollIstWeeklyReport.cs index b8c85aad7..2030a3459 100644 --- a/Report/DefaultReports/FLSSollIstWeeklyReport.cs +++ b/Report/DefaultReports/FLSSollIstWeeklyReport.cs @@ -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 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")) { diff --git a/Report/ReportObjects/FLSSollIstReportRO.cs b/Report/ReportObjects/FLSSollIstReportRO.cs index f875fbc88..34aea2d97 100644 --- a/Report/ReportObjects/FLSSollIstReportRO.cs +++ b/Report/ReportObjects/FLSSollIstReportRO.cs @@ -114,6 +114,14 @@ namespace BeWo.Report.ReportObjects } public List ServiceRecords { get; internal set; } = new List(); + + 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 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(); + + 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) diff --git a/Service/Plugins/StundenuebersichtAuswertung.cs b/Service/Plugins/StundenuebersichtAuswertung.cs index c88e5cc3e..88d05ed94 100644 --- a/Service/Plugins/StundenuebersichtAuswertung.cs +++ b/Service/Plugins/StundenuebersichtAuswertung.cs @@ -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(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(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(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(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 serviceRecords)