Files
BeWoPlaner/ReportImp/PerspektivenEV/LwvAbgerechneteFls.cs

145 lines
6.3 KiB
C#

using System;
using BeWo.Report.ReportObjects;
using BeWo.Report;
using DevExpress.XtraReports.UI;
using System.Data;
using BeWo.Data.Access;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.Linq;
using System.Xml.Schema;
using BeWo.Data.Entities;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BeWo.Service.ServiceImplementations;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.Extensions;
using BS.Shared.Services;
using DevExpress.Xpo.DB;
namespace PerspektivenEV
{
[IDSpecificClass(Identifier = "LwvAbgerechneteFls")]
public partial class LwvAbgerechneteFls : DevExpress.XtraReports.UI.XtraReport, IBeWoReport<QueryRO>
{
public LwvAbgerechneteFls()
{
InitializeComponent();
}
public void SetReportDataSource(QueryRO queryRo)
{
var ro = CreateRo(queryRo);
this.bindingSource1.DataSource = ro;
}
private QueryRO CreateRo(QueryRO queryRo)
{
QueryRO result = new QueryRO();
DateTime datum = DateTime.Now;
if (queryRo.Rows.Count > 0)
{
if (queryRo.Rows[0].Field1 != null)
{
DateTime.TryParse(queryRo.Rows[0].Field1.ToString(), out datum);
}
}
DateTime start = new DateTime(datum.Year, 1, 1);
datum = datum.AddMonths(1);
DateTime end = datum;
int month = end.Month - start.Month + 1;
lblHeader.Text += String.Format(" bis zum {0:dd.MM.yyyy}", datum.AddDays(-1));
var allInvoices = DAOFactory.GenericDAO.GetAllActive<ServiceInvoice>();
var oidList = new List<long>() { 198, 199, 202, 203 }; // nur für LWV, Oberbayern, Landesamt Saarland, Breisgau
var invoices = allInvoices.Where(i => i.InvoiceBase.IsActive == ActivationTypeId.Active && i.InvoiceBase.AccountingPeriodStart >= start && i.InvoiceBase.AccountingPeriodEnd < end && oidList.Contains(i.InvoiceBase.RecipientOrganisationOid.Value)).ToList();
invoices = (List<ServiceInvoice>)invoices.OrderByDescending(i => i.InvoiceBase.Oid).ToList();
var costcenterDict = new Dictionary<string, List<InvoiceItem>>(); // Sortieren nach Leistungsart
foreach (var i in invoices)
{
i.ServiceInvoicePeriodList = i.ServiceInvoicePeriodList.OrderBy(a => a.Customer.Oid).ThenByDescending(b => b.InvoiceItemList[0].ItemDescription).ToList();
var listLength = i.ServiceInvoicePeriodList.Count;
for (int m = listLength - 1; m >= 0; m--)
{
var sip = i.ServiceInvoicePeriodList[m];
if (sip.InvoiceItemList[0].ItemDescription != null && sip.InvoiceItemList[0].ItemDescription.StartsWith("Qualifizierte Assistenz TS"))
{
if (m + 1 != listLength && i.ServiceInvoicePeriodList[m + 1].InvoiceItemList[0].ItemDescription.StartsWith("Qualifizierte Assistenz"))
{
var ii = sip.InvoiceItemList[0];
var iiNew = i.ServiceInvoicePeriodList[m + 1].InvoiceItemList[0];
iiNew.Notice = ii.Notice;
iiNew.AmountPerUnit += ii.AmountPerUnit;
iiNew.AmountTotal += ii.AmountTotal;
iiNew.GrossAmountTotal += iiNew.GrossAmountTotal;
iiNew.ItemDescription = "Assistenz Kombi";
i.ServiceInvoicePeriodList.Remove(sip);
}
}
}
foreach (var sip in i.ServiceInvoicePeriodList)
{
if (sip.InvoiceItemList != null && sip.InvoiceItemList.Count > 0)
{
foreach (var ii in sip.InvoiceItemList)
{
if (!ii.ItemDescription.IsNullOrEmpty() &&
(ii.ItemDescription.Contains("Assistenz Kombi") || ii.ItemDescription.Contains("Assistenz ieH") || ii.ItemDescription.Contains("Assistenz TS")))
{
//ii.Notice = i.InvoiceBase.InvoiceNumber;
if (costcenterDict.ContainsKey(ii.ItemDescription))
{
costcenterDict[ii.ItemDescription].Add(ii);
}
else
{
costcenterDict.Add(ii.ItemDescription, new List<InvoiceItem>());
costcenterDict[ii.ItemDescription].Add(ii);
}
}
}
}
}
}
foreach (var item in costcenterDict)
{
if (item.Value[0].ItemDescription.Contains("Assistenz TS") || item.Value[0].ItemDescription.Contains("Assistenz ieH") || item.Value[0].ItemDescription.Contains("Assistenz Kombi"))
{
var newrow = new QueryRO.Row();
//string numbers = "";
newrow.Field1 = item.Key;
newrow.Field2 = item.Value.Sum(i => i.GrossAmountTotal);
newrow.Field3 = item.Value.Select(i =>
{
if (decimal.TryParse(i.Notice.Trim(), out decimal min))
{
return min;
}
return 0m; // Return 0 if parsing fails
}).Sum();
newrow.Field4 = item.Value.Select(i =>
{
if (decimal.TryParse(i.Notice.Trim(), out decimal min))
{
return min / 7 * i.UnitCount / 60;
}
return 0m; // Return 0 if parsing fails
}).Sum();
result.Rows.Add(newrow);
}
}
result.Rows.Sort((a, b) => a.Field1.ToString().CompareTo(b.Field1));
return result;
}
}
}