From 271ef0f602e54d6f07bc3d713fd3574f23b158bd Mon Sep 17 00:00:00 2001 From: siiky Date: Thu, 19 Oct 2023 16:25:13 +0100 Subject: [PATCH 1/6] refactor: HCM2 has recyclers, not cassettes --- new-lamassu-admin/src/utils/machine.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/new-lamassu-admin/src/utils/machine.js b/new-lamassu-admin/src/utils/machine.js index 0a6d65f1..362e5e35 100644 --- a/new-lamassu-admin/src/utils/machine.js +++ b/new-lamassu-admin/src/utils/machine.js @@ -18,7 +18,7 @@ const cashUnitCapacity = { }, grandola: { cashbox: 2500, - cassette: 2800 + recycler: 2800 }, aveiro: { cashbox: 1500, From 3be343bc26571c07f98fef1cd5df5ce3fede3684 Mon Sep 17 00:00:00 2001 From: siiky Date: Thu, 19 Oct 2023 16:26:53 +0100 Subject: [PATCH 2/6] feat: re-add validation steps for recyclers --- .../src/pages/Maintenance/Wizard/Wizard.js | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/new-lamassu-admin/src/pages/Maintenance/Wizard/Wizard.js b/new-lamassu-admin/src/pages/Maintenance/Wizard/Wizard.js index 27dd8fb0..511e12b5 100644 --- a/new-lamassu-admin/src/pages/Maintenance/Wizard/Wizard.js +++ b/new-lamassu-admin/src/pages/Maintenance/Wizard/Wizard.js @@ -4,7 +4,11 @@ import * as Yup from 'yup' import Modal from 'src/components/Modal' import { MAX_NUMBER_OF_CASSETTES } from 'src/utils/constants' -import { getCashUnitCapacity, modelPrettifier } from 'src/utils/machine' +import { + cashUnitCapacity, + getCashUnitCapacity, + modelPrettifier +} from 'src/utils/machine' import { defaultToZero } from 'src/utils/number' import WizardSplash from './WizardSplash' @@ -27,6 +31,8 @@ const RECYCLER_FIELDS = [ 'recycler6' ] +const canManuallyLoadRecyclers = ({ model }) => ['grandola'].includes(model) + const Wizard = ({ machine, cashoutSettings, locale, onClose, save, error }) => { const [{ step, config }, setState] = useState({ step: 0, @@ -39,8 +45,9 @@ const Wizard = ({ machine, cashoutSettings, locale, onClose, save, error }) => { const numberOfCassettes = isCashOutDisabled ? 0 : machine.numberOfCassettes const numberOfRecyclers = machine.numberOfRecyclers - // const LAST_STEP = numberOfCassettes + numberOfRecyclers * 2 + 1 - const LAST_STEP = numberOfCassettes + 1 + const LAST_STEP = canManuallyLoadRecyclers(machine) + ? numberOfCassettes + numberOfRecyclers + 1 + : numberOfCassettes + 1 const title = `Update counts` const isLastStep = step === LAST_STEP @@ -120,6 +127,29 @@ const Wizard = ({ machine, cashoutSettings, locale, onClose, save, error }) => { })) ) + const makeRecyclerSteps = R.pipe( + R.add(1), + R.range(1), + R.chain(i => ({ + type: `recycler ${i}`, + schema: Yup.object().shape({ + [`recycler${i}`]: Yup.number() + .label('Bill count') + .positive() + .integer() + .required() + .min(0) + .max( + cashUnitCapacity[machine.model].recycler, + `${modelPrettifier[machine.model]} + maximum recycler capacity is ${ + cashUnitCapacity[machine.model].recycler + } bills` + ) + }) + })) + ) + const makeCassettesInitialValues = () => !R.isEmpty(cashoutSettings) ? R.reduce( @@ -149,7 +179,7 @@ const Wizard = ({ machine, cashoutSettings, locale, onClose, save, error }) => { R.merge(makeCassettesInitialValues(), makeRecyclersInitialValues()) const steps = R.pipe( - // R.concat(makeStackerSteps(numberOfStackers)), + R.concat(makeRecyclerSteps(numberOfRecyclers)), R.concat(makeCassetteSteps(numberOfCassettes)), R.concat([ { From 33da2ea5e366a968a641d20964df29c212f71746 Mon Sep 17 00:00:00 2001 From: siiky Date: Thu, 19 Oct 2023 16:40:52 +0100 Subject: [PATCH 3/6] feat: add recycler steps to maintenance wizard --- .../pages/Maintenance/Wizard/WizardStep.js | 55 ++++++++++++++----- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/new-lamassu-admin/src/pages/Maintenance/Wizard/WizardStep.js b/new-lamassu-admin/src/pages/Maintenance/Wizard/WizardStep.js index 44498e2b..04595563 100644 --- a/new-lamassu-admin/src/pages/Maintenance/Wizard/WizardStep.js +++ b/new-lamassu-admin/src/pages/Maintenance/Wizard/WizardStep.js @@ -108,26 +108,51 @@ const useStyles = makeStyles(styles) const CASHBOX_STEP = 1 +const isCashboxStep = step => step === CASHBOX_STEP +const isCassetteStep = (step, numberOfCassettes) => + step > 1 && step <= numberOfCassettes + 1 +const isRecyclerStep = (step, numberOfCassettes, numberOfRecyclers) => + step > numberOfCassettes + 1 && + step <= numberOfCassettes + numberOfRecyclers + 1 + const cassetesArtworks = (step, numberOfCassettes, numberOfRecyclers) => { const cassetteStepsStart = CASHBOX_STEP + 1 - return [ - [cassetteOne], - [cassetteOne, cassetteTwo], - [tejo3CassetteOne, tejo3CassetteTwo, tejo3CassetteThree], - [tejo4CassetteOne, tejo4CassetteTwo, tejo4CassetteThree, tejo4CassetteFour] - ][numberOfCassettes - cassetteStepsStart + 1][step - cassetteStepsStart] + return isCassetteStep(step, numberOfCassettes) + ? [ + [cassetteOne], + [cassetteOne, cassetteTwo], + [tejo3CassetteOne, tejo3CassetteTwo, tejo3CassetteThree], + [ + tejo4CassetteOne, + tejo4CassetteTwo, + tejo4CassetteThree, + tejo4CassetteFour + ] + ][numberOfCassettes - 1][step - cassetteStepsStart] + : [ + /* TODO: Recycler artwork */ + [cassetteOne], + [cassetteOne, cassetteTwo], + [tejo3CassetteOne, tejo3CassetteTwo, tejo3CassetteThree], + [ + tejo4CassetteOne, + tejo4CassetteTwo, + tejo4CassetteThree, + tejo4CassetteFour + ] + ][numberOfRecyclers - 1][step - cassetteStepsStart] } const getCashUnitFieldName = (step, numberOfCassettes, numberOfRecyclers) => { - if (step === CASHBOX_STEP) return { name: 'cashbox', category: 'cashbox' } + if (isCashboxStep(step)) return { name: 'cashbox', category: 'cashbox' } const cassetteStepsStart = CASHBOX_STEP + 1 - if (step < cassetteStepsStart + numberOfCassettes) + if (isCassetteStep(step, numberOfCassettes)) return { name: `cassette${step - cassetteStepsStart + 1}`, category: 'cassette' } const recyclerStepsStart = CASHBOX_STEP + numberOfCassettes + 1 - if (step < recyclerStepsStart + numberOfRecyclers) + if (isRecyclerStep(step, numberOfCassettes, numberOfRecyclers)) return { name: `recycler${Math.ceil(step - recyclerStepsStart + 1)}`, category: 'recycler' @@ -180,7 +205,7 @@ const WizardStep = ({ - {step === 1 && ( + {isCashboxStep(step) && ( cassette
)} - {step > 1 && ( + {!isCashboxStep(step) && ( cassette {startCase(cashUnitField)} ( - {R.includes('cassette', cashUnitField) + {cashUnitCategory === 'cassette' ? `dispenser` - : R.includes('recycler', cashUnitField) + : cashUnitCategory === 'recycler' ? `recycler` : ``} ) From 277335fea4e3031f72a4f7fee37f80ae17bb4c2f Mon Sep 17 00:00:00 2001 From: siiky Date: Thu, 19 Oct 2023 20:11:44 +0100 Subject: [PATCH 4/6] fix: saving recycler counts --- new-lamassu-admin/src/pages/Maintenance/Wizard/Wizard.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/new-lamassu-admin/src/pages/Maintenance/Wizard/Wizard.js b/new-lamassu-admin/src/pages/Maintenance/Wizard/Wizard.js index 511e12b5..497127d1 100644 --- a/new-lamassu-admin/src/pages/Maintenance/Wizard/Wizard.js +++ b/new-lamassu-admin/src/pages/Maintenance/Wizard/Wizard.js @@ -66,8 +66,7 @@ const Wizard = ({ machine, cashoutSettings, locale, onClose, save, error }) => { const buildRecyclerObj = cassetteInput => { return R.reduce( (acc, value) => { - acc[value] = machine.cashUnits[value] - // acc[value] = defaultToZero(cassetteInput[value]) + acc[value] = defaultToZero(cassetteInput[value]) return acc }, {}, From d8a4f89194d0b6f5ebbd64342add4a9ff26c7a22 Mon Sep 17 00:00:00 2001 From: siiky Date: Thu, 19 Oct 2023 20:14:49 +0100 Subject: [PATCH 5/6] refactor: deduplicate cash unit object creation --- .../src/pages/Maintenance/Wizard/Wizard.js | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/new-lamassu-admin/src/pages/Maintenance/Wizard/Wizard.js b/new-lamassu-admin/src/pages/Maintenance/Wizard/Wizard.js index 497127d1..879db68a 100644 --- a/new-lamassu-admin/src/pages/Maintenance/Wizard/Wizard.js +++ b/new-lamassu-admin/src/pages/Maintenance/Wizard/Wizard.js @@ -52,25 +52,14 @@ const Wizard = ({ machine, cashoutSettings, locale, onClose, save, error }) => { const title = `Update counts` const isLastStep = step === LAST_STEP - const buildCassetteObj = cassetteInput => { + const buildCashUnitObj = (fields, cassetteInput) => { return R.reduce( (acc, value) => { acc[value] = defaultToZero(cassetteInput[value]) return acc }, {}, - CASSETTE_FIELDS - ) - } - - const buildRecyclerObj = cassetteInput => { - return R.reduce( - (acc, value) => { - acc[value] = defaultToZero(cassetteInput[value]) - return acc - }, - {}, - RECYCLER_FIELDS + fields ) } @@ -82,8 +71,8 @@ const Wizard = ({ machine, cashoutSettings, locale, onClose, save, error }) => { it?.wasCashboxEmptied ].includes('YES') - const cassettes = buildCassetteObj(it) - const recyclers = buildRecyclerObj(it) + const cassettes = buildCashUnitObj(CASSETTE_FIELDS, it) + const recyclers = buildCashUnitObj(RECYCLER_FIELDS, it) const cashUnits = { cashbox: wasCashboxEmptied ? 0 : machine?.cashUnits.cashbox, From bb0b5766e4a5d1e27e82507043a0d256dea1a7d6 Mon Sep 17 00:00:00 2001 From: siiky Date: Thu, 19 Oct 2023 20:21:28 +0100 Subject: [PATCH 6/6] refactor: simplify `buildCashUnitObj` --- .../src/pages/Maintenance/Wizard/Wizard.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/new-lamassu-admin/src/pages/Maintenance/Wizard/Wizard.js b/new-lamassu-admin/src/pages/Maintenance/Wizard/Wizard.js index 879db68a..2bcd8009 100644 --- a/new-lamassu-admin/src/pages/Maintenance/Wizard/Wizard.js +++ b/new-lamassu-admin/src/pages/Maintenance/Wizard/Wizard.js @@ -52,16 +52,8 @@ const Wizard = ({ machine, cashoutSettings, locale, onClose, save, error }) => { const title = `Update counts` const isLastStep = step === LAST_STEP - const buildCashUnitObj = (fields, cassetteInput) => { - return R.reduce( - (acc, value) => { - acc[value] = defaultToZero(cassetteInput[value]) - return acc - }, - {}, - fields - ) - } + const buildCashUnitObj = (fields, cassetteInput) => + R.pipe(R.pickAll(fields), R.map(defaultToZero))(cassetteInput) const onContinue = it => { const newConfig = R.merge(config, it)