Files
BeWoPlaner/ReportImp/CaritasverbandDuerenJuelichEV/CustomReportCreator.cs

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;
}
}
}