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 serviceRecords) { Calculations calc = PluginLoader.FindClass(_SpecificID) ?? Calculations.GetInstance(_SpecificID); List 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 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 empQuali = new Dictionary(); 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(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; } } }