From a1440422bc5f50cd7e537265da9becc2baab2e1e Mon Sep 17 00:00:00 2001 From: Alexandra Date: Fri, 1 Sep 2023 15:34:13 +0200 Subject: [PATCH 1/2] Alloheim/Export/SAPExporter --- ReportImp/Alloheim/Export/SAPExporter.cs | 197 ++++++++++++++--------- 1 file changed, 125 insertions(+), 72 deletions(-) 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` "; From c2303fbebd4c3237943e6d502397e0cd19b6fab9 Mon Sep 17 00:00:00 2001 From: Alexandra Date: Fri, 1 Sep 2023 15:34:52 +0200 Subject: [PATCH 2/2] =?UTF-8?q?LebenshilfeBadKreuznach/Quittierungsbeleg?= =?UTF-8?q?=20Ziele=20in=20SCH=C3=96N?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Quittierungsbeleg.cs | 118 ++++++++++++++++-- 1 file changed, 106 insertions(+), 12 deletions(-) diff --git a/ReportImp/LebenshilfeBadKreuznach/Quittierungsbeleg.cs b/ReportImp/LebenshilfeBadKreuznach/Quittierungsbeleg.cs index c6cae5bbc..cecf733c9 100644 --- a/ReportImp/LebenshilfeBadKreuznach/Quittierungsbeleg.cs +++ b/ReportImp/LebenshilfeBadKreuznach/Quittierungsbeleg.cs @@ -91,10 +91,16 @@ namespace LebenshilfeBadKreuznach sd.GoalList = String.Empty; if (srDc.Goals != null && srDc.Goals.Count > 0) { - Dictionary key2Value = new Dictionary(); - var masnahmen = srDc.Goals.Where(g => g.Type == BS.Shared.ValueListEntryType.SupportConceptIndividualGoalType || g.Type == BS.Shared.ValueListEntryType.SupportConceptGoalType).OrderBy(g => g.ParentOid).ToList(); + Dictionary key2Value = new Dictionary(); + Dictionary ziel2kapitel = new Dictionary(); + Dictionary ziel2value = new Dictionary(); + + var masnahmen = srDc.Goals.Where(g => g.Type == BS.Shared.ValueListEntryType.SupportConceptIndividualGoalType || g.Type == BS.Shared.ValueListEntryType.SupportConceptGoalType).OrderBy(g => g.ParentOid).ThenBy(g => g.TypeDescription).ToList(); + var kapitel = srDc.Goals.Where(g => (g.Type == BS.Shared.ValueListEntryType.SupportConceptIndividualGoalCategoryType || g.Type == BS.Shared.ValueListEntryType.SupportConceptGoalCategoryType) && (g.TypeDescription != null && g.TypeDescription.StartsWith("Kapitel")) || (g.DisplayName != null && g.DisplayName.StartsWith("Kapitel"))).OrderBy(g => g.DisplayName).ToList(); + var ziele = srDc.Goals.Where(g => (g.Type == BS.Shared.ValueListEntryType.SupportConceptIndividualGoalCategoryType || g.Type == BS.Shared.ValueListEntryType.SupportConceptGoalCategoryType) && !g.DisplayName.StartsWith("Kapitel")).OrderBy(g => g.DisplayName).ToList(); srDc.Goals = srDc.Goals.Where(g => g.Type == BS.Shared.ValueListEntryType.SupportConceptIndividualGoalCategoryType || g.Type == BS.Shared.ValueListEntryType.SupportConceptGoalCategoryType).OrderBy(g => g.ParentOid).ToList(); - foreach (var goal in srDc.Goals) + + foreach (var goal in kapitel) //nimm zuerst alle Kapitel { var key = goal.ValueListEntryOid.Value; string value = null; @@ -107,10 +113,47 @@ namespace LebenshilfeBadKreuznach value = goal.Abbreviation; } - if (goal.ParentOid.HasValue && key2Value.ContainsKey(goal.ParentOid.Value)) + key2Value.Add(key, value); + } + foreach (var goal in ziele) //dann füge ziele zu bestehendem Kapitel - falls nicht eingetragen ergänze Kapitel + { + var key = goal.ValueListEntryOid.Value; + string value = null; + if (!string.IsNullOrEmpty(goal.TypeDescription)) { - key2Value[goal.ParentOid.Value] += ", " + value; + value = goal.TypeDescription; } + else + { + value = goal.Abbreviation; + } + + if (goal.ParentOid.HasValue) + { + ziel2value[key] = value; + if (key2Value.ContainsKey(goal.ParentOid.Value)) + { + ziel2kapitel.Add(key, goal.ParentOid.Value); + } + else + { + var goalParent = DAOFactory.GenericDAO.LoadByID(goal.ParentOid.Value); + var parent = MapperFactory.ValueListEntryDC_ValueListEntry.MapToNewDC(goalParent); + string parentValue; + if (!string.IsNullOrEmpty(parent.TypeDescription)) + { + parentValue = parent.TypeDescription; + } + else + { + parentValue = parent.Abbreviation; + } + + key2Value.Add(goal.ParentOid.Value, parentValue); + ziel2kapitel.Add(key, goal.ParentOid.Value); + } + } + else { key2Value.Add(key, value); @@ -118,30 +161,81 @@ namespace LebenshilfeBadKreuznach } foreach (var m in masnahmen) { - if (m.ParentOid.HasValue && !key2Value.ContainsKey(m.ParentOid.Value)) + var key = m.ValueListEntryOid.Value; + string value = null; + if (!string.IsNullOrEmpty(m.TypeDescription)) + { + value = m.TypeDescription; + } + else + { + value = m.Abbreviation; + } + if (m.ParentOid.HasValue) { var goalParent = DAOFactory.GenericDAO.LoadByID(m.ParentOid.Value); var parent = MapperFactory.ValueListEntryDC_ValueListEntry.MapToNewDC(goalParent); - string value = null; + string parentValue = null; if (!string.IsNullOrEmpty(parent.TypeDescription)) { - value = parent.TypeDescription; + parentValue = parent.TypeDescription; } else { - value = parent.Abbreviation; + parentValue = parent.Abbreviation; } - key2Value.Add(m.ParentOid.Value, value); + + if (!ziel2kapitel.ContainsKey(m.ParentOid.Value)) //kein Ziel gewählt + { + if (parent.ParentOid.HasValue) + { + ziel2kapitel.Add(m.ParentOid.Value, parent.ParentOid.Value); + } + } + if (!ziel2value.ContainsKey(m.ParentOid.Value)) //kein Ziel gewählt + { + { + ziel2value[m.ParentOid.Value] = parentValue; + } + } + + ziel2value[m.ParentOid.Value] += ", " + value; + + if (!key2Value.ContainsKey(parent.ParentOid.Value)) //und kein Kapitel gewählt + { + var parentParent = DAOFactory.GenericDAO.LoadByID(parent.ParentOid.Value); + var parentKapitel = MapperFactory.ValueListEntryDC_ValueListEntry.MapToNewDC(parentParent); + string kapitelValue = null; + if (!string.IsNullOrEmpty(parentKapitel.TypeDescription)) + { + kapitelValue = parentKapitel.TypeDescription; + } + else + { + kapitelValue = parentKapitel.Abbreviation; + } + key2Value.Add(parent.ParentOid.Value, kapitelValue); + } + } + else + { + key2Value.Add(key, value); } } - foreach (var item in key2Value.Keys) + + foreach (var item in ziel2kapitel) + { + key2Value[item.Value] += ", " + ziel2value[item.Key]; + } + + foreach (KeyValuePair item in key2Value.OrderBy(key => key.Value)) { if (sd.GoalList.Length > 0) { sd.GoalList += ", "; } - sd.GoalList += key2Value[item]; + sd.GoalList += item.Value; } } }