Files
BeWoPlaner/ReportService/ServiceImplementations/ReportServiceImp.cs

315 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.ServiceModel;
using BeWo.Data;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Report;
using BeWo.Report.DefaultReports;
using BeWo.Report.ReportObjects;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using DevExpress.XtraPrinting;
using DevExpress.XtraReports.UI;
using ReportingService.Plugins;
using ReportingService.ServiceContracts;
namespace ReportingService.ServiceImplementations
{
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
public class ReportServiceImp : IReportService
{
public MemoryStream CreateKalenderReport(IEnumerable<long> appointmentOids, long? employeeOid, IEnumerable<SchedulerAppointmentDC> serientermine, IEnumerable<DateTime> selectedDates, IEnumerable<SchedulerAppointmentDC> mehrtaegigeTermine)
{
var reportCreator = GetReportCreator() as DefaultReportCreator;
var reportTemp = reportCreator?.FindReportImp<KalenderRO>() ?? new DailyAppointmentReportKalender();
reportTemp.SetReportDataSource(KalenderRO.Create(appointmentOids, employeeOid, serientermine, selectedDates, mehrtaegigeTermine));
return CreateReportStream(reportTemp as XtraReport);
}
public MemoryStream CreateKalenderReportWithAbsenceTimes(IEnumerable<long> appointmentOids, long? employeeOid, IEnumerable<SchedulerAppointmentDC> serientermine, IEnumerable<DateTime> selectedDates, IEnumerable<SchedulerAppointmentDC> mehrtaegigeTermine, List<long> absenceTimeOids)
{
var reportCreator = GetReportCreator() as DefaultReportCreator;
var reportTemp = reportCreator?.FindReportImp<KalenderRO>() ?? new DailyAppointmentReportKalender();
reportTemp.SetReportDataSource(KalenderRO.CreateWithAbsenceTimes(appointmentOids, employeeOid, serientermine, selectedDates.ToList(), mehrtaegigeTermine, absenceTimeOids));
return CreateReportStream(reportTemp as XtraReport);
}
public MemoryStream CreateKassenbuchReport(DateTime zeitraum, BargeldkassenDC bargeldkasse, long objectOid, TableID objectTid)
{
var beguenstigter = LoadToBargeldkasseRelatedObject(objectTid, objectOid);
return CreateReportStream(new KassenbuchReport(), KassenbuchRO.Create(zeitraum, bargeldkasse, beguenstigter));
}
public MemoryStream CreateKassenbuchReportImZeitraum(DateTime zeitraumStart, DateTime zeitraumEnde, BargeldkassenDC bargeldkasse, long objectOid, TableID objectTid)
{
var beguenstigter = LoadToBargeldkasseRelatedObject(objectTid, objectOid);
var rc = GetReportCreator() as DefaultReportCreator;
IBeWoReport<KassenbuchRO> reporttemp = rc?.FindReportImp<KassenbuchRO>();
if (reporttemp == null)
{
reporttemp = new KassenbuchReport();
}
reporttemp.SetReportDataSource(KassenbuchRO.Create(zeitraumStart, zeitraumEnde, bargeldkasse, beguenstigter));
return CreateReportStream(reporttemp as XtraReport);
}
public MemoryStream CreateKassenbelegReport(BargeldtransaktionDC transaktion, long objectOid, TableID objectTid)
{
var reportCreator = GetReportCreator();
return CreateReportStream(reportCreator.CreateKassenbelegReport(transaktion, objectOid, objectTid));
}
public MemoryStream CreateServiceRecordListReport(long employeeOid, long customerOid, long supportConceptOid, long costbearer2SupportConceptOid, bool isLimited, DateTimeSpan limitingDateTimeSpan)
{
var reportCreator = GetReportCreator();
return CreateReportStream(reportCreator.CreateServiceRecordListReport(employeeOid, customerOid, supportConceptOid, costbearer2SupportConceptOid, isLimited, limitingDateTimeSpan));
}
public Dictionary<CompactEmployeeDC, decimal> GetMitarbeiterverfuegbarkeiten(List<CompactEmployeeDC> mitarbeiter, DateTime startDatum, DateTime endDatum)
{
var herausgefilterteMitarbeiter = DAOFactory.SearchDAO.FilterEmployeesWithAppointments(mitarbeiter.Select(ma => ma.EmployeeOid).ToList(), startDatum, endDatum);
mitarbeiter = mitarbeiter.Where(ma => !herausgefilterteMitarbeiter.Contains(ma.EmployeeOid)).ToList();
var berechnungsBeginn = new DateTime(startDatum.Year, startDatum.Month, 1).AddMonths(-1);
var berechnungsEnde = new DateTime(startDatum.Year, startDatum.Month, 1);
var msb = new MitarbeiterstundenkontoBerechnung();
var reportObject = MitarbeiterstundenkontoRO.Create(null, null, berechnungsBeginn, berechnungsEnde, mitarbeiter.Select(ma => ma.EmployeeOid));
msb.CreateReport(reportObject);
return reportObject.EmployeeDetailList
.Where(employeeDetail => employeeDetail.Employee.Oid != null)
.ToDictionary(employeeDetail => MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(employeeDetail.Employee),
employeeDetail => employeeDetail.UeberstundenGesamt ?? 0);
}
public String SendTimeSheetMail(TimeSheetStatusItemDC item, bool saveMailToDatabase)
{
try
{
var s = PluginLoader.FindClass<TimeSheetReportService>();
return s.SendTimeSheetMail(item, saveMailToDatabase);
}
catch (Exception e)
{
throw BeWo.Service.Core.Utils.CreateBeWoFaultException(e);
}
}
public MemoryStream CreateCustomReport(long employeeOid, String reportName)
{
var reportCreator = GetReportCreator();
return CreateReportStream(reportCreator.CreateCustomReport(employeeOid, reportName));
}
private static MemoryStream CreateReportStream(XtraReport pReport)
{
if (pReport == null)
return null;
pReport.CreateDocument();
var resultStream = new MemoryStream();
var repxStream = new MemoryStream();
pReport.PrintingSystem.SaveDocument(repxStream, new NativeFormatOptions { Compressed = true });
var bytesToWrite = repxStream.ToArray();
resultStream.Write(bytesToWrite, 0, bytesToWrite.Length);
resultStream.Position = 0L;
return resultStream;
}
private static MemoryStream CreateReportStream<T, U>(T pReport, U pRO)
where T : XtraReport, IBeWoReport<U>
where U : AbstractBeWoReportObject<U>
{
var report = pReport;
report.SetReportDataSource(pRO);
report.CreateDocument();
var resultStream = new MemoryStream();
var repxStream = new MemoryStream();
report.PrintingSystem.SaveDocument(repxStream, new NativeFormatOptions { Compressed = true });
var bytesToWrite = repxStream.ToArray();
resultStream.Write(bytesToWrite, 0, bytesToWrite.Length);
resultStream.Position = 0L;
return resultStream;
}
private static AbstractReportCreator GetReportCreator()
{
AbstractReportCreator creator = PluginLoader.FindClass<DefaultReportCreator>();
#if DEBUG
creator.TempPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"demo\temp");
#else
creator.TempPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, PluginLoader.Tenant + @"\temp");
#endif
return creator;
}
private static BeWoEntityBase LoadToBargeldkasseRelatedObject(TableID pObjectTid, long pObjectOid)
{
switch (pObjectTid)
{
case TableID.Customer:
return DAOFactory.GenericDAO.LoadByID<Customer>(pObjectOid);
default:
return null;
}
}
public MemoryStream CreateKilometerauswertung(long customerOid, DateTime rangeDate)
{
var reportCreator = GetReportCreator();
var report = reportCreator.CreateKilometerauswertung(customerOid, null, new DateTime(rangeDate.Year, rangeDate.Month, 1), new DateTime(rangeDate.Year, rangeDate.Month, 1).AddMonths(1).AddDays(-1));
return report == null ? null : CreateReportStream(report);
}
public MemoryStream CreateKilometerauswertungForAllCustomers(List<long> customerOids, DateTime rangeDate)
{
var reportCreator = GetReportCreator();
var report = reportCreator.CreateKilometerauswertungForAllCustomers(customerOids, null, new DateTime(rangeDate.Year, rangeDate.Month, 1), new DateTime(rangeDate.Year, rangeDate.Month, 1).AddMonths(1).AddDays(-1));
return report == null ? null : CreateReportStream(report);
}
public bool CheckForAnyServiceRecordsWithDistanceValues(List<long> customerOids, DateTimeSpan span)
{
return DAOFactory.SearchDAO.CheckForAnyServiceRecordsWithDistanceValues(customerOids, span);
}
public MemoryStream CreateEmployeeKilometerauswertung(long employeeOid, DateTime range)
{
var reportCreator = GetReportCreator();
var report = reportCreator.CreateEmployeeKilometerauswertung(employeeOid, null, range, range);
return report == null ? null : CreateReportStream(report);
}
public MemoryStream CreateKilometerauswertungForAllEmployees(List<long> employeeOids, DateTime rangeDate)
{
var reportCreator = GetReportCreator();
var report = reportCreator.CreateKilometerauswertungForAllEmployees(employeeOids, null, new DateTime(rangeDate.Year, rangeDate.Month, 1), new DateTime(rangeDate.Year, rangeDate.Month, 1).AddMonths(1).AddDays(-1));
return report == null ? null : CreateReportStream(report);
}
// Zum Test im MoK
public MemoryStream CreateKilometerauswertungForAllCustomersForWebVersion(List<long> customerOids, DateTime rangeDate, string tenant)
{
var reportCreator = GetReportCreator();
var report = reportCreator.CreateKilometerauswertungForAllCustomers(customerOids, null, new DateTime(rangeDate.Year, rangeDate.Month, 1), new DateTime(rangeDate.Year, rangeDate.Month, 1).AddMonths(1).AddDays(-1));
return report == null ? null : CreateReportStream(report);
}
public MemoryStream CreateMedikamentenlistenReport(long mvlOid, string tenant)
{
var reportCreator = GetReportCreator();
var report = reportCreator.CreateMediVerordListenReport(mvlOid);
return report == null ? null : CreateReportStream(report);
}
public MemoryStream CreateInvoiceListReport(List<long> invoiceBaseOids)
{
var reportCreator = GetReportCreator();
return CreateReportStream(reportCreator.CreateInvoiceListReport(invoiceBaseOids));
}
public MemoryStream CreateCustomerListReport(List<long> oids)
{
var reportCreator = GetReportCreator();
return CreateReportStream(reportCreator.CreateCustomerListReport(oids));
}
public MemoryStream CreateSupportConceptListReport(List<long> oids)
{
var reportCreator = GetReportCreator();
return CreateReportStream(reportCreator.CreateSupportConceptListReport(oids));
}
public MemoryStream CreatePersonListReport(List<long> oids)
{
var reportCreator = GetReportCreator();
return CreateReportStream(reportCreator.CreatePersonListReport(oids));
}
public MemoryStream CreateEmployeeListReport(List<long> oids)
{
var reportCreator = GetReportCreator();
return CreateReportStream(reportCreator.CreateEmployeeListReport(oids));
}
public MemoryStream CreateOrganisationListReport(List<long> oids)
{
var reportCreator = GetReportCreator();
return CreateReportStream(reportCreator.CreateOrganisationListReport(oids));
}
public MemoryStream CreateTeamListReport(List<long> oids)
{
return null;
}
public MemoryStream CreateUserListReport(List<long> oids)
{
var reportCreator = GetReportCreator();
return CreateReportStream(reportCreator.CreateUserListReport(oids));
}
public MemoryStream CreateUserGroupListReport(List<long> oids)
{
var reportCreator = GetReportCreator();
return CreateReportStream(reportCreator.CreateUserGroupListReport(oids));
}
}
}