using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Windows; using System.Windows.Media; using BS.Shared.DataContracts; using BS.Shared.DataContracts.Compact; using BS.Shared.Extensions; namespace BeWo.Scheduler.ViewModel { public class CustomFieldStorage { public string ToolTip { get { var result = Subject; // Man darf den Betreff nicht sehen, wenn man der Originator ist und nicht in der nicht leeren EmployeeList ist oder man weder Originator noch in der EmployeeList ist var isInEmployeeList = EmployeeList.Any(e2A => e2A.Employee.Equals(BeWoApp.CompactLoggedOnEmployee)); var isOriginator = Originator.Equals(BeWoApp.CompactLoggedOnEmployee); if(IsPrivate && (!isOriginator && !isInEmployeeList || !isInEmployeeList)) { result = "Privat"; } if(IsTask) { result = result ?? string.Empty; if(CompletedDate.HasValue) { result += " erledigt am " + CompletedDate.Value.ToShortDateString(); } else if(DueDate.HasValue) { result += $" bis {DueDate.Value:dd.MM.yyyy HH:mm}"; } } if(!IsAbsenceTime || !_AbsenceTimeStart.HasValue) { return result; } var absenceTimeEnd = _AbsenceTimeEnd; if(!absenceTimeEnd.HasValue) { return $"{result}{_AbsenceTimeStart.Value.GetIntervalDescription(absenceTimeEnd)}"; } var absenceTimeStart = _AbsenceTimeStart.Value; if(absenceTimeStart.IsTimeZero() && absenceTimeEnd.Value.IsTimeZero() && absenceTimeEnd.Value.AddDays(-1) > absenceTimeStart) { absenceTimeEnd = absenceTimeEnd.Value.AddDays(-1); } return $"{result}{_AbsenceTimeStart.Value.GetIntervalDescription(absenceTimeEnd)}"; } } public string Subject { get; set; } public bool IsTask { get; set; } public bool IsAbsenceTime { get; set; } public bool IsPrivate { get; set; } public bool IsAllDay { get; set; } public LinearGradientBrush BackgroundColor => new LinearGradientBrush(new GradientStopCollection { new GradientStop(IsTask ? Color.FromRgb(153, 59, 59) : Color.FromRgb(192, 255, 208), 1) }, new Point(.5, 0), new Point(.5, 1)); public LinearGradientBrush ForegroundColor => new LinearGradientBrush(new GradientStopCollection { new GradientStop(IsTask ? Color.FromRgb(224, 224, 224) : Color.FromRgb(0, 0, 0), 1) }, new Point(.5, 0), new Point(.5, 1)); public ObservableCollection EmployeeList { get; set; } = new ObservableCollection(); public List CustomerList { get; set; } = new List(); public List ResourceList { get; set; } = new List(); public List SupportConceptList { get; set; } = new List(); public DateTime? DueDate { get; set; } public DateTime? CompletedDate { get; set; } public string CompletedNotice { get; set; } public string CompletedUser { get; set; } public string TaskDescription { get; set; } public long? SchedulerAppointmentOid { get; set; } public string RecurrenceId { get; set; } public int RecurrenceIndex { get; set; } public CompactEmployeeDC Originator { get; set; } private DateTime? _AbsenceTimeStart; private DateTime? _AbsenceTimeEnd; public InternalInfo InternalInfo { get; set; } public bool CanBeEdited { get; set; } public long? AbsenceTimeOid { get; set; } public bool IsCustomerAbsenceTime { get; set; } public CustomFieldStorage() { } public CustomFieldStorage(SchedulerAppointmentVM pAppointment) { IsTask = pAppointment.IsTask; IsAbsenceTime = pAppointment.IsAbsenceTime; IsPrivate = pAppointment.IsPrivate; IsAllDay = pAppointment.AllDay; EmployeeList = pAppointment.EmployeeList; CustomerList = pAppointment.CustomerList; ResourceList = pAppointment.ResourceList; SupportConceptList = pAppointment.SupportConceptList; DueDate = pAppointment.DueDate; CompletedDate = pAppointment.CompletedDate; CompletedNotice = pAppointment.CompletedNotice; TaskDescription = pAppointment.TaskDescription; Originator = pAppointment.Originator; Subject = pAppointment.Subject; SchedulerAppointmentOid = pAppointment.DataContract?.SchedulerAppointmentOid; RecurrenceId = pAppointment.DataContract?.RecurrenceIdReference; RecurrenceIndex = pAppointment.DataContract?.RecurrenceIndexReference ?? 0; _AbsenceTimeStart = pAppointment.AbsenceTimeStart; _AbsenceTimeEnd = pAppointment.AbsenceTimeEnd; HasServiceRecordEntry = pAppointment.HasServiceRecordEntry; CanBeEdited = pAppointment.CanBeEdited; AbsenceTimeOid = pAppointment.AbsenceTimeOid; IsCustomerAbsenceTime = pAppointment.IsCustomerAbsenceTime; ServiceRecordList = pAppointment.ServiceRecordList; } /// /// Erzeugt ein CustomFieldStorage-Objekt aus einem SchedulerAppointmentDC. Wird nur für veränderte Serientermine benutzt. /// /// Der veränderte Serientermin als SchedulerAppointmentDC public CustomFieldStorage(SchedulerAppointmentDC pAppointment) { IsTask = pAppointment.IsTask; IsAbsenceTime = false; IsPrivate = pAppointment.IsPrivate; IsAllDay = pAppointment.AllDay; EmployeeList = new ObservableCollection(pAppointment.EmployeeList); CustomerList = pAppointment.CustomerList; ResourceList = pAppointment.ResourceList; SupportConceptList = pAppointment.SupportConceptList; ServiceRecordList = pAppointment.ServiceRecordList; DueDate = pAppointment.DueDate; CompletedDate = pAppointment.CompletedDate; CompletedNotice = pAppointment.CompletedNotice; TaskDescription = pAppointment.TaskDescription; Originator = pAppointment.Originator; Subject = pAppointment.Subject; SchedulerAppointmentOid = pAppointment.SchedulerAppointmentOid; RecurrenceId = pAppointment.RecurrenceIdReference; RecurrenceIndex = pAppointment.RecurrenceIndexReference ?? 0; HasServiceRecordEntry = pAppointment.HasServiceRecordEntry; CanBeEdited = pAppointment.CanBeEdited; } public CustomFieldStorage(ObservableCollection pEmployees, List pCustomers, List pResources, CompactEmployeeDC pOriginator, bool pIsPrivate, bool pIsTask, string pTaskDescription, DateTime? pDueDate, DateTime? pCompletedDate, string pCompletedNotice, List pSupportConcepts, string pSubject, bool pIsAllDay, List serviceRecords) { IsTask = pIsTask; IsPrivate = pIsPrivate; IsAllDay = pIsAllDay; EmployeeList = pEmployees; CustomerList = pCustomers; ResourceList = pResources; SupportConceptList = pSupportConcepts; ServiceRecordList = serviceRecords; DueDate = pDueDate; CompletedDate = pCompletedDate; CompletedNotice = pCompletedNotice; TaskDescription = pTaskDescription; Originator = pOriginator; Subject = pSubject; } public Visibility ToolTipTimeVisibility => IsTask || IsAbsenceTime ? Visibility.Collapsed : Visibility.Visible; public Visibility ToolTipResourcesVisibility => ResourceList?.Count > 0 ? Visibility.Visible : Visibility.Collapsed; public Visibility ToolTipEmployeesVisibility => EmployeeList?.Count > 0 ? Visibility.Visible : Visibility.Collapsed; public Visibility ToolTipCustomersVisibility => CustomerList?.Count > 0 ? Visibility.Visible : Visibility.Collapsed; public Visibility ToolTipTrennstrichVisibility => EmployeeList?.Count > 0 || CustomerList?.Count > 0 || ResourceList?.Count > 0 ? Visibility.Visible : Visibility.Collapsed; public Visibility ToolTipZusageVisibility => IsTask ? Visibility.Collapsed : Visibility.Visible; public bool HasServiceRecordEntry { get; set; } public List ServiceRecordList { get; set; } = new List(); } public class InternalInfo { public bool IsTimeChangedRecurringAppointment { get; set; } } }