125 lines
4.0 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|