diff --git a/ayanova/devdocs/todo.txt b/ayanova/devdocs/todo.txt index d60ba97a..07a213cc 100644 --- a/ayanova/devdocs/todo.txt +++ b/ayanova/devdocs/todo.txt @@ -428,6 +428,8 @@ CURRENTLY DOING: also any redundant support code that was related to duplication NOT THE FOLLOWING THOUGH which are too complex to dupe at client Translation, User, Purchaseorder, Contact, + - New name should reflect it's a copy so user can see something changed + otherwise hard to see it's a dupe except for the url bar @@ -462,6 +464,21 @@ todo: purchase order dupe code at server is a bit sus. is affecting inventory on duplicate?? Look into it. +todo: work order remove all option - workorder duplicate brought up that it would be handy to be able to remove *all* of a grandchild collection + e.g. Scheduled users has a "Mark All for deletion" menu option to quickly remove a bunch + See item immediately below about this + maybe it's a menu option at top to just quickly remove all labor or whatever if it's a duplicate? + +todo: work order reset dates - for duplicate scenario and to replace templates + some kind of option that changes all dates to move them forward or center around a date + might need to capture a created date in original wo + then can use that date to move all other dates relatively speaking + Not sure about this one, but it will be an issue + see how templates work in v7 as an idea + if they don't do labor and parts then having the ability to remove all parts or all labor from a work order would be the dandiest way to resolve this + so users can duplicate than slice out quickly the bits they don't want and bob's your lobster!!! + + 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-bank.vue b/ayanova/src/views/acc-service-bank.vue index 478d940f..c3f48620 100644 --- a/ayanova/src/views/acc-service-bank.vue +++ b/ayanova/src/views/acc-service-bank.vue @@ -124,7 +124,7 @@ export default { //NOTE: THIS FORM IS CREATE ONLY NO OPEN OLD ONES SO... - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //Ok, we're here to *view* an existing record //so we must fetch the deets now diff --git a/ayanova/src/views/acc-service-rate.vue b/ayanova/src/views/acc-service-rate.vue index e45ff510..1b3b5539 100644 --- a/ayanova/src/views/acc-service-rate.vue +++ b/ayanova/src/views/acc-service-rate.vue @@ -220,7 +220,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/acc-tax-code.vue b/ayanova/src/views/acc-tax-code.vue index 6a3be2d2..bf4d2392 100644 --- a/ayanova/src/views/acc-tax-code.vue +++ b/ayanova/src/views/acc-tax-code.vue @@ -182,7 +182,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/acc-travel-rate.vue b/ayanova/src/views/acc-travel-rate.vue index 41b4ed19..2dd803ee 100644 --- a/ayanova/src/views/acc-travel-rate.vue +++ b/ayanova/src/views/acc-travel-rate.vue @@ -218,7 +218,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/adm-translation.vue b/ayanova/src/views/adm-translation.vue index 8b17984d..b47e5e57 100644 --- a/ayanova/src/views/adm-translation.vue +++ b/ayanova/src/views/adm-translation.vue @@ -162,7 +162,7 @@ export default { vm.formState.readOnly = !vm.rights.change; window.$gz.eventBus.$on("menu-click", clickHandler); - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/adm-user.vue b/ayanova/src/views/adm-user.vue index bf052611..c01a9252 100644 --- a/ayanova/src/views/adm-user.vue +++ b/ayanova/src/views/adm-user.vue @@ -433,7 +433,7 @@ export default { vm.formState.readOnly = !vm.rights.change; window.$gz.eventBus.$on("menu-click", clickHandler); - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/ay-report-edit.vue b/ayanova/src/views/ay-report-edit.vue index 29c658c0..c08b6abd 100644 --- a/ayanova/src/views/ay-report-edit.vue +++ b/ayanova/src/views/ay-report-edit.vue @@ -317,7 +317,7 @@ export default { vm.formState.readOnly = !vm.rights.change; window.$gz.eventBus.$on("menu-click", clickHandler); - // //id 0 means create a new record don't load one + // //id 0 means create or duplicate to new // if (vm.$route.params.recordid != 0) { // //is there already an obj from a prior operation? // if (vm.$route.params.obj) { @@ -347,7 +347,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/cust-customer-note.vue b/ayanova/src/views/cust-customer-note.vue index 69637766..6375a515 100644 --- a/ayanova/src/views/cust-customer-note.vue +++ b/ayanova/src/views/cust-customer-note.vue @@ -85,7 +85,7 @@ export default { vm.rights = window.$gz.role.getRights(window.$gz.type.CustomerNote); vm.formState.readOnly = !vm.rights.change; window.$gz.eventBus.$on("menu-click", clickHandler); - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/cust-customer.vue b/ayanova/src/views/cust-customer.vue index c471a1ac..da2a929c 100644 --- a/ayanova/src/views/cust-customer.vue +++ b/ayanova/src/views/cust-customer.vue @@ -767,7 +767,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/cust-head-office.vue b/ayanova/src/views/cust-head-office.vue index b7fc6355..499b1377 100644 --- a/ayanova/src/views/cust-head-office.vue +++ b/ayanova/src/views/cust-head-office.vue @@ -677,7 +677,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/cust-user.vue b/ayanova/src/views/cust-user.vue index 4c18ca7f..de308ab9 100644 --- a/ayanova/src/views/cust-user.vue +++ b/ayanova/src/views/cust-user.vue @@ -419,7 +419,7 @@ export default { vm.formState.readOnly = !vm.rights.change; window.$gz.eventBus.$on("menu-click", clickHandler); - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/customer-csr-edit.vue b/ayanova/src/views/customer-csr-edit.vue index c6b2c6c4..941b43af 100644 --- a/ayanova/src/views/customer-csr-edit.vue +++ b/ayanova/src/views/customer-csr-edit.vue @@ -276,7 +276,7 @@ export default { vm.formState.readOnly = !vm.rights.change || vm.obj.status != 0; window.$gz.eventBus.$on("menu-click", clickHandler); - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/home-memo.vue b/ayanova/src/views/home-memo.vue index 41bee1f2..2cbfc44e 100644 --- a/ayanova/src/views/home-memo.vue +++ b/ayanova/src/views/home-memo.vue @@ -184,7 +184,7 @@ export default { vm.formState.readOnly = false; //can always do things with your own memos window.$gz.eventBus.$on("menu-click", clickHandler); - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { vm.composing = false; //is there already an obj from a prior operation? diff --git a/ayanova/src/views/home-notify-subscription.vue b/ayanova/src/views/home-notify-subscription.vue index cce5ff97..1267c309 100644 --- a/ayanova/src/views/home-notify-subscription.vue +++ b/ayanova/src/views/home-notify-subscription.vue @@ -203,7 +203,7 @@ export default { vm.formState.readOnly = !vm.rights.change; window.$gz.eventBus.$on("menu-click", clickHandler); - // //id 0 means create a new record don't load one + // //id 0 means create or duplicate to new // if (vm.$route.params.recordid != 0) { // //is there already an obj from a prior operation? // if (this.$route.params.obj) { @@ -227,7 +227,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/home-reminder.vue b/ayanova/src/views/home-reminder.vue index aecf728e..1ea6751b 100644 --- a/ayanova/src/views/home-reminder.vue +++ b/ayanova/src/views/home-reminder.vue @@ -155,7 +155,7 @@ export default { vm.formState.readOnly = !vm.rights.change; window.$gz.eventBus.$on("menu-click", clickHandler); - // //id 0 means create a new record don't load one + // //id 0 means create or duplicate to new // if (vm.$route.params.recordid != 0) { // //is there already an obj from a prior operation? // if (this.$route.params.obj) { @@ -192,7 +192,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/home-review.vue b/ayanova/src/views/home-review.vue index f644252f..af088f00 100644 --- a/ayanova/src/views/home-review.vue +++ b/ayanova/src/views/home-review.vue @@ -194,7 +194,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/home-user-settings.vue b/ayanova/src/views/home-user-settings.vue index 0734fbe0..5935f219 100644 --- a/ayanova/src/views/home-user-settings.vue +++ b/ayanova/src/views/home-user-settings.vue @@ -207,7 +207,7 @@ export default { //SO NOT FOR EDITING OTHER USERS, WILL ASSUME THE USER EDITOR FORM FOR MANAGEMENT WILL HAVE A COMPACT VERSION //OF THESE SAME FIELDS FOR THAT PURPOSE //SO ALWAYS USER CURRENT LOGGED IN USER ID FOR THIS - //id 0 means create a new record don't load one but thats not applicable here + //id 0 means create or duplicate to new but thats not applicable here await vm.getDataFromApi(); } catch (err) { diff --git a/ayanova/src/views/inv-part-assembly.vue b/ayanova/src/views/inv-part-assembly.vue index 827a5aa3..1d72fe32 100644 --- a/ayanova/src/views/inv-part-assembly.vue +++ b/ayanova/src/views/inv-part-assembly.vue @@ -292,7 +292,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/inv-part-serials.vue b/ayanova/src/views/inv-part-serials.vue index 5d3b39b8..d6e5398a 100644 --- a/ayanova/src/views/inv-part-serials.vue +++ b/ayanova/src/views/inv-part-serials.vue @@ -89,7 +89,7 @@ export default { vm.formState.readOnly = !vm.rights.change; window.$gz.eventBus.$on("menu-click", clickHandler); - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid == 0) { throw "Invalid partid"; } else { diff --git a/ayanova/src/views/inv-part-stock-levels.vue b/ayanova/src/views/inv-part-stock-levels.vue index 4de23a45..b4da63f9 100644 --- a/ayanova/src/views/inv-part-stock-levels.vue +++ b/ayanova/src/views/inv-part-stock-levels.vue @@ -118,7 +118,7 @@ export default { vm.formState.readOnly = !vm.rights.change; window.$gz.eventBus.$on("menu-click", clickHandler); - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid == 0) { throw "Invalid partid"; } else { diff --git a/ayanova/src/views/inv-part-warehouse.vue b/ayanova/src/views/inv-part-warehouse.vue index e01fd406..de06add3 100644 --- a/ayanova/src/views/inv-part-warehouse.vue +++ b/ayanova/src/views/inv-part-warehouse.vue @@ -123,7 +123,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/inv-part.vue b/ayanova/src/views/inv-part.vue index beaa2448..1a28d0b9 100644 --- a/ayanova/src/views/inv-part.vue +++ b/ayanova/src/views/inv-part.vue @@ -327,7 +327,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/inv-purchase-order.vue b/ayanova/src/views/inv-purchase-order.vue index f12cc9cc..eca3c80b 100644 --- a/ayanova/src/views/inv-purchase-order.vue +++ b/ayanova/src/views/inv-purchase-order.vue @@ -842,7 +842,7 @@ export default { vm.formState.readOnly = !vm.rights.change; window.$gz.eventBus.$on("menu-click", clickHandler); - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/svc-contract.vue b/ayanova/src/views/svc-contract.vue index d2c56e59..a53c794e 100644 --- a/ayanova/src/views/svc-contract.vue +++ b/ayanova/src/views/svc-contract.vue @@ -1335,7 +1335,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/svc-csr.vue b/ayanova/src/views/svc-csr.vue index d78c3dc8..62251d18 100644 --- a/ayanova/src/views/svc-csr.vue +++ b/ayanova/src/views/svc-csr.vue @@ -270,7 +270,7 @@ export default { vm.formState.readOnly = !vm.rights.change || vm.obj.status != 0; window.$gz.eventBus.$on("menu-click", clickHandler); - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/svc-loaner.vue b/ayanova/src/views/svc-loaner.vue index 80e5fc68..403062c9 100644 --- a/ayanova/src/views/svc-loaner.vue +++ b/ayanova/src/views/svc-loaner.vue @@ -446,7 +446,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/svc-project.vue b/ayanova/src/views/svc-project.vue index 40840bee..e13f5195 100644 --- a/ayanova/src/views/svc-project.vue +++ b/ayanova/src/views/svc-project.vue @@ -199,7 +199,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/svc-task-group.vue b/ayanova/src/views/svc-task-group.vue index 8c3b44b6..69659716 100644 --- a/ayanova/src/views/svc-task-group.vue +++ b/ayanova/src/views/svc-task-group.vue @@ -238,7 +238,7 @@ export default { vm.formState.readOnly = !vm.rights.change; window.$gz.eventBus.$on("menu-click", clickHandler); - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/svc-unit-model.vue b/ayanova/src/views/svc-unit-model.vue index 92f7b2d3..a078bdad 100644 --- a/ayanova/src/views/svc-unit-model.vue +++ b/ayanova/src/views/svc-unit-model.vue @@ -283,7 +283,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/svc-unit.vue b/ayanova/src/views/svc-unit.vue index 3198aefc..862fed82 100644 --- a/ayanova/src/views/svc-unit.vue +++ b/ayanova/src/views/svc-unit.vue @@ -740,7 +740,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/svc-work-order-item-priorities-edit.vue b/ayanova/src/views/svc-work-order-item-priorities-edit.vue index 47670bcc..a3cc2d6e 100644 --- a/ayanova/src/views/svc-work-order-item-priorities-edit.vue +++ b/ayanova/src/views/svc-work-order-item-priorities-edit.vue @@ -79,7 +79,7 @@ export default { vm.formState.readOnly = !vm.rights.change; window.$gz.eventBus.$on("menu-click", clickHandler); - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/svc-work-order-item-status-edit.vue b/ayanova/src/views/svc-work-order-item-status-edit.vue index 0a48eec2..fb44ab7e 100644 --- a/ayanova/src/views/svc-work-order-item-status-edit.vue +++ b/ayanova/src/views/svc-work-order-item-status-edit.vue @@ -96,7 +96,7 @@ export default { vm.formState.readOnly = !vm.rights.change; window.$gz.eventBus.$on("menu-click", clickHandler); - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/svc-work-order-status-edit.vue b/ayanova/src/views/svc-work-order-status-edit.vue index 5f6f7ac6..745bdca1 100644 --- a/ayanova/src/views/svc-work-order-status-edit.vue +++ b/ayanova/src/views/svc-work-order-status-edit.vue @@ -140,7 +140,7 @@ export default { vm.formState.readOnly = !vm.rights.change; window.$gz.eventBus.$on("menu-click", clickHandler); - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/svc-workorder.vue b/ayanova/src/views/svc-workorder.vue index abff6bb5..974df54b 100644 --- a/ayanova/src/views/svc-workorder.vue +++ b/ayanova/src/views/svc-workorder.vue @@ -66,9 +66,12 @@ export default { //set base rights vm.rights = window.$gz.role.getRights(window.$gz.type.WorkOrder); window.$gz.eventBus.$on("menu-click", clickHandler); + let setDirty = false; + let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { + //open existing path //is there already an obj from a prior operation? if (this.$route.params.obj) { //yes, no need to fetch it @@ -82,19 +85,88 @@ export default { await vm.getDataFromApi(vm.$route.params.recordid); //let getdata handle loading } } else { - //NEW - this.formState.loading = false; - this.formState.ready = true; - //trigger rule breaking / validation - this.$nextTick(() => { - this.obj.customerId = null; - this.fieldValueChanged(`customerId`); - }); + //new path + if (this.$route.params.obj) { + //DUPLICATE + this.obj = this.$route.params.obj; + this.obj.concurrency = undefined; + this.obj.id = 0; + this.obj.serial = 0; + this.obj.isDirty = true; + vm.obj.items.forEach(z => { + z.id = 0; + z.concurrency = undefined; + z.workOrderId = 0; + z.isDirty = true; + z.expenses.forEach(x => { + x.id = 0; + x.concurrency = undefined; + x.isDirty = true; + }); + z.labors.forEach(x => { + x.id = 0; + x.concurrency = undefined; + x.isDirty = true; + }); + z.loans.forEach(x => { + x.id = 0; + x.concurrency = undefined; + x.isDirty = true; + }); + z.parts.forEach(x => { + x.id = 0; + x.concurrency = undefined; + x.isDirty = true; + }); + z.partRequests.forEach(x => { + x.id = 0; + x.concurrency = undefined; + x.isDirty = true; + }); + z.scheduledUsers.forEach(x => { + x.id = 0; + x.concurrency = undefined; + x.isDirty = true; + }); + z.tasks.forEach(x => { + x.id = 0; + x.concurrency = undefined; + x.isDirty = true; + }); + z.travels.forEach(x => { + x.id = 0; + x.concurrency = undefined; + x.isDirty = true; + }); + z.units.forEach(x => { + x.id = 0; + x.concurrency = undefined; + x.isDirty = true; + }); + z.outsideServices.forEach(x => { + x.id = 0; + x.concurrency = undefined; + x.isDirty = true; + }); + }); + setDirty = true; + } else { + //NEW + this.formState.loading = false; + this.formState.ready = true; + //trigger rule breaking / validation + this.$nextTick(() => { + this.obj.customerId = null; + this.fieldValueChanged(`customerId`); + }); + } } + window.$gz.form.setFormState({ vm: vm, - dirty: false, - valid: true + loading: false, + dirty: setDirty, + valid: setValid }); //update which areas are available to user and force generate menu @@ -645,41 +717,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: "workorder-edit", - params: { - recordid: res.data.id, - obj: res.data // Pass data object to new form - } - }); + //Navigate to new record + this.$router.push({ + name: "workorder-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 } }; diff --git a/ayanova/src/views/vendor.vue b/ayanova/src/views/vendor.vue index 56e0d82e..e24e41e7 100644 --- a/ayanova/src/views/vendor.vue +++ b/ayanova/src/views/vendor.vue @@ -602,7 +602,7 @@ export default { let setDirty = false; let setValid = true; - //id 0 means create a new record don't load one + //id 0 means create or duplicate to new if (vm.$route.params.recordid != 0) { //is there already an obj from a prior operation? if (this.$route.params.obj) { diff --git a/ayanova/src/views/widget.vue b/ayanova/src/views/widget.vue index 30b712ac..2af3a7fb 100644 --- a/ayanova/src/views/widget.vue +++ b/ayanova/src/views/widget.vue @@ -250,37 +250,75 @@ export default { vm.formState.readOnly = !vm.rights.change; window.$gz.eventBus.$on("menu-click", clickHandler); - //id 0 means create a new record don't load one + // //id 0 means create or duplicate to new + // 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 { + // //---------------------------------------------------------- + // //NEW OBJECT DEFAULTS + // let defaultDates = window.$gz.locale.defaultStartDateTime( + // window.$gz.type.Widget + // ); + // vm.obj.startDate = defaultDates.start; + // vm.obj.endDate = defaultDates.end; + // //---------------------------------------------------------- + // window.$gz.form.setFormState({ + // vm: vm, + // loading: false + // }); + // } + // window.$gz.form.setFormState({ + // vm: vm, + // dirty: false, + // valid: true + // }); + + let setDirty = false; + let setValid = true; + + //id 0 means create or duplicate to new 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 { - //---------------------------------------------------------- - //NEW OBJECT DEFAULTS - let defaultDates = window.$gz.locale.defaultStartDateTime( - window.$gz.type.Widget - ); - vm.obj.startDate = defaultDates.start; - vm.obj.endDate = defaultDates.end; - //---------------------------------------------------------- - 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; + } else { + //---------------------------------------------------------- + //NEW OBJECT DEFAULTS + let defaultDates = window.$gz.locale.defaultStartDateTime( + window.$gz.type.Widget + ); + vm.obj.startDate = defaultDates.start; + vm.obj.endDate = defaultDates.end; + //---------------------------------------------------------- + } } + window.$gz.form.setFormState({ vm: vm, - dirty: false, - valid: true + loading: false, + dirty: setDirty, + valid: setValid }); generateMenu(vm); @@ -544,40 +582,14 @@ 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: "widget-edit", - params: { - recordid: res.data.id, - obj: res.data // Pass data object to new form - } - }); + //Navigate to new record + this.$router.push({ + name: "widget-edit", + params: { + recordid: 0, + obj: this.obj } - } catch (ex) { - window.$gz.errorHandler.handleFormError(ex, vm); - } finally { - window.$gz.form.setFormState({ - vm: vm, - loading: false - }); - } + }); } } };