2016-06-27 01:45:38 +02:00
|
|
|
|
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;
|
2019-07-12 17:36:37 +02:00
|
|
|
|
using ReportingService.Plugins;
|
2016-06-27 01:45:38 +02:00
|
|
|
|
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)
|
|
|
|
|
|
{
|
2022-10-11 16:48:36 +02:00
|
|
|
|
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();
|
|
|
|
|
|
|
2022-12-30 16:28:23 +01:00
|
|
|
|
reportTemp.SetReportDataSource(KalenderRO.CreateWithAbsenceTimes(appointmentOids, employeeOid, serientermine, selectedDates.ToList(), mehrtaegigeTermine, absenceTimeOids));
|
2022-10-11 16:48:36 +02:00
|
|
|
|
|
|
|
|
|
|
return CreateReportStream(reportTemp as XtraReport);
|
2016-06-27 01:45:38 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2016-10-06 14:45:14 +02:00
|
|
|
|
public MemoryStream CreateKassenbuchReportImZeitraum(DateTime zeitraumStart, DateTime zeitraumEnde, BargeldkassenDC bargeldkasse, long objectOid, TableID objectTid)
|
|
|
|
|
|
{
|
|
|
|
|
|
var beguenstigter = LoadToBargeldkasseRelatedObject(objectTid, objectOid);
|
|
|
|
|
|
|
2017-09-14 19:03:26 +02:00
|
|
|
|
var rc = GetReportCreator() as DefaultReportCreator;
|
|
|
|
|
|
|
2022-10-11 16:48:36 +02:00
|
|
|
|
IBeWoReport<KassenbuchRO> reporttemp = rc?.FindReportImp<KassenbuchRO>();
|
2017-09-14 19:03:26 +02:00
|
|
|
|
if (reporttemp == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
reporttemp = new KassenbuchReport();
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
reporttemp.SetReportDataSource(KassenbuchRO.Create(zeitraumStart, zeitraumEnde, bargeldkasse, beguenstigter));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return CreateReportStream(reporttemp as XtraReport);
|
|
|
|
|
|
}
|
2016-10-06 14:45:14 +02:00
|
|
|
|
|
2016-06-27 01:45:38 +02:00
|
|
|
|
public MemoryStream CreateKassenbelegReport(BargeldtransaktionDC transaktion, long objectOid, TableID objectTid)
|
|
|
|
|
|
{
|
2023-01-26 00:31:27 +01:00
|
|
|
|
var reportCreator = GetReportCreator();
|
2016-06-27 01:45:38 +02:00
|
|
|
|
|
2023-01-26 00:31:27 +01:00
|
|
|
|
return CreateReportStream(reportCreator.CreateKassenbelegReport(transaktion, objectOid, objectTid));
|
|
|
|
|
|
|
2016-06-27 01:45:38 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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),
|
2018-10-12 12:42:24 +02:00
|
|
|
|
employeeDetail => employeeDetail.UeberstundenGesamt ?? 0);
|
2016-06-27 01:45:38 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-07-12 17:36:37 +02:00
|
|
|
|
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);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-08-15 11:06:50 +02:00
|
|
|
|
public MemoryStream CreateCustomReport(long employeeOid, String reportName)
|
|
|
|
|
|
{
|
|
|
|
|
|
var reportCreator = GetReportCreator();
|
|
|
|
|
|
|
|
|
|
|
|
return CreateReportStream(reportCreator.CreateCustomReport(employeeOid, reportName));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-07-12 17:36:37 +02:00
|
|
|
|
private static MemoryStream CreateReportStream(XtraReport pReport)
|
2016-06-27 01:45:38 +02:00
|
|
|
|
{
|
|
|
|
|
|
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()
|
|
|
|
|
|
{
|
|
|
|
|
|
var derTenant = MultitenancyOperationContextExt.Current.Tenant;
|
2021-10-13 16:00:33 +02:00
|
|
|
|
|
2016-06-27 01:45:38 +02:00
|
|
|
|
AbstractReportCreator creator = null;
|
|
|
|
|
|
#if DEBUG
|
|
|
|
|
|
//Kundennummern zum Testen nur noch in PluginLoader eintragen:
|
|
|
|
|
|
derTenant = PluginLoader.Tenant;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var customerDllPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"bin\" + derTenant + "_reports.dll");
|
|
|
|
|
|
#else
|
|
|
|
|
|
var customerDllPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Customer\" + derTenant + "_reports.dll");
|
|
|
|
|
|
#endif
|
|
|
|
|
|
if (File.Exists(customerDllPath))
|
|
|
|
|
|
{
|
|
|
|
|
|
var allTypes = Assembly.LoadFrom(customerDllPath).GetTypes();
|
|
|
|
|
|
|
|
|
|
|
|
var reportCreator = allTypes.FirstOrDefault(i => typeof(AbstractReportCreator).IsAssignableFrom(i));
|
|
|
|
|
|
if (reportCreator != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
creator = Activator.CreateInstance(reportCreator) as AbstractReportCreator;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (creator == null)
|
|
|
|
|
|
creator = new DefaultReportCreator();
|
|
|
|
|
|
|
|
|
|
|
|
creator.Tenant = derTenant;
|
|
|
|
|
|
creator.ReportPath = customerDllPath;
|
|
|
|
|
|
|
|
|
|
|
|
#if DEBUG
|
|
|
|
|
|
creator.TempPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"demo\temp");
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
|
|
|
|
creator.TempPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, derTenant + @"\temp");
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
return creator;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-10-13 16:00:33 +02:00
|
|
|
|
private static AbstractReportCreator GetReportCreator(string tenant)
|
|
|
|
|
|
{
|
|
|
|
|
|
AbstractReportCreator creator = null;
|
|
|
|
|
|
#if DEBUG
|
|
|
|
|
|
//Kundennummern zum Testen nur noch in PluginLoader eintragen:
|
|
|
|
|
|
tenant = PluginLoader.Tenant;
|
|
|
|
|
|
|
|
|
|
|
|
// Ist "C:\Users\lyndo\BeWo\BeWoPlanerMobil\bin\2387527289_reports.dll"
|
|
|
|
|
|
// statt "C:\Users\lyndo\BeWo\Host\bin\2387527289_reports.dll"
|
|
|
|
|
|
|
|
|
|
|
|
var path = @"..\Host\";
|
|
|
|
|
|
|
|
|
|
|
|
var customerDllPath = Path.Combine(path, @"bin\" + tenant + "_reports.dll");// Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"bin\" + tenant + "_reports.dll");
|
|
|
|
|
|
#else
|
2021-10-18 00:43:47 +02:00
|
|
|
|
var customerDllPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Customer\" + tenant + "_reports.dll");
|
2021-10-13 16:00:33 +02:00
|
|
|
|
#endif
|
|
|
|
|
|
if (File.Exists(customerDllPath))
|
|
|
|
|
|
{
|
|
|
|
|
|
var allTypes = Assembly.LoadFrom(customerDllPath).GetTypes();
|
|
|
|
|
|
|
|
|
|
|
|
var reportCreator = allTypes.FirstOrDefault(i => typeof(AbstractReportCreator).IsAssignableFrom(i));
|
|
|
|
|
|
if (reportCreator != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
creator = Activator.CreateInstance(reportCreator) as AbstractReportCreator;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (creator == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
creator = new DefaultReportCreator();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
creator.Tenant = tenant;
|
|
|
|
|
|
creator.ReportPath = customerDllPath;
|
|
|
|
|
|
|
|
|
|
|
|
#if DEBUG
|
|
|
|
|
|
creator.TempPath = Path.Combine(path, @"demo\temp");
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
2021-10-18 00:43:47 +02:00
|
|
|
|
creator.TempPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, tenant + @"\temp");
|
2021-10-13 16:00:33 +02:00
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
return creator;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private static BeWoEntityBase LoadToBargeldkasseRelatedObject(TableID pObjectTid, long pObjectOid)
|
2016-06-27 01:45:38 +02:00
|
|
|
|
{
|
|
|
|
|
|
switch (pObjectTid)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TableID.Customer:
|
|
|
|
|
|
return DAOFactory.GenericDAO.LoadByID<Customer>(pObjectOid);
|
|
|
|
|
|
default:
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2020-07-07 16:09:48 +02:00
|
|
|
|
|
|
|
|
|
|
public MemoryStream CreateKilometerauswertung(long customerOid, DateTime rangeDate)
|
|
|
|
|
|
{
|
|
|
|
|
|
var reportCreator = GetReportCreator();
|
|
|
|
|
|
|
2020-07-08 16:51:11 +02:00
|
|
|
|
var report = reportCreator.CreateKilometerauswertung(customerOid, rangeDate);
|
|
|
|
|
|
|
|
|
|
|
|
return report == null ? null : CreateReportStream(report);
|
2020-07-07 16:09:48 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public MemoryStream CreateKilometerauswertungForAllCustomers(List<long> customerOids, DateTime rangeDate)
|
|
|
|
|
|
{
|
|
|
|
|
|
var reportCreator = GetReportCreator();
|
|
|
|
|
|
|
2020-07-08 16:51:11 +02:00
|
|
|
|
var report = reportCreator.CreateKilometerauswertungForAllCustomers(customerOids, rangeDate);
|
|
|
|
|
|
|
|
|
|
|
|
return report == null ? null : CreateReportStream(report);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public bool CheckForAnyServiceRecordsWithDistanceValues(List<long> customerOids, DateTimeSpan span)
|
|
|
|
|
|
{
|
|
|
|
|
|
return DAOFactory.SearchDAO.CheckForAnyServiceRecordsWithDistanceValues(customerOids, span);
|
2020-07-07 16:09:48 +02:00
|
|
|
|
}
|
2020-09-30 19:23:42 +02:00
|
|
|
|
|
|
|
|
|
|
public MemoryStream CreateEmployeeKilometerauswertung(long employeeOid, DateTime range)
|
|
|
|
|
|
{
|
|
|
|
|
|
var reportCreator = GetReportCreator();
|
|
|
|
|
|
|
|
|
|
|
|
var report = reportCreator.CreateEmployeeKilometerauswertung(employeeOid, range);
|
|
|
|
|
|
|
|
|
|
|
|
return report == null ? null : CreateReportStream(report);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public MemoryStream CreateKilometerauswertungForAllEmployees(List<long> employeeOids, DateTime rangeDate)
|
|
|
|
|
|
{
|
|
|
|
|
|
var reportCreator = GetReportCreator();
|
|
|
|
|
|
|
|
|
|
|
|
var report = reportCreator.CreateKilometerauswertungForAllEmployees(employeeOids, rangeDate);
|
|
|
|
|
|
|
|
|
|
|
|
return report == null ? null : CreateReportStream(report);
|
|
|
|
|
|
}
|
2021-10-13 16:00:33 +02:00
|
|
|
|
|
|
|
|
|
|
// Zum Test im MoK
|
|
|
|
|
|
public MemoryStream CreateKilometerauswertungForAllCustomersForWebVersion(List<long> customerOids, DateTime rangeDate, string tenant)
|
|
|
|
|
|
{
|
|
|
|
|
|
var reportCreator = GetReportCreator(tenant);
|
|
|
|
|
|
|
|
|
|
|
|
var report = reportCreator.CreateKilometerauswertungForAllCustomers(customerOids, rangeDate);
|
|
|
|
|
|
|
|
|
|
|
|
return report == null ? null : CreateReportStream(report);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public MemoryStream CreateMedikamentenlistenReport(long mvlOid, string tenant)
|
|
|
|
|
|
{
|
|
|
|
|
|
var reportCreator = GetReportCreator(tenant);
|
|
|
|
|
|
|
|
|
|
|
|
var report = reportCreator.CreateMediVerordListenReport(mvlOid);
|
|
|
|
|
|
|
|
|
|
|
|
return report == null ? null : CreateReportStream(report);
|
|
|
|
|
|
}
|
2016-06-27 01:45:38 +02:00
|
|
|
|
}
|
|
|
|
|
|
}
|