Files
BeWoPlaner/ReportImp/Club74DB2/Finanzauswertung.cs
Christian 0cdbf53408 cb
2021-11-16 10:56:40 +01:00

161 lines
5.6 KiB
C#

using System;
using System.Linq;
using BS.Shared;
using BeWo.Report;
using BeWo.Report.ReportObjects;
using BeWo.Data.Entities;
using BeWo.Data.Access;
using System.Collections.Generic;
using BeWo.Data;
using BS.Shared.Core;
using BS.Shared.Services;
using BS.Shared.DataContracts;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Invoicing;
using BeWo.Service.Plugins;
using BeWo.Service.ServiceImplementations;
using BS.Shared.DataContracts.Compact;
namespace BeWo.Club74
{
public partial class Finanzauswertung : DevExpress.XtraReports.UI.XtraReport, IBeWoReport<FinanceRO>
{
public Finanzauswertung()
{
InitializeComponent();
}
public void SetReportDataSource(FinanceRO pRO)
{
if (pRO.SupportConceptFinanceList != null)
{
foreach (var scRo in pRO.SupportConceptFinanceList)
{
if (scRo.Costbearer2Supportconcept != null)
{
CalculateBillableAmountInTimeSpan(scRo, scRo.Costbearer2Supportconcept.StartDate, pRO.ReportEndDate, true);
scRo.OpenAmount = scRo.BillableAmountUntilNow - scRo.AmountPaid;
}
}
}
if (pRO.ReportStartDate.HasValue && pRO.ReportEndDate.HasValue)
{
DateTime start = pRO.ReportStartDate.Value;
DateTime end = pRO.ReportEndDate.Value;
if (start.Year == end.Year && start.Month == end.Month && start.Day == 1 &&
end.Day == DateTime.DaysInMonth(end.Year, end.Month))
{
lblTitel.Text = String.Format("Finanzauswertung {0:MMMM yyyy}", start);
cellBewilligtImZeitraumHeader.Text = String.Format("bewilligte FLS {0:MMMM}", start);
cellGeleistetImZeitraumHeader.Text = String.Format("geleistete Std. {0:MMMM}", start);
}
else
{
lblTitel.Text = String.Format("Finanzauswertung {0:dd.MM.yyyy}-{1:dd.MM.yyyy}", start, end);
cellBewilligtImZeitraumHeader.Text = String.Format("bewilligte FLS {0:dd.MM.yyyy}-{1:dd.MM.yyyy}", start, end);
cellGeleistetImZeitraumHeader.Text = String.Format("geleistete Std. {0:dd.MM.yyyy}-{1:dd.MM.yyyy}", start, end);
}
if (pRO.RateFactor.HasValue)
{
cellRateFactorHeader.Text = String.Format("geleistete Std. x {0:0.##}", pRO.RateFactor);
}
else
{
cellRateFactorHeader.Visible = false;
cellRateFactor.Visible = false;
}
}
else
{
cellBewilligtImZeitraumHeader.Visible = false;
cellBewilligteFLSImBereich.Visible = false;
cellGeleistetImBereich.Visible = false;
cellGeleistetImZeitraumHeader.Visible = false;
cellRateFactorHeader.Visible = false;
cellRateFactor.Visible = false;
}
this.bindingSource1.DataSource = pRO;
}
private void CalculateBillableAmountInTimeSpan(FinanceRO.SupportConceptFinanceRO scRo, DateTime? start, DateTime? end, bool totalOrReportTimeSpan)
{
String tenant = null;
if (MultitenancyOperationContextExt.Current != null)
tenant = MultitenancyOperationContextExt.Current.Tenant;
else
tenant = SessionFacade.Tenant;
var factory = PluginLoader.FindClass<InvoiceFactory>(tenant);
if (factory == null)
{
factory = InvoiceFactory.GetInstance(tenant);
}
Dictionary<CompactSupportConceptDC, List<ServiceRecordDC>> dict = new Dictionary<CompactSupportConceptDC, List<ServiceRecordDC>>();
CompactSupportConceptDC sc = CreateCompactSupportConcept(scRo.Costbearer2Supportconcept);
if (scRo.ServiceRecords != null)
{
foreach (var sr in scRo.ServiceRecords)
{
sr.AlreadyAccounted = false;
}
}
dict.Add(sc, scRo.ServiceRecords);
var creator = factory.CreateInvoiceCreator("Finanzauswertung", tenant, dict);
//String text = String.Format("Tenant={0}, Context=Null? {1}, Factory = {2}", tenant,
// MultitenancyOperationContextExt.Current == null, factory);
//Utils.SendErrorMail("CB DEBUG", text);
DateTimeSpan span = null;
if (start.HasValue && end.HasValue)
{
span = new DateTimeSpan();
span.StartDate = start.Value;
span.EndDate = end.Value;
}
if (scRo.CustomerName.Contains("Löb"))
{
int test = 0;
}
var invoices = creator.GenerateServiceInvoices(scRo.Costbearer2Supportconcept.CostBearer.CostBearerOid.Value, span, dict);
if (invoices != null && invoices.Count == 1)
{
//var i = invoices[0];
if (totalOrReportTimeSpan)
{
scRo.BillableAmountUntilNow = invoices[0].ClaimSum ?? 0;
}
else
{
scRo.BillableAmountInReportTimeSpan = invoices[0].ClaimSum ?? 0;
}
}
}
private CompactSupportConceptDC CreateCompactSupportConcept(SupportConceptCostBearerRelDC c2s)
{
var dc = new CompactSupportConceptDC();
dc.SupportConceptOid = c2s.SupportConcept.SupportConceptOid;
dc.CostBearerRelOids = new List<long>();
dc.CostBearerRelOids.Add(c2s.CostBearer2SupportConceptOid.Value);
//dc.IsApproved = c2s.ApprovedStartDate.HasValue && c2s.ApprovedEndDate.HasValue;
dc.IsApproved = true;
return dc;
}
}
}