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

118 lines
4.5 KiB
C#
Raw Normal View History

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<CompactSupportConceptDC> 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<ServiceRecordDC> serviceRecords)
{
base.SetServiceInvoicePeriods(invoice, c2s, invoicePeriod, serviceRecords);
}
public override IList<InvoiceItem> CreateInvoiceItems(List<ServiceRecordDC> serviceRecordsInPeriod, DateTimeSpan invoicePeriod, SupportConceptApprovalPeriod scap, Calculations calc)
{
var preise = DAOFactory.GenericDAO.GetAllActive<Preis>();
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<InvoiceItem> CreateSummaryInvoiceItems(IList<InvoiceItem> itemList, DateTimeSpan invoicePeriod, SupportConceptApprovalPeriod scap, Calculations calc)
{
return itemList;
}
private static decimal GetPreis(IList<Preis> 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;
}
}
}