Files
BeWoPlaner/ReportImp/LebenshilfeBadKreuznachFUD/Statistics/CustomServiceRecordStatisticFactory.cs

753 lines
33 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
using BS.Shared.Services;
namespace LebenshilfeBadKreuznachFUD.Statistics
{
public class HphServiceRecordStatisticFactory : ServiceRecordStatisticFactory
{
private bool containsEntlastungsbetrag = false;
private Pflegegrad? pflegegrad = null;
//private Dictionary<long, decimal> oid2MonatAbschlag = new Dictionary<long, decimal>();
public Dictionary<String, decimal> cat2BetragVorjahrAb17Halbjahr1 = new Dictionary<String, decimal>();
public Dictionary<String, decimal> cat2BetragVorjahrAb17Halbjahr2 = new Dictionary<String, decimal>();
public Dictionary<String, decimal> cat2BetragVorjahr16 = new Dictionary<String, decimal>();
private Dictionary<string, Dictionary<String, bool>> key2TagesDict = new Dictionary<string, Dictionary<String, bool>>();
private int hilfeplanJahr = DateTime.Now.Year;
//private Dictionary<String, decimal> preisFuerEinzelbetreuung = new Dictionary<string, decimal>();
public HphServiceRecordStatisticFactory()
{
}
public override ServiceRecordStatisticsInfoDC GetServiceRecordStatisticInfo(long costBearer2SupportConceptOid, DateTime statisticsDate)
{
var stats = CreateSupportConceptStatisticsImpl(costBearer2SupportConceptOid, statisticsDate);
int rowCount = 4;
if (containsEntlastungsbetrag)
{
//if (hilfeplanJahr >= 2019)
//{
// rowCount = 5;
//}
//else
//{
// rowCount = 6;
//}
}
var dc = new ServiceRecordStatisticsInfoDC();
dc.Header = new string[rowCount];
dc.Header[0] = "Bewilligungszeitraum:";
dc.Header[1] = "Geleistet diesen Monat/Gesamt:";
dc.Header[2] = "Bewilligt diesen Monat/Gesamt:";
dc.Header[3] = "Frei diesen Monat/Gesamt:";
if (containsEntlastungsbetrag)
{
dc.Header[0] = "Bewilligungszeitraum:";
dc.Header[1] = "Geleistet diesen Monat:";
dc.Header[2] = "Bewilligt diesen Monat:";
dc.Header[3] = "Frei diesen Monat:";
//if (hilfeplanJahr >= 2019)
//{
// dc.Header[4] = String.Format("Restbetrag aus {0}", hilfeplanJahr - 1);
//}
//else
//{
// dc.Header[4] = "Restbetrag aus 2015/2016:";
// dc.Header[5] = "Restbetrag aus 2017:";
//}
}
dc.ForegroundColor = new string[rowCount];
for (int i = 0; i < rowCount; i++)
{
dc.ForegroundColor[i] = "#FF2B508B";
}
dc.PeriodStatisticInfos = new List<ServiceRecordPeriodStatisticsInfoDC>();
if (stats != null)
{
if (stats.PeriodStatistics.Count > 1 && !TimeSpanIsEqual(stats))
{
//dc.PeriodStatisticInfos.Add(CreateTotalStatistics(stats, statisticsDate));
}
if (containsEntlastungsbetrag && stats.PeriodStatistics.Count > 1)
{
//Fasse Einzelstatistiken zusammen
var first = stats.PeriodStatistics[0];
for (int i = 1; i < stats.PeriodStatistics.Count; i++)
{
var ps = stats.PeriodStatistics[i];
first.FixedAmountApprovedPerInterval = (first.FixedAmountApprovedPerInterval ?? 0) + (ps.FixedAmountApprovedPerInterval ?? 0);
first.AmountConsumedThisInterval = first.AmountConsumedThisInterval + ps.AmountConsumedThisInterval;
}
stats.PeriodStatistics = new List<SupportConceptPeriodStatisticsDC>();
stats.PeriodStatistics.Add(first);
}
foreach (var pdc in stats.PeriodStatistics)
{
dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, pdc, statisticsDate));
}
}
return dc;
}
public override SupportConceptStatisticsDC CreateSupportConceptStatisticsImpl(long costBearer2SupportConceptOid,
DateTime statisticsDate, long? ignoreServiceRecordOid)
{
var stats = base.CreateSupportConceptStatisticsImpl(costBearer2SupportConceptOid, statisticsDate, ignoreServiceRecordOid);
CalculateFixedAmountBudget(stats, statisticsDate);
return stats;
}
protected override SupportConceptCostBearerRelDC CreateCb2ScDC(CostBearer2SupportConcept cb2sc)
{
pflegegrad = cb2sc.SupportConcept.Customer.Pflegegrad;
if (cb2sc.EndDate.HasValue && cb2sc.EndDate.Value.Year < hilfeplanJahr)
{
hilfeplanJahr = cb2sc.EndDate.Value.Year;
}
return base.CreateCb2ScDC(cb2sc);
}
public ServiceRecordPeriodStatisticsInfoDC CreateServiceRecordPeriodStatisticsInfo(SupportConceptStatisticsDC stats, SupportConceptPeriodStatisticsDC periodStats, DateTime statisticsDate)
{
int rowCount = 4;
if (containsEntlastungsbetrag)
{
//if (hilfeplanJahr >= 2019)
//{
// rowCount = 5;
//}
//else
//{
// rowCount = 6;
//}
}
var dc = CreateDefaultServiceRecordPeriodStatisticsInfo(rowCount);
bool showFixedAmount = false;
if (periodStats.SupportConceptApprovalPeriod != null)
{
if (periodStats.SupportConceptApprovalPeriod.ServiceCategory != null)
{
bool showDateRange = false;
if (stats.StatisticsStartDate != periodStats.SupportConceptApprovalPeriod.StartDate ||
stats.StatisticsEndDate != periodStats.SupportConceptApprovalPeriod.EndDate)
{
showDateRange = true;
}
if (showDateRange)
{
if (!periodStats.SupportConceptApprovalPeriod.EndDate.HasValue)
{
dc.LeftValues[0] = String.Format("{0}: ab {1:dd.MM.yy}",
periodStats.SupportConceptApprovalPeriod.ServiceCategory.Name,
periodStats.SupportConceptApprovalPeriod.StartDate);
}
else
{
dc.LeftValues[0] = String.Format("{0}: {1:dd.MM.yy} - {2:dd.MM.yy}",
periodStats.SupportConceptApprovalPeriod.ServiceCategory.Name,
periodStats.SupportConceptApprovalPeriod.StartDate,
periodStats.SupportConceptApprovalPeriod.EndDate);
}
}
else
{
dc.LeftValues[0] = periodStats.SupportConceptApprovalPeriod.ServiceCategory.Name;
}
}
else
{
dc.LeftValues[0] = String.Format("{0:dd.MM.yy} - {1:dd.MM.yy}",
periodStats.SupportConceptApprovalPeriod.StartDate,
periodStats.SupportConceptApprovalPeriod.EndDate);
}
if (periodStats.SupportConceptApprovalPeriod.ApprovedFixedAmount.HasValue)
{
showFixedAmount = true;
}
}
if (containsEntlastungsbetrag)
{
dc.LeftValues[1] = "";
dc.RightValues[1] = String.Format("{0:c}", periodStats.AmountConsumedThisInterval);
dc.LeftValues[2] = "";
dc.RightValues[2] = String.Format("{0:c}", periodStats.FixedAmountApprovedPerInterval);
decimal restBetrag = (periodStats.FixedAmountApprovedPerInterval ?? 0) - periodStats.AmountConsumedThisInterval;
dc.LeftValues[3] = ""; //String.Format("{0:c}", periodStats.FixedAmountApprovedPerInterval - periodStats.AmountConsumedThisInterval);
dc.RightValues[3] = String.Format("{0:c}", restBetrag);
if (periodStats.FixedAmountApprovedPerInterval - periodStats.AmountConsumedThisInterval < 0)
{
dc.LeftValueColors[3] = "#FFFF0000";
}
if (restBetrag < 0)
{
dc.RightValueColors[3] = "#FFFF0000";
}
}
else
{
dc.LeftValues[1] = String.Format("{0:0.00} Std.", periodStats.MinutesProvidedThisMonth / 60);
dc.RightValues[1] = String.Format("{0:0.00} Std.", periodStats.MinutesProvidedTotalRounded / 60);
dc.LeftValues[2] = String.Format("{0:0.00} Std.", periodStats.MinutesApprovedPerMonth / 60);
dc.RightValues[2] = String.Format("{0:0.00} Std.", periodStats.MinutesApprovedTotal / 60);
dc.LeftValues[3] = String.Format("{0:0.00} Std.", (periodStats.MinutesApprovedPerMonth - periodStats.MinutesProvidedThisMonth) / 60);
dc.RightValues[3] = String.Format("{0:0.00} Std.", (periodStats.MinutesApprovedTotal - periodStats.MinutesProvidedTotalRounded) / 60);
if (periodStats.MinutesApprovedPerMonth - periodStats.MinutesProvidedThisMonth < 0)
{
dc.LeftValueColors[3] = "#FFFF0000";
}
if (periodStats.MinutesApprovedTotal - periodStats.MinutesProvidedTotalRounded < 0)
{
dc.RightValueColors[3] = "#FFFF0000";
}
}
return dc;
}
public override SupportConceptStatisticsDC CreateSupportConceptStatistics(long costBearer2SupportConceptOid, DateTime statisticsDate)
{
return null;
}
public override decimal GetApprovedMinutesPerMonth(SupportConceptPeriodStatisticsDC periodStats)
{
if (periodStats.SupportConceptApprovalPeriod != null)
{
if (periodStats.SupportConceptApprovalPeriod.ApprovedBEPerInterval.HasValue &&
periodStats.SupportConceptApprovalPeriod.ApprovedBEInterval.HasValue)
{
var be = periodStats.SupportConceptApprovalPeriod.ApprovedBEPerInterval.Value;
switch (periodStats.SupportConceptApprovalPeriod.ApprovedBEInterval.Value)
{
case SupportConceptApprovalInterval.Daily:
be *= 30;
break;
case SupportConceptApprovalInterval.Weekly:
be *= 4.34m;
break;
case SupportConceptApprovalInterval.Fortnightly:
be *= 4.34m / 2;
break;
case SupportConceptApprovalInterval.Monthly:
break;
case SupportConceptApprovalInterval.Quarterly:
be /= 3;
break;
case SupportConceptApprovalInterval.HalfYearly:
be /= 6;
break;
case SupportConceptApprovalInterval.Yearly:
be /= 12;
break;
default:
throw new ArgumentOutOfRangeException();
}
return be*60;
}
}
return base.GetApprovedMinutesPerMonth(periodStats);
}
public override decimal GetApprovedMinutesPerMonth(SupportConceptStatisticsDC stats)
{
if (stats.PeriodStatistics != null)
{
return stats.PeriodStatistics.Sum(p => p.MinutesApprovedPerMonth);
}
return base.GetApprovedMinutesPerMonth(stats);
}
protected override IEnumerable<ServiceRecord> GetServiceRecordsForStatistic(long costBearer2SupportConceptOid)
{
var srList = base.GetServiceRecordsForStatistic(costBearer2SupportConceptOid);
foreach (var sr in srList)
{
String leistung = sr.ServiceDescription.ServiceCategory.Name.ToLower().Trim();
if (!key2TagesDict.ContainsKey(leistung))
{
key2TagesDict[leistung] = new Dictionary<String, bool>();
}
if (sr.ServiceDescription.Name == "Kurzurlaub")
{
DateTime start = sr.Start.Value;
DateTime end = sr.End.Value;
while (start <= end)
{
String key = String.Format("{0:dd.MM.yyyy}", start);
if (!key2TagesDict[leistung].ContainsKey(key))
{
key2TagesDict[leistung].Add(key, true);
}
start = start.AddDays(1);
}
}
}
return srList;
}
private void CalculateFixedAmountBudget(SupportConceptStatisticsDC stats, DateTime date)
{
if (stats.PeriodStatistics != null)
{
foreach (var pstat in stats.PeriodStatistics)
{
if (pstat != null && pstat.SupportConceptApprovalPeriod != null &&
pstat.SupportConceptApprovalPeriod.ServiceCategory != null)
{
bool isEntlastung = false;
if (pstat.SupportConceptApprovalPeriod.ServiceCategory.Name.Contains("Entlastung"))
{
containsEntlastungsbetrag = true;
isEntlastung = true;
}
if (!pstat.FixedAmountApprovedTotal.HasValue)
{
bool berechneGesamt = !isEntlastung;
BerechneBewilligungsBetrag(pstat, date, berechneGesamt);
}
if (isEntlastung)
{
if (pstat.SupportConceptApprovalPeriod.StartDate.HasValue &&
pstat.SupportConceptApprovalPeriod.StartDate.Value < date)
{
CalculateEntlastungsbetragBudget(pstat, date);
}
}
}
}
}
}
//periodStats.Custom1 = Restbudget 2016 (wird eingetragen im monatlicher Abschlag) verfällt Ende 2018
//periodStats.Custom2 = Restbudget 2017 - später, verfällt am 1.7. im Nachfolgejahr
//periodStats.Custom3 = verbraucht erstes Halbjahr
//periodStats.Custom4 = verbraucht zweites Halbjahr
private void CalculateEntlastungsbetragBudget(SupportConceptPeriodStatisticsDC pstat, DateTime date)
{
if (pstat != null && pstat.SupportConceptApprovalPeriod.ApprovedFixedAmount.HasValue)
{
if (pstat.SupportConceptApprovalPeriod.MonthlyPayment.HasValue && pstat.SupportConceptApprovalPeriod.MonthlyPayment.Value > 0)
{
if (!pstat.Custom1.HasValue)
{
decimal payment = pstat.SupportConceptApprovalPeriod.MonthlyPayment.Value;
pstat.Custom1 = payment;
}
}
else if (hilfeplanJahr < 2019)
{
if (pstat.SupportConceptApprovalPeriod.ServiceCategory != null)
{
var scap = DAOFactory.GenericDAO.LoadByID<SupportConceptApprovalPeriod>(pstat.SupportConceptApprovalPeriod.SupportConceptApprovalPeriodOid.Value);
var customer = scap.CostBearer2SupportConcept.SupportConcept.Customer;
BerechneRestBetragVorjahr(customer, pstat, pstat.SupportConceptApprovalPeriod.StartDate.Value.Year);
}
}
if (hilfeplanJahr > 2019)
{
if (!pstat.SupportConceptApprovalPeriod.MonthlyPayment.HasValue)
{
if (pstat.SupportConceptApprovalPeriod.ServiceCategory != null)
{
var scap = DAOFactory.GenericDAO.LoadByID<SupportConceptApprovalPeriod>(
pstat.SupportConceptApprovalPeriod.SupportConceptApprovalPeriodOid.Value);
var customer = scap.CostBearer2SupportConcept.SupportConcept.Customer;
BerechneRestBetragVorjahr(customer, pstat,
pstat.SupportConceptApprovalPeriod.StartDate.Value.Year);
}
}
}
}
}
protected override void CalculateFixedAmountBudget(ServiceRecord sr, SupportConceptPeriodStatisticsDC periodStats, DateTime statisticsDate)
{
if (periodStats != null && periodStats.SupportConceptApprovalPeriod.ApprovedFixedAmount.HasValue)
{
decimal preis = 0;
preis = GetPreisVonServiceDescription(sr.ServiceDescription, sr.Start.Value) ?? 0;
preis *= (sr.RoundedDuration/60);
var fahrtkosten = GetPreis("Hausbesuchspauschale", sr.Start.Value); //Einmal Fahrtkosten pro Tag an dem ein Termin stattgefunden hat
var firstOfMonthDt = new DateTime(statisticsDate.Year, statisticsDate.Month, 1);
if (sr.Start >= firstOfMonthDt && sr.Start < firstOfMonthDt.AddMonths(1))
{
periodStats.AmountConsumedThisInterval += preis;
if (!periodStats.ServiceRecords.Any(r => r.ServiceRecordOid != sr.Oid && r.ServiceDescription.CategoryName.ToLower().StartsWith("entlastung") && r.Start.HasValue && r.Start.Value.Date == sr.Start.Value.Date))
periodStats.AmountConsumedThisInterval += fahrtkosten;
}
if (sr.GroupEmployeeCount.HasValue)
{
preis /= sr.GroupEmployeeCount.Value;
}
periodStats.AmountConsumedTotal += preis;
periodStats.AmountConsumedTotal += fahrtkosten;
var jahrBeginn = new DateTime(sr.Start.Value.Year, 1, 1);
if (sr.Start >= jahrBeginn && sr.Start < jahrBeginn.AddMonths(6))
{
periodStats.Custom3 = preis + (periodStats.Custom3 ?? 0);
}
else
{
periodStats.Custom4 = preis + (periodStats.Custom4 ?? 0);
}
}
}
public decimal GetPreis(String preisBezeichnung, DateTime datum)
{
var preise = DAOFactory.GenericDAO.GetAllActive<Preis>();
var preis = preise.Where(p => p.Name.Contains(preisBezeichnung)).FirstOrDefault();
if (preis != null)
{
var crlist = MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(preis.CostRatePeriods);
var cr = crlist.GetCostRatePeriodForDate(CostRatePeriodType.AmountOfMoney, datum);
if (cr != null && cr.CostRateValue.HasValue)
{
return cr.CostRateValue.Value;
}
}
return 0;
}
private decimal? GetPreisVonServiceDescription(ServiceDescription serviceDescription, DateTime monat)
{
if (serviceDescription != null && serviceDescription.CostRatePeriods != null)
{
var crpDcList = MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(serviceDescription.CostRatePeriods);
var crp = crpDcList.GetCostRatePeriodForDate(CostRatePeriodType.AmountOfMoney, monat);
if (crp != null)
{
return crp.CostRateValue;
}
}
return null;
}
private void BerechneBewilligungsBetrag(SupportConceptPeriodStatisticsDC periodStats, DateTime statisticsDate, bool berechneGesamtBewilligung)
{
decimal monate = 0;
decimal tage = 0;
if (periodStats.SupportConceptApprovalPeriod != null && periodStats.SupportConceptApprovalPeriod.StartDate.HasValue && periodStats.SupportConceptApprovalPeriod.EndDate.HasValue)
{
DateTime start = periodStats.SupportConceptApprovalPeriod.StartDate.Value;
DateTime end = periodStats.SupportConceptApprovalPeriod.EndDate.Value;
if (berechneGesamtBewilligung)
{
while (start < end)
{
monate++;
start = start.AddMonths(1);
}
tage = (decimal)end.Subtract(periodStats.SupportConceptApprovalPeriod.StartDate.Value).TotalDays + 1;
}
else
{
if (statisticsDate < end)
{
end = new DateTime(statisticsDate.Year, statisticsDate.Month, 1);
}
while (start < end)
{
monate++;
start = start.AddMonths(1);
}
if (statisticsDate < periodStats.SupportConceptApprovalPeriod.EndDate.Value && statisticsDate.Day >= 15)
{
monate++;
}
tage = (decimal)end.Subtract(
periodStats.SupportConceptApprovalPeriod.StartDate.Value).TotalDays + 1;
}
}
periodStats.FixedAmountApprovedTotal = periodStats.SupportConceptApprovalPeriod.ApprovedFixedAmount;
periodStats.FixedAmountApprovedPerInterval = periodStats.FixedAmountApprovedTotal;
if (periodStats.SupportConceptApprovalPeriod.ApprovedFixedAmountInterval.HasValue)
{
switch (periodStats.SupportConceptApprovalPeriod.ApprovedFixedAmountInterval.Value)
{
case SupportConceptApprovalInterval.Daily:
periodStats.FixedAmountApprovedPerInterval *= 30;
periodStats.FixedAmountApprovedTotal = tage * periodStats.FixedAmountApprovedPerInterval;
break;
case SupportConceptApprovalInterval.Weekly:
periodStats.FixedAmountApprovedPerInterval *= 4.34m;
periodStats.FixedAmountApprovedTotal = periodStats.FixedAmountApprovedPerInterval*monate;
break;
case SupportConceptApprovalInterval.Fortnightly:
periodStats.FixedAmountApprovedPerInterval *= (4.34m / 2);
periodStats.FixedAmountApprovedTotal = periodStats.FixedAmountApprovedPerInterval * monate;
break;
case SupportConceptApprovalInterval.Monthly:
periodStats.FixedAmountApprovedTotal = periodStats.FixedAmountApprovedPerInterval * monate;
break;
case SupportConceptApprovalInterval.Quarterly:
periodStats.FixedAmountApprovedPerInterval /= 3;
periodStats.FixedAmountApprovedTotal = periodStats.FixedAmountApprovedPerInterval * monate;
break;
case SupportConceptApprovalInterval.HalfYearly:
periodStats.FixedAmountApprovedPerInterval /= 6;
periodStats.FixedAmountApprovedTotal = periodStats.FixedAmountApprovedPerInterval * monate;
break;
case SupportConceptApprovalInterval.Yearly:
periodStats.FixedAmountApprovedPerInterval /= 12;
periodStats.FixedAmountApprovedTotal = periodStats.FixedAmountApprovedPerInterval * monate;
break;
}
}
}
private void BerechneRestBetragVorjahr( Customer c, SupportConceptPeriodStatisticsDC pstat, int folgeJahr)
{
int jahr = folgeJahr - 1;
foreach (var sc in c.SupportConcepts)
{
foreach (var c2s in sc.CostBearer2SupportConceptList)
{
foreach (var scap in c2s.ApprovalPeriodList)
{
if (scap.ApprovedFixedAmount.HasValue && scap.EndDate.HasValue && scap.EndDate.Value.Date == new DateTime(jahr, 12, 31) && scap.ServiceCategory != null && scap.ServiceCategory.Name == pstat.SupportConceptApprovalPeriod.ServiceCategory.Name)
{
var statsFactory = new HphServiceRecordStatisticFactory();
var statsVorjahr = statsFactory.CreateSupportConceptStatisticsImpl(c2s.Oid.Value, new DateTime(jahr, 12, 31));
if (statsVorjahr != null && statsVorjahr.PeriodStatistics != null && statsVorjahr.PeriodStatistics.Count > 0)
{
foreach (var pstatVj in statsVorjahr.PeriodStatistics)
{
if (pstatVj.SupportConceptApprovalPeriod != null &&
pstatVj.SupportConceptApprovalPeriod.ServiceCategory != null &&
pstatVj.SupportConceptApprovalPeriod.ServiceCategory.Name ==
pstat.SupportConceptApprovalPeriod.ServiceCategory.Name)
{
//periodStats.Custom1 = Restbudget 2016 (wird eingetragen im monatlicher Abschlag) verfällt Ende 2018
//periodStats.Custom2 = Restbudget 2017 - später, verfällt am 1.7. im Nachfolgejahr
//periodStats.Custom3 = verbraucht erstes Halbjahr
//periodStats.Custom4 = verbraucht zweites Halbjahr
decimal rest2016 = pstatVj.Custom1 ?? 0;
decimal restVorjahr = pstatVj.Custom2 ?? 0;
decimal dazugekommenesBudgetLaufendesJahr = pstatVj.FixedAmountApprovedTotal ?? 0;
decimal verwendetErstesHalbjahr = pstatVj.Custom3 ?? 0;
decimal verwendetZweitesHalbjahr = pstatVj.Custom4 ?? 0;
decimal verwendeterGesamtBetragLaufendesJahr = pstatVj.AmountConsumedTotal;
if (jahr == 2017)
{
//Benutze Budget aus 2017:
restVorjahr += dazugekommenesBudgetLaufendesJahr - verwendeterGesamtBetragLaufendesJahr;
if (restVorjahr < 0)
{
rest2016 += restVorjahr;
if (rest2016 < 0)
{
restVorjahr = rest2016;
rest2016 = 0;
}
else
{
restVorjahr = 0;
}
}
}
//else if (jahr == 2019)
//{
// var insgesamtBudget = rest2016 + dazugekommenesBudgetLaufendesJahr;
// var budgetMinus1Hj = insgesamtBudget - verwendetErstesHalbjahr;
// var verfallen = rest2016 - verwendetErstesHalbjahr;
// if (verfallen < 0)
// {
// verfallen = 0;
// }
// var restBudget = budgetMinus1Hj - verfallen;
// restBudget -= verwendetZweitesHalbjahr;
// restVorjahr +=
// dazugekommenesBudgetLaufendesJahr -
// verwendeterGesamtBetragLaufendesJahr;
// //jetzt noch ermitteln wieviel vom Vorjahr mitte des Jahres verfallen ist.
// //if (restVorjahr < 0) //zuviel verbraucht
// //{
// rest2016 += restVorjahr;
// restVorjahr = rest2016;
// rest2016 = 0;
// //}
//}
else if (jahr >= 2019)
{
var insgesamtBudget = rest2016 + dazugekommenesBudgetLaufendesJahr;
var budgetMinus1Hj = insgesamtBudget - verwendetErstesHalbjahr;
var verfallen = rest2016 - verwendetErstesHalbjahr;
if (verfallen < 0)
{
verfallen = 0;
}
var restBudget = budgetMinus1Hj - verfallen;
restBudget -= verwendetZweitesHalbjahr;
restVorjahr = restBudget;
rest2016 = 0;
}
pstat.Custom1 = rest2016;
pstat.Custom2 = restVorjahr;
//if (restVorjahrAb2017 > 0)
//{
// if (restVorjahrAb2017 > verbrauchtVorjahrErstesHalbJahr)
// {
// verbrauchtVorjahrErstesHalbJahr = 0;
// }
// else
// {
// verbrauchtVorjahrErstesHalbJahr -= restVorjahrAb2017;
// }
//}
//decimal verbrauchtInsgesamt =
// verbrauchtVorjahrErstesHalbJahr + verbrauchtVorjahrZweitesHalbJahr;
////Rest von 2016 darf bis Ende 2018 verbraucht werden
//if (rest2016 > 0 && aktuellesJahr <= 2018)
//{
// if (rest2016 > verbrauchtInsgesamt)
// {
// pstat.Custom1 = rest2016 - verbrauchtInsgesamt;
// verbrauchtInsgesamt = 0;
// }
// else
// {
// verbrauchtInsgesamt -= rest2016;
// }
//}
//decimal rest = bewilligtVorjahr - verbrauchtInsgesamt;
//if (rest > 0)
//{
//pstat.Custom2 = rest;
//}
}
}
}
}
}
}
}
}
}
}