350 lines
12 KiB
C#
350 lines
12 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using BeWo.Data.Access;
|
|
using BeWo.Data.Entities;
|
|
using BeWo.Report;
|
|
using BeWo.Report.ReportObjects;
|
|
using DevExpress.XtraReports.UI;
|
|
|
|
namespace Fortis
|
|
{
|
|
public partial class ZeitdokumentationPlanIstUebersicht : XtraReport, IBeWoReport<ServicesOverviewRO>
|
|
{
|
|
|
|
public ZeitdokumentationPlanIstUebersicht()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
public void SetReportDataSource(ServicesOverviewRO pRO)
|
|
{
|
|
var newRo = BerechneRO(pRO);
|
|
|
|
bindingSource1.DataSource = newRo;
|
|
}
|
|
|
|
private PlanIstUebersichtRO BerechneRO(ServicesOverviewRO pRO)
|
|
{
|
|
var ro = new PlanIstUebersichtRO();
|
|
//ro.ServicesOverviewRO = pRO;
|
|
ro.Name = pRO.CustomerLastName;
|
|
ro.Vorname = pRO.CustomerFirstName;
|
|
ro.GebDatum = pRO.CustomerBirthday;
|
|
ro.Leistungserbringer = "";
|
|
ro.Ansprechpartner = pRO.MainAttendant;
|
|
|
|
//if (!String.IsNullOrEmpty(pRO.ApprovedStartDate))
|
|
//{
|
|
// ro.DokuzeitraumStart = DateTime.Parse(pRO.ApprovedStartDate);
|
|
//}
|
|
|
|
//if (!String.IsNullOrEmpty(pRO.ApprovedEndDate))
|
|
//{
|
|
// ro.DokuzeitraumEnde = DateTime.Parse(pRO.ApprovedEndDate);
|
|
//}
|
|
ro.DokuzeitraumStart = pRO.StartDate;
|
|
ro.DokuzeitraumEnde = pRO.EndDate;
|
|
|
|
if (ro.DokuzeitraumStart.HasValue && ro.DokuzeitraumEnde.HasValue)
|
|
{
|
|
ro.AnzahlTagePlan = (int)ro.DokuzeitraumEnde.Value.Subtract(ro.DokuzeitraumStart.Value).TotalDays + 1;
|
|
}
|
|
|
|
ro.StufeGeplant = "";
|
|
|
|
if (pRO.ApprovedFLSPerWeek > 0)
|
|
{
|
|
|
|
decimal minuten = pRO.ApprovedFLSPerWeek * 60;
|
|
|
|
|
|
ro.StufeGeplant = SetKorridorAndReturnStufe(minuten, out var korridorVon, out var korridorBis);
|
|
ro.KorridorVon = korridorVon;
|
|
ro.KorridorBis = korridorBis;
|
|
}
|
|
|
|
ro.AktuellesDatum = DateTime.Now.Date;
|
|
if (ro.DokuzeitraumStart.HasValue)
|
|
{
|
|
//ro.AnzahlTage = (int)ro.AktuellesDatum.Subtract(ro.DokuzeitraumStart.Value).TotalDays + 1;
|
|
ro.AnzahlTage = ro.AnzahlTagePlan;
|
|
}
|
|
|
|
BerechneGesamtSummenIst(pRO, ro);
|
|
|
|
|
|
if (ro.AnzahlTage.HasValue && ro.AnzahlTage.Value > 0)
|
|
{
|
|
ro.DurchschnittProWocheDirekt = ro.SummeDirekt / ro.AnzahlTage.Value * 7;
|
|
ro.DurchschnittProWocheAbgesagt = ro.SummeAbgesagt / ro.AnzahlTage.Value * 7;
|
|
|
|
if ((ro.DurchschnittProWocheDirekt + ro.DurchschnittProWocheAbgesagt) > 0)
|
|
{
|
|
ro.ProzentDirekt = (ro.DurchschnittProWocheDirekt / (ro.DurchschnittProWocheDirekt + ro.DurchschnittProWocheAbgesagt)) * 100;
|
|
ro.ProzentAbgesagt = (ro.DurchschnittProWocheAbgesagt / (ro.DurchschnittProWocheDirekt + ro.DurchschnittProWocheAbgesagt)) * 100;
|
|
}
|
|
}
|
|
|
|
|
|
//Stufe IST:
|
|
|
|
var durchschnittProWoche = Math.Round(ro.DurchschnittProWocheDirekt + ro.DurchschnittProWocheAbgesagt, 2);
|
|
if (!ro.DokuzeitraumStart.HasValue)
|
|
{
|
|
ro.StufeIst = "-";
|
|
}
|
|
else
|
|
{
|
|
ro.StufeIst = SetKorridorAndReturnStufe(durchschnittProWoche, out var kv, out var kb);
|
|
}
|
|
|
|
|
|
//Unter STufe:
|
|
if (durchschnittProWoche < ro.KorridorVon)
|
|
{
|
|
ro.MinutenProWocheUnterStufe = durchschnittProWoche - ro.KorridorVon;
|
|
}
|
|
else
|
|
{
|
|
ro.MinutenProWocheUnterStufe = 0;
|
|
}
|
|
|
|
|
|
//Bis Ende Stufe:
|
|
|
|
if (ro.KorridorVon <= durchschnittProWoche && durchschnittProWoche < ro.KorridorBis)
|
|
{
|
|
ro.MinutenProWocheBisEndeStufe = durchschnittProWoche - ro.KorridorBis;
|
|
}
|
|
|
|
|
|
//Über Stufe:
|
|
|
|
if (durchschnittProWoche >= ro.KorridorBis)
|
|
{
|
|
ro.MinutenProWocheUeberStufe = durchschnittProWoche - ro.KorridorBis;
|
|
}
|
|
else
|
|
{
|
|
ro.MinutenProWocheUeberStufe = 0;
|
|
}
|
|
|
|
if (ro.MinutenProWocheUnterStufe < 0)
|
|
{
|
|
//ro.Hinweise = "Vorsicht: Rückforderung droht!";
|
|
ro.Hinweise = "";
|
|
}
|
|
|
|
|
|
return ro;
|
|
|
|
}
|
|
|
|
private string SetKorridorAndReturnStufe(decimal minuten, out decimal korridorVon, out decimal korridorBis)
|
|
{
|
|
String stufe = "";
|
|
if (minuten < 30)
|
|
{
|
|
korridorVon = 0;
|
|
korridorBis = 30;
|
|
}
|
|
else if (minuten < 60)
|
|
{
|
|
stufe = "1";
|
|
korridorVon = 30;
|
|
korridorBis = 60;
|
|
}
|
|
else if (minuten < 90)
|
|
{
|
|
stufe = "2";
|
|
korridorVon = 60;
|
|
korridorBis = 90;
|
|
}
|
|
else if (minuten < 120)
|
|
{
|
|
stufe = "3";
|
|
korridorVon = 90;
|
|
korridorBis = 120;
|
|
}
|
|
else if (minuten < 150)
|
|
{
|
|
stufe = "4";
|
|
korridorVon = 120;
|
|
korridorBis = 150;
|
|
}
|
|
else if (minuten < 180)
|
|
{
|
|
stufe = "5";
|
|
korridorVon = 150;
|
|
korridorBis = 180;
|
|
}
|
|
else if (minuten < 210)
|
|
{
|
|
stufe = "6";
|
|
korridorVon = 180;
|
|
korridorBis = 210;
|
|
}
|
|
else if (minuten < 240)
|
|
{
|
|
stufe = "7";
|
|
korridorVon = 210;
|
|
korridorBis = 240;
|
|
}
|
|
else if (minuten < 270)
|
|
{
|
|
stufe = "8";
|
|
korridorVon = 240;
|
|
korridorBis = 270;
|
|
}
|
|
else if (minuten < 300)
|
|
{
|
|
stufe = "9";
|
|
korridorVon = 270;
|
|
korridorBis = 300;
|
|
}
|
|
else if (minuten < 330)
|
|
{
|
|
stufe = "10";
|
|
korridorVon = 300;
|
|
korridorBis = 330;
|
|
}
|
|
else if (minuten < 360)
|
|
{
|
|
stufe = "11";
|
|
korridorVon = 330;
|
|
korridorBis = 360;
|
|
}
|
|
else if (minuten < 390)
|
|
{
|
|
stufe = "12";
|
|
korridorVon = 360;
|
|
korridorBis = 390;
|
|
}
|
|
else if (minuten < 420)
|
|
{
|
|
stufe = "13";
|
|
korridorVon = 390;
|
|
korridorBis = 420;
|
|
}
|
|
else if (minuten < 450)
|
|
{
|
|
stufe = "14";
|
|
korridorVon = 420;
|
|
korridorBis = 450;
|
|
}
|
|
else if (minuten < 480)
|
|
{
|
|
stufe = "15";
|
|
korridorVon = 450;
|
|
korridorBis = 480;
|
|
}
|
|
else
|
|
{
|
|
int st = 16;
|
|
korridorVon = 480;
|
|
korridorBis = korridorVon + 30;
|
|
|
|
//AXDVG TEST
|
|
|
|
while (korridorBis < minuten)
|
|
{
|
|
st++;
|
|
korridorVon += 30;
|
|
korridorBis += 30;
|
|
}
|
|
|
|
stufe = String.Format("{0:0}", st);
|
|
}
|
|
|
|
return stufe;
|
|
}
|
|
|
|
private void BerechneGesamtSummenIst(ServicesOverviewRO pRO, PlanIstUebersichtRO ro)
|
|
{
|
|
if (pRO.CostBearer2SupportConceptList != null && pRO.CostBearer2SupportConceptList.Count > 0)
|
|
{
|
|
IList<ServiceRecord> allServiceRecords = pRO.CostBearer2SupportConceptList[0].ServiceRecords;
|
|
Dictionary<long, bool> groupBookingDict = new Dictionary<long, bool>();
|
|
foreach (var item in allServiceRecords)
|
|
{
|
|
if (!item.GroupOid.HasValue || !groupBookingDict.ContainsKey(item.GroupOid.Value))
|
|
{
|
|
if (item.Start >= pRO.StartDate && item.Start.Value.Date <= pRO.EndDate)
|
|
{
|
|
decimal prozent = item.ServiceDescription.ServiceCategory.ProzentAbrechnung;
|
|
if (item.ServiceDescription.ProzentAbrechnung.HasValue)
|
|
{
|
|
prozent = item.ServiceDescription.ProzentAbrechnung.Value;
|
|
}
|
|
|
|
var minutenIst = Math.Round((item.RoundedDuration * prozent) / 100, 0, MidpointRounding.AwayFromZero);
|
|
|
|
var fsr = FortisServiceRecord.CreateFromServiceDescription(item.ServiceDescription.ServiceCategory.Name, item.ServiceDescription.Name, (double)minutenIst, item.Start.Value, item.End.Value);
|
|
|
|
if (item.ServiceDescription != null && item.ServiceDescription.Name.Contains("abgesagt"))
|
|
{
|
|
ro.SummeAbgesagt += minutenIst;
|
|
}
|
|
else
|
|
{
|
|
if (fsr != null)
|
|
{
|
|
ro.SummeDirekt += (decimal)fsr.BerechneDirekteMinutenGesamt();
|
|
}
|
|
}
|
|
|
|
if (item.GroupOid.HasValue)
|
|
groupBookingDict.Add(item.GroupOid.Value, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
public class PlanIstUebersichtRO
|
|
{
|
|
public String Name { get; set; }
|
|
public String Vorname { get; set; }
|
|
public DateTime? GebDatum { get; set; }
|
|
public String Leistungserbringer { get; set; }
|
|
public String Ansprechpartner { get; set; }
|
|
public DateTime? DokuzeitraumStart { get; set; }
|
|
public DateTime? DokuzeitraumEnde { get; set; }
|
|
public int? AnzahlTagePlan { get; set; }
|
|
public String StufeGeplant { get; set; }
|
|
public decimal KorridorVon { get; set; }
|
|
public decimal KorridorBis { get; set; }
|
|
public DateTime? Unterbrechungszeitraum1Start { get; set; }
|
|
public DateTime? Unterbrechungszeitraum1Ende { get; set; }
|
|
public int? AnzahlTageUnterbrechung1 { get; set; }
|
|
public DateTime? Unterbrechungszeitraum2Start { get; set; }
|
|
public DateTime? Unterbrechungszeitraum2Ende { get; set; }
|
|
public int? AnzahlTageUnterbrechung2 { get; set; }
|
|
public DateTime? Unterbrechungszeitraum3Start { get; set; }
|
|
public DateTime? Unterbrechungszeitraum3Ende { get; set; }
|
|
public int? AnzahlTageUnterbrechung3 { get; set; }
|
|
public int? SummeTageUnterbrechung { get; set; }
|
|
|
|
public DateTime AktuellesDatum { get; set; }
|
|
public int? AnzahlTage { get; set; }
|
|
|
|
public decimal SummeDirekt { get; set; }
|
|
public decimal SummeAbgesagt { get; set; }
|
|
public decimal DurchschnittProWocheDirekt { get; set; }
|
|
public decimal DurchschnittProWocheAbgesagt { get; set; }
|
|
public decimal ProzentDirekt { get; set; }
|
|
public decimal ProzentAbgesagt { get; set; }
|
|
public decimal MinutenProWocheUnterStufe { get; set; }
|
|
|
|
public decimal MinutenProWocheBisEndeStufe { get; set; }
|
|
public decimal MinutenProWocheUeberStufe { get; set; }
|
|
public String StufeIst { get; set; }
|
|
public decimal FehlstundenGesamt { get; set; }
|
|
public String Hinweise { get; set; }
|
|
|
|
}
|
|
}
|