diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt index 25c9a152e8..4728744f58 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt @@ -646,6 +646,25 @@ $("#returned, #refund_type").focus(); }); + // Validate cash register requirement for refunds + [% IF Koha.Preference('UseCashRegisters') %] + $("#refund_form").on("submit", function(e) { + var refund_type = $("#refund_type").val(); + var register = $("#refund_registerid").val(); + + // Only require register for non-AC refunds with CASH or SIP00 payment types + if (refund_type && refund_type !== 'AC' && (refund_type === 'CASH' || refund_type.match(/^SIP\d{2}$/))) { + if (!register || register === '') { + e.preventDefault(); + alert(_("Cash register is required for cash refunds")); + $("#refund_registerid").focus(); + return false; + } + } + return true; + }); + [% END %] + $("#applyDiscountModal").on("shown.bs.modal", function (e) { var button = $(e.relatedTarget); var item = button.data("item"); diff --git a/pos/register.pl b/pos/register.pl index 3e785dbf18..3b162746e1 100755 --- a/pos/register.pl +++ b/pos/register.pl @@ -138,19 +138,24 @@ if ( !$registers->count ) { amount => $amount } ); - my $payout = $refund->payout( - { - payout_type => $refund_type, - branch => $library_id, - staff_id => $logged_in_user->id, - cash_register => $cash_register->id, - interface => 'intranet', - amount => $amount - } - ); - + unless ( $refund_type eq 'AC' ) { + my $payout = $refund->payout( + { + payout_type => $refund_type, + branch => $library_id, + staff_id => $logged_in_user->id, + cash_register => $registerid, + interface => 'intranet', + amount => $amount + } + ); + } } ); + + # Redirect to prevent duplicate submissions (POST/REDIRECT/GET pattern) + print $input->redirect( "/cgi-bin/koha/pos/register.pl?registerid=" . $registerid ); + exit; } else { $template->param( error_refund_permission => 1 ); }