DomizielAnsbach/Invoicing/InvoiceHelper und Anpassungen ZV

This commit is contained in:
2024-01-23 12:06:15 +01:00
parent 6342c0f6f7
commit ef4195cb4c
5 changed files with 41 additions and 39 deletions

View File

@@ -17,10 +17,8 @@ namespace DomizielAnsbach.Invoicing
{
public static IList<InvoiceItem> BerechneRechnungsPositionenFuerStationaer(DateTimeSpan invoicePeriod, SupportConceptApprovalPeriod scap)
{
IList<InvoiceItem> ergebnis = new List<InvoiceItem>();
var customer = scap.CostBearer2SupportConcept.SupportConcept.Customer;
DateTime start;
DateTime ende;
if (scap.StartDate <= invoicePeriod.StartDate)
@@ -33,11 +31,9 @@ namespace DomizielAnsbach.Invoicing
ende = (DateTime)scap.EndDate.Value.AddDays(-1); //Auszugstag wird NICHT abgerechnet
var preise = DAOFactory.GenericDAO.GetAllActive<Preis>();
var tagessatz = GetPreis(preise, "Tagessatz stationär", start);
var freihalte = GetPreis(preise, "Platzfreihaltegebühr", start);
while (start <= ende)
{
DateTime monatStart = start; //new DateTime(start.Year, start.Month, 1);
@@ -57,30 +53,30 @@ namespace DomizielAnsbach.Invoicing
DateTime? startAbw = at.Start;
DateTime? endAbw = at.End;
//18.04.2023: Frau Sachsenhauser sagt, jeder Tag Abwesenheit muss mit Platzfreihaltepauschale bezahlt werden
//if (at.Start.HasValue && at.End.HasValue && at.End.Value.Date.Subtract(at.Start.Value.Date).TotalDays > 0)
//{
// endAbw = at.End.Value.AddDays(-1);
//}
if (startAbw.HasValue && startAbw.Value < monatEnde && (!endAbw.HasValue || endAbw.Value >= monatStart))
if (at.Start.HasValue && at.End.HasValue && at.End.Value.Date.Subtract(at.Start.Value.Date).TotalDays > 2)
{
DateTime abwStart = at.Start.Value;
if (start > abwStart)
{
abwStart = start;
}
endAbw = at.End.Value.AddDays(-1);
DateTime abwEnd = monatEnde.AddDays(-1);
if (endAbw.HasValue && endAbw < monatEnde)
if (startAbw.HasValue && startAbw.Value < monatEnde && (!endAbw.HasValue || endAbw.Value >= monatStart)
&& !at.AbsenceReason.Description.Contains("ZV") && !at.AbsenceReason.Description.Contains("Urlaub stationär im Haus"))
{
abwEnd = endAbw.Value;
}
DateTime abwStart = at.Start.Value;
if (start > abwStart)
{
abwStart = start;
}
DateTime dt = abwStart;
while (dt <= abwEnd)
{
tageAbwesendImMonat++;
dt = dt.AddDays(1);
DateTime abwEnd = monatEnde.AddDays(-1);
if (endAbw.HasValue && endAbw < monatEnde)
{
abwEnd = endAbw.Value;
}
DateTime dt = abwStart;
while (dt <= abwEnd)
{
tageAbwesendImMonat++;
dt = dt.AddDays(1);
}
}
}
}
@@ -127,12 +123,10 @@ namespace DomizielAnsbach.Invoicing
private static decimal GetPreis(IList<Preis> allePreise, String name, DateTime datum)
{
var tagessatz = allePreise.Where(p => p.Name.Contains(name)).FirstOrDefault();
if (tagessatz != null)
{
var crlist = MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(tagessatz.CostRatePeriods);
var cr = crlist.GetCostRatePeriodForDate(CostRatePeriodType.AmountOfMoney, datum);
if (cr != null && cr.CostRateValue.HasValue)
{
@@ -146,12 +140,12 @@ namespace DomizielAnsbach.Invoicing
private static string GetAbwesenheiten(Customer c, DateTime start, DateTime end)
{
StringBuilder sb = new StringBuilder();
if (c.AbsenceTimes != null)
{
foreach (var at in c.AbsenceTimes)
{
if ((!at.Start.HasValue || at.Start.Value <= end) && (!at.End.HasValue || at.End.Value >= start))
if ((!at.Start.HasValue || at.Start.Value <= end) && (!at.End.HasValue || at.End.Value >= start)
&& !at.AbsenceReason.Description.Contains("ZV") && !at.AbsenceReason.Description.Contains("Urlaub stationär im Haus"))
{
if (sb.Length > 0)
{

View File

@@ -19,8 +19,6 @@ namespace DomizielAnsbach.Invoicing
{
//private const decimal TAGESPAUSCHALE = 129.55m;
//private const decimal FREIHALTEGEBUEHR = 103.64m;
private DateTime? accountingPeriodStart = null;
private DateTime? accountingPeriodEnd = null;
@@ -95,10 +93,7 @@ namespace DomizielAnsbach.Invoicing
public override IList<InvoiceItem> CreateInvoiceItems(List<ServiceRecordDC> serviceRecordsInPeriod, DateTimeSpan invoicePeriod, SupportConceptApprovalPeriod scap,
Calculations calc)
{
return InvoiceHelper.BerechneRechnungsPositionenFuerStationaer(invoicePeriod, scap);
}
}
}
}

View File

@@ -85,8 +85,7 @@ namespace DomizielAnsbach.Invoicing
stundensatz = 0;
tagessatz = 0;
var reason = at.AbsenceReason.Description.Substring(5);
if (reason.Contains("Urlaub") || reason.Contains("Feiertag") || reason.Contains("Krank")
|| reason.Contains("entschuldigt") || reason.Contains("unentschuldigt"))
if (reason.Contains("Urlaub") || reason.Contains("Feiertag") || reason.Contains("Krank"))
{
var std = GetFeiertagsstunden(customer.Arbeitszeiten, customer, tag);
if (std > 0)
@@ -107,8 +106,7 @@ namespace DomizielAnsbach.Invoicing
uCount += 1;
}
else if ((reason.Contains("Krank") || reason.Contains("entschuldigt") || reason.Contains("unentschuldigt"))
&& (pausch.krank != 0 || pausch.krankMot))
else if (reason.Contains("Krank") && (pausch.krank != 0 || pausch.krankMot))
{
decimal kranktage = 0;
if (pausch.anzKrank != 0)

View File

@@ -100,7 +100,8 @@ namespace DomizielAnsbach
{
foreach (var at in c.AbsenceTimes)
{
if ((!at.Start.HasValue || at.Start.Value <= end) && (!at.End.HasValue || at.End.Value >= start))
if ((!at.Start.HasValue || at.Start.Value <= end) && (!at.End.HasValue || at.End.Value >= start)
&& !at.AbsenceReason.Description.Contains("ZV") && !at.AbsenceReason.Description.Contains("Urlaub stationär im Haus"))
{
if (sb.Length > 0)
{

View File

@@ -80,6 +80,10 @@ namespace DomizielAnsbach
var ro = new FinanceRO.SupportConceptFinanceRO();
ro.CustomerName = sc.CustomerName;
if (ro.CustomerName.Contains("Dauer"))
{
int tuao = 1;
}
ro.CostBearerName = sc.CostBearerName;
rowOrder += 1;
ro.RateFactor = rowOrder;
@@ -92,6 +96,11 @@ namespace DomizielAnsbach
ro.ApprovedHours = GetVertraglicheZeit(c, periodEnd, monthStart);
}
if (ro.ApprovedHours == 0 && sc.Costbearer2Supportconcept.EndDate < monthEnd)
{
break;
}
ro.Custom1 = String.Format("{0:dd.MM.yyyy}", monthStart);
if (periodEnd != DateTime.MinValue && periodEnd != monthEnd || monthStart != new DateTime(monthEnd.Year, monthEnd.Month, 1))
@@ -124,6 +133,11 @@ namespace DomizielAnsbach
{
monthStart = krankEnd.AddDays(1);
periodEnd = monthEnd;
if (monthStart == monthEnd.AddDays(1))
{
periodEnd = monthEnd.AddMonths(1);
m++;
}
}
else if ((periodEnd == DateTime.MinValue || periodEnd == monthEnd) && monthEnd == end)
{