From f49f833db3cd474c5322ef8f076d73e1faa2b68e Mon Sep 17 00:00:00 2001 From: Lyndon Jetten Date: Fri, 30 Nov 2018 16:47:57 -0400 Subject: [PATCH] =?UTF-8?q?Gruppenbuchung=20im=20Mobilklienten=20->=20Vali?= =?UTF-8?q?dierung=20serverseitig=20fertig.=20Die=20Meldungen=20im=20JavaS?= =?UTF-8?q?cript=20m=C3=BCssen=20noch=20angepasst=20werden.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeWoPlanerMobil/BeWoPlanerMobil.csproj | 3 + BeWoPlanerMobil/Controllers/MainController.cs | 177 ++++++++++---- BeWoPlanerMobil/Models/MainModel.cs | 56 +---- BeWoPlanerMobil/Scripts/initialization.js | 4 - BeWoPlanerMobil/Scripts/mainView.js | 218 ++++++++++-------- BeWoPlanerMobil/Util/MobileUtils.cs | 69 +++++- BeWoPlanerMobil/Views/Main/Main.cshtml | 62 +++-- Service/ServiceContracts/ICustomerService.cs | 4 + .../CustomerServiceImp.cs | 13 ++ 9 files changed, 388 insertions(+), 218 deletions(-) diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj b/BeWoPlanerMobil/BeWoPlanerMobil.csproj index 51b5e31b4..f935677e7 100644 --- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj +++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj @@ -80,6 +80,7 @@ + @@ -176,8 +177,10 @@ + + diff --git a/BeWoPlanerMobil/Controllers/MainController.cs b/BeWoPlanerMobil/Controllers/MainController.cs index 6af60cc9a..0ad86dcf6 100644 --- a/BeWoPlanerMobil/Controllers/MainController.cs +++ b/BeWoPlanerMobil/Controllers/MainController.cs @@ -4,7 +4,7 @@ using System.Diagnostics; using System.Linq; using System.Text; using System.Web.Mvc; - +using BeWo.Service.DCEntityMapper; using BeWo.Service.ServiceImplementations; using BeWoPlanerMobil.Models; @@ -23,6 +23,7 @@ using BS.Shared.Services; using DevExpress.XtraScheduler; using DevExpress.XtraScheduler.Compatibility; +using ServiceRecordDC = BS.Shared.DataContracts.ServiceRecordDC; namespace BeWoPlanerMobil.Controllers { @@ -623,23 +624,22 @@ namespace BeWoPlanerMobil.Controllers } } - public void SetSaveSignature(bool save) + public string SetSaveSignature(bool save) { try { if (Model == null) { - SerializeObject("SessionTimeout"); - } - else - { - Model.SaveSignature = save; + return SerializeObject("SessionTimeout"); } + + Model.SaveSignature = save; + return " "; } catch (Exception e) { log.Error(e.Message, e); - SerializeObject("Fehler 777: Fail Error Compilation"); + return SerializeObject("Fehler 777: Fail Error Compilation"); } } @@ -1137,8 +1137,8 @@ namespace BeWoPlanerMobil.Controllers Model.SelectedSupportConcepts = new List(); Model.SelectedEmployees = new List(); - //TODO: Die Dauer neuberechnen und die einzelnen ServiceRecords an die Änderungen, die gemacht wurden, anpassen. (Model.SelectedServiceRecord) - //TODO: Fast alle Eigenschaften von Model.NewServiceRecord kopieren + ResetGroupBookingMode(false); + Model.IsInEditingMode = false; return RedirectToActionPermanent("Main"); } @@ -1621,13 +1621,15 @@ namespace BeWoPlanerMobil.Controllers [HttpPost] [Authorize] - public ActionResult DeleteServiceRecord() + public ActionResult DeleteServiceRecord(FormCollection formCollection) { if (Model == null) { return RedirectToActionPermanent("Index", "Login"); } + Model.ServiceRecordOidToDelete = long.Parse(formCollection["serviceRecordOidHolder"]); + if (Model.ServiceRecordOidToDelete != null && Model.ServiceRecordOidToDelete > 0 && MobileSessionFacade.LoggedInUser.UserGroups.Any(a => a.Rights.Any(f => f.RightType.Equals(UserRightType.ServiceRecordView_Delete)))) { var serviceRecordDC = Model.ServiceRecords.FirstOrDefault(f => f.ServiceRecordOid != null && f.ServiceRecordOid.Value.Equals(Model.ServiceRecordOidToDelete)); @@ -1641,6 +1643,8 @@ namespace BeWoPlanerMobil.Controllers } } + ResetGroupBookingMode(false); + return RedirectToActionPermanent("Main"); } @@ -1690,15 +1694,16 @@ namespace BeWoPlanerMobil.Controllers } } - public void SetServiceDescription(long pServiceDescriptionOid) + public string SetServiceDescription(long pServiceDescriptionOid) { if (Model == null) { RedirectToActionPermanent("Index", "Login"); - return; + return " "; } Model.SelectedServiceDescriptionOid = pServiceDescriptionOid; + return " "; } [HttpPost] @@ -1789,6 +1794,9 @@ namespace BeWoPlanerMobil.Controllers Model.SelectedServiceRecord = serviceRecord; Model.SelectedSupportConcepts.Clear(); Model.SelectedEmployees.Clear(); + Model.SelectedCostbearerRelOids.Clear(); + + var relationOids = new List(); if (serviceRecord?.GroupOid != null) { @@ -1797,7 +1805,7 @@ namespace BeWoPlanerMobil.Controllers if(serviceRecordGroup != null) { employees.AddRangeIfElementsNotIn(serviceRecordGroup.ServiceRecordList.Select(s => s.Employee)); - var relationOids = serviceRecordGroup.ServiceRecordList.Select(s => s.CostBearer2SupportConceptOid.Value).ToList(); + relationOids = serviceRecordGroup.ServiceRecordList.Select(s => s.CostBearer2SupportConceptOid.Value).ToList(); var costBearerRelations = CustomerService.GetSupportConceptCostBearerRelationsById(relationOids); foreach(var rel in costBearerRelations) @@ -1812,12 +1820,12 @@ namespace BeWoPlanerMobil.Controllers } } } + + Model.SelectedCostbearerRelOids.AddRangeIfElementsNotIn(relationOids); Model.SelectedSupportConcepts = supportConcepts; Model.SelectedEmployees = employees; - // TODO: Wie bei SetGroupBooking - //LoadServiceCategoriesForGroupBooking(); Model.ServiceCategories = CreateServiceCategoryModels(OperationsService.GetAllServiceDescriptions()); return RedirectToActionPermanent("Main"); @@ -1923,11 +1931,11 @@ namespace BeWoPlanerMobil.Controllers checkSR.ServiceDescription = OperationsService.GetServiceDescription(Model.SelectedServiceDescriptionOid.Value); - var man = OperationsService.GetMandator(); - var s = man.Settings ?? string.Empty; - var einzeln = s.Split(';'); - var g = einzeln.ToList().FirstOrDefault(f => f.Contains("MaxDaysEditServiceRecordsAllowed")); - var t = g != null ? int.Parse(g.Split('=')[1]) : 0; + var mandator = OperationsService.GetMandator(); + var settings = mandator.Settings ?? string.Empty; + var splitSettings = settings.Split(';'); + var maxDaysEditSRsAllowedSetting = splitSettings.ToList().FirstOrDefault(f => f.Contains("MaxDaysEditServiceRecordsAllowed")); + var maxDaysEditSRsAllowed = maxDaysEditSRsAllowedSetting != null ? int.Parse(maxDaysEditSRsAllowedSetting.Split('=')[1]) : 0; SupportConceptStatisticsDC stats = null; @@ -1936,21 +1944,69 @@ namespace BeWoPlanerMobil.Controllers stats = OperationsService.CreateSupportConceptStatistics(Model.CostBearer2SupportConceptOid.Value, DateTime.Now); } - var result = OperationsService.ValidateServiceRecordEntry(checkSR, stats, t, false, new List { checkSR.Employee.EmployeeOid }); - var valStruct = new ValidationStruct - { - ValidationResults = result, - Rights = new Dictionary(), - MaxDaysEditServiceRecordsAllowed = t.ToString() - }; + var employees = new List {checkSR.Employee.EmployeeOid}; - valStruct.Rights.Add(0, MobileSessionFacade.LoggedInUser.UserGroups.Any(a => a.Rights.Any(f => f.RightType.Equals(UserRightType.ServiceRecord_AllowCreateOverlappingFLS)))); - valStruct.Rights.Add(1, MobileSessionFacade.LoggedInUser.UserGroups.Any(a => a.Rights.Any(f => f.RightType.Equals(UserRightType.ServiceRecord_AllowCreateMoreFLSThanApproved)))); - valStruct.Rights.Add(2, MobileSessionFacade.LoggedInUser.UserGroups.Any(a => a.Rights.Any(f => f.RightType.Equals(UserRightType.BookServiceRecordAfterSettlementInvoice)))); + var newResult = new ValidationResult(); + + //if (checkSR.GroupOid.HasValue) + if(Model.IsInGroupBookingMode) + { + if (checkSR.GroupOid.HasValue) + { + var serviceRecordGroup = OperationsService.GetServiceRecordGroup(checkSR.GroupOid.Value); + + serviceRecordGroup.ServiceRecordList.DoForEach(sr => employees.AddIfNotIn(sr.Employee.EmployeeOid)); + } + else + { + Model.SelectedEmployees.DoForEach(e => employees.AddIfNotIn(e.EmployeeOid)); + } + + var cb2scOids = (from scDc in Model.SelectedSupportConcepts where scDc.CostBearerRelations != null && scDc.CostBearerRelations.Count > 0 select scDc.CostBearerRelations[0].CostBearer2SupportConceptOid.Value).ToList(); + + var nodes = new List(); + foreach (var sc in CustomerService.LoadCompactSupportConceptsById(Model.SelectedSupportConcepts.Select(s => s.SupportConceptOid.Value))) + { + nodes.Add(CreateFlatSupportConceptItem(sc, null)); + } + + foreach (var node in nodes) + { + if (node?.SupportConceptTreeNodeDC != null) + { + var scDc = node.SupportConceptTreeNodeDC.SupportConcept; + var cbDc = node.SupportConceptTreeNodeDC.CostBearer; + var relDc = node.SupportConceptTreeNodeDC.SupportConceptCostBearerRelDC; + + checkSR.SupportConcept = scDc; + checkSR.CostBearer = cbDc; + + if (relDc != null) + { + checkSR.CostBearer2SupportConceptOid = relDc.CostBearer2SupportConceptOid; + } + } + + var result = OperationsService.ValidateServiceRecord(checkSR, stats, maxDaysEditSRsAllowed, employees, cb2scOids); + newResult.ServiceRecord2Validations.Add(new ServiceRecord2Validation(checkSR, result)); + } + } + else + { + var result = OperationsService.ValidateServiceRecordEntry(checkSR, stats, maxDaysEditSRsAllowed, checkSR.GroupOid.HasValue, employees); + newResult.ServiceRecord2Validations.Add(new ServiceRecord2Validation(checkSR, result)); + } + + newResult.Rights = new Dictionary(); + newResult.MaxDaysEditServiceRecordsAllowed = maxDaysEditSRsAllowed.ToString(); + + newResult.Rights.Add(0, MobileSessionFacade.LoggedInUser.UserGroups.Any(a => a.Rights.Any(f => f.RightType.Equals(UserRightType.ServiceRecord_AllowCreateOverlappingFLS)))); + newResult.Rights.Add(1, MobileSessionFacade.LoggedInUser.UserGroups.Any(a => a.Rights.Any(f => f.RightType.Equals(UserRightType.ServiceRecord_AllowCreateMoreFLSThanApproved)))); + newResult.Rights.Add(2, MobileSessionFacade.LoggedInUser.UserGroups.Any(a => a.Rights.Any(f => f.RightType.Equals(UserRightType.BookServiceRecordAfterSettlementInvoice)))); Model.NewServiceRecord = new ServiceRecordDC(); - return SerializeObject(valStruct); + return SerializeObject(newResult); } public bool CheckRightsAfterCrash(string von, string bis, bool inEditMode, string dateString, string startString, string endString, long costbearerOId, string leistung) @@ -2074,13 +2130,6 @@ namespace BeWoPlanerMobil.Controllers return true; } - private struct ValidationStruct - { - public List ValidationResults { get; set; } - public Dictionary Rights { get; set; } - public string MaxDaysEditServiceRecordsAllowed { get; set; } - } - public void SetViewMode() { if (Model == null) @@ -2170,22 +2219,48 @@ namespace BeWoPlanerMobil.Controllers { var isInGroupBookingMode = "true,false" == pFormCollection["IsInGroupBookingMode"]; - Model.IsInGroupBookingMode = isInGroupBookingMode; + ResetGroupBookingMode(isInGroupBookingMode); - if(isInGroupBookingMode) + return RedirectToAction("Main"); + } + + private void ResetGroupBookingMode(bool pIsInGroupBookingMode) + { + Model.IsInGroupBookingMode = pIsInGroupBookingMode; + + if (pIsInGroupBookingMode) { Model.SelectedSupportConcept = null; Model.SelectedEmployee = null; Model.SelectedEmployeeOid = null; Model.ServiceCategories = CreateServiceCategoryModels(OperationsService.GetAllServiceDescriptions()); + + Model.SelectedEmployees.Add(MobileSessionFacade.LoggedInCompactEmployee); } else { Model.ServiceCategories.Clear(); - } + Model.SelectedCostbearerRelOids.Clear(); + Model.SelectedEmployees.Clear(); + Model.SelectedSupportConcepts.Clear(); - return RedirectToAction("Main"); + if (Model.SelectedSupportConcept != null) + { + var details = OperationsService.GetSupportConceptTreeNodeDetailInfo(Model.SelectedSupportConcept.Customer.CustomerOid, Model.SelectedSupportConcept.SupportConceptOid, Model.CostBearer2SupportConceptOid); + + Model.ServiceCategories = details.ServiceAccountings.Count > 0 + ? CreateServiceCategoryModels(details.ServiceAccountings.Select(sa => sa.ServiceDescription).ToList()) + : CreateServiceCategoryModels(OperationsService.GetAllServiceDescriptions()); + + Model.ServiceCategories = Model.ServiceCategories.Where(c => !c.OhneHilfeplan.HasValue || c.OhneHilfeplan.Value == AccountingvisibilityType.Beides || c.OhneHilfeplan.Value == AccountingvisibilityType.NurKlientenbezogen).ToList(); + } + else if (Model.CostBearer2SupportConceptOid == -2) + { + Model.ServiceCategories = CreateServiceCategoryModels(OperationsService.GetAllServiceDescriptions()); + Model.ServiceCategories = Model.ServiceCategories.Where(c => !c.OhneHilfeplan.HasValue || c.OhneHilfeplan.Value == AccountingvisibilityType.Beides || c.OhneHilfeplan.Value == AccountingvisibilityType.NichtKlientenbezogen).ToList(); + } + } } [HttpPost] @@ -2204,6 +2279,11 @@ namespace BeWoPlanerMobil.Controllers public string LoadCategoryAndDescription() { + if (Model.SelectedServiceRecord == null) + { + return null; + } + var serviceDescriptionOid = Model.SelectedServiceRecord.ServiceDescription.ServiceDescriptionOid.ToString(); var serviceCategoryOid = Model.SelectedServiceRecord.ServiceDescription.Category.ServiceCategoryOid.ToString(); @@ -2297,5 +2377,16 @@ namespace BeWoPlanerMobil.Controllers return RedirectToAction("Main"); } + + [Authorize] + public string ResetGroupBookingModeViaGET() + { + Model.IsInGroupBookingMode = false; + Model.SelectedCostbearerRelOids.Clear(); + Model.SelectedEmployees.Clear(); + Model.SelectedSupportConcepts.Clear(); + + return MainModel.IsEmployeeSelectionVisible.ToString(); + } } } diff --git a/BeWoPlanerMobil/Models/MainModel.cs b/BeWoPlanerMobil/Models/MainModel.cs index 29c2ee8fc..d8acf32d6 100644 --- a/BeWoPlanerMobil/Models/MainModel.cs +++ b/BeWoPlanerMobil/Models/MainModel.cs @@ -150,29 +150,6 @@ namespace BeWoPlanerMobil.Models } } - // TODO: KGW? - //public IEnumerable SelectedSupportConceptListItemsForGroupBooking - //{ - // get - // { - // var selectedSCs = new List(); - - // if(SelectedSupportConcepts != null) - // { - // foreach(var sc in SelectedSupportConcepts.OrderBy(sc => sc.Customer.LastName)) - // { - // selectedSCs.AddRange(sc.CostBearerRelations.Where(w => ShowExpiredSupportConcepts || w.EndDate == null || w.EndDate.Value >= DateTime.Now).Select(cb => new SelectListItem - // { - // Value = cb.CostBearer2SupportConceptOid.ToString(), - // Text = $"{sc.Customer.LastNameFirstName} | {cb.StartDate?.ToShortDateString().Remove(6, 2) ?? string.Empty}-{cb.EndDate?.ToShortDateString().Remove(6, 2) ?? string.Empty} {cb.CostBearer.Name}" - // })); - // } - // } - - // return selectedSCs; - // } - //} - public IEnumerable ServiceCategoryListItems { get @@ -199,26 +176,6 @@ namespace BeWoPlanerMobil.Models } } - // TODO: KGW? - // [Display(Name = "Textbaustein")] - // public long? SelectedTextbausteinOid { get; set; } - - // TODO: KGW? - //public IEnumerable TextbausteinListItems - //{ - // get - // { - // var result = new List(); - - // if (Textbausteine != null) - // { - // result.AddRange(Textbausteine.Select(item => new SelectListItem { Value = item.TextModuleOid.Value.ToString(), Text = item.Name }).ToList()); - // } - - // return result; - // } - //} - public List Customers { get; set; } public List Employees { get; set; } @@ -252,10 +209,6 @@ namespace BeWoPlanerMobil.Models public List SelectedGroupOfPeopleOids { get; set; } = new List(); - // TODO: KGW - //[Display(Name = "Gruppen")] - //public string SelectedGroupInfo { get; set; } - public IEnumerable EmployeeListItems { get @@ -292,16 +245,13 @@ namespace BeWoPlanerMobil.Models public List SelectedEmployees { get; set; } = new List(); - // TODO: KGW - //public List SelectedCostbearer2SupportConceptOids { get; set; } = new List(); - [Display(Name = "Gruppenbuchung")] public bool IsInGroupBookingMode { - //get => _IsInGroupBookingMode; - get => false; + get => _IsInGroupBookingMode; + //get => false; - set + set { _IsInGroupBookingMode = value; diff --git a/BeWoPlanerMobil/Scripts/initialization.js b/BeWoPlanerMobil/Scripts/initialization.js index aa5a3ca85..e492f8f02 100644 --- a/BeWoPlanerMobil/Scripts/initialization.js +++ b/BeWoPlanerMobil/Scripts/initialization.js @@ -170,10 +170,6 @@ function initBeWoMobile(actionPath) { var value = (supportConceptTableHasEntries === 0 || employeesTableHasEntries === 0) ? false : true; $("#anlegenEditierenBtn").prop("disabled", value); - - hideElement($("#selectSCForm")); - } else { - showElement($("#selectSCForm")); } } catch(err) { console.log('Fehler: ' + err.message); diff --git a/BeWoPlanerMobil/Scripts/mainView.js b/BeWoPlanerMobil/Scripts/mainView.js index b1f22a37c..8516c4d82 100644 --- a/BeWoPlanerMobil/Scripts/mainView.js +++ b/BeWoPlanerMobil/Scripts/mainView.js @@ -21,7 +21,7 @@ function buildCollapsibleSet(jsonString) { actuallyBuildCollapsibleSet(kollektion, null); } catch(exception) { - console.log('Fehler(BuildCollapsibleSet): ' + exception.message); + console.log("Fehler(BuildCollapsibleSet): " + exception.message); } } @@ -66,9 +66,6 @@ function buildGoalTreeItem(goalItem, selectedGoalOids) { collapsibleHtml += '
' + goalHeader + '
'; } - - - } function loadGoalsOnSuccess(json) { @@ -132,7 +129,7 @@ function showAjaxError(jqXHR, textStatus, errorThrown) { //else if(jqXHR.status === 0) { - console.log("status is 0; ajax call aborted"); + console.log("status is 0; ajax call aborted.\nError thrown: " + errorThrown + ";\nText status: " + textStatus); return; } @@ -340,6 +337,28 @@ function selectServiceRecord(oid) { $("#abbrechenBtn").prop("disabled", false); + if (isInGroupBookingMode()) { + $("#changeBookingModeCheckBox").prop("checked", false); + + console.log("Gruppenbuchungsmodus abgewählt"); + + makeAjaxCall("GET", window.resetGroupBookingModeViaGETUrl, function (result) { + $("#changeBookingModeCheckBox").prop("checked", false); + $("#leftContent input[type=checkbox]").prop("checked", false); + $("#rightContent input[type=checkbox]").prop("checked", false); + $("#employeeCollapsible input[type=checkbox]").prop("checked", false); + + showElement($("#selectSCForm")); + + if (result === "True") { + showElement($("#singleSCEmployeeSelectionContainer")); + } + + hideElement($("#groupBookingOpenPopupBtn")); + hideElement($("#groupBookingOpenEmployeeSelectionPopupBtn")); + }, null, null); + } + hideSanduhr(); }, error: showErrorMsg, @@ -385,6 +404,12 @@ function resetRecordForm() { clearZED(); + if (isInGroupBookingMode()) { + $("#changeBookingModeCheckBox").prop("checked", false); + showSanduhr(); + $("#groupBookingForm").submit(); + } + $("#start_textbox").val("").trigger("change"); $("#ende_textbox").val("").trigger("change"); $("#notiz_textbox").val("").trigger("change"); @@ -403,7 +428,7 @@ function resetRecordForm() { var selectedCategory = $("#kategorien_select").find(":selected").val(); if(isInEditingMode()) { - makeAjaxCall("POST", resetEditingModeUrl, function(response) { window.location.reload(); }, { pFormCollection: null }, null); + makeAjaxCall("POST", window.resetEditingModeUrl, function(response) { window.location.reload(); }, { pFormCollection: null }, null); } $.ajax({ @@ -471,9 +496,8 @@ function validateTimeField(id) { } } -recordToDelete = 0; function togglePopup(serviceRecordOid) { - window.recordToDelete = serviceRecordOid; + $("#oidHolder").val(serviceRecordOid); var isShowing = $(".modalWrapper").css("display") === "none"; var displayValue = $(".modalWrapper").css("display") === "block" ? "none" : "block"; @@ -505,25 +529,6 @@ function toggleModalWrapper() { $(".modalWrapper").css("height", $(document).height()); } -$(function () { - $("#deletionForm").submit(function () { - $.ajax({ - type: "GET", - url: setRecordForDeletionUrl, - data: { serviceRecordOid: recordToDelete }, - success: function () { - return true; - }, - error: function () { - showAjaxError(); - return false; - } - }); - - return true; - }); -}); - function validateServiceRecordBeforeSubmit() { function getLocation() { if (navigator.geolocation) { @@ -566,8 +571,10 @@ function validateServiceRecordBeforeSubmit() { } var meldungen = $.parseJSON(json); + console.log(meldungen); - var results = meldungen.ValidationResults; + var relations = meldungen.ServiceRecord2Validations; + var results = null; var allowOverlappingFLS = false; var allowMoreFLSThanApproved = false; var bookAfterSettlementInvoice = false; @@ -591,83 +598,90 @@ function validateServiceRecordBeforeSubmit() { } }); - var exitLoop = false; - for (var i = 0; i < results.length; i++) { - if (exitLoop) - break; - switch (results[i].ResultType) { - case 0: - var msg1 = 'An dem gewählten Datum \'' + vonDatum + '\' existiert bereits ein Eintrag (' + results[i].Message + ' bei Klient/in ' + results[i].CustomerName + '). Speichern nicht möglich.'; - if (allowOverlappingFLS === true) { - var r = confirm('An dem gewählten Datum \'' + vonDatum + '\' existiert bereits ein Eintrag (' + results[i].Message + ' bei Klient/in ' + results[i].CustomerName + '). Möchten Sie trotzdem speichern?'); - isValidRecord = r; - exitLoop = !isValidRecord; - } else { - writeFatalErrorMessage(msg1); - isValidRecord = false; - exitLoop = true; - } - break; - case 1: - var msg2 = 'An dem gewählten Datum ' + vonDatum + ' existiert bereits ein Eintrag für den ausgewählten Mitarbeiter(' + results[i].EmployeeName + '). Speichern nicht möglich.'; - if (allowOverlappingFLS === true) { - var r2 = confirm('An dem gewählten Datum ' + vonDatum + ' existiert bereits ein Eintrag für den ausgewählten Mitarbeiter(' + results[i].EmployeeName + '). Möchten Sie trotzdem speichern?'); - isValidRecord = r2; - exitLoop = !isValidRecord; - } else { - writeFatalErrorMessage(msg2); - isValidRecord = false; - exitLoop = true; - } - break; - case 2: - writeFatalErrorMessage('Das gewählte Datum ' + vonDatum.slice(0, 10) + ' liegt außerhalb des Zeitraumes des gewählten Hilfeplans. Speichern nicht möglich.'); - isValidRecord = false; - exitLoop = true; - break; - case 3: - var msg3 = 'Die für diesen Hilfeplan genehmigten FLS (' + results[i].ApprovedHours + ') werden mit diesem Eintrag überschritten. (' + results[i].HoursNew + ').'; - if (allowMoreFLSThanApproved === true) { - var r3 = confirm(msg3 + " Möchten Sie trotzdem speichern?"); - isValidRecord = r3; - exitLoop = !isValidRecord; - } else { - writeFatalErrorMessage(msg3); - isValidRecord = false; - exitLoop = true; + for (var j = 0; j < relations.length; j++) { + results = relations[j].ValidationResults; + + var exitLoop = false; + for (var i = 0; i < results.length; i++) { + if (exitLoop) { + break; } - break; - case 4: - writeFatalErrorMessage('Sie können keine neuen Leistungen für den ' + vonDatum + ' dokumentieren, da bereits der ' + meldungen.MaxDaysEditServiceRecordsAllowed + '. des nachfolgenden Monats überschritten ist.'); - isValidRecord = false; - exitLoop = true; - break; - case 5: - writeFatalErrorMessage("Beim Speichern ist ein Fehler aufgetreten. Speichern nicht möglich."); - isValidRecord = false; - exitLoop = true; - break; - case 6: - var msg6 = "Es existiert bereits eine Spitzabrechnung. Um diesen Eintrag zu berücksichtigen, muss eventuell eine neue Spitzabrechnung erstellt werden. Das Speichern ist nicht möglich."; - if (bookAfterSettlementInvoice === true) { - msg6 = "Sie können den Eintrag nicht bearbeiten, da bereits eine Spitzabrechnung für diesen Hilfeplan erstellt wurde. Speichern nicht möglich."; + + switch (results[i].ResultType) { + case 0: + var msg1 = 'An dem gewählten Datum \'' + vonDatum + '\' existiert bereits ein Eintrag (' + results[i].Message + ' bei Klient/in ' + results[i].CustomerName + '). Speichern nicht möglich.'; + if (allowOverlappingFLS === true) { + var r = confirm('An dem gewählten Datum \'' + vonDatum + '\' existiert bereits ein Eintrag (' + results[i].Message + ' bei Klient/in ' + results[i].CustomerName + '). Möchten Sie trotzdem speichern?'); + isValidRecord = r; + exitLoop = !isValidRecord; + } else { + writeFatalErrorMessage(msg1); + isValidRecord = false; + exitLoop = true; + } + break; + case 1: + var msg2 = 'An dem gewählten Datum ' + vonDatum + ' existiert bereits ein Eintrag für den ausgewählten Mitarbeiter(' + results[i].EmployeeName + '). Speichern nicht möglich.'; + if (allowOverlappingFLS === true) { + var r2 = confirm('An dem gewählten Datum ' + vonDatum + ' existiert bereits ein Eintrag für den ausgewählten Mitarbeiter(' + results[i].EmployeeName + '). Möchten Sie trotzdem speichern?'); + isValidRecord = r2; + exitLoop = !isValidRecord; + } else { + writeFatalErrorMessage(msg2); + isValidRecord = false; + exitLoop = true; + } + break; + case 2: + writeFatalErrorMessage('Das gewählte Datum ' + vonDatum.slice(0, 10) + ' liegt außerhalb des Zeitraumes des gewählten Hilfeplans. Speichern nicht möglich.'); + + isValidRecord = false; + exitLoop = true; + break; + case 3: + var msg3 = 'Die für diesen Hilfeplan genehmigten FLS (' + results[i].ApprovedHours + ') werden mit diesem Eintrag überschritten. (' + results[i].HoursNew + ').'; + if (allowMoreFLSThanApproved === true) { + var r3 = confirm(msg3 + " Möchten Sie trotzdem speichern?"); + isValidRecord = r3; + exitLoop = !isValidRecord; + } else { + writeFatalErrorMessage(msg3); + isValidRecord = false; + exitLoop = true; + } + break; + case 4: + writeFatalErrorMessage('Sie können keine neuen Leistungen für den ' + vonDatum + ' dokumentieren, da bereits der ' + meldungen.MaxDaysEditServiceRecordsAllowed + '. des nachfolgenden Monats überschritten ist.'); + isValidRecord = false; + exitLoop = true; + break; + case 5: + writeFatalErrorMessage("Beim Speichern ist ein Fehler aufgetreten. Speichern nicht möglich."); + isValidRecord = false; + exitLoop = true; + break; + case 6: + var msg6 = "Es existiert bereits eine Spitzabrechnung. Um diesen Eintrag zu berücksichtigen, muss eventuell eine neue Spitzabrechnung erstellt werden. Das Speichern ist nicht möglich."; + if (bookAfterSettlementInvoice === true) { + msg6 = "Sie können den Eintrag nicht bearbeiten, da bereits eine Spitzabrechnung für diesen Hilfeplan erstellt wurde. Speichern nicht möglich."; + } + writeFatalErrorMessage(msg6); + isValidRecord = false; + exitLoop = true; + break; + case 7: + var msg7 = "Sie können keine neuen Leistungen dokumentieren, da die Frist zur Bearbeitung abgelaufen ist. Das Speichern ist nicht möglich."; + writeFatalErrorMessage(msg7); + isValidRecord = false; + exitLoop = true; + break; + default: + writeFatalErrorMessage(results[i].Message); + isValidRecord = false; + exitLoop = true; + break; } - writeFatalErrorMessage(msg6); - isValidRecord = false; - exitLoop = true; - break; - case 7: - var msg7 = "Sie können keine neuen Leistungen dokumentieren, da die Frist zur Bearbeitung abgelaufen ist. Das Speichern ist nicht möglich."; - writeFatalErrorMessage(msg7); - isValidRecord = false; - exitLoop = true; - break; - default: - writeFatalErrorMessage(results[i].Message); - isValidRecord = false; - exitLoop = true; - break; } } diff --git a/BeWoPlanerMobil/Util/MobileUtils.cs b/BeWoPlanerMobil/Util/MobileUtils.cs index 94dba949c..786644459 100644 --- a/BeWoPlanerMobil/Util/MobileUtils.cs +++ b/BeWoPlanerMobil/Util/MobileUtils.cs @@ -5,10 +5,11 @@ using System.Text.RegularExpressions; using BeWoPlanerMobil.Models; using BS.Shared.Core; using BS.Shared.DataContracts; +using BS.Shared.DataContracts.Compact; using BS.Shared.Extensions; using DevExpress.XtraScheduler; - +using DevExpress.XtraScheduler.UI; using Newtonsoft.Json; using static System.Int32; @@ -261,5 +262,71 @@ namespace BeWoPlanerMobil.Util return list; } + + public static FlatSupportConceptTreeNodeDC CreateFlatSupportConceptItem(CompactSupportConceptDC dc, CompactOrganisationDC orga) + { + var flatNode = new FlatSupportConceptTreeNodeDC(); + + if (dc != null) + { + var treeNode = new SupportConceptTreeNodeDC {SupportConcept = dc, Customer = dc.Customer}; + + if (dc.CostBearerList.Count > 0) + { + CompactCostBearerDC cbDC = null; + + if (orga != null) + { + foreach (var item in dc.CostBearerList) + { + if (orga.Equals(item.Organisation)) + { + cbDC = item; + } + } + } + if (cbDC == null) + cbDC = dc.CostBearerList[0]; + + + var orgDC = new CompactOrganisationDC(); + var relDC = new SupportConceptCostBearerRelDC(); + + orgDC.CostBearerID = cbDC.CostBearerID; + orgDC.CostBearerOid = cbDC.CostBearerOid; + + var o = orga ?? cbDC.Organisation; + + if (o != null) + { + orgDC.OrganisationOid = o.OrganisationOid; + orgDC.Name = o.Name; + orgDC.ActualHourlyRate = o.ActualHourlyRate; + orgDC.ActualMinuteIntervall = o.ActualMinuteIntervall; + orgDC.ActualRateFactor = o.ActualRateFactor; + orgDC.CostRatePeriods = o.CostRatePeriods; + orgDC.IsCalculatingWithFactor = o.IsCalculatingWithFactor; + + } + + relDC.ApprovedEndDate = cbDC.ApprovedEndDate; + relDC.ApprovedStartDate = cbDC.ApprovedStartDate; + relDC.CostBearer = orgDC; + relDC.CostBearer2SupportConceptOid = cbDC.CostBearer2SupportConceptOid; + relDC.RequestedEndDate = cbDC.RequestedEndDate; + relDC.RequestedStartDate = cbDC.RequestedStartDate; + relDC.Status = cbDC.SupportConceptStatus; + relDC.SupportConcept = dc; + relDC.AuswahlBezeichnung = cbDC.Bezeichnung; + + treeNode.SupportConceptCostBearerRelDC = relDC; + treeNode.CostBearer = orgDC; + } + + flatNode.SupportConceptTreeNodeDC = treeNode; + } + + return flatNode; + } } } \ No newline at end of file diff --git a/BeWoPlanerMobil/Views/Main/Main.cshtml b/BeWoPlanerMobil/Views/Main/Main.cshtml index 67aa1f854..0beaef798 100644 --- a/BeWoPlanerMobil/Views/Main/Main.cshtml +++ b/BeWoPlanerMobil/Views/Main/Main.cshtml @@ -53,7 +53,7 @@ } @* , new { style = "display: none;"} *@ - @using (Html.BeginForm("SetGroupBookingMode", "Main", FormMethod.Post, new { style = "display: none;" })) + @using (Html.BeginForm("SetGroupBookingMode", "Main", FormMethod.Post, new {id = "groupBookingForm"})) { @Html.CheckBoxFor(m => m.IsInGroupBookingMode, new { onchange = "showSanduhr();this.form.submit();", id = "changeBookingModeCheckBox" }) @Html.LabelFor(m => m.IsInGroupBookingMode, new { id = "labelForChangeBookingModeCheckBox" }) @@ -69,8 +69,15 @@ };" /> + @{ + var shouldShowSingleBookingElements = "display: block"; - @using (Html.BeginForm("SelectSupportConcept", "Main", FormMethod.Post, new { id = "selectSCForm" })) + if (Model.IsInGroupBookingMode) + { + shouldShowSingleBookingElements = "display: none"; + } + } + @using (Html.BeginForm("SelectSupportConcept", "Main", FormMethod.Post, new { id = "selectSCForm", style= shouldShowSingleBookingElements })) { @@ -88,8 +95,15 @@
} + +
+ @Html.LabelFor(m => m.SelectedEmployeeOid) +
+ @Html.DropDownListFor(m => m.SelectedEmployeeOid, Model.EmployeeListItems, new { onchange = "setSelectedEmployee()", id = "employeesDropDown", @class = "dropdownlist-for" }) +
+
-
+
@using (Html.BeginForm("CreateServiceRecord", "Main", FormMethod.Post, new { id = "createSRForm" })) { @@ -273,8 +287,17 @@ + + @{ + var shouldShowServiceRecordList = "display: block"; - @using (Html.BeginForm("LoadServiceRecords", "Main", FormMethod.Post, new { id = "selectSCForm2" })) + if (Model.IsInGroupBookingMode && !Model.IsInEditingMode) + { + shouldShowServiceRecordList = "display: none"; + } + } + + @using (Html.BeginForm("LoadServiceRecords", "Main", FormMethod.Post, new { id = "selectSCForm2", style = shouldShowServiceRecordList })) {
@@ -292,22 +315,29 @@
-
+
@foreach(var record in Model.ServiceRecords) {
-
@@ -319,8 +349,8 @@ { } - @**@ - + + @**@ @{if((record.SignatureOid == null || record.SignatureOid.Equals("")) && Model.ShowSignature) @@ -534,6 +564,7 @@
@using (Html.BeginForm("DeleteServiceRecord", "Main", FormMethod.Post, new { id = "deletionForm" })) { + } @@ -1020,7 +1051,8 @@ setSelectedGroupServiceRecordUrl = '@Url.Action("SetSelectedGroupServiceRecord")'; resetEditingModeUrl = '@Url.Action("ResetEditingMode")'; loadCategoryAndDescriptionUrl = '@Url.Action("LoadCategoryAndDescription")'; - addEmployeesToGroupBookingUrl = '@Url.Action("AddEmployeesToGroupBooking")'; + addEmployeesToGroupBookingUrl = '@Url.Action("AddEmployeesToGroupBooking")'; + resetGroupBookingModeViaGETUrl = '@Url.Action("ResetGroupBookingModeViaGET")'; diff --git a/Service/ServiceContracts/ICustomerService.cs b/Service/ServiceContracts/ICustomerService.cs index 028de1fcf..034229975 100644 --- a/Service/ServiceContracts/ICustomerService.cs +++ b/Service/ServiceContracts/ICustomerService.cs @@ -700,5 +700,9 @@ namespace BeWo.Service.ServiceContracts [FaultContract(typeof(BeWoFault))] [OperationContract] List GetSupportConceptCostBearerRelationsById(IEnumerable relOids); + + [FaultContract(typeof(BeWoFault))] + [OperationContract] + List LoadCompactSupportConceptsById(IEnumerable pOids); } } \ No newline at end of file diff --git a/Service/ServiceImplementations/CustomerServiceImp.cs b/Service/ServiceImplementations/CustomerServiceImp.cs index 83e7a5fe1..a75fd6c54 100644 --- a/Service/ServiceImplementations/CustomerServiceImp.cs +++ b/Service/ServiceImplementations/CustomerServiceImp.cs @@ -3862,6 +3862,19 @@ namespace BeWo.Service.ServiceImplementations throw Utils.CreateBeWoFaultException(e); } } + + public List LoadCompactSupportConceptsById(IEnumerable pOids) + { + try + { + var originals = DAOFactory.GenericDAO.LoadByIDs(pOids); + return MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDCs(originals); + } + catch (Exception e) + { + throw Utils.CreateBeWoFaultException(e); + } + } } internal struct WohnheimbuchungsIntervallStruct