From deed0b081dfed841055e28b21fd5c5adf4923c6c Mon Sep 17 00:00:00 2001 From: Christian Date: Tue, 15 Jul 2025 14:26:03 +0200 Subject: [PATCH] =?UTF-8?q?-=20Mok=20Performance=20der=20Zeiterfassung=20?= =?UTF-8?q?=C3=BCberarbeitet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeWo/BeWo.csproj | 4 +- BeWo/BeWoApp.xaml.cs | 2 +- BeWo/View/Detail/SupportConceptView.xaml.cs | 7 + BeWoPlanerMobil/BeWoPlanerMobil.csproj | 6 +- BeWoPlanerMobil/BeWoPlanerMobil.csproj.user | 2 +- .../Controllers/AbstractBaseController.cs | 5 + .../Controllers/CustomerController.cs | 2 +- BeWoPlanerMobil/Controllers/MainController.cs | 858 +++++++++--------- BeWoPlanerMobil/Models/MainModel.cs | 225 +---- BeWoPlanerMobil/Models/MainSessionModel.cs | 30 +- .../{Util => Models}/MokMandator.cs | 2 +- .../{Util => Models}/MokServiceRecord.cs | 2 +- .../Models/MokSupportConceptListObject.cs | 67 ++ BeWoPlanerMobil/Models/MokZiel.cs | 53 ++ BeWoPlanerMobil/Models/ReportViewerModel.cs | 17 +- .../Service/MobileSessionFacade.cs | 2 +- BeWoPlanerMobil/Util/DcToMokMapper.cs | 18 + .../Views/Main/GroupBookingScCbRelList.cshtml | 2 +- .../Main/GroupBookingSelectionPartial.cshtml | 2 +- BeWoPlanerMobil/Views/Main/Main.cshtml | 8 +- .../Views/Main/MultiBookingPartial.cshtml | 2 +- .../Views/Main/MultiBookingScCbRelList.cshtml | 6 +- .../Main/MultiBookingSelectionPartial.cshtml | 6 +- .../Views/Main/SingleBookingPartial.cshtml | 10 +- 24 files changed, 709 insertions(+), 629 deletions(-) rename BeWoPlanerMobil/{Util => Models}/MokMandator.cs (97%) rename BeWoPlanerMobil/{Util => Models}/MokServiceRecord.cs (98%) create mode 100644 BeWoPlanerMobil/Models/MokSupportConceptListObject.cs create mode 100644 BeWoPlanerMobil/Models/MokZiel.cs diff --git a/BeWo/BeWo.csproj b/BeWo/BeWo.csproj index 56c0b6cf7..4ae4ba7f1 100644 --- a/BeWo/BeWo.csproj +++ b/BeWo/BeWo.csproj @@ -43,12 +43,12 @@ de-DE BeWoPlaner ownSoft GmbH - 2.0.1.268 + 2.0.1.270 true publish.htm false true - 270 + 271 2.0.1.%2a false true diff --git a/BeWo/BeWoApp.xaml.cs b/BeWo/BeWoApp.xaml.cs index fff2245b2..4d2043c2c 100644 --- a/BeWo/BeWoApp.xaml.cs +++ b/BeWo/BeWoApp.xaml.cs @@ -58,7 +58,7 @@ namespace BeWo public static string ShortVersion = "3.26"; - public static string Version = "Version 3.26"; + public static string Version = "Version 3.26.2"; public static int RenderTier = 0; public static bool IsInDesignMode = DesignerProperties.GetIsInDesignMode(new DependencyObject()); diff --git a/BeWo/View/Detail/SupportConceptView.xaml.cs b/BeWo/View/Detail/SupportConceptView.xaml.cs index ebc190abb..cb605187c 100644 --- a/BeWo/View/Detail/SupportConceptView.xaml.cs +++ b/BeWo/View/Detail/SupportConceptView.xaml.cs @@ -1972,6 +1972,13 @@ namespace BeWo.View.Detail { var rating = link.Tag as RatingVM; + e.Handled = true; + + if (rating.IsNew) + { + MessageBox.Show("Dieser Datensatz muss zuerst gespeichert werden, bevor Sie ihn drucken können.", "Erst speichern bitte", MessageBoxButton.OK, MessageBoxImage.Information); + return; + } if (rating != null && rating.DataContract.RatingOid.HasValue) { var url = BeWoApp.SiteOfOrigin + "/ReportView.aspx" diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj b/BeWoPlanerMobil/BeWoPlanerMobil.csproj index 21b639966..74214f17a 100644 --- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj +++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj @@ -313,6 +313,10 @@ + + + + @@ -327,8 +331,6 @@ - - diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user b/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user index e261725c0..197827697 100644 --- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user +++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj.user @@ -8,7 +8,7 @@ - Debug|Any CPU + Release|Any CPU ProjectFiles 600 MvcControllerEmptyScaffolder diff --git a/BeWoPlanerMobil/Controllers/AbstractBaseController.cs b/BeWoPlanerMobil/Controllers/AbstractBaseController.cs index 2140ff168..89afc922a 100644 --- a/BeWoPlanerMobil/Controllers/AbstractBaseController.cs +++ b/BeWoPlanerMobil/Controllers/AbstractBaseController.cs @@ -117,6 +117,11 @@ namespace BeWoPlanerMobil.Controllers public static int TimeoutLimit => System.Web.HttpContext.Current.Session.Timeout; + public bool IsUserLoggedIn() + { + return MobileSessionFacade.IsUserLoggedIn(); + } + [Authorize] public ActionResult UpdateApplicationSettings(string pKey, string pValue) { diff --git a/BeWoPlanerMobil/Controllers/CustomerController.cs b/BeWoPlanerMobil/Controllers/CustomerController.cs index ed219d19f..58473a40d 100644 --- a/BeWoPlanerMobil/Controllers/CustomerController.cs +++ b/BeWoPlanerMobil/Controllers/CustomerController.cs @@ -120,7 +120,7 @@ namespace BeWoPlanerMobil.Controllers Model.ReportTypes = new List { CustomerReportType.Medikamentenliste, CustomerReportType.Bedarfsmedikation, CustomerReportType.Historie }; } - Model.AllAbsenceReasons = Model.HasRightToViewCustomerAbsenceTimes ? CustomerService.GetAllAbsenceReasons() : new List(); + Model.AllAbsenceReasons = Model.HasRightToViewCustomerAbsenceTimes ? CustomerService.GetAllAbsenceReasons().Where(a => !a.Sichtbarkeit.HasValue || a.Sichtbarkeit.Value == AbsenceReasonVisibilityType.All || a.Sichtbarkeit.Value == AbsenceReasonVisibilityType.Customer).ToList() : new List(); diff --git a/BeWoPlanerMobil/Controllers/MainController.cs b/BeWoPlanerMobil/Controllers/MainController.cs index 1ab338735..52e836da2 100644 --- a/BeWoPlanerMobil/Controllers/MainController.cs +++ b/BeWoPlanerMobil/Controllers/MainController.cs @@ -42,7 +42,13 @@ namespace BeWoPlanerMobil.Controllers { public class MainController : AbstractBaseController { + public MainController() + { + int test = 0; + } private MainModel _Model; + + public bool SkipModelInitialization { get; set; } public MainModel Model { get @@ -55,9 +61,20 @@ namespace BeWoPlanerMobil.Controllers if(_Model is null) { + var sw = new System.Diagnostics.Stopwatch(); + sw.Start(); _Model = new MainModel(); InitModel(_Model); - InitViewModel(); + + if (!SkipModelInitialization) + { + InitViewModel(); + } + + sw.Stop(); + + System.Diagnostics.Debug.WriteLine($"MainModel Initialisierung in: {sw.ElapsedMilliseconds} ms"); + } return _Model; @@ -73,30 +90,8 @@ namespace BeWoPlanerMobil.Controllers { InitSettings(); - //Load SupportConcepts - if (Model.LoggedInEmployee?.EmployeeOid.HasValue ?? false) - { - //var test = OperationsService.GetAllActiveSupportConceptCostbearer(false, true, Model.LoggedInEmployee.EmployeeOid.Value); - - Model.SupportConcepts = EmployeeService.GetActiveSupportConceptsForEmployee(Model.LoggedInEmployee.EmployeeOid, Model.SelectedSupportConceptFilter); - } - else - { - Model.SupportConcepts = new List(); - } - - if (Model.ShowExpiredSupportConcepts == false) - { - Model.SupportConcepts = Model.SupportConcepts.Where(supportConcept => - { - var endDate = MainModel.GetEndDateOfSupportConcept(supportConcept); - - return endDate is null || endDate.Value >= DateTime.Now.Date; - }).ToList(); - } - + CreateModelSupportConceptListObjects(false); - Model.GroupsOfPeople = EmployeeService.GetAllGroups(LoggedInEmployee.EmployeeOid).OrderBy(gop => gop.Name).ToList(); Model.Dokutypes = ValueListService.GetAllValueListEntrysByType(ValueListEntryType.DocumentType); @@ -108,12 +103,13 @@ namespace BeWoPlanerMobil.Controllers //Load Employees if (Model.AllEmployees is null) { - Model.AllEmployees = EmployeeService.GetAllActiveEmployeesCompact().OrderBy(e => e.LastName).ToList(); + //Model.AllEmployees = EmployeeService.GetAllActiveEmployeesCompact().OrderBy(e => e.LastName).ToList(); + Model.AllEmployees = EmployeeService.GetAllCompactEmployees().Where(e => e.ActivationType == ActivationTypeId.Active).OrderBy(e => e.LastName).ToList(); } if (Model.EmployeesForGroupAndMultiBooking is null) { - Model.EmployeesForGroupAndMultiBooking = EmployeeService.GetAllCompactEmployees().Where(e => e.ActivationType == ActivationTypeId.Active).OrderBy(e => e.LastName).ToList(); + Model.EmployeesForGroupAndMultiBooking = Model.AllEmployees; } if (LoggedInUser.HasRight(UserRightType.ServiceRecord_AllowCreationForOtherEmployees)) @@ -131,16 +127,98 @@ namespace BeWoPlanerMobil.Controllers Model.Employees = Model.Employees.OrderBy(e => e.LastName).ThenBy(e => e.FirstName).ToList(); - Model.SelectedConceptCostBearerRelations = new List(); - //Model.MultiBookingSelectedConceptCostBearerRelations = new List(); - + Model.GroupBookingSelectedCostBearerSupportConcepts = new List(); + Model.GoalRatingTypes = OperationsService.GetAllRatingTypes().OrderBy(o => o.Position).ToList(); SetSelectedObjects(); + + } + + public void CreateModelSupportConceptListObjects(bool forceReload) + { + //Load SupportConcepts + if (Model.SupportConceptListObjects == null || Model.SupportConceptListObjects.Count == 0 || forceReload || (Model.SelectedCostBearerSupportConceptOid.HasValue && Model.SelectedCostBearerSupportConceptOid.Value != -1)) + { + if (Model.LoggedInEmployee?.EmployeeOid.HasValue ?? false) + { + //Model.SupportConcepts = new List(); + + var test = OperationsService.GetAllActiveSupportConceptCostbearer(false, true, Model.LoggedInEmployee.EmployeeOid.Value); + + Model.SupportConcepts = test; + } + else + { + Model.SupportConcepts = new List(); + } + + if (Model.ShowExpiredSupportConcepts == false) + { + Model.SupportConcepts = Model.SupportConcepts.Where(sc => + { + var endDate = sc.EndDate; + + return endDate is null || endDate.Value >= DateTime.Now.Date; + }).ToList(); + } + + foreach (var sc in Model.SupportConcepts) + { + if (sc.Goals == null) + { + sc.Goals = new List(); + } + } + //Einfachbuchung + var allCostBearerRelationsSingleBooking = new List { + new MokSupportConceptListObject(-1, -1, false, false) + { + NameAndDateOfBirth = "Hilfeplan auswählen" + }, + new MokSupportConceptListObject(-2, -2, false, false) + { + NameAndDateOfBirth = "Ohne Hilfeplan" + }}; + + var allCostBearerRelationsMultiBooking = new List(); + + + BS.Shared.Settings.ApplicationSettings.SupportConceptExpirationLimitInMonths = Model.MokSettings.SupportConceptExpirationLimitInMonths; + + foreach (var sc in Model.SupportConcepts.OrderBy(sc => sc.Customer.LastName)) + { + foreach (var cb in sc.CostBearerList) + { + String customerName = $"{sc.Customer.SimpleDescription} {(sc.Customer.DateOfBirth.HasValue ? "*" + sc.Customer.DateOfBirth.Value.ToString("dd.MM.yyyy") : string.Empty)}"; + String scNameSingle = $"{cb.Bezeichnung} {sc.StartDate?.ToShortDateString().Remove(6, 2) ?? string.Empty}-{sc.EndDate?.ToShortDateString().Remove(6, 2) ?? string.Empty} {cb.OrganisationName}"; // {Model.GetIsNotApproved(sc)}"; + scNameSingle = sc.CostBearer; + + allCostBearerRelationsMultiBooking.Add(new MokSupportConceptListObject(sc.SupportConceptOid, sc.CostBearerRelOids[0], sc.IsAboutToExpire, sc.ExpiresIn3MonthOrLess) + { + NameAndDateOfBirth = customerName, + SupportConceptTimeSpan = scNameSingle + }); + } + + } + + allCostBearerRelationsSingleBooking.AddRange(allCostBearerRelationsMultiBooking); + + Model.SupportConceptListObjects = allCostBearerRelationsSingleBooking; + Model.SupportConceptListObjectsForGroupBooking = allCostBearerRelationsMultiBooking; + } + + if (Model.SupportConceptListObjectsForGroupBooking == null && Model.SupportConceptListObjects != null) + { + Model.SupportConceptListObjectsForGroupBooking = Model.SupportConceptListObjects.Where(s => s.CostBearer2SupportConceptOid > 0).ToList(); + } } private void SetSelectedObjects() { + + Model.SelectedEmployee = Model.SelectedEmployeeOid.HasValue ? Model.AllEmployees.First(f => f.EmployeeOid.Equals(Model.SelectedEmployeeOid.Value)) : LoggedInUser.Employee; @@ -167,61 +245,45 @@ namespace BeWoPlanerMobil.Controllers Log.Info($"Model.SupportConceptListObjects Oids = {sb}"); } - Model.SelectedCostBearer2SupportConceptRelListObject = Model.SupportConceptListObjects.FirstOrDefault(f => f.CostBearer2SupportConceptOid == -1) ?? Model.SupportConceptListObjects.First(); + Model.SelectedSupportConceptListObject = Model.SupportConceptListObjects.FirstOrDefault(f => f.CostBearer2SupportConceptOid == -1) ?? Model.SupportConceptListObjects.First(); Model.SelectedCostBearerSupportConceptOid = -1; Model.HasAnyRatingTypes = Model.HasRightToRateGoals && OperationsService.GetAllRatingTypes().Any(); } else { - Model.SelectedCostBearer2SupportConceptRelListObject = Model.SupportConceptListObjects.FirstOrDefault(f => f.CostBearer2SupportConceptOid == Model.SelectedCostBearerSupportConceptOid) ?? Model.SupportConceptListObjects.First(); + Model.SelectedSupportConceptListObject = Model.SupportConceptListObjects.FirstOrDefault(f => f.CostBearer2SupportConceptOid == Model.SelectedCostBearerSupportConceptOid) ?? Model.SupportConceptListObjects.First(); } - - //if (Model.SelectedSupportConceptOid.HasValue) - //{ - //} - if (Model.SelectedConceptCostBearerRelationOids.Count > 0) + if (Model.GroupBookingSelectedCostBearerSupportConceptOids.Count > 0) { - Model.SelectedConceptCostBearerRelations = CustomerService.GetSupportConceptCostBearerRelationsById(Model.SelectedConceptCostBearerRelationOids); + Model.GroupBookingSelectedCostBearerSupportConcepts = CustomerService.GetSupportConceptCostBearerRelationsById(Model.GroupBookingSelectedCostBearerSupportConceptOids); } - Model.GroupBookingSelectedEmployees = Model.AllEmployees.Where(employee => Model.GroupBookingSelectedEmployeeOids.Contains(employee.EmployeeOid)).ToList(); - Model.GroupBookingSelectedSupportConcepts = Model.SupportConcepts.Where(s => Model.GroupBookingSelectedSupportConceptOids.Contains(s.SupportConceptOid.Value)).ToList(); - - Model.MultiBookingSelectedEmployees = Model.AllEmployees.Where(employee => Model.MultiBookingSelectedEmployeeOids.Contains(employee.EmployeeOid)).ToList(); - Model.MultiBookingSelectedSupportConcepts = Model.SupportConcepts.Where(s => Model.MultiBookingSelectedSupportConceptOids.Contains(s.SupportConceptOid.Value)).ToList(); //Model.Group = Model.SupportConceptListObjectsForGroupBooking.Where(s => Model.GroupBookingSelectedSupportConceptOids.Contains(s.SupportConceptOid.Value)).ToList(); if (Model.SelectedCostBearerSupportConceptOid.HasValue && Model.SelectedCostBearerSupportConceptOid != -1) { - LoadSupportConceptThings(Model.SelectedCostBearerSupportConceptOid); + LoadSupportConceptThings(Model.SelectedCostBearerSupportConceptOid, true); LoadPaginatedServiceRecordsToModel(Model.CurrentPage); } else if (Model.IsInGroupBookingMode || Model.IsInMultiBookingMode) { - LoadSupportConceptThings(null); + LoadSupportConceptThings(null, true); } + if (Model.AllGoals != null) { - Model.SelectedGoals = Model.AllGoals.Where(g => Model.SelectedGoalOids.Contains(g.ValueListEntryOid.Value)).ToList(); + //Model.SelectedGoals = DcToMokMapper.CreateZiele(Model.AllGoals.Where(g => Model.SelectedGoalOids.Contains(g.ValueListEntryOid.Value))); } if (Model.IsInEditingMode && Model.SelectedServiceRecordOid.HasValue) { Model.SelectedServiceRecord = Model.GetServiceRecord(Model.SelectedServiceRecordOid.Value); } - } - private void LoadSupportConceptThings(long? cb2ScOid) - { - LoadServiceCategoriesToModel(cb2ScOid); - - LoadGoals(); - - LoadTextModules(); } private void InitSettings() @@ -312,6 +374,85 @@ namespace BeWoPlanerMobil.Controllers } } + + + private void LoadSupportConceptThings(long? cb2ScOid, bool loadTextModules) + { + Model.SelectedCostBearerSupportConceptOid = cb2ScOid; + + bool istEinzelBuchung = !Model.IsInGroupBookingMode && !Model.IsInMultiBookingMode; + + if (istEinzelBuchung) + { + Model.SelectedSupportConcept = Model.SupportConcepts.FirstOrDefault(sc => sc.CostBearerRelOids.Any(a => a.Equals(Model.SelectedCostBearerSupportConceptOid))); + } + + + if (istEinzelBuchung && ((!cb2ScOid.HasValue) || cb2ScOid.Value == -1)) + { + // Im Einzelmodus entweder nichts oder "Hilfeplan auswählen" (-1) ausgewählt. + Model.Categories2Descriptions = new Dictionary>(); + Model.SelectedGoalOids = new List(); + } + else + { + var allC2SOids = new List(); + + if (!istEinzelBuchung) + { + allC2SOids = Model.GroupBookingSelectedCostBearerSupportConceptOids; + } + else if (cb2ScOid.HasValue && cb2ScOid.Value > 0) + { + allC2SOids.Add(cb2ScOid.Value); + } + + + var scOids = Model.SupportConceptListObjects.Where(sc => allC2SOids.Contains(sc.CostBearer2SupportConceptOid)).Select(s => s.SupportConceptOid).ToList(); + + var infos = OperationsService.GetSupportConceptTreeNodeDetailInfos(scOids); + + LoadServiceCategoriesToModel(infos); + + LoadGoals(infos); + + if (istEinzelBuchung && Model.SelectedSupportConcept != null && infos.Count == 1) + { + Model.SelectedSupportConcept.Goals = infos[0].SupportConceptGoals; + } + } + + + + // Ist der Klient abwesend, wird dies wie im FaC angezeigt + if (Model.SelectedSupportConcept?.Customer?.AbsenceTimes?.Any() ?? false) + { + foreach (var absenceTime in Model.SelectedSupportConcept.Customer.AbsenceTimes) + { + if (absenceTime.Start.HasValue && DateTime.Now > absenceTime.Start.Value && (absenceTime.End is null || DateTime.Now < absenceTime.End.Value)) + { + Model.IsCustomerAbsence = true; + Model.CustomerAbsenceInfo = $"{absenceTime.Reason.Description} von {absenceTime.Start:dd.MM.yyyy} bis {(absenceTime.End.HasValue ? absenceTime.End.Value.ToString("dd.MM.yyyy") : "unbekannt")}"; + break; + } + + Model.IsCustomerAbsence = false; + Model.CustomerAbsenceInfo = null; + } + } + else + { + Model.IsCustomerAbsence = false; + Model.CustomerAbsenceInfo = null; + } + + + if (loadTextModules) + { + LoadTextModules(); + } + } + public void LoadTextModules() { Model.TextModules.Clear(); @@ -355,6 +496,18 @@ namespace BeWoPlanerMobil.Controllers } } + private IList GetSelectedGroupBookingSupportConcepts() + { + if (Model.SupportConcepts == null || Model.SupportConcepts.Count == 0) + { + CreateModelSupportConceptListObjects(true); + } + + var list = Model.SupportConcepts.Where(sc => sc.CostBearerRelOids.Count > 0 && Model.GroupBookingSelectedCostBearerSupportConceptOids.Contains(sc.CostBearerRelOids[0])).ToList(); + + return list; + } + [Authorize] public ActionResult Main() { @@ -470,9 +623,9 @@ namespace BeWoPlanerMobil.Controllers if(Model.IsInGroupBookingMode) { - var supportConcepts = Model.GroupBookingSelectedSupportConcepts; - - supportConcepts.DoForEach(sc => { allGoals.AddRangeIfElementsNotIn(sc.Goals); }); + var list = GetSelectedGroupBookingSupportConcepts(); + + list.DoForEach(sc => { allGoals.AddRangeIfElementsNotIn(sc.Goals); }); } else if(!Model.IsInGroupBookingMode) { @@ -485,7 +638,7 @@ namespace BeWoPlanerMobil.Controllers { if(!Model.SelectedGoals.Any(a => a.ValueListEntryOid.HasValue && a.ValueListEntryOid.Value == goal.ValueListEntryOid)) { - Model.SelectedGoals.AddIfNotIn(goal); + Model.SelectedGoals.AddIfNotIn(DcToMokMapper.CreateZiel(goal)); } goal.RatingTypeOid = ratingTypeOid; @@ -500,6 +653,7 @@ namespace BeWoPlanerMobil.Controllers return SerializeObject(new GoalRating(rating?.DisplayName ?? string.Empty, goal?.ValueListEntryOid ?? 0)); } + private List _AllGoals; private List GetAllGoalsForSelectedSupportConcept() { @@ -535,45 +689,45 @@ namespace BeWoPlanerMobil.Controllers } - private void LoadGoals() + private void LoadGoals(List infos) { try { - if(Model is null) - { - return; - } var selectedGoals = new List(); - - if(Model.IsInGroupBookingMode) + foreach (var item in infos) { - var supportConcepts = Model.GroupBookingSelectedSupportConcepts; - - supportConcepts.DoForEach(sc => { selectedGoals.AddRangeIfElementsNotIn(sc.Goals); }); + selectedGoals.AddRange(item.SupportConceptGoals); } - else - { - if(Model.SelectedCostBearerSupportConceptOid is null) - { - return; - } - var supportConcept = Model.SupportConcepts.FirstOrDefault(sc => sc.CostBearerRelations.Any(sc2Cb => sc2Cb.CostBearer2SupportConceptOid.HasValue && sc2Cb.CostBearer2SupportConceptOid.Value.Equals(Model.SelectedCostBearerSupportConceptOid.Value))); + //if(Model.IsInGroupBookingMode) + //{ + // var supportConcepts = GetSelectedGroupBookingSupportConcepts(); - if(supportConcept is null) - { - if (Model.SelectedCostBearerSupportConceptOid.Value > 0) - { - Log.Info($"Hilfeplan von Bewilligung mit Oid {Model.SelectedCostBearerSupportConceptOid} nicht gefunden beim Laden der Ziele (LoadGoals)."); - } - return; - } + // supportConcepts.DoForEach(sc => { selectedGoals.AddRangeIfElementsNotIn(sc.Goals); }); + //} + //else + //{ + // if(Model.SelectedCostBearerSupportConceptOid is null) + // { + // return; + // } - Model.SelectedSupportConcept = supportConcept; + // var supportConcept = Model.SupportConcepts.FirstOrDefault(sc => sc.CostBearerRelOids.Any(c2sOid => c2sOid.Equals(Model.SelectedCostBearerSupportConceptOid.Value))); - selectedGoals = supportConcept.Goals; - } + // if(supportConcept is null) + // { + // if (Model.SelectedCostBearerSupportConceptOid.Value > 0) + // { + // Log.Info($"Hilfeplan von Bewilligung mit Oid {Model.SelectedCostBearerSupportConceptOid} nicht gefunden beim Laden der Ziele (LoadGoals)."); + // } + // return; + // } + + // Model.SelectedSupportConcept = supportConcept; + + // selectedGoals = supportConcept.Goals; + //} var missingParents = selectedGoals.Where(w => w.ParentOid != null && false == selectedGoals.Any(a => a.ValueListEntryOid.Equals(w.ParentOid))).Select(s => s.ParentOid).ToList(); @@ -588,7 +742,7 @@ namespace BeWoPlanerMobil.Controllers var allGoals = selectedGoals.Union(_ParentGoals.Values).ToList(); Model.AllGoals = allGoals; - Model.GoalTree = BuildGoalTree(allGoals); + Model.GoalTree = BuildGoalTree(Model.AllGoals); } catch(Exception exception) { @@ -737,7 +891,7 @@ namespace BeWoPlanerMobil.Controllers foreach(var supportConcept in Model.SupportConcepts) { - if(supportConcept.CostBearerRelations.Any(supportConceptCostBearerRel => supportConceptCostBearerRel.CostBearer2SupportConceptOid == oid)) + if(supportConcept.CostBearerRelOids.Any(c2sOid => c2sOid == oid)) { isLoaded = true; } @@ -995,11 +1149,15 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult LoadUpToDateTextModules() { - if(Model is null) + + + if (!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; return PartialView("TextModulePartial"); } + + //Wird alles im InitViewModel gemacht: //Model.TextModules.Clear(); @@ -1183,7 +1341,10 @@ namespace BeWoPlanerMobil.Controllers } Model.NewServiceRecord.IP = Request.UserHostAddress; - Model.NewServiceRecord.Goals = Model.SelectedGoals; + + + Model.NewServiceRecord.Goals = CreateValueListEntriesFromMokZiele(Model.SelectedGoals); + Model.NewServiceRecord.Start = zeitenFeld[0]; Model.NewServiceRecord.End = zeitenFeld[1]; Model.NewServiceRecord.Betrag = betrag; @@ -1206,19 +1367,17 @@ namespace BeWoPlanerMobil.Controllers } } - var sc = Model.SupportConcepts.FirstOrDefault(fod => fod.CostBearerRelations.Any(a => a.CostBearer2SupportConceptOid.HasValue && a.CostBearer2SupportConceptOid.Value.Equals(selectedCostbearerScRelOid))); + var sc = Model.SupportConcepts.FirstOrDefault(fod => fod.CostBearerRelOids.Any(a => a.Equals(selectedCostbearerScRelOid))); if(!(sc is null)) { - if(sc.SupportConceptOid.HasValue) - { - Model.NewServiceRecord.SupportConcept = CustomerService.LoadCompactSupportConceptDC(sc.SupportConceptOid.Value, Model.LoggedInEmployee.EmployeeOid); - } + Model.NewServiceRecord.SupportConcept = CustomerService.LoadCompactSupportConceptDC(sc.SupportConceptOid, Model.LoggedInEmployee.EmployeeOid); + Model.NewServiceRecord.Customer = sc.Customer; - var cb2ScRel = sc.CostBearerRelations.First(f => f.CostBearer2SupportConceptOid.HasValue && f.CostBearer2SupportConceptOid.Equals(selectedCostbearerScRelOid)); - Model.NewServiceRecord.CostBearer = cb2ScRel.CostBearer; + var costBearer = sc.CostBearerList.FirstOrDefault(); + Model.NewServiceRecord.CostBearer = costBearer?.Organisation; var intervall = Model.NewServiceRecord.CostBearer.ActualMinuteIntervall; @@ -1281,7 +1440,7 @@ namespace BeWoPlanerMobil.Controllers Model.NewServiceRecord.InsUser = MobileSessionFacade.EmployeeFullname; Model.NewServiceRecord.IsCreatedInMobileClient = true; - if(Model.IsInGroupBookingMode && Model.GroupBookingSelectedSupportConcepts.Count > 1) + if(Model.IsInGroupBookingMode && Model.GroupBookingSelectedCostBearerSupportConceptOids.Count > 1) { return Model.NewServiceRecord.ServiceRecordOid.HasValue ? SaveGroupBooking() : UpdateGroupBooking(); } @@ -1399,6 +1558,22 @@ namespace BeWoPlanerMobil.Controllers return result; } + private List CreateValueListEntriesFromMokZiele(IList ziele) + { + var vleList = new List(); + foreach (var ziel in ziele) + { + var vleDc = Model.AllGoals.FirstOrDefault(g => g.ValueListEntryOid == ziel.ValueListEntryOid); + if (vleDc != null) + { + vleDc.RatingTypeOid = ziel.RatingTypeOid; + vleList.Add(vleDc); + } + } + + return vleList; + } + [Authorize] private ActionResult SaveGroupBooking() { @@ -1409,9 +1584,8 @@ namespace BeWoPlanerMobil.Controllers } var employeeCount = Model.GroupBookingSelectedEmployees.Count; - var personCount = Model.GroupBookingSelectedSupportConcepts.Count; - - var cb2ScOids = Model.GroupBookingSelectedCostbearerRelOids; + var personCount = Model.GroupBookingSelectedCostBearerSupportConceptOids.Count; + var cb2ScOids = Model.GroupBookingSelectedCostBearerSupportConceptOids; var list = CalculateGroupBookingDuration(employeeCount, personCount, cb2ScOids); @@ -1490,7 +1664,7 @@ namespace BeWoPlanerMobil.Controllers UpdateServiceRecordGroup(group); var employeeCount = Model.GroupBookingSelectedEmployees.Count; - var customerCount = Model.GroupBookingSelectedSupportConcepts.Count; + var customerCount = Model.GroupBookingSelectedCostBearerSupportConceptOids.Count; group.EmployeeCount = employeeCount; group.CustomerCount = customerCount; @@ -1502,15 +1676,15 @@ namespace BeWoPlanerMobil.Controllers var cb2ScOids = new List(); - foreach(var scdc in Model.GroupBookingSelectedSupportConcepts) + foreach(var scdc in GetSelectedGroupBookingSupportConcepts()) { - if(scdc.CostBearerRelations.Count > 0) + if (scdc.CostBearerRelOids.Count > 0) { - cb2ScOids.Add(scdc.CostBearerRelations.ElementAt(0).CostBearer2SupportConceptOid.Value); + cb2ScOids.Add(scdc.CostBearerRelOids[0]); - if(org is null) + if (org is null) { - org = scdc.CostBearerRelations.ElementAt(0).CostBearer; + org = scdc.CostBearerList[0].Organisation; if(org != null) { minuteInterval = org.ActualMinuteIntervall; @@ -1518,7 +1692,7 @@ namespace BeWoPlanerMobil.Controllers } else { - if(scdc.CostBearerRelations.ElementAt(0).CostBearer is null || !org.Equals(scdc.CostBearerRelations.ElementAt(0).CostBearer)) + if(scdc.CostBearerList[0] is null || !org.Equals(scdc.CostBearerList[0].Organisation)) { roundDuration = false; } @@ -1547,7 +1721,7 @@ namespace BeWoPlanerMobil.Controllers } groupDuration = lRoundedDuration; - roundedDuration = Math.Round(groupDuration / Model.GroupBookingSelectedSupportConcepts.Count, 0 , MidpointRounding.AwayFromZero); + roundedDuration = Math.Round(groupDuration / Model.GroupBookingSelectedCostBearerSupportConceptOids.Count, 0 , MidpointRounding.AwayFromZero); } Model.NewServiceRecord.RoundedDuration = roundedDuration; @@ -1602,7 +1776,6 @@ namespace BeWoPlanerMobil.Controllers Model.NewServiceRecord = null; Model.SelectedServiceRecord = null; Model.SelectedServiceRecordOid = null; - Model.GroupBookingSelectedSupportConcepts = new List(); Model.GroupBookingSelectedEmployees = new List(); ResetBookingMode(BookingMode.SingleBookingMode); @@ -1614,9 +1787,9 @@ namespace BeWoPlanerMobil.Controllers [Authorize] private IEnumerable CalculateGroupBookingDuration(int pEmployeeCount, int pCustomerCount, ICollection cb2ScOids) { - var compactSupportConcepts = CustomerServiceImp.GetCompactSupportConcepts((from sc in Model.GroupBookingSelectedSupportConcepts where sc.SupportConceptOid != null select sc.SupportConceptOid.Value).ToList(), LoggedInUser.Employee.EmployeeOid); + var compactSupportConcepts = GetSelectedGroupBookingSupportConcepts(); - var nodes = (from supportConcept in Model.GroupBookingSelectedSupportConcepts let cb = supportConcept.CostBearerRelations.FirstOrDefault(f => cb2ScOids.Contains(f.CostBearer2SupportConceptOid.Value)) let sc = compactSupportConcepts.FirstOrDefault(f => f.SupportConceptOid == supportConcept.SupportConceptOid) where cb != null && sc != null select SupportConceptService.CreateFlatSupportConceptItem(sc, CustomerService.LoadOrganisationCompact(cb.CostBearer.OrganisationOid))).ToList(); + var nodes = (from supportConcept in compactSupportConcepts let cb = supportConcept.CostBearerList.FirstOrDefault() let sc = compactSupportConcepts.FirstOrDefault(f => f.SupportConceptOid == supportConcept.SupportConceptOid) where cb != null && sc != null select SupportConceptService.CreateFlatSupportConceptItem(sc, CustomerService.LoadOrganisationCompact(cb.Organisation.OrganisationOid))).ToList(); var list = new List(); foreach(var node in nodes) @@ -1659,7 +1832,7 @@ namespace BeWoPlanerMobil.Controllers { roundDuration = true; - foreach(var org in from dc in Model.GroupBookingSelectedSupportConcepts where dc.CostBearerRelations.Count > 0 select dc.CostBearerRelations.First().CostBearer) + foreach(var org in from dc in compactSupportConcepts where dc.CostBearerList.Count > 0 select dc.CostBearerList.First().Organisation) { if(org != null) { @@ -1733,21 +1906,21 @@ namespace BeWoPlanerMobil.Controllers var oldEmps = new Dictionary(); var newKeys = new Dictionary(); - foreach(var sc in Model.GroupBookingSelectedSupportConcepts) + foreach(var sc in GetSelectedGroupBookingSupportConcepts()) { if(sc?.SupportConceptOid is null) { continue; } - var costBearerRelation = Model.GroupBookingSelectionObject.SelectedRelations.FirstOrDefault(f => f.SupportConceptOid.HasValue && f.SupportConceptOid.Value.Equals(sc.SupportConceptOid.Value)); + var costBearerRelation = Model.GroupBookingSelectionObject.SelectedRelations.FirstOrDefault(f => f.SupportConceptOid.HasValue && f.SupportConceptOid.Value.Equals(sc.SupportConceptOid)); foreach(var emp in Model.GroupBookingSelectedEmployees) { var key = emp.EmployeeOid + "_" + sc.SupportConceptOid; - if(costBearerRelation?.CostBearer2SupportConceptOid != null) + if (costBearerRelation?.CostBearer2SupportConceptOid != null) { - var costBearer2SupportConceptOid = sc.CostBearerRelations.ElementAt(0).CostBearer2SupportConceptOid; + var costBearer2SupportConceptOid = sc.CostBearerRelOids[0]; if(costBearer2SupportConceptOid != null) { key += "_" + costBearerRelation.CostBearer2SupportConceptOid.Value; @@ -1790,15 +1963,15 @@ namespace BeWoPlanerMobil.Controllers { if(newKeys.Count > 0) { - foreach(var sc in Model.GroupBookingSelectedSupportConcepts) + foreach(var sc in GetSelectedGroupBookingSupportConcepts()) { foreach(var emp in Model.GroupBookingSelectedEmployees) { var key = emp.EmployeeOid + "_" + sc.SupportConceptOid; - if(sc.CostBearerRelations != null && sc.CostBearerRelations.Count > 0) + if(sc.CostBearerRelOids != null && sc.CostBearerRelOids.Count > 0) { - key += "_" + sc.CostBearerRelations.ElementAt(0).CostBearer2SupportConceptOid; + key += "_" + sc.CostBearerRelOids.ElementAt(0); } if(!newKeys.ContainsKey(key)) @@ -1819,10 +1992,10 @@ namespace BeWoPlanerMobil.Controllers } newServiceRecord.Employee = emp; - newServiceRecord.SupportConcept = CustomerService.LoadCompactSupportConceptDC(sc.SupportConceptOid.Value, null); - newServiceRecord.CostBearer = sc.CostBearerRelations.ElementAt(0).CostBearer; + newServiceRecord.SupportConcept = CustomerService.LoadCompactSupportConceptDC(sc.SupportConceptOid, null); + newServiceRecord.CostBearer = sc.CostBearerList.ElementAt(0).Organisation; newServiceRecord.Customer = sc.Customer; - newServiceRecord.CostBearer2SupportConceptOid = sc.CostBearerRelations.ElementAt(0).CostBearer2SupportConceptOid; + newServiceRecord.CostBearer2SupportConceptOid = sc.CostBearerRelOids.ElementAt(0); } } } @@ -1840,6 +2013,8 @@ namespace BeWoPlanerMobil.Controllers { try { + SkipModelInitialization = true; //Verhindere mehrfache Initialisierung, weil später sowieso zur Main Action geleitet wird + if (Model is null) { TempData[TempDataConstants.DoLogoutKey] = true; @@ -1847,6 +2022,11 @@ namespace BeWoPlanerMobil.Controllers } long? cb2ScOid = Convert.ToInt64(formCollection[FormCollectionConstants.CostBearer2SupportConceptOidKey]); + if (Model.SelectedCostBearerSupportConceptOid.HasValue && Model.SelectedCostBearerSupportConceptOid != cb2ScOid) + { + Model.SelectedGoalOids = new List(); + Model.SelectedGoals = new List(); + } Model.SelectedCostBearerSupportConceptOid = cb2ScOid; Model.CurrentPage = 1; @@ -1860,117 +2040,31 @@ namespace BeWoPlanerMobil.Controllers } } - private void LoadServiceCategoriesToModel(long? cb2ScOid) + private void LoadServiceCategoriesToModel(List infos) { + + Model.Categories2Descriptions = new Dictionary>(); - if(Model.Categories2Descriptions is null) + if (infos.Count > 0) { - Model.Categories2Descriptions = new Dictionary>(); + Model.Categories2Descriptions = CreateServiceCategory2ServiceDescription(infos); } - - Model.Categories2Descriptions.Clear(); - //Model.SelectedServiceCategory = null; - //Model.SelectedServiceCategoryOid = null; - //Model.SelectedServiceDescription = null; - //Model.SelectedServiceDescriptionOid = null; - - if (cb2ScOid is null && (Model.IsInGroupBookingMode || Model.IsInMultiBookingMode)) - { - Log.Info("Oid der Bewilligung ist null und der MoK befindet sich im Gruppen- oder Mehrfachbuchungsmodus"); - - var selectedSupportConcepts = Model.IsInGroupBookingMode ? - Model.GroupBookingSelectedSupportConcepts : - Model.IsInMultiBookingMode ? - Model.MultiBookingSelectedSupportConcepts : - new List(); - - // Alle ServiceDescriptions der ausgewählten Hilfepläne laden - var nodes = OperationsService.GetSupportConceptTreeNodeDetailInfos(selectedSupportConcepts.Where(sc => sc.SupportConceptOid.HasValue).Select(sc => sc.SupportConceptOid.Value).ToList()); - - Model.Categories2Descriptions = CreateServiceCategory2ServiceDescription(nodes, true); - - SelectFirstServiceDescription(); - - return; - } - - Model.SelectedCostBearerSupportConceptOid = cb2ScOid; - Model.SelectedSupportConcept = - Model.SupportConcepts.FirstOrDefault( - supportConcept => - supportConcept.CostBearerRelations.Any( - supportConceptCostBearerRel => - supportConceptCostBearerRel.CostBearer2SupportConceptOid.HasValue && - supportConceptCostBearerRel.CostBearer2SupportConceptOid.Value.Equals(Model.SelectedCostBearerSupportConceptOid))); - - if(Model.SelectedSupportConcept != null) - { - Model.SelectedCostBearer2SupportConceptRelListObject = Model.SupportConceptListObjects.First(f => f.CostBearer2SupportConceptOid == cb2ScOid); - - var node = OperationsService.GetSupportConceptTreeNodeDetailInfo(Model.SelectedSupportConcept.Customer.CustomerOid, Model.SelectedSupportConcept.SupportConceptOid, Model.SelectedCostBearerSupportConceptOid); - - Model.Categories2Descriptions = CreateServiceCategory2ServiceDescription(new List { node }, false); - } - else if(cb2ScOid == -2) // Ohne Hilfeplan + else { + //Sonst ohne Hilfeplan var allServiceDescriptions = OperationsService.GetAllServiceDescriptions(); - Model.SelectedCostBearer2SupportConceptRelListObject = Model.SupportConceptListObjects.First(f => f.CostBearer2SupportConceptOid == cb2ScOid); - - if(Model.Categories2Descriptions is null) - { - Model.Categories2Descriptions = new Dictionary>(); - } - else - { - Model.Categories2Descriptions.Clear(); - } - + allServiceDescriptions.AsParallel().DoForEach(serviceDescription => { - if(serviceDescription.Category.ActivationType == ActivationTypeId.Active && (!serviceDescription.Category.OhneHilfeplan.HasValue || serviceDescription.Category.OhneHilfeplan == AccountingvisibilityType.Beides || serviceDescription.Category.OhneHilfeplan == AccountingvisibilityType.NichtKlientenbezogen)) + if (serviceDescription.Category.ActivationType == ActivationTypeId.Active && (!serviceDescription.Category.OhneHilfeplan.HasValue || serviceDescription.Category.OhneHilfeplan == AccountingvisibilityType.Beides || serviceDescription.Category.OhneHilfeplan == AccountingvisibilityType.NichtKlientenbezogen)) { Model.Categories2Descriptions.AddOrUpdateValueInDictionary(serviceDescription.Category, serviceDescription); } }); } - else if(cb2ScOid == -1) // Hilfeplan Auswählen - { - Model.SelectedCostBearer2SupportConceptRelListObject = Model.SupportConceptListObjects.First(f => f.CostBearer2SupportConceptOid.Equals(cb2ScOid.ToString())); - - if(Model.Categories2Descriptions is null) - { - Model.Categories2Descriptions = new Dictionary>(); - } - else - { - Model.Categories2Descriptions.Clear(); - } - } - - // Ist der Klient abwesend, wird dies wie im FaC angezeigt - if(Model.SelectedSupportConcept?.Customer?.AbsenceTimes?.Any() ?? false) - { - foreach(var absenceTime in Model.SelectedSupportConcept.Customer.AbsenceTimes) - { - if(absenceTime.Start.HasValue && DateTime.Now > absenceTime.Start.Value && (absenceTime.End is null || DateTime.Now < absenceTime.End.Value)) - { - Model.IsCustomerAbsence = true; - Model.CustomerAbsenceInfo = $"{absenceTime.Reason.Description} von {absenceTime.Start:dd.MM.yyyy} bis {(absenceTime.End.HasValue ? absenceTime.End.Value.ToString("dd.MM.yyyy") : "unbekannt")}"; - break; - } - - Model.IsCustomerAbsence = false; - Model.CustomerAbsenceInfo = null; - } - } - else - { - Model.IsCustomerAbsence = false; - Model.CustomerAbsenceInfo = null; - } - + SelectFirstServiceDescription(); } @@ -2026,7 +2120,7 @@ namespace BeWoPlanerMobil.Controllers } - private Dictionary> CreateServiceCategory2ServiceDescription(List nodes, bool isGroupBooking) + private Dictionary> CreateServiceCategory2ServiceDescription(List nodes) { var result = new Dictionary>(); @@ -2136,7 +2230,7 @@ namespace BeWoPlanerMobil.Controllers if(Model.IsInGroupBookingMode) { - var supportConcepts = Model.GroupBookingSelectedSupportConcepts; + var supportConcepts = GetSelectedGroupBookingSupportConcepts(); supportConcepts.DoForEach(supportConcept => { allGoals.AddRangeIfElementsNotIn(supportConcept.Goals); }); } @@ -2154,7 +2248,7 @@ namespace BeWoPlanerMobil.Controllers var stillSelectedGoals = Model.SelectedGoals.Where(s => goals.Any(a => a.ValueListEntryOid.HasValue && a.ValueListEntryOid.Value == s.ValueListEntryOid)).ToList(); Model.SelectedGoals = stillSelectedGoals; - Model.SelectedGoals.AddRangeIfElementsNotIn(goals); + Model.SelectedGoals.AddRangeIfElementsNotIn(DcToMokMapper.CreateZiele(goals)); Model.SelectedGoalOids = Model.SelectedGoals.Select(g => g.ValueListEntryOid.Value).ToList(); return Model.SelectedGoals?.Count.ToString() ?? "0"; @@ -2331,12 +2425,14 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult SelectRecordToEdit(FormCollection formCollection) { - if(Model is null) + if (!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; return Logout(); } + SkipModelInitialization = true; + var oidString = formCollection[FormCollectionConstants.ServiceRecordOidHolder2Key]; var wasSuccessful = long.TryParse(oidString, out var serviceRecordOid); @@ -2348,17 +2444,14 @@ namespace BeWoPlanerMobil.Controllers Model.SelectedServiceRecordOid = serviceRecordOid; - var selectedServiceRecord = Model.GetServiceRecord(serviceRecordOid); + var selectedServiceRecord = MapperFactory.ServiceRecordDC_ServiceRecord.MapToNewDC(DAOFactory.GenericDAO.LoadByID(serviceRecordOid)); if(selectedServiceRecord is null) { return RedirectToActionPermanent("Main"); } - Model.SelectedServiceRecord = selectedServiceRecord; - Model.SelectedServiceRecordOid = Model.SelectedServiceRecord?.ServiceRecordOid; - - Model.SelectedGoals = selectedServiceRecord.Goals; + Model.SelectedGoalOids = selectedServiceRecord.Goals.Select(g => g.ValueListEntryOid.Value).ToList(); var selectedServiceDescription = selectedServiceRecord.ServiceDescription; var selectedServiceCategory = selectedServiceDescription.Category; @@ -2390,17 +2483,13 @@ namespace BeWoPlanerMobil.Controllers var cb2ScOids = group.ServiceRecordList.Where(w => w.CostBearer2SupportConceptOid.HasValue).Select(s => s.CostBearer2SupportConceptOid.Value).ToList(); //Model.SelectedConceptCostBearerRelations.AddRangeIfElementsNotIn(OperationsService.GetSupportConceptCostBearerRelDCsByOids(cb2ScOids)); - Model.SelectedConceptCostBearerRelationOids = cb2ScOids; + Model.GroupBookingSelectedCostBearerSupportConceptOids = cb2ScOids; //var selectedSupportConcepts = new List(); //selectedSupportConcepts.AddRangeIfElementsNotIn(OperationsService.GetSupportConceptsById(group.ServiceRecordList.Select(s => s.SupportConcept.SupportConceptOid))); //Model.GroupBookingSelectedSupportConcepts = selectedSupportConcepts; - Model.GroupBookingSelectedSupportConceptOids = group.ServiceRecordList.Select(s => s.SupportConcept.SupportConceptOid).ToList(); - - Model.SelectedServiceDescriptionOid = selectedServiceDescription?.ServiceDescriptionOid; - Model.SelectedServiceCategoryOid = selectedServiceCategory?.ServiceCategoryOid; - + //Model.GroupBookingSelectedSupportConceptOids = group.ServiceRecordList.Select(s => s.SupportConcept.SupportConceptOid).ToList(); } @@ -2532,7 +2621,7 @@ namespace BeWoPlanerMobil.Controllers checkServiceRecord.Betrag = betrag; } - checkServiceRecord.Goals = Model.SelectedGoals; + checkServiceRecord.Goals = CreateValueListEntriesFromMokZiele(Model.SelectedGoals); checkServiceRecord.Start = startDt; checkServiceRecord.End = endDt; @@ -2546,18 +2635,18 @@ namespace BeWoPlanerMobil.Controllers // Mitarbeiter ausgewählt und Einzelbuchung if(Model.SelectedEmployee != null && !Model.IsInGroupBookingMode && !Model.IsInMultiBookingMode) { - var supportConcept = Model.SupportConcepts.FirstOrDefault(fod => fod.CostBearerRelations.Any(a => a.CostBearer2SupportConceptOid.HasValue && a.CostBearer2SupportConceptOid.Value.Equals(Model.SelectedCostBearerSupportConceptOid))); + var supportConcept = Model.SupportConcepts.FirstOrDefault(fod => fod.CostBearerRelOids.Any(a => a.Equals(Model.SelectedCostBearerSupportConceptOid))); if(supportConcept != null) { if(supportConcept.SupportConceptOid != null) { - checkServiceRecord.SupportConcept = CustomerService.LoadCompactSupportConceptDC(supportConcept.SupportConceptOid.Value, Model.LoggedInEmployee.EmployeeOid); + checkServiceRecord.SupportConcept = CustomerService.LoadCompactSupportConceptDC(supportConcept.SupportConceptOid, Model.LoggedInEmployee.EmployeeOid); } checkServiceRecord.Customer = supportConcept.Customer; - var cb2ScRel = supportConcept.CostBearerRelations.First(f => f.CostBearer2SupportConceptOid.HasValue && f.CostBearer2SupportConceptOid.Equals(Model.SelectedCostBearerSupportConceptOid)); - checkServiceRecord.CostBearer = cb2ScRel.CostBearer; + var costbearer = supportConcept.CostBearerList.FirstOrDefault(); + checkServiceRecord.CostBearer = costbearer.Organisation; var intervall = checkServiceRecord.CostBearer.ActualMinuteIntervall; if(intervall > 0) @@ -2627,7 +2716,7 @@ namespace BeWoPlanerMobil.Controllers Model.GroupBookingSelectedEmployees.DoForEach(e => employeeOids.AddIfNotIn(e.EmployeeOid)); } - var costBearer2SupportConceptOids = Model.SelectedConceptCostBearerRelations.Where(w => w.CostBearer2SupportConceptOid.HasValue).Select(s => s.CostBearer2SupportConceptOid.Value).ToList(); + var costBearer2SupportConceptOids = Model.GroupBookingSelectedCostBearerSupportConceptOids; var relations = CustomerService.GetSupportConceptCostBearerRelationsById(costBearer2SupportConceptOids); @@ -2673,7 +2762,7 @@ namespace BeWoPlanerMobil.Controllers { if(Model.SelectedSupportConcept != null) { - var node = CreateFlatSupportConceptItem(CustomerService.LoadCompactSupportConceptDC(Model.SelectedSupportConcept.SupportConceptOid.Value, Model.SelectedEmployee.EmployeeOid), null); + var node = CreateFlatSupportConceptItem(CustomerService.LoadCompactSupportConceptDC(Model.SelectedSupportConcept.SupportConceptOid, Model.SelectedEmployee.EmployeeOid), null); dateRangeString = node?.SupportConceptTreeNodeDC != null ? node.SupportConceptTreeNodeDC.SupportConceptCostBearerRelDC.DateRangeString : ""; } @@ -2682,9 +2771,9 @@ namespace BeWoPlanerMobil.Controllers } // Mehrfachbuchung else if(Model.IsInMultiBookingMode && !Model.IsInGroupBookingMode) { - employeeOids.AddRangeIfElementsNotIn(Model.MultiBookingSelectedEmployees.Select(e => e.EmployeeOid)); + employeeOids.AddRangeIfElementsNotIn(Model.GroupBookingSelectedEmployees.Select(e => e.EmployeeOid)); - var cb2ScOids = Model.SelectedConceptCostBearerRelations.Where(w => w.CostBearer2SupportConceptOid.HasValue).Select(s => s.CostBearer2SupportConceptOid.Value).ToList(); + var cb2ScOids = Model.GroupBookingSelectedCostBearerSupportConceptOids; var relations = CustomerService.GetSupportConceptCostBearerRelationsById(cb2ScOids); foreach(var costBearer2SupportConceptRel in relations) @@ -3128,7 +3217,9 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult SetGroupBookingMode(FormCollection pFormCollection) { - if(Model is null) + SkipModelInitialization = true; + + if(!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; return Logout(); @@ -3195,7 +3286,7 @@ namespace BeWoPlanerMobil.Controllers Model.SelectedEmployeeOid = null; - Model.MultiBookingSelectedEmployeeOids.AddIfNotIn(LoggedInUser.Employee.EmployeeOid); + Model.GroupBookingSelectedEmployeeOids.AddIfNotIn(LoggedInUser.Employee.EmployeeOid); Model.IsInEditingMode = false; Model.SelectedServiceRecordOid = null; @@ -3232,21 +3323,22 @@ namespace BeWoPlanerMobil.Controllers Model.Categories2Descriptions.Clear(); //Model.MultiBookingSelectedConceptCostBearerRelations.Clear(); - Model.SelectedConceptCostBearerRelationOids.Clear(); - Model.MultiBookingSelectedEmployeeOids.Clear(); - Model.MultiBookingSelectedGroupOfPeopleOids.Clear(); - Model.MultiBookingSelectedCostbearerRelOids.Clear(); - Model.MultiBookingSelectedSupportConceptOids.Clear(); - Model.MultiBookingSupportConceptListObjects.Clear(); + Model.GroupBookingSelectedCostBearerSupportConceptOids.Clear(); + Model.GroupBookingSelectedCostBearerSupportConcepts.Clear(); + Model.GroupBookingSelectedEmployeeOids.Clear(); + Model.GroupBookingSelectedEmployees.Clear(); + Model.GroupBookingSelectedGroupOfPeopleOids.Clear(); + } private void ResetGroupBookingMode() { Model.Categories2Descriptions.Clear(); - Model.GroupBookingSelectedCostbearerRelOids.Clear(); + Model.GroupBookingSelectedCostBearerSupportConceptOids.Clear(); + Model.GroupBookingSelectedCostBearerSupportConcepts.Clear(); Model.GroupBookingSelectedEmployeeOids.Clear(); - Model.GroupBookingSelectedSupportConceptOids.Clear(); - Model.SelectedConceptCostBearerRelationOids.Clear(); + Model.GroupBookingSelectedEmployees.Clear(); + Model.GroupBookingSelectedGroupOfPeopleOids.Clear(); } [HttpPost] @@ -3261,7 +3353,7 @@ namespace BeWoPlanerMobil.Controllers ResetBookingMode(BookingMode.SingleBookingMode); - LoadServiceCategoriesToModel(Model.SelectedCostBearerSupportConceptOid); + LoadSupportConceptThings(Model.SelectedCostBearerSupportConceptOid, false); return View("Main", Model); } @@ -3306,12 +3398,14 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult ResetEditingMode() { - if(Model is null) + if(!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; return Logout(); } + SkipModelInitialization = true; + ResetModel(); Model.TransferringAppointmentOid = null; @@ -3352,18 +3446,13 @@ namespace BeWoPlanerMobil.Controllers Model.SelectedServiceRecordOid = null; Model.IsInEditingMode = false; Model.SelectedEmployeeOid = LoggedInUser.Employee.EmployeeOid; - Model.SelectedConceptCostBearerRelationOids.Clear(); - Model.GroupBookingSelectedSupportConceptOids.Clear(); - Model.GroupBookingSelectedCostbearerRelOids.Clear(); + Model.GroupBookingSelectedCostBearerSupportConceptOids.Clear(); + Model.GroupBookingSelectedCostBearerSupportConcepts.Clear(); Model.GroupBookingSelectedGroupOfPeopleOids.Clear(); Model.GroupBookingSelectedEmployeeOids = new List { LoggedInUser.Employee.EmployeeOid }; Model.IsInMultiBookingMode = false; - Model.MultiBookingSelectedCostbearerRelOids.Clear(); - Model.MultiBookingSelectedEmployeeOids = new List { LoggedInUser.Employee.EmployeeOid }; - Model.MultiBookingSelectedGroupOfPeopleOids.Clear(); - Model.MultiBookingSelectedSupportConceptOids.Clear(); Model.SelectedGoalOids.Clear(); Model.SelectedServiceCategoryOid = null; @@ -3377,7 +3466,8 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult AddScCbRelsToGroupBooking(string[] relOids, string[] groupOids) { - if(Model is null) + SkipModelInitialization = true; + if(!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; return PartialView("GroupBookingScCbRelList"); @@ -3428,21 +3518,17 @@ namespace BeWoPlanerMobil.Controllers group.SupportConceptList.DoForEach(f => singleRels.AddRangeIfElementsNotIn(f.CostBearerRelOids)); }); - Model.GroupBookingSelectedSupportConcepts.Clear(); + Model.GroupBookingSelectedCostBearerSupportConcepts.Clear(); - Model.GroupBookingSelectedCostbearerRelOids.Clear(); - Model.GroupBookingSelectedCostbearerRelOids.AddRangeIfElementsNotIn(singleRels); + Model.GroupBookingSelectedCostBearerSupportConceptOids.Clear(); + Model.GroupBookingSelectedCostBearerSupportConceptOids.AddRangeIfElementsNotIn(singleRels); - var selectedSupportConcepts = CustomerService.GetSupportConceptsByCostbearer2SupportConceptRelOids(singleRels); + //var selectedSupportConcepts = CustomerService.GetSupportConceptsByCostbearer2SupportConceptRelOids(singleRels); - var groupCostBearerRelations = CustomerService.GetSupportConceptCostBearerRelationsById(singleRels); - - Model.SelectedConceptCostBearerRelations.Clear(); - Model.SelectedConceptCostBearerRelations.AddRangeIfElementsNotIn(groupCostBearerRelations); - - Model.GroupBookingSelectedSupportConcepts.AddRangeIfElementsNotIn(selectedSupportConcepts); + //var groupCostBearerRelations = CustomerService.GetSupportConceptCostBearerRelationsById(singleRels); + foreach(var gruppe in groups.Where(g => g.GroupOfPeopleOid.HasValue)) { var groupRelOids = new List(); @@ -3465,8 +3551,10 @@ namespace BeWoPlanerMobil.Controllers } } - Model.SelectedConceptCostBearerRelationOids = Model.SelectedConceptCostBearerRelations.Select(s => s.CostBearer2SupportConceptOid.Value).ToList(); - Model.GroupBookingSelectedSupportConceptOids = Model.GroupBookingSelectedSupportConcepts.Select(s => s.SupportConceptOid.Value).ToList(); + //Model.SelectedConceptCostBearerRelationOids = Model.SelectedConceptCostBearerRelations.Select(s => s.CostBearer2SupportConceptOid.Value).ToList(); + //Model.GroupBookingSelectedSupportConceptOids = Model.GroupBookingSelectedSupportConcepts.Select(s => s.SupportConceptOid.Value).ToList(); + + CreateModelSupportConceptListObjects(false); return PartialView("GroupBookingScCbRelList", Model); } @@ -3480,60 +3568,12 @@ namespace BeWoPlanerMobil.Controllers return PartialView("GroupBookingSelectionPartial"); } - if(!long.TryParse(relOid, out var supportConceptCostBearerRelationOid)) + if(!long.TryParse(relOid, out var c2sOid)) { return PartialView("GroupBookingSelectionPartial", Model); } - var supportConcept2Remove = Model.GroupBookingSelectedSupportConcepts.FirstOrDefault(f => f.CostBearerRelations.Any(a => a.CostBearer2SupportConceptOid == supportConceptCostBearerRelationOid)); - - var relation2Remove = Model.SelectedConceptCostBearerRelations.FirstOrDefault(f => f.CostBearer2SupportConceptOid == supportConceptCostBearerRelationOid); - - if(supportConcept2Remove?.SupportConceptOid.HasValue ?? false) - { - var supportConcepts = Model.GroupBookingSelectedSupportConcepts.Where(supportConcept => supportConcept.SupportConceptOid.HasValue && supportConcept.SupportConceptOid.Value.Equals(supportConcept2Remove.SupportConceptOid.Value) == false).ToList(); - - // Ziele, die bei den verbleibenden Hilfeplänen nicht vorhanden sind, werden aus der Auswahl entfernt. - var remainingGoals = new List(); - - foreach(var supportConcept in supportConcepts) - { - foreach(var goal in supportConcept.Goals) - { - remainingGoals.AddIfNotIn(goal); - } - } - - Model.SelectedGoals = Model.SelectedGoals.Where(goal => remainingGoals.Contains(goal)).ToList(); - } - - Model.GroupBookingSelectedSupportConcepts.Remove(supportConcept2Remove); - Model.SelectedConceptCostBearerRelations.Remove(relation2Remove); - - var selectedGroups = Model.GroupsOfPeople.Where(group => group.GroupOfPeopleOid.HasValue && Model.GroupBookingSelectedGroupOfPeopleOids.Contains(group.GroupOfPeopleOid.Value)).ToList(); - - var groups = selectedGroups.Where(group => group.SupportConceptList.All(a => Model.GroupBookingSelectedSupportConcepts.Where(w => w.SupportConceptOid.HasValue).Select(s => s.SupportConceptOid.Value).Contains(a.SupportConceptOid))); - - Model.GroupBookingSelectedGroupOfPeopleOids = groups.Where(group => group.GroupOfPeopleOid.HasValue).Select(group => group.GroupOfPeopleOid.Value).ToList(); - - LoadServiceCategoriesToModel(null); - - if(Model.SelectedServiceCategory != null && !Model.Categories2Descriptions.Keys.Contains(Model.SelectedServiceCategory)) - { - var firstCategory2ServiceDescriptions = Model.Categories2Descriptions.FirstOrDefault(); - var firstServiceCategory = firstCategory2ServiceDescriptions.Key; - var firstServiceDescription = firstCategory2ServiceDescriptions.Value?.FirstOrDefault(); - - Model.SelectedServiceCategory = firstServiceCategory; - Model.SelectedServiceDescription = firstServiceDescription; - } - - - Model.SelectedGoalOids = Model.SelectedGoals.Select(g => g.ValueListEntryOid.Value).ToList(); - Model.GroupBookingSelectedSupportConceptOids = Model.GroupBookingSelectedSupportConcepts.Select(g => g.SupportConceptOid.Value).ToList(); - Model.SelectedConceptCostBearerRelationOids = Model.SelectedConceptCostBearerRelations.Select(g => g.CostBearer2SupportConceptOid.Value).ToList(); - Model.SelectedServiceCategoryOid = Model.SelectedServiceCategory?.ServiceCategoryOid; - Model.SelectedServiceDescriptionOid = Model.SelectedServiceDescription?.ServiceDescriptionOid; + RemoveRelOidFromGroupBooking(c2sOid); return PartialView("GroupBookingSelectionPartial", Model); } @@ -3645,9 +3685,9 @@ namespace BeWoPlanerMobil.Controllers { if(!Model.IsInEditingMode) { - if(Model.GroupBookingSelectedCostbearerRelOids.Count == 1) + if(Model.GroupBookingSelectedCostBearerSupportConceptOids.Count == 1) { - Model.SelectedCostBearerSupportConceptOid = Model.GroupBookingSelectedCostbearerRelOids.FirstOrDefault(); + Model.SelectedCostBearerSupportConceptOid = Model.GroupBookingSelectedCostBearerSupportConceptOids.FirstOrDefault(); } } else @@ -3776,7 +3816,7 @@ namespace BeWoPlanerMobil.Controllers } Model.NewServiceRecord.IP = Request.UserHostAddress; - Model.NewServiceRecord.Goals = Model.SelectedGoals; + Model.NewServiceRecord.Goals = CreateValueListEntriesFromMokZiele(Model.SelectedGoals); Model.NewServiceRecord.Start = zeitenFeld[0]; Model.NewServiceRecord.End = zeitenFeld[1]; Model.NewServiceRecord.Betrag = betrag; @@ -3796,19 +3836,16 @@ namespace BeWoPlanerMobil.Controllers Model.NewServiceRecord.Employee = Model.SelectedEmployee; } - var supportConcept = Model.SupportConcepts.FirstOrDefault(fod => fod.CostBearerRelations.Any(a => a.CostBearer2SupportConceptOid.HasValue && a.CostBearer2SupportConceptOid.Value.Equals(selectedCostbearer2SupportConceptRelOid))); + var supportConcept = Model.SupportConcepts.FirstOrDefault(fod => fod.CostBearerRelOids.Any(a => a.Equals(selectedCostbearer2SupportConceptRelOid))); if(supportConcept != null) { - if(supportConcept.SupportConceptOid.HasValue) - { - Model.NewServiceRecord.SupportConcept = CustomerService.LoadCompactSupportConceptDC(supportConcept.SupportConceptOid.Value, Model.LoggedInEmployee.EmployeeOid); - } - + Model.NewServiceRecord.SupportConcept = CustomerService.LoadCompactSupportConceptDC(supportConcept.SupportConceptOid, Model.LoggedInEmployee.EmployeeOid); + Model.NewServiceRecord.Customer = supportConcept.Customer; - var cb2ScRel = supportConcept.CostBearerRelations.First(f => f.CostBearer2SupportConceptOid.HasValue && f.CostBearer2SupportConceptOid.Equals(selectedCostbearer2SupportConceptRelOid)); - Model.NewServiceRecord.CostBearer = cb2ScRel.CostBearer; + var cb2ScRel = supportConcept.CostBearerList.FirstOrDefault(); + Model.NewServiceRecord.CostBearer = cb2ScRel.Organisation; var intervall = Model.NewServiceRecord.CostBearer.ActualMinuteIntervall; @@ -3975,7 +4012,7 @@ namespace BeWoPlanerMobil.Controllers Model.SelectedEmployee = Model.AllEmployees.FirstOrDefault(e => e.EmployeeOid.Equals(Model.LoggedInEmployee.EmployeeOid.Value)); - LoadSupportConceptThings(-2); + LoadSupportConceptThings(-2, false); if(Model.SelectedServiceDescription != null) { @@ -4001,16 +4038,18 @@ namespace BeWoPlanerMobil.Controllers Model.SelectedEmployee = Model.AllEmployees.FirstOrDefault(e => e.EmployeeOid.Equals(employeeOids.FirstOrDefault())); var compactSupportConcept = supportConceptList.First(); - var supportConcept = Model.SupportConcepts.FirstOrDefault(f => f.SupportConceptOid.HasValue && f.SupportConceptOid.Value.Equals(compactSupportConcept.SupportConceptOid)); + var supportConcept = Model.SupportConcepts.FirstOrDefault(f => f.SupportConceptOid.Equals(compactSupportConcept.SupportConceptOid)); var serviceRecord = CreateServiceRecordFromScratch(start.Value, end.Value, supportConcept?.Customer, Model.SelectedEmployee, notice); - var costBearer2SupportConcept = supportConcept?.CostBearerRelations.FirstOrDefault(cbRel => cbRel.CostBearer2SupportConceptOid.HasValue && availableRelOids.Contains(cbRel.CostBearer2SupportConceptOid.Value)); + var costBearer = supportConcept?.CostBearerList.FirstOrDefault(); - LoadSupportConceptThings(costBearer2SupportConcept?.CostBearer2SupportConceptOid ?? -2); + var cb2ScOid = supportConcept?.CostBearerRelOids.FirstOrDefault(cbOid => availableRelOids.Contains(cbOid)); - serviceRecord.CostBearer = costBearer2SupportConcept?.CostBearer; - serviceRecord.CostBearer2SupportConceptOid = costBearer2SupportConcept?.CostBearer2SupportConceptOid; + LoadSupportConceptThings(cb2ScOid ?? -2, false); + + serviceRecord.CostBearer = costBearer?.Organisation; + serviceRecord.CostBearer2SupportConceptOid = cb2ScOid; serviceRecord.ServiceDescription = Model.SelectedServiceDescription; if(Model.SelectedServiceDescription != null) @@ -4035,34 +4074,30 @@ namespace BeWoPlanerMobil.Controllers ServiceDescription = Model.GetSelectedOrFirstServiceDescription() }; - var supportConceptsForGroupBooking = Model.SupportConcepts.Where(sc => sc.SupportConceptOid.HasValue && supportConceptList.Any(csc => csc.SupportConceptOid.Equals(sc.SupportConceptOid.Value))).ToList(); + var supportConceptsForGroupBooking = Model.SupportConcepts.Where(sc => supportConceptList.Any(csc => csc.SupportConceptOid.Equals(sc.SupportConceptOid))).ToList(); var costBearer2SupportConceptOids = new List(); - var costBearer2SupportConcepts = new List(); - + foreach(var supportConcept in supportConceptsForGroupBooking) { - var costBearer2SupportConcept = supportConcept?.CostBearerRelations.FirstOrDefault(cbRel => cbRel.CostBearer2SupportConceptOid.HasValue && availableRelOids.Contains(cbRel.CostBearer2SupportConceptOid.Value)); + var cb2ScOid = supportConcept?.CostBearerRelOids.FirstOrDefault(cbOid => availableRelOids.Contains(cbOid)); - if(costBearer2SupportConcept?.CostBearer2SupportConceptOid is null) + if(cb2ScOid is null) { continue; } - costBearer2SupportConceptOids.AddIfNotIn(costBearer2SupportConcept.CostBearer2SupportConceptOid.Value); - costBearer2SupportConcepts.AddIfNotIn(costBearer2SupportConcept); + costBearer2SupportConceptOids.AddIfNotIn(cb2ScOid.Value); } if(costBearer2SupportConceptOids.Any()) { - Model.GroupBookingSelectedCostbearerRelOids = costBearer2SupportConceptOids; - Model.SelectedConceptCostBearerRelations = costBearer2SupportConcepts; - Model.GroupBookingSelectedSupportConcepts = supportConceptsForGroupBooking; + Model.GroupBookingSelectedCostBearerSupportConceptOids = costBearer2SupportConceptOids; + //Model.SelectedConceptCostBearerRelations = costBearer2SupportConcepts; + //Model.GroupBookingSelectedSupportConcepts = supportConceptsForGroupBooking; } - LoadServiceCategoriesToModel(null); - - LoadGoals(); + LoadSupportConceptThings(null, false); } } @@ -4200,7 +4235,7 @@ namespace BeWoPlanerMobil.Controllers } }); - Model.MultiBookingSelectedGroupOfPeopleOids.Clear(); + Model.GroupBookingSelectedGroupOfPeopleOids.Clear(); groupRels.DoForEach(groupOid => { @@ -4215,19 +4250,17 @@ namespace BeWoPlanerMobil.Controllers group.SupportConceptList.DoForEach(f => singleRels.AddRangeIfElementsNotIn(f.CostBearerRelOids)); }); - Model.MultiBookingSelectedSupportConcepts.Clear(); + //Model.MultiBookingSelectedSupportConcepts.Clear(); - Model.MultiBookingSelectedCostbearerRelOids.Clear(); - Model.MultiBookingSelectedCostbearerRelOids.AddRangeIfElementsNotIn(singleRels); + Model.GroupBookingSelectedCostBearerSupportConceptOids.Clear(); + Model.GroupBookingSelectedCostBearerSupportConceptOids.AddRangeIfElementsNotIn(singleRels); - var selectedSupportConcepts = CustomerService.GetSupportConceptsByCostbearer2SupportConceptRelOids(singleRels); + //var selectedSupportConcepts = CustomerService.GetSupportConceptsByCostbearer2SupportConceptRelOids(singleRels); - var groupCostBearerRelations = CustomerService.GetSupportConceptCostBearerRelationsById(singleRels); + //var groupCostBearerRelations = CustomerService.GetSupportConceptCostBearerRelationsById(singleRels); - Model.SelectedConceptCostBearerRelations.Clear(); - Model.SelectedConceptCostBearerRelations.AddRangeIfElementsNotIn(groupCostBearerRelations); - - Model.MultiBookingSelectedSupportConcepts.AddRangeIfElementsNotIn(selectedSupportConcepts); + + //Model.MultiBookingSelectedSupportConcepts.AddRangeIfElementsNotIn(selectedSupportConcepts); foreach(var gruppe in groups.Where(g => g.GroupOfPeopleOid.HasValue)) { @@ -4243,16 +4276,16 @@ namespace BeWoPlanerMobil.Controllers if(singleRels.ContainsItems(groupRelOids)) { - Model.MultiBookingSelectedGroupOfPeopleOids.AddIfNotIn(groupOid); + Model.GroupBookingSelectedGroupOfPeopleOids.AddIfNotIn(groupOid); } - else if(Model.MultiBookingSelectedGroupOfPeopleOids.Contains(groupOid)) + else if(Model.GroupBookingSelectedGroupOfPeopleOids.Contains(groupOid)) { - Model.MultiBookingSelectedGroupOfPeopleOids.Remove(groupOid); + Model.GroupBookingSelectedGroupOfPeopleOids.Remove(groupOid); } } - Model.SelectedConceptCostBearerRelationOids = Model.SelectedConceptCostBearerRelations.Select(s => s.CostBearer2SupportConceptOid.Value).ToList(); - Model.MultiBookingSelectedSupportConceptOids = Model.MultiBookingSelectedSupportConcepts.Select(s => s.SupportConceptOid.Value).ToList(); + //Model.SelectedConceptCostBearerRelationOids = Model.SelectedConceptCostBearerRelations.Select(s => s.CostBearer2SupportConceptOid.Value).ToList(); + //Model.MultiBookingSelectedSupportConceptOids = Model.MultiBookingSelectedSupportConcepts.Select(s => s.SupportConceptOid.Value).ToList(); return PartialView("MultiBookingScCbRelList", Model); } @@ -4267,68 +4300,84 @@ namespace BeWoPlanerMobil.Controllers return PartialView("MultiBookingSelectionPartial"); } - if(!long.TryParse(relOid, out var supportConceptCostBearerRelationOid)) + if(!long.TryParse(relOid, out var c2sOid)) { return PartialView("MultiBookingSelectionPartial", Model); } - var supportConcept2Remove = Model.MultiBookingSelectedSupportConcepts.FirstOrDefault(f => f.CostBearerRelations.Any(a => a.CostBearer2SupportConceptOid == supportConceptCostBearerRelationOid)); - var relation2Remove = Model.SelectedConceptCostBearerRelations.FirstOrDefault(f => f.CostBearer2SupportConceptOid == supportConceptCostBearerRelationOid); + RemoveRelOidFromGroupBooking(c2sOid); - if(supportConcept2Remove?.SupportConceptOid.HasValue ?? false) + return PartialView("MultiBookingSelectionPartial", Model); + } + + private void RemoveRelOidFromGroupBooking(long c2sOid) + { + + var list = GetSelectedGroupBookingSupportConcepts(); + + + + var supportConcept2Remove = list.FirstOrDefault(f => f.CostBearerRelOids.Any(a => a == c2sOid)); + + if (supportConcept2Remove != null) { - var supportConcepts = Model.MultiBookingSelectedSupportConcepts.Where(supportConcept => supportConcept.SupportConceptOid.HasValue && supportConcept.SupportConceptOid.Value.Equals(supportConcept2Remove.SupportConceptOid.Value) == false).ToList(); + var supportConcepts = list.Where(supportConcept => supportConcept.SupportConceptOid.Equals(supportConcept2Remove.SupportConceptOid) == false).ToList(); // Ziele, die bei den verbleibenden Hilfeplänen nicht vorhanden sind, werden aus der Auswahl entfernt. - var remainingGoals = new List(); + var remainingGoals = new List(); - foreach(var supportConcept in supportConcepts) + foreach (var supportConcept in supportConcepts) { - foreach(var goal in supportConcept.Goals) + foreach (var goal in supportConcept.Goals) { - remainingGoals.AddIfNotIn(goal); + remainingGoals.AddIfNotIn(goal.ValueListEntryOid.Value); } } - Model.SelectedGoals = Model.SelectedGoals.Where(goal => remainingGoals.Contains(goal)).ToList(); + Model.SelectedGoals = Model.SelectedGoals.Where(goal => remainingGoals.Contains(goal.ValueListEntryOid.Value)).ToList(); } - Model.MultiBookingSelectedSupportConcepts.Remove(supportConcept2Remove); - Model.SelectedConceptCostBearerRelations.Remove(relation2Remove); + Model.GroupBookingSelectedCostBearerSupportConceptOids.Remove(c2sOid); - var selectedGroups = Model.GroupsOfPeople.Where(group => group.GroupOfPeopleOid.HasValue && Model.MultiBookingSelectedGroupOfPeopleOids.Contains(group.GroupOfPeopleOid.Value)).ToList(); + //Model.GroupBookingSelectedSupportConcepts.Remove(supportConcept2Remove); + //Model.SelectedConceptCostBearerRelations.Remove(relation2Remove); - var groups = selectedGroups.Where(group => group.SupportConceptList.All(a => Model.MultiBookingSelectedSupportConcepts.Where(w => w.SupportConceptOid.HasValue).Select(s => s.SupportConceptOid.Value).Contains(a.SupportConceptOid))); + var selectedGroups = Model.GroupsOfPeople.Where(group => group.GroupOfPeopleOid.HasValue && Model.GroupBookingSelectedGroupOfPeopleOids.Contains(group.GroupOfPeopleOid.Value)).ToList(); - Model.MultiBookingSelectedGroupOfPeopleOids = groups.Where(group => group.GroupOfPeopleOid.HasValue).Select(group => group.GroupOfPeopleOid.Value).ToList(); + var groups = selectedGroups.Where(group => group.SupportConceptList.All(a => Model.GroupBookingSelectedCostBearerSupportConceptOids.Contains(a.CostBearerRelOids[0]))); + + Model.GroupBookingSelectedGroupOfPeopleOids = groups.Where(group => group.GroupOfPeopleOid.HasValue).Select(group => group.GroupOfPeopleOid.Value).ToList(); LoadServiceCategoriesToModel(null); - if(Model.SelectedServiceCategory != null && !Model.Categories2Descriptions.Keys.Contains(Model.SelectedServiceCategory)) + if (Model.SelectedServiceCategory != null && !Model.Categories2Descriptions.Keys.Contains(Model.SelectedServiceCategory)) { var firstCategory2ServiceDescriptions = Model.Categories2Descriptions.FirstOrDefault(); var firstServiceCategory = firstCategory2ServiceDescriptions.Key; - var firstServiceDescription = firstCategory2ServiceDescriptions.Value.FirstOrDefault(); + var firstServiceDescription = firstCategory2ServiceDescriptions.Value?.FirstOrDefault(); Model.SelectedServiceCategory = firstServiceCategory; Model.SelectedServiceDescription = firstServiceDescription; } + Model.SelectedGoalOids = Model.SelectedGoals.Select(g => g.ValueListEntryOid.Value).ToList(); - Model.MultiBookingSelectedSupportConceptOids = Model.MultiBookingSelectedSupportConcepts.Select(g => g.SupportConceptOid.Value).ToList(); - Model.SelectedConceptCostBearerRelationOids = Model.SelectedConceptCostBearerRelations.Select(g => g.CostBearer2SupportConceptOid.Value).ToList(); + //Model.GroupBookingSelectedSupportConceptOids = Model.GroupBookingSelectedSupportConcepts.Select(g => g.SupportConceptOid.Value).ToList(); + //Model.SelectedConceptCostBearerRelationOids = Model.SelectedConceptCostBearerRelations.Select(g => g.CostBearer2SupportConceptOid.Value).ToList(); Model.SelectedServiceCategoryOid = Model.SelectedServiceCategory?.ServiceCategoryOid; Model.SelectedServiceDescriptionOid = Model.SelectedServiceDescription?.ServiceDescriptionOid; - return PartialView("MultiBookingSelectionPartial", Model); + } [Authorize] [HttpPost] public ActionResult SetMultiBookingMode(FormCollection formCollection) { - if(Model is null) + SkipModelInitialization = true; + + if(!IsUserLoggedIn()) { return Logout(); } @@ -4466,9 +4515,9 @@ namespace BeWoPlanerMobil.Controllers var serviceRecordsToInsert = new List(); - if(Model.SelectedConceptCostBearerRelations.Any() && Model.MultiBookingSelectedEmployees.Any()) + if(Model.GroupBookingSelectedCostBearerSupportConceptOids.Any() && Model.GroupBookingSelectedEmployees.Any()) { - foreach(var sc2cbRel in Model.SelectedConceptCostBearerRelations) + foreach(var sc2cbRel in Model.GroupBookingSelectedCostBearerSupportConcepts) { var roundedDuration = dauer; @@ -4481,7 +4530,7 @@ namespace BeWoPlanerMobil.Controllers // ToDo: Validierungsergebnisse treten mehrfach auf - foreach(var employee in Model.MultiBookingSelectedEmployees) + foreach(var employee in Model.GroupBookingSelectedEmployees) { var newServiceRecord = new ServiceRecordDC { @@ -4545,8 +4594,8 @@ namespace BeWoPlanerMobil.Controllers if(string.IsNullOrEmpty(pEmployeeOids)) { - Model.MultiBookingSelectedEmployees.Clear(); - return JsonConvert.SerializeObject(Model.MultiBookingSelectedEmployees.Count); + Model.GroupBookingSelectedEmployees.Clear(); + return JsonConvert.SerializeObject(Model.GroupBookingSelectedEmployees.Count); } var rawEmployeeOids = pEmployeeOids.Split(','); @@ -4556,10 +4605,10 @@ namespace BeWoPlanerMobil.Controllers var employees = Model.EmployeesForGroupAndMultiBooking.Where(w => oids.Contains(w.EmployeeOid)); - Model.MultiBookingSelectedEmployees.Clear(); - Model.MultiBookingSelectedEmployees.AddRangeIfElementsNotIn(employees); + Model.GroupBookingSelectedEmployees.Clear(); + Model.GroupBookingSelectedEmployees.AddRangeIfElementsNotIn(employees); - return JsonConvert.SerializeObject(Model.MultiBookingSelectedEmployees.Count); + return JsonConvert.SerializeObject(Model.GroupBookingSelectedEmployees.Count); } // Veraltet @@ -4568,7 +4617,7 @@ namespace BeWoPlanerMobil.Controllers { try { - return JsonConvert.SerializeObject(Model.SelectedConceptCostBearerRelations.Any()); + return JsonConvert.SerializeObject(Model.GroupBookingSelectedCostBearerSupportConceptOids.Any()); } catch(Exception exception) { @@ -4583,7 +4632,7 @@ namespace BeWoPlanerMobil.Controllers { try { - return JsonConvert.SerializeObject(Model.MultiBookingSelectedEmployees.Any()); + return JsonConvert.SerializeObject(Model.GroupBookingSelectedEmployees.Any()); } catch(Exception exception) { @@ -4812,7 +4861,7 @@ namespace BeWoPlanerMobil.Controllers var serviceRecord = Model.GetServiceRecord(serviceRecordOid); - var hilfeplan = Model.SelectedCostBearer2SupportConceptRelListObject.NameAndDateOfBirth + " | " + Model.SelectedCostBearer2SupportConceptRelListObject.SupportConceptTimeSpan; + var hilfeplan = Model.SelectedSupportConceptListObject.NameAndDateOfBirth + " | " + Model.SelectedSupportConceptListObject.SupportConceptTimeSpan; var leistung = serviceRecord.ServiceDescription.Name; var kategorie = serviceRecord.ServiceDescription.Category; var employee = $"{serviceRecord.Employee.FirstName} {serviceRecord.Employee.LastName}"; @@ -4852,12 +4901,13 @@ namespace BeWoPlanerMobil.Controllers [Authorize] public ActionResult ReloadGoals() { - if(Model is null) + SkipModelInitialization = true; + if (!IsUserLoggedIn()) { TempData[TempDataConstants.DoLogoutKey] = true; } - LoadGoals(); + //LoadGoals(); return PartialView("GoalTreePartial", Model); } diff --git a/BeWoPlanerMobil/Models/MainModel.cs b/BeWoPlanerMobil/Models/MainModel.cs index 8d4411f49..c1cc500af 100644 --- a/BeWoPlanerMobil/Models/MainModel.cs +++ b/BeWoPlanerMobil/Models/MainModel.cs @@ -69,7 +69,11 @@ namespace BeWoPlanerMobil.Models MainSessionModel.TransferringAppointmentOid = value; } } - public bool IsInTransferMode { get; set; } + public bool IsInTransferMode + { + get => MainSessionModel.IsInTransferMode; + set => MainSessionModel.IsInTransferMode = value; + } public List SupportConceptFilter { @@ -247,9 +251,12 @@ namespace BeWoPlanerMobil.Models set => MainSessionModel.SelectedSupportConceptOid = value; } - public SupportConceptDC SelectedSupportConcept { get; set; } - - public int Zeitraum { get; set; } + public CompactSupportConceptDC SelectedSupportConcept { get; set; } + + public MokSupportConceptListObject SelectedSupportConceptListObject { get; set; } + + + public int Zeitraum { get; set; } public int ErrorWert { get; set; } @@ -261,7 +268,7 @@ namespace BeWoPlanerMobil.Models set => MainSessionModel.LastCreatedServiceRecordOid = value; } - public List SupportConcepts { get; set; } + public List SupportConcepts { get; set; } public List Textbausteine { get; set; } = new List(); @@ -290,13 +297,11 @@ namespace BeWoPlanerMobil.Models set => MainSessionModel.SelectedGoalOids = value; } - private List _SelectedGoals; - - public List SelectedGoals + + public IList SelectedGoals { - get => _SelectedGoals ?? new List(); - - set => _SelectedGoals = value; + get => MainSessionModel.SelectedGoals; + set => MainSessionModel.SelectedGoals = value; } private string GetRatingName(ValueListEntryDC ratedValueListEntry) @@ -310,60 +315,17 @@ namespace BeWoPlanerMobil.Models public long? ServiceRecordOidToDelete { get; set; } - - public IEnumerable SupportConceptListObjects + public IList SupportConceptListObjects { - get - { - var allCostBearerRelations = new List {new CostBearer2SupportConceptRelListObject("Hilfeplan auswählen", "", -1, false, false), new CostBearer2SupportConceptRelListObject("Ohne Hilfeplan", "", -2, false, false) }; - BS.Shared.Settings.ApplicationSettings.SupportConceptExpirationLimitInMonths = MokSettings.SupportConceptExpirationLimitInMonths; - foreach (var sc in SupportConcepts.OrderBy(sc => sc.Customer.LastName)) - { - allCostBearerRelations.AddRange(sc.CostBearerRelations.Where(w => ShowExpiredSupportConcepts || w.EndDate is null || w.EndDate.Value >= DateTime.Now.Date).Select( - cb => new CostBearer2SupportConceptRelListObject( - $"{sc.Customer.SimpleDescription} {(sc.Customer.DateOfBirth.HasValue ? "*" + sc.Customer.DateOfBirth.Value.ToString("dd.MM.yyyy") : string.Empty)}", - $"{cb.AuswahlBezeichnung} {cb.StartDate?.ToShortDateString().Remove(6, 2) ?? string.Empty}-{cb.EndDate?.ToShortDateString().Remove(6, 2) ?? string.Empty} {cb.CostBearer.Name}{GetIsNotApproved(cb)}", - cb.CostBearer2SupportConceptOid.Value, - cb.SupportConcept.IsAboutToExpire, - cb.SupportConcept.ExpiresIn3MonthOrLess)) - ); - } - return allCostBearerRelations; - } + get => MainSessionModel.SupportConceptListObjects; + set => MainSessionModel.SupportConceptListObjects = value; } - public CostBearer2SupportConceptRelListObject SelectedCostBearer2SupportConceptRelListObject { get; set; } + public IList SupportConceptListObjectsForGroupBooking { get; set; } - public List SelectedConceptCostBearerRelationOids { get { return MainSessionModel.SelectedConceptCostBearerRelations; } set { MainSessionModel.SelectedConceptCostBearerRelations = value; } } - public List SelectedConceptCostBearerRelations { get; set; } = new List(); - - public GroupBookingSelectionObject GroupBookingSelectionObject => new GroupBookingSelectionObject(SelectedConceptCostBearerRelations, GroupBookingSelectedGroupOfPeopleOids); - - public IEnumerable SupportConceptListObjectsForGroupBooking - { - get - { - var allCostbearerRelations = new List(); - - foreach(var sc in SupportConcepts.OrderBy(sc => sc.Customer.LastName)) - { - allCostbearerRelations.AddRange(sc.CostBearerRelations.Where(w => ShowExpiredSupportConcepts || w.EndDate is null || w.EndDate.Value >= DateTime.Now).Select( - cb => new CostBearer2SupportConceptRelListObject( - $"{sc.Customer.SimpleDescription} {(sc.Customer.DateOfBirth.HasValue ? "*" + sc.Customer.DateOfBirth.Value.ToString("dd.MM.yyyy") : string.Empty)}", - $"{cb.AuswahlBezeichnung} {cb.StartDate?.ToShortDateString().Remove(6, 2) ?? string.Empty}-{cb.EndDate?.ToShortDateString().Remove(6, 2) ?? string.Empty} {cb.CostBearer.Name}", - cb.CostBearer2SupportConceptOid.Value, - cb.SupportConcept.IsAboutToExpire, - cb.SupportConcept.ExpiresIn3MonthOrLess)) - ); - } - - return allCostbearerRelations; - } - } - - public IEnumerable GroupOfPeopleListItems + public IEnumerable GroupOfPeopleListItems { get { @@ -386,9 +348,9 @@ namespace BeWoPlanerMobil.Models public List GroupsOfPeople { get; set; } = new List(); - public List GroupBookingSelectedGroupOfPeopleOids { get; set; } = new List(); + public List GroupBookingSelectedGroupOfPeopleOids { get { return MainSessionModel.GroupBookingSelectedGroupOfPeopleOids; } set { MainSessionModel.GroupBookingSelectedGroupOfPeopleOids = value; } } - public IEnumerable EmployeeListItems + public IEnumerable EmployeeListItems { get { @@ -403,27 +365,15 @@ namespace BeWoPlanerMobil.Models public int NumberOfDokuTypes => Dokutypes?.Length ?? 0; - public static DateTime? GetEndDateOfSupportConcept(SupportConceptDC pSupportConcept) - { - DateTime? maxDate = null; - foreach(var relation in pSupportConcept.CostBearerRelations) - { - var end = relation.ApprovedEndDate ?? relation.RequestedEndDate; - - if(maxDate is null || end != null && end.Value > maxDate.Value) - { - maxDate = end; - } - } + //public List GroupBookingSelectedSupportConceptOids { get { return MainSessionModel.GroupBookingSelectedSupportConceptOids; } set { MainSessionModel.GroupBookingSelectedSupportConceptOids = value; } } + //public List GroupBookingSelectedSupportConcepts { get; set; } = new List(); - return maxDate; - } + public List GroupBookingSelectedCostBearerSupportConceptOids { get { return MainSessionModel.GroupBookingSelectedCostBearerSupportConceptOids; } set { MainSessionModel.GroupBookingSelectedCostBearerSupportConceptOids = value; } } - public List GroupBookingSelectedSupportConceptOids { get { return MainSessionModel.GroupBookingSelectedSupportConceptOids; } set { MainSessionModel.GroupBookingSelectedSupportConceptOids = value; } } - public List GroupBookingSelectedSupportConcepts { get; set; } = new List(); + public List GroupBookingSelectedCostBearerSupportConcepts { get; set; } = new List(); - public List GroupBookingSelectedCostbearerRelOids { get { return MainSessionModel.GroupBookingSelectedCostbearerRelOids; } set { MainSessionModel.GroupBookingSelectedCostbearerRelOids = value; } } + public GroupBookingSelectionObject GroupBookingSelectionObject => new GroupBookingSelectionObject(GroupBookingSelectedCostBearerSupportConcepts, GroupBookingSelectedGroupOfPeopleOids); public List GroupBookingSelectedEmployeeOids { get { return MainSessionModel.GroupBookingSelectedEmployeeOids; } set { MainSessionModel.GroupBookingSelectedEmployeeOids = value; } } public List GroupBookingSelectedEmployees { get; set; } = new List(); @@ -439,10 +389,12 @@ namespace BeWoPlanerMobil.Models if(!MainSessionModel.IsInGroupBookingMode) { - GroupBookingSelectedSupportConcepts?.Clear(); + GroupBookingSelectedCostBearerSupportConceptOids?.Clear(); + GroupBookingSelectedCostBearerSupportConcepts.Clear(); + GroupBookingSelectedEmployeeOids.Clear(); GroupBookingSelectedEmployees?.Clear(); - GroupBookingSelectedSupportConceptOids?.Clear(); - GroupBookingSelectedEmployeeOids?.Clear(); + GroupBookingSelectedGroupOfPeopleOids.Clear(); + //GroupBookingSelectedSupportConcept?.Clear(); } } } @@ -519,14 +471,26 @@ namespace BeWoPlanerMobil.Models var start = serviceRecord.Start.Value; var end = serviceRecord.End.Value; var gruppenInfo = string.Empty; + var dauerInfo = string.Empty; var signatureToken = serviceRecord.SignatureOid.HasValue && isForServiceRecordsList ? "✔" : string.Empty; + var dauer = (end - start).TotalMinutes; + if (serviceRecord.DurationInStunden.HasValue && serviceRecord.DurationInStunden == ZeiterfassungsDauer.Stunden) + { + dauer /= 60; + dauerInfo = $" ({dauer:0.0#} h)"; + } + else + { + dauerInfo = $" ({dauer:0.##} min.)"; + } if (serviceRecord.GroupOid.HasValue) { - gruppenInfo = $"Gruppe ({serviceRecord.GroupPersonCount} Teilnehmer, {serviceRecord.GroupEmployeeCount} Betreuer) Dauer: {(end - start).TotalMinutes} {signatureToken}"; + gruppenInfo = $" Gruppe ({serviceRecord.GroupPersonCount} Teilnehmer, {serviceRecord.GroupEmployeeCount} Betreuer)"; } + - return $"{GetServiceRecordTimeString(serviceRecord)} {gruppenInfo} {signatureToken}"; + return $"{GetServiceRecordTimeString(serviceRecord)}{gruppenInfo}{dauerInfo} {signatureToken}"; } public static string GetServiceRecordTimeString(ServiceRecordDC serviceRecord) @@ -803,42 +767,7 @@ namespace BeWoPlanerMobil.Models [Display(Name = "Mehrfachbuchung")] public bool IsInMultiBookingMode { get { return MainSessionModel.IsInMultiBookingMode; } set { MainSessionModel.IsInMultiBookingMode = value; } } - public List MultiBookingSelectedSupportConceptOids { get { return MainSessionModel.MultiBookingSelectedSupportConceptOids; } set { MainSessionModel.MultiBookingSelectedSupportConceptOids = value; } } - - public List MultiBookingSelectedSupportConcepts { get; set; } = new List(); - - public List MultiBookingSelectedGroupOfPeopleOids { get { return MainSessionModel.MultiBookingSelectedGroupOfPeopleOids; } set { MainSessionModel.MultiBookingSelectedGroupOfPeopleOids = value; } } - - //public List MultiBookingSelectedConceptCostBearerRelations { get; set; } - - public GroupBookingSelectionObject MultiBookingSelectionObject => new GroupBookingSelectionObject(SelectedConceptCostBearerRelations, MultiBookingSelectedGroupOfPeopleOids); - - public List MultiBookingSelectedCostbearerRelOids { get { return MainSessionModel.MultiBookingSelectedCostbearerRelOids; } set { MainSessionModel.MultiBookingSelectedCostbearerRelOids = value; } } - - public List MultiBookingSelectedEmployeeOids { get { return MainSessionModel.MultiBookingSelectedEmployeeOids; } set { MainSessionModel.MultiBookingSelectedEmployeeOids = value; } } - public List MultiBookingSelectedEmployees { get; set; } = new List(); - - public List MultiBookingSupportConceptListObjects - { - get - { - var allCostbearerRelations = new List(); - - foreach(var sc in SupportConcepts.OrderBy(sc => sc.Customer.LastName)) - { - allCostbearerRelations.AddRange(sc.CostBearerRelations.Where(w => ShowExpiredSupportConcepts || w.EndDate is null || w.EndDate.Value >= DateTime.Now).Select( - cb => new CostBearer2SupportConceptRelListObject( - $"{sc.Customer.SimpleDescription} {(sc.Customer.DateOfBirth.HasValue ? "*" + sc.Customer.DateOfBirth.Value.ToString("dd.MM.yyyy") : string.Empty)}", - $"{cb.AuswahlBezeichnung} {cb.StartDate?.ToShortDateString().Remove(6, 2) ?? string.Empty}-{cb.EndDate?.ToShortDateString().Remove(6, 2) ?? string.Empty} {cb.CostBearer.Name}", - cb.CostBearer2SupportConceptOid.Value, - cb.SupportConcept.IsAboutToExpire, - cb.SupportConcept.ExpiresIn3MonthOrLess)) - ); - } - - return allCostbearerRelations; - } - } + #endregion @@ -915,62 +844,4 @@ namespace BeWoPlanerMobil.Models CostBearer2SupportConceptOid = costBearer2SupportConceptOid; } } - - public class CostBearer2SupportConceptRelListObject - { - public string NameAndDateOfBirth { get; } - - public string SupportConceptTimeSpan { get; } - - public long CostBearer2SupportConceptOid { get; } - - public string CostBearer2SupportConceptOidName { get; } - - public bool IsAboutToExpire { get; } - public bool ExpiresInThreeMonthsOrLess { get; } - - - public CostBearer2SupportConceptRelListObject(string pNameAndDateOfBirth, string pSupportConceptTimeSpan, long pCostBearer2SupportConceptOid, bool isAboutToExpire, bool expiresIn3MonthOrLess) - { - NameAndDateOfBirth = pNameAndDateOfBirth; - SupportConceptTimeSpan = pSupportConceptTimeSpan; - CostBearer2SupportConceptOid = pCostBearer2SupportConceptOid; - - CostBearer2SupportConceptOidName = String.Format("OidHolder_{0}", CostBearer2SupportConceptOid); - - IsAboutToExpire = isAboutToExpire; - ExpiresInThreeMonthsOrLess = expiresIn3MonthOrLess; - } - - public override bool Equals(object obj) - { - if (!(obj is CostBearer2SupportConceptRelListObject)) - { - return false; - } - - var obj2 = (CostBearer2SupportConceptRelListObject) obj; - - return Equals(CostBearer2SupportConceptOid, obj2.CostBearer2SupportConceptOid); - } - - public override int GetHashCode() - { - unchecked - { - const int hashingBase = (int)2166136261; - const int hashingMultiplier = 16777619; - - var hash = hashingBase; - - hash = (hash * hashingMultiplier) ^ (NameAndDateOfBirth?.GetHashCode() ?? 0); - hash = (hash * hashingMultiplier) ^ (SupportConceptTimeSpan?.GetHashCode() ?? 0); - hash = (hash * hashingMultiplier) ^ (CostBearer2SupportConceptOid.GetHashCode()); - hash = (hash * hashingMultiplier) ^ IsAboutToExpire.GetHashCode(); - hash = (hash * hashingMultiplier) ^ ExpiresInThreeMonthsOrLess.GetHashCode(); - - return hash; - } - } - } } \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/MainSessionModel.cs b/BeWoPlanerMobil/Models/MainSessionModel.cs index 579237d43..3a9ed460d 100644 --- a/BeWoPlanerMobil/Models/MainSessionModel.cs +++ b/BeWoPlanerMobil/Models/MainSessionModel.cs @@ -20,24 +20,23 @@ namespace BeWoPlanerMobil.Models public long? SelectedServiceRecordOid { get; internal set; } public long? SelectedEmployeeOid { get; internal set; } public NullableDateTimeSpan SelectedZeitraum { get; internal set; } - public List SelectedConceptCostBearerRelations { get; internal set; } + public List GroupBookingSelectedCostBearerSupportConceptOids { get; internal set; } public List GroupBookingSelectedSupportConceptOids { get; internal set; } public List GroupBookingSelectedEmployeeOids { get; internal set; } - public List GroupBookingSelectedCostbearerRelOids { get; internal set; } + public List GroupBookingSelectedGroupOfPeopleOids { get; internal set; } public bool IsInGroupBookingMode { get; internal set; } + public bool IsInMultiBookingMode { get; internal set; } public bool IsInEditingMode { get; internal set; } public long? PreviouslySelectedEmployeeOid { get; internal set; } public long? PreviouslySelectedSupportConceptOid { get; internal set; } public long? PreviouslySelectedCostbearer2SupportConceptOid { get; internal set; } - public bool IsInMultiBookingMode { get; internal set; } - public List MultiBookingSelectedSupportConceptOids { get; internal set; } - public List MultiBookingSelectedGroupOfPeopleOids { get; internal set; } - public List MultiBookingSelectedCostbearerRelOids { get; internal set; } - public List MultiBookingSelectedEmployeeOids { get; internal set; } public int CurrentPage { get; internal set; } public List SelectedGoalOids { get; internal set; } public long LastCreatedServiceRecordOid { get; internal set; } public long? TransferringAppointmentOid { get; internal set; } + public IList SupportConceptListObjects { get; internal set; } + public bool IsInTransferMode { get; internal set; } + public IList SelectedGoals { get; internal set; } public void ResetValues() { @@ -54,14 +53,16 @@ namespace BeWoPlanerMobil.Models SelectedEmployeeOid = null; SelectedZeitraum = null; - SelectedConceptCostBearerRelations = new List(); + GroupBookingSelectedCostBearerSupportConceptOids = new List(); GroupBookingSelectedSupportConceptOids = new List(); GroupBookingSelectedEmployeeOids = new List(); - GroupBookingSelectedCostbearerRelOids = new List(); - MultiBookingSelectedSupportConceptOids = new List(); - MultiBookingSelectedGroupOfPeopleOids = new List(); - MultiBookingSelectedCostbearerRelOids = new List(); - MultiBookingSelectedEmployeeOids = new List(); + GroupBookingSelectedGroupOfPeopleOids = new List(); + + //GroupBookingSelectedCostbearerRelOids = new List(); + //MultiBookingSelectedSupportConceptOids = new List(); + + //MultiBookingSelectedCostbearerRelOids = new List(); + //MultiBookingSelectedEmployeeOids = new List(); SelectedGoalOids = new List(); @@ -72,11 +73,14 @@ namespace BeWoPlanerMobil.Models IsInGroupBookingMode = false; IsInEditingMode = false; IsInMultiBookingMode = false; + IsInTransferMode = false; CurrentPage = 0; LastCreatedServiceRecordOid = 0; TransferringAppointmentOid = null; + SupportConceptListObjects = new List(); + SelectedGoals = new List(); } } } \ No newline at end of file diff --git a/BeWoPlanerMobil/Util/MokMandator.cs b/BeWoPlanerMobil/Models/MokMandator.cs similarity index 97% rename from BeWoPlanerMobil/Util/MokMandator.cs rename to BeWoPlanerMobil/Models/MokMandator.cs index 4c83b614e..5840305ae 100644 --- a/BeWoPlanerMobil/Util/MokMandator.cs +++ b/BeWoPlanerMobil/Models/MokMandator.cs @@ -4,7 +4,7 @@ using System; using System.Runtime.Serialization; using System.Windows.Media; -namespace BeWoPlanerMobil.Util +namespace BeWoPlanerMobil.Models { [Serializable] public class MokMandator diff --git a/BeWoPlanerMobil/Util/MokServiceRecord.cs b/BeWoPlanerMobil/Models/MokServiceRecord.cs similarity index 98% rename from BeWoPlanerMobil/Util/MokServiceRecord.cs rename to BeWoPlanerMobil/Models/MokServiceRecord.cs index 1ad1f853d..e4bf29445 100644 --- a/BeWoPlanerMobil/Util/MokServiceRecord.cs +++ b/BeWoPlanerMobil/Models/MokServiceRecord.cs @@ -5,7 +5,7 @@ using System.Collections.Generic; using System.Runtime.Serialization; using System.Windows.Media; -namespace BeWoPlanerMobil.Util +namespace BeWoPlanerMobil.Models { [Serializable] public class MokServiceRecord diff --git a/BeWoPlanerMobil/Models/MokSupportConceptListObject.cs b/BeWoPlanerMobil/Models/MokSupportConceptListObject.cs new file mode 100644 index 000000000..4ff4fe0a0 --- /dev/null +++ b/BeWoPlanerMobil/Models/MokSupportConceptListObject.cs @@ -0,0 +1,67 @@ +using BS.Shared.DataContracts.Compact; +using BS.Shared.DataContracts.Invoicing; +using System; +using System.Runtime.Serialization; +using System.Windows.Media; + +namespace BeWoPlanerMobil.Models +{ + [Serializable] + public class MokSupportConceptListObject + { + public string NameAndDateOfBirth { get; set; } + + public string SupportConceptTimeSpan { get; set; } + + public long SupportConceptOid { get; } + + public long CostBearer2SupportConceptOid { get; } + + public string CostBearer2SupportConceptOidName { get; } + + public bool IsAboutToExpire { get; } + public bool ExpiresInThreeMonthsOrLess { get; } + + + public MokSupportConceptListObject(long supportConceptOid, long costBearer2SupportConceptOid, bool isAboutToExpire, bool expiresIn3MonthOrLess) + { + SupportConceptOid = supportConceptOid; + CostBearer2SupportConceptOid = costBearer2SupportConceptOid; + CostBearer2SupportConceptOidName = String.Format("OidHolder_{0}", CostBearer2SupportConceptOid); + + IsAboutToExpire = isAboutToExpire; + ExpiresInThreeMonthsOrLess = expiresIn3MonthOrLess; + } + + public override bool Equals(object obj) + { + if (!(obj is MokSupportConceptListObject)) + { + return false; + } + + var obj2 = (MokSupportConceptListObject)obj; + + return Equals(CostBearer2SupportConceptOid, obj2.CostBearer2SupportConceptOid); + } + + public override int GetHashCode() + { + unchecked + { + const int hashingBase = (int)2166136261; + const int hashingMultiplier = 16777619; + + var hash = hashingBase; + + hash = (hash * hashingMultiplier) ^ (NameAndDateOfBirth?.GetHashCode() ?? 0); + hash = (hash * hashingMultiplier) ^ (SupportConceptTimeSpan?.GetHashCode() ?? 0); + hash = (hash * hashingMultiplier) ^ (CostBearer2SupportConceptOid.GetHashCode()); + hash = (hash * hashingMultiplier) ^ IsAboutToExpire.GetHashCode(); + hash = (hash * hashingMultiplier) ^ ExpiresInThreeMonthsOrLess.GetHashCode(); + + return hash; + } + } + } +} \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/MokZiel.cs b/BeWoPlanerMobil/Models/MokZiel.cs new file mode 100644 index 000000000..7074ce7d8 --- /dev/null +++ b/BeWoPlanerMobil/Models/MokZiel.cs @@ -0,0 +1,53 @@ +using BS.Shared; +using BS.Shared.DataContracts.Compact; +using BS.Shared.DataContracts.Invoicing; +using System; +using System.Runtime.Serialization; +using System.Windows.Media; + +namespace BeWoPlanerMobil.Models +{ + [Serializable] + public class MokZiel + { + public long? ValueListEntryOid { get; set; } + + public long? ParentOid { get; set; } + + public long? RatingTypeOid { get; set; } + + public ValueListEntryType Type { get; set; } + + public string DisplayName { get; set; } + + public override bool Equals(object obj) + { + if (obj is MokZiel) + { + var y = (MokZiel)obj; + if (this.ValueListEntryOid == null && y.ValueListEntryOid == null) + { + return this.GetHashCode() == y.GetHashCode(); + } + + if (this.ValueListEntryOid != null && y.ValueListEntryOid != null) + { + return this.ValueListEntryOid == y.ValueListEntryOid; + } + } + + return false; + } + + public override int GetHashCode() + { + return this.ValueListEntryOid.HasValue ? this.GetType().Name.GetHashCode() ^ this.ValueListEntryOid.GetHashCode() : base.GetHashCode(); + } + + public override string ToString() + { + return this.DisplayName; + } + + } +} \ No newline at end of file diff --git a/BeWoPlanerMobil/Models/ReportViewerModel.cs b/BeWoPlanerMobil/Models/ReportViewerModel.cs index 1fce6f018..3291b8733 100644 --- a/BeWoPlanerMobil/Models/ReportViewerModel.cs +++ b/BeWoPlanerMobil/Models/ReportViewerModel.cs @@ -174,22 +174,25 @@ namespace BeWoPlanerMobil.Models public List SupportConcepts { get; set; } - public CostBearer2SupportConceptRelListObject SelectedCostBearer2SupportConceptRelListObject { get; set; } + public MokSupportConceptListObject SelectedCostBearer2SupportConceptRelListObject { get; set; } - public IEnumerable CostBearer2SupportConceptRelListObjects + public IEnumerable CostBearer2SupportConceptRelListObjects { get { - var allCostBearerRelations = new List { new CostBearer2SupportConceptRelListObject("Hilfeplan auswählen", "", 0, false, false) }; + var allCostBearerRelations = new List { new MokSupportConceptListObject(0, 0, false, false) { NameAndDateOfBirth = "Hilfeplan auswählen" } }; foreach(var sc in SupportConcepts.OrderBy(sc => sc.Customer.LastName)) { allCostBearerRelations.AddRange(sc.CostBearerRelations.Select( - cb => new CostBearer2SupportConceptRelListObject( - $"{sc.Customer.SimpleDescription} {(sc.Customer.DateOfBirth.HasValue ? "*" + sc.Customer.DateOfBirth.Value.ToString("dd.MM.yyyy") : string.Empty)}", - $"{cb.AuswahlBezeichnung} {cb.StartDate?.ToShortDateString().Remove(6, 2) ?? string.Empty}-{cb.EndDate?.ToShortDateString().Remove(6, 2) ?? string.Empty} {cb.CostBearer.Name}{GetIsNotApproved(cb)}", + cb => new MokSupportConceptListObject( + sc.SupportConceptOid.Value, cb.CostBearer2SupportConceptOid.Value, cb.SupportConcept.IsAboutToExpire, - cb.SupportConcept.ExpiresIn3MonthOrLess)) + cb.SupportConcept.ExpiresIn3MonthOrLess) + { + NameAndDateOfBirth = $"{sc.Customer.SimpleDescription} {(sc.Customer.DateOfBirth.HasValue ? "*" + sc.Customer.DateOfBirth.Value.ToString("dd.MM.yyyy") : string.Empty)}", + SupportConceptTimeSpan = $"{cb.AuswahlBezeichnung} {cb.StartDate?.ToShortDateString().Remove(6, 2) ?? string.Empty}-{cb.EndDate?.ToShortDateString().Remove(6, 2) ?? string.Empty} {cb.CostBearer.Name}{GetIsNotApproved(cb)}" + }) ); } return allCostBearerRelations; diff --git a/BeWoPlanerMobil/Service/MobileSessionFacade.cs b/BeWoPlanerMobil/Service/MobileSessionFacade.cs index 7f2dd3e81..6533bb519 100644 --- a/BeWoPlanerMobil/Service/MobileSessionFacade.cs +++ b/BeWoPlanerMobil/Service/MobileSessionFacade.cs @@ -6,7 +6,7 @@ using BeWo.Data.Entities; using BeWo.Service.DCEntityMapper; using BeWo.Service.ServiceContracts; using BeWo.Service.ServiceImplementations; -using BeWoPlanerMobil.Util; +using BeWoPlanerMobil.Models; using BS.Shared; using BS.Shared.DataContracts; using BS.Shared.DataContracts.Compact; diff --git a/BeWoPlanerMobil/Util/DcToMokMapper.cs b/BeWoPlanerMobil/Util/DcToMokMapper.cs index fc652775a..0b0e2986a 100644 --- a/BeWoPlanerMobil/Util/DcToMokMapper.cs +++ b/BeWoPlanerMobil/Util/DcToMokMapper.cs @@ -23,6 +23,24 @@ namespace BeWoPlanerMobil.Util } + public static MokZiel CreateZiel(ValueListEntryDC dc) + { + return new MokZiel + { + ValueListEntryOid = dc.ValueListEntryOid, + RatingTypeOid = dc.RatingTypeOid, + Type = dc.Type, + DisplayName = dc.DisplayName, + ParentOid = dc.ParentOid + }; + + } + + public static IList CreateZiele(IEnumerable dclist) + { + return dclist.Select(g => CreateZiel(g)).ToList(); + } + public static MokServiceRecord CreateServiceRecord(ServiceRecordDC dc, ReportModel model) { var s = new MokServiceRecord diff --git a/BeWoPlanerMobil/Views/Main/GroupBookingScCbRelList.cshtml b/BeWoPlanerMobil/Views/Main/GroupBookingScCbRelList.cshtml index 416091f50..d54562a15 100644 --- a/BeWoPlanerMobil/Views/Main/GroupBookingScCbRelList.cshtml +++ b/BeWoPlanerMobil/Views/Main/GroupBookingScCbRelList.cshtml @@ -21,7 +21,7 @@ var timeSpanColorClass2 = cb2Sc.IsAboutToExpire ? "text-bewo-is-about-to-expire" : cb2Sc.ExpiresInThreeMonthsOrLess ? "text-bewo-expires-in-three-months" : "text-dark"; - var checkedValue = Model.SelectedConceptCostBearerRelations.Any(a => a.CostBearer2SupportConceptOid == cb2Sc.CostBearer2SupportConceptOid); + var checkedValue = Model.GroupBookingSelectedCostBearerSupportConceptOids.Any(a => a == cb2Sc.CostBearer2SupportConceptOid); } diff --git a/BeWoPlanerMobil/Views/Main/GroupBookingSelectionPartial.cshtml b/BeWoPlanerMobil/Views/Main/GroupBookingSelectionPartial.cshtml index 6aed160bf..c401995bd 100644 --- a/BeWoPlanerMobil/Views/Main/GroupBookingSelectionPartial.cshtml +++ b/BeWoPlanerMobil/Views/Main/GroupBookingSelectionPartial.cshtml @@ -65,7 +65,7 @@ @* Ziele *@ -@if((Model.GroupBookingSelectedSupportConcepts?.Any() ?? false) && Model.GroupBookingSelectedSupportConcepts.Any(sc => sc.Goals.Any())) +@if((Model.GroupBookingSelectedCostBearerSupportConcepts?.Any() ?? false) && (Model.AllGoals?.Any() ?? false)) {
diff --git a/BeWoPlanerMobil/Views/Main/Main.cshtml b/BeWoPlanerMobil/Views/Main/Main.cshtml index 78dc37f41..be4778c72 100644 --- a/BeWoPlanerMobil/Views/Main/Main.cshtml +++ b/BeWoPlanerMobil/Views/Main/Main.cshtml @@ -156,8 +156,8 @@ "#betrag" ).prop("disabled", (isSupportConceptSelected ? false : true)); - if("@Model.IsInGroupBookingMode".toLowerCase() === "true") { - const hasSelectedSupportConcepts = "@Model.SelectedConceptCostBearerRelations.Any()".toLowerCase() === "true"; + if ("@Model.IsInGroupBookingMode".toLowerCase() === "true") { + const hasSelectedSupportConcepts = "@Model.GroupBookingSelectedCostBearerSupportConceptOids.Any()".toLowerCase() === "true"; $( "#employees-button, " + @@ -183,7 +183,7 @@ $("#fehlerdetail-textarea").prop("disabled", false); if ("@Model.IsInMultiBookingMode".toLowerCase() === "true") { - const isMultiBookingFormDisabled = "@Model.SelectedConceptCostBearerRelations.Any()".toLowerCase() === "false"; + const isMultiBookingFormDisabled = "@Model.GroupBookingSelectedCostBearerSupportConceptOids.Any()".toLowerCase() === "false"; window.toggleMultiBookingForm(isMultiBookingFormDisabled); } @@ -449,7 +449,7 @@