diff --git a/ayanova/devdocs/todo.txt b/ayanova/devdocs/todo.txt index 0228aae9..383cc8d3 100644 --- a/ayanova/devdocs/todo.txt +++ b/ayanova/devdocs/todo.txt @@ -63,6 +63,9 @@ todo: Seeding UI keep track of timing and later down the road when firmed up, pr todo: need to track fetched keys vs used keys so can tell if fetched a key that I don't need or stopped using due to code change todo: need to track fetched keys that don't exists, should bomb immediately so I can remove them, they will eat up traffic for no useful purpose!! +todo: strip all *viz fields from object before sending over the wire from client to server + Setting their value to undefined stops them being sent so do that, but remember they then need to be updated on the return record + PO I'm thinking is the main one?? todo: custom required rules only apply to new records!! @@ -359,11 +362,6 @@ CURRENTLY DOING: workorder round two electric boogaloo Do these things, check each one against the list of cases here too as there is some overlap of items -todo: strip all *viz fields from object before sending over the wire from client to server - Setting their value to undefined stops them being sent so do that, but remember they then need to be updated on the return record - See the header save for working example, others will be easier since they set *all* fields on return unlike header which is a bastardized one -todo: why does server send isdirty to client, isn't that just a client thing? - Client can set it on initial fetch todo: LoanUnit edit form add "*Cost" fields to UI todo: part request diff --git a/ayanova/src/views/svc-workorder.vue b/ayanova/src/views/svc-workorder.vue index 2e7608cf..4dd67811 100644 --- a/ayanova/src/views/svc-workorder.vue +++ b/ayanova/src/views/svc-workorder.vue @@ -378,19 +378,51 @@ export default { vm.lastGetContractId = vm.obj.contractId; //preserve for triggering full update if something changes it later vm.lastGetCustomerId = vm.obj.customerId; //preserve for triggering full update if something changes it later - //assign opening UID's + //assign opening values + vm.obj.isDirty = false; vm.obj.items.forEach((z, index) => { z.uid = index; - z.expenses.forEach((x, index) => (x.uid = index)); - z.labors.forEach((x, index) => (x.uid = index)); - z.loans.forEach((x, index) => (x.uid = index)); - z.parts.forEach((x, index) => (x.uid = index)); - z.partRequests.forEach((x, index) => (x.uid = index)); - z.scheduledUsers.forEach((x, index) => (x.uid = index)); - z.tasks.forEach((x, index) => (x.uid = index)); - z.travels.forEach((x, index) => (x.uid = index)); - z.units.forEach((x, index) => (x.uid = index)); - z.outsideServices.forEach((x, index) => (x.uid = index)); + z.isDirty = false; + z.expenses.forEach((x, index) => { + x.uid = index; + x.isDirty = false; + }); + z.labors.forEach((x, index) => { + x.uid = index; + x.isDirty = false; + }); + z.loans.forEach((x, index) => { + x.uid = index; + x.isDirty = false; + }); + z.parts.forEach((x, index) => { + x.uid = index; + x.isDirty = false; + }); + z.partRequests.forEach((x, index) => { + x.uid = index; + x.isDirty = false; + }); + z.scheduledUsers.forEach((x, index) => { + x.uid = index; + x.isDirty = false; + }); + z.tasks.forEach((x, index) => { + x.uid = index; + x.isDirty = false; + }); + z.travels.forEach((x, index) => { + x.uid = index; + x.isDirty = false; + }); + z.units.forEach((x, index) => { + x.uid = index; + x.isDirty = false; + }); + z.outsideServices.forEach((x, index) => { + x.uid = index; + x.isDirty = false; + }); }); //modify the menu as necessary @@ -415,24 +447,6 @@ export default { }); } }, - // async submitNewContract() { - // //save new contract route, this only ever gets called from a clean wo with no dirty edits so just save the contract and reset the wo from the result - // let res = await window.$gz.api.post( - // `${API_BASE_URL}set-contract/${this.obj.id}`, - // { newContractId: this.obj.contractId } - // ); - // if (res.error) { - // this.formState.serverError = res.error; - // window.$gz.form.setErrorBoxErrors(this); - // } else { - // this.obj = res.data; - // window.$gz.form.setFormState({ - // vm: this, - // dirty: false, - // valid: true - // }); - // } - // }, async submit() { const vm = this; if (vm.canSave == false) { @@ -782,8 +796,8 @@ async function saveItems(vm) { if (isPost) { 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 + //walk all unsaved children and set the workorder item id so they can save vm.obj.items[i].units.forEach( z => (z.workorderItemId = vm.obj.items[i].id) ); @@ -919,6 +933,7 @@ async function saveUnits(vm, woItemIndex) { }); } else { //Server will update fields on put or post for most workorder graph objecs so need to update entire object here + res.data.isDirty = false; //prime isDirty to detect future edits vm.obj.items[woItemIndex].units.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 } } @@ -958,6 +973,7 @@ async function saveScheduledUsers(vm, woItemIndex) { }); } else { //Server will update fields on put or post for most workorder graph objecs so need to update entire object here + res.data.isDirty = false; //prime isDirty to detect future edits 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 } } @@ -1027,6 +1043,7 @@ async function saveTasks(vm, woItemIndex) { }); } else { //Server will update fields on put or post for most workorder graph objecs so need to update entire object here + res.data.isDirty = false; //prime isDirty to detect future edits vm.obj.items[woItemIndex].tasks.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 } } @@ -1132,6 +1149,7 @@ async function saveParts(vm, woItemIndex) { }); } else { //Server will update fields on put or post for most workorder graph objecs so need to update entire object here + res.data.isDirty = false; //prime isDirty to detect future edits vm.obj.items[woItemIndex].parts.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 } } @@ -1205,6 +1223,7 @@ async function savePartRequests(vm, woItemIndex) { }); } else { //Server will update fields on put or post for most workorder graph objecs so need to update entire object here + res.data.isDirty = false; //prime isDirty to detect future edits vm.obj.items[woItemIndex].partRequests.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 } } @@ -1251,6 +1270,7 @@ async function saveLabors(vm, woItemIndex) { }); } else { //Server will update fields on put or post for most workorder graph objecs so need to update entire object here + res.data.isDirty = false; //prime isDirty to detect future edits 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 } } @@ -1328,6 +1348,7 @@ async function saveTravels(vm, woItemIndex) { }); } else { //Server will update fields on put or post for most workorder graph objecs so need to update entire object here + res.data.isDirty = false; //prime isDirty to detect future edits vm.obj.items[woItemIndex].travels.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 } } @@ -1428,6 +1449,7 @@ async function saveExpenses(vm, woItemIndex) { }); } else { //Server will update fields on put or post for most workorder graph objecs so need to update entire object here + res.data.isDirty = false; //prime isDirty to detect future edits 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 } } @@ -1500,6 +1522,7 @@ async function saveLoans(vm, woItemIndex) { }); } else { //Server will update fields on put or post for most workorder graph objecs so need to update entire object here + res.data.isDirty = false; //prime isDirty to detect future edits vm.obj.items[woItemIndex].loans.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 } } @@ -1580,6 +1603,7 @@ async function saveOutsideServices(vm, woItemIndex) { }); } else { //Server will update fields on put or post for most workorder graph objecs so need to update entire object here + res.data.isDirty = false; //prime isDirty to detect future edits vm.obj.items[woItemIndex].outsideServices.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 } }