AkkuratDienstleistungsgesellschaft/Export/AddisonExporter.cs - Spitzabrechnung + Avise neu dazu

This commit is contained in:
2025-01-27 14:26:40 +01:00
parent 06d36074f7
commit 5f81df13a8

View File

@@ -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;