Files
2020-08-17 15:50:00 +02:00

179 lines
5.1 KiB
C#

using System;
using System.Linq;
using System.Text;
using BS.Shared;
using BS.Shared.Extensions;
using BeWo.Report;
using BeWo.Report.ReportObjects;
using BeWo.Data.Entities;
using BeWo.Data.Access;
using System.Collections.Generic;
using System.Windows.Forms.VisualStyles;
using BS.Shared.Core;
using BS.Shared.Services;
using BS.Shared.DataContracts;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BeWo.Service.ServiceImplementations;
namespace SozialeDienstleistungenSchoenberg
{
[IDSpecificClass(Identifier = "Kassenbestand")]
public partial class Kassenbestand : DevExpress.XtraReports.UI.XtraReport, IBeWoReport<QueryRO>
{
public Kassenbestand()
{
InitializeComponent();
}
public void SetReportDataSource(QueryRO pRO)
{
DateTime abfrageMonat = new DateTime(DateTime.Now.Year, 1, 1);
DateTime letztesDatum = DateTime.MinValue;
Dictionary<long, Kasse> oid2Kasse = new Dictionary<long, Kasse>();
List<Kasse> kassen = new List<Kasse>();
if (pRO.Rows != null)
{
if (pRO.Rows.Count > 0 && pRO.Rows[0].Field7 != null)
{
DateTime.TryParse(pRO.Rows[0].Field7.ToString(), out abfrageMonat);
}
foreach (var row in pRO.Rows)
{
long oid = Int64.Parse(row.Field1.ToString());
Kasse kto = null;
if (!oid2Kasse.ContainsKey(oid))
{
kto = new Kasse();
kto.Transaktionen = new List<BargeldtransaktionDC>();
kto.Name = String.Format("{0}", row.Field2);
kassen.Add(kto);
oid2Kasse.Add(oid, kto);
}
else
{
kto = oid2Kasse[oid];
}
BargeldtransaktionDC dc = new BargeldtransaktionDC();
if (row.Field3 != null && (bool) row.Field3)
{
dc.Zahlungstyp = Zahlungstyp.Auszahlung;
}
else
{
dc.Zahlungstyp = Zahlungstyp.Einzahlung;
}
decimal betrag = 0;
if (row.Field4 != null)
{
Decimal.TryParse(row.Field4.ToString(), out betrag);
}
dc.Betrag = betrag;
DateTime zahlungsdatum = DateTime.MinValue;
if (row.Field5 != null)
{
if (DateTime.TryParse(row.Field5.ToString(), out zahlungsdatum))
{
dc.Zahlungsdatum = zahlungsdatum;
}
}
DateTime insts = DateTime.MinValue;
if (row.Field8 != null)
{
if (DateTime.TryParse(row.Field8.ToString(), out insts))
{
if (insts > letztesDatum)
{
letztesDatum = insts;
}
}
}
kto.Transaktionen.Add(dc);
}
}
decimal gesamt = 0;
decimal hauptkassegesamt = 0;
int rowIdx = 1;
QueryRO newRo = new QueryRO();
var stichtag = abfrageMonat.AddMonths(1);
foreach (var kto in kassen.OrderBy(k => k.Name))
{
QueryRO.Row row = new QueryRO.Row();
newRo.Rows.Add(row);
row.Field1 = String.Format("{0}", rowIdx++);
row.Field2 = kto.Name;
decimal kassenBetrag = GetGesamtBetrag(kto, stichtag);
gesamt += kassenBetrag;
row.Field3 = String.Format("{0:c}", kassenBetrag);
}
if (letztesDatum == DateTime.MinValue)
{
letztesDatum = DateTime.Now;
}
lblLetzterStand.Text = String.Format("{0:MMMM yyyy}", abfrageMonat);
lblGesamt.Text = String.Format("{0:c}", gesamt);
this.bindingSource1.DataSource = newRo;
}
private decimal GetGesamtBetrag(Kasse kto, DateTime stichtag)
{
decimal kassenBetrag = 0;
foreach (var t in kto.Transaktionen)
{
if (t.Zahlungsdatum.HasValue && t.Zahlungsdatum < stichtag)
{
if (t.Zahlungstyp == Zahlungstyp.Einzahlung)
{
kassenBetrag += t.Betrag ?? 0;
}
else
{
kassenBetrag -= t.Betrag ?? 0;
}
}
}
return kassenBetrag;
}
internal class Kasse
{
public String Name { get; set; }
public decimal Betrag { get; set; }
public List<BargeldtransaktionDC> Transaktionen { get; set; }
}
}
}