diff --git a/ReportImp/DiakonischesWerkRegensburg/Export/EGeckoExporter.cs b/ReportImp/DiakonischesWerkRegensburg/Export/EGeckoExporter.cs index 57187531c..14ca653ed 100644 --- a/ReportImp/DiakonischesWerkRegensburg/Export/EGeckoExporter.cs +++ b/ReportImp/DiakonischesWerkRegensburg/Export/EGeckoExporter.cs @@ -37,10 +37,24 @@ namespace DiakonischesWerkRegensburg.Export var dt = ExecuteQuery(GetMonatlicheRechnungenSql(date), date); var doc = CreateXML(dt); - using (var sw = new StringWriter()) + // Der Client schreibt QueryResult als Windows-1252 auf Platte (BeWoUtils.WriteFile). + // Damit die Datei trotzdem gültiges UTF-8 mit passender Deklaration ist, werden alle + // Nicht-ASCII-Zeichen (Umlaute etc.) als numerische Zeichenreferenzen kodiert. + var settings = new XmlWriterSettings { - doc.Save(sw); - return sw.ToString(); + Encoding = Encoding.ASCII, + Indent = true, + OmitXmlDeclaration = true + }; + + using (var ms = new MemoryStream()) + { + using (var writer = XmlWriter.Create(ms, settings)) + { + doc.Save(writer); + } + + return "" + Environment.NewLine + Encoding.ASCII.GetString(ms.ToArray()); } } @@ -163,7 +177,7 @@ namespace DiakonischesWerkRegensburg.Export INNER JOIN person p ON c.personoid = p.oid WHERE ib.AccountingPeriodEnd >= ':Monat_Start' AND ib.AccountingPeriodEnd < ':Monat_End' AND ib.IsActive = 1 AND ib.InvoiceId = 'Sammelrechnung' AND ib.IsExported = 0 GROUP BY ib.Oid, ib.InvoiceNumber, ib.InvoiceDate, ib.AccountingPeriodEnd, c.Oid, c.DebitorNumber, p.LastName, p.FirstName - UNION SELECT DISTINCT + UNION SELECT ib.InvoiceDate AS InvoiceDate, c.DebitorNumber AS CustomerDebitor, '1660' AS CustomerCostCenter, @@ -171,7 +185,7 @@ namespace DiakonischesWerkRegensburg.Export CONCAT(p.LastName, ', ', p.FirstName) AS Verwendungszweck, ib.invoicenumber AS InvoiceNumber , (SELECT t.name FROM team t INNER JOIN team2customer t2c ON t2c.teamoid = t.oid WHERE t2c.customeroid = c.Oid limit 1) AS TeamName, - CASE WHEN ib.RecipientOrganisation LIKE '%Selbstzahler%' THEN 049030 ELSE 049020 END AS Erloeskonto, + CASE WHEN ib.RecipientOrganisation LIKE '%Selbstzahler%' THEN '049030' ELSE '049020' END AS Erloeskonto, ib.AccountingPeriodEnd AS Periode, ib.Oid AS InvoiceOid FROM @@ -182,7 +196,8 @@ namespace DiakonischesWerkRegensburg.Export INNER JOIN invoicebase ib ON ib.costbearer2supportconceptoid = c2s.oid INNER JOIN serviceinvoice si ON si.invoicebaseoid = ib.oid INNER JOIN serviceinvoiceperiod sip ON sip.serviceinvoiceoid = si.oid - WHERE ib.`AccountingPeriodEnd` >= ':Monat_Start' AND ib.`AccountingPeriodEnd` < ':Monat_End' AND ib.IsActive = 1 AND ib.InvoiceId IS NULL AND ib.IsExported = 0 + WHERE ib.`AccountingPeriodEnd` >= ':Monat_Start' AND ib.`AccountingPeriodEnd` < ':Monat_End' AND ib.IsActive = 1 AND ib.InvoiceId IS NULL AND ib.IsExported = 0 + GROUP BY ib.Oid, ib.InvoiceNumber, ib.InvoiceDate, ib.AccountingPeriodEnd, ib.RecipientOrganisation, c.Oid, c.DebitorNumber, p.LastName, p.FirstName ) t WHERE t.InvoiceOid IS NOT NULL ORDER BY t.invoicenumber