diff --git a/ayanova/devdocs/todo.txt b/ayanova/devdocs/todo.txt index 4563cba5..51f7eb25 100644 --- a/ayanova/devdocs/todo.txt +++ b/ayanova/devdocs/todo.txt @@ -348,7 +348,7 @@ CURRENTLY DOING: labors Test by changing customer or contract and save should show new alert notes (same as done in svc-workorder.vue line 947 with labor, replicate that shit everywhere) - CHANGED PUT ITEMS: expenses, workorder header, loans,outsideservice,parts, scheduledusers + CHANGED PUT ITEMS: header plus all children of woitem but not woitem (only excluded one) todo: check contract expiry for applying!! diff --git a/ayanova/src/views/svc-workorder.vue b/ayanova/src/views/svc-workorder.vue index 2c9ca2d5..41d00835 100644 --- a/ayanova/src/views/svc-workorder.vue +++ b/ayanova/src/views/svc-workorder.vue @@ -645,11 +645,28 @@ async function saveHeader(vm) { //} } else { //update any server changed fields - vm.obj.concurrency = res.data.concurrency; - vm.obj.isDirty = false; + //Server will update fields on put or post for most workorder graph objecs so need to update entire object here + //TODO: update header fields only, not collections here: + //see technique used elsewhere with this same need already done was it woitem?? + //get copy of item without child collections for independant submit + //this is it for woitem: + + //this sets 'o' to all values in assigned *except* the ones itemized with removedKey which is a fake key and just used for this trick to work + //as undefined won't + console.log("Header save, return data is: ", res.data); + //copy return data into a variable called 'o' but exclude states and items keys + const { states: removedKey1, items: removedKey2, ...o } = res.data; + + console.log("Header save, o is: ", o); + + //now we can set the header to o safely without wiping the child collections + //this will only copy the existing properties in o to vm.obj + Object.assign(vm.obj, o); + + console.log("Header save, vm.obj is: ", vm.obj); + + //vm.obj.items[woItemIndex].labors.splice(i, 1, res.data); //vue needs the splice rather than just setting the value in order to trigger reactivity or else the UI won't update if (isPost) { - vm.obj.id = res.data.id; - vm.obj.serial = res.data.serial; //walk all unsaved direct children and set the workorder id so they can save vm.obj.states.forEach(z => (z.workOrderId = vm.obj.id)); vm.obj.items.forEach(z => (z.workOrderId = vm.obj.id)); @@ -833,16 +850,8 @@ async function saveExpenses(vm, woItemIndex) { childUid: o.uid }); } else { - //update any server changed fields - //always updated: - o.concurrency = res.data.concurrency; - o.isDirty = false; - - //new records only... - if (isPost) { - o.id = res.data.id; - o.workOrderItemId = res.data.workOrderItemId; - } + //Server will update fields on put or post for most workorder graph objecs so need to update entire object here + vm.obj.items[woItemIndex].expenses.splice(i, 1, res.data); //vue needs the splice rather than just setting the value in order to trigger reactivity or else the UI won't update } } } @@ -875,16 +884,8 @@ async function saveScheduledUsers(vm, woItemIndex) { childUid: o.uid }); } else { - //update any server changed fields - //always updated: - o.concurrency = res.data.concurrency; - o.isDirty = false; - - //new records only... - if (isPost) { - o.id = res.data.id; - o.workOrderItemId = res.data.workOrderItemId; - } + //Server will update fields on put or post for most workorder graph objecs so need to update entire object here + vm.obj.items[woItemIndex].scheduledUsers.splice(i, 1, res.data); //vue needs the splice rather than just setting the value in order to trigger reactivity or else the UI won't update } } }