using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web.Mvc; using BeWoPlanerMobil.Util; using BS.Shared; using BS.Shared.Core; using BS.Shared.DataContracts; using BS.Shared.DataContracts.Compact; using BS.Shared.Extensions; namespace BeWoPlanerMobil.Models { public class SchedulerModel : AbstractModel { public SchedulerModel() { SessionModel = new SchedulerSessionModel(); SessionModel.ResetValues(); } public SchedulerSessionModel SchedulerSessionModel => SessionModel as SchedulerSessionModel; public List TeamMemberCustomerOids { get; set; } public DateTime SelectedDate { get => SchedulerSessionModel.SelectedDate; set => SchedulerSessionModel.SelectedDate = value; } public long? SelectedAppointmentOid { get => SchedulerSessionModel.SelectedAppointmentOid; set => SchedulerSessionModel.SelectedAppointmentOid = value; } public SchedulerAppointmentDC SelectedAppointment { get; set; } public List Appointments { get; set; } public List AppointmentListItems { get; set; } public bool HasRightToEditAppointment(string identifier) { var appointment = AppointmentListItems.FirstOrDefault(app => app.Identifier.Equals(identifier))?.SchedulerAppointment; return appointment != null && Utils.CheckSchedulerRights(appointment.CustomerList, appointment.ResourceList, appointment.EmployeeList, appointment.Originator, appointment.SchedulerAppointmentOid is null, SchedulerRightsCheckType.Edit, LoggedInUser, TeamMemberCustomerOids ?? new List()); } public string DescriptionToEdit => SelectedAppointment?.Description ?? string.Empty; public string SubjectToEdit => SelectedAppointment?.Subject ?? string.Empty; public string StartDateToEdit => SelectedAppointment?.StartDate?.ToString("yyyy-MM-ddTHH:mm") ?? SelectedDate.ToString("yyyy-MM-ddTHH:mm"); public string EndDateToEdit => SelectedAppointment?.EndDate?.ToString("yyyy-MM-ddTHH:mm") ?? SelectedDate.ToString("yyyy-MM-ddTHH:mm"); public string LocationToEdit => SelectedAppointment?.Location ?? string.Empty; public List AllResources { get { var allResources = new List(); foreach(var cat2Res in ResourceCategories2Resources) { allResources.AddRangeIfElementsNotIn(cat2Res.Value); } return allResources.OrderBy(resource => resource.Name).ToList(); } } public List SelectedResourceOids { get => SchedulerSessionModel.SelectedResourceOids; set => SchedulerSessionModel.SelectedResourceOids = value; } public List SelectedResources { get; set; } public Dictionary> ResourceCategories2Resources { get; set; } = new Dictionary>(); [Display(Name = "Kalenderansicht")] public string SelectedSchedulerView { get; set; } = "1"; public List SchedulerViewList { get { var result = new List { new SelectListItem { Text = "1", Value = "1" }, new SelectListItem { Text = "5", Value = "5" }, new SelectListItem { Text = "7", Value = "7" } }; return result; } } public WeekViewObject WeekViewObject { get; set; } public List AllEmployees { get; set; } = new List(); public List SelectedEmployeeOids { get => SchedulerSessionModel.SelectedEmployeeOids; set => SchedulerSessionModel.SelectedEmployeeOids = value; } public List SelectedEmployees { get; set; } public List AllCustomers { get; set; } = new List(); public List SelectedCustomerOids { get => SchedulerSessionModel.SelectedCustomerOids; set => SchedulerSessionModel.SelectedCustomerOids = value; } public List SelectedCustomers { get; set; } = new List(); public bool IsInEditMode => SelectedAppointmentOid.HasValue; // ToDo: Überarbeiten? Es kam das Ansehen hinzu public bool HasResourcesEmployeesOrCustomers { get; set; } public bool ShowEmployeeButton => IsInEditMode ? HasRightToInsertEmployeeAppointments : HasRightToEditEmployeeAppointments; public bool ShowCustomerButton => IsInEditMode ? HasRightToInsertCustomerAppointments : HasRightToEditCustomerAppointments; //IntervalFinder public List SelectedEmployeeOidsForIntervalFinder { get => SchedulerSessionModel.SelectedEmployeeOidsForIntervalFinder; set => SchedulerSessionModel.SelectedEmployeeOidsForIntervalFinder = value; } public List SelectedEmployeesForIntervalFinder { get; set; } = new List(); public List SelectedCustomerOidsForIntervalFinder { get => SchedulerSessionModel.SelectedCustomerOidsForIntervalFinder; set => SchedulerSessionModel.SelectedCustomerOidsForIntervalFinder = value; } public List SelectedCustomersForIntervalFinder { get; set; } = new List(); public List SelectedResourceOidsForIntervalFinder { get => SchedulerSessionModel.SelectedResourceOidsForIntervalFinder; set => SchedulerSessionModel.SelectedResourceOidsForIntervalFinder = value; } public List SelectedResourcesForIntervalFinder { get; set; } = new List(); public Dictionary> FreeIntervals { get; set; } = new Dictionary>(); public List FreeIntervalDays { get { var days = new List(); foreach(var date2HasFreeSlot in FreeIntervals.Values) { foreach(var date in date2HasFreeSlot.Keys) { days.AddIfNotIn(date.Date); } } return days; } } public bool IsInIntervalFinderMode { get => SchedulerSessionModel.IsInIntervalFinderMode; set => SchedulerSessionModel.IsInIntervalFinderMode = value; } public DateTime? IntervalStartDate { get => SchedulerSessionModel.IntervalStartDate; set => SchedulerSessionModel.IntervalStartDate = value; } public DateTime? IntervalEndDate { get => SchedulerSessionModel.IntervalEndDate; set => SchedulerSessionModel.IntervalEndDate = value; } public string IntervalStartDateStr => IntervalStartDate.HasValue ? IntervalStartDate.Value.ToString("yyyy-MM-ddTHH:mm") : string.Empty; public string IntervalEndDateStr => IntervalEndDate.HasValue ? IntervalEndDate.Value.ToString("yyyy-MM-ddTHH:mm") : string.Empty; public string IntervalStartTimeStr => IntervalStartDate.HasValue ? $"{IntervalStartDate:HH:mm}" : string.Empty; public string IntervalEndTimeStr => IntervalEndDate.HasValue ? $"{IntervalEndDate:HH:mm}" : string.Empty; public int? IntervalDuration { get => SchedulerSessionModel.IntervalDuration; set => SchedulerSessionModel.IntervalDuration = value; } public string IntervalDurationStr => IntervalDuration.HasValue ? $"{IntervalDuration}" : string.Empty; [Display(Name = "Ganztägig")] public bool IsAllDay { get => SchedulerSessionModel.IsAllDay; set => SchedulerSessionModel.IsAllDay = value; } [Display(Name = "Privat")] public bool IsPrivate { get => SchedulerSessionModel.IsPrivate; set => SchedulerSessionModel.IsPrivate = value; } public List MyTeamEmployees { get; set; } public List SelectedResourceOidsForFiltering { get => SchedulerSessionModel.SelectedResourceOidsForFiltering; set => SchedulerSessionModel.SelectedResourceOidsForFiltering = value; } public List SelectedResourcesForFiltering { get; set; } public List SelectedEmployeeOidsForFiltering { get => SchedulerSessionModel.SelectedEmployeeOidsForFiltering; set => SchedulerSessionModel.SelectedEmployeeOidsForFiltering = value; } public List SelectedEmployeesForFiltering { get; set; } public List SelectedCustomerOidsForFiltering { get => SchedulerSessionModel.SelectedCustomerOidsForFiltering; set => SchedulerSessionModel.SelectedCustomerOidsForFiltering = value; } public List SelectedCustomersForFiltering { get; set; } public List MyTeams { get; set; } = new List(); public bool ShouldLoadTasks { get => SchedulerSessionModel.ShouldLoadTasks; set => SchedulerSessionModel.ShouldLoadTasks = value; } } public class WeekViewObject { public KeyValuePair> MondayAppointments { get; set; } public KeyValuePair> TuesdayAppointments { get; set; } public KeyValuePair> WednesdayAppointments { get; set; } public KeyValuePair> ThursdayAppointments { get; set; } public KeyValuePair> FridayAppointments { get; set; } public KeyValuePair> SaturdayAppointments { get; set; } public KeyValuePair> SundayAppointments { get; set; } public WeekViewObject(IEnumerable appointments, DateTime monday, EmployeeDC loggedInEmployee) { var first = monday.Date; var last = first.AddDays(6); var tuesday = first.AddDays(1); var wednesday = first.AddDays(2); var thursday = first.AddDays(3); var friday = first.AddDays(4); var saturday = first.AddDays(5); var blubbtest = appointments.Where(a => a.StartDate >= first || a.StartDate <= last).ToList(); var mondays = blubbtest.Where(a => a.StartDate.HasValue && a.StartDate.Value.DayOfWeek == DayOfWeek.Monday); var tuesdays = blubbtest.Where(a => a.StartDate.HasValue && a.StartDate.Value.DayOfWeek == DayOfWeek.Tuesday); var wednesdays = blubbtest.Where(a => a.StartDate.HasValue && a.StartDate.Value.DayOfWeek == DayOfWeek.Wednesday); var thursdays = blubbtest.Where(a => a.StartDate.HasValue && a.StartDate.Value.DayOfWeek == DayOfWeek.Thursday); var fridays = blubbtest.Where(a => a.StartDate.HasValue && a.StartDate.Value.DayOfWeek == DayOfWeek.Friday); var saturdays = blubbtest.Where(a => a.StartDate.HasValue && a.StartDate.Value.DayOfWeek == DayOfWeek.Saturday); var sundays = blubbtest.Where(a => a.StartDate.HasValue && a.StartDate.Value.DayOfWeek == DayOfWeek.Sunday); MondayAppointments = new KeyValuePair>(first, new List()); TuesdayAppointments = new KeyValuePair>(tuesday, new List()); WednesdayAppointments = new KeyValuePair>(wednesday, new List()); ThursdayAppointments = new KeyValuePair>(thursday, new List()); FridayAppointments = new KeyValuePair>(friday, new List()); SaturdayAppointments = new KeyValuePair>(saturday, new List()); SundayAppointments = new KeyValuePair>(last, new List()); mondays.DoForEach(app => MondayAppointments.Value.Add(new AppointmentListItem("", app))); tuesdays.DoForEach(app => TuesdayAppointments.Value.Add(new AppointmentListItem("", app))); wednesdays.DoForEach(app => WednesdayAppointments.Value.Add(new AppointmentListItem("", app))); thursdays.DoForEach(app => ThursdayAppointments.Value.Add(new AppointmentListItem("", app))); fridays.DoForEach(app => FridayAppointments.Value.Add(new AppointmentListItem("", app))); saturdays.DoForEach(app => SaturdayAppointments.Value.Add(new AppointmentListItem("", app))); sundays.DoForEach(app => SundayAppointments.Value.Add(new AppointmentListItem("", app))); } } }