From bd9bd6bc73aa532a615d9763ac145ed3089df282 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 | 275 +----------------- .../prog/en/modules/pos/registers.tt | 253 +--------------- .../prog/js/modals/cashup_modals.js | 273 +++++++++++++++++ pos/register.pl | 18 +- pos/registers.pl | 17 +- 7 files changed, 482 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..41b43563ce0 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..c4172e6f602 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 %] - - - - - - - -