96 lines
3.6 KiB
C#
96 lines
3.6 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;
|
|
using Service.Invoicing;
|
|
|
|
namespace AsbRheinErftDuerenSBD.Invoicing
|
|
{
|
|
public class CustomInvoiceCreation : SbdDefaultInvoiceCreation
|
|
{
|
|
|
|
public override IList<InvoiceItem> CreateSbdInvoiceItems(Customer customer, List<ServiceRecordDC> serviceRecordsInPeriod, DateTimeSpan invoicePeriod, SupportConceptApprovalPeriod scap, Calculations calc)
|
|
{
|
|
IList<InvoiceItem> result = new List<InvoiceItem>();
|
|
|
|
//var stundenplanItems = ErstelleStundenplanItems(customer, invoicePeriod.StartDate, invoicePeriod.EndDate);
|
|
|
|
IList<InvoiceItem> srList = new List<InvoiceItem>();
|
|
|
|
foreach (ServiceRecordDC iServiceRecord in serviceRecordsInPeriod)
|
|
{
|
|
if (iServiceRecord.ServiceDescription.Category.IsBillable)
|
|
{
|
|
if (!iServiceRecord.AlreadyAccounted)
|
|
{
|
|
var invoiceItem = CreateInvoiceItem(iServiceRecord, scap, calc);
|
|
invoiceItem.ItemDescription = String.Format("{0} {1}", iServiceRecord.Employee.FirstName, iServiceRecord.Employee.LastName);
|
|
if (iServiceRecord.ServiceDescription.Category.Name.Contains("Sonstige"))
|
|
{
|
|
invoiceItem.ItemDescription += "\n" + iServiceRecord.ServiceDescription.Name;
|
|
|
|
}
|
|
srList.Add(invoiceItem);
|
|
|
|
iServiceRecord.AlreadyAccounted = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
Dictionary<String, bool> dayDict = new Dictionary<String, bool>();
|
|
foreach (var item in srList)
|
|
{
|
|
String key = String.Format("{0:dd.MM.yyyy}", item.ItemPeriodStart);
|
|
|
|
if (!dayDict.ContainsKey(key))
|
|
{
|
|
dayDict.Add(key, true);
|
|
}
|
|
|
|
result.Add(item);
|
|
}
|
|
|
|
|
|
var newList = result.Where(i => i.UnitCount.HasValue && i.UnitCount.Value > 0).OrderBy(i => i.ItemPeriodStart).ToList();
|
|
|
|
return CreateSummaryInvoiceItems(newList, invoicePeriod, scap, calc);
|
|
}
|
|
|
|
public override InvoiceItem CreateInvoiceItem(ServiceRecordDC iServiceRecord, SupportConceptApprovalPeriod scap, Calculations calc)
|
|
{
|
|
var invoiceItem = new InvoiceItem();
|
|
|
|
BillingData bd = calc.GetBillingData(iServiceRecord);
|
|
|
|
|
|
|
|
invoiceItem.AmountPerUnit = bd.AmountPerUnit;
|
|
invoiceItem.UnitCount = (decimal?)Math.Round((double)bd.UnitCount, 2, MidpointRounding.AwayFromZero);
|
|
invoiceItem.AmountTotal = invoiceItem.AmountPerUnit * invoiceItem.UnitCount;
|
|
|
|
invoiceItem.ItemPeriodStart = bd.BillingPeriodStart;
|
|
invoiceItem.ItemPeriodEnd = bd.BillingPeriodEnd;
|
|
invoiceItem.RateFactor = bd.RateFactor;
|
|
invoiceItem.GrossAmountTotal = bd.GrossAmountTotal;
|
|
invoiceItem.AccountingInterval = bd.AccountingInterval;
|
|
invoiceItem.ItemDescription = iServiceRecord.ServiceDescription.Name; //iServiceRecord.Employee + " - " + iServiceRecord.ServiceDescription.Name;
|
|
invoiceItem.ServiceRecord = DAOFactory.GenericDAO.LoadByID<ServiceRecord>(iServiceRecord.ServiceRecordOid.Value);
|
|
if (scap != null)
|
|
invoiceItem.SupportConceptApprovalPeriodOid = scap.Oid;
|
|
|
|
return invoiceItem;
|
|
}
|
|
}
|
|
}
|