From ebbc5a13a82f8dfe28dd634345743f8abbfd69de Mon Sep 17 00:00:00 2001 From: metacube Date: Tue, 19 May 2026 13:51:25 +0200 Subject: [PATCH] Add finance filter columns to consolidated export --- .../Services/ExcelExportService.cs | 53 ++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/TrafagSalesExporter/Services/ExcelExportService.cs b/TrafagSalesExporter/Services/ExcelExportService.cs index a2ccfdb..51bf2f9 100644 --- a/TrafagSalesExporter/Services/ExcelExportService.cs +++ b/TrafagSalesExporter/Services/ExcelExportService.cs @@ -74,7 +74,14 @@ public class ExcelExportService : IExcelExportService "invoice date", "order date", "Land", - "Document Type" + "Document Type", + "Finance | Year", + "Finance | Country Key", + "Finance | Date", + "Finance | Net Sales Actual", + "Finance | Currency", + "Finance | Include", + "Finance | Source Value Field" }; for (var i = 0; i < headers.Length; i++) @@ -121,6 +128,14 @@ public class ExcelExportService : IExcelExportService ws.Cell(row, 33).Value = record.OrderDate?.ToString("dd.MM.yyyy") ?? string.Empty; ws.Cell(row, 34).Value = record.Land; ws.Cell(row, 35).Value = record.DocumentType; + var financeDate = ResolveFinanceDate(record); + ws.Cell(row, 36).Value = financeDate.Year; + ws.Cell(row, 37).Value = ResolveFinanceCountryKey(record.Land, record.Tsc); + ws.Cell(row, 38).Value = financeDate.ToString("dd.MM.yyyy"); + ws.Cell(row, 39).Value = record.SalesPriceValue; + ws.Cell(row, 40).Value = ResolveFinanceCurrency(record); + ws.Cell(row, 41).Value = record.SalesPriceValue != 0m ? "TRUE" : "FALSE"; + ws.Cell(row, 42).Value = "Sales Price/Value"; row++; } @@ -128,6 +143,42 @@ public class ExcelExportService : IExcelExportService workbook.SaveAs(fullPath); } + private static DateTime ResolveFinanceDate(SalesRecord record) + => record.PostingDate ?? record.InvoiceDate ?? record.ExtractionDate; + + private static string ResolveFinanceCurrency(SalesRecord record) + => ResolveFinanceCountryKey(record.Land, record.Tsc) switch + { + "CH" => "CHF", + "AT" => "EUR", + "DE" => "EUR", + "ES" => "EUR", + "FR" => "EUR", + "IN" => "INR", + "IT" => "EUR", + "UK" => "GBP", + "US" => "USD", + _ => string.IsNullOrWhiteSpace(record.CompanyCurrency) ? record.SalesCurrency : record.CompanyCurrency + }; + + private static string ResolveFinanceCountryKey(string land, string tsc) + { + var normalizedLand = (land ?? string.Empty).Trim().ToUpperInvariant(); + var normalizedTsc = (tsc ?? string.Empty).Trim().ToUpperInvariant(); + + if (normalizedLand is "AT" or "AUT" || normalizedLand.Contains("OESTER") || normalizedLand.Contains("OSTER") || normalizedLand.Contains("AUSTRIA")) return "AT"; + if (normalizedLand is "CH" or "CHE" || normalizedLand.Contains("SCHWE") || normalizedLand.Contains("SWITZER")) return "CH"; + if (normalizedLand.Contains("FRANK") || normalizedTsc.Contains("FR")) return "FR"; + if (normalizedLand.Contains("IND") || normalizedTsc.Contains("IN")) return "IN"; + if (normalizedLand.Contains("ITAL") || normalizedTsc.Contains("IT")) return "IT"; + if (normalizedLand.Contains("ENGL") || normalizedLand.Contains("KINGDOM") || normalizedTsc.Contains("UK") || normalizedTsc.Contains("GB")) return "UK"; + if (normalizedLand.Contains("USA") || normalizedLand.Contains("UNITED STATES") || normalizedTsc.Contains("US")) return "US"; + if (normalizedLand.Contains("DEUT") || normalizedTsc.Contains("DE")) return "DE"; + if (normalizedLand.Contains("SPAN") || normalizedTsc is "SE" or "ES") return "ES"; + + return normalizedTsc.Replace("TR", string.Empty); + } + private static void WriteGenericWorkbook(string fullPath, string worksheetName, IReadOnlyList> rows) { using var workbook = new XLWorkbook();