From 3eb45e68250c0e110b1261f244eb4f6ea29cfd59 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 | 14 +++- .../prog/en/includes/html_helpers.inc | 18 ++++- .../prog/en/modules/circ/set-library.tt | 60 +++++++++++++++-- 7 files changed, 204 insertions(+), 28 deletions(-) create mode 100644 Koha/Template/Plugin/Registers.pm diff --git a/C4/Auth.pm b/C4/Auth.pm index 0dfc5ee664..c80d518c23 100644 --- a/C4/Auth.pm +++ b/C4/Auth.pm @@ -846,7 +846,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') ); @@ -1066,7 +1067,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 = " @@ -1115,6 +1117,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') ) { @@ -1158,6 +1163,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; @@ -1167,7 +1173,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') ); } @@ -1445,7 +1452,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'); @@ -1604,8 +1612,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 { @@ -1694,7 +1704,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 e30b2104e4..c390572711 100644 --- a/C4/Context.pm +++ b/C4/Context.pm @@ -808,7 +808,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. @@ -819,7 +820,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"} || ''; @@ -829,14 +830,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 3fdc0a7700..bba39ae6d9 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; @@ -42,19 +43,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, @@ -77,6 +79,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; @@ -89,11 +105,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 ca3bae3a17..27201eac00 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 %]