510 lines
28 KiB
JavaScript
510 lines
28 KiB
JavaScript
|
|
import API from "../../api.js";
|
|
import BusinessObjects from "../../lib/business_objects/business_objects.js";
|
|
import DOM from "../../dom.js";
|
|
import Events from "../../lib/events.js";
|
|
import ProductPermutation from "../../lib/business_objects/store/product_permutation.js";
|
|
import TableBasePage from "../base_table.js";
|
|
import Utils from "../../lib/utils.js";
|
|
import Validation from "../../lib/validation.js";
|
|
import StoreTableMixinPage from "./mixin_table.js";
|
|
|
|
export default class PageStoreSupplierPurchaseOrders extends TableBasePage {
|
|
static hash = hashPageStoreSupplierPurchaseOrders;
|
|
static attrIdRowObject = attrIdSupplierPurchaseOrder;
|
|
callSaveTableContent = API.saveSupplierPurchaseOrders;
|
|
|
|
constructor(router) {
|
|
super(router);
|
|
this.storeMixin = new StoreTableMixinPage(this);
|
|
}
|
|
|
|
initialize() {
|
|
this.sharedInitialize();
|
|
}
|
|
|
|
hookupFilters() {
|
|
this.sharedHookupFilters();
|
|
this.hookupFilterActive();
|
|
}
|
|
|
|
loadRowTable(rowJson) {
|
|
}
|
|
getJsonRow(row) {
|
|
if (row == null) return;
|
|
let tdSupplier = row.querySelector('td.' + flagSupplier);
|
|
let tdCurrency = row.querySelector('td.' + flagCurrency);
|
|
let inputCostTotalLocalVatExcl = row.querySelector('td.' + flagCostTotalLocalVatExcl + ' input');
|
|
let inputCostTotalLocalVatIncl = row.querySelector('td.' + flagCostTotalLocalVatIncl + ' input');
|
|
let trsPurchaseOrderItem = row.querySelectorAll('tr.' + flagOrderItems);
|
|
let buttonActive = tr.querySelector(':scope > td.' + flagActive + ' button');
|
|
|
|
let jsonRow = {};
|
|
jsonRow[attrIdSupplierPurchaseOrder] = row.getAttribute(attrIdSupplierPurchaseOrder);
|
|
jsonRow[attrIdSupplier] = DOM.getElementAttributeValueCurrent(tdSupplier);
|
|
jsonRow[attrIdCurrency] = DOM.getElementAttributeValueCurrent(tdCurrency);
|
|
jsonRow[flagCostTotalLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatExcl);
|
|
jsonRow[flagCostTotalLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatIncl);
|
|
// jsonRow[flagOrderItems] = DOM.getElementAttributeValueCurrent(tdItems);
|
|
let orderItems = [];
|
|
if (trsPurchaseOrderItem != null) {
|
|
trsPurchaseOrderItem.forEach((tr) => {
|
|
orderItems.push(this.getJsonRowOrderItem(tr));
|
|
});
|
|
}
|
|
jsonRow[flagOrderItems] = orderItems;
|
|
jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
|
|
return jsonRow;
|
|
}
|
|
getJsonRowOrderItem(tr) {
|
|
let inputDisplayOrder = tr.querySelector('td.' + flagDisplayOrder + ' input');
|
|
let tdCategory = tr.querySelector('td.' + flagProductCategory);
|
|
let tdProduct = tr.querySelector('td.' + flagProduct);
|
|
let tdVariations = tr.querySelector('td.' + flagProductVariations);
|
|
let tdUnitQuantity = tr.querySelector('td.' + flagUnitMeasurementQuantity);
|
|
let inputQuantityOrdered = tr.querySelector('td.' + flagQuantityOrdered + ' input');
|
|
let inputQuantityReceived = tr.querySelector('td.' + flagQuantityReceived + ' input');
|
|
let inputCostTotalLocalVatExcl = tr.querySelector('td.' + flagCostTotalLocalVatExcl + ' input');
|
|
let inputCostTotalLocalVatIncl = tr.querySelector('td.' + flagCostTotalLocalVatIncl + ' input');
|
|
let inputLatencyDeliveryDays = tr.querySelector('td.' + flagLatencyDeliveryDays + ' input');
|
|
let buttonActive = tr.querySelector(':scope > td.' + flagActive + ' button');
|
|
|
|
let jsonRow = {};
|
|
jsonRow[attrIdSupplierPurchaseOrder] = tr.getAttribute(attrIdSupplierPurchaseOrder);
|
|
jsonRow[attrIdSupplierPurchaseOrderProductLink] = tr.getAttribute(attrIdSupplierPurchaseOrderProductLink);
|
|
jsonRow[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(inputDisplayOrder);
|
|
jsonRow[attrIdProductCategory] = DOM.getElementAttributeValueCurrent(tdCategory);
|
|
jsonRow[attrIdProduct] = DOM.getElementAttributeValueCurrent(tdProduct);
|
|
jsonRow[flagProductVariations] = DOM.getElementAttributeValueCurrent(tdVariations);
|
|
jsonRow[attrIdUnitMeasurementQuantity] = DOM.getElementAttributeValueCurrent(tdUnitQuantity);
|
|
jsonRow[flagQuantityOrdered] = DOM.getElementAttributeValueCurrent(inputQuantityOrdered);
|
|
jsonRow[flagQuantityReceived] = DOM.getElementAttributeValueCurrent(inputQuantityReceived);
|
|
jsonRow[flagCostTotalLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatExcl);
|
|
jsonRow[flagCostTotalLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatIncl);
|
|
jsonRow[flagLatencyDeliveryDays] = DOM.getElementAttributeValueCurrent(inputLatencyDeliveryDays);
|
|
jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
|
|
|
|
return jsonRow;
|
|
}
|
|
initialiseRowNew(tbody, row) {
|
|
super.initialiseRowNew(tbody, row);
|
|
}
|
|
|
|
hookupTableMain() {
|
|
super.hookupTableMain();
|
|
this.hookupSupplierFields();
|
|
this.hookupCurrencyFields();
|
|
this.hookupCostInputs();
|
|
this.hookupOrderItemsFields();
|
|
this.hookupFieldsActive();
|
|
}
|
|
hookupSupplierFields() {
|
|
this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagSupplier, Utils.getListFromDict(suppliers));
|
|
}
|
|
hookupCostInputs() {
|
|
this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostTotalLocalVatExcl + ' input');
|
|
this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostTotalLocalVatIncl + ' input');
|
|
}
|
|
hookupOrderItemsFields() {
|
|
this.hookupOrderItemsPreviews();
|
|
this.hookupFieldsOrderItemDisplayOrder();
|
|
this.hookupFieldsOrderItemProductCategory();
|
|
this.hookupFieldsOrderItemProduct();
|
|
// this.hookupFieldsOrderItemProductVariations();
|
|
this.hookupFieldsProductPermutationVariation();
|
|
this.hookupFieldsOrderItemUnitQuantity();
|
|
this.hookupFieldsOrderItemQuantityOrdered();
|
|
this.hookupFieldsOrderItemQuantityReceived();
|
|
this.hookupFieldsOrderItemCostTotalLocalVatExcl();
|
|
this.hookupFieldsOrderItemCostTotalLocalVatIncl();
|
|
this.hookupFieldsOrderItemLatencyDeliveryDays();
|
|
this.hookupFieldsOrderItemActive();
|
|
this.hookupFieldsOrderItemAddDelete();
|
|
}
|
|
hookupOrderItemsPreviews() {
|
|
this.hookupEventHandler("click", idTableMain + ' > tbody > tr > td.' + flagOrderItems + ' > div', (event, div) => {
|
|
let td = DOM.getCellFromElement(div);
|
|
if (!td.classList.contains(flagCollapsed)) return;
|
|
this.handleClickOrderItemsPreview(event, div);
|
|
});
|
|
}
|
|
handleClickOrderItemsPreview(event, element) {
|
|
if (_verbose) { console.log("click order items preview"); }
|
|
this.toggleColumnHeaderCollapsed(flagOrderItems, false);
|
|
/*
|
|
let td = DOM.getCellFromElement(element);
|
|
td.classList.remove(flagCollapsed);
|
|
*/
|
|
|
|
let row = DOM.getRowFromElement(element);
|
|
let idSupplierPurchaseOrder = row.getAttribute(attrIdSupplierPurchaseOrder);
|
|
// if (idSupplierPurchaseOrder == null || idSupplierPurchaseOrder < 1) return;
|
|
let supplierPurchaseOrder = supplierPurchaseOrders[idSupplierPurchaseOrder];
|
|
if (supplierPurchaseOrder == null) supplierPurchaseOrder = {
|
|
[flagOrderItems]: [],
|
|
};
|
|
let tblOrderItems = document.createElement("table");
|
|
tblOrderItems.classList.add(flagOrderItems);
|
|
let thead = document.createElement("thead");
|
|
let tr = document.createElement("tr");
|
|
|
|
let thDisplayOrder = document.createElement("th");
|
|
thDisplayOrder.classList.add(flagDisplayOrder);
|
|
thDisplayOrder.textContent = 'Display Order';
|
|
let thCategory = document.createElement("th");
|
|
thCategory.classList.add(flagProductCategory);
|
|
thCategory.textContent = 'Category';
|
|
let thProduct = document.createElement("th");
|
|
thProduct.classList.add(flagProduct);
|
|
thProduct.textContent = 'Product';
|
|
let thVariations = document.createElement("th");
|
|
thVariations.classList.add(flagProductVariations);
|
|
thVariations.classList.add(flagCollapsed);
|
|
thVariations.textContent = 'Variations';
|
|
let thUnitQuantity = document.createElement("th");
|
|
thUnitQuantity.classList.add(flagUnitMeasurementQuantity);
|
|
thUnitQuantity.textContent = 'Unit Quantity';
|
|
let thQuantityOrdered = document.createElement("th");
|
|
thQuantityOrdered.classList.add(flagQuantityOrdered);
|
|
thQuantityOrdered.textContent = 'Quantity Ordered';
|
|
let thQuantityReceived = document.createElement("th");
|
|
thQuantityReceived.classList.add(flagQuantityReceived);
|
|
thQuantityReceived.textContent = 'Quantity Received';
|
|
let thCostTotalLocalVatExcl = document.createElement("th");
|
|
thCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
|
|
thCostTotalLocalVatExcl.textContent = 'Cost Total Local VAT Excl';
|
|
let thCostTotalLocalVatIncl = document.createElement("th");
|
|
thCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
|
|
thCostTotalLocalVatIncl.textContent = 'Cost Total Local VAT Incl';
|
|
let thCostUnitLocalVatExcl = document.createElement("th");
|
|
thCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
|
|
thCostUnitLocalVatExcl.textContent = 'Cost Unit Local VAT Excl';
|
|
let thCostUnitLocalVatIncl = document.createElement("th");
|
|
thCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
|
|
thCostUnitLocalVatIncl.textContent = 'Cost Unit Local VAT Incl';
|
|
let thLatencyDeliveryDays = document.createElement("th");
|
|
thLatencyDeliveryDays.classList.add(flagLatencyDeliveryDays);
|
|
thLatencyDeliveryDays.textContent = 'Latency Delivery (Days)';
|
|
let thActive = document.createElement("th");
|
|
thActive.classList.add(flagActive);
|
|
thActive.textContent = 'Active';
|
|
let thAddDelete = document.createElement("th");
|
|
thAddDelete.classList.add(flagAdd);
|
|
let buttonAdd = document.createElement("button");
|
|
buttonAdd.classList.add(flagAdd);
|
|
buttonAdd.textContent = '+';
|
|
thAddDelete.appendChild(buttonAdd);
|
|
|
|
tr.appendChild(thDisplayOrder);
|
|
tr.appendChild(thCategory);
|
|
tr.appendChild(thProduct);
|
|
tr.appendChild(thVariations);
|
|
tr.appendChild(thUnitQuantity);
|
|
tr.appendChild(thQuantityOrdered);
|
|
tr.appendChild(thQuantityReceived);
|
|
tr.appendChild(thCostTotalLocalVatExcl);
|
|
tr.appendChild(thCostTotalLocalVatIncl);
|
|
tr.appendChild(thCostUnitLocalVatExcl);
|
|
tr.appendChild(thCostUnitLocalVatIncl);
|
|
tr.appendChild(thLatencyDeliveryDays);
|
|
tr.appendChild(thActive);
|
|
tr.appendChild(thAddDelete);
|
|
thead.appendChild(tr);
|
|
tblOrderItems.appendChild(thead);
|
|
|
|
let tbody = document.createElement("tbody");
|
|
supplierPurchaseOrder[flagOrderItems].forEach((orderItem, index) => {
|
|
this.addRowSupplierPurchaseOrderItem(tbody, orderItem);
|
|
});
|
|
tblOrderItems.appendChild(tbody);
|
|
|
|
let cell = DOM.getCellFromElement(element);
|
|
let cellNew = cell.cloneNode(false);
|
|
cellNew.appendChild(tblOrderItems);
|
|
cellNew.classList.remove(flagCollapsed);
|
|
row.replaceChild(cellNew, cell);
|
|
if (_verbose) { console.log("tblOrderItems: ", tblOrderItems); }
|
|
this.hookupOrderItemsFields();
|
|
}
|
|
addRowSupplierPurchaseOrderItem(tbody, orderItem) { // productVariationTypeOptions, productVariationOptions, productCategoryOptions, productOptions, unitMeasurementOptions,
|
|
if (_verbose) { console.log("addRowSupplierPurchaseOrderItem: ", orderItem); }
|
|
|
|
let tdDisplayOrder = document.createElement("td");
|
|
tdDisplayOrder.classList.add(flagDisplayOrder);
|
|
let inputDisplayOrder = document.createElement("input");
|
|
inputDisplayOrder.classList.add(flagDisplayOrder);
|
|
inputDisplayOrder.type = 'number';
|
|
inputDisplayOrder.step = 1;
|
|
DOM.setElementValuesCurrentAndPrevious(inputDisplayOrder, orderItem[flagDisplayOrder]);
|
|
tdDisplayOrder.appendChild(inputDisplayOrder);
|
|
|
|
let tdCategory = document.createElement("td");
|
|
tdCategory.classList.add(flagProductCategory);
|
|
DOM.setElementAttributesValuesCurrentAndPrevious(tdCategory, orderItem[attrIdProductCategory]);
|
|
let divCategory = document.createElement("div");
|
|
divCategory.classList.add(flagProductCategory);
|
|
DOM.setElementAttributesValuesCurrentAndPrevious(divCategory, orderItem[attrIdProductCategory]);
|
|
// divCategory.textContent = orderItem[flagProductCategory];
|
|
let productCategory = productCategories[orderItem[attrIdProductCategory]];
|
|
divCategory.textContent = BusinessObjects.getObjectText(productCategory);
|
|
tdCategory.appendChild(divCategory);
|
|
|
|
let tdProduct = document.createElement("td");
|
|
tdProduct.classList.add(flagProduct);
|
|
DOM.setElementAttributesValuesCurrentAndPrevious(tdProduct, orderItem[attrIdProduct]);
|
|
let divProduct = document.createElement("div");
|
|
divProduct.classList.add(flagProduct);
|
|
DOM.setElementAttributesValuesCurrentAndPrevious(divProduct, orderItem[attrIdProduct]);
|
|
// divProduct.textContent = orderItem[flagProduct];
|
|
let product = products[orderItem[attrIdProduct]];
|
|
divProduct.textContent = BusinessObjects.getObjectText(product);
|
|
tdProduct.appendChild(divProduct);
|
|
|
|
let tdVariations = document.createElement("td");
|
|
tdVariations.classList.add(flagProductVariations);
|
|
tdVariations.classList.add(flagCollapsed);
|
|
DOM.setElementAttributesValuesCurrentAndPrevious(tdVariations, orderItem[flagProductVariations]);
|
|
let divVariations = document.createElement("div");
|
|
divVariations.classList.add(flagProductVariations);
|
|
DOM.setElementAttributesValuesCurrentAndPrevious(divVariations, orderItem[flagProductVariations]);
|
|
// divVariations.textContent = orderItem[flagProductVariations];
|
|
let variationsText = ProductPermutation.getProductVariationsPreviewFromIdCsv(orderItem[flagProductVariations]);
|
|
divVariations.textContent = variationsText;
|
|
tdVariations.appendChild(divVariations);
|
|
|
|
let tdUnitQuantity = document.createElement("td");
|
|
tdUnitQuantity.classList.add(flagUnitMeasurementQuantity);
|
|
DOM.setElementAttributesValuesCurrentAndPrevious(tdUnitQuantity, orderItem[attrIdUnitMeasurementQuantity]);
|
|
let divUnitQuantity = document.createElement("div");
|
|
divUnitQuantity.classList.add(flagUnitMeasurementQuantity);
|
|
DOM.setElementAttributesValuesCurrentAndPrevious(divUnitQuantity, orderItem[attrIdUnitMeasurementQuantity]);
|
|
let unitQuantity = unitMeasurements[orderItem[attrIdUnitMeasurementQuantity]];
|
|
divUnitQuantity.textContent = BusinessObjects.getObjectText(unitQuantity);
|
|
tdUnitQuantity.appendChild(divUnitQuantity);
|
|
|
|
let tdQuantityOrdered = document.createElement("td");
|
|
tdQuantityOrdered.classList.add(flagQuantityOrdered);
|
|
let inputQuantityOrdered = document.createElement("input");
|
|
inputQuantityOrdered.classList.add(flagQuantityOrdered);
|
|
inputQuantityOrdered.type = 'number';
|
|
DOM.setElementValuesCurrentAndPrevious(inputQuantityOrdered, orderItem[flagQuantityOrdered]);
|
|
tdQuantityOrdered.appendChild(inputQuantityOrdered);
|
|
|
|
let tdQuantityReceived = document.createElement("td");
|
|
tdQuantityReceived.classList.add(flagQuantityReceived);
|
|
let inputQuantityReceived = document.createElement("input");
|
|
inputQuantityReceived.classList.add(flagQuantityReceived);
|
|
inputQuantityReceived.type = 'number';
|
|
DOM.setElementValuesCurrentAndPrevious(inputQuantityReceived, orderItem[flagQuantityReceived]);
|
|
tdQuantityReceived.appendChild(inputQuantityReceived);
|
|
|
|
let tdCostTotalLocalVatExcl = document.createElement("td");
|
|
tdCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
|
|
let inputCostTotalLocalVatExcl = document.createElement("input");
|
|
inputCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
|
|
inputCostTotalLocalVatExcl.type = 'number';
|
|
inputCostTotalLocalVatExcl.step = 0.01;
|
|
DOM.setElementValuesCurrentAndPrevious(inputCostTotalLocalVatExcl, orderItem[flagCostTotalLocalVatExcl]);
|
|
tdCostTotalLocalVatExcl.appendChild(inputCostTotalLocalVatExcl);
|
|
|
|
let tdCostTotalLocalVatIncl = document.createElement("td");
|
|
tdCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
|
|
let inputCostTotalLocalVatIncl = document.createElement("input");
|
|
inputCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
|
|
inputCostTotalLocalVatIncl.type = 'number';
|
|
inputCostTotalLocalVatIncl.step = 0.01;
|
|
DOM.setElementValuesCurrentAndPrevious(inputCostTotalLocalVatIncl, orderItem[flagCostTotalLocalVatIncl]);
|
|
tdCostTotalLocalVatIncl.appendChild(inputCostTotalLocalVatIncl);
|
|
|
|
let tdCostUnitLocalVatExcl = document.createElement("td");
|
|
tdCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
|
|
let divCostUnitLocalVatExcl = document.createElement("div");
|
|
divCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
|
|
DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatExcl, Validation.toFixedOrDefault(orderItem[flagCostUnitLocalVatExcl], 3, null));
|
|
tdCostUnitLocalVatExcl.appendChild(divCostUnitLocalVatExcl);
|
|
|
|
let tdCostUnitLocalVatIncl = document.createElement("td");
|
|
tdCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
|
|
let divCostUnitLocalVatIncl = document.createElement("div");
|
|
divCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
|
|
DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatIncl, Validation.toFixedOrDefault(orderItem[flagCostUnitLocalVatIncl], 3, null));
|
|
tdCostUnitLocalVatIncl.appendChild(divCostUnitLocalVatIncl);
|
|
|
|
let tdLatencyDeliveryDays = document.createElement("td");
|
|
tdLatencyDeliveryDays.classList.add(flagLatencyDeliveryDays);
|
|
let inputLatencyDeliveryDays = document.createElement("input");
|
|
inputLatencyDeliveryDays.classList.add(flagLatencyDeliveryDays);
|
|
inputLatencyDeliveryDays.type = 'number';
|
|
inputLatencyDeliveryDays.step = 1;
|
|
DOM.setElementValuesCurrentAndPrevious(inputLatencyDeliveryDays, orderItem[flagLatencyDeliveryDays]);
|
|
tdLatencyDeliveryDays.appendChild(inputLatencyDeliveryDays);
|
|
|
|
let tdActive = this.createTdActive(orderItem[flagActive]);
|
|
|
|
let tr = document.createElement("tr");
|
|
tr.classList.add(flagOrderItems);
|
|
tr.setAttribute(attrIdSupplierPurchaseOrder, orderItem[attrIdSupplierPurchaseOrder]);
|
|
tr.setAttribute(attrIdSupplierPurchaseOrderProductLink, orderItem[attrIdSupplierPurchaseOrderProductLink]);
|
|
tr.appendChild(tdDisplayOrder);
|
|
tr.appendChild(tdCategory);
|
|
tr.appendChild(tdProduct);
|
|
tr.appendChild(tdVariations);
|
|
tr.appendChild(tdUnitQuantity);
|
|
tr.appendChild(tdQuantityOrdered);
|
|
tr.appendChild(tdQuantityReceived);
|
|
tr.appendChild(tdCostTotalLocalVatExcl);
|
|
tr.appendChild(tdCostTotalLocalVatIncl);
|
|
tr.appendChild(tdCostUnitLocalVatExcl);
|
|
tr.appendChild(tdCostUnitLocalVatIncl);
|
|
tr.appendChild(tdLatencyDeliveryDays);
|
|
tr.appendChild(tdActive);
|
|
tbody.appendChild(tr);
|
|
}
|
|
hookupFieldsOrderItemDisplayOrder() {
|
|
this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagDisplayOrder + ' input');
|
|
}
|
|
hookupFieldsOrderItemProductCategory() {
|
|
this.hookupTableCellDdlPreviews(
|
|
idTableMain + ' td.' + flagOrderItems + ' td.' + flagProductCategory
|
|
, Utils.getListFromDict(productCategories)
|
|
, (cellSelector) => { this.hookupProductCategoryDdls(cellSelector); }
|
|
);
|
|
}
|
|
hookupFieldsOrderItemProduct() {
|
|
this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagProduct, Utils.getListFromDict(products));
|
|
}
|
|
/*
|
|
hookupFieldsOrderItemProductVariations() {
|
|
this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' td.' + flagProductVariations, (event, element) => this.handleClickProductPermutationVariationsPreview(event, element));
|
|
}
|
|
hookupDdlsProductPermutationVariation() {
|
|
this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariation);
|
|
}
|
|
hookupDdlsProductPermutationVariationType() {
|
|
this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariationType);
|
|
}
|
|
*/
|
|
hookupFieldsOrderItemUnitQuantity() {
|
|
this.hookupTableCellDdlPreviews(
|
|
idTableMain + ' td.' + flagOrderItems + ' td.' + flagUnitMeasurementQuantity
|
|
, Utils.getListFromDict(unitMeasurements)
|
|
);
|
|
}
|
|
hookupFieldsOrderItemQuantityOrdered() {
|
|
this.hookupChangeHandlerTableCells(
|
|
idTableMain + ' td.' + flagOrderItems + ' td.' + flagQuantityOrdered + ' input'
|
|
);
|
|
}
|
|
hookupFieldsOrderItemQuantityReceived() {
|
|
this.hookupChangeHandlerTableCells(
|
|
idTableMain + ' td.' + flagOrderItems + ' td.' + flagQuantityReceived + ' input'
|
|
);
|
|
}
|
|
hookupFieldsOrderItemCostTotalLocalVatExcl() {
|
|
this.hookupChangeHandlerTableCells(
|
|
idTableMain + ' td.' + flagOrderItems + ' td.' + flagCostTotalLocalVatExcl + ' input'
|
|
, (event, element) => {
|
|
this.handleChangeNestedElementCellTable(event, element); // flagCostTotalLocalVatExcl);
|
|
this.updateFieldsCostUnitLocalVatExcl(element);
|
|
}
|
|
);
|
|
}
|
|
hookupFieldsOrderItemCostTotalLocalVatIncl() {
|
|
this.hookupChangeHandlerTableCells(
|
|
idTableMain + ' td.' + flagOrderItems + ' td.' + flagCostTotalLocalVatIncl + ' input'
|
|
, (event, element) => {
|
|
this.handleChangeNestedElementCellTable(event, element); // flagCostTotalLocalVatIncl);
|
|
this.updateFieldsCostUnitLocalVatIncl(element);
|
|
}
|
|
);
|
|
}
|
|
updateFieldsCostUnitLocalVatExcl(elementChanged) {
|
|
let row = elementChanged.closest('tr.' + flagOrderItems);
|
|
let inputCostTotalLocalVatExcl = row.querySelector('td.' + flagCostTotalLocalVatExcl + ' input');
|
|
let costTotalLocalVatExcl = DOM.getElementValueCurrent(inputCostTotalLocalVatExcl);
|
|
let inputQuantityOrdered = row.querySelector('td.' + flagQuantityOrdered + ' input');
|
|
let quantityOrdered = DOM.getElementValueCurrent(inputQuantityOrdered);
|
|
|
|
let divCostUnitLocalVatExcl = row.querySelector('td.' + flagCostUnitLocalVatExcl + ' div');
|
|
let costUnitLocalVatExcl = quantityOrdered == 0 ? 0 : costTotalLocalVatExcl / quantityOrdered;
|
|
DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatExcl, costUnitLocalVatExcl.toFixed(3));
|
|
|
|
let rowSupplierPurchaseOrder = row.closest(idTableMain + ' > tbody > tr');
|
|
let divCostGrandTotalLocalVatExcl = rowSupplierPurchaseOrder.querySelector('td.' + flagCostTotalLocalVatExcl + ' div');
|
|
let inputsCostTotalLocalVatExcl = rowSupplierPurchaseOrder.querySelectorAll('td.' + flagOrderItems + ' td.' + flagCostTotalLocalVatExcl + ' input');
|
|
let costGrandTotalLocalVatExcl = Array.from(inputsCostTotalLocalVatExcl).reduce((acc, input) => acc + Number(DOM.getElementValueCurrent(input)), 0);
|
|
DOM.setElementValueCurrent(divCostGrandTotalLocalVatExcl, costGrandTotalLocalVatExcl);
|
|
}
|
|
updateFieldsCostUnitLocalVatIncl(elementChanged) {
|
|
let row = elementChanged.closest('tr.' + flagOrderItems);
|
|
let inputCostTotalLocalVatIncl = row.querySelector('td.' + flagCostTotalLocalVatIncl + ' input');
|
|
let costTotalLocalVatIncl = DOM.getElementValueCurrent(inputCostTotalLocalVatIncl);
|
|
let inputQuantityOrdered = row.querySelector('td.' + flagQuantityOrdered + ' input');
|
|
let quantityOrdered = DOM.getElementValueCurrent(inputQuantityOrdered);
|
|
|
|
let divCostUnitLocalVatIncl = row.querySelector('td.' + flagCostUnitLocalVatIncl + ' div');
|
|
let costUnitLocalVatIncl = quantityOrdered == 0 ? 0 : costTotalLocalVatIncl / quantityOrdered;
|
|
DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatIncl, costUnitLocalVatIncl.toFixed(3));
|
|
|
|
let rowSupplierPurchaseOrder = row.closest(idTableMain + ' > tbody > tr');
|
|
let divCostGrandTotalLocalVatIncl = rowSupplierPurchaseOrder.querySelector('td.' + flagCostTotalLocalVatIncl + ' div');
|
|
let inputsCostTotalLocalVatIncl = rowSupplierPurchaseOrder.querySelectorAll('td.' + flagOrderItems + ' td.' + flagCostTotalLocalVatIncl + ' input');
|
|
let costGrandTotalLocalVatIncl = Array.from(inputsCostTotalLocalVatIncl).reduce((acc, input) => acc + Number(DOM.getElementValueCurrent(input)), 0);
|
|
DOM.setElementValueCurrent(divCostGrandTotalLocalVatIncl, costGrandTotalLocalVatIncl);
|
|
}
|
|
hookupFieldsOrderItemLatencyDeliveryDays() {
|
|
this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagLatencyDeliveryDays + ' input');
|
|
}
|
|
hookupFieldsOrderItemActive() {
|
|
this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' input.' + flagActive);
|
|
}
|
|
hookupFieldsOrderItemAddDelete() {
|
|
let selectorButton = idTableMain + ' td.' + flagOrderItems + ' td.' + flagOrderItems + ' button';
|
|
let selectorButtonDelete = selectorButton + '.' + flagDelete;
|
|
let selectorButtonUndelete = selectorButton + '.' + flagAdd;
|
|
this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);
|
|
this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);
|
|
this.hookupButtonsOrderItemAdd();
|
|
}
|
|
hookupButtonsOrderItemAdd() {
|
|
this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' th button.' + flagAdd, (event, element) => {
|
|
let row = element.closest(idTableMain + ' > tbody > tr');
|
|
let idSupplierPurchaseOrder = row.getAttribute(attrIdSupplierPurchaseOrder);
|
|
// let hasActiveOrderItem = row.querySelectorAll('td.' + flagOrderItems + ' input.' + flagActive + ':checked').length > 0;
|
|
let countSupplierOrderItems = row.querySelectorAll('td.' + flagOrderItems + ' td.' + flagSupplierPurchaseOrder).length;
|
|
let supplierOrderItem = {
|
|
[attrIdSupplierPurchaseOrder]: idSupplierPurchaseOrder,
|
|
[attrIdSupplierPurchaseOrderProductLink]: -1 - countSupplierOrderItems,
|
|
[attrIdProductCategory]: 0,
|
|
[attrIdProduct]: 0,
|
|
[flagProductVariations]: '',
|
|
[attrIdUnitMeasurementQuantity]: 0,
|
|
[flagQuantityOrdered]: '',
|
|
[flagQuantityReceived]: '',
|
|
[flagCostTotalLocalVatExcl]: '',
|
|
[flagCostTotalLocalVatIncl]: '',
|
|
[flagCostUnitLocalVatExcl]: '',
|
|
[flagCostUnitLocalVatIncl]: '',
|
|
[flagLatencyDeliveryDays]: '',
|
|
[flagDisplayOrder]: countSupplierOrderItems + 1,
|
|
[flagActive]: true, // !hasActiveOrderItem,
|
|
};
|
|
let tbody = row.querySelector('td.' + flagOrderItems + ' table tbody');
|
|
this.addRowSupplierPurchaseOrderItem(tbody, supplierOrderItem);
|
|
/*
|
|
if (!hasActiveOrderItem) {
|
|
let tdOrderItem = row.querySelector('td.' + flagOrderItems);
|
|
// tdOrderItem.setAttribute(attrIdSupplierOrderItem, supplierOrderItem[attrIdSupplierOrderItem]);
|
|
DOM.setElementAttributeValueCurrent(tdOrderItem, supplierOrderItem[attrIdSupplierPurchaseOrderProductLink]);
|
|
}
|
|
*/
|
|
this.hookupOrderItemsFields();
|
|
});
|
|
}
|
|
|
|
leave() {
|
|
super.leave();
|
|
}
|
|
}
|
|
|