From 06c1503b290519d87626aca225d4b69af12808f9 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Mon, 28 Jun 2021 20:16:29 +0000 Subject: [PATCH] --- ayanova/devdocs/todo.txt | 14 +++- ayanova/src/views/acc-service-rate.vue | 4 +- ayanova/src/views/acc-tax-code.vue | 4 +- ayanova/src/views/acc-travel-rate.vue | 4 +- ayanova/src/views/adm-translation.vue | 2 +- ayanova/src/views/adm-user.vue | 2 +- ayanova/src/views/ay-report-edit.vue | 4 +- ayanova/src/views/cust-customer-note.vue | 2 +- ayanova/src/views/cust-customer.vue | 4 +- ayanova/src/views/cust-head-office.vue | 2 +- ayanova/src/views/cust-user.vue | 2 +- ayanova/src/views/home-memo.vue | 2 +- .../src/views/home-notify-subscription.vue | 2 +- ayanova/src/views/home-reminder.vue | 2 +- ayanova/src/views/inv-part-assembly.vue | 2 +- ayanova/src/views/inv-part-warehouse.vue | 2 +- ayanova/src/views/inv-part.vue | 2 +- ayanova/src/views/inv-purchase-order.vue | 2 +- ayanova/src/views/svc-contract.vue | 2 +- ayanova/src/views/svc-loaner.vue | 2 +- ayanova/src/views/svc-project.vue | 71 +++++++------------ ayanova/src/views/svc-unit-model.vue | 2 +- ayanova/src/views/svc-unit.vue | 2 +- ayanova/src/views/svc-workorder.vue | 2 +- ayanova/src/views/vendor.vue | 2 +- ayanova/src/views/widget.vue | 2 +- 26 files changed, 65 insertions(+), 78 deletions(-) diff --git a/ayanova/devdocs/todo.txt b/ayanova/devdocs/todo.txt index c2631541..5173c3a9 100644 --- a/ayanova/devdocs/todo.txt +++ b/ayanova/devdocs/todo.txt @@ -410,9 +410,17 @@ CURRENTLY DOING: 3891 3: Implement a workable duplication system SEE CASE 3891 for duplicate at client idea - Also this is a "3" because this idea rocks and I will likely need to remove duplicate route from every biz object at server and replace with dupe at client instead - actually should be quick and easy theoretically since it's a slight variation of the technique used to make new objects and then move to their id with data intact - and just setting a few values to 0 or null like concurrency/ id etc + + Tested on Project, works perfectly, also found some optimizations to make around new records in create and also found that new: true is unnecessarily being set on route + + todo: duplicate the duplicate stuff in Project on all other forms + - remove new: true from all places it currently appears, completely superflous + - rejig the formstate setting and object setting code for duplicate based on project + - in duplicate menu object creation add code from project to check if id is zero before adding it + - replace duplicate code with project version + - Remove at server duplicate route and de-document if found anywhere + - At server remove any now redundant code that was related to duplication + todo: how to directly open a workorder quickly when you know the wo number?? should be supported, otherwise you need to scroll around a list to find it which is fucked diff --git a/ayanova/src/views/acc-service-rate.vue b/ayanova/src/views/acc-service-rate.vue index be413df8..c4de3bcf 100644 --- a/ayanova/src/views/acc-service-rate.vue +++ b/ayanova/src/views/acc-service-rate.vue @@ -562,7 +562,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "service-rate-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": @@ -676,7 +676,7 @@ function generateMenu(vm) { }); } - if (vm.rights.change) { + if (vm.rights.change && vm.$route.params.recordid != 0) { menuOptions.menuItems.push({ title: "Duplicate", icon: "$ayiClone", diff --git a/ayanova/src/views/acc-tax-code.vue b/ayanova/src/views/acc-tax-code.vue index b4e2de23..cae1a4b4 100644 --- a/ayanova/src/views/acc-tax-code.vue +++ b/ayanova/src/views/acc-tax-code.vue @@ -519,7 +519,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "tax-code-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": @@ -633,7 +633,7 @@ function generateMenu(vm) { }); } - if (vm.rights.change) { + if (vm.rights.change && vm.$route.params.recordid != 0) { menuOptions.menuItems.push({ title: "Duplicate", icon: "$ayiClone", diff --git a/ayanova/src/views/acc-travel-rate.vue b/ayanova/src/views/acc-travel-rate.vue index b6b0f51d..77c62465 100644 --- a/ayanova/src/views/acc-travel-rate.vue +++ b/ayanova/src/views/acc-travel-rate.vue @@ -560,7 +560,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "travel-rate-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": @@ -674,7 +674,7 @@ function generateMenu(vm) { }); } - if (vm.rights.change) { + if (vm.rights.change && vm.$route.params.recordid != 0) { menuOptions.menuItems.push({ title: "Duplicate", icon: "$ayiClone", diff --git a/ayanova/src/views/adm-translation.vue b/ayanova/src/views/adm-translation.vue index 98c64fad..8b17984d 100644 --- a/ayanova/src/views/adm-translation.vue +++ b/ayanova/src/views/adm-translation.vue @@ -513,7 +513,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "adm-translation", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": diff --git a/ayanova/src/views/adm-user.vue b/ayanova/src/views/adm-user.vue index 038c8243..bf052611 100644 --- a/ayanova/src/views/adm-user.vue +++ b/ayanova/src/views/adm-user.vue @@ -926,7 +926,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "adm-user", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": diff --git a/ayanova/src/views/ay-report-edit.vue b/ayanova/src/views/ay-report-edit.vue index 696a605b..753a5684 100644 --- a/ayanova/src/views/ay-report-edit.vue +++ b/ayanova/src/views/ay-report-edit.vue @@ -1000,7 +1000,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "ay-report-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": @@ -1075,7 +1075,7 @@ function generateMenu(vm) { }); } - if (vm.rights.change) { + if (vm.rights.change && vm.$route.params.recordid != 0) { menuOptions.menuItems.push({ title: "Duplicate", icon: "$ayiClone", diff --git a/ayanova/src/views/cust-customer-note.vue b/ayanova/src/views/cust-customer-note.vue index 32c923fd..69637766 100644 --- a/ayanova/src/views/cust-customer-note.vue +++ b/ayanova/src/views/cust-customer-note.vue @@ -385,7 +385,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "customer-note-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; diff --git a/ayanova/src/views/cust-customer.vue b/ayanova/src/views/cust-customer.vue index 02399baa..c571160c 100644 --- a/ayanova/src/views/cust-customer.vue +++ b/ayanova/src/views/cust-customer.vue @@ -1357,7 +1357,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "customer-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": @@ -1488,7 +1488,7 @@ function generateMenu(vm) { }); } - if (vm.rights.change) { + if (vm.rights.change && vm.$route.params.recordid != 0) { menuOptions.menuItems.push({ title: "Duplicate", icon: "$ayiClone", diff --git a/ayanova/src/views/cust-head-office.vue b/ayanova/src/views/cust-head-office.vue index 2a0a6ed6..6e173b22 100644 --- a/ayanova/src/views/cust-head-office.vue +++ b/ayanova/src/views/cust-head-office.vue @@ -1261,7 +1261,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "head-office-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": diff --git a/ayanova/src/views/cust-user.vue b/ayanova/src/views/cust-user.vue index 17fd2654..4c18ca7f 100644 --- a/ayanova/src/views/cust-user.vue +++ b/ayanova/src/views/cust-user.vue @@ -931,7 +931,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "adm-user", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": diff --git a/ayanova/src/views/home-memo.vue b/ayanova/src/views/home-memo.vue index d69ca87a..41bee1f2 100644 --- a/ayanova/src/views/home-memo.vue +++ b/ayanova/src/views/home-memo.vue @@ -553,7 +553,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "memo-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); case "report": diff --git a/ayanova/src/views/home-notify-subscription.vue b/ayanova/src/views/home-notify-subscription.vue index 93e33b29..8ca7fa25 100644 --- a/ayanova/src/views/home-notify-subscription.vue +++ b/ayanova/src/views/home-notify-subscription.vue @@ -627,7 +627,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "home-notify-subscription", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": diff --git a/ayanova/src/views/home-reminder.vue b/ayanova/src/views/home-reminder.vue index 72acd0b8..7bc176df 100644 --- a/ayanova/src/views/home-reminder.vue +++ b/ayanova/src/views/home-reminder.vue @@ -506,7 +506,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "reminder-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": diff --git a/ayanova/src/views/inv-part-assembly.vue b/ayanova/src/views/inv-part-assembly.vue index b4307f5d..eaf2eeab 100644 --- a/ayanova/src/views/inv-part-assembly.vue +++ b/ayanova/src/views/inv-part-assembly.vue @@ -673,7 +673,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "part-assembly-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": diff --git a/ayanova/src/views/inv-part-warehouse.vue b/ayanova/src/views/inv-part-warehouse.vue index ca533262..7c651ef1 100644 --- a/ayanova/src/views/inv-part-warehouse.vue +++ b/ayanova/src/views/inv-part-warehouse.vue @@ -455,7 +455,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "inv-part-warehouse", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": diff --git a/ayanova/src/views/inv-part.vue b/ayanova/src/views/inv-part.vue index f7dd40df..08362a34 100644 --- a/ayanova/src/views/inv-part.vue +++ b/ayanova/src/views/inv-part.vue @@ -670,7 +670,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "inv-part", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": diff --git a/ayanova/src/views/inv-purchase-order.vue b/ayanova/src/views/inv-purchase-order.vue index f5419518..c6bd9b5c 100644 --- a/ayanova/src/views/inv-purchase-order.vue +++ b/ayanova/src/views/inv-purchase-order.vue @@ -1621,7 +1621,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "project-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": diff --git a/ayanova/src/views/svc-contract.vue b/ayanova/src/views/svc-contract.vue index ce00fa3c..dceb7170 100644 --- a/ayanova/src/views/svc-contract.vue +++ b/ayanova/src/views/svc-contract.vue @@ -1831,7 +1831,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "contract-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": diff --git a/ayanova/src/views/svc-loaner.vue b/ayanova/src/views/svc-loaner.vue index 01b759b4..56c09555 100644 --- a/ayanova/src/views/svc-loaner.vue +++ b/ayanova/src/views/svc-loaner.vue @@ -798,7 +798,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "loan-unit-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": diff --git a/ayanova/src/views/svc-project.vue b/ayanova/src/views/svc-project.vue index 48d203f3..40840bee 100644 --- a/ayanova/src/views/svc-project.vue +++ b/ayanova/src/views/svc-project.vue @@ -196,31 +196,34 @@ export default { vm.formState.readOnly = !vm.rights.change; window.$gz.eventBus.$on("menu-click", clickHandler); + let setDirty = false; + let setValid = true; + //id 0 means create a new record don't load one if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { //yes, no need to fetch it this.obj = this.$route.params.obj; - window.$gz.form.setFormState({ - vm: vm, - loading: false - }); } else { await vm.getDataFromApi(vm.$route.params.recordid); //let getdata handle loading } } else { - window.$gz.form.setFormState({ - vm: vm, - loading: false - }); + //Might be a duplicate and contain another record + if (this.$route.params.obj) { + this.obj = this.$route.params.obj; + this.obj.concurrency = undefined; + this.obj.id = 0; + setDirty = true; + } } + window.$gz.form.setFormState({ vm: vm, - dirty: false, - valid: true + loading: false, + dirty: setDirty, + valid: setValid }); - generateMenu(vm); } catch (error) { window.$gz.errorHandler.handleFormError(error, vm); @@ -477,41 +480,16 @@ export default { } }, async duplicate() { - let vm = this; - if (!vm.canDuplicate || vm.$route.params.recordid == 0) { - return; - } - window.$gz.form.setFormState({ - vm: vm, - loading: true - }); - let url = API_BASE_URL + "duplicate/" + vm.$route.params.recordid; - - try { - window.$gz.form.deleteAllErrorBoxErrors(vm); - let res = await window.$gz.api.upsert(url); - if (res.error) { - vm.formState.serverError = res.error; - window.$gz.form.setErrorBoxErrors(vm); - } else { - //Navigate to new record - this.$router.push({ - name: "project-edit", - params: { - recordid: res.data.id, - obj: res.data // Pass data object to new form - } - }); + //Navigate to new record + this.$router.push({ + name: "project-edit", + params: { + recordid: 0, + obj: this.obj } - } catch (ex) { - window.$gz.errorHandler.handleFormError(ex, vm); - } finally { - window.$gz.form.setFormState({ - vm: vm, - loading: false - }); - } + }); } + //end methods } }; @@ -535,7 +513,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "project-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": @@ -649,7 +627,8 @@ function generateMenu(vm) { }); } - if (vm.rights.change) { + if (vm.rights.change && vm.$route.params.recordid != 0) { + //dupe do this menuOptions.menuItems.push({ title: "Duplicate", icon: "$ayiClone", diff --git a/ayanova/src/views/svc-unit-model.vue b/ayanova/src/views/svc-unit-model.vue index 223ba43a..d483b03c 100644 --- a/ayanova/src/views/svc-unit-model.vue +++ b/ayanova/src/views/svc-unit-model.vue @@ -646,7 +646,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "unit-model-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": diff --git a/ayanova/src/views/svc-unit.vue b/ayanova/src/views/svc-unit.vue index 27b42b2a..5aee9282 100644 --- a/ayanova/src/views/svc-unit.vue +++ b/ayanova/src/views/svc-unit.vue @@ -1210,7 +1210,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "unit-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": diff --git a/ayanova/src/views/svc-workorder.vue b/ayanova/src/views/svc-workorder.vue index ca5e2916..5d4c272e 100644 --- a/ayanova/src/views/svc-workorder.vue +++ b/ayanova/src/views/svc-workorder.vue @@ -1704,7 +1704,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "workorder-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": diff --git a/ayanova/src/views/vendor.vue b/ayanova/src/views/vendor.vue index 6be2c466..a3214383 100644 --- a/ayanova/src/views/vendor.vue +++ b/ayanova/src/views/vendor.vue @@ -1041,7 +1041,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "vendor-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate": diff --git a/ayanova/src/views/widget.vue b/ayanova/src/views/widget.vue index 4b16b625..555d4778 100644 --- a/ayanova/src/views/widget.vue +++ b/ayanova/src/views/widget.vue @@ -601,7 +601,7 @@ async function clickHandler(menuItem) { case "new": m.vm.$router.push({ name: "widget-edit", - params: { recordid: 0, new: true } + params: { recordid: 0 } }); break; case "duplicate":