SearchDAO - GetAdditionalServiceBookingsForCustomer Filterung pro Bereich und Customer jeweils nur höchste OID - es kann mehrere aktive geben

This commit is contained in:
2026-03-12 10:28:02 +01:00
parent 6c662309de
commit e486bfd395

View File

@@ -1286,11 +1286,19 @@ namespace BeWo.Data.Access
public IEnumerable<AdditionalServiceBooking> GetAdditionalServiceBookingsForCustomer(long customerOid, DateTime start, DateTime end)
{
return CreateCriteriaIsActive<AdditionalServiceBooking>()
var addServices = CreateCriteriaIsActive<AdditionalServiceBooking>()
.CreateAlias(AdditionalServiceBooking.PropertyName_Customer2AddServiceBookings, "c2s", JoinType.InnerJoin)
.Add(Restrictions.Between("Datum", start, end))
.Add(Restrictions.Eq("c2s.CustomerOid", customerOid))
.List<AdditionalServiceBooking>();
// AB, 12.03.2026: Problem ist, dass pro Customer jetzt mehrere Bereiche (Wohnheime) zutreffen können und dann für jeden Tag mehrere Einträge da sein können,
// Im Folgenden wird für jeden Tag und jeden Bereich nur der Eintrag mit der höchsten Oid beibehalten:
return addServices.Where(s => s.Datum.HasValue && s.AdditionalServiceRegion != null
&& s.AdditionalServiceRegion.AdditionalService != null && s.AdditionalServiceRegion.AdditionalService.Name != null)
.GroupBy(s => new { Date = s.Datum.Value.Date, Name = s.AdditionalServiceRegion.AdditionalService.Name })
.Select(g => g.Select(s => new { Service = s, Booking = s.Customer2AddServiceBookings?.Where(c2a => c2a != null && c2a.CustomerOid == customerOid)
.OrderByDescending(c2a => c2a.Oid).FirstOrDefault() }).Where(x => x.Booking != null)
.OrderByDescending(x => x.Booking.Oid).FirstOrDefault()?.Service).Where(s => s != null).ToList();
}
public AssessmentSheetCategory GetAddServiceAssessmentSheetCategoryWithName(string name)