From dc2f59f2481ac84eabf7e369138ae0e852d8ef4b 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 --- .../en/includes/modals/confirm_cashup.inc | 106 +++++++ .../en/includes/modals/trigger_cashup.inc | 50 +++ .../prog/en/modules/pos/register.tt | 286 ++---------------- .../prog/en/modules/pos/registers.tt | 265 ++-------------- .../prog/js/modals/cashup_modals.js | 273 +++++++++++++++++ pos/register.pl | 18 +- pos/registers.pl | 17 +- 7 files changed, 505 insertions(+), 510 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 70ff0ae0133..6f98d0ba496 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 e983c8ed7c2..657fdff2e6d 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 %] - - - - - - - -