145 lines
6.3 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|