diff --git a/ayanova/src/views/svc-workorder.vue b/ayanova/src/views/svc-workorder.vue index 25a59541..0df30ffe 100644 --- a/ayanova/src/views/svc-workorder.vue +++ b/ayanova/src/views/svc-workorder.vue @@ -729,9 +729,14 @@ async function saveItems(vm) { vm.obj.items[i].id = res.data.id; vm.obj.items[i].workorderId = res.data.workorderId; //walk all unsaved children and set the workorder id so they can save + vm.obj.items[i].expenses.forEach( + z => (z.workorderItemId = vm.obj.items[i].id) + ); + vm.obj.items[i].scheduledUsers.forEach( z => (z.workorderItemId = vm.obj.items[i].id) ); + //todo: other grandchildren } } @@ -740,6 +745,9 @@ async function saveItems(vm) { } //------ //save grandchildren + if (!vm.saveResult.fatal) { + await saveExpenses(vm, i); + } if (!vm.saveResult.fatal) { await saveScheduledUsers(vm, i); } @@ -751,31 +759,27 @@ async function saveItems(vm) { //## GRANDCHILDREN ///////////////////////////// -// SCHEDULED USERS +// EXPENSES // -async function deleteScheduledUsers(vm, woItemIndex) { +async function deleteExpenses(vm, woItemIndex) { //walk the array backwards as items may be spliced out - for ( - var i = vm.obj.items[woItemIndex].scheduledUsers.length - 1; - i >= 0; - i-- - ) { - const d = vm.obj.items[woItemIndex].scheduledUsers[i]; + for (var i = vm.obj.items[woItemIndex].expenses.length - 1; i >= 0; i--) { + const d = vm.obj.items[woItemIndex].expenses[i]; if (!d.deleted) { continue; } let res = await window.$gz.api.remove( - `${API_BASE_URL}items/scheduledusers/${d.id}` + `${API_BASE_URL}items/expenses/${d.id}` ); if (res.error) { handleSaveError(vm, { error: res.error, itemUid: vm.obj.items[woItemIndex].uid, - childKey: "scheduledUsers", + childKey: "expenses", childUid: d.uid }); } else { - vm.obj.items[woItemIndex].scheduledUsers.splice(i, 1); + vm.obj.items[woItemIndex].expenses.splice(i, 1); } } @@ -783,6 +787,45 @@ async function deleteScheduledUsers(vm, woItemIndex) { return; } +async function saveExpenses(vm, woItemIndex) { + //DELETE FLAGGED ITEMS FIRST + await deleteExpenses(vm, woItemIndex); + if (vm.saveResult.fatal) { + return; + } + + for (let i = 0; i < vm.obj.items[woItemIndex].expenses.length; i++) { + let o = vm.obj.items[woItemIndex].expenses[i]; + if (o.isDirty) { + const isPost = o.id == 0; + let res = await window.$gz.api.upsert(`${API_BASE_URL}items/expenses`, o); + if (res.error) { + handleSaveError(vm, { + error: res.error, + itemUid: vm.obj.items[woItemIndex].uid, + childKey: "expenses", + 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; + } + } + } + } + return; //made it +} + +///////////////////////////// +// SCHEDULED USERS +// async function saveScheduledUsers(vm, woItemIndex) { //DELETE FLAGGED ITEMS FIRST await deleteScheduledUsers(vm, woItemIndex); @@ -822,6 +865,39 @@ async function saveScheduledUsers(vm, woItemIndex) { return; //made it } +///////////////////////////// +// SCHEDULED USERS +// +async function deleteScheduledUsers(vm, woItemIndex) { + //walk the array backwards as items may be spliced out + for ( + var i = vm.obj.items[woItemIndex].scheduledUsers.length - 1; + i >= 0; + i-- + ) { + const d = vm.obj.items[woItemIndex].scheduledUsers[i]; + if (!d.deleted) { + continue; + } + let res = await window.$gz.api.remove( + `${API_BASE_URL}items/scheduledusers/${d.id}` + ); + if (res.error) { + handleSaveError(vm, { + error: res.error, + itemUid: vm.obj.items[woItemIndex].uid, + childKey: "scheduledUsers", + childUid: d.uid + }); + } else { + vm.obj.items[woItemIndex].scheduledUsers.splice(i, 1); + } + } + + //---- + return; +} + //todo: other grandchildren //######################################### UTILITY METHODS ###########################################