147 lines
5.6 KiB
C#
147 lines
5.6 KiB
C#
using System.Collections.Generic;
|
|
using BeWo.Data.Access;
|
|
using BeWo.Data.Entities;
|
|
using BeWo.Report;
|
|
using BS.Shared;
|
|
using BS.Shared.Core;
|
|
using DevExpress.XtraReports.UI;
|
|
|
|
namespace CaritasverbandDuerenJuelichEV
|
|
{
|
|
public class CustomReportCreator : DefaultReportCreator
|
|
{
|
|
/// Sammeldruck aus der Rechnungsuebersicht ("Ausgewaehlte drucken"):
|
|
/// An jede Rechnung wird automatisch der Quittierungsbeleg angehaengt - wie beim Einzeldruck "mit Quittierungsbeleg".
|
|
public override XtraReport CreateInvoiceListReport(List<long> oids)
|
|
{
|
|
XtraReport master = null;
|
|
var ibList = DAOFactory.GenericDAO.LoadByIDs<InvoiceBase>(oids);
|
|
|
|
foreach (var ib in ibList)
|
|
{
|
|
XtraReport report = null;
|
|
if (ib.Type == InvoiceType.Service)
|
|
{
|
|
report = CreateServiceInvoiceReport(null, ib.Oid);
|
|
}
|
|
else if (ib.Type == InvoiceType.Settlement)
|
|
{
|
|
report = CreateSettlementReport(null, ib.Oid);
|
|
}
|
|
else
|
|
{
|
|
report = CreateCustomerInvoiceReport(ib.Oid.Value);
|
|
}
|
|
|
|
if (report != null)
|
|
{
|
|
report.Watermark.PageRange = "1";
|
|
if (report.Pages.Count == 0)
|
|
{
|
|
report.CreateDocument();
|
|
}
|
|
|
|
var qb = CreateBelegeForInvoice(ib);
|
|
AddReportPagesToMaster(report, qb);
|
|
if (master == null)
|
|
{
|
|
master = report;
|
|
}
|
|
else
|
|
{
|
|
XRWatermark wm = new XRWatermark();
|
|
wm.CopyFrom(report.Watermark);
|
|
|
|
bool firstpage = true;
|
|
foreach (var item in report.Pages)
|
|
{
|
|
var page2add = item as DevExpress.XtraPrinting.Page;
|
|
if (page2add != null)
|
|
{
|
|
master.Pages.Add(page2add);
|
|
if (firstpage)
|
|
{
|
|
var newpage = master.Pages[master.Pages.Count - 1];
|
|
newpage.AssignWatermark(wm);
|
|
}
|
|
}
|
|
firstpage = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (master == null)
|
|
{
|
|
master = new XtraReport();
|
|
}
|
|
master.PrintingSystem.Document.Name = "Sammeldruck";
|
|
|
|
return master;
|
|
}
|
|
|
|
/// Claude: Anhaengen der Quittierungsbelege an Servicerechnungen:
|
|
/// Pro Employee, der im Abrechnungszeitraum Leistungen erbracht hat, wird ein einzelner
|
|
/// ServicesOverviewReport erstellt und angehangen (statt einem Beleg ueber alle Mitarbeiter).
|
|
/// Gilt NUR fuer das Anhaengen an Servicerechnungen - sowohl im Sammeldruck (CreateInvoiceListReport)
|
|
/// als auch beim Einzeldruck "mit Quittierungsbeleg" (CreateServiceInvoiceReportMitQb der Basisklasse
|
|
/// laeuft ueber diese Methode). Der normale Druck der Leistungsnachweise bleibt unveraendert.
|
|
protected override XtraReport CreateBelegeForInvoice(InvoiceBase invoiceBase)
|
|
{
|
|
if (invoiceBase.Type != InvoiceType.Service
|
|
|| invoiceBase.CostBearer2SupportConcept == null
|
|
|| !invoiceBase.AccountingPeriodStart.HasValue
|
|
|| !invoiceBase.AccountingPeriodEnd.HasValue)
|
|
{
|
|
return base.CreateBelegeForInvoice(invoiceBase);
|
|
}
|
|
|
|
var customerOid = invoiceBase.CostBearer2SupportConcept.SupportConcept.Customer.Oid.Value;
|
|
var start = invoiceBase.AccountingPeriodStart.Value;
|
|
var end = invoiceBase.AccountingPeriodEnd.Value;
|
|
|
|
// Claude: Verschiedene Employees, die im Abrechnungszeitraum Leistungen erbracht haben, ermitteln
|
|
// (gleicher Zeitraum, ueber den auch die einzelnen Belege erstellt werden)
|
|
var span = new DateTimeSpan();
|
|
span.StartDateTime = start.Date;
|
|
span.EndDateTime = end.Date.AddDays(1).AddTicks(-1);
|
|
|
|
var serviceRecords = DAOFactory.SearchDAO.FindCustomerServiceRecords(customerOid, span, null, null, false);
|
|
|
|
var employeeOids = new List<long>();
|
|
foreach (var iSr in serviceRecords)
|
|
{
|
|
if (iSr.EmployeeOid.HasValue
|
|
&& !employeeOids.Contains(iSr.EmployeeOid.Value))
|
|
{
|
|
employeeOids.Add(iSr.EmployeeOid.Value);
|
|
}
|
|
}
|
|
|
|
if (employeeOids.Count == 0)
|
|
{
|
|
return base.CreateBelegeForInvoice(invoiceBase);
|
|
}
|
|
|
|
employeeOids.Sort();
|
|
|
|
// Claude: Pro Employee einen eigenen Beleg erstellen und zu einem Gesamtreport zusammenfuegen
|
|
XtraReport belege = null;
|
|
foreach (var employeeOid in employeeOids)
|
|
{
|
|
var report = CreateServiceOverviewReportNew(QBFilterEnum.KlientenAuswahl, customerOid, null, employeeOid, null, null, start, end, false);
|
|
|
|
if (belege == null)
|
|
{
|
|
belege = report;
|
|
}
|
|
else
|
|
{
|
|
AddReportPagesToMaster(belege, report);
|
|
}
|
|
}
|
|
|
|
return belege;
|
|
}
|
|
}
|
|
}
|