283 lines
10 KiB
C#
283 lines
10 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using BeWo.Report.ReportObjects;
|
|
using BeWo.Report;
|
|
using DevExpress.XtraReports.UI;
|
|
using System.Data;
|
|
using BS.Shared.Core;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Globalization;
|
|
using BeWo.Data.Access;
|
|
using BeWo.Data.Entities;
|
|
|
|
namespace AkggMid
|
|
{
|
|
// nach Aussage vom 18.09.2023 nicht mehr relevant - mal löschen irgendwann
|
|
public partial class LeistungsnachweisJugendamt : DevExpress.XtraReports.UI.XtraReport, IBeWoReport<ServicesOverviewRO>
|
|
{
|
|
Dictionary<int, ServicesOverviewRO.ServiceDetail> day2Detail = new Dictionary<int, ServicesOverviewRO.ServiceDetail>();
|
|
|
|
public LeistungsnachweisJugendamt()
|
|
{
|
|
InitializeComponent();
|
|
|
|
}
|
|
|
|
public void SetReportDataSource(ServicesOverviewRO pRO)
|
|
{
|
|
//SetzeAdresse(pRO); wird nur für den einen Kostenträger verwendet und muss genau so aussehen
|
|
|
|
var helper = new LeistungsnachweisHelper(pRO, true);
|
|
//Ein paar Tests:
|
|
//var test = BerechneMinutenProTag(19.5m);
|
|
//var test2 = BerechneMinutenProTag(5.0833333333m);
|
|
//var test3 = BerechneMinutenProTag(5.6666666666m);
|
|
|
|
pRO.Services = ErstelleDummyRecords(pRO, helper);
|
|
|
|
//LeistungsnachweisHelper.PruefeWochenBudget(pRO);
|
|
|
|
var abrAbwTagDict = helper.BerechneAbrechenbareAbwesenheitsInfos(pRO);
|
|
|
|
double summe1bis16 = 0;
|
|
double summeGesamt = 0;
|
|
double wochensumme = 0;
|
|
|
|
//foreach (var record in pRO.Services)
|
|
for (int n = 0; n <= pRO.EndDate.Day; n++)
|
|
{
|
|
var record = pRO.Services[n];
|
|
ServicesOverviewRO.CreateSignatureString(record);
|
|
if (record.ServiceDescription != "Übertrag:" && record.ServiceDescription != "Wochensumme")
|
|
{
|
|
if (abrAbwTagDict.ContainsKey(record.StartDate.Date))
|
|
{
|
|
if (record.Minutes == 0)
|
|
{
|
|
record.Minutes = helper.BerechneMinutenProTag((double)pRO.ApprovedFLSPerWeek);
|
|
}
|
|
|
|
}
|
|
|
|
//Erstelle Wochensummen
|
|
//Verschoben da es nun auch die Abwesenheiten enthält
|
|
wochensumme += record.Minutes;
|
|
if (record.StartDate.DayOfWeek == DayOfWeek.Friday || n+1 == pRO.EndDate.Day)
|
|
{
|
|
var newSr = new ServicesOverviewRO.ServiceDetail();
|
|
newSr.ServiceDescription = "Wochensumme";
|
|
newSr.ServiceCategory = record.ServiceCategory + "z";
|
|
newSr.Minutes = helper.Rundeauf15Minuten(wochensumme);
|
|
summeGesamt += newSr.Minutes;
|
|
wochensumme = 0;
|
|
pRO.Services.Add(newSr);
|
|
}
|
|
|
|
if (record.StartDate.Day <= 16)
|
|
{
|
|
summe1bis16 += record.Minutes;
|
|
}
|
|
}
|
|
}
|
|
pRO.Services = pRO.Services.OrderBy(r => r.ServiceCategory).ToList();
|
|
|
|
var servicesDouble = new List<ServicesOverviewRO.ServiceDoubleDetail>();
|
|
int i = 0;
|
|
foreach (var record in pRO.Services)
|
|
{
|
|
var sdd = new ServicesOverviewRO.ServiceDoubleDetail();
|
|
sdd.Minutes = record.Minutes;
|
|
sdd.FLS = sdd.Minutes / 60;
|
|
|
|
|
|
|
|
var istErsterTagAbwesend = abrAbwTagDict.ContainsKey(record.StartDate.Date);
|
|
if (istErsterTagAbwesend)
|
|
{
|
|
sdd.FLSString = String.Format("Abwesenheit (erstattet) {0:0.00}", sdd.FLS);
|
|
}
|
|
else
|
|
{
|
|
sdd.FLSString = String.Format("{0:0.00}", sdd.FLS);
|
|
}
|
|
if (record.StartDate.DayOfWeek == DayOfWeek.Sunday || record.StartDate.DayOfWeek == DayOfWeek.Saturday)
|
|
{
|
|
sdd.IsBillable = true;
|
|
sdd.FLSString = "";
|
|
}
|
|
if (String.IsNullOrEmpty(record.ServiceDescription))
|
|
{
|
|
sdd.FLSString = "";
|
|
}
|
|
sdd.ServiceDescription = record.ServiceDescription;
|
|
sdd.StartDate = record.StartDate;
|
|
|
|
|
|
if (i < (pRO.Services.Count / (float)2))
|
|
{
|
|
servicesDouble.Add(sdd);
|
|
}
|
|
else
|
|
{
|
|
|
|
sdd = servicesDouble[i - servicesDouble.Count];
|
|
sdd.Minutes2 = record.Minutes;
|
|
sdd.FLS2 = sdd.Minutes2 / 60;
|
|
|
|
if (istErsterTagAbwesend)
|
|
{
|
|
sdd.FLSString2 = String.Format("Abwesenheit (erstattet) {0:0.00}", sdd.FLS2);
|
|
}
|
|
else
|
|
{
|
|
sdd.FLSString2 = String.Format("{0:0.00}", sdd.FLS2);
|
|
}
|
|
if (record.StartDate.DayOfWeek == DayOfWeek.Sunday || record.StartDate.DayOfWeek == DayOfWeek.Saturday)
|
|
{
|
|
sdd.IsBillable2 = true;
|
|
sdd.FLSString2 = "";
|
|
}
|
|
if (String.IsNullOrEmpty(record.ServiceDescription))
|
|
{
|
|
sdd.FLSString2 = "";
|
|
}
|
|
sdd.ServiceDescription2 = record.ServiceDescription;
|
|
}
|
|
|
|
|
|
|
|
i++;
|
|
}
|
|
|
|
pRO.ServicesDouble = servicesDouble;
|
|
|
|
//cellSumme1.Text = String.Format("{0:0.00}", summe1bis16 / 60);
|
|
cellSumme1.Text = "";
|
|
pRO.TotalFLM = summeGesamt;
|
|
|
|
this.bindingSource1.DataSource = pRO;
|
|
}
|
|
|
|
private void SetzeAdresse(ServicesOverviewRO pRo)
|
|
{
|
|
if (pRo.SupportConceptCostBearer != null)
|
|
{
|
|
var org = pRo.SupportConceptCostBearer.CostBearer;
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
sb.AppendLine(org.Name);
|
|
|
|
//var orgEnt = DAOFactory.GenericDAO.LoadByID<Organisation>(org.OrganisationOid);
|
|
if (!String.IsNullOrEmpty(org.Name2))
|
|
{
|
|
sb.AppendLine(org.Name2);
|
|
}
|
|
|
|
if (!String.IsNullOrEmpty(org.Street))
|
|
{
|
|
sb.AppendLine(org.Street);
|
|
}
|
|
|
|
sb.AppendLine(String.Format("{0} {1}", org.PostalCode, org.Town));
|
|
|
|
|
|
lblAdresse.Text = sb.ToString();
|
|
}
|
|
}
|
|
|
|
private List<ServicesOverviewRO.ServiceDetail> ErstelleDummyRecords(ServicesOverviewRO pRO, LeistungsnachweisHelper helper)
|
|
{
|
|
|
|
foreach (var sr in pRO.Services)
|
|
{
|
|
if (!day2Detail.ContainsKey(sr.StartDate.Day))
|
|
{
|
|
day2Detail.Add(sr.StartDate.Day, sr);
|
|
}
|
|
else
|
|
{
|
|
var dsr = day2Detail[sr.StartDate.Day];
|
|
dsr.Minutes += sr.Minutes;
|
|
if (!String.IsNullOrWhiteSpace(sr.Notice))
|
|
{
|
|
if (!String.IsNullOrWhiteSpace(dsr.Notice))
|
|
{
|
|
dsr.Notice += ", " + sr.Notice;
|
|
}
|
|
else
|
|
{
|
|
dsr.Notice = sr.Notice;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var result = new List<ServicesOverviewRO.ServiceDetail>();
|
|
for (int i = 1; i <= pRO.EndDate.Day; i++)
|
|
{
|
|
|
|
if (!day2Detail.ContainsKey(i))
|
|
{
|
|
var newSr = new ServicesOverviewRO.ServiceDetail();
|
|
newSr.StartDate = new DateTime(pRO.StartDate.Year, pRO.StartDate.Month, i);
|
|
day2Detail.Add(i, newSr);
|
|
}
|
|
result.Add(day2Detail[i]);
|
|
day2Detail[i].ServiceDescription = String.Format("{0:dddd dd.MM.}", day2Detail[i].StartDate);
|
|
day2Detail[i].ServiceCategory = String.Format("{0:00}", i);
|
|
}
|
|
|
|
result = result.OrderBy(r => r.ServiceCategory).ToList();
|
|
|
|
//int uebertragPos = 0;
|
|
//int index = 1;
|
|
//foreach (var item in result)
|
|
//{
|
|
// if (item.ServiceDescription == "Übertrag:")
|
|
// {
|
|
// uebertragPos = index;
|
|
// }
|
|
// index++;
|
|
//}
|
|
|
|
//var haelfte = Math.Ceiling(result.Count / 2m);
|
|
//if (uebertragPos <= haelfte)
|
|
//{
|
|
// //fülle vorne Leerpositionen auf
|
|
// while (uebertragPos <= haelfte)
|
|
// {
|
|
// var newSr = new ServicesOverviewRO.ServiceDetail();
|
|
|
|
// newSr.ServiceCategory = String.Format("16z{0:00}", haelfte);
|
|
// result.Add(newSr);
|
|
// uebertragPos++;
|
|
// }
|
|
//}
|
|
//else if (uebertragPos > haelfte + 1)
|
|
//{
|
|
// while (uebertragPos > haelfte + 1)
|
|
// {
|
|
// //fülle hinten eine Leerposition auf
|
|
// var newSr = new ServicesOverviewRO.ServiceDetail();
|
|
// newSr.ServiceCategory = "zzz";
|
|
// result.Add(newSr);
|
|
// uebertragPos--;
|
|
// }
|
|
//}
|
|
//var mod = result.Count % 2;
|
|
//if (mod > 0) // nicht durch 2 teilbar also füge einen Leerdummy ein, damit die Tabelle auf zwei Spalten aufgeteilt werden kann.
|
|
//{
|
|
// var newSr = new ServicesOverviewRO.ServiceDetail();
|
|
// newSr.ServiceCategory = "zzz";
|
|
// result.Add(newSr);
|
|
|
|
//}
|
|
|
|
return result.OrderBy(r => r.ServiceCategory).ToList();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
} |