From 5f81df13a8c4076cc75f69fbcdf49819fe5eb37a Mon Sep 17 00:00:00 2001 From: Alexandra Date: Mon, 27 Jan 2025 14:26:40 +0100 Subject: [PATCH] AkkuratDienstleistungsgesellschaft/Export/AddisonExporter.cs - Spitzabrechnung + Avise neu dazu --- .../Export/AddisonExporter.cs | 105 +++++++++++++++--- 1 file changed, 91 insertions(+), 14 deletions(-) diff --git a/ReportImp/AkkuratDienstleistungsgesellschaft/Export/AddisonExporter.cs b/ReportImp/AkkuratDienstleistungsgesellschaft/Export/AddisonExporter.cs index 83bf8a1df..09061a486 100644 --- a/ReportImp/AkkuratDienstleistungsgesellschaft/Export/AddisonExporter.cs +++ b/ReportImp/AkkuratDienstleistungsgesellschaft/Export/AddisonExporter.cs @@ -14,6 +14,8 @@ namespace Akkurat.Export { public class AddisonExporter { + // Export Abschlagszahlungen vorbereitet, da fehlt noch das genaue Format + // Spitzabrechnungen und Erlöskonten sind soweit drin, einmal testen public static QueryDC CreateQuery(QueryDC query) { @@ -24,6 +26,11 @@ namespace Akkurat.Export query.FileName = String.Format("deb {0:yyMM}csv", dt); query.QueryResult = GetDebitorenString(dt); } + else if (query.Title == "Export Abschlagszahlungen") + { + query.FileName = String.Format("avise {0:yyyyMM}.csv", dt); + query.QueryResult = GetAbrechnungenString(dt); + } else { query.FileName = String.Format("fibu {0:yyyyMM}.csv", dt); @@ -62,28 +69,45 @@ namespace Akkurat.Export { StringBuilder sb = new StringBuilder(); sb.AppendLine("B;Mandant;Monat;Buchungsdatum;Rechnungsnummer;Buchungstext;Betrag;Konto;Gegenkonto;Debitor"); - - var s = GetMonatlicheBetraegeString(date); + + var s = GetMonatlicheBetraegeString(date, true); if (!String.IsNullOrWhiteSpace(s)) { sb.Append(s); } + + s = GetMonatlicheBetraegeString(date, false); + if (!String.IsNullOrWhiteSpace(s)) + { + if (sb.Length > 0) + { + sb.AppendLine(); + } + sb.Append(s); + } return sb.ToString(); } - public static String GetMonatlicheBetraegeString(DateTime date) + public static String GetMonatlicheBetraegeString(DateTime date, bool umsaetze) { - var sql = GetMonatlicheBetraegeLvrSql(date); - /* -'Betrag', -c.DebitorNumber, -c.CostCenter, -CONCAT(p.`LastName`, ', ', p.`FirstName`) as 'Verwendung', -cb2sc.Oid, -cb2sc.Notice AS 'Kostenstelle', + 'Betrag', + c.DebitorNumber, + c.CostCenter, + CONCAT(p.`LastName`, ', ', p.`FirstName`) as 'Verwendung', + cb2sc.Oid, + cb2sc.Notice AS 'Kostenstelle', */ //"B;Mandant;Monat;Buchungsdatum;Rechnungsnummer;Buchungstext;Betrag;Konto;Gegenkonto;Debitor" + string sql = ""; + if (umsaetze) + { + sql = GetMonatlicheBetraegeLvrSql(date); + } + else + { + sql = GetSpitzabrechnungSql(date); + } var dt = ExecuteQuery(sql, date); StringBuilder sb = new StringBuilder(); @@ -95,13 +119,23 @@ cb2sc.Notice AS 'Kostenstelle', } DateTime lastDate = new DateTime(date.Year, date.Month, 1); lastDate = lastDate.AddMonths(1).AddDays(-1); - + if(!umsaetze && row[5].ToString().Length > 0) + { + lastDate = (DateTime)row[5]; + } sb.Append("B;499;"); sb.Append(String.Format("{0:MM}{0:yyyy}", lastDate)); sb.Append(";"); sb.Append(String.Format("{0:dd.MM.yyyy}", lastDate)); sb.Append(";"); - sb.Append(String.Format("{0:MM}{0:yyyy}", lastDate)); //Rechnungsnummer noch zu klären + if(!umsaetze) + { + sb.Append(row[4]); + } + else + { + sb.Append(String.Format("{0:MM}{0:yyyy}", lastDate)); //Rechnungsnummer noch zu klären + } sb.Append(";"); sb.Append(String.Format("{0:MM}{0:yy} ABW {1}", lastDate, row[3])); //Buchungstext sb.Append(";"); @@ -116,7 +150,7 @@ cb2sc.Notice AS 'Kostenstelle', sb.Append(";"); sb.Append(String.Format("{0}", row[1])); //Debitor als Konto sb.Append(";"); - sb.Append("8273"); // Erlöskonto + sb.Append(String.Format("{0}", row[2])); // Erlöskonto sb.Append(";"); sb.Append(String.Format("{0}", row[1])); //Debitor sb.Append(";"); @@ -142,6 +176,29 @@ ORDER BY p.`LastName`, p.FirstName return sql; } + private static String GetSpitzabrechnungSql(DateTime date) + { + + String sql = @" +SELECT +Round(si.Claim, 2), +c.DebitorNumber, +c.CostCenter, +CONCAT('Abrechnung ', , p.`LastName`, ' ', p.`FirstName`), +ib.InvoiceNumber, +date_format(ib.InvoiceDate, '%d.%m.%Y') +from invoicebase ib +join settlementinvoice si on si.invoicebaseoid = ib.oid +join supportconcept sc on sc.oid = ib.supportconceptoid +join customer c on c.oid = sc.customeroid +join `person` p on c.`PersonOid` = p.`Oid` +where ib.`InvoiceDate` >= ':Monat_Start' AND ib.`InvoiceDate` < ':Monat_End' +and ib.type = 1 and ib.isactive = 1 and c.isactive <> 0 +"; + + return sql; + } + private static String GetMonatlicheBetraegeLvrSql(DateTime date) { String sql = @" @@ -204,6 +261,26 @@ ORDER BY p.`LastName`, p.FirstName return sql; } + private static String GetAbschlagszahlungenSql(DateTime date) + { + String sql = @" + SELECT + Round(at.Amount, 2) as 'Betrag', + c.DebitorNumber, + c.CostCenter, + CONCAT('Abschlagszahlung ', p.FirstName, ' ', p.LastName) as 'Buchungstext', + date_format(at.BookingDate, '%d.%m.%Y') + from accountingtransaction at + join costbearer2supportconcept c2s on c2s.oid = at.costbearer2supportconceptoid + join supportconcept sc on sc.oid = c2s.supportconceptoid + join customer c on sc.customeroid = c.oid + join person p on c.personoid = p.oid + WHERE at.`BookingDate` >= ':Monat_Start' AND at.`BookingDate` < ':Monat_End' and c.`IsActive` <> 0 AND sc.`IsActive` <> 0 + ORDER BY p.`LastName`, p.`FirstName` + "; + return sql; + } + public static DataTable ExecuteQuery(String sql, DateTime dt) { var newsql = sql;