From a046322b1456a03b9414e740e79276e4cfe0148a Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Tue, 13 Apr 2021 00:29:42 +0000 Subject: [PATCH] --- ayanova/devdocs/todo.txt | 9 ++- ayanova/src/components/work-order-items.vue | 4 +- ayanova/src/components/work-order-state.vue | 4 +- ayanova/src/views/svc-workorder.vue | 73 +++++++++++++++------ 4 files changed, 65 insertions(+), 25 deletions(-) diff --git a/ayanova/devdocs/todo.txt b/ayanova/devdocs/todo.txt index 8df60408..75f1d5ea 100644 --- a/ayanova/devdocs/todo.txt +++ b/ayanova/devdocs/todo.txt @@ -60,7 +60,7 @@ todo: cleanup unnecessary use of a ayatype access inside the Methods of objects todo: use const, not let unless need to reassign the variable Going to need a case by case through all uses but it's a very important precaution so code it that way now for all new code - + todo: gzdecimal triggering dirty just by clicking into and out of a field witha value in it. also, it sometimes shows without the decimal then with the decimal for editing then without, it's crazy the decimal thing is probbly what's triggering the dirty change. @@ -226,6 +226,9 @@ todo: many biz objects are not using new PUT methodology CURRENTLY DOING: make from new + current issues: + setting to locked state does not lock in UI even after save + I'm thinking it should lock after save but not before on selection and add to wo BIG PICTURE STUFF - ability to create from nothing implement whatever is minimally necessary to get it to work and do full crud test at all layers @@ -239,6 +242,10 @@ BIG PICTURE STUFF CURRENT ACTIONABLE TODOS +todo: if islockedatserver is true I am still attempting to support editing, but it's a bit mixed up as the user would need to set the status to an unlocked state as well + current plan sucks. Instead it should be treated entirely as readonly if islocked at server with the sole exception of the state so the user is forced to + set an unlocked status, SAVE, *THEN* then can edit at will. + Trying to support both at once would be a mess. todo: need to add a popup error if attempting to save from locked to locked state and there are other changes that need to be saved (or let error from server handle it?? Not a first class UI experience though and might be a quite common mistake) diff --git a/ayanova/src/components/work-order-items.vue b/ayanova/src/components/work-order-items.vue index 54907c80..9d5c1557 100644 --- a/ayanova/src/components/work-order-items.vue +++ b/ayanova/src/components/work-order-items.vue @@ -311,7 +311,7 @@ and it's probably not a big list to fill anyway }, canAdd: function() { return ( - !this.value.isLockedAtServer && + !this.pvm.formState.readOnly && this.pvm.rights.change && this.pvm.subRights.items.create ); @@ -319,7 +319,7 @@ and it's probably not a big list to fill anyway canDelete: function() { return ( this.activeItemIndex != null && - !this.value.isLockedAtServer && + !this.pvm.formState.readOnly && this.pvm.rights.change && this.pvm.subRights.items.delete ); diff --git a/ayanova/src/components/work-order-state.vue b/ayanova/src/components/work-order-state.vue index 88cf36c2..b2647e31 100644 --- a/ayanova/src/components/work-order-state.vue +++ b/ayanova/src/components/work-order-state.vue @@ -111,8 +111,10 @@ export default { userId: window.$gz.store.state.userId, created: window.$gz.locale.nowUTC8601String() }); + //flag header itself as dirty - this.value.isDirty = true; + //this.value.isDirty = true; //Not sure why this is here + //flag form dirty this.pvm.formState.dirty = true; } diff --git a/ayanova/src/views/svc-workorder.vue b/ayanova/src/views/svc-workorder.vue index 299d57b5..0aa5fc32 100644 --- a/ayanova/src/views/svc-workorder.vue +++ b/ayanova/src/views/svc-workorder.vue @@ -53,7 +53,7 @@ export default { GzWoItems }, async created() { - let vm = this; + const vm = this; try { await initForm(vm); @@ -90,7 +90,7 @@ export default { //preset object so do things normally done in getdata generateMenu(vm); //update which areas are available to user - setSubRights(vm); + setAllRights(vm); } catch (error) { window.$gz.errorHandler.handleFormError(error, vm); } finally { @@ -258,7 +258,7 @@ export default { } //enable / disable save button - if (val.dirty && val.valid && !val.readOnly) { + if (val.dirty && val.valid) { window.$gz.eventBus.$emit("menu-enable-item", FORM_KEY + ":save"); } else { window.$gz.eventBus.$emit("menu-disable-item", FORM_KEY + ":save"); @@ -290,8 +290,8 @@ export default { if (this.obj.states != null && this.obj.states.length > 0) { //find it in the status collection //and return here - let laststate = this.obj.states[this.obj.states.length - 1]; - let found = this.selectLists.wostatus.find( + const laststate = this.obj.states[this.obj.states.length - 1]; + const found = this.selectLists.wostatus.find( z => z.id == laststate.workOrderStatusId ); if (found) { @@ -341,14 +341,14 @@ export default { fieldValueChanged(ref) { if ( this.formState.ready && - !this.formState.loading && - !this.formState.readOnly + !this.formState.loading + //&& !this.formState.readOnly //commented out to not affect state setting, I think it's redundant ) { window.$gz.form.fieldValueChanged(this, ref); } }, async getDataFromApi(recordId) { - let vm = this; + const vm = this; window.$gz.form.setFormState({ vm: vm, loading: true @@ -356,11 +356,11 @@ export default { if (!recordId) { throw new Error(FORM_KEY + "::getDataFromApi -> Missing recordID!"); } - let url = API_BASE_URL + recordId; + const url = API_BASE_URL + recordId; try { window.$gz.form.deleteAllErrorBoxErrors(vm); - let res = await window.$gz.api.get(url); + const res = await window.$gz.api.get(url); if (res.error) { //Not found? @@ -374,7 +374,7 @@ export default { //modify the menu as necessary generateMenu(vm); //update which areas are available to user - setSubRights(vm); + setAllRights(vm); //Update the form status window.$gz.form.setFormState({ @@ -394,7 +394,7 @@ export default { } }, async submit() { - let vm = this; + const vm = this; if (vm.canSave == false) { return; } @@ -404,7 +404,7 @@ export default { vm: vm, loading: true }); - //let url = API_BASE_URL; // + vm.$route.params.recordid; + //const url = API_BASE_URL; // + vm.$route.params.recordid; //clear any errors vm might be around from previous submit window.$gz.form.deleteAllErrorBoxErrors(vm); @@ -419,6 +419,7 @@ export default { //items in correct order //######################################################## let noProblem = true; + const isPost = vm.obj.id == 0; //UNSAVED HEADER MUST BE FIRST //(otherwise there's nothing to hang the other things off of) @@ -433,6 +434,9 @@ export default { if (this.obj.isLockedAtServer) { noProblem = await saveState(vm); stateSaved = true; + //update which areas are available to user + //which may have changed due to state being saved (saveState sets the current islocked value) + setAllRights(vm); } //############# DELETE GRAPH ############### @@ -464,10 +468,12 @@ export default { //in case it locks or is completed if (!stateSaved && noProblem) { noProblem = await saveState(vm); + setAllRights(vm); } //## ALL PARTIAL UPDATES SUCCEEDED if (!noProblem) { + console.error("noProblem is not true, error!"); //this assumes error is already displayed from save op window.$gz.form.setFormState({ vm: vm, @@ -475,11 +481,23 @@ export default { valid: false }); } else { - window.$gz.form.setFormState({ - vm: vm, - dirty: false, - valid: true - }); + if (isPost) { + //nav to id'd url + + this.$router.push({ + name: "workorder-edit", + params: { + recordid: vm.obj.id, + obj: vm.obj // Pass data object to new form + } + }); + } else { + window.$gz.form.setFormState({ + vm: vm, + dirty: false, + valid: true + }); + } } //TODO: Nav to this again if it's a post @@ -646,7 +664,7 @@ async function saveState(vm) { //CHANGED? let totalItems = vm.obj.states.length; if (totalItems == 0) { - return; + return true; } for (let i = 0; i < totalItems; i++) { let o = vm.obj.states[i]; @@ -658,6 +676,7 @@ async function saveState(vm) { return false; } else { vm.obj.states[i] = res.data; + //set locked status of entire wo now vm.obj.isLockedAtServer = vm.currentState.locked; } @@ -809,10 +828,22 @@ function displayResError(vm, res) { ///////////////////////////// // // -function setSubRights(vm) { +function setAllRights(vm) { //determine rights to each which sections are hidden due to form customized out or rights / roles //todo: determine this and set accordingly, for now all set to available true during init - //## NOTE: these are subrights only, descendants still need to first check if workorder isLockedAtServer and rights are read only etc before this level is checked + //## NOTE: these are subrights only, readOnly overrides all + const readOnlyBefore = vm.formState.readOnly; + if (vm.obj.isLockedAtServer) { + vm.formState.readOnly = true; + } else { + //state may have changed to open so set rights again if allowed here + vm.formState.readOnly = !vm.rights.change; + } + + if (readOnlyBefore != vm.formState.readOnly) { + generateMenu(vm); + } + /* */ }