Files
BeWoPlaner/Report/ReportObjects/KassenbuchRO.cs
2017-02-01 13:53:59 +01:00

96 lines
4.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using BeWo.Data.Entities;
using BS.Shared;
using BS.Shared.DataContracts;
namespace BeWo.Report.ReportObjects
{
public class KassenbuchRO : AbstractBeWoReportObject<KassenbuchRO>
{
public List<ZeilenObjekt> Transaktionen { get; set; }
public decimal Anfangsbestand { get; set; }
public string Kassenname { get; set; }
public string Beguenstigter { get; set; }
public string ReportTitle { get; set; }
public DateTime StartZeitraum { get; set; }
public DateTime EndZeitraum { get; set; }
public static KassenbuchRO Create(DateTime pZeitraum, BargeldkassenDC pBargeldkasse, BeWoEntityBase pBeguenstigter)
{
DateTime start = new DateTime(pZeitraum.Year, pZeitraum.Month, 1);
return Create(start, start.AddMonths(1), pBargeldkasse, pBeguenstigter);
}
public static KassenbuchRO Create(DateTime start, DateTime end, BargeldkassenDC pBargeldkasse, BeWoEntityBase pBeguenstigter)
{
var beguenstigter = string.Empty;
if (pBeguenstigter is Customer)
{
var customer = (Customer)pBeguenstigter;
beguenstigter = customer.Person.FirstNameLastName;
}
var transkationenDiesenMonat = pBargeldkasse.Bargeldtransaktionen.Where(w => w.Zahlungsdatum != null && w.Zahlungsdatum.Value >= start && w.Zahlungsdatum.Value <= end).OrderBy(o => o.Zahlungsdatum).Select(tDC => new ZeilenObjekt
{
Einzahlung = tDC.Zahlungstyp == Zahlungstyp.Einzahlung && tDC.Betrag != null ? tDC.Betrag.Value : 0,
Auszahlung = tDC.Zahlungstyp == Zahlungstyp.Auszahlung && tDC.Betrag != null ? tDC.Betrag.Value : 0,
Bestand = tDC.Transaktionskassenbestand.Value,
Belegdatum = tDC.Zahlungsdatum.Value,
Notiz = tDC.Notice
}).ToList();
var transkationenVorDiesenMonat = pBargeldkasse.Bargeldtransaktionen.Where(w => w.Zahlungsdatum != null && w.Zahlungsdatum.Value < start).ToList();
//var ersteTransaktion = pBargeldkasse.Bargeldtransaktionen.OrderBy(o => o.Zahlungsdatum).ToList()[0];
var kb = new KassenbuchRO
{
Kassenname = pBargeldkasse.Kassenname,
Beguenstigter = beguenstigter,
StartZeitraum = start,
EndZeitraum = end,
Transaktionen = transkationenDiesenMonat,
Anfangsbestand = transkationenVorDiesenMonat.Sum(t => (t.Betrag ?? 0) * (t.Zahlungstyp == Zahlungstyp.Einzahlung ? 1 : -1)),
};
if (start.Month == end.Month && start.Year == end.Year)
{
kb.ReportTitle = string.Format("Kassenbuch \"{0}\" {1}{2}", pBargeldkasse.Kassenname,
start.ToString("MMMM yyyy"),
(pBeguenstigter == null ? string.Empty : string.Format(" von {0}", beguenstigter)));
}
else
{
kb.ReportTitle = string.Format("Kassenbuch \"{0}\" {1} bis {2} {3}", pBargeldkasse.Kassenname,
start.ToString("dd.MM.yyyy"), end.ToString("dd.MM.yyyy"),
(pBeguenstigter == null ? string.Empty : string.Format(" von {0}", beguenstigter)));
}
decimal bestand = kb.Anfangsbestand;
foreach (var ta in transkationenDiesenMonat)
{
bestand = bestand + ta.Einzahlung - ta.Auszahlung;
ta.Bestand = bestand;
}
return kb;
}
}
public class ZeilenObjekt
{
public decimal Einzahlung { get; set; }
public decimal Auszahlung { get; set; }
public decimal Bestand { get; set; }
public DateTime? Belegdatum { get; set; }
public string Notiz { get; set; }
}
}