From 1ce925e17205e1f05e64a01d274fcc31e9b334c9 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Mon, 20 Jul 2020 16:14:17 +0100 Subject: [PATCH] Bug 24786: Allow setting a register for the session This patch adds the ability to set a register for the current session from the 'set library' page. Upon entering the page, the current selection will be displayed. Changing the branch will trigger the register select list to update to display only those registers associated with the updated branch and will automatically select either 'no register' or the 'branch default' register. The user can then override that selection to choose a different register for the session. Test plan 1/ Enable cash registers with the 'UseCashRegisters' system preference 2/ Select the 'Set library' option from the top right menu 3/ Note that you can now select a cash register from the subsequent page 4/ Change the branch and note that the cash register selection is updated to reflect the change 5/ Note that the 'branch default' register is auto-selected upon branch selection if one has been defined, otherwise '-- None --' is selected 6/ You can then alter the selection before submitting the form 7/ Once submitted note that you are returned to the page you were on prior to attempting to change the library and register 8/ Note the present of the register name next to the library name at the top of the screen. 9/ Signoff --- C4/Auth.pm | 23 +++++-- C4/Context.pm | 21 +++--- Koha/Template/Plugin/Registers.pm | 65 +++++++++++++++++++ circ/set-library.pl | 31 +++++++-- .../intranet-tmpl/prog/en/includes/header.inc | 27 +++++++- .../prog/en/includes/html_helpers.inc | 18 ++++- .../prog/en/modules/circ/set-library.tt | 57 +++++++++++++++- 7 files changed, 214 insertions(+), 28 deletions(-) create mode 100644 Koha/Template/Plugin/Registers.pm diff --git a/C4/Auth.pm b/C4/Auth.pm index 80cc4773a6..a1acf805c6 100644 --- a/C4/Auth.pm +++ b/C4/Auth.pm @@ -857,7 +857,8 @@ sub checkauth { $session->param('surname'), $session->param('branch'), $session->param('branchname'), $session->param('flags'), $session->param('emailaddress'), $session->param('shibboleth'), - $session->param('desk_id'), $session->param('desk_name') + $session->param('desk_id'), $session->param('desk_name'), + $session->param('register_id') ); C4::Context::set_shelves_userenv( 'bar', $session->param('barshelves') ); C4::Context::set_shelves_userenv( 'pub', $session->param('pubshelves') ); @@ -1079,7 +1080,8 @@ sub checkauth { C4::Context->_unset_userenv($sessionID); } my ( $borrowernumber, $firstname, $surname, $userflags, - $branchcode, $branchname, $emailaddress, $desk_id, $desk_name ); + $branchcode, $branchname, $emailaddress, $desk_id, + $desk_name, $register_id ); if ( $return == 1 ) { my $select = " @@ -1128,6 +1130,9 @@ sub checkauth { my $desk = Koha::Desks->find($desk_id); $desk_name = $desk ? $desk->desk_name : ''; } + if ( $query->param('register_id') ) { + $register_id = $query->param('register_id'); + } my $branches = { map { $_->branchcode => $_->unblessed } Koha::Libraries->search }; if ( $type ne 'opac' and C4::Context->boolean_preference('AutoLocation') ) { @@ -1172,6 +1177,7 @@ sub checkauth { $session->param( 'lasttime', time() ); $session->param( 'interface', $type); $session->param( 'shibboleth', $shibSuccess ); + $session->param( 'register_id', $register_id ); $debug and printf STDERR "AUTH_4: (%s)\t%s %s - %s\n", map { $session->param($_) } qw(cardnumber firstname surname branch); } $session->param('cas_ticket', $cas_ticket) if $cas_ticket; @@ -1181,7 +1187,8 @@ sub checkauth { $session->param('surname'), $session->param('branch'), $session->param('branchname'), $session->param('flags'), $session->param('emailaddress'), $session->param('shibboleth'), - $session->param('desk_id'), $session->param('desk_name') + $session->param('desk_id'), $session->param('desk_name'), + $session->param('register_id') ); } @@ -1460,7 +1467,8 @@ sub check_api_auth { $session->param('surname'), $session->param('branch'), $session->param('branchname'), $session->param('flags'), $session->param('emailaddress'), $session->param('shibboleth'), - $session->param('desk_id'), $session->param('desk_name') + $session->param('desk_id'), $session->param('desk_name'), + $session->param('register_id') ); my $ip = $session->param('ip'); @@ -1621,8 +1629,10 @@ sub check_api_auth { $session->param('number'), $session->param('id'), $session->param('cardnumber'), $session->param('firstname'), $session->param('surname'), $session->param('branch'), + $session->param('branchname'), $session->param('flags'), $session->param('emailaddress'), $session->param('shibboleth'), - $session->param('desk_id'), $session->param('desk_name') + $session->param('desk_id'), $session->param('desk_name'), + $session->param('register_id') ); return ( "ok", $cookie, $sessionID ); } else { @@ -1711,7 +1721,8 @@ sub check_cookie_auth { $session->param('surname'), $session->param('branch'), $session->param('branchname'), $session->param('flags'), $session->param('emailaddress'), $session->param('shibboleth'), - $session->param('desk_id'), $session->param('desk_name') + $session->param('desk_id'), $session->param('desk_name'), + $session->param('register_id') ); my $ip = $session->param('ip'); diff --git a/C4/Context.pm b/C4/Context.pm index 585332c326..79648090b5 100644 --- a/C4/Context.pm +++ b/C4/Context.pm @@ -805,7 +805,8 @@ sub userenv { $userfirstname, $usersurname, $userbranch, $branchname, $userflags, $emailaddress, $shibboleth - $desk_id, $desk_name); + $desk_id, $desk_name, + $register_id); Establish a hash of user environment variables. @@ -816,7 +817,7 @@ set_userenv is called in Auth.pm #' sub set_userenv { shift @_; - my ($usernum, $userid, $usercnum, $userfirstname, $usersurname, $userbranch, $branchname, $userflags, $emailaddress, $shibboleth, $desk_id, $desk_name)= + my ($usernum, $userid, $usercnum, $userfirstname, $usersurname, $userbranch, $branchname, $userflags, $emailaddress, $shibboleth, $desk_id, $desk_name, $register_id)= map { Encode::is_utf8( $_ ) ? $_ : Encode::decode('UTF-8', $_) } # CGI::Session doesn't handle utf-8, so we decode it here @_; my $var=$context->{"activeuser"} || ''; @@ -826,14 +827,16 @@ sub set_userenv { "cardnumber" => $usercnum, "firstname" => $userfirstname, "surname" => $usersurname, + #possibly a law problem - "branch" => $userbranch, - "branchname" => $branchname, - "desk_id" => $desk_id, - "desk_name" => $desk_name, - "flags" => $userflags, - "emailaddress" => $emailaddress, - "shibboleth" => $shibboleth, + "branch" => $userbranch, + "branchname" => $branchname, + "flags" => $userflags, + "emailaddress" => $emailaddress, + "shibboleth" => $shibboleth, + "desk_id" => $desk_id, + "desk_name" => $desk_name, + "register_id" => $register_id, }; $context->{userenv}->{$var} = $cell; return $cell; diff --git a/Koha/Template/Plugin/Registers.pm b/Koha/Template/Plugin/Registers.pm new file mode 100644 index 0000000000..a23fdb5e2d --- /dev/null +++ b/Koha/Template/Plugin/Registers.pm @@ -0,0 +1,65 @@ +package Koha::Template::Plugin::Registers; + +# Copyright PTFS Europe 2020 + +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; + +use Template::Plugin; +use base qw( Template::Plugin ); + +use C4::Koha; +use C4::Context; +use Koha::Cash::Registers; + +sub session_register_id { + my ($self) = @_; + + return C4::Context->userenv ? + C4::Context->userenv->{'register_id'} : + ''; +} + +sub session_register_name { + my ($self) = @_; + + my $register = Koha::Cash::Registers->find($self->session_register_id); + return $register ? $register->name : ''; +} + +=head2 + + [% SET registers = Registers.all() %] + [% SET registers = Registers.all( { branch => branchcode } ); + +Returns a list of all cash registers available that adhere to the passed filters. + +=cut + +sub all { + my ( $self, $params ) = @_; + + my $registers = Koha::Cash::Registers->search()->unblessed(); + for my $register ( @{$registers} ) { + $register->{selected} = ( defined( $self->session_register_id ) + && $register->{id} == $self->session_register_id ) ? 1 : 0; + } + + return $registers; +} + +1; diff --git a/circ/set-library.pl b/circ/set-library.pl index 96b3b7a7d3..4e7b7be128 100755 --- a/circ/set-library.pl +++ b/circ/set-library.pl @@ -25,6 +25,7 @@ use C4::Output; use C4::Auth qw/:DEFAULT get_session/; use C4::Koha; use Koha::BiblioFrameworks; +use Koha::Cash::Registers; use Koha::Libraries; use Koha::Desks; @@ -41,19 +42,20 @@ my ( $template, $borrowernumber, $cookie, $flags ) = get_template_and_user({ my $sessionID = $query->cookie("CGISESSID"); my $session = get_session($sessionID); -my $branch = $query->param('branch' ); -my $desk_id = $query->param('desk_id'); -my $userenv_branch = C4::Context->userenv->{'branch'} || ''; -my $userenv_desk = C4::Context->userenv->{'desk_id'} || ''; +my $branch = $query->param('branch'); +my $desk_id = $query->param('desk_id'); +my $register_id = $query->param('register_id'); +my $userenv_branch = C4::Context->userenv->{'branch'} || ''; +my $userenv_desk = C4::Context->userenv->{'desk_id'} || ''; +my $userenv_register_id = C4::Context->userenv->{'register_id'} || ''; my @updated; -# $session lddines here are doing the updating +# $session lines here are doing the updating if ( $branch and my $library = Koha::Libraries->find($branch) ) { if (! $userenv_branch or $userenv_branch ne $branch ) { my $branchname = $library->branchname; $session->param('branchname', $branchname); # update sesssion in DB $session->param('branch', $branch); # update sesssion in DB - $session->flush(); push @updated, { updated_branch => 1, old_branch => $userenv_branch, @@ -76,6 +78,20 @@ if ( $branch and my $library = Koha::Libraries->find($branch) ) { old_desk => $old_desk_name, }; } + if ( defined($userenv_register_id) + && ( $userenv_register_id ne $register_id ) ) + { + my $register = Koha::Cash::Registers->find($register_id); + $template->param(LoginRegisterID => $register_id); # update template for new register + $template->param(LoginRegisterName => $register ? $register->name : ''); # update template for new register + $session->param( 'register_id', $register_id ); + push @updated, + { + updated_register => 1, + new_register => $register ? $register->name : '' + }; + } + $session->flush(); } else { $branch = $userenv_branch; # fallback value $desk_id = $userenv_desk; @@ -88,11 +104,12 @@ foreach ($query->param()) { $_ or next; # disclude blanks $_ eq "branch" and next; # disclude branch $_ eq "desk_id" and next; # disclude desk_id + $_ eq "register_id" and next; # disclude register $_ eq "oldreferer" and next; # disclude oldreferer push @recycle_loop, { param => $_, value => scalar $query->param($_), - }; + }; } my $referer = $query->param('oldreferer') || $ENV{HTTP_REFERER}; diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc index a74d5130b4..09f66e9bc6 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc @@ -1,6 +1,7 @@ [% USE raw %] [% USE Branches %] [% USE Desks %] +[% USE Registers %] [% USE Koha %]