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 BS.Shared; using BS.Shared.Core; using BS.Shared.DataContracts; using BS.Shared.DataContracts.Compact; using BS.Shared.Extensions; using BS.Shared.Services; namespace PsychosozialeProjekteSaarpfalz.Invoicing { public class CustomInvoiceCreation : InvoiceCreation { private DateTime? accountingPeriodStart = null; private DateTime? accountingPeriodEnd = null; private decimal AMOUNT_PER_KM1 = 6.12m; private decimal AMOUNT_PER_KM2 = 8.58m; public override void SetInvoiceBaseData(int invoiceCounter, ServiceInvoice invoice, CostBearer costBearer, DateTimeSpan invoicePeriod, IList supportConceptList) { if (invoicePeriod != null) { accountingPeriodStart = invoicePeriod.StartDate; accountingPeriodEnd = invoicePeriod.EndDate; } base.SetInvoiceBaseData(invoiceCounter, invoice, costBearer, invoicePeriod, supportConceptList); } public override void SetInvoiceId(ServiceInvoice invoice) { invoice.InvoiceBase.InvoiceId = "Sozio"; invoice.InvoiceBase.InvoiceTypeText = "Soziotherapie"; } public override void SetServiceInvoicePeriods(ServiceInvoice invoice, CostBearer2SupportConcept c2s, DateTimeSpan invoicePeriod, List serviceRecords) { base.SetServiceInvoicePeriods(invoice, c2s, invoicePeriod, serviceRecords); } public override IList CreateInvoiceItems(List serviceRecordsInPeriod, DateTimeSpan invoicePeriod, SupportConceptApprovalPeriod scap, Calculations calc) { var preise = DAOFactory.GenericDAO.GetAllActive(); var pauschVar = GetPreis(preise, "Fahrtpauschale 1", (DateTime)accountingPeriodStart); if (pauschVar != 0) { AMOUNT_PER_KM1 = pauschVar; } pauschVar = 0; pauschVar = GetPreis(preise, "Fahrtpauschale 2", (DateTime)accountingPeriodStart); if (pauschVar != 0) { AMOUNT_PER_KM2 = pauschVar; } var list = base.CreateInvoiceItems(serviceRecordsInPeriod, invoicePeriod, scap, calc); return list; } public override InvoiceItem CreateInvoiceItem(ServiceRecordDC iServiceRecord, SupportConceptApprovalPeriod scap, Calculations calc) { //if (!iServiceRecord.ServiceDescription.CategoryName.ToLower().Contains("assistenz")) // return null; var ii = base.CreateInvoiceItem(iServiceRecord, scap, calc); DateTime start = ii.ItemPeriodStart.Value; ii.ApprovedPerUnit= iServiceRecord.RoundedDuration; ii.ItemPeriodStart = iServiceRecord.Start; if (iServiceRecord.DistanceInMeter.HasValue && iServiceRecord.DistanceInMeter > 0) { if (iServiceRecord.DistanceInMeter <= 15) { ii.UnitDescription = String.Format("{0:0.00 €}", AMOUNT_PER_KM1); ii.GrossAmountTotal += AMOUNT_PER_KM1; } else if (iServiceRecord.DistanceInMeter > 15) { ii.UnitDescription = String.Format("{0:0.00 €}", AMOUNT_PER_KM2); ii.GrossAmountTotal += AMOUNT_PER_KM2; } } return ii; } public override IList CreateSummaryInvoiceItems(IList itemList, DateTimeSpan invoicePeriod, SupportConceptApprovalPeriod scap, Calculations calc) { return itemList; } private static decimal GetPreis(IList allePreise, String name, DateTime datum) { var pausch = allePreise.Where(p => p.Name.Contains(name)).FirstOrDefault(); if (pausch != null) { var crlist = MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(pausch.CostRatePeriods); var cr = crlist.GetCostRatePeriodForDate(CostRatePeriodType.AmountOfMoney, datum); if (cr != null && cr.CostRateValue.HasValue) { return cr.CostRateValue.Value; } } return 0; } } }