From 16896ae5dafa434c1b2379c12826c7c5147c4057 Mon Sep 17 00:00:00 2001 From: Julian Maurice Date: Fri, 27 Apr 2012 16:28:12 +0200 Subject: [PATCH] Bug 7290: More granular permissions for order receiving Add branch to aqorders. Add subpermission acquisition => order_receive_all Users with order_receive_all can receive all orders. Users with only order_receive can receive an order if: - order branch is defined and is the same as the current working branch - order branch is not defined, basket branch is defined and basket branch is the same as the current working branch - order branch and basket branch are not defined Use dataTables filters possibilities instead of custom JS solution in parcel.pl This patch needs patch for bug 7295 (for basket branch) Unit tests are available in t/Acquisition/CanUserReceiveBasket.t --- C4/Acquisition.pm | 71 ++++++++++++ acqui/addorder.pl | 1 + acqui/finishreceive.pl | 16 +++- acqui/neworderempty.pl | 6 +- acqui/orderreceive.pl | 15 +++- acqui/parcel.pl | 60 +--------- .../data/mysql/de-DE/mandatory/userpermissions.sql | 1 + .../data/mysql/en/mandatory/userpermissions.sql | 1 + .../data/mysql/es-ES/mandatory/userpermissions.sql | 1 + .../mysql/fr-FR/1-Obligatoire/userpermissions.sql | 1 + .../data/mysql/it-IT/necessari/userpermissions.sql | 1 + installer/data/mysql/kohastructure.sql | 3 + .../mysql/nb-NO/1-Obligatorisk/userpermissions.sql | 1 + .../data/mysql/pl-PL/mandatory/userpermissions.sql | 1 + .../ru-RU/mandatory/permissions_and_user_flags.sql | 1 + .../uk-UA/mandatory/permissions_and_user_flags.sql | 1 + installer/data/mysql/updatedatabase.pl | 16 +++ .../prog/en/modules/acqui/neworderempty.tt | 19 ++++ .../prog/en/modules/acqui/orderreceive.tt | 5 + .../intranet-tmpl/prog/en/modules/acqui/parcel.tt | 115 +++++++++++--------- t/Acquisition/CanUserReceiveBasket.t | 111 +++++++++++++++++++ 21 files changed, 335 insertions(+), 112 deletions(-) create mode 100644 t/Acquisition/CanUserReceiveBasket.t diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm index 7327844..19e8c3e 100644 --- a/C4/Acquisition.pm +++ b/C4/Acquisition.pm @@ -50,6 +50,7 @@ BEGIN { &GetBasketUsers &ModBasketUsers &CanUserManageBasket + &CanUserReceiveOrder &ModBasketHeader @@ -746,6 +747,76 @@ sub CanUserManageBasket { return 1; } +=head3 CanUserReceiveBasket + + my $bool = CanUserReceiveBasket($borrower, $order[, $userflags]); + my $bool = CanUserReceiveBasket($borrowernumber, $orderno[, $userflags]); + +Check if a borrower can receive a order, according to user permissions, current +working branch and order and basket branches. + +First parameter can be either a borrowernumber or a hashref as returned by +C4::Members::GetMember. + +Second parameter can be either a ordernumber or a hashref as returned by +C4::Acquisition::GetOrder. + +The third parameter is optional. If given, it should be a hashref as returned +by C4::Auth::getuserflags. If not, getuserflags is called. + +If user is authorised to receive order, returns 1. +Otherwise returns 0. + +=cut + +sub CanUserReceiveOrder { + my ($borrower, $order, $userflags) = @_; + + if (!ref $borrower) { + $borrower = C4::Members::GetMember(borrowernumber => $borrower); + } + if (!ref $order) { + $order = GetOrder($order); + } + + return 0 unless ($borrower and $order); + + if (!defined $userflags) { + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare("SELECT flags FROM borrowers WHERE borrowernumber = ?"); + $sth->execute($borrower->{borrowernumber}); + my ($flags) = $sth->fetchrow_array; + $sth->finish; + + $userflags = C4::Auth::getuserflags($flags, $borrower->{userid}, $dbh); + } + + my $branch = C4::Context->userenv->{'branch'}; + + unless ($userflags->{superlibrarian} + || (!ref $userflags->{acquisition} && $userflags->{acquisition}) + || (ref $userflags->{acquisition} && $userflags->{acquisition}->{order_receive_all}) ) + { + if (!ref $userflags->{acquisition} && !$userflags->{acquisition}) { + return 0; + } + if (ref $userflags->{acquisition} && !$userflags->{acquisition}->{order_receive}) { + return 0; + } + if (defined $order->{branch} && $order->{branch} ne $branch) { + return 0; + } + if (!defined $order->{branch}) { + my $basket = GetBasket($order->{basketno}); + if (!$basket || (defined $basket->{branch} && $basket->{branch} ne $branch)) { + return 0; + } + } + } + + return 1; +} + #------------------------------------------------------------# =head3 GetBasketsByBasketgroup diff --git a/acqui/addorder.pl b/acqui/addorder.pl index 1dfa0b1..7c3339e 100755 --- a/acqui/addorder.pl +++ b/acqui/addorder.pl @@ -153,6 +153,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( my $orderinfo = $input->Vars; $orderinfo->{'list_price'} ||= 0; $orderinfo->{'uncertainprice'} ||= 0; +$orderinfo->{branch} = undef if (defined $orderinfo->{branch} and $orderinfo->{branch} eq ''); my $user = $input->remote_user; diff --git a/acqui/finishreceive.pl b/acqui/finishreceive.pl index 0ea16ca..58500b3 100755 --- a/acqui/finishreceive.pl +++ b/acqui/finishreceive.pl @@ -36,7 +36,9 @@ use List::MoreUtils qw/any/; my $input=new CGI; my $flagsrequired = {acquisition => 'order_receive'}; -checkauth($input, 0, $flagsrequired, 'intranet'); +my ($userid, $cookie, undef, $userflags) + = checkauth($input, 0, $flagsrequired, 'intranet'); + my $user = $input->remote_user; my $biblionumber = $input->param('biblionumber'); @@ -58,6 +60,18 @@ my $rrp = $input->param('rrp'); my $note = $input->param("note"); my $order = GetOrder($ordernumber); +my $borrower = C4::Members::GetMember(userid => $userid); +unless (CanUserReceiveOrder($borrower, $ordernumber, $userflags)) { + my $error = "cannot_receive_order"; + $error_url_str = "&error=$error"; + print $input->redirect( + "/cgi-bin/koha/acqui/parcel.pl?invoice=$invoiceno" + . "&booksellerid=$booksellerid&freight=$freight&gst=$gst" + . "&datereceived=$datereceived$error_url_str" + ); + exit; +} + #need old recievedate if we update the order, parcel.pl only shows the right parcel this way FIXME if ($quantityrec > $origquantityrec ) { my @received_items = (); diff --git a/acqui/neworderempty.pl b/acqui/neworderempty.pl index 807a82b..e7a7739 100755 --- a/acqui/neworderempty.pl +++ b/acqui/neworderempty.pl @@ -66,8 +66,8 @@ the item's id in the breeding reservoir =cut -use warnings; -use strict; +use Modern::Perl; + use CGI; use C4::Context; use C4::Input; @@ -239,7 +239,7 @@ foreach my $thisbranch ( sort {$branches->{$a}->{'branchname'} cmp $branches->{$ value => $thisbranch, branchname => $branches->{$thisbranch}->{'branchname'}, ); - $row{'selected'} = 1 if( $thisbranch && $data->{branchcode} && $thisbranch eq $data->{branchcode}) ; + $row{'selected'} = 1 if( $thisbranch && $data->{branch} && $thisbranch eq $data->{branch}) ; push @branchloop, \%row; } $template->param( branchloop => \@branchloop ); diff --git a/acqui/orderreceive.pl b/acqui/orderreceive.pl index f25b5a9..008e0d8 100755 --- a/acqui/orderreceive.pl +++ b/acqui/orderreceive.pl @@ -93,7 +93,8 @@ my $bookseller = GetBookSellerFromId($booksellerid); my $results; $results = SearchOrder($ordernumber) if $ordernumber; -my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + +my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user( { template_name => "acqui/orderreceive.tmpl", query => $input, @@ -112,6 +113,18 @@ unless ( $results and @$results) { # prepare the form for receiving my $order = $results->[0]; +unless (CanUserReceiveOrder($loggedinuser, $order, $userflags)) { + $template->param( + cannot_receive_order => 1, + ordernumber => $ordernumber, + invoice => $invoice, + booksellerid => $booksellerid, + name => $bookseller->{name} + ); + output_html_with_http_headers $input, $cookie, $template->output; + exit; +} + # Check if ACQ framework exists my $acq_fw = GetMarcStructure(1, 'ACQ'); unless($acq_fw) { diff --git a/acqui/parcel.pl b/acqui/parcel.pl index 15578a9..7d80ce9 100755 --- a/acqui/parcel.pl +++ b/acqui/parcel.pl @@ -54,8 +54,7 @@ To filter the results list on this given date. =cut -use strict; -use warnings; +use Modern::Perl; use C4::Auth; use C4::Acquisition; @@ -108,7 +107,7 @@ sub get_gst { : $value * ( 1 + $gstrate ) - $value; } -my ($template, $loggedinuser, $cookie) +my ($template, $loggedinuser, $cookie, $userflags) = get_template_and_user({template_name => "acqui/parcel.tmpl", query => $input, type => "intranet", @@ -136,10 +135,6 @@ my $datereceived = C4::Dates->new(); my $code = $input->param('code'); my @rcv_err = $input->param('error'); my @rcv_err_barcode = $input->param('error_bc'); -my $startfrom=$input->param('startfrom'); -my $resultsperpage = $input->param('resultsperpage'); -$resultsperpage = 20 unless ($resultsperpage); -$startfrom=0 unless ($startfrom); @@ -214,18 +209,7 @@ push @book_foot_loop, map { $_ } values %foot; my @loop_orders = (); if(!defined $invoice->{closedate}) { - my $pendingorders; - if($input->param('op') eq "search"){ - my $search = $input->param('summaryfilter') || ''; - my $ean = $input->param('eanfilter') || ''; - my $basketno = $input->param('basketfilter') || ''; - my $orderno = $input->param('orderfilter') || ''; - my $grouped; - my $owner; - $pendingorders = GetPendingOrders($booksellerid,$grouped,$owner,$basketno,$orderno,$search,$ean); - }else{ - $pendingorders = GetPendingOrders($booksellerid); - } + my $pendingorders = GetPendingOrders($booksellerid); my $countpendings = scalar @$pendingorders; for (my $i = 0 ; $i < $countpendings ; $i++) { @@ -278,43 +262,12 @@ if(!defined $invoice->{closedate}) { $line{holds} = $holds; $line{holds_on_order} = $itemholds?$itemholds:$holds if $line{left_holds_on_order}; + $line{can_receive} = CanUserReceiveOrder($loggedinuser, $pendingorders->[$i], $userflags); + my $budget = GetBudget( $line{budget_id} ); $line{budget_name} = $budget->{'budget_name'}; - push @loop_orders, \%line if ($i >= $startfrom and $i < $startfrom + $resultsperpage); - } - - my $count = $countpendings; - - if ($count>$resultsperpage){ - my $displaynext=0; - my $displayprev=$startfrom; - if(($count - ($startfrom+$resultsperpage)) > 0 ) { - $displaynext = 1; - } - - my @numbers = (); - for (my $i=1; $i<$count/$resultsperpage+1; $i++) { - my $highlight=0; - ($startfrom/$resultsperpage==($i-1)) && ($highlight=1); - push @numbers, { number => $i, - highlight => $highlight , - startfrom => ($i-1)*$resultsperpage}; - } - - my $from = $startfrom*$resultsperpage+1; - my $to; - if($count < (($startfrom+1)*$resultsperpage)){ - $to = $count; - } else { - $to = (($startfrom+1)*$resultsperpage); - } - $template->param(numbers=>\@numbers, - displaynext=>$displaynext, - displayprev=>$displayprev, - nextstartfrom=>(($startfrom+$resultsperpage<$count)?$startfrom+$resultsperpage:$count), - prevstartfrom=>(($startfrom-$resultsperpage>0)?$startfrom-$resultsperpage:0) - ); + push @loop_orders, \%line; } $template->param( @@ -337,7 +290,6 @@ $template->param( book_foot_loop => \@book_foot_loop, totalprice => sprintf($cfstr, $totalprice), totalquantity => $totalquantity, - resultsperpage => $resultsperpage, (uc(C4::Context->preference("marcflavour"))) => 1, total_quantity => $total_quantity, total_gste => sprintf( "%.2f", $total_gste ), diff --git a/installer/data/mysql/de-DE/mandatory/userpermissions.sql b/installer/data/mysql/de-DE/mandatory/userpermissions.sql index cccbff2..6cd43be 100644 --- a/installer/data/mysql/de-DE/mandatory/userpermissions.sql +++ b/installer/data/mysql/de-DE/mandatory/userpermissions.sql @@ -18,6 +18,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'), (11, 'group_manage', 'Bestellgruppen vewalten'), (11, 'order_receive', 'Lieferungen verwalten'), + (11, 'order_receive_all', 'Receive all orders'), (11, 'budget_add_del', 'Konten hinzufügen/ändern, aber bestehende nicht ändern'), (11, 'budget_manage_all', 'Alle Konten verwalten'), (13, 'edit_news', 'Nachrichten für OPAC und Dienstoberfläche verfassen'), diff --git a/installer/data/mysql/en/mandatory/userpermissions.sql b/installer/data/mysql/en/mandatory/userpermissions.sql index 0c9c952..f6f6432 100644 --- a/installer/data/mysql/en/mandatory/userpermissions.sql +++ b/installer/data/mysql/en/mandatory/userpermissions.sql @@ -18,6 +18,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'), (11, 'group_manage', 'Manage orders & basketgroups'), (11, 'order_receive', 'Manage orders & basket'), + (11, 'order_receive_all', 'Receive all orders'), (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'), (11, 'budget_manage_all', 'Manage all budgets'), (13, 'edit_news', 'Write news for the OPAC and staff interfaces'), diff --git a/installer/data/mysql/es-ES/mandatory/userpermissions.sql b/installer/data/mysql/es-ES/mandatory/userpermissions.sql index 0c9c952..f6f6432 100644 --- a/installer/data/mysql/es-ES/mandatory/userpermissions.sql +++ b/installer/data/mysql/es-ES/mandatory/userpermissions.sql @@ -18,6 +18,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'), (11, 'group_manage', 'Manage orders & basketgroups'), (11, 'order_receive', 'Manage orders & basket'), + (11, 'order_receive_all', 'Receive all orders'), (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'), (11, 'budget_manage_all', 'Manage all budgets'), (13, 'edit_news', 'Write news for the OPAC and staff interfaces'), diff --git a/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql b/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql index 7add197..403f15b 100644 --- a/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql +++ b/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql @@ -35,6 +35,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'), (11, 'group_manage', 'Gérer les commandes et les bons de commande'), (11, 'order_receive', 'Gérer les réceptions'), + (11, 'order_receive_all', 'Gérer toutes les réceptions'), (11, 'budget_add_del', 'Ajouter et supprimer les budgets (mais pas modifier)'), (11, 'budget_manage_all', 'Gérer tous les budgets'), (13, 'manage_csv_profiles', 'Gérer les profils d''export CSV'), diff --git a/installer/data/mysql/it-IT/necessari/userpermissions.sql b/installer/data/mysql/it-IT/necessari/userpermissions.sql index 9f8d7f8..c3be8cd 100644 --- a/installer/data/mysql/it-IT/necessari/userpermissions.sql +++ b/installer/data/mysql/it-IT/necessari/userpermissions.sql @@ -20,6 +20,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'), (11, 'group_manage', 'Gestisci ordini e raccoglitori raggruppati'), (11, 'order_receive', 'Gestisci arrivi'), + (11, 'order_receive_all', 'Receive all orders'), (11, 'budget_add_del', 'Aggiungi e cancella budgets (senza modificarli)'), (11, 'budget_manage_all', 'Gestisci tutti i budgets'), (13, 'edit_news', 'Scrivi le news per l\'OPAC e per l\'interfaccia staff'), diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index 67e16fd..6ad4f77 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -2820,13 +2820,16 @@ CREATE TABLE `aqorders` ( -- information related to the basket line items `claims_count` int(11) default 0, -- count of claim letters generated `claimed_date` date default NULL, -- last date a claim was generated parent_ordernumber int(11) default NULL, -- ordernumber of parent order line, or same as ordernumber if no parent + branch varchar(10) default NULL, -- order line branch PRIMARY KEY (`ordernumber`), KEY `basketno` (`basketno`), KEY `biblionumber` (`biblionumber`), KEY `budget_id` (`budget_id`), + KEY branch (branch), CONSTRAINT `aqorders_ibfk_1` FOREIGN KEY (`basketno`) REFERENCES `aqbasket` (`basketno`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `aqorders_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (invoiceid) REFERENCES aqinvoices (invoiceid) ON DELETE SET NULL ON UPDATE CASCADE + CONSTRAINT aqorders_ibfk_4 FOREIGN KEY (branch) REFERENCES branches (branchcode) ON UPDATE CASCADE ON DELETE SET NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql b/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql index 41388df..152fe1c 100644 --- a/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql +++ b/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql @@ -38,6 +38,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'), (11, 'group_manage', 'Administrere bestillinger og kurv-grupper'), (11, 'order_receive', 'Administrere bestillinger og kurver'), + (11, 'order_receive_all', 'Receive all orders'), (11, 'budget_add_del', 'Legge til og slette budsjetter (men ikke endre budsjetter)'), (11, 'budget_manage_all', 'Administrere alle budsjetter'), (13, 'edit_news', 'Legge ut nyhter i OPACen og det interne grensesnittet'), diff --git a/installer/data/mysql/pl-PL/mandatory/userpermissions.sql b/installer/data/mysql/pl-PL/mandatory/userpermissions.sql index a3d487d..f5068fb 100644 --- a/installer/data/mysql/pl-PL/mandatory/userpermissions.sql +++ b/installer/data/mysql/pl-PL/mandatory/userpermissions.sql @@ -18,6 +18,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'), (11, 'group_manage', 'Manage orders & basketgroups'), (11, 'order_receive', 'Manage orders & basket'), + (11, 'order_receive_all', 'Receive all orders'), (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'), (11, 'budget_manage_all', 'Manage all budgets'), (13, 'edit_news', 'RTworzeniei publikowanie wiadomości w interfejsie bibliotekarza i OPAC'), diff --git a/installer/data/mysql/ru-RU/mandatory/permissions_and_user_flags.sql b/installer/data/mysql/ru-RU/mandatory/permissions_and_user_flags.sql index f7bf478..ed9360a 100644 --- a/installer/data/mysql/ru-RU/mandatory/permissions_and_user_flags.sql +++ b/installer/data/mysql/ru-RU/mandatory/permissions_and_user_flags.sql @@ -42,6 +42,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'), (11, 'group_manage', 'Manage orders & basketgroups'), (11, 'order_receive', 'Manage orders & basket'), + (11, 'order_receive_all', 'Receive all orders'), (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'), (11, 'budget_manage_all', 'Manage all budgets'), (13, 'edit_news', 'Написание новостей для электронного каталога и интерфейса библиотекарей'), diff --git a/installer/data/mysql/uk-UA/mandatory/permissions_and_user_flags.sql b/installer/data/mysql/uk-UA/mandatory/permissions_and_user_flags.sql index deae407..290dfaa 100644 --- a/installer/data/mysql/uk-UA/mandatory/permissions_and_user_flags.sql +++ b/installer/data/mysql/uk-UA/mandatory/permissions_and_user_flags.sql @@ -42,6 +42,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'), (11, 'group_manage', 'Manage orders & basketgroups'), (11, 'order_receive', 'Manage orders & basket'), + (11, 'order_receive_all', 'Receive all orders'), (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'), (11, 'budget_manage_all', 'Manage all budgets'), (13, 'edit_news', 'Написання новин для електронного каталогу та інтерфейсу бібліотекарів'), diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 8cad05b..0f0126c 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -6372,6 +6372,22 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { SetVersion($DBversion); } +$DBversion = "XXX"; +if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { + $dbh->do(" + ALTER TABLE aqorders + ADD COLUMN branch VARCHAR(10) DEFAULT NULL, + ADD CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (branch) + REFERENCES branches (branchcode) ON UPDATE CASCADE ON DELETE SET NULL + "); + $dbh->do(" + INSERT INTO permissions (module_bit, code, description) + VALUES (11, 'order_receive_all', 'Receive all orders') + "); + print "Upgrade to $DBversion done (Add aqorders.branch and permission order_receive_all)\n"; + SetVersion($DBversion); +} + =head1 FUNCTIONS diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt index 398a568..cedb6f2 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt @@ -212,6 +212,25 @@ $(document).ready(function()
+ Order details +
    +
  1. + Branch: + +
  2. +
+
+ +
Catalog details [% IF ( biblionumber ) %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt index da9aefe..ac76c84 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt @@ -135,6 +135,10 @@

Receive items from : [% name %] [% IF ( invoice ) %][[% invoice %]] [% END %] (order #[% ordernumber %])

+ [% IF (cannot_receive_order) %] +

You are not authorised to receive this order.

+ [% ELSE %] + [% IF ( count ) %]
@@ -330,6 +334,7 @@ This ordernumber does not exist. [% END %] +[% END %][%# IF (cannot_receive_order) %]
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt index 877d263..5d89b12 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt @@ -8,30 +8,25 @@ [% INCLUDE 'greybox.inc' %] + +[% INCLUDE 'datatables-strings.inc' %] +