From 1629e103573a7771453afeab2bba160dc3d480ea Mon Sep 17 00:00:00 2001 From: Lyndon Date: Mon, 23 Mar 2026 15:23:00 +0100 Subject: [PATCH] Nicht abrechenbare ServiceRecords tauchen nicht mehr im Quittierungsbelegsmodul auf. --- .../DevExpressSchedulerController.cs | 182 ++++++++++++++++-- BeWoPlanerMobil/Controllers/MainController.cs | 6 +- .../Controllers/ReportController.cs | 107 +++++----- .../Controllers/SchedulerController.cs | 34 ++-- .../Models/DevExpressSchedulerModel.cs | 99 +++++++++- .../Models/DevExpressSchedulerSessionModel.cs | 45 ++++- BeWoPlanerMobil/Models/SchedulerModel.cs | 135 ++++++++++--- .../AptFltCustomerPopupListPartial.cshtml | 14 +- .../AptFltCustomersPartial.cshtml | 102 +++++++++- .../AptFltEmployeePopupListPartial.cshtml | 14 +- .../AptFltEmployeesPartial.cshtml | 112 +++++++++-- .../AptFltResourcePopupListPartial.cshtml | 28 ++- .../AptFltResourcesPartial.cshtml | 75 +++++++- .../DevExpressScheduler.cshtml | 132 +++++++------ 14 files changed, 855 insertions(+), 230 deletions(-) diff --git a/BeWoPlanerMobil/Controllers/DevExpressSchedulerController.cs b/BeWoPlanerMobil/Controllers/DevExpressSchedulerController.cs index 6fc46c6c4..e767001bf 100644 --- a/BeWoPlanerMobil/Controllers/DevExpressSchedulerController.cs +++ b/BeWoPlanerMobil/Controllers/DevExpressSchedulerController.cs @@ -104,6 +104,42 @@ namespace BeWoPlanerMobil.Controllers Model.PossibleCustomers = CustomerService.GetAllAuthorizedCompactCustomers(); Model.PossibleResources = KalenderService.GetAllResources(); + if(Model.HasRightToInsertRessourceAppointments || Model.HasRightToViewAllResourceAppointments) + { + var allResources = KalenderService.GetAllResources().OrderBy(r => r.Name).ToList(); + + var categories2Resources = new Dictionary>(); + + foreach(var category in allResources.Select(resource => resource.ResourceCategory)) + { + categories2Resources.AddOrUpdateValueInDictionary(category, allResources.Where(resource => resource.ResourceCategory.Equals(category)).OrderBy(r => r.Name).ToList()); + } + + Model.ResourceCategories2Resources = categories2Resources.OrderBy(kvp => kvp.Key.DisplayName).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); + } + + if(Model.LoggedInEmployee?.EmployeeOid.HasValue ?? false) + { + var compactEmployee = EmployeeService.GetActiveCompactEmployeeWithOid(Model.LoggedInEmployee.EmployeeOid.Value); + + Model.MyTeamEmployees = EmployeeService.GetAllTeamMember(compactEmployee).OrderBy(employee => employee.LastName).ToList(); + } + else + { + Model.MyTeamEmployees = new List(); + } + + if(Model.HasRightToViewTeams && (Model?.LoggedInEmployee?.EmployeeOid.HasValue ?? false)) + { + Model.MyTeams = EmployeeService.GetAllActiveCompactTeamsForEmployee(Model.LoggedInEmployee.EmployeeOid.Value).OrderBy(team => team.Name).ToList(); + } + + Model.TeamMemberCustomerOids = EmployeeService.LoadTeamsRelatedCustomerOids(LoggedInUser.Employee.EmployeeOid); + + Model.SelectedEmployeesForFiltering = Model.PossibleEmployees.Where(possibleEmployee => Model.SelectedEmployeeOidsForFiltering?.Contains(possibleEmployee.EmployeeOid) ?? false).ToList(); + Model.SelectedCustomersForFiltering = Model.PossibleCustomers.Where(possibleCustomer => Model.SelectedCustomerOidsForFiltering?.Contains(possibleCustomer.CustomerOid) ?? false).ToList(); + Model.SelectedResourcesForFiltering = Model.PossibleResources.Where(possibleResource => possibleResource.ResourceOid.HasValue && (Model.SelectedResourceOidsForFiltering?.Contains(possibleResource.ResourceOid.Value) ?? false)).ToList(); + ReloadAppointments(); } @@ -114,6 +150,8 @@ namespace BeWoPlanerMobil.Controllers throw new Exception("Bei DevExpressSchedulerController.ReloadAppointments() ist die Oid des angemeldeten Benutzers wider Erwarten NULL!"); } + UpdateSelectedObjects(); + var employeeOid = Model.LoggedInEmployee.EmployeeOid.Value; var user = LoggedInUser; @@ -130,15 +168,15 @@ namespace BeWoPlanerMobil.Controllers employeeOid, intervalStart, intervalEnd, - new List(), - new List(), - new List(), - false, - false, - false, - false, - false, - true + Model.SelectedEmployeeOidsForFiltering, + Model.SelectedCustomerOidsForFiltering, + Model.SelectedResourceOidsForFiltering, + Model.ShowOnlyEmployees, + Model.ShowOnlyCustomers, + Model.ShowOnlyResources, + Model.ShowOnlyMyOwnAppointments, + Model.ShowOnlyMyOwnAppointments, + Model.ShowTasks ); var selectedCustomerOids = Model.PossibleCustomers.Select(s => s.CustomerOid).ToList(); @@ -424,12 +462,35 @@ namespace BeWoPlanerMobil.Controllers var showMenuItem = false; - //var isTask = appointment.IsTask; - //var isAbsenceTime = appointment. + var isTask = appointment.IsTask; + var isAbsenceTime = appointment.AbsenceReason != null; + + if(isTask) + { + //showMenuItem = + } return JsonConvert.SerializeObject(showMenuItem); } + private void UpdateSelectedObjects() + { + var list = new List(); + Model.ResourceCategories2Resources.Values.DoForEach(l => l.DoForEach(s => list.AddIfNotIn(s))); + + Model.SelectedEmployees = Model.PossibleEmployees.Where(employee => Model.SelectedEmployeeOids.Contains(employee.EmployeeOid)).ToList(); + Model.SelectedCustomers = Model.PossibleCustomers.Where(customer => Model.SelectedCustomerOids.Contains(customer.CustomerOid)).ToList(); + Model.SelectedResources = list.Where(resource => resource.ResourceOid.HasValue && Model.SelectedResourceOids.Contains(resource.ResourceOid.Value)).ToList(); + + Model.SelectedEmployeesForFiltering = Model.PossibleEmployees.Where(employee => Model.SelectedEmployeeOidsForFiltering.Contains(employee.EmployeeOid)).ToList(); + Model.SelectedCustomersForFiltering = Model.PossibleCustomers.Where(customer => Model.SelectedCustomerOidsForFiltering.Contains(customer.CustomerOid)).ToList(); + Model.SelectedResourcesForFiltering = list.Where(resource => resource.ResourceOid.HasValue && Model.SelectedResourceOidsForFiltering.Contains(resource.ResourceOid.Value)).ToList(); + + Model.SelectedEmployeesForIntervalFinder = Model.PossibleEmployees.Where(employee => Model.SelectedEmployeeOidsForIntervalFinder.Contains(employee.EmployeeOid)).ToList(); + Model.SelectedCustomersForIntervalFinder = Model.PossibleCustomers.Where(customer => Model.SelectedCustomerOidsForIntervalFinder.Contains(customer.CustomerOid)).ToList(); + Model.SelectedResourcesForIntervalFinder = list.Where(resource => resource.ResourceOid.HasValue && Model.SelectedResourceOidsForIntervalFinder.Contains(resource.ResourceOid.Value)).ToList(); + } + [Authorize] public ActionResult CheckEmployeeAvailability(string startString, string endString) { @@ -446,29 +507,110 @@ namespace BeWoPlanerMobil.Controllers } [Authorize] - public ActionResult SelectAllEmployeesForFiltering() + public ActionResult SelectAllEmployeesForFiltering(bool isChecked) { - Model.SelectedEmployeesForFiltering = Model.PossibleEmployees.Select(employee => employee.EmployeeOid).ToList(); + if(Model is null) + { + TempData[TempDataConstants.DoLogoutKey] = true; + return PartialView("AptFltEmployeePopupListPartial"); + } + + Model.SelectedEmployeeOidsForFiltering = Model.PossibleEmployees.Select(employee => employee.EmployeeOid).ToList(); + + return PartialView("AptFltEmployeePopupListPartial", Model); + } + + [Authorize] + public ActionResult SelectAllCustomersForFiltering(bool isChecked) + { + if(Model is null) + { + TempData[TempDataConstants.DoLogoutKey] = true; + return PartialView("AptFltCustomerPopupListPartial"); + } + + Model.SelectedCustomerOidsForFiltering = Model.PossibleCustomers.Select(customer => customer.CustomerOid).ToList(); + + return PartialView("AptFltCustomerPopupListPartial", Model); + } + + [Authorize] + public ActionResult SelectAllResourcesForFiltering(bool isChecked) + { + if(Model is null) + { + TempData[TempDataConstants.DoLogoutKey] = true; + return PartialView("AptFltResourcePopupListPartial"); + } + + Model.SelectedResourceOidsForFiltering = Model.PossibleResources.Where(resource => resource.ResourceOid.HasValue).Select(resource => resource.ResourceOid.Value).ToList(); + + return PartialView("AptFltResourcePopupListPartial"); + } + + [Authorize] + public ActionResult SelectTeamForAppointment(long teamOid) + { + if(Model is null) + { + TempData[TempDataConstants.DoLogoutKey] = true; + return PartialView("AptFltEmployeePopupListPartial"); + } + + var selectedTeam = Model.MyTeams.FirstOrDefault(team => team.TeamOid.Equals(teamOid)); + + if(selectedTeam is null) + { + return PartialView("AptFltEmployeePopupListPartial"); + } + + var fullTeamObj = EmployeeService.LoadTeam(teamOid); + + Model.SelectedEmployeeOids.AddRangeIfElementsNotIn(fullTeamObj.Member.Select(member => member.EmployeeOid)); return PartialView("AptFltEmployeePopupListPartial"); } [Authorize] - public ActionResult SelectAllCustomersForFiltering() + public ActionResult UpdateEmployeeSelection(long[] selectedEmployeeOids) { - Model.SelectedCustomersForFiltering = Model.PossibleCustomers.Select(customer => customer.CustomerOid).ToList(); + if(Model is null) + { + TempData[TempDataConstants.DoLogoutKey] = true; + return PartialView("AptFltEmployeePopupListPartial"); + } - return PartialView("AptFltCustomerPopupListPartial"); + var selectedEmployees = Model.PossibleEmployees.Where(possibleEmployee => selectedEmployeeOids.Contains(possibleEmployee.EmployeeOid)).ToList(); + + Model.SelectedEmployeeOidsForFiltering = selectedEmployees.Select(employee => employee.EmployeeOid).ToList(); + + return PartialView("AptFltEmployeePopupListPartial", Model); } [Authorize] - public ActionResult SelectAllResourcesForFiltering() + public ActionResult UpdateCustomerSelection(long[] selectedCustomerOids) { - Model.SelectedResourcesForFiltering = Model.PossibleResources.Where(resource => resource.ResourceOid.HasValue).Select(resource => resource.ResourceOid.Value).ToList(); + if(Model is null) + { + TempData[TempDataConstants.DoLogoutKey] = true; + return PartialView("AptFltCustomerPopupListPartial"); + } - return PartialView("AptFltResourcePopupListPartial"); + var selectedCustomers = Model.PossibleCustomers.Where(possibleCustomer => selectedCustomerOids.Contains(possibleCustomer.CustomerOid)).ToList(); + + return PartialView("AptFltCustomerPopupListPartial", Model); } - + [Authorize] + public ActionResult UpdateResourceSelection(long[] selectedResourceOids) + { + if(Model is null) + { + TempData[TempDataConstants.DoLogoutKey] = true; + return PartialView("AptFltResourcePopupListPartial"); + } + + return PartialView("AptFltResourcePopupListPartial", Model); + } } } \ No newline at end of file diff --git a/BeWoPlanerMobil/Controllers/MainController.cs b/BeWoPlanerMobil/Controllers/MainController.cs index 15fe5490c..0494f2dfe 100644 --- a/BeWoPlanerMobil/Controllers/MainController.cs +++ b/BeWoPlanerMobil/Controllers/MainController.cs @@ -4925,7 +4925,7 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult ChangePassword(FormCollection formCollection) { - if(Model is null || !MobileSessionFacade.IsUserLoggedIn() || LoggedInUser.UserVersion is null) + if(Model is null || false == MobileSessionFacade.IsUserLoggedIn() || LoggedInUser.UserVersion is null) { TempData[TempDataConstants.DoLogoutKey] = true; return Logout(); @@ -4946,13 +4946,13 @@ namespace BeWoPlanerMobil.Controllers { var checkResult = UserService.CheckPassword(LoggedInUser.UserOid.Value, oldPassword, newPassword); - if(!(checkResult is null)) + if(false == checkResult is null) { TempData[TempDataConstants.PwChErrKey] = checkResult; return RedirectToActionPermanent("Main"); } } - + var userName = LoggedInUser.LoginName; var userVersion = LoggedInUser.UserVersion.Value; diff --git a/BeWoPlanerMobil/Controllers/ReportController.cs b/BeWoPlanerMobil/Controllers/ReportController.cs index 3c691064d..34951a2f6 100644 --- a/BeWoPlanerMobil/Controllers/ReportController.cs +++ b/BeWoPlanerMobil/Controllers/ReportController.cs @@ -28,28 +28,20 @@ namespace BeWoPlanerMobil.Controllers { get { - if(!MobileSessionFacade.IsUserLoggedIn()) + if(false == MobileSessionFacade.IsUserLoggedIn()) { RedirectToActionPermanent("Index", "Login"); return null; } - if (_Model == null) + if(false == _Model is null) { - _Model = new ReportModel { ReportCreator = GetReportCreator() }; - InitModel(_Model); - InitViewModel(); + return _Model; } - //if (((ReportModel) Session[ModelSessionConstants.ReportModelKey])?.LoggedInEmployee is null) - //{ - // _Model = new ReportModel {ReportCreator = GetReportCreator()}; - // InitModel(_Model); - // Session[ModelSessionConstants.ReportModelKey] = _Model; - //} - //else - //{ - // _Model = (ReportModel) Session[ModelSessionConstants.ReportModelKey]; - //} + + _Model = new ReportModel { ReportCreator = GetReportCreator() }; + InitModel(_Model); + InitViewModel(); return _Model; } @@ -93,29 +85,33 @@ namespace BeWoPlanerMobil.Controllers Model.AllTeams = EmployeeService.GetAllActiveCompactTeamsForEmployee(LoggedInEmployee.EmployeeOid.Value); Model.Dokutypes = ValueListService.GetAllValueListEntrysByType(ValueListEntryType.DocumentType); - if (Model.Dokutypes != null) + + if(false == Model.Dokutypes is null) { Model.Dokutypes = Model.Dokutypes.OrderBy(s => s.ValueListEntryOid).ToArray(); } - if (Model.SelectedCustomerOid.HasValue) + if(Model.SelectedCustomerOid.HasValue) { Model.SelectedCustomer = Model.Customers.FirstOrDefault(customer => customer.CustomerOid == Model.SelectedCustomerOid.Value); } - if (Model.SelectedEmployeeOid.HasValue) + if(Model.SelectedEmployeeOid.HasValue) { Model.SelectedEmployee = Model.Employees.FirstOrDefault(employee => employee.EmployeeOid.Equals(Model.SelectedEmployeeOid.Value)); } - if (Model.SelectedTeamOid.HasValue) + + if(Model.SelectedTeamOid.HasValue) { Model.SelectedTeam = Model.AllTeams.FirstOrDefault(team => team.TeamOid == Model.SelectedTeamOid.Value); } - if (Model.SelectedOrganisationOid.HasValue) + + if(Model.SelectedOrganisationOid.HasValue) { Model.SelectedOrganisation= Model.Organisations.FirstOrDefault(organisation => organisation.OrganisationOid.Equals(Model.SelectedOrganisationOid.Value)); } - if (Model.SelectedServiceCategoryOid.HasValue) + + if(Model.SelectedServiceCategoryOid.HasValue) { Model.SelectedServiceCategory = Model.ServiceCategories.FirstOrDefault(serviceCategory => serviceCategory.ServiceCategoryOid == Model.SelectedServiceCategoryOid.Value); } @@ -137,12 +133,12 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult Report() { - if(!MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer")) + if(false == MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer")) { return Logout(); } - if(!Model.HasRightToViewQuittierungsbelege) + if(false == Model.HasRightToViewQuittierungsbelege) { return RedirectToActionPermanent("Main", "Main"); } @@ -161,7 +157,7 @@ namespace BeWoPlanerMobil.Controllers return Logout(); } - if(!Model.HasRightToViewQuittierungsbelege) + if(false == Model.HasRightToViewQuittierungsbelege) { return RedirectToActionPermanent("Main", "Main"); } @@ -171,8 +167,6 @@ namespace BeWoPlanerMobil.Controllers TempData[TempDataConstants.DoLogoutKey] = true; return Logout(); } - - } catch(Exception e) { @@ -1232,11 +1226,23 @@ namespace BeWoPlanerMobil.Controllers Model.QbEntryPageCount = pageCount; Model.QbEntryCount = rowCount; - reportObjects = reportObjects.Where(x => x != null).ToList(); + reportObjects = reportObjects.Where(servicesOverview => false == servicesOverview is null).ToList(); var srOids = new List(); + //var srOidsBillable = new List(); - reportObjects.DoForEach(x => x.Services.DoForEach(s => srOids.AddIfNotIn(s.ServiceRecordOid))); + //reportObjects.DoForEach(servicesOverview => servicesOverview.Services.DoForEach(s => srOids.AddIfNotIn(s.ServiceRecordOid))); + + foreach(var reportObject in reportObjects) + { + foreach(var serviceDetail in reportObject.Services) + { + if(serviceDetail.IsBillable) + { + srOids.AddIfNotIn(serviceDetail.ServiceRecordOid); + } + } + } Model.ConfirmationReceiptSignatures = OperationsService.LoadAllConfirmationReceiptSignaturesByServiceRecordOids(srOids, out var serviceRecordOidsWithSignature); @@ -1246,12 +1252,14 @@ namespace BeWoPlanerMobil.Controllers Model.ReportServiceRecordOids = new List(); reportObjects.DoForEach(ro => ro.Services.DoForEach(s => { - Model.ReportServiceRecordOids.AddIfNotIn(s.ServiceRecordOid); + if(s.IsBillable) + { + Model.ReportServiceRecordOids.AddIfNotIn(s.ServiceRecordOid); + } })); - var hasEmployeeSignature = srOids.All(a => serviceRecordOidsWithSignature.ContainsValueAtKey(SignatureType.Employee, a)); - - var anyEmployeeSignatures = srOids.Any(a => serviceRecordOidsWithSignature.ContainsValueAtKey(SignatureType.Employee, a)); + var hasEmployeeSignature = srOids.All(serviceRecordOid => serviceRecordOidsWithSignature.ContainsValueAtKey(SignatureType.Employee, serviceRecordOid)); + var anyEmployeeSignatures = srOids.Any(serviceRecordOid => serviceRecordOidsWithSignature.ContainsValueAtKey(SignatureType.Employee, serviceRecordOid)); var employeeSignatureState = SignatureState.None; @@ -1265,7 +1273,7 @@ namespace BeWoPlanerMobil.Controllers employeeSignatureState = SignatureState.All; } - if(!Model.HasRightToProvideEmployeeSignatureForOthers) + if(false == Model.HasRightToProvideEmployeeSignatureForOthers) { // Prüfen, ob alle eigenen ServiceRecords unterschrieben sind var ownServiceRecordOids = new List(); @@ -1296,20 +1304,26 @@ namespace BeWoPlanerMobil.Controllers reportObjects.DoForEach(reportObject => { var quittierungsbelegItems = new List(); - - bool fristAbgelaufen = false; + var fristAbgelaufen = false; reportObject.Services.DoForEach(serviceDetail => { - quittierungsbelegItems.Add(new QuittierungsbelegItem(serviceDetail)); - if (this.Model.MokSettings != null && this.Model.MokSettings.AnzTageUnterschriftErfolgt > 0) + if(false == serviceDetail.IsBillable) { - if (DateTime.Now.Date.Subtract(serviceDetail.StartDate).TotalDays > this.Model.MokSettings.AnzTageUnterschriftErfolgt) - { - fristAbgelaufen = true; - } + return; } + quittierungsbelegItems.Add(new QuittierungsbelegItem(serviceDetail)); + + if(false == Model.MokSettings?.AnzTageUnterschriftErfolgt > 0) + { + return; + } + + if(DateTime.Now.Date.Subtract(serviceDetail.StartDate).TotalDays > Model.MokSettings.AnzTageUnterschriftErfolgt) + { + fristAbgelaufen = true; + } }); if(quittierungsbelegItems.Count == 0) @@ -1319,11 +1333,11 @@ namespace BeWoPlanerMobil.Controllers var oids = quittierungsbelegItems.Select(s => s.ServiceRecordOid).ToList(); - var hasCustomerSignature = oids.All(a => serviceRecordOidsWithSignature.ContainsValueAtKey(SignatureType.Customer, a)); + var hasCustomerSignature = srOids.All(a => serviceRecordOidsWithSignature.ContainsValueAtKey(SignatureType.Customer, a)); - var employeeSignatureState2 = GetSignatureState(oids, serviceRecordOidsWithSignature, SignatureType.Employee); + var employeeSignatureState2 = GetSignatureState(srOids, serviceRecordOidsWithSignature, SignatureType.Employee); - var customerSignatureState = GetSignatureState(oids, serviceRecordOidsWithSignature, SignatureType.Customer); + var customerSignatureState = GetSignatureState(srOids, serviceRecordOidsWithSignature, SignatureType.Customer); var customerSignatureOid = hasCustomerSignature ? customerSignatures.FirstOrDefault(cs => cs.ServiceRecords.All(a => a.Customer.CustomerOid.Equals(reportObject.CustomerOid) && a.ServiceRecordOid.HasValue && serviceRecordOidsWithSignature[SignatureType.Customer].Contains(a.ServiceRecordOid.Value)))?.ConfirmationReceiptSignatureOid : null; var sigs = customerSignatures.Where(cs => cs.ServiceRecords.All(a => a.Customer.CustomerOid.Equals(reportObject.CustomerOid) && a.ServiceRecordOid.HasValue && serviceRecordOidsWithSignature[SignatureType.Customer].Contains(a.ServiceRecordOid.Value))).ToList(); @@ -1350,6 +1364,7 @@ namespace BeWoPlanerMobil.Controllers var customerSignatureServiceRecordOids = new List(); var employeeSignatureServiceRecordOids = new List(); + if(serviceRecordOidsWithSignature.ContainsKey(SignatureType.Customer)) { customerSignatureServiceRecordOids = serviceRecordOidsWithSignature[SignatureType.Customer]; @@ -1360,7 +1375,7 @@ namespace BeWoPlanerMobil.Controllers employeeSignatureServiceRecordOids = serviceRecordOidsWithSignature[SignatureType.Employee]; } - foreach (var quittierungsbelegItem in quittierungsbelegItems) + foreach(var quittierungsbelegItem in quittierungsbelegItems) { var serviceRecordOid = quittierungsbelegItem.ServiceRecordOid; @@ -1374,7 +1389,7 @@ namespace BeWoPlanerMobil.Controllers employeeOids.AddIfNotIn(serviceDetail.EmployeeOid); } - if(!Model.HasRightToProvideEmployeeSignatureForOthers) + if(false == Model.HasRightToProvideEmployeeSignatureForOthers) { var serviceRecordOidsFromOtherEmployees = reportObject.Services.Where(serviceDetail => !serviceDetail.EmployeeOid.Equals(LoggedInEmployee.EmployeeOid)).Select(serviceDetail => serviceDetail.ServiceRecordOid).ToList(); var ownServiceRecordOids = reportObject.Services.Where(serviceDetail => serviceDetail.EmployeeOid.Equals(LoggedInEmployee.EmployeeOid)).Select(serviceDetail => serviceDetail.ServiceRecordOid).ToList(); diff --git a/BeWoPlanerMobil/Controllers/SchedulerController.cs b/BeWoPlanerMobil/Controllers/SchedulerController.cs index 2a3b710ff..c936d9544 100644 --- a/BeWoPlanerMobil/Controllers/SchedulerController.cs +++ b/BeWoPlanerMobil/Controllers/SchedulerController.cs @@ -58,7 +58,12 @@ namespace BeWoPlanerMobil.Controllers private void InitViewModel() { - if (Model.HasRightToInsertRessourceAppointments || Model.HasRightToViewAllResourceAppointments) + if(Model is null) + { + throw new Exception("Das Model im SchedulerController ist wider Erwarten null!"); + } + + if(Model.HasRightToInsertRessourceAppointments || Model.HasRightToViewAllResourceAppointments) { var allResources = KalenderService.GetAllResources().OrderBy(r => r.Name).ToList(); @@ -72,51 +77,46 @@ namespace BeWoPlanerMobil.Controllers Model.ResourceCategories2Resources = categories2Resources.OrderBy(kvp => kvp.Key.DisplayName).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); } - if (Model?.LoggedInEmployee?.EmployeeOid.HasValue ?? false) + if(Model.LoggedInEmployee?.EmployeeOid.HasValue ?? false) { var compactEmployee = EmployeeService.GetActiveCompactEmployeeWithOid(Model.LoggedInEmployee.EmployeeOid.Value); Model.MyTeamEmployees = EmployeeService.GetAllTeamMember(compactEmployee).OrderBy(employee => employee.LastName).ToList(); } - else if (!(Model is null)) + else { Model.MyTeamEmployees = new List(); } - if (Model.HasRightToViewTeams && (Model?.LoggedInEmployee?.EmployeeOid.HasValue ?? false)) + if(Model.HasRightToViewTeams && (Model?.LoggedInEmployee?.EmployeeOid.HasValue ?? false)) { Model.MyTeams = EmployeeService.GetAllActiveCompactTeamsForEmployee(Model.LoggedInEmployee.EmployeeOid.Value).OrderBy(team => team.Name).ToList(); } - if (!(Model is null)) - { - Model.TeamMemberCustomerOids = EmployeeService.LoadTeamsRelatedCustomerOids(LoggedInUser.Employee.EmployeeOid); - } + Model.TeamMemberCustomerOids = EmployeeService.LoadTeamsRelatedCustomerOids(LoggedInUser.Employee.EmployeeOid); - if (Model.HasRightToViewCustomerSelectionInScheduler) + if(Model.HasRightToViewCustomerSelectionInScheduler) { Model.AllCustomers = CustomerService.GetAllActiveCompactCustomers().OrderBy(customer => customer.LastName).ToList(); } - if (Model.HasRightToViewEmployeeAppointments) + if(Model.HasRightToViewEmployeeAppointments) { Model.AllEmployees = EmployeeService.GetAllActiveEmployeesCompact().OrderBy(employee => employee.LastName).ToList(); } - //LoadAppointmentsForDate(); - - if (Model.SelectedAppointmentOid.HasValue) + if(Model.SelectedAppointmentOid.HasValue) { - if (Model.Appointments == null) + if(Model.Appointments is null) { LoadAppointmentsForDate(); } - Model.SelectedAppointment = Model.Appointments.FirstOrDefault(app => app.SchedulerAppointmentOid.HasValue && app.SchedulerAppointmentOid.Value == Model.SelectedAppointmentOid.Value); + + Model.SelectedAppointment = Model.Appointments?.FirstOrDefault(app => app.SchedulerAppointmentOid.HasValue && app.SchedulerAppointmentOid.Value == Model.SelectedAppointmentOid.Value); } + SetHasResourcesEmployeesOrCustomers(); UpdateSelectedObjects(); - - } private void UpdateSelectedObjects() diff --git a/BeWoPlanerMobil/Models/DevExpressSchedulerModel.cs b/BeWoPlanerMobil/Models/DevExpressSchedulerModel.cs index 04b6fee00..80ee1fcaf 100644 --- a/BeWoPlanerMobil/Models/DevExpressSchedulerModel.cs +++ b/BeWoPlanerMobil/Models/DevExpressSchedulerModel.cs @@ -27,6 +27,7 @@ namespace BeWoPlanerMobil.Models public List PossibleResources { get; set; } public List PossibleEmployees { get; set; } + #region Terminformular-Elemente public List SelectedCustomers { get; set; } public List SelectedResources { get; set; } public List SelectedEmployees { get; set; } @@ -48,6 +49,7 @@ namespace BeWoPlanerMobil.Models get => DevExpressSchedulerSessionModel.SelectedResourceOids; set => DevExpressSchedulerSessionModel.SelectedResourceOids = value; } + #endregion public EmployeeAvailabilityObject EmployeeAvailabilityObject { get; set; } @@ -67,22 +69,101 @@ namespace BeWoPlanerMobil.Models return null; } - public List SelectedEmployeesForFiltering + public List SelectedEmployeeOidsForFiltering { - get => DevExpressSchedulerSessionModel.SelectedEmployeesForFiltering; - set => DevExpressSchedulerSessionModel.SelectedEmployeesForFiltering = value; + get => DevExpressSchedulerSessionModel.SelectedEmployeeOidsForFiltering; + set => DevExpressSchedulerSessionModel.SelectedEmployeeOidsForFiltering = value; } - public List SelectedCustomersForFiltering + public List SelectedCustomerOidsForFiltering { - get => DevExpressSchedulerSessionModel.SelectedCustomersForFiltering; - set => DevExpressSchedulerSessionModel.SelectedCustomersForFiltering = value; + get => DevExpressSchedulerSessionModel.SelectedCustomerOidsForFiltering; + set => DevExpressSchedulerSessionModel.SelectedCustomerOidsForFiltering = value; } - public List SelectedResourcesForFiltering + public List SelectedResourceOidsForFiltering { - get => DevExpressSchedulerSessionModel.SelectedResourcesForFiltering; - set => DevExpressSchedulerSessionModel.SelectedResourcesForFiltering = value; + get => DevExpressSchedulerSessionModel.SelectedResourceOidsForFiltering; + set => DevExpressSchedulerSessionModel.SelectedResourceOidsForFiltering = value; + } + + public List MyTeams { get; set; } = new List(); + public Dictionary> ResourceCategories2Resources { get; set; } = new Dictionary>(); + public List MyTeamEmployees { get; set; } + public List TeamMemberCustomerOids { get; set; } + + public List SelectedEmployeesForFiltering { get; set; } + public List SelectedCustomersForFiltering { get; set; } + public List SelectedResourcesForFiltering { get; set; } + + public List SelectedEmployeesForIntervalFinder { get; set; } + public List SelectedCustomersForIntervalFinder { get; set; } + public List SelectedResourcesForIntervalFinder { get; set; } + + public List SelectedEmployeeOidsForIntervalFinder + { + get => DevExpressSchedulerSessionModel.SelectedEmployeeOidsForIntervalFinder; + set => DevExpressSchedulerSessionModel.SelectedEmployeeOidsForIntervalFinder = value; + } + + public List SelectedCustomerOidsForIntervalFinder + { + get => DevExpressSchedulerSessionModel.SelectedCustomerOidsForIntervalFinder; + set => DevExpressSchedulerSessionModel.SelectedCustomerOidsForIntervalFinder = value; + } + + public List SelectedResourceOidsForIntervalFinder + { + get => DevExpressSchedulerSessionModel.SelectedResourceOidsForIntervalFinder; + set => DevExpressSchedulerSessionModel.SelectedResourceOidsForIntervalFinder = value; + } + + public bool ShowTasks + { + get => DevExpressSchedulerSessionModel.ShowTasks; + set => DevExpressSchedulerSessionModel.ShowTasks = value; + } + + public bool ShowOnlyPrivateAppointments + { + get => DevExpressSchedulerSessionModel.ShowOnlyPrivateAppointments; + set => DevExpressSchedulerSessionModel.ShowOnlyPrivateAppointments = value; + } + + public bool ShowOnlyEmployees + { + get => DevExpressSchedulerSessionModel.ShowOnlyEmployees; + set => DevExpressSchedulerSessionModel.ShowOnlyEmployees = value; + } + + public bool ShowOnlyCustomers + { + get => DevExpressSchedulerSessionModel.ShowOnlyCustomers; + set => DevExpressSchedulerSessionModel.ShowOnlyCustomers = value; + } + + public bool ShowOnlyResources + { + get => DevExpressSchedulerSessionModel.ShowOnlyResources; + set => DevExpressSchedulerSessionModel.ShowOnlyResources = value; + } + + public bool ShowAbsenceTimes + { + get => DevExpressSchedulerSessionModel.ShowAbsenceTimes; + set => DevExpressSchedulerSessionModel.ShowAbsenceTimes = value; + } + + public bool ShowEmployeeColors + { + get => DevExpressSchedulerSessionModel.ShowEmployeeColors; + set => DevExpressSchedulerSessionModel.ShowEmployeeColors = value; + } + + public bool ShowOnlyMyOwnAppointments + { + get => DevExpressSchedulerSessionModel.ShowOnlyMyOwnAppointments; + set => DevExpressSchedulerSessionModel.ShowOnlyMyOwnAppointments = value; } } } \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/DevExpressSchedulerSessionModel.cs b/BeWoPlanerMobil/Models/DevExpressSchedulerSessionModel.cs index 61d604311..48d76418b 100644 --- a/BeWoPlanerMobil/Models/DevExpressSchedulerSessionModel.cs +++ b/BeWoPlanerMobil/Models/DevExpressSchedulerSessionModel.cs @@ -10,20 +10,47 @@ namespace BeWoPlanerMobil.Models public List SelectedResourceOids { get; set; } public SchedulerViewType CurrentSchedulerViewType { get; set; } - public List SelectedEmployeesForFiltering { get; set; } - public List SelectedCustomersForFiltering { get; set; } - public List SelectedResourcesForFiltering { get; set; } + public List SelectedEmployeeOidsForFiltering { get; set; } + public List SelectedCustomerOidsForFiltering { get; set; } + public List SelectedResourceOidsForFiltering { get; set; } + + public List SelectedEmployeeOidsForIntervalFinder { get; set; } + public List SelectedCustomerOidsForIntervalFinder { get; set; } + public List SelectedResourceOidsForIntervalFinder { get; set; } + + public bool ShowTasks { get; set; } + public bool ShowOnlyPrivateAppointments { get; set; } + public bool ShowOnlyEmployees { get; set; } + public bool ShowOnlyCustomers { get; set; } + public bool ShowOnlyResources { get; set; } + public bool ShowAbsenceTimes { get; set; } + public bool ShowEmployeeColors { get; set; } + public bool ShowOnlyMyOwnAppointments { get; set; } public override void ResetValues() { base.ResetValues(); - SelectedCustomerOids = null; - SelectedEmployeeOids = null; - SelectedResourceOids = null; - SelectedEmployeesForFiltering = null; - SelectedCustomersForFiltering = null; - SelectedResourcesForFiltering = null; + SelectedCustomerOids = new List(); + SelectedEmployeeOids = new List(); + SelectedResourceOids = new List(); + + SelectedEmployeeOidsForFiltering = new List(); + SelectedCustomerOidsForFiltering = new List(); + SelectedResourceOidsForFiltering = new List(); + + SelectedEmployeeOidsForIntervalFinder = new List(); + SelectedCustomerOidsForIntervalFinder = new List(); + SelectedResourceOidsForIntervalFinder = new List(); + + ShowTasks = false; + ShowOnlyPrivateAppointments = false; + ShowOnlyEmployees = false; + ShowOnlyCustomers = false; + ShowOnlyResources = false; + ShowAbsenceTimes = false; + ShowEmployeeColors = false; + ShowOnlyMyOwnAppointments = false; } } } \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/SchedulerModel.cs b/BeWoPlanerMobil/Models/SchedulerModel.cs index f92078704..7c4bd87b1 100644 --- a/BeWoPlanerMobil/Models/SchedulerModel.cs +++ b/BeWoPlanerMobil/Models/SchedulerModel.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web.Mvc; -using BeWoPlanerMobil.Service; using BeWoPlanerMobil.Util; using BS.Shared; using BS.Shared.Core; @@ -21,19 +20,21 @@ namespace BeWoPlanerMobil.Models SessionModel.ResetValues(); } - public SchedulerSessionModel SchedulerSessionModel - { - get - { - return SessionModel as SchedulerSessionModel; - } - } + public SchedulerSessionModel SchedulerSessionModel => SessionModel as SchedulerSessionModel; public List TeamMemberCustomerOids { get; set; } - public DateTime SelectedDate { get { return SchedulerSessionModel.SelectedDate; } set { SchedulerSessionModel.SelectedDate = value; } } + public DateTime SelectedDate + { + get => SchedulerSessionModel.SelectedDate; + set => SchedulerSessionModel.SelectedDate = value; + } - public long? SelectedAppointmentOid { get { return SchedulerSessionModel.SelectedAppointmentOid; } set { SchedulerSessionModel.SelectedAppointmentOid = value; } } + public long? SelectedAppointmentOid + { + get => SchedulerSessionModel.SelectedAppointmentOid; + set => SchedulerSessionModel.SelectedAppointmentOid = value; + } public SchedulerAppointmentDC SelectedAppointment { get; set; } @@ -42,11 +43,11 @@ namespace BeWoPlanerMobil.Models public List AppointmentListItems { get; set; } - public bool HasRightToEditAppointment(String identifier) + public bool HasRightToEditAppointment(string identifier) { - var appointment = AppointmentListItems.FirstOrDefault(app => app.Identifier.Equals(identifier))?.SchedulerAppointment; //Appointments.FirstOrDefault(app => app.SchedulerAppointmentOid.HasValue && app.SchedulerAppointmentOid.Value == appointmentOid); + var appointment = AppointmentListItems.FirstOrDefault(app => app.Identifier.Equals(identifier))?.SchedulerAppointment; - return appointment != null && BS.Shared.Core.Utils.CheckSchedulerRights(appointment.CustomerList, appointment.ResourceList, appointment.EmployeeList, appointment.Originator, appointment.SchedulerAppointmentOid is null, SchedulerRightsCheckType.Edit, LoggedInUser, TeamMemberCustomerOids ?? new List()); + 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; @@ -65,16 +66,20 @@ namespace BeWoPlanerMobil.Models { var allResources = new List(); - foreach(var cat2res in ResourceCategories2Resources) + foreach(var cat2Res in ResourceCategories2Resources) { - allResources.AddRangeIfElementsNotIn(cat2res.Value); + allResources.AddRangeIfElementsNotIn(cat2Res.Value); } return allResources.OrderBy(resource => resource.Name).ToList(); } } - public List SelectedResourceOids { get { return SchedulerSessionModel.SelectedResourceOids; } set { SchedulerSessionModel.SelectedResourceOids = value; } } + public List SelectedResourceOids + { + get => SchedulerSessionModel.SelectedResourceOids; + set => SchedulerSessionModel.SelectedResourceOids = value; + } public List SelectedResources { get; set; } @@ -103,13 +108,21 @@ namespace BeWoPlanerMobil.Models public List AllEmployees { get; set; } = new List(); - public List SelectedEmployeeOids { get { return SchedulerSessionModel.SelectedEmployeeOids; } set { SchedulerSessionModel.SelectedEmployeeOids = value; } } + 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 { return SchedulerSessionModel.SelectedCustomerOids; } set { SchedulerSessionModel.SelectedCustomerOids = value; } } + public List SelectedCustomerOids + { + get => SchedulerSessionModel.SelectedCustomerOids; + set => SchedulerSessionModel.SelectedCustomerOids = value; + } public List SelectedCustomers { get; set; } = new List(); @@ -122,11 +135,25 @@ namespace BeWoPlanerMobil.Models public bool ShowCustomerButton => IsInEditMode ? HasRightToInsertCustomerAppointments : HasRightToEditCustomerAppointments; //IntervalFinder - public List SelectedEmployeeOidsForIntervalFinder { get { return SchedulerSessionModel.SelectedEmployeeOidsForIntervalFinder; } set { SchedulerSessionModel.SelectedEmployeeOidsForIntervalFinder = value; } } + public List SelectedEmployeeOidsForIntervalFinder + { + get => SchedulerSessionModel.SelectedEmployeeOidsForIntervalFinder; + set => SchedulerSessionModel.SelectedEmployeeOidsForIntervalFinder = value; + } public List SelectedEmployeesForIntervalFinder { get; set; } = new List(); - public List SelectedCustomerOidsForIntervalFinder { get { return SchedulerSessionModel.SelectedCustomerOidsForIntervalFinder; } set { SchedulerSessionModel.SelectedCustomerOidsForIntervalFinder = value; } } + + public List SelectedCustomerOidsForIntervalFinder + { + get => SchedulerSessionModel.SelectedCustomerOidsForIntervalFinder; + set => SchedulerSessionModel.SelectedCustomerOidsForIntervalFinder = value; + } public List SelectedCustomersForIntervalFinder { get; set; } = new List(); - public List SelectedResourceOidsForIntervalFinder { get { return SchedulerSessionModel.SelectedResourceOidsForIntervalFinder; } set { SchedulerSessionModel.SelectedResourceOidsForIntervalFinder = value; } } + + public List SelectedResourceOidsForIntervalFinder + { + get => SchedulerSessionModel.SelectedResourceOidsForIntervalFinder; + set => SchedulerSessionModel.SelectedResourceOidsForIntervalFinder = value; + } public List SelectedResourcesForIntervalFinder { get; set; } = new List(); public Dictionary> FreeIntervals { get; set; } = new Dictionary>(); @@ -149,38 +176,82 @@ namespace BeWoPlanerMobil.Models } } - public bool IsInIntervalFinderMode { get { return SchedulerSessionModel.IsInIntervalFinderMode; } set { SchedulerSessionModel.IsInIntervalFinderMode = value; } } - public DateTime? IntervalStartDate { get { return SchedulerSessionModel.IntervalStartDate; } set { SchedulerSessionModel.IntervalStartDate = value; } } - public DateTime? IntervalEndDate { get { return SchedulerSessionModel.IntervalEndDate; } set { SchedulerSessionModel.IntervalEndDate = value; } } + 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 { return SchedulerSessionModel.IntervalDuration; } set { SchedulerSessionModel.IntervalDuration = value; } } + 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 { return SchedulerSessionModel.IsAllDay; } set { SchedulerSessionModel.IsAllDay = value; } } - + public bool IsAllDay + { + get => SchedulerSessionModel.IsAllDay; + set => SchedulerSessionModel.IsAllDay = value; + } + [Display(Name = "Privat")] - public bool IsPrivate { get { return SchedulerSessionModel.IsPrivate; } set { SchedulerSessionModel.IsPrivate = value; } } + public bool IsPrivate + { + get => SchedulerSessionModel.IsPrivate; + set => SchedulerSessionModel.IsPrivate = value; + } public List MyTeamEmployees { get; set; } - public List SelectedResourceOidsForFiltering { get { return SchedulerSessionModel.SelectedResourceOidsForFiltering; } set { SchedulerSessionModel.SelectedResourceOidsForFiltering = value; } } + public List SelectedResourceOidsForFiltering + { + get => SchedulerSessionModel.SelectedResourceOidsForFiltering; + set => SchedulerSessionModel.SelectedResourceOidsForFiltering = value; + } public List SelectedResourcesForFiltering { get; set; } - public List SelectedEmployeeOidsForFiltering { get { return SchedulerSessionModel.SelectedEmployeeOidsForFiltering; } set { SchedulerSessionModel.SelectedEmployeeOidsForFiltering = value; } } + + public List SelectedEmployeeOidsForFiltering + { + get => SchedulerSessionModel.SelectedEmployeeOidsForFiltering; + set => SchedulerSessionModel.SelectedEmployeeOidsForFiltering = value; + } public List SelectedEmployeesForFiltering { get; set; } - public List SelectedCustomerOidsForFiltering { get { return SchedulerSessionModel.SelectedCustomerOidsForFiltering; } set { SchedulerSessionModel.SelectedCustomerOidsForFiltering = value; } } + + 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 { return SchedulerSessionModel.ShouldLoadTasks; } set { SchedulerSessionModel.ShouldLoadTasks = value; } } + public bool ShouldLoadTasks + { + get => SchedulerSessionModel.ShouldLoadTasks; + set => SchedulerSessionModel.ShouldLoadTasks = value; + } } public class WeekViewObject diff --git a/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltCustomerPopupListPartial.cshtml b/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltCustomerPopupListPartial.cshtml index 61a197d24..dac193093 100644 --- a/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltCustomerPopupListPartial.cshtml +++ b/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltCustomerPopupListPartial.cshtml @@ -1,7 +1,11 @@ -@using BeWoPlanerMobil.Util -@using BS.Shared.Extensions -@model BeWoPlanerMobil.Models.DevExpressSchedulerModel +@model BeWoPlanerMobil.Models.DevExpressSchedulerModel - +
+ + +
+} \ No newline at end of file diff --git a/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltCustomersPartial.cshtml b/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltCustomersPartial.cshtml index 219538601..2f43c6437 100644 --- a/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltCustomersPartial.cshtml +++ b/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltCustomersPartial.cshtml @@ -1,7 +1,103 @@ -@using BeWoPlanerMobil.Util -@using BS.Shared.Extensions +@using BS.Shared.Extensions @model BeWoPlanerMobil.Models.DevExpressSchedulerModel \ No newline at end of file + $("#customer-input-container").load("@Url.Action("SelectAllCustomersForFiltering")", { isChecked: isChecked }, () => { scheduler.Refresh(); }); + } + + function customerListSearchOnChange() { + var text = $("#customer-search-input").val().toLowerCase(); + + const entries = $(".customer-text"); + + if(text.length === 0) { + entries.show(); + } + + $.each(entries, function (index, item) { + const customer = $(item); + + if(customer.find(".customer-name-label").text().toLowerCase().includes(text)) { + customer.show(); + } else { + customer.hide(); + } + }); + } + + function resetCustomerSeach() { + $("#customer-search-input").val(""); + $(".customer-text").show(); + } + + function removeSelectedCustomer(customerOid) { + const checkbox = $(`#customer-${customerOid}-checkbox`); + + if(checkbox.length) { + checkbox.prop("checked", false); + } + + changeCustomerListSelection(); + } + + function changeCustomerListSelection() { + const selectedCustomerOids = $("#customer-input-container input:checked").map(function () {return $(this).attr("id").split("-")[1];}).get(); + const allCustomersCount = $("#customer-input-container input[type=checkbox]").map(function () {return $(this).attr("id").split("-")[1];}).get(); + const selectedCustomersCount = selectedCustomerOids.length; + + $("#all-customers-checkbox").prop("checked", (allCustomersCount === selectedCustomersCount)); + + $("#customer-input-container").load("@Url.Action("UpdateCustomerSelection")", { selectedCustomerOids: selectedCustomerOids }, () => { scheduler.Refresh(); }); + } + + + \ No newline at end of file diff --git a/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltEmployeePopupListPartial.cshtml b/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltEmployeePopupListPartial.cshtml index 61a197d24..dab2cc22c 100644 --- a/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltEmployeePopupListPartial.cshtml +++ b/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltEmployeePopupListPartial.cshtml @@ -1,7 +1,11 @@ -@using BeWoPlanerMobil.Util -@using BS.Shared.Extensions -@model BeWoPlanerMobil.Models.DevExpressSchedulerModel +@model BeWoPlanerMobil.Models.DevExpressSchedulerModel - +
+ + +
+} \ No newline at end of file diff --git a/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltEmployeesPartial.cshtml b/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltEmployeesPartial.cshtml index 711a46ffc..994357cd0 100644 --- a/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltEmployeesPartial.cshtml +++ b/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltEmployeesPartial.cshtml @@ -6,20 +6,7 @@ function selectAllEmployeesOnChange() { const isChecked = $("#all-employees-checkbox").prop("checked"); - $("#employee-input-container").load( - "@Url.Action("SelectAllEmployees")", - { - isChecked: isChecked - }, - () => { - $("#selected-employees-list").load( - "@Url.Action("LoadUpdatedEmployees")", - () => { - $("#one-day-scheduler-partial-container").load('@Url.Action("FetchAppointments", "Scheduler")'); - } - ); - } - ); + $("#employee-input-container").load("@Url.Action("SelectAllEmployeesForFiltering")", { isChecked: isChecked }, () => { scheduler.Refresh(); }); } function employeeListSearchOnChange() { @@ -45,5 +32,102 @@ function resetEmployeeSearch() { $("#employee-search-input").val(""); $(".employee-text").show(); + } + + function selectTeamForAppointment(teamOid) { + $("#employee-input-container").load("@Url.Action("SelectTeamForAppointment")", { teamOid: teamOid }, () => { + scheduler.Refresh(); + }); + } + + function removeSelectedEmployee(employeeOid) { + const checkbox = $(`#employee-${employeeOid}-checkbox`); + + if(checkbox.length) { + checkbox.prop("checked", false); + } + + changeEmployeeListSelection(); + } + + function changeEmployeeListSelection() { + const selectedEmployeeOids = $("#employee-input-container input:checked").map(function() { return $(this).attr("id").split("-")[1]; }).get(); + const allEmployeesCount = $("#employee-input-container input[type=checkbox]").map(function () { return $(this).attr("id").split("-")[1]; }).get().length; + const selectedEmployeesCount = selectedEmployeeOids.length; + console.log(selectedEmployeeOids); + $("#all-employees-checkbox").prop("checked", (allEmployeesCount === selectedEmployeesCount)); + + $("#employee-input-container").load("@Url.Action("UpdateEmployeeSelection", "DevExpressScheduler")", {selectedEmployeeOids: selectedEmployeeOids }, () => { scheduler.Refresh(); }); } + + \ No newline at end of file diff --git a/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltResourcePopupListPartial.cshtml b/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltResourcePopupListPartial.cshtml index 61a197d24..b8e1e535e 100644 --- a/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltResourcePopupListPartial.cshtml +++ b/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltResourcePopupListPartial.cshtml @@ -1,7 +1,29 @@ @using BeWoPlanerMobil.Util -@using BS.Shared.Extensions @model BeWoPlanerMobil.Models.DevExpressSchedulerModel - +
+ + +
+ } + + + +} \ No newline at end of file diff --git a/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltResourcesPartial.cshtml b/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltResourcesPartial.cshtml index 219538601..2a7e96c41 100644 --- a/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltResourcesPartial.cshtml +++ b/BeWoPlanerMobil/Views/DevExpressScheduler/AptFltResourcesPartial.cshtml @@ -3,5 +3,78 @@ @model BeWoPlanerMobil.Models.DevExpressSchedulerModel \ No newline at end of file + $("#resource-input-container").load("@Url.Action("SelectAllResourcesForFiltering")", { isChecked: isChecked }, () => { scheduler.Refresh(); }); + } + + + + function removeSelectedResource(resourceOid) { + const checkbox = $(`#resource-${resourceOid}-checkbox`); + + if(checkbox.length) { + checkbox.prop("checked", false); + } + + changeResourceListSelection(); + } + + function changeResourceListSelection() { + const selectedResourceOids = $("#resource-input-container input:checked").map(function() {return $(this).attr("id").split("-")[1];}).get(); + const allResourcesCount = $("#resource-input-container input[type=checkbox]").map(function () {return $(this).attr("id").split("-")[1];}).get().length; + const selectedResourcesCount = selectedResourceOids.length; + + $("#all-resources-checkbox").prop("checked", (allResourcesCount === selectedResourcesCount)); + + $("#resource-input-container").load("@Url.Action("UpdateResourceSelection")", { selectedResourceOids: selectedResourceOids }, () => { scheduler.Refresh(); }); + } + + + \ No newline at end of file diff --git a/BeWoPlanerMobil/Views/DevExpressScheduler/DevExpressScheduler.cshtml b/BeWoPlanerMobil/Views/DevExpressScheduler/DevExpressScheduler.cshtml index e4c98ce5a..6569b1a64 100644 --- a/BeWoPlanerMobil/Views/DevExpressScheduler/DevExpressScheduler.cshtml +++ b/BeWoPlanerMobil/Views/DevExpressScheduler/DevExpressScheduler.cshtml @@ -106,7 +106,7 @@ const tmpDate = new Date(); const end = new Date(tmpDate.setTime(start.getTime() + duration)); - + e.handled = true; const startStr = getTimeStamp(start, false, false); @@ -133,57 +133,57 @@ currentItem.SetVisible(false); } } - } + } }