From 4348d4feeb373d1e9d0165fda601449bea462c70 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Fri, 7 Nov 2025 14:10:09 +0000 Subject: [PATCH] Bug 41229: Fix desk and register session persistence on library change When changing library in circ/set-library.pl, desk and register values were not being properly cleared from the session. This caused stale desk/register data from the previous library to persist, resulting in: - Incorrect cashup displays showing wrong library's register - POS defaulting to registers from different libraries - Session state inconsistent with visual UI Three issues fixed: 1. Template: Changed register "None" option ID from "set-library-noregister" to "noregister" to match JavaScript expectations (consistent with desk handling) 2. Desk logic: Changed condition to use defined() and explicitly clear session when "No desk" is selected 3. Register logic: Added session clearing when "No register" is selected and fixed condition to handle empty initial state Test plan: 1. Select Library A with Register 5 2. Change to Library B without selecting a register 3. Verify register is cleared from session (check POS page) 4. Repeat for desk selection 5. Verify explicit "-- None --" selection clears session values --- circ/set-library.pl | 35 ++++++++++++------- .../prog/en/modules/circ/set-library.tt | 2 +- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/circ/set-library.pl b/circ/set-library.pl index d4ff78ca976..c1912b56f66 100755 --- a/circ/set-library.pl +++ b/circ/set-library.pl @@ -71,26 +71,37 @@ if ( $branch = $userenv_branch; # fallback value } -if ( $desk_id && ( !$userenv_desk or $userenv_desk ne $desk_id ) ) { - my $desk = Koha::Desks->find( { desk_id => $desk_id } ); - my $old_desk_name = ''; - if ($userenv_desk) { - $old_desk_name = Koha::Desks->find( { desk_id => $userenv_desk } )->desk_name; +if ( defined($desk_id) && ( !$userenv_desk || $userenv_desk ne $desk_id ) ) { + if ($desk_id) { + + # A desk was selected + my $desk = Koha::Desks->find( { desk_id => $desk_id } ); + $session->param( desk_name => $desk->desk_name ); + $session->param( desk_id => $desk->desk_id ); + } else { + + # "No desk" was explicitly selected - clear desk from session + $session->clear( [ 'desk_name', 'desk_id' ] ); } - $session->param( desk_name => $desk->desk_name ); - $session->param( desk_id => $desk->desk_id ); $updated = 1; } else { $desk_id = $userenv_desk; } if ( defined($register_id) - && ( $userenv_register_id ne $register_id ) ) + && ( !$userenv_register_id || $userenv_register_id ne $register_id ) ) { - my $old_register_name = C4::Context->userenv->{'register_name'} || ''; - my $register = Koha::Cash::Registers->find($register_id); - $session->param( 'register_id', $register_id ); - $session->param( 'register_name', $register ? $register->name : '' ); + if ($register_id) { + + # A register was selected + my $register = Koha::Cash::Registers->find($register_id); + $session->param( 'register_id', $register_id ); + $session->param( 'register_name', $register ? $register->name : '' ); + } else { + + # "No register" was explicitly selected - clear register from session + $session->clear( [ 'register_id', 'register_name' ] ); + } $updated = 1; } else { $register_id = $userenv_register_id; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/set-library.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/set-library.tt index 7a12551989c..8759c5eab8c 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/set-library.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/set-library.tt @@ -87,7 +87,7 @@
  • -- 2.51.1