From 8fbcc67230b9eda83e06763f55e3949a1e9b2a5f Mon Sep 17 00:00:00 2001 From: Tom Butcher Date: Sun, 21 Jun 2026 23:30:36 +0100 Subject: [PATCH] Refactor Part and Product models to change 'disabled' property to 'readOnly' for margin fields. Implement value calculation for margin based on price and cost when priceMode is 'amount', enhancing data handling and user experience. --- src/database/models/Part.js | 14 +++++++++++++- src/database/models/Product.js | 14 +++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/database/models/Part.js b/src/database/models/Part.js index bed34e5..8925de4 100644 --- a/src/database/models/Part.js +++ b/src/database/models/Part.js @@ -224,11 +224,23 @@ export const Part = { label: 'Margin', required: true, type: 'number', - disabled: (objectData) => objectData?.priceMode == 'amount', + readOnly: (objectData) => objectData?.priceMode == 'amount', suffix: '%', min: 0, max: 100, step: 0.01, + value: (objectData) => { + const priceMode = objectData?.priceMode + const cost = objectData?.cost + if (priceMode == 'amount') { + const price = objectData?.price + if (price != null && cost != null) { + return Number(((price / cost - 1) * 100).toFixed(2)) || undefined + } + return undefined + } + return objectData?.margin + }, columnWidth: 85 }, { diff --git a/src/database/models/Product.js b/src/database/models/Product.js index cc585d7..0971e58 100644 --- a/src/database/models/Product.js +++ b/src/database/models/Product.js @@ -254,11 +254,23 @@ export const Product = { label: 'Margin', required: true, type: 'number', - disabled: (objectData) => objectData?.priceMode == 'amount', + readOnly: (objectData) => objectData?.priceMode == 'amount', suffix: '%', min: 0, max: 100, step: 0.01, + value: (objectData) => { + const priceMode = objectData?.priceMode + const cost = objectData?.cost + if (priceMode == 'amount') { + const price = objectData?.price + if (price != null && cost != null) { + return Number(((price / cost - 1) * 100).toFixed(2)) || undefined + } + return undefined + } + return objectData?.margin + }, columnWidth: 85 }, {