Files
BeWoPlaner/ReportImp/TeamPfeil/Invoicing/CustomInvoiceCreation.cs

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;
}
}
}