From 011d9ba2bac8623840a6fcd85eca79eb7df1c537 Mon Sep 17 00:00:00 2001 From: teddy Date: Fri, 15 Nov 2024 12:33:46 +0000 Subject: [PATCH] Fix: Product Permutations save on production. --- static/MySQL/0000_combined.sql | 57 +++++++++---------- static/dist/js/main.bundle.js | 14 +++-- static/js/dom.js | 3 + static/js/pages/base_table.js | 10 ++-- static/js/pages/store/product_permutations.js | 4 +- 5 files changed, 48 insertions(+), 40 deletions(-) diff --git a/static/MySQL/0000_combined.sql b/static/MySQL/0000_combined.sql index 067cd235..1db172e4 100644 --- a/static/MySQL/0000_combined.sql +++ b/static/MySQL/0000_combined.sql @@ -4569,7 +4569,7 @@ BEGIN IF (NOT ( NEW.id_unit_measurement_interval_recurrence IS NULL - OR NEW.id_unit_measurement_interval_recurrence NOT IN (SELECT id_unit_measurement FROM Shop_Unit_Measurement WHERE is_unit_of_time = 1) + OR NEW.id_unit_measurement_interval_recurrence IN (SELECT id_unit_measurement FROM Shop_Unit_Measurement WHERE is_unit_of_time = 1) )) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Recurrence interval ID must be a unit of time.'; @@ -4577,7 +4577,7 @@ BEGIN IF (NOT ( NEW.id_unit_measurement_interval_expiration_unsealed IS NULL - OR NEW.id_unit_measurement_interval_expiration_unsealed NOT IN (SELECT id_unit_measurement FROM Shop_Unit_Measurement WHERE is_unit_of_time = 1) + OR NEW.id_unit_measurement_interval_expiration_unsealed IN (SELECT id_unit_measurement FROM Shop_Unit_Measurement WHERE is_unit_of_time = 1) )) THEN SET v_msg := CONCAT('Unsealed expiration interval ID must be a unit of time. Invalid value: ', CAST(NEW.id_unit_measurement_interval_expiration_unsealed AS CHAR)); SIGNAL SQLSTATE '45000' @@ -24028,50 +24028,49 @@ INSERT INTO partsltd_prod.Shop_Product_Change_Set ( ) VALUES ( 'Update Variation Display Orders' ) ; -WITH RECURSIVE RANKED AS ( +UPDATE partsltd_prod.Shop_Variation V +INNER JOIN ( SELECT V.id_variation, RANK() OVER (ORDER BY - CONCAT( - CASE WHEN V.count_unit_measurement = FLOOR(V.count_unit_measurement) THEN - LPAD(CAST(V.count_unit_measurement AS CHAR), 25, '0') - ELSE - CONCAT( - LPAD( - CAST(FLOOR(V.count_unit_measurement) AS CHAR) - , 25 - , '0' - ) - , SUBSTRING( - CAST(V.count_unit_measurement AS CHAR) - FROM LOCATE('.', CAST(V.count_unit_measurement AS CHAR)) - ) - ) - END + CONCAT( + CASE WHEN V.count_unit_measurement = FLOOR(V.count_unit_measurement) THEN + LPAD(CAST(V.count_unit_measurement AS CHAR), 25, '0') + ELSE + CONCAT( + LPAD( + CAST(FLOOR(V.count_unit_measurement) AS CHAR) + , 25 + , '0' + ) + , SUBSTRING( + CAST(V.count_unit_measurement AS CHAR) + FROM LOCATE('.', CAST(V.count_unit_measurement AS CHAR)) + ) + ) + END , ' ' , IFNULL(IFNULL(UM.symbol, UM.name_singular), '(No Unit of Measurement)') - ) - ) as new_order + ) + ) as new_order FROM partsltd_prod.Shop_Variation V INNER JOIN partsltd_prod.Shop_Unit_Measurement UM - ON V.id_unit_measurement = UM.id_unit_measurement + ON V.id_unit_measurement = UM.id_unit_measurement AND UM.active = 1 WHERE - V.id_type = 2 -) -UPDATE partsltd_prod.Shop_Variation V -INNER JOIN RANKED ON V.id_variation = RANKED.id_variation + V.id_type = 2 +) AS RANKED ON V.id_variation = RANKED.id_variation JOIN ( - SELECT CS.id_change_set + SELECT CS.id_change_set FROM partsltd_prod.Shop_Product_Change_Set CS ORDER BY CS.id_change_set DESC LIMIT 1 ) AS CS SET - V.display_order = RANKED.new_order + V.display_order = RANKED.new_order , V.id_change_set = CS.id_change_set WHERE - V.id_type = 2 + V.id_type = 2 ; # Product Permutation Variation Links diff --git a/static/dist/js/main.bundle.js b/static/dist/js/main.bundle.js index 55abc5e1..797a6ffc 100644 --- a/static/dist/js/main.bundle.js +++ b/static/dist/js/main.bundle.js @@ -324,6 +324,8 @@ var DOM = /*#__PURE__*/function () { returnVal = element.value; } else if (element.tagName === 'BUTTON' && element.classList.contains(flagActive)) { returnVal = element.classList.contains(flagDelete); + } else if (element.tagName === 'TD') { + returnVal = DOM.getElementAttributeValueCurrent(element); } else { returnVal = element.textContent; } @@ -2470,9 +2472,9 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { wasDirtyParentRows: wasDirtyParentRows }); } + var td = DOM.getCellFromElement(element); + DOM.setElementAttributeValueCurrent(td, DOM.getElementAttributeValueCurrent(element)); if (isDirtyElement != wasDirtyElement) { - var td = DOM.getCellFromElement(element); - DOM.setElementAttributeValueCurrent(td, DOM.getElementAttributeValueCurrent(element)); DOM.handleDirtyElement(td, isDirtyElement); this.updateAndToggleShowButtonsSaveCancel(); this.cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows); @@ -3025,14 +3027,14 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { }, { key: "handleChangeDdlProductVariationOrVariationType", value: function handleChangeDdlProductVariationOrVariationType(event, element) { - this.updateProductPermutationVariations(element); this.handleChangeNestedElementCellTable(event, element); + this.updateProductPermutationVariations(element); } }, { key: "hookupDdlsProductPermutationVariation", value: function hookupDdlsProductPermutationVariation() { var _this22 = this; - this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariation, function (event, ddlVariation) { + this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariation + ' select', function (event, ddlVariation) { _this22.handleChangeDdlProductVariationOrVariationType(event, ddlVariation); }); } @@ -3073,7 +3075,7 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { var variationsCell = element.closest('td.' + flagProductVariations); var variationPairsString = this.getProductPermutationVariationsText(variationsCell); DOM.setElementAttributeValueCurrent(variationsCell, variationPairsString); - DOM.isElementDirty(variationsCell); + this.handleChangeNestedElementCellTable(null, variationsCell); } }, { key: "getProductPermutationVariationsText", @@ -4739,6 +4741,7 @@ var PageStoreProductPermutations = /*#__PURE__*/function (_TableBasePage) { this.hookupFieldsProductPermutationVariation(); this.hookupDescriptionTextareas(); this.hookupCostFields(); + this.hookupProfitFields(); this.hookupLatencyManufactureInputs(); this.hookupQuantityFields(); this.hookupSubscriptionFields(); @@ -4797,6 +4800,7 @@ var PageStoreProductPermutations = /*#__PURE__*/function (_TableBasePage) { }, { key: "hookupProfitInputs", value: function hookupProfitInputs() { + debugger; this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagProfitLocalMin + ' input'); } }, { diff --git a/static/js/dom.js b/static/js/dom.js index 1c11a58d..37f30ec9 100644 --- a/static/js/dom.js +++ b/static/js/dom.js @@ -123,6 +123,9 @@ export default class DOM { else if (element.tagName === 'BUTTON' && element.classList.contains(flagActive)) { returnVal = element.classList.contains(flagDelete); } + else if (element.tagName === 'TD') { + returnVal = DOM.getElementAttributeValueCurrent(element); + } else { returnVal = element.textContent; } diff --git a/static/js/pages/base_table.js b/static/js/pages/base_table.js index f266c045..4c65b953 100644 --- a/static/js/pages/base_table.js +++ b/static/js/pages/base_table.js @@ -362,9 +362,9 @@ export default class TableBasePage extends BasePage { let wasDirtyElement = element.classList.contains(flagDirty); let isDirtyElement = DOM.updateAndCheckIsElementDirty(element); if (_verbose) { console.log({isDirtyElement, wasDirtyElement, wasDirtyParentRows}); } + let td = DOM.getCellFromElement(element); + DOM.setElementAttributeValueCurrent(td, DOM.getElementAttributeValueCurrent(element)); if (isDirtyElement != wasDirtyElement) { - let td = DOM.getCellFromElement(element); - DOM.setElementAttributeValueCurrent(td, DOM.getElementAttributeValueCurrent(element)); DOM.handleDirtyElement(td, isDirtyElement); this.updateAndToggleShowButtonsSaveCancel(); this.cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows); @@ -849,11 +849,11 @@ export default class TableBasePage extends BasePage { ); } handleChangeDdlProductVariationOrVariationType(event, element) { - this.updateProductPermutationVariations(element); this.handleChangeNestedElementCellTable(event, element); + this.updateProductPermutationVariations(element); } hookupDdlsProductPermutationVariation() { - this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariation, (event, ddlVariation) => { this.handleChangeDdlProductVariationOrVariationType(event, ddlVariation); }); + this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariation + ' select', (event, ddlVariation) => { this.handleChangeDdlProductVariationOrVariationType(event, ddlVariation); }); } hookupButtonsProductPermutationVariationAddDelete() { let selectorButton = idTableMain + ' td.' + flagProductVariations + ' tr.' + flagProductVariation + ' button'; @@ -884,7 +884,7 @@ export default class TableBasePage extends BasePage { let variationsCell = element.closest('td.' + flagProductVariations); let variationPairsString = this.getProductPermutationVariationsText(variationsCell); DOM.setElementAttributeValueCurrent(variationsCell, variationPairsString); - DOM.isElementDirty(variationsCell); + this.handleChangeNestedElementCellTable(null, variationsCell); } getProductPermutationVariationsText(variationsTd) { let rows = variationsTd.querySelectorAll(':scope tbody tr'); diff --git a/static/js/pages/store/product_permutations.js b/static/js/pages/store/product_permutations.js index 351d5e98..38caf37f 100644 --- a/static/js/pages/store/product_permutations.js +++ b/static/js/pages/store/product_permutations.js @@ -213,6 +213,7 @@ export default class PageStoreProductPermutations extends TableBasePage { this.hookupFieldsProductPermutationVariation(); this.hookupDescriptionTextareas(); this.hookupCostFields(); + this.hookupProfitFields(); this.hookupLatencyManufactureInputs(); this.hookupQuantityFields(); this.hookupSubscriptionFields(); @@ -256,7 +257,8 @@ export default class PageStoreProductPermutations extends TableBasePage { this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagCurrency, Utils.getListFromDict(currencies)); } */ - hookupProfitInputs(){ + hookupProfitInputs() { + debugger; this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagProfitLocalMin + ' input'); } hookupLatencyManufactureInputs(){