diff --git a/ReportImp/Alloheim/Export/SAPExporter.cs b/ReportImp/Alloheim/Export/SAPExporter.cs index e56e7c7b4..0a63401cd 100644 --- a/ReportImp/Alloheim/Export/SAPExporter.cs +++ b/ReportImp/Alloheim/Export/SAPExporter.cs @@ -66,66 +66,116 @@ namespace Alloheim.Export } /* - 'Betrag', - c.DebitorNumber, - c.CostCenter, - CONCAT(p.`LastName`, ', ', p.`FirstName`) as 'Verwendung', - cb2sc.Oid + sum(qry.Betrag), + qry.DebitorNumber, + qry.CostCenter, + qry.Verwendung, + qry.Oid */ DateTime lastDate = new DateTime(date.Year, date.Month, 1); lastDate = lastDate.AddMonths(1).AddDays(-1); sb.Append("7177\t"); // Buchungskreis 7177 sb.Append("DR\t"); // Beleg DR für Rechnung / DG für Gutschrift - sb.Append(String.Format("{0:dd.MM.yyyy} \t", lastDate)); - sb.Append(String.Format("{0:dd.MM.yyyy} \t", lastDate)); + sb.Append(String.Format("{0:ddMMyyyy} \t", lastDate)); + sb.Append(String.Format("{0:ddMMyyyy} \t", lastDate)); sb.Append("EUR\t"); - sb.Append("7177123456\t"); // Profitcenter + Rechnungs - Nr.VN TODO + sb.Append(String.Format("7177{0:ddMMyyyy} \t", lastDate));// Profitcenter + Rechnungs - Nr.VN sb.Append("7177\t"); // Belegkopftext 7177 sb.Append("D\t"); // D = Debitorenposition / zweite Zeile: S = Sachkontenposition sb.Append("01\t"); // Kontoart D: S=01 H=11 / zweite Zeile: Kontoart S: S=40 H=50 - sb.Append(String.Format("{0}\t", row[1])); //DebitorNumber / zweite Zeile: Sachkonto SAP TODO + sb.Append(String.Format("{0}\t", row[1])); //DebitorNumber / zweite Zeile: Sachkonto SAP sb.Append(String.Format("{0:0.00}\t", row[0])); //Betrag sb.Append("00\t"); // Umsatzsteuerschlüssel sb.Append("H\t"); // zweite Zeile: S - sb.Append("7177123456\t"); // Debitorennummer Bewohner TODO - sb.Append(String.Format("7177123456:{0:MM}/{0:yyyy}:{1}\t", lastDate, row[4])); // Buchungstext: Bew.Nr., Abr.-Zeitraum, Nachname, Vorname TODO + sb.Append(String.Format("7177{0}\t", row[1])); // Debitorennummer Bewohner + sb.Append(String.Format("7177{0} {1:MM}/{1:yyyy}:{2}\t", row[1], lastDate, row[3])); // Buchungstext: Bew.Nr., Abr.-Zeitraum, Nachname, Vorname + sb.AppendLine(); + + // zweite Linie - Rechnungspostionen + sb.Append("7177\t"); // Buchungskreis 7177 + sb.Append("DR\t"); // Beleg DR für Rechnung / DG für Gutschrift + sb.Append(String.Format("{0:ddMMyyyy} \t", lastDate)); + sb.Append(String.Format("{0:ddMMyyyy} \t", lastDate)); + sb.Append("EUR\t"); + sb.Append(String.Format("7177{0:ddMMyyyy} \t", lastDate));// Profitcenter + Rechnungs - Nr.VN + sb.Append("7177\t"); // Belegkopftext 7177 + sb.Append("S\t"); // S = Sachkontenposition + sb.Append("50\t"); // Kontoart Kontoart S: S=40 H=50 + sb.Append("409600\t"); // zweite Zeile: Sachkonto SAP + sb.Append(String.Format("{0:0.00}\t", row[0])); //Betrag + sb.Append("00\t"); // Umsatzsteuerschlüssel + sb.Append("S\t"); + sb.Append(String.Format("7177{0}\t", row[1])); // Debitorennummer Bewohner + sb.Append(String.Format("7177{0} {1:MM}/{1:yyyy}:{2}\t", row[1], lastDate, row[3])); // Buchungstext: Bew.Nr., Abr.-Zeitraum, Nachname, Vorname } return sb.ToString(); } private static String GetMonatlicheBetraegeSql(DateTime date) - { + { String sql = @" - SELECT - IF(crpRateFactor.`CostRateValue` is null, ROUND((sr.`GeleisteteFLM` / 60) * (SELECT crp.`CostRateValue` FROM `costrateperiod` crp WHERE crp.`ObjectTid` = 22 AND crp.`CostRateType` = 0 AND crp.`ObjectOid` = cb2sc.`CostBearerOid` AND (crp.`EndDate` is null or crp.`EndDate` > ':Monat_Start') order by IF(crp.`EndDate` is null, MAKEDATE(9999,365),crp.`EndDate`) LIMIT 1 )), - ROUND(ROUND((sr.`GeleisteteFLM` / 60), 2) * (SELECT crp.`CostRateValue` FROM `costrateperiod` crp WHERE crp.`ObjectTid` = 22 AND crp.`CostRateType` = 0 AND crp.`ObjectOid` = cb2sc.`CostBearerOid` AND (crp.`EndDate` is null or crp.`EndDate` > ':Monat_Start') order by IF(crp.`EndDate` is null, MAKEDATE(9999,365),crp.`EndDate`) LIMIT 1 ) * ((100 + crpRateFactor.`CostRateValue`)/100), 2)) AS 'Betrag', - c.DebitorNumber, - c.CostCenter, - CONCAT(p.`LastName`, ', ', p.`FirstName`) as 'Verwendung', - cb2sc.Oid - FROM `supportconcept` sc - INNER JOIN `costbearer2supportconcept` cb2sc ON sc.`Oid` = cb2sc.`SupportConceptOid` - INNER JOIN `costbearer` cb ON cb2sc.`CostBearerOid` = cb.`Oid` - LEFT JOIN - (SELECT crp.`ObjectOid`, crp.`CostRateValue` FROM `costrateperiod` crp - WHERE crp.`ObjectTid` = 22 AND crp.`CostRateType` = 2 AND (crp.`EndDate` is null or crp.`EndDate` > NOW())) - AS crpRateFactor ON crpRateFactor.`ObjectOid` = 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` - LEFT JOIN - (SELECT sr2.`CostBearer2SupportConceptOid`, SUM(sr2.`roundedduration` / IF(sr2.`GroupEmployeeCount` is null, 1, sr2.`GroupEmployeeCount`)) AS GeleisteteFLM FROM `servicerecord` sr2 - INNER JOIN `servicedescription` sd ON sr2.`ServiceDescriptionOid` = sd.`Oid` - INNER JOIN `servicecategory` sc ON sd.`ServiceCategoryOid` = sc.`Oid` - WHERE sr2.`StartDate` >= ':Monat_Start' AND sr2.`StartDate` < ':Monat_End' AND sc.`Billable` = 1 GROUP BY sr2.`CostBearer2SupportConceptOid`) - AS sr ON sr.`CostBearer2SupportConceptOid` = cb2sc.`Oid` - WHERE c.`IsActive` = 1 AND sc.`IsActive` = 1 - and (sr.`GeleisteteFLM` is not null) - HAVING Betrag > 0 - ORDER BY p.`LastName`, p.`FirstName`, cb2sc.`ApprovedStartDate` - "; + SELECT + sum(qry.Betrag), + qry.DebitorNumber, + qry.CostCenter, + qry.Verwendung, + qry.Oid + FROM + ( + (SELECT + IF(crpRateFactor.`CostRateValue` is null, ROUND((sr.`GeleisteteFLM` / 60) * (SELECT crp.`CostRateValue` FROM `costrateperiod` crp WHERE crp.`ObjectTid` = 22 AND crp.`CostRateType` = 0 AND crp.`ObjectOid` = cb2sc.`CostBearerOid` AND (crp.`EndDate` is null or crp.`EndDate` > ':Monat_Start') order by IF(crp.`EndDate` is null, MAKEDATE(9999,365),crp.`EndDate`) LIMIT 1 )), + ROUND(ROUND((sr.`GeleisteteFLM` / 60), 2) * (SELECT crp.`CostRateValue` FROM `costrateperiod` crp WHERE crp.`ObjectTid` = 22 AND crp.`CostRateType` = 0 AND crp.`ObjectOid` = cb2sc.`CostBearerOid` AND (crp.`EndDate` is null or crp.`EndDate` > ':Monat_Start') order by IF(crp.`EndDate` is null, MAKEDATE(9999,365),crp.`EndDate`) LIMIT 1 ) * ((100 + crpRateFactor.`CostRateValue`)/100), 2)) AS 'Betrag', + c.DebitorNumber, + c.CostCenter, + CONCAT(p.`LastName`, ', ', p.`FirstName`) as 'Verwendung', + cb2sc.Oid + FROM `supportconcept` sc + INNER JOIN `costbearer2supportconcept` cb2sc ON sc.`Oid` = cb2sc.`SupportConceptOid` + INNER JOIN `costbearer` cb ON cb2sc.`CostBearerOid` = cb.`Oid` + LEFT JOIN + (SELECT crp.`ObjectOid`, crp.`CostRateValue` FROM `costrateperiod` crp + WHERE crp.`ObjectTid` = 22 AND crp.`CostRateType` = 2 AND (crp.`EndDate` is null or crp.`EndDate` > NOW())) + AS crpRateFactor ON crpRateFactor.`ObjectOid` = 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` + LEFT JOIN + (SELECT sr2.`CostBearer2SupportConceptOid`, SUM(sr2.`roundedduration` / IF(sr2.`GroupEmployeeCount` is null, 1, sr2.`GroupEmployeeCount`)) AS GeleisteteFLM FROM `servicerecord` sr2 + INNER JOIN `servicedescription` sd ON sr2.`ServiceDescriptionOid` = sd.`Oid` + INNER JOIN `servicecategory` sc ON sd.`ServiceCategoryOid` = sc.`Oid` + WHERE sr2.`StartDate` >= ':Monat_Start' AND sr2.`StartDate` < ':Monat_End' AND sc.`Billable` = 1 and sd.Name <> 'Fehlkontakt' GROUP BY sr2.`CostBearer2SupportConceptOid`) + AS sr ON sr.`CostBearer2SupportConceptOid` = cb2sc.`Oid` + WHERE c.`IsActive` = 1 AND sc.`IsActive` = 1 + and (sr.`GeleisteteFLM` is not null) + and org.Name = 'LVR') + UNION + (SELECT + ROUND(0.8 * (sr.`GeleisteteFLM` / 60) * (SELECT crp.`CostRateValue` FROM `costrateperiod` crp WHERE crp.`ObjectTid` = 22 AND crp.`CostRateType` = 0 AND crp.`ObjectOid` = cb2sc.`CostBearerOid` AND (crp.`EndDate` is null or crp.`EndDate` > ':Monat_Start') order by IF(crp.`EndDate` is null, MAKEDATE(9999,365),crp.`EndDate`) LIMIT 1 )) AS 'Betrag', + c.DebitorNumber, + c.CostCenter, + CONCAT(p.`LastName`, ', ', p.`FirstName`) as 'Verwendung', + cb2sc.Oid + 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` + LEFT JOIN + (SELECT sr2.`CostBearer2SupportConceptOid`, SUM(sr2.`roundedduration` / IF(sr2.`GroupEmployeeCount` is null, 1, sr2.`GroupEmployeeCount`)) AS GeleisteteFLM FROM `servicerecord` sr2 + INNER JOIN `servicedescription` sd ON sr2.`ServiceDescriptionOid` = sd.`Oid` + INNER JOIN `servicecategory` sc ON sd.`ServiceCategoryOid` = sc.`Oid` + WHERE sr2.`StartDate` >= ':Monat_Start' AND sr2.`StartDate` < ':Monat_End' AND sc.`Billable` = 1 and sd.Name = 'Fehlkontakt' GROUP BY sr2.`CostBearer2SupportConceptOid`) + AS sr ON sr.`CostBearer2SupportConceptOid` = cb2sc.`Oid` + WHERE c.`IsActive` = 1 AND sc.`IsActive` = 1 + and (sr.`GeleisteteFLM` is not null) + and org.Name = 'LVR') + )qry + GROUP BY qry.OID + ORDER BY qry.Verwendung + "; return sql; } @@ -138,12 +188,13 @@ namespace Alloheim.Export sip.Claim, 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, +-- ii.ItemDescription, +-- Round(ii.AmountTotal, 2) AS 'Betrag', c.CostCenter, ib.Oid, ib.AccountingPeriodEnd @@ -163,44 +214,46 @@ ib.AccountingPeriodEnd { sb.AppendLine(); } - string key = String.Format("{0}_{1}", row[2], row[1]); - if (!key2Value.ContainsKey(key)) - { - key2Value.Add(key, key); - // Erste Linie - Rechnung ToDo Dictionary, damit erste Zeile nur einmal geschrieben wird - sb.Append("7177\t"); // Buchungskreis 7177 - sb.Append("DR\t"); // Beleg DR für Rechnung / DG für Gutschrift - sb.Append(String.Format("{0:dd.MM.yyyy}\t", row[4])); - sb.Append(String.Format("{0:dd.MM.yyyy}\t", row[4])); - sb.Append("EUR\t"); - sb.Append(String.Format("7177{0}\t", row[1])); // Profitcenter + Rechnungs - Nr.VN - sb.Append("7177\t"); // Belegkopftext 7177 - sb.Append("D\t"); // D = Debitorenposition / zweite Zeile: S = Sachkontenposition - sb.Append("01\t"); // Kontoart D: S=01 H=11 / zweite Zeile: Kontoart S: S=40 H=50 - sb.Append(String.Format("{0}\t", row[2])); //DebitorNumber / zweite Zeile: Sachkonto SAP TODO - sb.Append(String.Format("{0:0.00}\t", row[0])); //Betrag - sb.Append("00\t"); // Umsatzsteuerschlüssel - sb.Append("H\t"); // zweite Zeile: S - sb.Append(String.Format("7177{0}\t", row[2])); // Debitorennummer Bewohner - sb.Append(String.Format("7177{0}:{1:MM}/{2:yyyy}:{3}\t", row[2], row[4], row[6])); // Buchungstext: Bew.Nr., Abr.-Zeitraum, Nachname, Vorname - sb.AppendLine(); - } + // Dictionary wird nicht gebraucht, weil derzeit alle Buchungen auf ein Sachkonto gehen + //string key = String.Format("{0}_{1}", row[2], row[1]); //Dictionary, damit erste Zeile nur einmal geschrieben wird + //if (!key2Value.ContainsKey(key)) + //{ + //key2Value.Add(key, key); + + // Erste Linie - Rechnung + sb.Append("7177\t"); // Buchungskreis 7177 + sb.Append("DR\t"); // Beleg DR für Rechnung / DG für Gutschrift + sb.Append(String.Format("{0:ddMMyyyy}\t", row[3])); + sb.Append(String.Format("{0:ddMMyyyy}\t", row[3])); + sb.Append("EUR\t"); + sb.Append(String.Format("7177{0}\t", row[1])); // Profitcenter + Rechnungs - Nr.VN + sb.Append("7177\t"); // Belegkopftext 7177 + sb.Append("D\t"); // D = Debitorenposition / zweite Zeile: S = Sachkontenposition + sb.Append("01\t"); // Kontoart D: S=01 H=11 / zweite Zeile: Kontoart S: S=40 H=50 + sb.Append(String.Format("{0}\t", row[2])); //DebitorNumber / zweite Zeile: Sachkonto SAP + sb.Append(String.Format("{0:0.00}\t", row[0])); //Betrag + sb.Append("00\t"); // Umsatzsteuerschlüssel + sb.Append("H\t"); + sb.Append(String.Format("7177{0}\t", row[2])); // Debitorennummer Bewohner + sb.Append(String.Format("7177{0}:{1:MM}/{1:yyyy}:{2}\t", row[2], row[3], row[5])); // Buchungstext: Bew.Nr., Abr.-Zeitraum, Nachname, Vorname + sb.AppendLine(); + //} // zweite Linie - Rechnungspostionen sb.Append("7177\t"); // Buchungskreis 7177 sb.Append("DR\t"); // Beleg DR für Rechnung / DG für Gutschrift - sb.Append(String.Format("{0:dd.MM.yyyy} \t", row[4])); - sb.Append(String.Format("{0:dd.MM.yyyy} \t", row[4])); + sb.Append(String.Format("{0:ddMMyyyy} \t", row[3])); + sb.Append(String.Format("{0:ddMMyyyy} \t", row[3])); sb.Append("EUR\t"); sb.Append(String.Format("7177{0}\t", row[1])); // Profitcenter + Rechnungs - Nr.VN sb.Append("7177\t"); // Belegkopftext 7177 sb.Append("S\t"); // S = Sachkontenposition sb.Append("50\t"); // Kontoart Kontoart S: S=40 H=50 - sb.Append(String.Format("{0}\t", row[2])); // zweite Zeile: Sachkonto SAP TODO - sb.Append(String.Format("{0:0.00}\t", row[3])); //Betrag + sb.Append("409600\t"); // zweite Zeile: Sachkonto SAP + sb.Append(String.Format("{0:0.00}\t", row[0])); //Betrag sb.Append("00\t"); // Umsatzsteuerschlüssel sb.Append("S\t"); sb.Append(String.Format("7177{0}\t", row[2])); // Debitorennummer Bewohner - sb.Append(String.Format("7177{0}:{1:MM}/{2:yyyy}:{3}\t", row[2], row[4], row[6])); // Buchungstext: Bew.Nr., Abr.-Zeitraum, Nachname, Vorname + sb.Append(String.Format("7177{0}:{1:MM}/{1:yyyy}:{2}\t", row[2], row[3], row[5])); // Buchungstext: Bew.Nr., Abr.-Zeitraum, Nachname, Vorname } return sb.ToString(); @@ -213,12 +266,12 @@ SELECT sip.Claim, 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, +-- ii.ItemDescription, +-- Round(ii.AmountTotal, 2) AS 'Betrag', c.CostCenter, ib.Oid, ib.AccountingPeriodEnd @@ -231,7 +284,7 @@ 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 +-- 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` ";