diff --git a/ReportImp/DiakonieKKKleve/QuittierungsbelegBeWo67.cs b/ReportImp/DiakonieKKKleve/QuittierungsbelegBeWo67.cs index 87e916418..dd684f870 100644 --- a/ReportImp/DiakonieKKKleve/QuittierungsbelegBeWo67.cs +++ b/ReportImp/DiakonieKKKleve/QuittierungsbelegBeWo67.cs @@ -1,6 +1,10 @@ +using BeWo.Data.Access; +using BeWo.Data.Entities; using BeWo.Report; using BeWo.Report.ReportObjects; using BS.Shared.Core; +using BS.Shared.Extensions; +using DevExpress.DataAccess.Sql; using DevExpress.XtraReports.UI; using System; using System.Collections.Generic; @@ -31,6 +35,21 @@ namespace DiakonieKKKleve //if (pRO == null) // return; + // MainAttendant ist bei denen die Hauptbetreuung UND der/die Soziotherapeutin/in. Es soll hier aber nur die Hauptbetreuung drin stehen + if (pRO.CustomerOid != null) + { + var customer = DAOFactory.GenericDAO.GetByID(pRO.CustomerOid); + + foreach (var e2c in customer.Employee2CustomerList) + { + if (e2c.ValueList != null && e2c.ValueList.Count > 0) + { + if (e2c.ValueList.Any(e => e.Entry != null && e.Entry.Value != null && e.Entry.Value.Contains("Hauptbetreuung"))) + pRO.MainAttendant = e2c.Employee.Person.FirstNameLastName;break; + } + } + } + if (pRO.Services != null) { List servicesBillable = new List(); @@ -39,6 +58,7 @@ namespace DiakonieKKKleve var reportstartdate = pRO.StartDate; while (reportstartdate <= pRO.EndDate.Date) { + // Jeder Tag im Monat soll abgebildet werden, daher an Tagen, wo keine Leistung ist, eine Zeile ohne Eintrag einfügen if (!pRO.Services.Any(s => s.StartDate.Date == reportstartdate)) { pRO.Services.Add(new ServiceDetail() @@ -55,36 +75,35 @@ namespace DiakonieKKKleve Minutes = 0 }); } - + // Nach jedem Sonntag (außer wenn er auf den Monatsletzten fällt) soll eine Leerzeile eingefügt werden + if (reportstartdate.DayOfWeek == DayOfWeek.Sunday && reportstartdate.Day != DateTime.DaysInMonth(reportstartdate.Year, reportstartdate.Month)) + { + pRO.Services.Add(new ServiceDetail() + { + IsBillable = true, + StartDate = reportstartdate, + Notice = "", + Notice2 = "", + Notice3 = "", + Notice4 = "", + Notice5 = "", + EmployeeCount = 999 // EmployeeCount als Sortierungsparameter, damit die Leerzeile immer NACH den Sonntagen kommt + }); + + } reportstartdate = reportstartdate.AddDays(1); } - pRO.Services = pRO.Services.OrderBy(s => s.StartDate.Date).ToList(); - // Nach Sonntagen eine Leerzeile erzeugen, damit es aussieht, wie in der Vorlage - List sonntagIndex = new List(); - sonntagIndex.AddRange(pRO.Services.Where(s => s.StartDate.DayOfWeek == DayOfWeek.Sunday).Select(s => s.StartDate.Day)); + pRO.Services = pRO.Services.OrderBy(s => s.StartDate.Date).ThenBy(s => s.EmployeeCount).ToList(); - // Nicht volle Wochen sollen keine Leerzeile bekommen - if (sonntagIndex[0] < 7) - sonntagIndex.Remove(sonntagIndex[0]); - if (DateTime.DaysInMonth(pRO.StartDate.Year, pRO.StartDate.Month) == sonntagIndex[sonntagIndex.Count - 1]) - sonntagIndex.Remove(sonntagIndex[sonntagIndex.Count - 1]); - - // Wenn ein Sonntag eingefügt wurde, muss der nächste einen weiter nach hinten gesetzt werden, da es ja nicht mehr alle 7 Einträge ein Sonntag kommt - int sonntageEingefuegt = 0; - foreach (var index in sonntagIndex) - { - pRO.Services.Insert(index + sonntageEingefuegt, new ServiceDetail() { IsBillable = true, Notice = "",Notice2 = "",Notice3 = "",Notice4 = "",Notice5 = "", }); - sonntageEingefuegt++; - } - foreach (var sd in pRO.Services) { if (sd.IsBillable || sd.ServiceDescription.ToLower().Contains("fehlkontakt") || sd.ServiceCategory.ToLower().Contains("fehlkontakt")) { - sd.Notice = sd.StartDate.Year == 1 ? "" : string.Format("{0:ddd}", sd.StartDate); - sd.Notice2 = sd.StartDate.Year == 1 ? "" : string.Format("{0:dd.MM.yyyy}", sd.StartDate); - sd.Notice3 = sd.StartDate.Year == 1 ? "" : string.Format("{0}", sd.Minutes); + // Wenn Leerzeile, Datum nicht darstellen ("") + sd.Notice = sd.EmployeeCount == 999 ? "" : string.Format("{0:ddd}", sd.StartDate); + sd.Notice2 = sd.EmployeeCount == 999 ? "" : string.Format("{0:dd.MM.yyyy}", sd.StartDate); + sd.Notice3 = sd.EmployeeCount == 999 ? "" : string.Format("{0}", sd.Minutes); sd.Notice4 = ""; sd.Notice5 = ""; @@ -178,7 +197,7 @@ namespace DiakonieKKKleve { var base64Data = Regex.Match(base64String, @"data:image/(?.+?),(?.+)").Groups["data"].Value; var binData = Convert.FromBase64String(base64Data); - Image img = ByteArrayToImage(binData); + System.Drawing.Image img = ByteArrayToImage(binData); xrBox.Image = Utils.CropImage(img); } else @@ -187,11 +206,11 @@ namespace DiakonieKKKleve } } - public Image ByteArrayToImage(byte[] byteArrayIn) + public System.Drawing.Image ByteArrayToImage(byte[] byteArrayIn) { using(var memoryStream = new MemoryStream(byteArrayIn)) { - return Image.FromStream(memoryStream); + return System.Drawing.Image.FromStream(memoryStream); } } @@ -201,7 +220,8 @@ namespace DiakonieKKKleve if (row != null) { - xrTableCell35.Visible = row.StartDate.DayOfWeek == DayOfWeek.Sunday /*|| row.StartDate.Day == DateTime.DaysInMonth(row.StartDate.Year, row.StartDate.Month)*/; + // Unterschriftenzelle anzeigen, wenn es der Monatsletzte ODER ein Sonntag und KEINE Leerzeile ist + xrTableCell35.Visible = row.EmployeeCount != 999 && (row.StartDate.DayOfWeek == DayOfWeek.Sunday || row.StartDate.Day == DateTime.DaysInMonth(row.StartDate.Year, row.StartDate.Month)) ; } } }