View | Details | Raw Unified | Return to bug 7290
Collapse All | Expand All

(-)a/C4/Acquisition.pm (+71 lines)
Lines 50-55 BEGIN { Link Here
50
50
51
        &GetBasketUsers &ModBasketUsers
51
        &GetBasketUsers &ModBasketUsers
52
        &CanUserManageBasket
52
        &CanUserManageBasket
53
        &CanUserReceiveOrder
53
54
54
        &ModBasketHeader
55
        &ModBasketHeader
55
56
Lines 746-751 sub CanUserManageBasket { Link Here
746
    return 1;
747
    return 1;
747
}
748
}
748
749
750
=head3 CanUserReceiveBasket
751
752
    my $bool = CanUserReceiveBasket($borrower, $order[, $userflags]);
753
    my $bool = CanUserReceiveBasket($borrowernumber, $orderno[, $userflags]);
754
755
Check if a borrower can receive a order, according to user permissions, current
756
working branch and order and basket branches.
757
758
First parameter can be either a borrowernumber or a hashref as returned by
759
C4::Members::GetMember.
760
761
Second parameter can be either a ordernumber or a hashref as returned by
762
C4::Acquisition::GetOrder.
763
764
The third parameter is optional. If given, it should be a hashref as returned
765
by C4::Auth::getuserflags. If not, getuserflags is called.
766
767
If user is authorised to receive order, returns 1.
768
Otherwise returns 0.
769
770
=cut
771
772
sub CanUserReceiveOrder {
773
    my ($borrower, $order, $userflags) = @_;
774
775
    if (!ref $borrower) {
776
        $borrower = C4::Members::GetMember(borrowernumber => $borrower);
777
    }
778
    if (!ref $order) {
779
        $order = GetOrder($order);
780
    }
781
782
    return 0 unless ($borrower and $order);
783
784
    if (!defined $userflags) {
785
        my $dbh = C4::Context->dbh;
786
        my $sth = $dbh->prepare("SELECT flags FROM borrowers WHERE borrowernumber = ?");
787
        $sth->execute($borrower->{borrowernumber});
788
        my ($flags) = $sth->fetchrow_array;
789
        $sth->finish;
790
791
        $userflags = C4::Auth::getuserflags($flags, $borrower->{userid}, $dbh);
792
    }
793
794
    my $branch = C4::Context->userenv->{'branch'};
795
796
    unless ($userflags->{superlibrarian}
797
    || (!ref $userflags->{acquisition} && $userflags->{acquisition})
798
    || (ref $userflags->{acquisition} && $userflags->{acquisition}->{order_receive_all}) )
799
    {
800
        if (!ref $userflags->{acquisition} && !$userflags->{acquisition}) {
801
            return 0;
802
        }
803
        if (ref $userflags->{acquisition} && !$userflags->{acquisition}->{order_receive}) {
804
            return 0;
805
        }
806
        if (defined $order->{branch} && $order->{branch} ne $branch) {
807
            return 0;
808
        }
809
        if (!defined $order->{branch}) {
810
            my $basket = GetBasket($order->{basketno});
811
            if (!$basket || (defined $basket->{branch} && $basket->{branch} ne $branch)) {
812
                return 0;
813
            }
814
        }
815
    }
816
817
    return 1;
818
}
819
749
#------------------------------------------------------------#
820
#------------------------------------------------------------#
750
821
751
=head3 GetBasketsByBasketgroup
822
=head3 GetBasketsByBasketgroup
(-)a/acqui/addorder.pl (+1 lines)
Lines 153-158 my ( $template, $loggedinuser, $cookie ) = get_template_and_user( Link Here
153
my $orderinfo					= $input->Vars;
153
my $orderinfo					= $input->Vars;
154
$orderinfo->{'list_price'}    ||=  0;
154
$orderinfo->{'list_price'}    ||=  0;
155
$orderinfo->{'uncertainprice'} ||= 0;
155
$orderinfo->{'uncertainprice'} ||= 0;
156
$orderinfo->{branch} = undef if (defined $orderinfo->{branch} and $orderinfo->{branch} eq '');
156
157
157
my $user = $input->remote_user;
158
my $user = $input->remote_user;
158
159
(-)a/acqui/finishreceive.pl (-1 / +15 lines)
Lines 36-42 use List::MoreUtils qw/any/; Link Here
36
my $input=new CGI;
36
my $input=new CGI;
37
my $flagsrequired = {acquisition => 'order_receive'};
37
my $flagsrequired = {acquisition => 'order_receive'};
38
38
39
checkauth($input, 0, $flagsrequired, 'intranet');
39
my ($userid, $cookie, undef, $userflags)
40
    = checkauth($input, 0, $flagsrequired, 'intranet');
41
40
42
41
my $user             = $input->remote_user;
43
my $user             = $input->remote_user;
42
my $biblionumber     = $input->param('biblionumber');
44
my $biblionumber     = $input->param('biblionumber');
Lines 58-63 my $rrp = $input->param('rrp'); Link Here
58
my $note             = $input->param("note");
60
my $note             = $input->param("note");
59
my $order            = GetOrder($ordernumber);
61
my $order            = GetOrder($ordernumber);
60
62
63
my $borrower = C4::Members::GetMember(userid => $userid);
64
unless (CanUserReceiveOrder($borrower, $ordernumber, $userflags)) {
65
    my $error = "cannot_receive_order";
66
    $error_url_str = "&error=$error";
67
    print $input->redirect(
68
        "/cgi-bin/koha/acqui/parcel.pl?invoice=$invoiceno"
69
        . "&booksellerid=$booksellerid&freight=$freight&gst=$gst"
70
        . "&datereceived=$datereceived$error_url_str"
71
    );
72
    exit;
73
}
74
61
#need old recievedate if we update the order, parcel.pl only shows the right parcel this way FIXME
75
#need old recievedate if we update the order, parcel.pl only shows the right parcel this way FIXME
62
if ($quantityrec > $origquantityrec ) {
76
if ($quantityrec > $origquantityrec ) {
63
    my @received_items = ();
77
    my @received_items = ();
(-)a/acqui/neworderempty.pl (-3 / +3 lines)
Lines 66-73 the item's id in the breeding reservoir Link Here
66
66
67
=cut
67
=cut
68
68
69
use warnings;
69
use Modern::Perl;
70
use strict;
70
71
use CGI;
71
use CGI;
72
use C4::Context;
72
use C4::Context;
73
use C4::Input;
73
use C4::Input;
Lines 239-245 foreach my $thisbranch ( sort {$branches->{$a}->{'branchname'} cmp $branches->{$ Link Here
239
        value      => $thisbranch,
239
        value      => $thisbranch,
240
        branchname => $branches->{$thisbranch}->{'branchname'},
240
        branchname => $branches->{$thisbranch}->{'branchname'},
241
    );
241
    );
242
    $row{'selected'} = 1 if( $thisbranch && $data->{branchcode} && $thisbranch eq $data->{branchcode}) ;
242
    $row{'selected'} = 1 if( $thisbranch && $data->{branch} && $thisbranch eq $data->{branch}) ;
243
    push @branchloop, \%row;
243
    push @branchloop, \%row;
244
}
244
}
245
$template->param( branchloop => \@branchloop );
245
$template->param( branchloop => \@branchloop );
(-)a/acqui/orderreceive.pl (-1 / +14 lines)
Lines 95-101 $datereceived = $datereceived ? C4::Dates->new($datereceived, 'iso') : C4::Dates Link Here
95
my $bookseller = GetBookSellerFromId($booksellerid);
95
my $bookseller = GetBookSellerFromId($booksellerid);
96
my $results = SearchOrder($ordernumber,$search);
96
my $results = SearchOrder($ordernumber,$search);
97
97
98
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
98
99
my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user(
99
    {
100
    {
100
        template_name   => "acqui/orderreceive.tmpl",
101
        template_name   => "acqui/orderreceive.tmpl",
101
        query           => $input,
102
        query           => $input,
Lines 111-116 my $count = scalar @$results; Link Here
111
if ( $count == 1 ) {
112
if ( $count == 1 ) {
112
    my $order = $results->[0];
113
    my $order = $results->[0];
113
114
115
    unless (CanUserReceiveOrder($loggedinuser, $order, $userflags)) {
116
        $template->param(
117
            cannot_receive_order => 1,
118
            ordernumber => $ordernumber,
119
            invoice => $invoice,
120
            booksellerid => $booksellerid,
121
            name => $bookseller->{name}
122
        );
123
        output_html_with_http_headers $input, $cookie, $template->output;
124
        exit;
125
    }
126
114
    # Check if ACQ framework exists
127
    # Check if ACQ framework exists
115
    my $acq_fw = GetMarcStructure(1, 'ACQ');
128
    my $acq_fw = GetMarcStructure(1, 'ACQ');
116
    unless($acq_fw) {
129
    unless($acq_fw) {
(-)a/acqui/parcel.pl (-54 / +6 lines)
Lines 54-61 To filter the results list on this given date. Link Here
54
54
55
=cut
55
=cut
56
56
57
use strict;
57
use Modern::Perl;
58
use warnings;
59
58
60
use C4::Auth;
59
use C4::Auth;
61
use C4::Acquisition;
60
use C4::Acquisition;
Lines 108-114 sub get_gst { Link Here
108
        : $value * ( 1 + $gstrate ) - $value;
107
        : $value * ( 1 + $gstrate ) - $value;
109
}
108
}
110
109
111
my ($template, $loggedinuser, $cookie)
110
my ($template, $loggedinuser, $cookie, $userflags)
112
    = get_template_and_user({template_name => "acqui/parcel.tmpl",
111
    = get_template_and_user({template_name => "acqui/parcel.tmpl",
113
                 query => $input,
112
                 query => $input,
114
                 type => "intranet",
113
                 type => "intranet",
Lines 136-145 my $datereceived = C4::Dates->new(); Link Here
136
my $code            = $input->param('code');
135
my $code            = $input->param('code');
137
my @rcv_err         = $input->param('error');
136
my @rcv_err         = $input->param('error');
138
my @rcv_err_barcode = $input->param('error_bc');
137
my @rcv_err_barcode = $input->param('error_bc');
139
my $startfrom=$input->param('startfrom');
140
my $resultsperpage = $input->param('resultsperpage');
141
$resultsperpage = 20 unless ($resultsperpage);
142
$startfrom=0 unless ($startfrom);
143
138
144
139
145
140
Lines 214-231 push @book_foot_loop, map { $_ } values %foot; Link Here
214
209
215
my @loop_orders = ();
210
my @loop_orders = ();
216
if(!defined $invoice->{closedate}) {
211
if(!defined $invoice->{closedate}) {
217
    my $pendingorders;
212
    my $pendingorders = GetPendingOrders($booksellerid);
218
    if($input->param('op') eq "search"){
219
        my $search   = $input->param('summaryfilter') || '';
220
        my $ean      = $input->param('eanfilter') || '';
221
        my $basketno = $input->param('basketfilter') || '';
222
        my $orderno  = $input->param('orderfilter') || '';
223
        my $grouped;
224
        my $owner;
225
        $pendingorders = GetPendingOrders($booksellerid,$grouped,$owner,$basketno,$orderno,$search,$ean);
226
    }else{
227
        $pendingorders = GetPendingOrders($booksellerid);
228
    }
229
    my $countpendings = scalar @$pendingorders;
213
    my $countpendings = scalar @$pendingorders;
230
214
231
    for (my $i = 0 ; $i < $countpendings ; $i++) {
215
    for (my $i = 0 ; $i < $countpendings ; $i++) {
Lines 278-320 if(!defined $invoice->{closedate}) { Link Here
278
        $line{holds}                = $holds;
262
        $line{holds}                = $holds;
279
        $line{holds_on_order}       = $itemholds?$itemholds:$holds if $line{left_holds_on_order};
263
        $line{holds_on_order}       = $itemholds?$itemholds:$holds if $line{left_holds_on_order};
280
264
265
        $line{can_receive} = CanUserReceiveOrder($loggedinuser, $pendingorders->[$i], $userflags);
266
281
        my $budget = GetBudget( $line{budget_id} );
267
        my $budget = GetBudget( $line{budget_id} );
282
        $line{budget_name} = $budget->{'budget_name'};
268
        $line{budget_name} = $budget->{'budget_name'};
283
269
284
        push @loop_orders, \%line if ($i >= $startfrom and $i < $startfrom + $resultsperpage);
270
        push @loop_orders, \%line;
285
    }
286
287
    my $count = $countpendings;
288
289
    if ($count>$resultsperpage){
290
        my $displaynext=0;
291
        my $displayprev=$startfrom;
292
        if(($count - ($startfrom+$resultsperpage)) > 0 ) {
293
            $displaynext = 1;
294
        }
295
296
        my @numbers = ();
297
        for (my $i=1; $i<$count/$resultsperpage+1; $i++) {
298
                my $highlight=0;
299
                ($startfrom/$resultsperpage==($i-1)) && ($highlight=1);
300
                push @numbers, { number => $i,
301
                    highlight => $highlight ,
302
                    startfrom => ($i-1)*$resultsperpage};
303
        }
304
305
        my $from = $startfrom*$resultsperpage+1;
306
        my $to;
307
        if($count < (($startfrom+1)*$resultsperpage)){
308
            $to = $count;
309
        } else {
310
            $to = (($startfrom+1)*$resultsperpage);
311
        }
312
        $template->param(numbers=>\@numbers,
313
                         displaynext=>$displaynext,
314
                         displayprev=>$displayprev,
315
                         nextstartfrom=>(($startfrom+$resultsperpage<$count)?$startfrom+$resultsperpage:$count),
316
                         prevstartfrom=>(($startfrom-$resultsperpage>0)?$startfrom-$resultsperpage:0)
317
                        );
318
    }
271
    }
319
272
320
    $template->param(
273
    $template->param(
Lines 338-344 $template->param( Link Here
338
    book_foot_loop        => \@book_foot_loop,
291
    book_foot_loop        => \@book_foot_loop,
339
    totalprice            => sprintf($cfstr, $totalprice),
292
    totalprice            => sprintf($cfstr, $totalprice),
340
    totalquantity         => $totalquantity,
293
    totalquantity         => $totalquantity,
341
    resultsperpage        => $resultsperpage,
342
    (uc(C4::Context->preference("marcflavour"))) => 1,
294
    (uc(C4::Context->preference("marcflavour"))) => 1,
343
    total_quantity       => $total_quantity,
295
    total_quantity       => $total_quantity,
344
    total_gste           => sprintf( "%.2f", $total_gste ),
296
    total_gste           => sprintf( "%.2f", $total_gste ),
(-)a/installer/data/mysql/de-DE/mandatory/userpermissions.sql (+1 lines)
Lines 18-23 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
18
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
18
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
19
   (11, 'group_manage', 'Bestellgruppen vewalten'),
19
   (11, 'group_manage', 'Bestellgruppen vewalten'),
20
   (11, 'order_receive', 'Lieferungen verwalten'),
20
   (11, 'order_receive', 'Lieferungen verwalten'),
21
   (11, 'order_receive_all', 'Receive all orders'),
21
   (11, 'budget_add_del', 'Konten hinzufügen/ändern, aber bestehende nicht ändern'),
22
   (11, 'budget_add_del', 'Konten hinzufügen/ändern, aber bestehende nicht ändern'),
22
   (11, 'budget_manage_all', 'Manage all budgets'),
23
   (11, 'budget_manage_all', 'Manage all budgets'),
23
   (13, 'edit_news', 'Nachrichten für OPAC und Dienstoberfläche verfassen'),
24
   (13, 'edit_news', 'Nachrichten für OPAC und Dienstoberfläche verfassen'),
(-)a/installer/data/mysql/en/mandatory/userpermissions.sql (+1 lines)
Lines 18-23 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
18
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
18
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
19
   (11, 'group_manage', 'Manage orders & basketgroups'),
19
   (11, 'group_manage', 'Manage orders & basketgroups'),
20
   (11, 'order_receive', 'Manage orders & basket'),
20
   (11, 'order_receive', 'Manage orders & basket'),
21
   (11, 'order_receive_all', 'Receive all orders'),
21
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
22
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
22
   (11, 'budget_manage_all', 'Manage all budgets'),
23
   (11, 'budget_manage_all', 'Manage all budgets'),
23
   (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
24
   (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
(-)a/installer/data/mysql/es-ES/mandatory/userpermissions.sql (+1 lines)
Lines 18-23 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
18
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
18
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
19
   (11, 'group_manage', 'Manage orders & basketgroups'),
19
   (11, 'group_manage', 'Manage orders & basketgroups'),
20
   (11, 'order_receive', 'Manage orders & basket'),
20
   (11, 'order_receive', 'Manage orders & basket'),
21
   (11, 'order_receive_all', 'Receive all orders'),
21
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
22
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
22
   (11, 'budget_manage_all', 'Manage all budgets'),
23
   (11, 'budget_manage_all', 'Manage all budgets'),
23
   (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
24
   (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
(-)a/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql (+1 lines)
Lines 35-40 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
35
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
35
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
36
   (11, 'group_manage', 'Gérer les commandes et les bons de commande'),
36
   (11, 'group_manage', 'Gérer les commandes et les bons de commande'),
37
   (11, 'order_receive', 'Gérer les réceptions'),
37
   (11, 'order_receive', 'Gérer les réceptions'),
38
   (11, 'order_receive_all', 'Gérer toutes les réceptions'),
38
   (11, 'budget_add_del', 'Ajouter et supprimer les budgets (mais pas modifier)'),
39
   (11, 'budget_add_del', 'Ajouter et supprimer les budgets (mais pas modifier)'),
39
   (11, 'budget_manage_all', 'Gérer tous les budgets'),
40
   (11, 'budget_manage_all', 'Gérer tous les budgets'),
40
   (13, 'manage_csv_profiles', 'Gérer les profils d''export CSV'),
41
   (13, 'manage_csv_profiles', 'Gérer les profils d''export CSV'),
(-)a/installer/data/mysql/it-IT/necessari/userpermissions.sql (+1 lines)
Lines 20-25 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
20
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
20
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
21
   (11, 'group_manage', 'Gestisci ordini e raccoglitori raggruppati'),
21
   (11, 'group_manage', 'Gestisci ordini e raccoglitori raggruppati'),
22
   (11, 'order_receive', 'Gestisci arrivi'),
22
   (11, 'order_receive', 'Gestisci arrivi'),
23
   (11, 'order_receive_all', 'Receive all orders'),
23
   (11, 'budget_add_del', 'Aggiungi e cancella budgets (senza modificarli)'),
24
   (11, 'budget_add_del', 'Aggiungi e cancella budgets (senza modificarli)'),
24
   (11, 'budget_manage_all', 'Manage all budgets'),
25
   (11, 'budget_manage_all', 'Manage all budgets'),
25
   (13, 'edit_news', 'Scrivi le news per l\'OPAC e per l\'interfaccia staff'),
26
   (13, 'edit_news', 'Scrivi le news per l\'OPAC e per l\'interfaccia staff'),
(-)a/installer/data/mysql/kohastructure.sql (+3 lines)
Lines 2817-2829 CREATE TABLE `aqorders` ( -- information related to the basket line items Link Here
2817
  `claims_count` int(11) default 0, -- count of claim letters generated
2817
  `claims_count` int(11) default 0, -- count of claim letters generated
2818
  `claimed_date` date default NULL, -- last date a claim was generated
2818
  `claimed_date` date default NULL, -- last date a claim was generated
2819
  parent_ordernumber int(11) default NULL, -- ordernumber of parent order line, or same as ordernumber if no parent
2819
  parent_ordernumber int(11) default NULL, -- ordernumber of parent order line, or same as ordernumber if no parent
2820
  branch varchar(10) default NULL, -- order line branch
2820
  PRIMARY KEY  (`ordernumber`),
2821
  PRIMARY KEY  (`ordernumber`),
2821
  KEY `basketno` (`basketno`),
2822
  KEY `basketno` (`basketno`),
2822
  KEY `biblionumber` (`biblionumber`),
2823
  KEY `biblionumber` (`biblionumber`),
2823
  KEY `budget_id` (`budget_id`),
2824
  KEY `budget_id` (`budget_id`),
2825
  KEY branch (branch),
2824
  CONSTRAINT `aqorders_ibfk_1` FOREIGN KEY (`basketno`) REFERENCES `aqbasket` (`basketno`) ON DELETE CASCADE ON UPDATE CASCADE,
2826
  CONSTRAINT `aqorders_ibfk_1` FOREIGN KEY (`basketno`) REFERENCES `aqbasket` (`basketno`) ON DELETE CASCADE ON UPDATE CASCADE,
2825
  CONSTRAINT `aqorders_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE SET NULL ON UPDATE CASCADE,
2827
  CONSTRAINT `aqorders_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE SET NULL ON UPDATE CASCADE,
2826
  CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (invoiceid) REFERENCES aqinvoices (invoiceid) ON DELETE SET NULL ON UPDATE CASCADE
2828
  CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (invoiceid) REFERENCES aqinvoices (invoiceid) ON DELETE SET NULL ON UPDATE CASCADE
2829
  CONSTRAINT aqorders_ibfk_4 FOREIGN KEY (branch) REFERENCES branches (branchcode) ON UPDATE CASCADE ON DELETE SET NULL
2827
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2830
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2828
2831
2829
2832
(-)a/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql (+1 lines)
Lines 39-44 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
39
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
39
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
40
   (11, 'group_manage', 'Administrere bestillinger og kurv-grupper'),
40
   (11, 'group_manage', 'Administrere bestillinger og kurv-grupper'),
41
   (11, 'order_receive', 'Administrere bestillinger og kurver'),
41
   (11, 'order_receive', 'Administrere bestillinger og kurver'),
42
   (11, 'order_receive_all', 'Receive all orders'),
42
   (11, 'budget_add_del', 'Legge til og slette budsjetter (men ikke endre budsjetter)'),
43
   (11, 'budget_add_del', 'Legge til og slette budsjetter (men ikke endre budsjetter)'),
43
   (11, 'budget_manage_all', 'Manage all budgets'),
44
   (11, 'budget_manage_all', 'Manage all budgets'),
44
   (13, 'edit_news', 'Legge ut nyhter i OPACen og det interne grensesnittet'),
45
   (13, 'edit_news', 'Legge ut nyhter i OPACen og det interne grensesnittet'),
(-)a/installer/data/mysql/pl-PL/mandatory/userpermissions.sql (+1 lines)
Lines 18-23 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
18
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
18
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
19
   (11, 'group_manage', 'Manage orders & basketgroups'),
19
   (11, 'group_manage', 'Manage orders & basketgroups'),
20
   (11, 'order_receive', 'Manage orders & basket'),
20
   (11, 'order_receive', 'Manage orders & basket'),
21
   (11, 'order_receive_all', 'Receive all orders'),
21
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
22
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
22
   (11, 'budget_manage_all', 'Manage all budgets'),
23
   (11, 'budget_manage_all', 'Manage all budgets'),
23
   (13, 'edit_news', 'RTworzeniei publikowanie wiadomości w interfejsie bibliotekarza i OPAC'),
24
   (13, 'edit_news', 'RTworzeniei publikowanie wiadomości w interfejsie bibliotekarza i OPAC'),
(-)a/installer/data/mysql/ru-RU/mandatory/permissions_and_user_flags.sql (+1 lines)
Lines 42-47 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
42
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
42
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
43
   (11, 'group_manage', 'Manage orders & basketgroups'),
43
   (11, 'group_manage', 'Manage orders & basketgroups'),
44
   (11, 'order_receive', 'Manage orders & basket'),
44
   (11, 'order_receive', 'Manage orders & basket'),
45
   (11, 'order_receive_all', 'Receive all orders'),
45
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
46
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
46
   (11, 'budget_manage_all', 'Manage all budgets'),
47
   (11, 'budget_manage_all', 'Manage all budgets'),
47
   (13, 'edit_news',                   'Написание новостей для электронного каталога и интерфейса библиотекарей'),
48
   (13, 'edit_news',                   'Написание новостей для электронного каталога и интерфейса библиотекарей'),
(-)a/installer/data/mysql/uk-UA/mandatory/permissions_and_user_flags.sql (+1 lines)
Lines 42-47 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
42
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
42
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
43
   (11, 'group_manage', 'Manage orders & basketgroups'),
43
   (11, 'group_manage', 'Manage orders & basketgroups'),
44
   (11, 'order_receive', 'Manage orders & basket'),
44
   (11, 'order_receive', 'Manage orders & basket'),
45
   (11, 'order_receive_all', 'Receive all orders'),
45
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
46
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
46
   (11, 'budget_manage_all', 'Manage all budgets'),
47
   (11, 'budget_manage_all', 'Manage all budgets'),
47
   (13, 'edit_news',                   'Написання новин для електронного каталогу та інтерфейсу бібліотекарів'),
48
   (13, 'edit_news',                   'Написання новин для електронного каталогу та інтерфейсу бібліотекарів'),
(-)a/installer/data/mysql/updatedatabase.pl (+16 lines)
Lines 6053-6058 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { Link Here
6053
    SetVersion($DBversion);
6053
    SetVersion($DBversion);
6054
}
6054
}
6055
6055
6056
$DBversion = "XXX";
6057
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6058
    $dbh->do("
6059
        ALTER TABLE aqorders
6060
          ADD COLUMN branch VARCHAR(10) DEFAULT NULL,
6061
          ADD CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (branch)
6062
            REFERENCES branches (branchcode) ON UPDATE CASCADE ON DELETE SET NULL
6063
    ");
6064
    $dbh->do("
6065
        INSERT INTO permissions (module_bit, code, description)
6066
          VALUES (11, 'order_receive_all', 'Receive all orders')
6067
    ");
6068
    print "Upgrade to $DBversion done (Add aqorders.branch and permission order_receive_all)\n";
6069
    SetVersion($DBversion);
6070
}
6071
6056
6072
6057
=head1 FUNCTIONS
6073
=head1 FUNCTIONS
6058
6074
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt (+19 lines)
Lines 211-216 $(document).ready(function() Link Here
211
<form action="/cgi-bin/koha/acqui/addorder.pl" method="post" id="Aform" onsubmit="return Check(this);">
211
<form action="/cgi-bin/koha/acqui/addorder.pl" method="post" id="Aform" onsubmit="return Check(this);">
212
212
213
<fieldset class="rows">
213
<fieldset class="rows">
214
    <legend>Order details</legend>
215
    <ol>
216
        <li>
217
            <span class="label">Branch:</span>
218
            <select name="branch">
219
                <option value="">&nbsp;</option>
220
                [% FOREACH branch IN branchloop %]
221
                    [% IF branch.selected %]
222
                        <option selected="selected" value="[% branch.value %]">[% branch.branchname %]</option>
223
                    [% ELSE %]
224
                        <option value="[% branch.value %]">[% branch.branchname %]</option>
225
                    [% END %]
226
                [% END %]
227
            </select>
228
        </li>
229
    </ol>
230
</fieldset>
231
232
<fieldset class="rows">
214
        <legend>
233
        <legend>
215
            Catalog details
234
            Catalog details
216
            [% IF ( biblionumber ) %]
235
            [% IF ( biblionumber ) %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt (+5 lines)
Lines 135-140 Link Here
135
135
136
<h1>Receive items from : [% name %] [% IF ( invoice ) %][[% invoice %]] [% END %] (order #[% ordernumber %])</h1>
136
<h1>Receive items from : [% name %] [% IF ( invoice ) %][[% invoice %]] [% END %] (order #[% ordernumber %])</h1>
137
137
138
    [% IF (cannot_receive_order) %]
139
        <p class="error">You are not authorised to receive this order.</p>
140
    [% ELSE %]
141
138
[% IF ( count ) %]
142
[% IF ( count ) %]
139
    <form action="/cgi-bin/koha/acqui/finishreceive.pl" method="post" onsubmit="return Check(this);">
143
    <form action="/cgi-bin/koha/acqui/finishreceive.pl" method="post" onsubmit="return Check(this);">
140
<div class="yui-g">
144
<div class="yui-g">
Lines 350-355 Link Here
350
</div>
354
</div>
351
[% END %]
355
[% END %]
352
356
357
[% END %][%# IF (cannot_receive_order) %]
353
</div>
358
</div>
354
</div>
359
</div>
355
<div class="yui-b">
360
<div class="yui-b">
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt (-97 / +56 lines)
Lines 8-111 Link Here
8
<script type="text/javascript" src="[% themelang %]/js/datatables.js"></script>
8
<script type="text/javascript" src="[% themelang %]/js/datatables.js"></script>
9
[% INCLUDE 'greybox.inc' %]
9
[% INCLUDE 'greybox.inc' %]
10
<script type="text/javascript" src="[% yuipath %]/json/json-min.js"></script>
10
<script type="text/javascript" src="[% yuipath %]/json/json-min.js"></script>
11
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.dataTables.min.js"></script>
12
[% INCLUDE 'datatables-strings.inc' %]
13
<script type="text/javascript" src="[% themelang %]/js/datatables.js"></script>
11
<script type="text/javascript">
14
<script type="text/javascript">
12
//<![CDATA[
15
//<![CDATA[
13
16
14
    dt_overwrite_html_sorting_localeCompare();
17
    dt_overwrite_html_sorting_localeCompare();
18
    var pendingt;
15
19
16
    var rowsToCollapse = 5;
20
    var rowsToCollapse = 5;
17
    $(document).ready(function(){
21
    $(document).ready(function(){
18
        var pendingt = $("#pendingt").dataTable($.extend(true, {}, dataTablesDefaults, {
22
        pendingt = $("#pendingt").dataTable($.extend(true, {}, dataTablesDefaults, {
19
            "aoColumnDefs": [
23
            "aoColumnDefs": [
20
                { "aTargets": [ 3, 8, 9 ], "bSortable": false, "bSearchable": false },
24
                { "aTargets": [ 4, 9, 10 ], "bSortable": false, "bSearchable": false },
21
            ],
25
                { "aTargets": [ 0, 1 ], "sType": "num-html" },
22
            "aoColumns": [
26
                { "aTargets": [ 2 ], "sType": "html" },
23
                { "sType": "num-html" },
27
                { "aTargets": [ 3 ], "bVisible": false }
24
                { "sType": "num-html" },
25
                { "sType": "html" },
26
                null,
27
                null,
28
                null,
29
                null,
30
                null,
31
                null,
32
                null,
33
            ],
28
            ],
34
            "sPaginationType": "four_button"
29
            "sPaginationType": "four_button"
35
        } ) );
30
        } ) );
36
        var receivedt = $("#receivedt").dataTable($.extend(true, {}, dataTablesDefaults, {
31
        var receivedt = $("#receivedt").dataTable($.extend(true, {}, dataTablesDefaults, {
37
            "aoColumnDefs": [
32
            "aoColumnDefs": [
38
                { "aTargets": [ 3, -1 ], "bSortable": false, "bSearchable": false },
33
                { "aTargets": [ 3, -1 ], "bSortable": false, "bSearchable": false },
39
            ],
34
                { "aTargets": [ 0, 1 ], "sType": "num-html" },
40
            "aoColumns": [
35
                { "aTargets": [ 2 ], "sType": "html" }
41
                { "sType": "num-html" },
42
                { "sType": "num-html" },
43
                { "sType": "html" },
44
                null,
45
                null,
46
                null,
47
                null,
48
                null,
49
                null
50
            ],
36
            ],
51
            "sPaginationType": "four_button"
37
            "sPaginationType": "four_button"
52
        } ) );
38
        } ) );
53
/*
54
    $("#pendingt").tablesorter({
55
		headers: { 2: { sorter: 'articles' },3: { sorter: false },8:{sorter:false}}
56
    });
39
    });
57
*/
58
59
	rowCountPending  = $("#pendingt tbody.filterclass tr").length;
60
	rowCountReceived = $("#receivedt tbody.filterclass tr").length;
61
	if (rowCountPending > rowsToCollapse ) { if ( $.cookie("pendingKeepExpanded") != 1 ) { pendingCollapse(); } else { pendingExpand(); } }
62
	if (rowCountReceived > rowsToCollapse ) { if ( $.cookie("receivedKeepExpanded") != 1 ) { receivedCollapse(); } else { receivedExpand(); } }
63
    });
64
65
     // Case-insensitive version of jquery's contains function
66
     jQuery.extend(jQuery.expr[':'], {
67
	    icontains : "jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0"
68
     });
69
70
     // Contains exactly function
71
     jQuery.extend(jQuery.expr[':'], {
72
          containsExactly: "$(a).text() == m[3]"
73
     });
74
75
76
    // Collapse pending items table
77
    function pendingCollapse() {
78
        $.cookie("pendingKeepExpanded", 0, { path: "/", expires: 9999 });
79
	$("#pendingcollapserow").remove();
80
    $("#pendingt tr").show();
81
	$("#pendingt tbody.filterclass tr:gt(" + (rowsToCollapse-1) + ")").hide();
82
	$("#pendingt").before("<p id=\"pendingcollapserow\">" + _("Only the first ")  + rowsToCollapse +  _(" items are displayed.") + " <a href=\"javascript:pendingExpand();\">" + _("Click here to show all ")  + rowCountPending + _(" items") + "<\/a>.<\/p>");
83
40
84
    }
41
    function filter() {
42
        var summaryStatus = jQuery.trim($("#summaryfilter").val());
43
        var basketStatus  = $("#basketfilter").val();
44
        var orderStatus   = $("#orderfilter").val();
45
        var eanfilter = $("#eanfilter").val();
85
46
86
    // Expend pending items table
47
        if (summaryStatus == '' && basketStatus == '' && orderStatus == '' && eanfilter == '') {
87
    function pendingExpand() {
48
            clearFilters();
88
        $.cookie("pendingKeepExpanded", 1, { path: "/", expires: 9999 });
49
            return false;
89
	$("#pendingcollapserow").remove();
50
        }
90
	$("#pendingt tr").show();
51
        pendingt.fnFilter(summaryStatus,2);
91
    $("#pendingt tbody.filterclass tr.orderfound").remove();
52
        pendingt.fnFilter(orderStatus,1);
92
	$("#pendingt").before("<p id=\"pendingcollapserow\">" + rowCountPending + _(" items are displayed.") + " <a href=\"javascript:pendingCollapse();\">" + _("Click here to show only the first ") + rowsToCollapse + _(" items") + "<\/a>.<\/p>");
53
        pendingt.fnFilter(basketStatus,0);
93
    }
54
        pendingt.fnFilter(eanfilter, 3);
94
55
95
    // Collapse already received items table
56
        return false;
96
    function receivedCollapse() {
97
        $.cookie("receivedKeepExpanded", 0, { path: "/", expires: 9999 });
98
	$("#receivedcollapserow").remove();
99
	$("#receivedt tbody.filterclass tr:gt(" + (rowsToCollapse-1) + ")").hide();
100
	$("#receivedt").before("<p id=\"receivedcollapserow\">" + _("Only the first ") + rowsToCollapse + _(" items are displayed.") + " <a href=\"javascript:receivedExpand();\">" + _("Click here to show all ") + rowCountReceived + _(" items") + "<\/a>.<\/p>");
101
    }
57
    }
102
58
103
    // Expand already received items table
59
    // Clear already applied filters
104
    function receivedExpand() {
60
    function clearFilters() {
105
        $.cookie("receivedKeepExpanded", 1, { path: "/", expires: 9999 });
61
        $("#summaryfilter").val('');
106
	$("#receivedcollapserow").remove();
62
        $("#basketfilter").val('');
107
	$("#receivedt tr").show();
63
        $("#orderfilter").val('');
108
	$("#receivedt").before("<p id=\"receivedcollapserow\">" + _("All ") + rowCountReceived + _(" items are displayed.") + " <a href=\"javascript:receivedCollapse();\">" + _("Click here to show only the first ") + rowsToCollapse + _(" items") + "<\/a>.<\/p>");
64
        $("#eanfilter").val('');
65
        var oSettings = pendingt.fnSettings();
66
        for(iCol = 0; iCol < oSettings.aoPreSearchCols.length; iCol++) {
67
            oSettings.aoPreSearchCols[ iCol ].sSearch = '';
68
        }
69
        pendingt.fnDraw();
109
    }
70
    }
110
71
111
//]]>
72
//]]>
Lines 151-161 Link Here
151
	<div class="yui-b">
112
	<div class="yui-b">
152
	[% IF ( receive_error ) %]
113
	[% IF ( receive_error ) %]
153
	<div class="dialog alert">
114
	<div class="dialog alert">
154
	<h3>Error adding items:</h3>
115
	<h3>Error receiving items:</h3>
155
	<ul>
116
	<ul>
156
	[% FOREACH error_loo IN error_loop %]
117
        [% FOREACH error IN error_loop %]
157
		<li>[% error_loo.error_param %][% IF ( error_loo.error_duplicate_barcode ) %]Duplicate Barcode[% END %] <!-- todo: other error conditions come here. --></li>
118
            <li>
158
	[% END %]
119
                [% error.error_param %]
120
                [% IF ( error.error_duplicate_barcode ) %]
121
                    Duplicate Barcode
122
                [% ELSIF (error.error_cannot_receive_order) %]
123
                    You were not authorised to receive this order
124
                [% END %]
125
                <!-- todo: other error conditions come here. -->
126
            </li>
127
        [% END %]
159
	</ul>
128
	</ul>
160
	</div>
129
	</div>
161
	[% END %]
130
	[% END %]
Lines 209-214 Link Here
209
            <th>Basket</th>
178
            <th>Basket</th>
210
            <th>Order line</th>
179
            <th>Order line</th>
211
            <th>Summary</th>
180
            <th>Summary</th>
181
            <th>EAN</th>
212
            <th>View record</th>
182
            <th>View record</th>
213
            <th>Quantity</th>
183
            <th>Quantity</th>
214
            <th>Unit cost</th>
184
            <th>Unit cost</th>
Lines 240-252 Link Here
240
                    [<a href="/cgi-bin/koha/acqui/modordernotes.pl?ordernumber=[% loop_order.ordernumber %]&amp;referrer=/cgi-bin/koha/acqui/parcel.pl%3Fbooksellerid=[% loop_order.booksellerid %]&amp;datereceived=[% loop_order.invoicedatereceived %]&amp;invoice=[% loop_order.invoice %]">Add note</a>]
210
                    [<a href="/cgi-bin/koha/acqui/modordernotes.pl?ordernumber=[% loop_order.ordernumber %]&amp;referrer=/cgi-bin/koha/acqui/parcel.pl%3Fbooksellerid=[% loop_order.booksellerid %]&amp;datereceived=[% loop_order.invoicedatereceived %]&amp;invoice=[% loop_order.invoice %]">Add note</a>]
241
                [% END %]
211
                [% END %]
242
                </td>
212
                </td>
213
                <td>[% loop_order.ean %]</td>
243
                <td><a href="/cgi-bin/koha/catalogue/showmarc.pl?id=[% loop_order.biblionumber %]" title="MARC" rel="gb_page_center[600,500]">MARC</a> | <a href="/cgi-bin/koha/catalogue/showmarc.pl?viewas=card&amp;id=[% loop_order.biblionumber %]" title="MARC" rel="gb_page_center[600,500]">Card</a></td>
214
                <td><a href="/cgi-bin/koha/catalogue/showmarc.pl?id=[% loop_order.biblionumber %]" title="MARC" rel="gb_page_center[600,500]">MARC</a> | <a href="/cgi-bin/koha/catalogue/showmarc.pl?viewas=card&amp;id=[% loop_order.biblionumber %]" title="MARC" rel="gb_page_center[600,500]">Card</a></td>
244
                <td>[% loop_order.quantity %]</td>
215
                <td>[% loop_order.quantity %]</td>
245
                <td>[% loop_order.ecost %]</td>
216
                <td>[% loop_order.ecost %]</td>
246
                <td>[% loop_order.ordertotal %]</td>
217
                <td>[% loop_order.ordertotal %]</td>
247
                <td>[% loop_order.budget_name %]</td>
218
                <td>[% loop_order.budget_name %]</td>
248
				<td>
219
				<td>
220
                    [% IF (loop_order.can_receive) %]
249
                              <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;invoiceid=[% invoiceid %]">Receive</a>
221
                              <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;invoiceid=[% invoiceid %]">Receive</a>
222
                    [% ELSE %]
223
                        Can't receive order
224
                    [% END %]
250
				</td>
225
				</td>
251
				<td>
226
				<td>
252
                        [% IF ( loop_order.left_holds_on_order ) %]
227
                        [% IF ( loop_order.left_holds_on_order ) %]
Lines 276-297 Link Here
276
            [% END %]
251
            [% END %]
277
        </tbody>
252
        </tbody>
278
         </table>[% ELSE %]There are no pending orders.[% END %]
253
         </table>[% ELSE %]There are no pending orders.[% END %]
279
       <div id="resultnumber">
280
        <!-- Row of numbers corresponding to search result pages -->
281
        [% IF ( displayprev ) %]
282
            <a href="parcel.pl?invoiceid=[% invoiceid %]&amp;startfrom=[% prevstartfrom %][% IF ( resultsperpage ) %]&amp;resultsperpage=[% resultsperpage %][% END %]#resultnumber">&lt;&lt; Previous</a>
283
        [% END %]
284
        [% FOREACH number IN numbers %]
285
            [% IF ( number.highlight ) %]
286
            <span class="current">[% number.number %]</span>
287
            [% ELSE %]
288
            <a href="parcel.pl?invoiceid=[% invoiceid %]&amp;startfrom=[% number.startfrom %][% IF ( resultsperpage ) %]&amp;resultsperpage=[% resultsperpage %][% END %]#resultnumber">[% number.number %]</a>
289
            [% END %]
290
        [% END %]
291
        [% IF ( displaynext ) %]
292
            <a href="parcel.pl?invoiceid=[% invoiceid %]&amp;startfrom=[% nextstartfrom %][% IF ( resultsperpage ) %]&amp;resultsperpage=[% resultsperpage %][% END %]#resultnumber">Next &gt;&gt;</a>
293
        [% END %]
294
        </div>
295
    </div>
254
    </div>
296
[% ELSE %]
255
[% ELSE %]
297
    <p>
256
    <p>
Lines 398-404 Link Here
398
</div>
357
</div>
399
</div>
358
</div>
400
<div class="yui-b">
359
<div class="yui-b">
401
<form action="/cgi-bin/koha/acqui/parcel.pl" id="filterform" method="post">
360
<form onsubmit="return filter();">
402
        <fieldset class="brief">
361
        <fieldset class="brief">
403
362
404
            <h4>Filter</h4>
363
            <h4>Filter</h4>
Lines 432-438 Link Here
432
        <input type="hidden" value="[% invoice %]" name="invoice" />
391
        <input type="hidden" value="[% invoice %]" name="invoice" />
433
        <input type="hidden" value="[% invoicedatereceived %]" name="datereceived" />
392
        <input type="hidden" value="[% invoicedatereceived %]" name="datereceived" />
434
        <input type="submit" value="Filter" />
393
        <input type="submit" value="Filter" />
435
        <a href="/cgi-bin/koha/acqui/parcel.pl?booksellerid=[% booksellerid %]&amp;invoice=[% invoice %]&amp;op=new&amp;datereceived=[% formatteddatereceived %]">Clear</a>
394
        <a href="#" onclick="clearFilters(); return false;">Clear</a>
436
		</fieldset>
395
		</fieldset>
437
396
438
397
(-)a/t/Acquisition/CanUserReceiveBasket.t (-1 / +111 lines)
Line 0 Link Here
0
- 
1
#!/usr/bin/perl
2
3
use Modern::Perl;
4
use Test::MockModule;
5
use Test::More tests => 30;
6
7
use C4::Acquisition;
8
9
my $C4_Acquisition_module = new Test::MockModule('C4::Acquisition');
10
$C4_Acquisition_module->mock('GetBasket', \&Mock_GetBasket);
11
my $C4_Context_module = new Test::MockModule('C4::Context');
12
$C4_Context_module->mock('userenv', \&Mock_userenv);
13
14
my $baskets = {
15
    1 => {},
16
    2 => {
17
        branch => 'B1'
18
    },
19
    3 => {
20
        branch => 'B2'
21
    }
22
};
23
24
my $userenv = {};
25
26
my $borrower = {};
27
28
my $order1 = {
29
    basketno => 1
30
};
31
my $order2 = {
32
    basketno => 1,
33
    branch => 'B1'
34
};
35
my $order3 = {
36
    basketno => 1,
37
    branch => 'B2'
38
};
39
my $order4 = {
40
    basketno => 2
41
};
42
my $order5 = {
43
    basketno => 2,
44
    branch => 'B1'
45
};
46
my $order6 = {
47
    basketno => 2,
48
    branch => 'B2'
49
};
50
my $order7 = {
51
    basketno => 3
52
};
53
my $order8 = {
54
    basketno => 3,
55
    branch => 'B1'
56
};
57
my $order9 = {
58
    basketno => 3,
59
    branch => 'B2'
60
};
61
62
$userenv->{branch} = 'B1';
63
64
ok( CanUserReceiveOrder($borrower, $order1, {superlibrarian => 1}) );
65
ok( CanUserReceiveOrder($borrower, $order1, {acquisition => 1}) );
66
ok( CanUserReceiveOrder($borrower, $order1, {acquisition => { order_receive_all => 1 }}) );
67
68
ok( not CanUserReceiveOrder($borrower, $order1, {}) );
69
ok( not CanUserReceiveOrder($borrower, $order1, {acquisition => 0}) );
70
ok( not CanUserReceiveOrder($borrower, $order1, {acquisition => { order_receive => 0 }}) );
71
72
ok( CanUserReceiveOrder($borrower, $order1, {acquisition => { order_receive => 1 }}) );
73
ok( CanUserReceiveOrder($borrower, $order2, {acquisition => { order_receive => 1 }}) );
74
ok( not CanUserReceiveOrder($borrower, $order3, {acquisition => { order_receive => 1 }}) );
75
ok( CanUserReceiveOrder($borrower, $order4, {acquisition => { order_receive => 1 }}) );
76
ok( CanUserReceiveOrder($borrower, $order5, {acquisition => { order_receive => 1 }}) );
77
ok( not CanUserReceiveOrder($borrower, $order6, {acquisition => { order_receive => 1 }}) );
78
ok( not CanUserReceiveOrder($borrower, $order7, {acquisition => { order_receive => 1 }}) );
79
ok( CanUserReceiveOrder($borrower, $order8, {acquisition => { order_receive => 1 }}) );
80
ok( not CanUserReceiveOrder($borrower, $order9, {acquisition => { order_receive => 1 }}) );
81
82
83
$userenv->{branch} = 'B2';
84
85
ok( CanUserReceiveOrder($borrower, $order1, {superlibrarian => 1}) );
86
ok( CanUserReceiveOrder($borrower, $order1, {acquisition => 1}) );
87
ok( CanUserReceiveOrder($borrower, $order1, {acquisition => { order_receive_all => 1 }}) );
88
89
ok( not CanUserReceiveOrder($borrower, $order1, {}) );
90
ok( not CanUserReceiveOrder($borrower, $order1, {acquisition => 0}) );
91
ok( not CanUserReceiveOrder($borrower, $order1, {acquisition => { order_receive => 0 }}) );
92
93
ok( CanUserReceiveOrder($borrower, $order1, {acquisition => { order_receive => 1 }}) );
94
ok( not CanUserReceiveOrder($borrower, $order2, {acquisition => { order_receive => 1 }}) );
95
ok( CanUserReceiveOrder($borrower, $order3, {acquisition => { order_receive => 1 }}) );
96
ok( not CanUserReceiveOrder($borrower, $order4, {acquisition => { order_receive => 1 }}) );
97
ok( not CanUserReceiveOrder($borrower, $order5, {acquisition => { order_receive => 1 }}) );
98
ok( CanUserReceiveOrder($borrower, $order6, {acquisition => { order_receive => 1 }}) );
99
ok( CanUserReceiveOrder($borrower, $order7, {acquisition => { order_receive => 1 }}) );
100
ok( not CanUserReceiveOrder($borrower, $order8, {acquisition => { order_receive => 1 }}) );
101
ok( CanUserReceiveOrder($borrower, $order9, {acquisition => { order_receive => 1 }}) );
102
103
sub Mock_GetBasket {
104
    my ($basketno) = @_;
105
106
    return $baskets->{$basketno};
107
}
108
109
sub Mock_userenv {
110
    return $userenv;
111
}

Return to bug 7290