Files
BeWoPlaner/ReportImp/SKMAachen/Invoicing/CustomInvoiceNumberGenerator.cs

125 lines
4.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics.Eventing.Reader;
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.Services;
namespace SKMAachen.Invoicing
{
internal class CustomInvoiceNumberGenerator : InvoiceNumberGenerator
{
public long oid_ = 1;
public override string GetNextInvoiceNumber(int increment, InvoiceBase invoiceBase)
{
// Rechnungskreise pro Hauptbetreuer, bei neuem Hauptbetreuer wird automatisch ein neuer Kreis zugefügt
// beim Hochzählen den Rechnungsnummer ist es wichtig, dass der Rechnungskreis 3-stellig ist
String next = "";
String maAbb = "";
Customer c = null;
if (invoiceBase.Type == InvoiceType.General && invoiceBase.RecipientCustomerOid.HasValue
|| invoiceBase.Type == InvoiceType.CustomerEquity && invoiceBase.RecipientCustomerOid.HasValue)
{
c = DAOFactory.GenericDAO.LoadByID<Customer>(invoiceBase.RecipientCustomerOid.Value);
}
else if (invoiceBase.CostBearer2SupportConcept != null)
{
c = invoiceBase.CostBearer2SupportConcept.SupportConcept.Customer;
}
if (c != null)
{
var hauptbetreuer = c.Employee2CustomerList.FirstOrDefault(
e2c => e2c.ValueList.Any(ve => ve.Entry.SystemEntryID.HasValue
&& ve.Entry.SystemEntryID.Value == SystemEntryID.EmployeeRoleMainAttendant));
if (hauptbetreuer != null)
{
if (hauptbetreuer.Employee.Person.Abbreviation != null)
{
maAbb = hauptbetreuer.Employee.Person.Abbreviation;
}
else
{
maAbb = String.Format("{0}{1}", hauptbetreuer.Employee.Person.LastName, hauptbetreuer.Employee.Person.FirstName);
}
}
var alleNummern = DAOFactory.GenericDAO.GetAll<InvoiceNumber>();
InvoiceNumber number = null;
foreach (var item in alleNummern)
{
if (item.Notice == maAbb)
{
number = item;
oid_ = item.Oid.Value;
}
}
if (number == null)
{
number = new InvoiceNumber();
number.Notice = maAbb;
number.Pattern = "{MA}{jj}{nnn}";
number.CurrentNumber = 1;
number.Use = true;
DAOFactory.GenericDAO.Insert(number);
}
next = ApplyPatternWithId(number.Pattern, number.CurrentNumber + increment, null);
next = next.Replace("{MA}", maAbb);
}
return next;
}
public override InvoiceNumberDC UpdateInvoiceNumber(InvoiceNumberDC dc)
{
var old = DAOFactory.GenericDAO.LoadByID<InvoiceNumber>(oid_);
MapperFactory.InvoiceNumberDC_InvoiceNumber.MergeWithEntity(dc, old);
DAOFactory.GenericDAO.Update(old);
return MapperFactory.InvoiceNumberDC_InvoiceNumber.MapToNewDC(old);
}
public override InvoiceNumberDC LoadInvoiceNumber()
{
var inr = DAOFactory.GenericDAO.LoadByID<InvoiceNumber>(oid_);
if (inr != null)
return MapperFactory.InvoiceNumberDC_InvoiceNumber.MapToNewDC(inr);
return null;
}
public override void IncreaseInvoiceNumberForServiceInvoices(int count, List<ServiceInvoice> newInvoices)
{
if (count != 0)
{
var alleNummern = DAOFactory.GenericDAO.GetAll<InvoiceNumber>();
foreach (var item in newInvoices)
{
foreach (var num in alleNummern)
{
if (num.Notice == item.InvoiceBase.InvoiceNumber.Substring(0,3))
{
oid_ = num.Oid.Value;
var invoiceNumber = LoadInvoiceNumber();
// die InvoiceNumber, die oben vergeben wird zählt nicht zwangsläufig richtig!!!
item.InvoiceBase.InvoiceNumber = num.Notice + ApplyPatternWithId(invoiceNumber.Pattern.Substring(4), invoiceNumber.CurrentNumber, null);
invoiceNumber.CurrentNumber += 1;
this.UpdateInvoiceNumber(invoiceNumber);
break;
}
}
}
}
}
}
}