55 lines
2.5 KiB
C#
55 lines
2.5 KiB
C#
using General_Ledger_Service.DTOs.Reports;
|
|
|
|
namespace General_Ledger_Service.Services.CsvDocuments
|
|
{
|
|
// Same simplification as Services/PdfDocuments/CashFlowPdfDocument - no printed opening/closing
|
|
// balance row (still in the outputFormat=Json response for the reconciliation check); non-cash
|
|
// adjustments and working-capital changes combined and re-bucketed by sign.
|
|
public static class CashFlowCsvDocument
|
|
{
|
|
public static byte[] Generate(CashFlowReportDto data)
|
|
{
|
|
var operating = data.OperatingActivities;
|
|
var operatingProfitBeforeWorkingCapital = operating.ProfitForPeriod + operating.NonCashAdjustments.Sum(a => a.Amount);
|
|
|
|
var movements = operating.NonCashAdjustments
|
|
.Select(a => (Description: a.Description, Amount: a.Amount))
|
|
.Concat(operating.WorkingCapitalChanges.Select(c => (Description: $"{c.Direction} in {c.AccountName}", Amount: c.ChangeAmount)))
|
|
.ToList();
|
|
|
|
var csv = new CsvBuilder();
|
|
csv.AddRow("Category", "Description", "Amount");
|
|
|
|
csv.AddRow("Operating", "Profit for the period", operating.ProfitForPeriod);
|
|
csv.AddRow("Operating", "Operating profit before working capital changes", operatingProfitBeforeWorkingCapital);
|
|
|
|
foreach (var line in movements.Where(m => m.Amount > 0))
|
|
{
|
|
csv.AddRow("Operating - Additions to Cash", line.Description, line.Amount);
|
|
}
|
|
|
|
foreach (var line in movements.Where(m => m.Amount <= 0))
|
|
{
|
|
csv.AddRow("Operating - Subtractions From Cash", line.Description, line.Amount);
|
|
}
|
|
|
|
csv.AddRow("Operating", "Net Cash from Operating Activities", operating.NetCashFromOperatingActivities);
|
|
|
|
foreach (var line in data.InvestingActivities.Lines)
|
|
{
|
|
csv.AddRow("Investing", line.AccountName, line.Amount);
|
|
}
|
|
csv.AddRow("Investing", "Net Cash from/(used in) Investing Activities", data.InvestingActivities.NetCashFromInvestingActivities);
|
|
|
|
foreach (var line in data.FinancingActivities.Lines)
|
|
{
|
|
csv.AddRow("Financing", line.AccountName, line.Amount);
|
|
}
|
|
csv.AddRow("Financing", "Net Cash from/(used in) Financing Activities", data.FinancingActivities.NetCashFromFinancingActivities);
|
|
|
|
csv.AddRow("", "Net Increase/(Decrease) in Cash and Cash Equivalents", data.NetIncreaseDecreaseInCash);
|
|
return csv.Build();
|
|
}
|
|
}
|
|
}
|