using System; using System.Collections.Generic; using System.Linq; using BeWo.Scheduler.View; using BeWo.ServiceProxy; using BS.Shared.Core; using BS.Shared.DataContracts; using BS.Shared.DataContracts.Compact; using DevExpress.XtraScheduler; namespace BeWo.Scheduler.ViewModel { public class NewSchedulerViewModel { public event EventHandler> ViewModelChanged; private ISchedulerViewModel _ActiveAppointmentViewModel; public ISchedulerViewModel ActiveAppointmentViewModel { get => _ActiveAppointmentViewModel; set { if(value is null) { return; } _ActiveAppointmentViewModel = value; ViewModelChanged?.Invoke(this, new EventArgs(value)); } } public AbstractAppointmentEditForm GetEditAppointmentForm(DevExpress.Xpf.Scheduler.SchedulerControl control, Appointment appointment) { return ActiveAppointmentViewModel?.GetEditAppointmentForm(control, appointment); } internal void InitNewAppointment(Appointment appointment) { ActiveAppointmentViewModel?.InitNewAppointment(appointment); } internal void InitNewTask(Appointment pAppointment, DateTime? pDueDate, IEnumerable pSelectedEmployees, List pSelectedCustomers, List pSelectedResources, List pSelectedSupportConcepts) { ActiveAppointmentViewModel?.InitNewTask(pAppointment, pDueDate, pSelectedEmployees, pSelectedCustomers, pSelectedResources, pSelectedSupportConcepts); } public SchedulerSettings SchedulerSettings { get; set; } public SchedulerSettings GetActiveSettings() { return ActiveAppointmentViewModel is null ? null : SchedulerSettings ?? ActiveAppointmentViewModel.GetDefaultSchedulerSettings(); } public IEnumerable ConvertAbsenceTimesToAppointments(IEnumerable pAbsenceTimes, DateTime pIntervalEnd, List allEmployees, List allCustomers) { return pAbsenceTimes.Where(w => w.AbsenceTimeOid.HasValue && w.Start.HasValue).Select(abwesenheit => { var isEmployeeAbsenceTime = abwesenheit.EmployeeOid.HasValue; var subject = $"{abwesenheit.Reason.Description}"; var employee = abwesenheit.EmployeeOid.HasValue ? allEmployees.FirstOrDefault(f => f.EmployeeOid == abwesenheit.EmployeeOid.Value) : null; var customer = abwesenheit.CustomerOid.HasValue ? allCustomers.FirstOrDefault(f => f.CustomerOid == abwesenheit.CustomerOid.Value) : null; IFilterableDC dc = employee; var originator = employee; if(!isEmployeeAbsenceTime) { dc = customer; ServiceFacade.DoEmployeeServiceSync(s => originator = s.FindCompactEmployeeByFullname(abwesenheit.InsUser)); } if(false == dc is null) { subject += $" ({dc.SimpleDescription})"; } var absenceTimeEnd = abwesenheit.End; // Ist nicht genau if(abwesenheit.End.HasValue) { var allDay = abwesenheit.Start.Value.Hour == 0 && abwesenheit.Start.Value.Minute == 0 && abwesenheit.Start.Value.Second == 0 && abwesenheit.End.Value.Hour == 0 && abwesenheit.End.Value.Minute == 0 && abwesenheit.End.Value.Second == 0; var end = abwesenheit.End.Value; var isMultipleDayAbsenceTime = abwesenheit.End is null || abwesenheit.Start.Value.Date != abwesenheit.End.Value.Date; if(isMultipleDayAbsenceTime && allDay) { absenceTimeEnd = end.AddDays(1); } // Wenn die Abwesenheit über mehrere Tage geht, muss ein Tag draufaddiert werden //if(end.Hour == 0 && end.Minute == 0 && end.Second == 0) //{ // absenceTimeEnd = end.AddSeconds(1); //} //else //{ // absenceTimeEnd = end.AddTicks(1); //} } if(originator is null) { originator = BeWoApp.CompactLoggedOnEmployee; } return new SchedulerAppointmentVM( true, subject, abwesenheit.Start.Value, absenceTimeEnd ?? pIntervalEnd, originator, abwesenheit.Start, absenceTimeEnd, abwesenheit.AbsenceTimeOid.Value, !isEmployeeAbsenceTime); }).ToList(); } } }