From 749cbfbb2a22180bdcad7d42bf328e3f95cbe4e5 Mon Sep 17 00:00:00 2001 From: siiky Date: Mon, 7 Nov 2022 17:51:35 +0000 Subject: [PATCH 1/7] fix: show "Add override" even if there are no two-way machines --- .../pages/Notifications/sections/FiatBalanceOverrides.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js b/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js index 73415121..fd70de7a 100644 --- a/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js +++ b/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js @@ -5,7 +5,6 @@ import * as Yup from 'yup' import { Table as EditableTable } from 'src/components/editableTable' import { NumberInput } from 'src/components/inputs/formik/' import Autocomplete from 'src/components/inputs/formik/Autocomplete' -import { fromNamespace } from 'src/utils/config' import { transformNumber } from 'src/utils/number' import NotificationsCtx from '../NotificationsContext' @@ -45,13 +44,9 @@ const FiatBalanceOverrides = ({ config, section }) => { const setupValues = data?.fiatBalanceOverrides ?? [] const innerSetEditing = it => setEditing(NAME, it) - const cashoutConfig = it => fromNamespace(it)(config) - const overriddenMachines = R.map(override => override.machine, setupValues) const suggestionFilter = R.filter( - it => - !R.includes(it.deviceId, overriddenMachines) && - cashoutConfig(it.deviceId).active + it => !R.includes(it.deviceId, overriddenMachines) ) const suggestions = suggestionFilter(machines) From c63dbf438dce071a22c924d773b36ceb0f93ae8f Mon Sep 17 00:00:00 2001 From: siiky Date: Mon, 7 Nov 2022 17:55:29 +0000 Subject: [PATCH 2/7] refactor: concat instead of push --- .../sections/FiatBalanceOverrides.js | 69 +++++++++---------- 1 file changed, 33 insertions(+), 36 deletions(-) diff --git a/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js b/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js index fd70de7a..097ef66e 100644 --- a/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js +++ b/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js @@ -51,7 +51,7 @@ const FiatBalanceOverrides = ({ config, section }) => { const suggestions = suggestionFilter(machines) const findSuggestion = it => { - const coin = R.compose(R.find(R.propEq('deviceId', it?.machine)))(machines) + const coin = R.find(R.propEq('deviceId', it?.machine), machines) return coin ? [coin] : [] } @@ -130,37 +130,35 @@ const FiatBalanceOverrides = ({ config, section }) => { const viewMachine = it => R.compose(R.path(['name']), R.find(R.propEq('deviceId', it)))(machines) - const elements = [ - { - name: MACHINE_KEY, - width: widthsByNumberOfCassettes[maxNumberOfCassettes].machine, - size: 'sm', - view: viewMachine, - input: Autocomplete, - inputProps: { - options: it => R.concat(suggestions, findSuggestion(it)), - valueProp: 'deviceId', - labelProp: 'name' + const elements = R.concat( + [ + { + name: MACHINE_KEY, + width: widthsByNumberOfCassettes[maxNumberOfCassettes].machine, + size: 'sm', + view: viewMachine, + input: Autocomplete, + inputProps: { + options: it => R.concat(suggestions, findSuggestion(it)), + valueProp: 'deviceId', + labelProp: 'name' + } + }, + { + name: CASHBOX_KEY, + display: 'Cashbox', + width: 155, + textAlign: 'right', + bold: true, + input: NumberInput, + suffix: 'notes', + inputProps: { + decimalPlaces: 0 + } } - }, - { - name: CASHBOX_KEY, - display: 'Cashbox', - width: 155, - textAlign: 'right', - bold: true, - input: NumberInput, - suffix: 'notes', - inputProps: { - decimalPlaces: 0 - } - } - ] - - R.until( - R.gt(R.__, maxNumberOfCassettes), - it => { - elements.push({ + ], + R.map( + it => ({ name: `fillingPercentageCassette${it}`, display: `Cash cassette ${it}`, width: widthsByNumberOfCassettes[maxNumberOfCassettes].cassette, @@ -172,15 +170,14 @@ const FiatBalanceOverrides = ({ config, section }) => { inputProps: { decimalPlaces: 0 }, - view: it => it?.toString() ?? '—', + view: el => el?.toString() ?? '—', isHidden: value => it > machines.find(({ deviceId }) => deviceId === value.machine) ?.numberOfCassettes - }) - return R.add(1, it) - }, - 1 + }), + R.range(1, maxNumberOfCassettes + 1) + ) ) return ( From ba5f657d44a00e03bc2a37ead77bde107905c06a Mon Sep 17 00:00:00 2001 From: siiky Date: Mon, 7 Nov 2022 17:58:21 +0000 Subject: [PATCH 3/7] feat: disable cassette fields a machine doesn't have --- .../pages/Notifications/sections/FiatBalanceOverrides.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js b/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js index 097ef66e..38dcea28 100644 --- a/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js +++ b/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js @@ -173,8 +173,11 @@ const FiatBalanceOverrides = ({ config, section }) => { view: el => el?.toString() ?? '—', isHidden: value => it > - machines.find(({ deviceId }) => deviceId === value.machine) - ?.numberOfCassettes + R.defaultTo( + 0, + machines.find(({ deviceId }) => deviceId === value.machine) + ?.numberOfCassettes + ) }), R.range(1, maxNumberOfCassettes + 1) ) From 46516c16b8f89730145a5fd0d1636e818dd905d0 Mon Sep 17 00:00:00 2001 From: siiky Date: Wed, 9 Nov 2022 17:31:20 +0000 Subject: [PATCH 4/7] feat: support custom display text --- new-lamassu-admin/src/components/editableTable/Header.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/new-lamassu-admin/src/components/editableTable/Header.js b/new-lamassu-admin/src/components/editableTable/Header.js index 93a1fdf0..07efcdac 100644 --- a/new-lamassu-admin/src/components/editableTable/Header.js +++ b/new-lamassu-admin/src/components/editableTable/Header.js @@ -70,7 +70,7 @@ const Header = () => { } const mapElement = ( - { name, width = DEFAULT_COL_SIZE, header, textAlign }, + { name, display, width = DEFAULT_COL_SIZE, header, textAlign }, idx ) => { const orderClasses = classnames({ @@ -99,7 +99,7 @@ const Header = () => { <>{attachOrderedByToComplexHeader(header) ?? header} ) : ( - {startCase(name)}{' '} + {!R.isNil(display) ? display : startCase(name)}{' '} {!R.isNil(orderedBy) && R.equals(name, orderedBy.code) && '-'} )} From 2297f98246cf1db27380e54519924b170ec475da Mon Sep 17 00:00:00 2001 From: siiky Date: Tue, 8 Nov 2022 14:24:17 +0000 Subject: [PATCH 5/7] fix: field headers --- .../sections/FiatBalanceOverrides.js | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js b/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js index 38dcea28..a8712089 100644 --- a/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js +++ b/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js @@ -45,10 +45,11 @@ const FiatBalanceOverrides = ({ config, section }) => { const innerSetEditing = it => setEditing(NAME, it) const overriddenMachines = R.map(override => override.machine, setupValues) - const suggestionFilter = R.filter( - it => !R.includes(it.deviceId, overriddenMachines) + const suggestions = R.differenceWith( + (it, m) => it.deviceId === m, + machines, + overriddenMachines ) - const suggestions = suggestionFilter(machines) const findSuggestion = it => { const coin = R.find(R.propEq('deviceId', it?.machine), machines) @@ -78,7 +79,6 @@ const FiatBalanceOverrides = ({ config, section }) => { .shape({ [MACHINE_KEY]: Yup.string() .label('Machine') - .nullable() .required(), [CASHBOX_KEY]: Yup.number() .label('Cash box') @@ -116,16 +116,15 @@ const FiatBalanceOverrides = ({ config, section }) => { .max(percentMax) .nullable() }) - .test((values, context) => { - const picked = R.pick(CASSETTE_LIST, values) - - if (CASSETTE_LIST.some(it => !R.isNil(picked[it]))) return - - return context.createError({ - path: CASSETTE_1_KEY, - message: 'At least one of the cassettes must have a value' - }) - }) + .test((values, context) => + R.any(key => !R.isNil(values[key]), R.prepend(CASHBOX_KEY, CASSETTE_LIST)) + ? undefined + : context.createError({ + path: CASHBOX_KEY, + message: + 'The cash box or at least one of the cassettes must have a value' + }) + ) const viewMachine = it => R.compose(R.path(['name']), R.find(R.propEq('deviceId', it)))(machines) @@ -134,6 +133,7 @@ const FiatBalanceOverrides = ({ config, section }) => { [ { name: MACHINE_KEY, + display: 'Machine', width: widthsByNumberOfCassettes[maxNumberOfCassettes].machine, size: 'sm', view: viewMachine, @@ -146,7 +146,7 @@ const FiatBalanceOverrides = ({ config, section }) => { }, { name: CASHBOX_KEY, - display: 'Cashbox', + display: 'Cash box', width: 155, textAlign: 'right', bold: true, From c338d50086cd93ea085766bfb99e071b37835343 Mon Sep 17 00:00:00 2001 From: siiky Date: Tue, 8 Nov 2022 15:16:16 +0000 Subject: [PATCH 6/7] refactor: make cash box field's width configurable --- .../pages/Notifications/sections/FiatBalanceOverrides.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js b/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js index a8712089..376ce369 100644 --- a/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js +++ b/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js @@ -26,9 +26,9 @@ const CASSETTE_LIST = [ ] const widthsByNumberOfCassettes = { - 2: { machine: 230, cassette: 250 }, - 3: { machine: 216, cassette: 270 }, - 4: { machine: 210, cassette: 204 } + 2: { machine: 230, cashbox: 150, cassette: 250 }, + 3: { machine: 216, cashbox: 150, cassette: 270 }, + 4: { machine: 210, cashbox: 150, cassette: 204 } } const FiatBalanceOverrides = ({ config, section }) => { @@ -147,7 +147,7 @@ const FiatBalanceOverrides = ({ config, section }) => { { name: CASHBOX_KEY, display: 'Cash box', - width: 155, + width: widthsByNumberOfCassettes[maxNumberOfCassettes].cashbox, textAlign: 'right', bold: true, input: NumberInput, From 9898c0651eb0c5bd6038f5bef60d7d3142efd604 Mon Sep 17 00:00:00 2001 From: siiky Date: Wed, 9 Nov 2022 17:36:07 +0000 Subject: [PATCH 7/7] feat: disable cassette overrides for one-way machines --- .../Notifications/sections/FiatBalanceOverrides.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js b/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js index 376ce369..e7cfeb4c 100644 --- a/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js +++ b/new-lamassu-admin/src/pages/Notifications/sections/FiatBalanceOverrides.js @@ -5,6 +5,7 @@ import * as Yup from 'yup' import { Table as EditableTable } from 'src/components/editableTable' import { NumberInput } from 'src/components/inputs/formik/' import Autocomplete from 'src/components/inputs/formik/Autocomplete' +import { fromNamespace } from 'src/utils/config' import { transformNumber } from 'src/utils/number' import NotificationsCtx from '../NotificationsContext' @@ -43,6 +44,7 @@ const FiatBalanceOverrides = ({ config, section }) => { const setupValues = data?.fiatBalanceOverrides ?? [] const innerSetEditing = it => setEditing(NAME, it) + const cashoutConfig = it => fromNamespace(it)(config) const overriddenMachines = R.map(override => override.machine, setupValues) const suggestions = R.differenceWith( @@ -172,12 +174,13 @@ const FiatBalanceOverrides = ({ config, section }) => { }, view: el => el?.toString() ?? '—', isHidden: value => + !cashoutConfig(value.machine).active || it > - R.defaultTo( - 0, - machines.find(({ deviceId }) => deviceId === value.machine) - ?.numberOfCassettes - ) + R.defaultTo( + 0, + machines.find(({ deviceId }) => deviceId === value.machine) + ?.numberOfCassettes + ) }), R.range(1, maxNumberOfCassettes + 1) )