163 lines
6.5 KiB
C#
163 lines
6.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using BeWo.Data.Access;
|
|
using BeWo.Data.Entities;
|
|
using BeWo.Service.DCEntityMapper;
|
|
using BeWo.Service.Invoicing;
|
|
using BeWo.Service.Plugins;
|
|
using BS.Shared;
|
|
using BS.Shared.Core;
|
|
using BS.Shared.DataContracts;
|
|
using BS.Shared.Extensions;
|
|
using BS.Shared.Services;
|
|
using DevExpress.Data.Helpers;
|
|
|
|
namespace TeamPfeil.Invoicing
|
|
{
|
|
public class CustomInvoiceCreation : InvoiceCreation
|
|
{
|
|
// Noch die Prüfung auf Übererbringung wieder einfügen
|
|
|
|
public override void SetInvoiceId(ServiceInvoice invoice)
|
|
{
|
|
invoice.InvoiceBase.InvoiceId = "Qualifikation";
|
|
invoice.InvoiceBase.InvoiceTypeText = "RechnungQualifikation";
|
|
}
|
|
|
|
public override void SetInvoiceItems(ServiceInvoice invoice,
|
|
ServiceInvoicePeriod serviceInvoicePeriod,
|
|
SupportConceptApprovalPeriodDC supportConceptApprovalPeriod,
|
|
CostBearer2SupportConcept cb2sc,
|
|
DateTimeSpan invoicePeriod,
|
|
List<ServiceRecordDC> serviceRecords)
|
|
{
|
|
Calculations calc = PluginLoader.FindClass<Calculations>(_SpecificID) ?? Calculations.GetInstance(_SpecificID);
|
|
|
|
List<ServiceRecordDC> serviceRecordsInPeriod = serviceRecords.Where(
|
|
i =>
|
|
{
|
|
bool valid = i.Start.Value.InBetween(serviceInvoicePeriod.Start.Value,
|
|
serviceInvoicePeriod.End.Value, true);
|
|
|
|
if (valid && serviceInvoicePeriod.SupportConceptApprovalPeriod != null && serviceInvoicePeriod.SupportConceptApprovalPeriod.ServiceCategory != null)
|
|
valid = serviceInvoicePeriod.SupportConceptApprovalPeriod.ServiceCategory.Oid ==
|
|
i.ServiceDescription.Category.ServiceCategoryOid;
|
|
return valid;
|
|
}).ToList();
|
|
|
|
if (serviceRecordsInPeriod.Count > 0)
|
|
{
|
|
var absenceTimes = MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDCs(cb2sc.SupportConcept.Customer.AbsenceTimes);
|
|
Dictionary<DateTimeSpan, decimal> span2Hours = calc.GetAbsencesTimesNotBillable(absenceTimes);
|
|
|
|
serviceInvoicePeriod.HoursNotBillableAbsence +=
|
|
calc.GetHoursNotBillableDueToAbsenceTimes(supportConceptApprovalPeriod,
|
|
cb2sc.CostBearer.CostRatePeriods.MapToNewDCs(),
|
|
serviceRecordsInPeriod,
|
|
span2Hours,
|
|
true, true);
|
|
|
|
var itemList = CreateInvoiceItems(serviceRecordsInPeriod, invoicePeriod, serviceInvoicePeriod.SupportConceptApprovalPeriod, calc);
|
|
serviceInvoicePeriod.InvoiceItemList.AddRange(itemList);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public override InvoiceItem CreateInvoiceItem(ServiceRecordDC iServiceRecord, SupportConceptApprovalPeriod scap, Calculations calc)
|
|
{
|
|
var invoiceItem = new InvoiceItem();
|
|
//Dictionary<long, string> empQuali = new Dictionary<long, string>();
|
|
|
|
|
|
BillingData bd = calc.GetBillingData(iServiceRecord);
|
|
|
|
decimal stundensatz = 0;
|
|
var qOid = iServiceRecord.Employee.ValueListEntries
|
|
.Where(i => i.Value == ValueListEntryType.StaffQualificationsType)
|
|
.Select(i => i.Key)
|
|
.ToList();
|
|
foreach (var qualiOid in qOid)
|
|
{
|
|
stundensatz = GetStundensatz(scap.CostBearer2SupportConcept, qualiOid, iServiceRecord.Start);
|
|
if (qualiOid == 2118) //477)
|
|
{
|
|
invoiceItem.ItemDescription = "Qualifikationsniveau 1";
|
|
}
|
|
else if (qualiOid == 2119) //478)
|
|
{
|
|
invoiceItem.ItemDescription = "Qualifikationsniveau 2";
|
|
}
|
|
else if (qualiOid == 2120)
|
|
{
|
|
invoiceItem.ItemDescription = "Qualifikationsniveau 3";
|
|
}
|
|
if (qualiOid == 2121)
|
|
{
|
|
invoiceItem.ItemDescription = "Qualifikationsniveau 4";
|
|
}
|
|
}
|
|
|
|
if (stundensatz != 0)
|
|
{
|
|
invoiceItem.AmountPerUnit = stundensatz;
|
|
invoiceItem.AmountTotal = stundensatz * bd.UnitCount;
|
|
invoiceItem.GrossAmountTotal = stundensatz * bd.UnitCount;
|
|
}
|
|
else
|
|
{
|
|
invoiceItem.AmountPerUnit = bd.AmountPerUnit;
|
|
invoiceItem.AmountTotal = bd.AmountTotal;
|
|
invoiceItem.GrossAmountTotal = bd.GrossAmountTotal;
|
|
invoiceItem.ItemDescription = iServiceRecord.ServiceDescription.Name;
|
|
}
|
|
|
|
invoiceItem.UnitCount = bd.UnitCount;
|
|
invoiceItem.ItemPeriodStart = bd.BillingPeriodStart;
|
|
invoiceItem.ItemPeriodEnd = bd.BillingPeriodEnd;
|
|
invoiceItem.RateFactor = bd.RateFactor;
|
|
invoiceItem.AccountingInterval = bd.AccountingInterval;
|
|
//iServiceRecord.Employee + " - " + iServiceRecord.ServiceDescription.Name;
|
|
invoiceItem.ServiceRecord = DAOFactory.GenericDAO.LoadByID<ServiceRecord>(iServiceRecord.ServiceRecordOid.Value);
|
|
|
|
return invoiceItem;
|
|
}
|
|
|
|
private decimal GetStundensatz(CostBearer2SupportConcept c2s, long vleOid, DateTime? date)
|
|
{
|
|
|
|
if (c2s.CostBearer.CostRatePeriods != null)
|
|
{
|
|
//Valuelistentryoid:
|
|
//2118 Q 1 Sozialpädagoge
|
|
//2119 Q 2 Fachkraft
|
|
//2120 Qualifizierte Hilfskraft
|
|
//2121 Unqualifiziert Hilfskraft
|
|
|
|
var crpList = MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(c2s.CostBearer.CostRatePeriods);
|
|
var cp = crpList.GetCostRatePeriodForDate(CostRatePeriodType.HourlyRate, (DateTime)date, vleOid);
|
|
|
|
if (cp != null && cp.CostRateValue.HasValue)
|
|
{
|
|
return cp.CostRateValue.Value;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public override string GetSummaryItemKey(SupportConceptApprovalPeriod scap, InvoiceItem iitem, bool summaryPerMonth)
|
|
{
|
|
String key = String.Format("{0}_{1}", iitem.AmountPerUnit, iitem.ItemDescription);
|
|
if (summaryPerMonth)
|
|
{
|
|
key = String.Format("{0}_{1}_{2:yyyyMM}", iitem.AmountPerUnit, iitem.ItemDescription, iitem.ItemPeriodStart);
|
|
}
|
|
|
|
return key;
|
|
}
|
|
}
|
|
}
|