Merge branch 'master' of ssh://float.ownsoft.de/git/beyondSoft/BeWo

This commit is contained in:
2026-06-12 13:52:55 +02:00
3 changed files with 68 additions and 89 deletions

View File

@@ -91,25 +91,38 @@ namespace HshCologne.Export
{
String sql = @"
select
SUM(sip.Claim),
org.DebitorNumber,
ib.InvoiceDate,
ib.invoicenumber,
SUBSTRING_INDEX(org.Name2, ';', 1) AS JA,
SUBSTRING_INDEX(org.Name2, ';', -1) AS BTxt,
ib.Oid
FROM
invoicebase ib
inner join serviceinvoice si on si.invoicebaseoid = ib.oid
inner join serviceinvoiceperiod sip on sip.serviceinvoiceoid = si.oid
inner join costbearer cb on ib.recipientcostbeareroid = cb.oid
inner join organisation org on org.costbeareroid = cb.oid
WHERE ib.InvoiceDate >= ':Monat_Start' AND ib.InvoiceDate < ':Monat_End' and ib.IsActive = 1 AND ib.`IsExported` = 0
GROUP BY ib.Oid
order by ib.invoicenumber
";
SELECT * FROM
(SELECT
SUM(sip.Claim),
org.DebitorNumber,
ib.InvoiceDate,
ib.invoicenumber,
SUBSTRING_INDEX(org.Name2, ';', 1) AS JA,
SUBSTRING_INDEX(org.Name2, ';', -1) AS BTxt,
ib.Oid
FROM
invoicebase ib
inner join serviceinvoice si on si.invoicebaseoid = ib.oid
inner join serviceinvoiceperiod sip on sip.serviceinvoiceoid = si.oid
inner join costbearer cb on ib.recipientcostbeareroid = cb.oid
inner join organisation org on org.costbeareroid = cb.oid
WHERE ib.InvoiceDate >= ':Monat_Start' AND ib.InvoiceDate < ':Monat_End' and ib.IsActive = 1 AND ib.`IsExported` = 0
GROUP BY ib.Oid
UNION
SELECT
sum(ii.AmountTotal),
org.DebitorNumber,
ib.InvoiceDate,
ib.invoicenumber,
SUBSTRING_INDEX(org.Name2, ';', 1) AS JA,
SUBSTRING_INDEX(org.Name2, ';', -1) AS BTxt,
ib.Oid
FROM invoicebase ib
INNER JOIN organisation org ON org.costbeareroid = ib.RecipientOrganisationOid
INNER JOIN invoiceitem ii ON ii.invoicebaseoid = ib.Oid
WHERE ib.InvoiceDate >= ':Monat_Start' AND ib.InvoiceDate < ':Monat_End' AND ib.IsActive = 1 AND ib.`IsExported` = 0 and ib.Type = 2) qry
ORDER BY qry.invoicenumber
";
return sql;
}

View File

@@ -14,21 +14,23 @@ namespace LebenshilfeBadKreuznach.Statistics
{
public class CustomServiceRecordStatisticFactory : ServiceRecordStatisticFactory
{
// Bei der LH Bad Kreuznach sollen die Stunden pro Quartal hochgerechnet werden. Die Formel ist wöchentliche Stunden * 4.33 pro Monat und dann mal 3 fürs Quartal.
// Die bewilligten Stunden pro Quartal werden in der Klasse in MinutesApprovedPerMonth gespeichert, die geleisteten in MinutesProvidedThisMonth
// Bei der LH Bad Kreuznach sollen die Stunden pro Quartal hochgerechnet werden. Die Formel ist wöchentliche Stunden * 4.33 pro Monat
// Bis 30.06.2026 dann nochmal 3 fürs Quartal.
public override ServiceRecordStatisticsInfoDC GetServiceRecordStatisticInfo(long costBearer2SupportConceptOid, DateTime statisticsDate)
{
var stats = CreateSupportConceptStatisticsImpl(costBearer2SupportConceptOid, statisticsDate);
var dc = new ServiceRecordStatisticsInfoDC();
dc.Header = new string[4];
dc.Header[0] = "Bewilligungszeitraum:";
dc.Header[1] = "Geleistet diese Woche/im Quartal:";
dc.Header[2] = "Bewilligt diese Woche/im Quartal:";
dc.Header[3] = "Frei pro Woche(Ø)/im Quartal:";
//dc.Header[1] = "Geleistet diese Woche/im Quartal:";
//dc.Header[2] = "Bewilligt diese Woche/im Quartal:";
//dc.Header[3] = "Frei pro Woche(Ø)/im Quartal:";
// AB: Bitte oben löschen und das hier einkommentieren
dc.Header[1] = "Geleistet diese Woche/im Monat:";
dc.Header[2] = "Bewilligt diese Woche/im Monat:";
dc.Header[3] = "Frei pro Woche(Ø)/im Monat:";
dc.ForegroundColor = new string[4];
dc.ForegroundColor[0] = "#FF2B508B";
@@ -38,12 +40,8 @@ namespace LebenshilfeBadKreuznach.Statistics
dc.PeriodStatisticInfos = new List<ServiceRecordPeriodStatisticsInfoDC>();
if (stats != null)
{
//if (stats.PeriodStatistics.Count > 1 && !TimeSpanIsEqual(stats))
// dc.PeriodStatisticInfos.Add(CreateTotalStatistics(stats, statisticsDate));
foreach (var pdc in stats.PeriodStatistics)
{
dc.PeriodStatisticInfos.Add(CreateServiceRecordPeriodStatisticsInfo(stats, pdc, statisticsDate));
@@ -53,24 +51,6 @@ namespace LebenshilfeBadKreuznach.Statistics
return dc;
}
//public ServiceRecordPeriodStatisticsInfoDC CreateTotalStatistics(SupportConceptStatisticsDC stats, DateTime statisticsDate)
//{
// var dc = CreateDefaultServiceRecordPeriodStatisticsInfo(4);
// dc.LeftValues[0] = "Gesamt";
// dc.LeftValues[1] = String.Format("{0:0.00}", stats.MinutesProvidedThisMonth / 60);
// dc.RightValues[1] = String.Format("{0:0.00}", stats.MinutesProvidedTotalRounded / 60);
// dc.LeftValues[2] = String.Format("{0:0.00}", stats.MinutesApprovedPerMonth / 60);
// dc.RightValues[2] = String.Format("{0:0.00}", stats.MinutesApprovedTotal / 60);
// dc.LeftValues[3] = String.Format("{0:0.00}", (stats.MinutesApprovedPerMonth - stats.MinutesProvidedThisMonth) / 60);
// dc.RightValues[3] = String.Format("{0:0.00}", (stats.MinutesApprovedTotal - stats.MinutesProvidedTotalRounded) / 60);
// return dc;
//}
public ServiceRecordPeriodStatisticsInfoDC CreateServiceRecordPeriodStatisticsInfo(SupportConceptStatisticsDC stats, SupportConceptPeriodStatisticsDC periodStats, DateTime statisticsDate)
{
var dc = CreateDefaultServiceRecordPeriodStatisticsInfo(4);
@@ -156,42 +136,30 @@ namespace LebenshilfeBadKreuznach.Statistics
minutesProvidedQuartalOld = periodStats.MinutesProvidedThisMonth;
minutesProvidedWeekOld = periodStats.MinutesProvidedThisWeek;
}
base.ProcessServiceRecord(sr, cb2sc, stats, statisticsDate, calc);
base.ProcessServiceRecord(sr, cb2sc, stats, statisticsDate, calc);
//bool billable = false;
//if (sr.ServiceDescription != null && sr.ServiceDescription.ServiceCategory != null)
// AB, die komplette if-Schleife kann weg. Die war fürs Quartal
//if (periodStats != null)
//{
// billable = sr.ServiceDescription.ServiceCategory.IsBillable;
//}
// var srDc = MapToServiceRecordDCForStatistic(sr);
// var minutes = calc.GetBillableDurationInMinutes(srDc, false);
// var firstOfQuarterDt = GetFirstDateOfQuarter(statisticsDate);
if (periodStats != null)
{
var srDc = MapToServiceRecordDCForStatistic(sr);
var minutes = calc.GetBillableDurationInMinutes(srDc, false);
var firstOfQuarterDt = GetFirstDateOfQuarter(statisticsDate);
if (sr.Start >= firstOfQuarterDt && sr.Start < firstOfQuarterDt.AddMonths(3))
{
minutesProvidedQuartalNew = minutes;
}
DateTime mondayDt = statisticsDate.GetLast(DayOfWeek.Monday).Date;
// if (sr.Start >= firstOfQuarterDt && sr.Start < firstOfQuarterDt.AddMonths(3))
// {
// minutesProvidedQuartalNew = minutes;
// }
// DateTime mondayDt = statisticsDate.GetLast(DayOfWeek.Monday).Date;
if (sr.Start >= mondayDt && sr.Start < mondayDt.AddDays(7))
{
minutesProvidedWeekNew = minutes;
}
periodStats.MinutesProvidedThisMonth = minutesProvidedQuartalOld + minutesProvidedQuartalNew;
periodStats.MinutesProvidedThisWeek = minutesProvidedWeekOld + minutesProvidedWeekNew;
}
// if (sr.Start >= mondayDt && sr.Start < mondayDt.AddDays(7))
// {
// minutesProvidedWeekNew = minutes;
// }
// periodStats.MinutesProvidedThisMonth = minutesProvidedQuartalOld + minutesProvidedQuartalNew;
// periodStats.MinutesProvidedThisWeek = minutesProvidedWeekOld + minutesProvidedWeekNew;
//}
}
protected SupportConceptPeriodStatisticsDC GetPeriodFromServiceRecord(CostBearer2SupportConcept cb2sc, List<SupportConceptPeriodStatisticsDC> stats, ServiceRecord sr)
@@ -218,14 +186,12 @@ namespace LebenshilfeBadKreuznach.Statistics
}
return letztePeriod;
}
}
}
return ps;
}
// AB: Kann gelöscht werden:
private DateTime GetFirstDateOfQuarter(DateTime dateTime)
{
var firstOfQuarterDt = new DateTime(dateTime.Year, 1, 1);
@@ -254,7 +220,9 @@ namespace LebenshilfeBadKreuznach.Statistics
{
if (periodStats.SupportConceptApprovalPeriod.ApprovedBEPerInterval.HasValue && periodStats.SupportConceptApprovalPeriod.ApprovedBEInterval.HasValue && periodStats.SupportConceptApprovalPeriod.ApprovedBEInterval.Value == SupportConceptApprovalInterval.Weekly)
{
return periodStats.SupportConceptApprovalPeriod.ApprovedBEPerInterval.Value * 4.33m * 3m * 60m; // Bewilligt pro Woche mal 4.33 (Anzahl Stunden pro Monat laut Frau Ruta) mal 3 Monate fürs Quartal * 60 Minuten
//return periodStats.SupportConceptApprovalPeriod.ApprovedBEPerInterval.Value * 4.33m * 3m * 60m; // Bewilligt pro Woche mal 4.33 (Anzahl Stunden pro Monat laut Frau Ruta) mal 3 Monate fürs Quartal * 60 Minuten
// AB: Bitte oben löschen und das hier einkommentieren
return periodStats.SupportConceptApprovalPeriod.ApprovedBEPerInterval.Value * 4.33m * 60m; // Bewilligt pro Woche mal 4.33 (Anzahl Stunden pro Monat laut Frau Ruta) * 60 Minuten
}
}
return base.GetApprovedMinutesPerMonth(periodStats);

View File

@@ -28,16 +28,14 @@ namespace MalteserJohanniterJohanneshaus.Invoicing
invoice.InvoiceBase.InvoiceTypeText = "RgTSH";
}
// die haben 2 Standorte f<EFBFBD>r TSH, die <EFBFBD>ber Kostenstellen unter Notiz im Hilfeplan identifiziert werden
// Es werden grunds<EFBFBD>tzlich volle Tagess<EFBFBD>tze aus der Verwaltung abgerechnet
// die haben 2 Standorte für TSH, die über Kostenstellen unter Notiz im Hilfeplan identifiziert werden
// Es werden grundsätzlich volle Tagessätze aus der Verwaltung abgerechnet
// alle Abwesenheitstage werden nur mit 75 % berechnet
public override List<ServiceInvoiceDC> GenerateServiceInvoices(long costBearerOid,
DateTimeSpan invoicePeriod,
public override List<ServiceInvoiceDC> GenerateServiceInvoices(long costBearerOid, DateTimeSpan invoicePeriod,
Dictionary<CompactSupportConceptDC, List<ServiceRecordDC>> supportConcepts2ServiceRecords)
{
var costBearer = DAOFactory.GenericDAO.LoadByID<CostBearer>(costBearerOid);
var invoiceList = new List<ServiceInvoice>();
bool isLvr = costBearer.Organisation.Name != null && costBearer.Organisation.Name.Contains("LVR");
if (isLvr)