diff --git a/ReportImp/LebenshilfeBadKreuznachWohnstaette/Export/SageExporter.cs b/ReportImp/LebenshilfeBadKreuznachWohnstaette/Export/SageExporter.cs
index 7dbd7f257..d0ae1bcef 100644
--- a/ReportImp/LebenshilfeBadKreuznachWohnstaette/Export/SageExporter.cs
+++ b/ReportImp/LebenshilfeBadKreuznachWohnstaette/Export/SageExporter.cs
@@ -82,10 +82,10 @@ ib.AccountingPeriodEnd,
String buchungstext = String.Format("AR {0} {1:MM}/{1:yyyy} {2}", row[5], row[11], row[6]);
sb.Append(buchungstext);
sb.Append(";");
- sb.Append(String.Format("{0}", row[2])); // Sollkonto - Debitornr. Klient
+ sb.Append(String.Format("{0}", row[2])); // Sollkonto - Debitornr. Klient bzw. bei Allgemeiner Rechnung Dummy
sb.Append(";");
- String hbnKto = " S82004"; // Habenkonto für BG1 und BG"
- if (row[8].ToString().Contains("Wegevergütung"))
+ String hbnKto = " S82004"; // Habenkonto für TODO "
+ if (row[8].ToString().Contains(""))
{
hbnKto = " S82010";
}
@@ -95,7 +95,7 @@ ib.AccountingPeriodEnd,
sb.Append(";EUR;;;");
sb.Append(String.Format("{0}", row[9]));
sb.Append(";;;;;");
- String kreis = "4"; // Buchungskreis für Team Inklusionsdienst oder KEIN Team = 12 sonst 11
+ String kreis = "4"; // Buchungskreis TODO
if (row[12].ToString().Contains("Inklusionsdienst") || row[12].ToString() == null)
{
kreis = "5";
@@ -110,31 +110,51 @@ ib.AccountingPeriodEnd,
{
String sql = @"
-SELECT
-cb2sc.Oid,
-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,
-ii.ItemDescription,
-c.CostCenter,
-ib.Oid,
-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
+ SELECT
+ cb2sc.Oid,
+ 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,
+ ii.ItemDescription,
+ c.CostCenter,
+ ib.Oid,
+ 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
+ UNION
+ SELECT DISTINCT
+ '' AS Oid,
+ ib.invoicenumber,
+ 'D222222' AS DebitorNumber
+ (select ii.AmountTotal from invoiceitem ii where ii.invoicebaseoid = ib.oid),
+ ib.InvoiceDate,
+ ib.RecipientOrganisation AS 'VerwendungOrg',
+ CONCAT(ib.'RecipientPersonLastName`, ', ', ib.'RecipientPersonFirstName`) as 'VerwendungPerson',
+ 'S99999' AS DebitorNumber,
+ ii.ItemDescription,
+ 'T60000',
+ ib.Oid,
+ ib.AccountingPeriodEnd,
+ 'Allgemeine Rechnung' AS Team
+ from invoicebase ib
+ inner join organisation org on org.costbeareroid = ib.RecipientOrganisationOid
+ WHERE ib.`AccountingPeriodEnd` >= ':Monat_Start' AND ib.`AccountingPeriodEnd` < ':Monat_End' and ib.IsActive = 1
+ and ib.Type = 2 AND ib.`IsExported` = 0
+ -- order by ib.invoicenumber
ORDER BY p.`LastName`, p.`FirstName`, cb2sc.`ApprovedStartDate`
";
diff --git a/ReportImp/LebenshilfeBadKreuznachWohnstaette/LebenshilfeBadKreuznachWohnstaette.csproj b/ReportImp/LebenshilfeBadKreuznachWohnstaette/LebenshilfeBadKreuznachWohnstaette.csproj
index a1777073b..102d47b97 100644
--- a/ReportImp/LebenshilfeBadKreuznachWohnstaette/LebenshilfeBadKreuznachWohnstaette.csproj
+++ b/ReportImp/LebenshilfeBadKreuznachWohnstaette/LebenshilfeBadKreuznachWohnstaette.csproj
@@ -63,6 +63,8 @@
AdditionalServiceBookingReport.cs
+
+
Component
@@ -96,6 +98,7 @@
ServiceInvoiceReport.cs
+
diff --git a/ReportImp/LebenshilfeBadKreuznachWohnstaette/Service/CustomAccountingService.cs b/ReportImp/LebenshilfeBadKreuznachWohnstaette/Service/CustomAccountingService.cs
new file mode 100644
index 000000000..84b578fb2
--- /dev/null
+++ b/ReportImp/LebenshilfeBadKreuznachWohnstaette/Service/CustomAccountingService.cs
@@ -0,0 +1,76 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using System.Windows;
+using BeWo.Data;
+using BeWo.Data.Access;
+using BeWo.Data.Entities;
+using BeWo.Service.DCEntityMapper;
+using BeWo.Service.Invoicing;
+using BeWo.Service.Plugins;
+using BS.Shared;
+using BS.Shared.Core;
+using BS.Shared.DataContracts;
+using BS.Shared.DataContracts.Compact;
+
+namespace LebenshilfeBadKreuznachWohnstaette.Service
+{
+ public class CustomAccountingService : AccountingService
+ {
+ // entspricht dem Original, außer dass die Bewilligung des Hilfeplans abgelaufen sein kann
+ public override List GenerateInitialServiceInvoices(long costBearerOid, long? supportConceptOid, DateTimeSpan invoicePeriod)
+ {
+ var cs = PluginLoader.FindClass();
+ IEnumerable supportConcepts;
+ // GetAllActiveSupportConceptCostbearer returns a "Flat" SupportConcept List, one for each CostBearer2SupportConcept!
+ if (!supportConceptOid.HasValue)
+ {
+ supportConcepts = cs.GetAllActiveSupportConceptCostbearer(false, true, 0)
+ .Where(i => i.CostBearerOids2CostBearerRelOids.ContainsKey(costBearerOid));
+ }
+ else
+ {
+ supportConcepts = cs.GetCompactSupportConcepts(supportConceptOid.Value, null)
+ .Where(i => i.CostBearerOids2CostBearerRelOids.ContainsKey(costBearerOid));
+ }
+
+ DateTimeSpan newSpan = null;
+ if (invoicePeriod != null)
+ {
+ //invoicePeriod.StartDateTime = invoicePeriod.StartDateTime.Date;
+ //invoicePeriod.EndDateTime = invoicePeriod.EndDateTime.Date;
+ newSpan = new DateTimeSpan();
+ newSpan.StartDateTime = invoicePeriod.StartDateTime.Date;
+ newSpan.EndDateTime = invoicePeriod.EndDateTime.Date.AddDays(1).AddTicks(-1);
+ //if (!supportConceptOid.HasValue)
+ //{
+ // supportConcepts =
+ // supportConcepts.Where(sc => sc.StartDate < newSpan.EndDateTime && sc.EndDate >= newSpan.StartDate);
+ //}
+ }
+ var supportConcepts2ServiceRecords = supportConcepts.ToDictionary(
+ i => i,
+ i => MapperFactory.ServiceRecordDC_ServiceRecord.MapToNewDCs(
+ DAOFactory.SearchDAO.FindServiceRecordsInSpan(i.CostBearerRelOids[0], newSpan)));
+ var cb = DAOFactory.GenericDAO.LoadByID(costBearerOid);
+ String tenant = PluginLoader.Tenant;
+ var factory = PluginLoader.FindClass(cb.ID);
+ if (factory == null)
+ {
+ factory = InvoiceFactory.GetInstance(cb.ID, tenant);
+ }
+
+ var creator = factory.CreateInvoiceCreator(cb.ID, tenant, supportConcepts2ServiceRecords);
+ var newInvoices = creator.GenerateServiceInvoices(costBearerOid, invoicePeriod, supportConcepts2ServiceRecords);
+
+
+ //Prüfe ob Rechnungen neu sind oder Diff vorhanden
+ var differenzRechnungChecks = GetNewInvoices(newInvoices, invoicePeriod?.StartDate, invoicePeriod?.EndDate);
+ var resultList = ErstelleNeueRechnungen(differenzRechnungChecks);
+
+
+ return resultList;
+ }
+ }
+}
\ No newline at end of file