This commit is contained in:
2021-04-15 19:12:14 +00:00
parent a5ddcb5017
commit 171ae84f5b
4 changed files with 35 additions and 27 deletions

View File

@@ -229,19 +229,12 @@ CURRENTLY DOING: error and ordering stuff
OVERALL
ORDERING AND ERRORS
- New idea: since each graph item is saved one by one, the client knows which one it's sending so the Client should hydrate the correct collection error index
- since each graph item is saved one by one, the client knows which one it's sending so the Client should hydrate the correct collection error index
server should act like its' a standalone object when reporting errors
this way, no need to modify existing code at all (po etc)
- NO WON'T WORK: Must support doing it by ID instead, this is necessary and much better than hoping the order is consistent
NO, this can't work because a collection of new items all have no id so which would be which??
i.e. the server sets the error index by the ID not the order, the client checks by ID as well, this way it matters not what the physical order is
This would be the definitive resolution since it would then work with re-ordering
would require any currently index style errors to be re-worked (unless I add a new protocol atop i.e. Items[id:23].ScheduledUsers[id:2] which would be interpreted differently by the error system)
The forms though might have a problem with it since they are working very well with indexes right now
perhaps the server returns error in form of id, but the client translates it back to an index for actual display?
ErrorIdToIndex(blah) method
make it consistent with all collections / go back and retro the others (PO, CONTRACT ETC)
- woitem must show error indicator in row if error is in it's children so user knows where to go
- test partial save (### and delete ###) with fail at each level (make up a fail if have to at server)

View File

@@ -146,7 +146,9 @@ export default {
//it's a previously saved item so it needs to be removed at the server too
this.$emit("graph-item-deleted", {
atype: window.$gz.type.WorkOrderItemScheduledUser,
id: o.id
id: o.id,
objectIndex: this.activeItemIndex,
woItemIndex: this.activeWoItemIndex
});
}
this.value.items[this.activeWoItemIndex].scheduledUsers.splice(

View File

@@ -163,7 +163,8 @@ export default {
//it's a previously saved item so it needs to be removed at the server too
this.$emit("graph-item-deleted", {
atype: window.$gz.type.WorkOrderItem,
id: o.id
id: o.id,
objectIndex: this.activeItemIndex
});
}
this.value.items.splice(this.activeItemIndex, 1);

View File

@@ -312,10 +312,10 @@ export default {
flagGraphItemForDelete: function(item) {
switch (item.atype) {
case window.$gz.type.WorkOrderItem:
this.deletedGraphItems.items.push(item.id);
this.deletedGraphItems.items.push(item);
break;
case window.$gz.type.WorkOrderItemScheduledUser:
this.deletedGraphItems.scheduledUsers.push(item.id);
this.deletedGraphItems.scheduledUsers.push(item);
break;
//todo: other grandchildren
@@ -668,7 +668,7 @@ async function saveState(vm, err) {
//it's new so save it
let res = await window.$gz.api.upsert(`${API_BASE_URL}states`, o);
if (res.error) {
err.states.push(res.error);
err.states.push(res.error);//only saves one at a time so no need for collection stuff here
err.error = true;
} else {
vm.obj.states[i] = res.data;
@@ -690,11 +690,14 @@ async function deleteItems(vm, err) {
}
//walk the array backwards as items may or may not be spliced out
for (var i = vm.deletedGraphItems.items.length - 1; i >= 0; i--) {
let res = await window.$gz.api.remove(
`${API_BASE_URL}items/${vm.deletedGraphItems.items[i]}`
);
const d = vm.deletedGraphItems.items[i];
let res = await window.$gz.api.remove(`${API_BASE_URL}items/${d.id}`);
if (res.error) {
err.items.push({ e: res.error, i: i });
err.items.push({
e: res.error,
objectIndex: d.objectIndex,
woItemIndex: d.woItemIndex
});
err.error = true;
} else {
vm.deletedGraphItems.items.splice(i, 1);
@@ -727,7 +730,7 @@ async function saveItems(vm, err) {
const isPost = o.id == 0;
let res = await window.$gz.api.upsert(`${API_BASE_URL}items`, o);
if (res.error) {
err.items.push({ e: res.error, i: i });
err.items.push({ e: res.error, objectIndex: i });
err.error = true;
if (isPost) {
//a post error precludes further operations on this item below
@@ -775,11 +778,16 @@ async function saveItems(vm, err) {
async function deleteScheduledUsers(vm, err) {
//walk the array backwards as items may or may not be spliced out
for (var i = vm.deletedGraphItems.scheduledUsers.length - 1; i >= 0; i--) {
const d = vm.deletedGraphItems.scheduledUsers[i];
let res = await window.$gz.api.remove(
`${API_BASE_URL}items/scheduledusers/${vm.deletedGraphItems.scheduledUsers[i]}`
`${API_BASE_URL}items/scheduledusers/${d.id}`
);
if (res.error) {
err.scheduledUsers.push({ e: res.error, i: i });
err.scheduledUsers.push({
e: res.error,
objectIndex: d.objectIndex,
woItemIndex: d.woItemIndex
});
err.error = true;
} else {
vm.deletedGraphItems.scheduledUsers.splice(i, 1);
@@ -788,13 +796,13 @@ async function deleteScheduledUsers(vm, err) {
return err;
}
async function saveScheduledUsers(vm, woitemindex, err) {
let totalItems = vm.obj.items[woitemindex].scheduledUsers.length;
async function saveScheduledUsers(vm, woItemIndex, err) {
let totalItems = vm.obj.items[woItemIndex].scheduledUsers.length;
if (totalItems == 0) {
return err;
}
for (let i = 0; i < totalItems; i++) {
let o = vm.obj.items[woitemindex].scheduledUsers[i];
let o = vm.obj.items[woItemIndex].scheduledUsers[i];
if (o.isDirty) {
const isPost = o.id == 0;
let res = await window.$gz.api.upsert(
@@ -802,7 +810,11 @@ async function saveScheduledUsers(vm, woitemindex, err) {
o
);
if (res.error) {
err.scheduledUsers.push({ e: res.error, i: i });
err.scheduledUsers.push({
e: res.error,
objectIndex: i,
woItemIndex: woItemIndex
});
err.error = true;
} else {
//update any server changed fields