From 6d4352bed88b18c2c0a58a70b5f95055a6bb26ad Mon Sep 17 00:00:00 2001 From: Lyndon Jetten Date: Fri, 20 Dec 2019 12:37:08 +0100 Subject: [PATCH] . --- .../Scheduler/ViewModel/CustomFieldStorage.cs | 15 +++- .../ViewModel/NewSchedulerViewModel.cs | 9 ++- .../ViewModel/SchedulerAppointmentVM.cs | 10 ++- Shared/Extensions/DateTimeExtensions.cs | 75 ++++++++++++------- 4 files changed, 74 insertions(+), 35 deletions(-) diff --git a/BeWo/Scheduler/ViewModel/CustomFieldStorage.cs b/BeWo/Scheduler/ViewModel/CustomFieldStorage.cs index fc15eef57..67e297d83 100644 --- a/BeWo/Scheduler/ViewModel/CustomFieldStorage.cs +++ b/BeWo/Scheduler/ViewModel/CustomFieldStorage.cs @@ -6,6 +6,7 @@ using System.Windows.Media; using BS.Shared.DataContracts; using BS.Shared.DataContracts.Compact; +using BS.Shared.Extensions; namespace BeWo.Scheduler.ViewModel { @@ -29,7 +30,12 @@ namespace BeWo.Scheduler.ViewModel result += " bis " + DueDate.Value.ToString("dd.MM.yyyy HH:mm"); } } - + + if (IsAbsenceTime && _AbsenceTimeStart.HasValue) + { + result += _AbsenceTimeStart.Value.GetIntervalDescription(_AbsenceTimeEnd); + } + return result; } } @@ -61,6 +67,10 @@ namespace BeWo.Scheduler.ViewModel public CompactEmployeeDC Originator { get; set; } + private DateTime? _AbsenceTimeStart; + + private DateTime? _AbsenceTimeEnd; + public CustomFieldStorage() { @@ -90,6 +100,9 @@ namespace BeWo.Scheduler.ViewModel RecurrenceId = pAppointment.DataContract?.RecurrenceId; RecurrenceIndex = pAppointment.DataContract?.RecurrenceIndex ?? 0; + + _AbsenceTimeStart = pAppointment.AbsenceTimeStart; + _AbsenceTimeEnd = pAppointment.AbsenceTimeEnd; } public CustomFieldStorage(SchedulerAppointmentDC pAppointment) diff --git a/BeWo/Scheduler/ViewModel/NewSchedulerViewModel.cs b/BeWo/Scheduler/ViewModel/NewSchedulerViewModel.cs index c2d1c946f..c961331db 100644 --- a/BeWo/Scheduler/ViewModel/NewSchedulerViewModel.cs +++ b/BeWo/Scheduler/ViewModel/NewSchedulerViewModel.cs @@ -17,7 +17,6 @@ namespace BeWo.Scheduler.ViewModel public event EventHandler> ViewModelChanged; private ISchedulerViewModel _ActiveAppointmentViewModel; - private Dictionary> _AllCats2ResInDic; public ISchedulerViewModel ActiveAppointmentViewModel { @@ -58,17 +57,19 @@ namespace BeWo.Scheduler.ViewModel public IEnumerable ConvertAbsenceTimesToAppointments(IEnumerable pAbsenceTimes, DateTime pIntervalEnd, List allEmployees) { - return pAbsenceTimes.Select(abwesenheit => + return pAbsenceTimes.Where(w => w.AbsenceTimeOid.HasValue && w.Start.HasValue).Select(abwesenheit => { var subject = $"{abwesenheit.Reason.Description}"; - var employee = allEmployees.FirstOrDefault(f => f.EmployeeOid == abwesenheit.EmployeeOid.Value); + var employee = abwesenheit.EmployeeOid != null ? allEmployees.FirstOrDefault(f => f.EmployeeOid == abwesenheit.EmployeeOid.Value) : null; if(employee != null) { subject += $" ({employee.SimpleDescription})"; } - return new SchedulerAppointmentVM(true, subject, abwesenheit.Start.Value, abwesenheit.End ?? pIntervalEnd, employee); + var absenceTimeEnd = abwesenheit.End?.AddTicks(1); + + return new SchedulerAppointmentVM(true, subject, abwesenheit.Start.Value, abwesenheit.End ?? pIntervalEnd, employee, abwesenheit.Start, absenceTimeEnd); }).ToList(); } } diff --git a/BeWo/Scheduler/ViewModel/SchedulerAppointmentVM.cs b/BeWo/Scheduler/ViewModel/SchedulerAppointmentVM.cs index 2807ca8f7..260243a9f 100644 --- a/BeWo/Scheduler/ViewModel/SchedulerAppointmentVM.cs +++ b/BeWo/Scheduler/ViewModel/SchedulerAppointmentVM.cs @@ -58,8 +58,10 @@ namespace BeWo.Scheduler.ViewModel private DateTime? _CompletedDate; private DateTime? _DueDate; private DateTime? _DueTime; + public DateTime? AbsenceTimeStart { get; set; } + public DateTime? AbsenceTimeEnd { get; set; } - public object Id { get; set; } + public object Id { get; set; } public int LabelId { get; set; } public Dictionary CustomFields { @@ -516,7 +518,8 @@ namespace BeWo.Scheduler.ViewModel IsTeilnahmeBestaetigung = pDC.IsTeilnahmeBestaetigung; } - public SchedulerAppointmentVM(bool pAllDay, string pSubject, DateTime pStart, DateTime pEnd, CompactEmployeeDC pOriginator) + // Wird für Abwesenheiten genutzt + public SchedulerAppointmentVM(bool pAllDay, string pSubject, DateTime pStart, DateTime pEnd, CompactEmployeeDC pOriginator, DateTime? absenceTimeStart, DateTime? absenceTimeEnd) { _AllDay = pAllDay; _Subject = pSubject; @@ -524,6 +527,9 @@ namespace BeWo.Scheduler.ViewModel _End = pEnd; _Originator = pOriginator; + AbsenceTimeStart = absenceTimeStart; + AbsenceTimeEnd = absenceTimeEnd; + IsAbsenceTime = true; UpdateCustomFields(); diff --git a/Shared/Extensions/DateTimeExtensions.cs b/Shared/Extensions/DateTimeExtensions.cs index 6454c8e14..b8d247b73 100644 --- a/Shared/Extensions/DateTimeExtensions.cs +++ b/Shared/Extensions/DateTimeExtensions.cs @@ -494,37 +494,56 @@ namespace BS.Shared.Extensions return !(start >= start2 && start >= end2 || end <= start2 && end <= end2); } - /// - /// Prüft, ob das Datum in einem Zeitraum liegt. Wurde für Betreuungszeiten geschrieben. - /// Achtung: Sind beide Daten des Zeitraums null, wird true zurückgegeben! - /// - /// Das Datum bei dem zu prüfen ist, ob es im angegebenen Zeitraum liegt - /// Der Beginn des Zeitintervalls - /// Das Ende des Zeitintervalls - /// Ob das Datum im angegebenen Zeitraum liegt - public static bool InBetween(this DateTime dateTime, DateTime? spanStart, DateTime? spanEnd) - { - if(spanStart == null && spanEnd == null) - { - return true; - } - - if(spanStart.HasValue && spanEnd.HasValue) - { - return InBetween(dateTime, spanStart.Value, spanEnd.Value, false); - } - - if(spanStart == null) - { - return dateTime < spanEnd.Value; - } - - return true; - } - public static bool IsTimeZero(this DateTime dateTime) { return dateTime.Hour == 0 && dateTime.Minute == 0 && dateTime.Second == 0; } + + public static string GetIntervalDescription(this DateTime start, DateTime? end) + { + var result = string.Empty; + + var isAllDay = start.IsTimeZero() && (end == null || end.Value.IsTimeZero()); + var endTimeHasValue = end.HasValue; + + if (isAllDay) + { + if (endTimeHasValue) + { + if (start.Date.Equals(end.Value.Date)) + { + result += $" {start.ToShortDateString()}"; + } + else + { + result += $" {start.ToShortDateString()} - {end.Value.ToShortDateString()}"; + } + } + else + { + result += $" Ab dem {start.ToShortDateString()}"; + } + } + else + { + if (endTimeHasValue) + { + if (start.Date.Equals(end.Value.Date)) + { + result += $" {start:dd.MM.yyyy HH:mm} - {end.Value:HH:mm}"; + } + else + { + result += $" {start:dd.MM.yyyy HH:mm} - {(end.Value.IsTimeZero() ? end.Value.ToString("dd.MM.yyyy") : end.Value.ToString("dd.MM.yyyy HH:mm"))}"; + } + } + else + { + result += $" Ab dem {start:dd.MM.yyyy HH:mm}"; + } + } + + return result; + } } } \ No newline at end of file