From 6c9fade761f77e7cfabb0bb83f9ac61b21296f72 Mon Sep 17 00:00:00 2001 From: dadaloop82 Date: Fri, 13 Mar 2026 14:50:08 +0000 Subject: [PATCH] Fix display confezioni parziali: mostra '1 conf da 1L + 800ml' invece di arrotondare a 2 --- assets/js/app.js | 57 ++++++++++++++++++++++++++++++++++++----------- data/dispensa.db | Bin 155648 -> 155648 bytes index.html | 2 +- 3 files changed, 45 insertions(+), 14 deletions(-) diff --git a/assets/js/app.js b/assets/js/app.js index 1528f70..aa36c35 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -1001,20 +1001,40 @@ function showAlertItemDetail(inventoryId, productId) { }); } +function formatSubRemainder(amt, pkgUnit) { + const uL = { 'kg': 'kg', 'g': 'g', 'l': 'L', 'ml': 'ml' }; + if (pkgUnit === 'l' && amt < 1) return `${Math.round(amt * 1000)}ml`; + if (pkgUnit === 'kg' && amt < 1) return `${Math.round(amt * 1000)}g`; + if (pkgUnit === 'ml' || pkgUnit === 'g') return `${Math.round(amt)}${uL[pkgUnit] || pkgUnit}`; + return `${Math.round(amt * 10) / 10}${uL[pkgUnit] || pkgUnit}`; +} + function formatQuantity(qty, unit, defaultQty, packageUnit) { if (!qty && qty !== 0) return ''; const n = parseFloat(qty); const unitLabels = { 'pz': 'pz', 'kg': 'kg', 'g': 'g', 'l': 'L', 'ml': 'ml', 'conf': 'conf' }; const label = unitLabels[unit] || unit || 'pz'; - let result; - if (n === Math.floor(n)) result = `${Math.floor(n)} ${label}`; - else if (unit === 'pz' || unit === 'conf') result = `${Math.round(n)} ${label}`; - else result = `${n.toFixed(1)} ${label}`; - // Add package info for conf + + // Special handling for conf with partial packages if (unit === 'conf' && packageUnit && defaultQty > 0) { const pkgLabel = unitLabels[packageUnit] || packageUnit; - result += ` (da ${defaultQty}${pkgLabel})`; + const wholeConf = Math.floor(n + 0.001); + const fractionalConf = Math.round((n - wholeConf) * 1000) / 1000; + + if (fractionalConf < 0.01) { + return `${wholeConf} conf (da ${defaultQty}${pkgLabel})`; + } + const remainderText = formatSubRemainder(fractionalConf * defaultQty, packageUnit); + if (wholeConf > 0) { + return `${wholeConf} conf (da ${defaultQty}${pkgLabel}) + ${remainderText}`; + } + return remainderText; } + + let result; + if (n === Math.floor(n)) result = `${Math.floor(n)} ${label}`; + else if (unit === 'pz') result = `${Math.round(n)} ${label}`; + else result = `${n.toFixed(1)} ${label}`; return result; } @@ -1024,19 +1044,30 @@ function formatQuantityParts(qty, unit, defaultQty, packageUnit) { const n = parseFloat(qty) || 0; const unitLabels = { 'pz': 'pz', 'kg': 'kg', 'g': 'g', 'l': 'L', 'ml': 'ml', 'conf': 'conf' }; const label = unitLabels[unit] || unit || 'pz'; + + // Special handling for conf with partial packages + if (unit === 'conf' && packageUnit && defaultQty > 0) { + const pkgLabel = unitLabels[packageUnit] || packageUnit; + const wholeConf = Math.floor(n + 0.001); + const fractionalConf = Math.round((n - wholeConf) * 1000) / 1000; + + if (fractionalConf < 0.01) { + return { mainQty: `${wholeConf}`, unitLabel: 'conf', packageDetail: `da ${defaultQty}${pkgLabel}`, fraction: '' }; + } + const remainderText = formatSubRemainder(fractionalConf * defaultQty, packageUnit); + if (wholeConf > 0) { + return { mainQty: `${wholeConf}`, unitLabel: 'conf', packageDetail: `da ${defaultQty}${pkgLabel}`, fraction: `+ ${remainderText}` }; + } + return { mainQty: remainderText, unitLabel: '', packageDetail: '', fraction: '' }; + } + let mainQty; if (n === Math.floor(n)) mainQty = `${Math.floor(n)}`; - else if (unit === 'pz' || unit === 'conf') mainQty = `${Math.round(n)}`; + else if (unit === 'pz') mainQty = `${Math.round(n)}`; else mainQty = `${n.toFixed(1)}`; let packageDetail = ''; - if (unit === 'conf' && packageUnit && defaultQty > 0) { - const pkgLabel = unitLabels[packageUnit] || packageUnit; - packageDetail = `da ${defaultQty}${pkgLabel}`; - } - let fraction = ''; - // For conf, defaultQty is the package SIZE (e.g. 300g), not a count; fraction doesn't apply if (unit !== 'conf' && defaultQty && defaultQty > 1) { const d = parseFloat(defaultQty); const ratio = n / d; diff --git a/data/dispensa.db b/data/dispensa.db index ce272dc3aeb55cb2b0e1d8fc5839dfac8b260e5e..cc49dc502653f5d17bfad0261f6f7349dbc2226c 100644 GIT binary patch delta 232 zcmZoTz}awsbHg@!#`&AK+xrSI&*Rab%pP!^iAR6)y#Rl1b~a{4CO3xpo6TZQFJ@vF zn99s(%*6V0s|DjhR%uTc4hBY9c12@jx0KA{g4Dd?MEgHyK;Z23t(=T%T*eB9CRQe9 zR>qdoUDz1Uuy8J9@SZr)eS0)JqZ<zFUt_jsT{WHk0b?yA>-L2K zOscHn`i=5HIhC2wn2B@Y zRtv_1tSsyT4Bitbx=(juV?4vczyRiKk7j3dV-j(4;b35tWmGgac1y`DE=bKQPGp)c z!p5k^Wu#zeX=P$)Wni-XDJP@+HD){3JJZ=8FxGBX6o_Eme&;EpMi#R#$ExY<0Zg-j TVjLXPCq^&{Z{Hii - +