95 lines
4.0 KiB
C#
95 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,
|
|
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 && start.Day == 1 && end.Day == DateTime.DaysInMonth(end.Year, end.Month))
|
|
{
|
|
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; }
|
|
}
|
|
} |