From f23c628e75043c7eebe9415017cb94290dcae6d4 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Wed, 10 Dec 2025 17:58:37 +0000 Subject: [PATCH] Bug 40445: Refactor cashup modals to eliminate duplication This patch refactors the cashup modal implementation across register.tt and registers.tt pages to eliminate significant code duplication by following Koha's conventions for shared modal templates and JavaScript. Changes: 1. Created shared modal templates: - includes/modals/trigger_cashup.inc: Shared trigger cashup modal - includes/modals/confirm_cashup.inc: Shared confirm cashup modal with reconciliation support 2. Created shared JavaScript module: - js/modals/cashup_modals.js: Initialization functions for both modals with configuration-driven behavior 3. Updated backend scripts: - pos/register.pl: Added redirect_to parameter support for flexible redirects, fixed regex to accept negative cashup amounts - pos/registers.pl: Added authorized value and system preference parameters for consistent functionality 4. Updated template files: - pos/register.tt: Replaced inline modals and JavaScript with shared includes (~165 lines removed) - pos/registers.tt: Replaced inline modals and JavaScript with shared includes (~150 lines removed) Benefits: - Eliminates ~355 lines of duplicated code - Single source of truth for cashup modal logic - Consistent functionality across both pages - Flexible redirect behavior (stay on registers page or go to individual register page) - Proper support for negative cashup amounts (float deficits) - Follows established Koha patterns for shared modals Test plan: 1. Apply patch and run: yarn build 2. Test cashup workflows on register.tt: - Start cashup and complete with reconciliation - Quick cashup - Test with positive and negative amounts 3. Test cashup workflows on registers.tt: - Individual register cashup (should redirect back to registers) - Verify authorized value dropdown appears if configured - Test required note validation if enabled 4. Verify reconciliation calculations work correctly 5. Test cross-page workflow: start cashup in registers.tt, complete in register.tt Sponsored-by: OpenFifth Signed-off-by: Jackie Usher --- .../en/includes/modals/confirm_cashup.inc | 106 +++++++ .../en/includes/modals/trigger_cashup.inc | 50 ++++ .../prog/en/modules/pos/register.tt | 275 +----------------- .../prog/en/modules/pos/registers.tt | 253 +--------------- .../prog/js/modals/cashup_modals.js | 273 +++++++++++++++++ pos/register.pl | 20 +- pos/registers.pl | 17 +- 7 files changed, 483 insertions(+), 511 deletions(-) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/includes/modals/confirm_cashup.inc create mode 100644 koha-tmpl/intranet-tmpl/prog/en/includes/modals/trigger_cashup.inc create mode 100644 koha-tmpl/intranet-tmpl/prog/js/modals/cashup_modals.js diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/modals/confirm_cashup.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/modals/confirm_cashup.inc new file mode 100644 index 00000000000..e0f4e53c377 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/modals/confirm_cashup.inc @@ -0,0 +1,106 @@ +[% USE raw %] + + + + diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/modals/trigger_cashup.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/modals/trigger_cashup.inc new file mode 100644 index 00000000000..302e985f5c6 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/modals/trigger_cashup.inc @@ -0,0 +1,50 @@ +[% USE raw %] + + + + diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/pos/register.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/pos/register.tt index af26088afdc..f85cb5c982e 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/pos/register.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/pos/register.tt @@ -114,7 +114,9 @@ [% IF cashup_in_progress %] [% ELSE %] - + [% END %] [% END %] @@ -425,97 +427,6 @@ [% END %] [% END %] - - - - - - - - [% INCLUDE 'modals/cashup_summary.inc' %] +[% INCLUDE 'modals/trigger_cashup.inc' modal_id='triggerCashupModal' register_description=register.description register_id=register.id %] +[% INCLUDE 'modals/confirm_cashup.inc' modal_id='confirmCashupModal' reconciliation_note_avs=reconciliation_note_avs reconciliation_note_required=reconciliation_note_required cashup_in_progress=cashup_in_progress %] [% MACRO jsinclude BLOCK %] [% INCLUDE 'datatables.inc' %] [% INCLUDE 'format_price.inc' %] [% INCLUDE 'js-date-format.inc' %] - [% Asset.js("js/cashup_modal.js") | $raw %] + [% Asset.js("js/modals/cashup_modals.js") | $raw %] [% Asset.js("js/modal_printer.js") | $raw %] [% INCLUDE 'calendar.inc' %] [% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/pos/registers.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/pos/registers.tt index de7a6455c40..8946faa30a0 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/pos/registers.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/pos/registers.tt @@ -257,46 +257,6 @@ [% END %] [% END %] - - - - - - - -