using System; using System.Collections.Generic; using System.Linq; using System.Text; using BeWo.Data.Access; using BeWo.Data.Entities; using BeWo.Report; using BeWo.Report.ReportObjects; using DevExpress.XtraReports.UI; namespace RatPlusTat { public class RatPlusTatReportCreator : DefaultReportCreator { public override XtraReport CreateSettlementReport(string dcId, long? invoiceBaseOid) { return base.CreateSettlementReport(dcId, invoiceBaseOid, true); } //die meisten Klienten sind beim LVR und weiteren Kostenträgern - dort werden verschiedene QBelege pro Leistungskategorie benötigt // -> es werden für jeden Kunden alle möglichen QBelege erstellt und hintereinandergefügt public override XtraReport CreateServiceOverviewAllCustomersReport(int month, int year, long orgaOid, long empOid, long? serviceCategoryOid, int startDay, int endDay, bool nurFehlende) { List lROs = ServicesOverviewRO.Create(month, year, orgaOid, empOid, startDay, endDay, serviceCategoryOid); if (lROs.Count > 0) { var rootReport = CreateServicesOverviewReportForRo(lROs[0], serviceCategoryOid); if (rootReport.Pages.Count == 0) rootReport.CreateDocument(); for (int i = 1; i < lROs.Count; i++) { var lNext = CreateServicesOverviewReportForRo(lROs[i], serviceCategoryOid); if (lNext.Pages.Count == 0) lNext.CreateDocument(); rootReport.Pages.AddRange(lNext.Pages); } return rootReport; } return new XtraReport(); } public override XtraReport CreateServiceOverviewSingleCustomerReport(long customerOid, int month, int year, long orgaOid, long empOid, long? serviceCategoryOid, int startDay, int endDay) { var ro = ServicesOverviewRO.Create(customerOid, month, year, false, orgaOid, empOid, startDay, endDay, serviceCategoryOid); return CreateServicesOverviewReportForRo(ro, serviceCategoryOid); } public override XtraReport CreateReportForServicesOverviewRo(ServicesOverviewRO ro, string reportId) { return CreateServicesOverviewReportForRo(ro, null); } private XtraReport CreateServicesOverviewReportForRo(ServicesOverviewRO ro, long? serviceCategoryOid) { ServiceCategory sc = serviceCategoryOid != null ? DAOFactory.GenericDAO.GetByID(serviceCategoryOid.Value) : null; XtraReport report = null; ServicesOverviewRO bewoRo = ServicesOverviewRO.CopyFromRO(ro); ServicesOverviewRO betreuungRo = ServicesOverviewRO.CopyFromRO(ro); ServicesOverviewRO selbstRo = ServicesOverviewRO.CopyFromRO(ro); ServicesOverviewRO umwandlungRo = ServicesOverviewRO.CopyFromRO(ro); ServicesOverviewRO verhinderungRo = ServicesOverviewRO.CopyFromRO(ro); ServicesOverviewRO assistenzRo = ServicesOverviewRO.CopyFromRO(ro); bewoRo.TotalFLMBillable = 0; betreuungRo.TotalFLMBillable = 0; selbstRo.TotalFLMBillable = 0; umwandlungRo.TotalFLMBillable = 0; verhinderungRo.TotalFLMBillable = 0; assistenzRo.TotalFLMBillable = 0; bewoRo.TotalFLS = 0; betreuungRo.TotalFLS = 0; selbstRo.TotalFLS = 0; umwandlungRo.TotalFLS = 0; verhinderungRo.TotalFLS = 0; assistenzRo.TotalFLS = 0; if (ro.Services != null) { foreach (ServicesOverviewRO.ServiceDetail s in ro.Services) { if (s.CostBearer.ToLower().Contains("lvr") && !s.ServiceCategory.ToLower().Contains("assistenz")) { bewoRo.Services.Add(s); bewoRo.TotalFLMBillable += s.Minutes; bewoRo.TotalFLS += s.Minutes/60; } else if (!s.CostBearer.ToLower().Contains("lvr") && s.ServiceCategory.ToLower().Contains("betreuung")) { betreuungRo.Services.Add(s); betreuungRo.TotalFLMBillable += s.Minutes; betreuungRo.TotalFLS += s.Minutes/60; } else if (!s.CostBearer.ToLower().Contains("lvr") && s.ServiceCategory.ToLower().Contains("umwandlung")) { umwandlungRo.Services.Add(s); umwandlungRo.TotalFLMBillable += s.Minutes; umwandlungRo.TotalFLS += s.Minutes / 60; } else if (!s.CostBearer.ToLower().Contains("lvr") && s.ServiceCategory.ToLower().Contains("verhinderung")) { verhinderungRo.Services.Add(s); verhinderungRo.TotalFLMBillable += s.Minutes; verhinderungRo.TotalFLS += s.Minutes / 60; } else if (s.CostBearer.ToLower().Contains("lvr") && s.ServiceCategory.ToLower().Contains("assistenz")) { assistenzRo.Services.Add(s); assistenzRo.TotalFLMBillable += s.Minutes; assistenzRo.TotalFLS += s.Minutes / 60; } else if (s.ServiceCategory.ToLower().Contains("selbst")) { selbstRo.Services.Add(s); selbstRo.TotalFLMBillable += s.Minutes; selbstRo.TotalFLS += s.Minutes / 60; } } } //report = AddReportToReport(report, bewoRo); //report.Pages.AddRange(AddReportToReport(report, betreuungRo).Pages); //report.Pages.AddRange(AddReportToReport(report, selbstRo).Pages); //report.Pages.AddRange(AddReportToReport(report, umwandlungRo).Pages); //report.Pages.AddRange(AddReportToReport(report, verhinderungRo).Pages); //report.Pages.AddRange(AddReportToReport(report, assistenzRo).Pages); report = AddReportToReport(report, bewoRo); report = AddReportToReport(report, betreuungRo); report = AddReportToReport(report, selbstRo); report = AddReportToReport(report, umwandlungRo); report = AddReportToReport(report, verhinderungRo); report = AddReportToReport(report, assistenzRo); if (report == null) report = new XtraReport(); return report; } private XtraReport AddReportToReport(XtraReport report, ServicesOverviewRO ro) where T : XtraReport, IBeWoReport, new() { if (ro.Services.Count > 0) { if (report == null) { report = new T(); ((T)report).SetReportDataSource(ro); } else { if (report.Pages.Count == 0) { report.CreateDocument(); } XtraReport newReport = new T(); ((T)newReport).SetReportDataSource(ro); newReport.CreateDocument(); report.Pages.AddRange(newReport.Pages); } } return report; } } }