This commit is contained in:
@@ -288,6 +288,37 @@
|
|||||||
"
|
"
|
||||||
></gz-currency>
|
></gz-currency>
|
||||||
</v-col>
|
</v-col>
|
||||||
|
|
||||||
|
<v-col v-if="form().showMe(this, 'WorkOrderItemPartSerials')" cols="12">
|
||||||
|
<v-textarea
|
||||||
|
v-model="
|
||||||
|
value.items[activeWoItemIndex].parts[activeItemIndex].serials
|
||||||
|
"
|
||||||
|
:readonly="formState.readOnly"
|
||||||
|
:disabled="isDeleted"
|
||||||
|
:label="$ay.t('PurchaseOrderItemSerialNumbers')"
|
||||||
|
:error-messages="
|
||||||
|
form().serverErrors(
|
||||||
|
this,
|
||||||
|
`Items[${activeWoItemIndex}].parts[
|
||||||
|
${activeItemIndex}
|
||||||
|
].serials`
|
||||||
|
)
|
||||||
|
"
|
||||||
|
:ref="
|
||||||
|
`Items[${activeWoItemIndex}].parts[
|
||||||
|
${activeItemIndex}
|
||||||
|
].serials`
|
||||||
|
"
|
||||||
|
data-cy="partSerials"
|
||||||
|
@input="
|
||||||
|
fieldValueChanged(`Items[${activeWoItemIndex}].parts[
|
||||||
|
${activeItemIndex}
|
||||||
|
].serials`)
|
||||||
|
"
|
||||||
|
auto-grow
|
||||||
|
></v-textarea>
|
||||||
|
</v-col>
|
||||||
</template>
|
</template>
|
||||||
</v-row>
|
</v-row>
|
||||||
</div>
|
</div>
|
||||||
@@ -296,51 +327,7 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
/* XXXeslint-disable */
|
/* XXXeslint-disable */
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
/*
|
|
||||||
l.Add(new FormField { TKey = "WorkOrderItemPartDescription", FieldKey = "WorkOrderItemPartDescription", TKeySection = "WorkOrderItemParts" });
|
|
||||||
l.Add(new FormField { TKey = "WorkOrderItemPartPartSerialID", FieldKey = "WorkOrderItemPartPartSerialID", TKeySection = "WorkOrderItemParts" });
|
|
||||||
l.Add(new FormField { TKey = "WorkOrderItemPartPartWarehouseID", FieldKey = "WorkOrderItemPartPartWarehouseID", TKeySection = "WorkOrderItemParts" });
|
|
||||||
l.Add(new FormField { TKey = "WorkOrderItemPartQuantity", FieldKey = "WorkOrderItemPartQuantity", TKeySection = "WorkOrderItemParts" });
|
|
||||||
l.Add(new FormField { TKey = "WorkOrderItemPartTaxPartSaleID", FieldKey = "WorkOrderItemPartTaxPartSaleID", TKeySection = "WorkOrderItemParts" });
|
|
||||||
l.Add(new FormField { TKey = "PartUPC", FieldKey = "PartUPC", TKeySection = "WorkOrderItemParts" });
|
|
||||||
l.Add(new FormField { TKey = "Cost", FieldKey = "PartCost", TKeySection = "WorkOrderItemParts" });
|
|
||||||
l.Add(new FormField { TKey = "ListPrice", FieldKey = "PartListPrice", TKeySection = "WorkOrderItemParts" });
|
|
||||||
l.Add(new FormField { TKey = "Price", FieldKey = "PartPriceViz", TKeySection = "WorkOrderItemParts" });
|
|
||||||
l.Add(new FormField { TKey = "PriceOverride", FieldKey = "PartPriceOverride", TKeySection = "WorkOrderItemParts" });
|
|
||||||
l.Add(new FormField { TKey = "UnitOfMeasure", FieldKey = "PartUnitOfMeasureViz", TKeySection = "WorkOrderItemParts" });
|
|
||||||
l.Add(new FormField { TKey = "NetPrice", FieldKey = "PartNetViz", TKeySection = "WorkOrderItemParts" });
|
|
||||||
l.Add(new FormField { TKey = "TaxAAmt", FieldKey = "PartTaxAViz", TKeySection = "WorkOrderItemParts" });
|
|
||||||
l.Add(new FormField { TKey = "TaxBAmt", FieldKey = "PartTaxBViz", TKeySection = "WorkOrderItemParts" });
|
|
||||||
l.Add(new FormField { TKey = "LineTotal", FieldKey = "PartLineTotalViz", TKeySection = "WorkOrderItemParts" });
|
|
||||||
{
|
|
||||||
"0": {
|
|
||||||
"id": 33,
|
|
||||||
"concurrency": 8112668,
|
|
||||||
"description": null,
|
|
||||||
"serials": null,
|
|
||||||
"partId": 16,
|
|
||||||
"partViz": null,
|
|
||||||
upcViz:"adjkfadjkfak"
|
|
||||||
"partWarehouseId": 1,
|
|
||||||
"partWarehouseViz": "Default",
|
|
||||||
"quantity": 1,
|
|
||||||
"taxPartSaleId": null,
|
|
||||||
"taxPartSaleViz": null,
|
|
||||||
"cost": 13.166710885319247,
|
|
||||||
"listPrice": 15.800053062383098,
|
|
||||||
"priceOverride": null,
|
|
||||||
"unitOfMeasureViz": "each",
|
|
||||||
"priceViz": 15.800053062383098,
|
|
||||||
"netViz": 15.800053062383098,
|
|
||||||
"taxAViz": 0,
|
|
||||||
"taxBViz": 0,
|
|
||||||
"lineTotalViz": 15.800053062383098,
|
|
||||||
"isDirty": false,
|
|
||||||
"workOrderItemId": 17
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
export default {
|
export default {
|
||||||
created() {
|
created() {
|
||||||
this.setDefaultView();
|
this.setDefaultView();
|
||||||
@@ -538,9 +525,9 @@ export default {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.form().showMe(this, "WorkOrderItemPartPartSerialID")) {
|
if (this.form().showMe(this, "WorkOrderItemPartSerials")) {
|
||||||
headers.push({
|
headers.push({
|
||||||
text: this.$ay.t("WorkOrderItemPartPartSerialID"),
|
text: this.$ay.t("PurchaseOrderItemSerialNumbers"),
|
||||||
align: "left",
|
align: "left",
|
||||||
value: "serials"
|
value: "serials"
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -780,7 +780,8 @@ async function saveItems(vm) {
|
|||||||
vm.obj.items[i].id = res.data.id;
|
vm.obj.items[i].id = res.data.id;
|
||||||
vm.obj.items[i].workorderId = res.data.workorderId;
|
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 id so they can save
|
||||||
vm.obj.items[i].expenses.forEach(
|
|
||||||
|
vm.obj.items[i].units.forEach(
|
||||||
z => (z.workorderItemId = vm.obj.items[i].id)
|
z => (z.workorderItemId = vm.obj.items[i].id)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -792,6 +793,14 @@ async function saveItems(vm) {
|
|||||||
z => (z.workorderItemId = vm.obj.items[i].id)
|
z => (z.workorderItemId = vm.obj.items[i].id)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
vm.obj.items[i].parts.forEach(
|
||||||
|
z => (z.workorderItemId = vm.obj.items[i].id)
|
||||||
|
);
|
||||||
|
|
||||||
|
vm.obj.items[i].partRequests.forEach(
|
||||||
|
z => (z.workorderItemId = vm.obj.items[i].id)
|
||||||
|
);
|
||||||
|
|
||||||
vm.obj.items[i].labors.forEach(
|
vm.obj.items[i].labors.forEach(
|
||||||
z => (z.workorderItemId = vm.obj.items[i].id)
|
z => (z.workorderItemId = vm.obj.items[i].id)
|
||||||
);
|
);
|
||||||
@@ -800,7 +809,16 @@ async function saveItems(vm) {
|
|||||||
z => (z.workorderItemId = vm.obj.items[i].id)
|
z => (z.workorderItemId = vm.obj.items[i].id)
|
||||||
);
|
);
|
||||||
|
|
||||||
//todo: other grandchildren
|
vm.obj.items[i].expenses.forEach(
|
||||||
|
z => (z.workorderItemId = vm.obj.items[i].id)
|
||||||
|
);
|
||||||
|
|
||||||
|
vm.obj.items[i].loans.forEach(
|
||||||
|
z => (z.workorderItemId = vm.obj.items[i].id)
|
||||||
|
);
|
||||||
|
vm.obj.items[i].outsideServices.forEach(
|
||||||
|
z => (z.workorderItemId = vm.obj.items[i].id)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -809,7 +827,7 @@ async function saveItems(vm) {
|
|||||||
//------
|
//------
|
||||||
//save grandchildren
|
//save grandchildren
|
||||||
if (!vm.saveResult.fatal) {
|
if (!vm.saveResult.fatal) {
|
||||||
await saveExpenses(vm, i);
|
await saveUnits(vm, i);
|
||||||
}
|
}
|
||||||
if (!vm.saveResult.fatal) {
|
if (!vm.saveResult.fatal) {
|
||||||
await saveScheduledUsers(vm, i);
|
await saveScheduledUsers(vm, i);
|
||||||
@@ -817,14 +835,27 @@ async function saveItems(vm) {
|
|||||||
if (!vm.saveResult.fatal) {
|
if (!vm.saveResult.fatal) {
|
||||||
await saveTasks(vm, i);
|
await saveTasks(vm, i);
|
||||||
}
|
}
|
||||||
|
if (!vm.saveResult.fatal) {
|
||||||
|
await saveParts(vm, i);
|
||||||
|
}
|
||||||
|
if (!vm.saveResult.fatal) {
|
||||||
|
await savePartRequests(vm, i);
|
||||||
|
}
|
||||||
if (!vm.saveResult.fatal) {
|
if (!vm.saveResult.fatal) {
|
||||||
await saveLabors(vm, i);
|
await saveLabors(vm, i);
|
||||||
}
|
}
|
||||||
if (!vm.saveResult.fatal) {
|
if (!vm.saveResult.fatal) {
|
||||||
await saveTravels(vm, i);
|
await saveTravels(vm, i);
|
||||||
}
|
}
|
||||||
//todo: other grandchildren
|
if (!vm.saveResult.fatal) {
|
||||||
//------
|
await saveExpenses(vm, i);
|
||||||
|
}
|
||||||
|
if (!vm.saveResult.fatal) {
|
||||||
|
await saveLoans(vm, i);
|
||||||
|
}
|
||||||
|
if (!vm.saveResult.fatal) {
|
||||||
|
await saveOutsideServices(vm, i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//####################################################################################
|
//####################################################################################
|
||||||
@@ -833,25 +864,23 @@ async function saveItems(vm) {
|
|||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
// EXPENSES
|
// EXPENSES
|
||||||
//
|
//
|
||||||
async function deleteExpenses(vm, woItemIndex) {
|
async function deleteUnits(vm, woItemIndex) {
|
||||||
//walk the array backwards as items may be spliced out
|
//walk the array backwards as items may be spliced out
|
||||||
for (var i = vm.obj.items[woItemIndex].expenses.length - 1; i >= 0; i--) {
|
for (var i = vm.obj.items[woItemIndex].units.length - 1; i >= 0; i--) {
|
||||||
const d = vm.obj.items[woItemIndex].expenses[i];
|
const d = vm.obj.items[woItemIndex].units[i];
|
||||||
if (!d.deleted) {
|
if (!d.deleted) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let res = await window.$gz.api.remove(
|
let res = await window.$gz.api.remove(`${API_BASE_URL}items/units/${d.id}`);
|
||||||
`${API_BASE_URL}items/expenses/${d.id}`
|
|
||||||
);
|
|
||||||
if (res.error) {
|
if (res.error) {
|
||||||
handleSaveError(vm, {
|
handleSaveError(vm, {
|
||||||
error: res.error,
|
error: res.error,
|
||||||
itemUid: vm.obj.items[woItemIndex].uid,
|
itemUid: vm.obj.items[woItemIndex].uid,
|
||||||
childKey: "expenses",
|
childKey: "units",
|
||||||
childUid: d.uid
|
childUid: d.uid
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
vm.obj.items[woItemIndex].expenses.splice(i, 1);
|
vm.obj.items[woItemIndex].units.splice(i, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -859,28 +888,28 @@ async function deleteExpenses(vm, woItemIndex) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function saveExpenses(vm, woItemIndex) {
|
async function saveUnits(vm, woItemIndex) {
|
||||||
//DELETE FLAGGED ITEMS FIRST
|
//DELETE FLAGGED ITEMS FIRST
|
||||||
await deleteExpenses(vm, woItemIndex);
|
await deleteUnits(vm, woItemIndex);
|
||||||
if (vm.saveResult.fatal) {
|
if (vm.saveResult.fatal) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let i = 0; i < vm.obj.items[woItemIndex].expenses.length; i++) {
|
for (let i = 0; i < vm.obj.items[woItemIndex].units.length; i++) {
|
||||||
let o = vm.obj.items[woItemIndex].expenses[i];
|
let o = vm.obj.items[woItemIndex].units[i];
|
||||||
if (o.isDirty) {
|
if (o.isDirty) {
|
||||||
const isPost = o.id == 0;
|
const isPost = o.id == 0;
|
||||||
let res = await window.$gz.api.upsert(`${API_BASE_URL}items/expenses`, o);
|
let res = await window.$gz.api.upsert(`${API_BASE_URL}items/units`, o);
|
||||||
if (res.error) {
|
if (res.error) {
|
||||||
handleSaveError(vm, {
|
handleSaveError(vm, {
|
||||||
error: res.error,
|
error: res.error,
|
||||||
itemUid: vm.obj.items[woItemIndex].uid,
|
itemUid: vm.obj.items[woItemIndex].uid,
|
||||||
childKey: "expenses",
|
childKey: "units",
|
||||||
childUid: o.uid
|
childUid: o.uid
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
//Server will update fields on put or post for most workorder graph objecs so need to update entire object here
|
//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
|
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -952,7 +981,7 @@ async function deleteScheduledUsers(vm, woItemIndex) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
// SCHEDULED USERS
|
// TASKS
|
||||||
//
|
//
|
||||||
async function saveTasks(vm, woItemIndex) {
|
async function saveTasks(vm, woItemIndex) {
|
||||||
//DELETE FLAGGED ITEMS FIRST
|
//DELETE FLAGGED ITEMS FIRST
|
||||||
@@ -1006,6 +1035,61 @@ async function deleteTasks(vm, woItemIndex) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// PARTS
|
||||||
|
//
|
||||||
|
async function deleteParts(vm, woItemIndex) {
|
||||||
|
//walk the array backwards as items may be spliced out
|
||||||
|
for (var i = vm.obj.items[woItemIndex].parts.length - 1; i >= 0; i--) {
|
||||||
|
const d = vm.obj.items[woItemIndex].parts[i];
|
||||||
|
if (!d.deleted) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let res = await window.$gz.api.remove(`${API_BASE_URL}items/parts/${d.id}`);
|
||||||
|
if (res.error) {
|
||||||
|
handleSaveError(vm, {
|
||||||
|
error: res.error,
|
||||||
|
itemUid: vm.obj.items[woItemIndex].uid,
|
||||||
|
childKey: "parts",
|
||||||
|
childUid: d.uid
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
vm.obj.items[woItemIndex].parts.splice(i, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function saveParts(vm, woItemIndex) {
|
||||||
|
//DELETE FLAGGED ITEMS FIRST
|
||||||
|
await deleteParts(vm, woItemIndex);
|
||||||
|
if (vm.saveResult.fatal) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < vm.obj.items[woItemIndex].parts.length; i++) {
|
||||||
|
let o = vm.obj.items[woItemIndex].parts[i];
|
||||||
|
if (o.isDirty) {
|
||||||
|
const isPost = o.id == 0;
|
||||||
|
let res = await window.$gz.api.upsert(`${API_BASE_URL}items/parts`, o);
|
||||||
|
if (res.error) {
|
||||||
|
handleSaveError(vm, {
|
||||||
|
error: res.error,
|
||||||
|
itemUid: vm.obj.items[woItemIndex].uid,
|
||||||
|
childKey: "parts",
|
||||||
|
childUid: o.uid
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
//Server will update fields on put or post for most workorder graph objecs so need to update entire object here
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return; //made it
|
||||||
|
}
|
||||||
|
|
||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
// LABOR
|
// LABOR
|
||||||
//
|
//
|
||||||
@@ -1121,6 +1205,63 @@ async function deleteTravels(vm, woItemIndex) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/////////////////////////////
|
||||||
|
// EXPENSES
|
||||||
|
//
|
||||||
|
async function deleteExpenses(vm, woItemIndex) {
|
||||||
|
//walk the array backwards as items may be spliced out
|
||||||
|
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/expenses/${d.id}`
|
||||||
|
);
|
||||||
|
if (res.error) {
|
||||||
|
handleSaveError(vm, {
|
||||||
|
error: res.error,
|
||||||
|
itemUid: vm.obj.items[woItemIndex].uid,
|
||||||
|
childKey: "expenses",
|
||||||
|
childUid: d.uid
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
vm.obj.items[woItemIndex].expenses.splice(i, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----
|
||||||
|
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 {
|
||||||
|
//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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return; //made it
|
||||||
|
}
|
||||||
|
|
||||||
//todo: other grandchildren
|
//todo: other grandchildren
|
||||||
|
|
||||||
//######################################### UTILITY METHODS ###########################################
|
//######################################### UTILITY METHODS ###########################################
|
||||||
|
|||||||
Reference in New Issue
Block a user