Files
BeWoPlaner/ReportImp/HshCologne/Export/FibuExporter.cs
2026-06-12 12:20:38 +02:00

142 lines
5.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Text;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.DCEntityMapper;
using BS.Shared;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
namespace HshCologne.Export
{
public class FibuExporter
{
public static QueryDC CreateQuery(QueryDC query)
{
DateTime dt = DateTime.Now;
DateTime.TryParse(query.Parameter[0].Value.ToString(), out dt);
query.FileName = String.Format("Fibu Export {0:yyyyMM}.csv", dt);
query.QueryResult = GetAbrechnungenString(dt);
return query;
}
public static String GetAbrechnungenString(DateTime date)
{
//geklaut von SKFLeverkusen Jugendhilfe, sollte Sammelrechnung nötig sein, von da wiederholen
StringBuilder sb = new StringBuilder();
sb.AppendLine("Umsatz in Euro;Gegenkonto;Beleg1;Beleg2;Datum;Konto;Buchungstext");
var s = GetMonatlicheRechnungenString(date);
if (!String.IsNullOrWhiteSpace(s))
{
sb.Append(s);
}
return sb.ToString();
}
public static String GetMonatlicheRechnungenString(DateTime date)
{
/*
sip.Claim,
c.DebitorNumber,
ib.InvoiceDate,
ib.invoicenumber,
c.CostCenter,
c2s.Oid,
ib.InvoiceId
*/
//sb.AppendLine("Belegdatum;Belegnummer;Debitorennummer;Kontonummer;Betrag;Buchungstext;Kostenstelle");
//"Datum;Konto;Gegenkonto;Buchungstext;Belegfeld1;Umsatz Soll;Kostenstelle"
//sb.AppendLine("Umsatz Euro;BU Gkto;Beleg1;Beleg2;Datum;Konto;Buchungstext");
var sql = GetMonatlicheRechnungenSql(date);
var dt = ExecuteQuery(sql, date);
StringBuilder sb = new StringBuilder();
foreach (DataRow row in dt.Rows)
{
if (sb.Length > 0)
{
sb.AppendLine();
}
DateTime lastDate = new DateTime(date.Year, date.Month, 1);
lastDate = lastDate.AddMonths(1).AddDays(-1);
sb.Append(String.Format("{0:0.00}", row[0]));
sb.Append(";");
sb.Append("4100"); // Erlöskonto
sb.Append(";");
sb.Append(String.Format("{0}", row[3])); // Belegfeld 1
sb.Append(";");
sb.Append(String.Format("{0}", row[4])); // Belegfeld 2
sb.Append(";");
sb.Append(String.Format("{0:dd.MM.yyyy}", row[2]));
sb.Append(";");
sb.Append(String.Format("{0}", row[1])); // Debitor Organisation
sb.Append(";");
sb.Append(String.Format("{0}", row[5])); // Buchungstext
}
return sb.ToString();
}
private static String GetMonatlicheRechnungenSql(DateTime date)
{
String sql = @"
SELECT * FROM
(SELECT
SUM(sip.Claim),
org.DebitorNumber,
ib.InvoiceDate,
ib.invoicenumber,
SUBSTRING_INDEX(org.Name2, ';', 1) AS JA,
SUBSTRING_INDEX(org.Name2, ';', -1) AS BTxt,
ib.Oid
FROM
invoicebase ib
inner join serviceinvoice si on si.invoicebaseoid = ib.oid
inner join serviceinvoiceperiod sip on sip.serviceinvoiceoid = si.oid
inner join costbearer cb on ib.recipientcostbeareroid = cb.oid
inner join organisation org on org.costbeareroid = cb.oid
WHERE ib.InvoiceDate >= ':Monat_Start' AND ib.InvoiceDate < ':Monat_End' and ib.IsActive = 1 AND ib.`IsExported` = 0
GROUP BY ib.Oid
UNION
SELECT
sum(ii.AmountTotal),
org.DebitorNumber,
ib.InvoiceDate,
ib.invoicenumber,
SUBSTRING_INDEX(org.Name2, ';', 1) AS JA,
SUBSTRING_INDEX(org.Name2, ';', -1) AS BTxt,
ib.Oid
FROM invoicebase ib
INNER JOIN organisation org ON org.costbeareroid = ib.RecipientOrganisationOid
INNER JOIN invoiceitem ii ON ii.invoicebaseoid = ib.Oid
WHERE ib.InvoiceDate >= ':Monat_Start' AND ib.InvoiceDate < ':Monat_End' AND ib.IsActive = 1 AND ib.`IsExported` = 0 and ib.Type = 2) qry
ORDER BY qry.invoicenumber
";
return sql;
}
public static DataTable ExecuteQuery(String sql, DateTime dt)
{
var newsql = sql;
newsql = newsql.Replace(":Abrechnungsmonat", String.Format("{0:dd.MM.yyyy}", dt));
newsql = newsql.Replace(":Belegnr", String.Format("{0:yyMM}", dt));
newsql = newsql.Replace(":Monat_MM", String.Format("{0:MM}", dt));
newsql = newsql.Replace(":Monat_Start", String.Format("{0:yyyy-MM}-01", dt));
dt = dt.AddMonths(1);
newsql = newsql.Replace(":Monat_End", String.Format("{0:yyyy-MM}-01", dt));
return DAOFactory.AdoDAO.ExecuteQuery(newsql).Tables[0];
}
}
}