diff --git a/ReportImp/LebenshilfeBadKreuznachFUD/Export/CustomDataExporter.cs b/ReportImp/LebenshilfeBadKreuznachFUD/Export/CustomDataExporter.cs
new file mode 100644
index 000000000..0f0f590f0
--- /dev/null
+++ b/ReportImp/LebenshilfeBadKreuznachFUD/Export/CustomDataExporter.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using BeWo.Service.Core;
+using BeWo.Service.Plugins;
+using BS.Shared.Core;
+using BS.Shared.DataContracts;
+using Utils = BS.Shared.Core.Utils;
+
+namespace LebenshilfeBadKreuznachFUD.Export
+{
+ public class CustomDataExporter : DataExporter
+ {
+ public override QueryDC CreateQuery(QueryDC query)
+ {
+ return SageExporter.CreateQuery(query);
+ }
+ }
+}
diff --git a/ReportImp/LebenshilfeBadKreuznachFUD/Export/SageExporter.cs b/ReportImp/LebenshilfeBadKreuznachFUD/Export/SageExporter.cs
new file mode 100644
index 000000000..43bbcecb2
--- /dev/null
+++ b/ReportImp/LebenshilfeBadKreuznachFUD/Export/SageExporter.cs
@@ -0,0 +1,166 @@
+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 LebenshilfeBadKreuznachFUD.Export
+{
+ public class SageExporter
+ {
+ private String teamname = "Integration";
+
+ public static QueryDC CreateQuery(QueryDC query)
+ {
+ DateTime dt = DateTime.Now;
+ DateTime.TryParse(query.Parameter[0].Value.ToString(), out dt);
+ if (query.Oid == 100)
+ {
+ query.FileName = String.Format("SageExportIntegration{0:yyyyMM}.csv", dt);
+ query.QueryResult = GetAbrechnungenString(dt, "Integration");
+ }
+ else if (query.Oid == 101)
+ {
+ query.FileName = String.Format("SageExportEntlastung{0:yyyyMM}.csv", dt);
+ query.QueryResult = GetAbrechnungenString(dt, "Entlastung");
+ }
+ else if (query.Oid == 102)
+ {
+ query.FileName = String.Format("SageExportAutismus{0:yyyyMM}.csv", dt);
+ query.QueryResult = GetAbrechnungenString(dt, "Autismus");
+ }
+
+ return query;
+ }
+
+ public static String GetAbrechnungenString(DateTime date, String teamname)
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.AppendLine("Buchungsdatum; Belegdatum; Belegnummer; Buchungstext; Sollkonto; Habenkonto; Umsatz; Währung; Steuerart; Steuercode; " +
+ "Kostenstelle Soll; Kostenstelle Haben; Kostenträger Soll; Kostenträger Haben; Kostenart; Buchungskreis");
+
+ var s = GetMonatlicheRechnungenString(date, teamname);
+ if (!String.IsNullOrWhiteSpace(s))
+ {
+ sb.Append(s);
+ }
+
+ return sb.ToString();
+ }
+
+ public static String GetMonatlicheRechnungenString(DateTime date, String teamname)
+ {
+ var sql = GetMonatlicheRechnungenSql(date);
+
+ /*
+cb2sc.Oid,
+ib.InvoiceNumber,
+c.DebitorNumber,
+Round(ii.AmountTotal, 2) AS 'Betrag',
+ib.InvoiceDate,
+org.Name AS 'VerwendungOrg'
+CONCAT(p.`LastName`, ', ', p.`FirstName`) as 'VerwendungPerson',
+org.DebitorNumber,
+ii.ItemDescription,
+c.CostCenter,
+ib.Oid,
+ib.AccountingPeriodEnd,
+ */
+
+ //sb.AppendLine("Belegdatum;Belegnummer;Debitorennummer;Kontonummer;Betrag;Buchungstext;Kostenstelle");
+ //sb.AppendLine("Buchungsdatum; Belegdatum; Belegnummer; Buchungstext; Sollkonto; Habenkonto; Umsatz; Währung; Steuerart; Steuercode; " +
+ // "Kostenstelle Soll; Kostenstelle Haben; Kostenträger Soll; Kostenträger Haben; Kostenart; Buchungskreis");
+ var dt = ExecuteQuery(sql, date, teamname);
+
+ StringBuilder sb = new StringBuilder();
+ foreach (DataRow row in dt.Rows)
+ {
+ if (sb.Length > 0)
+ {
+ sb.AppendLine();
+ }
+ sb.Append(String.Format("{0:dd.MM.yyyy}", row[4]));
+ sb.Append(";");
+ sb.Append(String.Format("{0:dd.MM.yyyy}", row[4]));
+ sb.Append(";");
+ sb.Append(String.Format("{0}", row[1]));
+ sb.Append(";");
+ String buchungstext = String.Format("AR-SI {0:MM}/{0:yyyy} {1} - {2}", row[11], row[5], row[6]);
+ sb.Append(buchungstext);
+ sb.Append(";");
+ sb.Append(String.Format("{0}", row[7])); // Sollkonto - Kundennr. Kostenträger
+ sb.Append(";");
+ String hbnKto = "S82035"; // Habenkonto für 1. Halbjahr
+ if (date.Month > 6)
+ {
+ hbnKto = "S82025";
+ }
+ sb.Append(String.Format("{0}", hbnKto)); // Habenkonto
+ sb.Append(";");
+ sb.Append(String.Format("{0:0.00}", row[3]));
+ sb.Append(";EUR;;;");
+ sb.Append("T70400"); // Kostenstelle (String.Format("{0}", row[9]));
+ sb.Append(";;;;;12"); // Buchungskreis
+ }
+
+ return sb.ToString();
+ }
+
+ private static String GetMonatlicheRechnungenSql(DateTime date)
+ {
+
+ String sql = @"
+SELECT * FROM
+(SELECT
+cb2sc.Oid AS cb2scOid,
+ib.InvoiceNumber,
+c.DebitorNumber,
+Round(ii.GrossAmountTotal, 2) AS 'Betrag',
+ib.InvoiceDate,
+org.Name AS 'VerwendungOrg',
+CONCAT(p.`LastName`, ', ', p.`FirstName`) as 'VerwendungPerson',
+org.DebitorNumber AS OrgDebitorNumber,
+ii.ItemDescription,
+c.CostCenter,
+ib.Oid AS ibOid,
+ib.AccountingPeriodEnd,
+(select t.name from team t inner join team2customer t2c on t2c.teamoid = t.oid where t2c.customeroid = c.Oid limit 1) AS Team
+FROM `supportconcept` sc
+INNER JOIN `costbearer2supportconcept` cb2sc ON sc.`Oid` = cb2sc.`SupportConceptOid`
+INNER JOIN `costbearer` cb ON cb2sc.`CostBearerOid` = cb.`Oid`
+INNER JOIN `organisation` org ON org.`CostBearerOid` = cb.`Oid`
+INNER JOIN `customer` c ON sc.`CustomerOid` = c.`Oid`
+INNER JOIN `person` p on c.`PersonOid` = p.`Oid`
+INNER JOIN invoicebase ib on ib.costbearer2supportconceptoid = cb2sc.oid
+inner join serviceinvoice si on si.invoicebaseoid = ib.oid
+inner join serviceinvoiceperiod sip on sip.serviceinvoiceoid = si.oid
+inner join invoiceitem ii on ii.serviceinvoiceperiodoid = sip.oid
+WHERE ib.`AccountingPeriodEnd` >= ':Monat_Start' AND ib.`AccountingPeriodEnd` < ':Monat_End' and ib.IsActive = 1
+ORDER BY p.`LastName`, p.`FirstName`, cb2sc.`ApprovedStartDate`) AS sqry
+WHERE Team = ':teamname'
+";
+
+ return sql;
+ }
+
+ public static DataTable ExecuteQuery(String sql, DateTime dt, String teamname)
+ {
+ 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));
+ newsql = newsql.Replace(":teamname", String.Format("{0}", teamname));
+
+ return DAOFactory.AdoDAO.ExecuteQuery(newsql).Tables[0];
+ }
+ }
+}
\ No newline at end of file
diff --git a/ReportImp/LebenshilfeBadKreuznachFUD/LebenshilfeBadKreuznachFUD.csproj b/ReportImp/LebenshilfeBadKreuznachFUD/LebenshilfeBadKreuznachFUD.csproj
index ff50975a2..99f2cfd86 100644
--- a/ReportImp/LebenshilfeBadKreuznachFUD/LebenshilfeBadKreuznachFUD.csproj
+++ b/ReportImp/LebenshilfeBadKreuznachFUD/LebenshilfeBadKreuznachFUD.csproj
@@ -58,6 +58,8 @@
+
+
@@ -110,7 +112,6 @@
-