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 93-99 my $bookseller = GetBookSellerFromId($booksellerid); Link Here
93
my $results;
93
my $results;
94
$results = SearchOrder($ordernumber) if $ordernumber;
94
$results = SearchOrder($ordernumber) if $ordernumber;
95
95
96
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
96
97
my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user(
97
    {
98
    {
98
        template_name   => "acqui/orderreceive.tmpl",
99
        template_name   => "acqui/orderreceive.tmpl",
99
        query           => $input,
100
        query           => $input,
Lines 112-117 unless ( $results and @$results) { Link Here
112
# prepare the form for receiving
113
# prepare the form for receiving
113
my $order = $results->[0];
114
my $order = $results->[0];
114
115
116
unless (CanUserReceiveOrder($loggedinuser, $order, $userflags)) {
117
    $template->param(
118
        cannot_receive_order => 1,
119
        ordernumber => $ordernumber,
120
        invoice => $invoice,
121
        booksellerid => $booksellerid,
122
        name => $bookseller->{name}
123
    );
124
    output_html_with_http_headers $input, $cookie, $template->output;
125
    exit;
126
}
127
115
# Check if ACQ framework exists
128
# Check if ACQ framework exists
116
my $acq_fw = GetMarcStructure(1, 'ACQ');
129
my $acq_fw = GetMarcStructure(1, 'ACQ');
117
unless($acq_fw) {
130
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 337-343 $template->param( Link Here
337
    book_foot_loop        => \@book_foot_loop,
290
    book_foot_loop        => \@book_foot_loop,
338
    totalprice            => sprintf($cfstr, $totalprice),
291
    totalprice            => sprintf($cfstr, $totalprice),
339
    totalquantity         => $totalquantity,
292
    totalquantity         => $totalquantity,
340
    resultsperpage        => $resultsperpage,
341
    (uc(C4::Context->preference("marcflavour"))) => 1,
293
    (uc(C4::Context->preference("marcflavour"))) => 1,
342
    total_quantity       => $total_quantity,
294
    total_quantity       => $total_quantity,
343
    total_gste           => sprintf( "%.2f", $total_gste ),
295
    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', 'Alle Konten verwalten'),
23
   (11, 'budget_manage_all', 'Alle Konten verwalten'),
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', 'Gestisci tutti i budgets'),
25
   (11, 'budget_manage_all', 'Gestisci tutti i 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 2820-2832 CREATE TABLE `aqorders` ( -- information related to the basket line items Link Here
2820
  `claims_count` int(11) default 0, -- count of claim letters generated
2820
  `claims_count` int(11) default 0, -- count of claim letters generated
2821
  `claimed_date` date default NULL, -- last date a claim was generated
2821
  `claimed_date` date default NULL, -- last date a claim was generated
2822
  parent_ordernumber int(11) default NULL, -- ordernumber of parent order line, or same as ordernumber if no parent
2822
  parent_ordernumber int(11) default NULL, -- ordernumber of parent order line, or same as ordernumber if no parent
2823
  branch varchar(10) default NULL, -- order line branch
2823
  PRIMARY KEY  (`ordernumber`),
2824
  PRIMARY KEY  (`ordernumber`),
2824
  KEY `basketno` (`basketno`),
2825
  KEY `basketno` (`basketno`),
2825
  KEY `biblionumber` (`biblionumber`),
2826
  KEY `biblionumber` (`biblionumber`),
2826
  KEY `budget_id` (`budget_id`),
2827
  KEY `budget_id` (`budget_id`),
2828
  KEY branch (branch),
2827
  CONSTRAINT `aqorders_ibfk_1` FOREIGN KEY (`basketno`) REFERENCES `aqbasket` (`basketno`) ON DELETE CASCADE ON UPDATE CASCADE,
2829
  CONSTRAINT `aqorders_ibfk_1` FOREIGN KEY (`basketno`) REFERENCES `aqbasket` (`basketno`) ON DELETE CASCADE ON UPDATE CASCADE,
2828
  CONSTRAINT `aqorders_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE SET NULL ON UPDATE CASCADE,
2830
  CONSTRAINT `aqorders_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE SET NULL ON UPDATE CASCADE,
2829
  CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (invoiceid) REFERENCES aqinvoices (invoiceid) ON DELETE SET NULL ON UPDATE CASCADE
2831
  CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (invoiceid) REFERENCES aqinvoices (invoiceid) ON DELETE SET NULL ON UPDATE CASCADE
2832
  CONSTRAINT aqorders_ibfk_4 FOREIGN KEY (branch) REFERENCES branches (branchcode) ON UPDATE CASCADE ON DELETE SET NULL
2830
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2833
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2831
2834
2832
2835
(-)a/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql (+1 lines)
Lines 38-43 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
38
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
38
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
39
   (11, 'group_manage', 'Administrere bestillinger og kurv-grupper'),
39
   (11, 'group_manage', 'Administrere bestillinger og kurv-grupper'),
40
   (11, 'order_receive', 'Administrere bestillinger og kurver'),
40
   (11, 'order_receive', 'Administrere bestillinger og kurver'),
41
   (11, 'order_receive_all', 'Receive all orders'),
41
   (11, 'budget_add_del', 'Legge til og slette budsjetter (men ikke endre budsjetter)'),
42
   (11, 'budget_add_del', 'Legge til og slette budsjetter (men ikke endre budsjetter)'),
42
   (11, 'budget_manage_all', 'Administrere alle budsjetter'),
43
   (11, 'budget_manage_all', 'Administrere alle budsjetter'),
43
   (13, 'edit_news', 'Legge ut nyhter i OPACen og det interne grensesnittet'),
44
   (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 6372-6377 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { Link Here
6372
    SetVersion($DBversion);
6372
    SetVersion($DBversion);
6373
}
6373
}
6374
6374
6375
$DBversion = "XXX";
6376
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
6377
    $dbh->do("
6378
        ALTER TABLE aqorders
6379
          ADD COLUMN branch VARCHAR(10) DEFAULT NULL,
6380
          ADD CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (branch)
6381
            REFERENCES branches (branchcode) ON UPDATE CASCADE ON DELETE SET NULL
6382
    ");
6383
    $dbh->do("
6384
        INSERT INTO permissions (module_bit, code, description)
6385
          VALUES (11, 'order_receive_all', 'Receive all orders')
6386
    ");
6387
    print "Upgrade to $DBversion done (Add aqorders.branch and permission order_receive_all)\n";
6388
    SetVersion($DBversion);
6389
}
6390
6375
6391
6376
=head1 FUNCTIONS
6392
=head1 FUNCTIONS
6377
6393
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt (+19 lines)
Lines 212-217 $(document).ready(function() Link Here
212
<form action="/cgi-bin/koha/acqui/addorder.pl" method="post" id="Aform" onsubmit="return Check(this);">
212
<form action="/cgi-bin/koha/acqui/addorder.pl" method="post" id="Aform" onsubmit="return Check(this);">
213
213
214
<fieldset class="rows">
214
<fieldset class="rows">
215
    <legend>Order details</legend>
216
    <ol>
217
        <li>
218
            <span class="label">Branch:</span>
219
            <select name="branch">
220
                <option value="">&nbsp;</option>
221
                [% FOREACH branch IN branchloop %]
222
                    [% IF branch.selected %]
223
                        <option selected="selected" value="[% branch.value %]">[% branch.branchname %]</option>
224
                    [% ELSE %]
225
                        <option value="[% branch.value %]">[% branch.branchname %]</option>
226
                    [% END %]
227
                [% END %]
228
            </select>
229
        </li>
230
    </ol>
231
</fieldset>
232
233
<fieldset class="rows">
215
        <legend>
234
        <legend>
216
            Catalog details
235
            Catalog details
217
            [% IF ( biblionumber ) %]
236
            [% 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 330-335 Link Here
330
    This ordernumber does not exist.
334
    This ordernumber does not exist.
331
[% END %]
335
[% END %]
332
336
337
[% END %][%# IF (cannot_receive_order) %]
333
</div>
338
</div>
334
</div>
339
</div>
335
<div class="yui-b">
340
<div class="yui-b">
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt (-53 / +62 lines)
Lines 8-37 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
    $(document).ready(function(){
20
    $(document).ready(function(){
17
        var pendingt = $("#pendingt").dataTable($.extend(true, {}, dataTablesDefaults, {
21
        pendingt = $("#pendingt").dataTable($.extend(true, {}, dataTablesDefaults, {
18
            "bStateSave": true,
22
            "bStateSave": true,
19
            "iCookieDuration": 60*60*24*1000, // 1000 days
23
            "iCookieDuration": 60*60*24*1000, // 1000 days
20
            "aLengthMenu": [[10, 25, 50, 100, -1], [10, 25, 50, 100, "All"]],
24
            "aLengthMenu": [[10, 25, 50, 100, -1], [10, 25, 50, 100, "All"]],
21
            "aoColumnDefs": [
25
            "aoColumnDefs": [
22
                { "aTargets": [ 3, 8, 9 ], "bSortable": false, "bSearchable": false },
26
                { "aTargets": [ 4, 9, 10 ], "bSortable": false, "bSearchable": false },
23
            ],
27
                { "aTargets": [ 0, 1 ], "sType": "num-html" },
24
            "aoColumns": [
28
                { "aTargets": [ 2 ], "sType": "html" },
25
                { "sType": "num-html" },
29
                { "aTargets": [ 3 ], "bVisible": false }
26
                { "sType": "num-html" },
27
                { "sType": "html" },
28
                null,
29
                null,
30
                null,
31
                null,
32
                null,
33
                null,
34
                null,
35
            ],
30
            ],
36
            "sPaginationType": "four_button"
31
            "sPaginationType": "four_button"
37
        } ) );
32
        } ) );
Lines 41-66 Link Here
41
            "aLengthMenu": [[10, 25, 50, 100, -1], [10, 25, 50, 100, "All"]],
36
            "aLengthMenu": [[10, 25, 50, 100, -1], [10, 25, 50, 100, "All"]],
42
            "aoColumnDefs": [
37
            "aoColumnDefs": [
43
                { "aTargets": [ 3, -1 ], "bSortable": false, "bSearchable": false },
38
                { "aTargets": [ 3, -1 ], "bSortable": false, "bSearchable": false },
44
            ],
39
                { "aTargets": [ 0, 1 ], "sType": "num-html" },
45
            "aoColumns": [
40
                { "aTargets": [ 2 ], "sType": "html" }
46
                { "sType": "num-html" },
47
                { "sType": "num-html" },
48
                { "sType": "html" },
49
                null,
50
                null,
51
                null,
52
                null,
53
                null,
54
                null
55
            ],
41
            ],
56
            "sPaginationType": "four_button"
42
            "sPaginationType": "four_button"
57
        } ) );
43
        } ) );
58
/*
59
    $("#pendingt").tablesorter({
60
		headers: { 2: { sorter: 'articles' },3: { sorter: false },8:{sorter:false}}
61
    });
62
*/
63
64
    });
44
    });
65
45
66
     // Case-insensitive version of jquery's contains function
46
     // Case-insensitive version of jquery's contains function
Lines 73-78 Link Here
73
          containsExactly: "$(a).text() == m[3]"
53
          containsExactly: "$(a).text() == m[3]"
74
     });
54
     });
75
55
56
    function filter() {
57
        var summaryStatus = jQuery.trim($("#summaryfilter").val());
58
        var basketStatus  = $("#basketfilter").val();
59
        var orderStatus   = $("#orderfilter").val();
60
        var eanfilter = $("#eanfilter").val();
61
62
        if (summaryStatus == '' && basketStatus == '' && orderStatus == '' && eanfilter == '') {
63
            clearFilters();
64
            return false;
65
        }
66
        pendingt.fnFilter(summaryStatus,2);
67
        pendingt.fnFilter(orderStatus,1);
68
        pendingt.fnFilter(basketStatus,0);
69
        pendingt.fnFilter(eanfilter, 3);
70
71
        return false;
72
    }
73
74
    // Clear already applied filters
75
    function clearFilters() {
76
        $("#summaryfilter").val('');
77
        $("#basketfilter").val('');
78
        $("#orderfilter").val('');
79
        $("#eanfilter").val('');
80
        var oSettings = pendingt.fnSettings();
81
        for(iCol = 0; iCol < oSettings.aoPreSearchCols.length; iCol++) {
82
            oSettings.aoPreSearchCols[ iCol ].sSearch = '';
83
        }
84
        pendingt.fnDraw();
85
    }
86
76
//]]>
87
//]]>
77
</script>
88
</script>
78
<script type="text/javascript">
89
<script type="text/javascript">
Lines 116-126 Link Here
116
	<div class="yui-b">
127
	<div class="yui-b">
117
	[% IF ( receive_error ) %]
128
	[% IF ( receive_error ) %]
118
	<div class="dialog alert">
129
	<div class="dialog alert">
119
	<h3>Error adding items:</h3>
130
	<h3>Error receiving items:</h3>
120
	<ul>
131
	<ul>
121
	[% FOREACH error_loo IN error_loop %]
132
        [% FOREACH error IN error_loop %]
122
		<li>[% error_loo.error_param %][% IF ( error_loo.error_duplicate_barcode ) %]Duplicate Barcode[% END %] <!-- todo: other error conditions come here. --></li>
133
            <li>
123
	[% END %]
134
                [% error.error_param %]
135
                [% IF ( error.error_duplicate_barcode ) %]
136
                    Duplicate Barcode
137
                [% ELSIF (error.error_cannot_receive_order) %]
138
                    You were not authorised to receive this order
139
                [% END %]
140
                <!-- todo: other error conditions come here. -->
141
            </li>
142
        [% END %]
124
	</ul>
143
	</ul>
125
	</div>
144
	</div>
126
	[% END %]
145
	[% END %]
Lines 174-179 Link Here
174
            <th>Basket</th>
193
            <th>Basket</th>
175
            <th>Order line</th>
194
            <th>Order line</th>
176
            <th>Summary</th>
195
            <th>Summary</th>
196
            <th>EAN</th>
177
            <th>View record</th>
197
            <th>View record</th>
178
            <th>Quantity</th>
198
            <th>Quantity</th>
179
            <th>Unit cost</th>
199
            <th>Unit cost</th>
Lines 205-217 Link Here
205
                    [<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>]
225
                    [<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>]
206
                [% END %]
226
                [% END %]
207
                </td>
227
                </td>
228
                <td>[% loop_order.ean %]</td>
208
                <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>
229
                <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>
209
                <td>[% loop_order.quantity %]</td>
230
                <td>[% loop_order.quantity %]</td>
210
                <td>[% loop_order.ecost %]</td>
231
                <td>[% loop_order.ecost %]</td>
211
                <td>[% loop_order.ordertotal %]</td>
232
                <td>[% loop_order.ordertotal %]</td>
212
                <td>[% loop_order.budget_name %]</td>
233
                <td>[% loop_order.budget_name %]</td>
213
				<td>
234
				<td>
235
                    [% IF (loop_order.can_receive) %]
214
                              <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;invoiceid=[% invoiceid %]">Receive</a>
236
                              <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;invoiceid=[% invoiceid %]">Receive</a>
237
                    [% ELSE %]
238
                        Can't receive order
239
                    [% END %]
215
				</td>
240
				</td>
216
				<td>
241
				<td>
217
                        [% IF ( loop_order.left_holds_on_order ) %]
242
                        [% IF ( loop_order.left_holds_on_order ) %]
Lines 241-262 Link Here
241
            [% END %]
266
            [% END %]
242
        </tbody>
267
        </tbody>
243
         </table>[% ELSE %]There are no pending orders.[% END %]
268
         </table>[% ELSE %]There are no pending orders.[% END %]
244
       <div id="resultnumber">
245
        <!-- Row of numbers corresponding to search result pages -->
246
        [% IF ( displayprev ) %]
247
            <a href="parcel.pl?invoiceid=[% invoiceid %]&amp;startfrom=[% prevstartfrom %][% IF ( resultsperpage ) %]&amp;resultsperpage=[% resultsperpage %][% END %]#resultnumber">&lt;&lt; Previous</a>
248
        [% END %]
249
        [% FOREACH number IN numbers %]
250
            [% IF ( number.highlight ) %]
251
            <span class="current">[% number.number %]</span>
252
            [% ELSE %]
253
            <a href="parcel.pl?invoiceid=[% invoiceid %]&amp;startfrom=[% number.startfrom %][% IF ( resultsperpage ) %]&amp;resultsperpage=[% resultsperpage %][% END %]#resultnumber">[% number.number %]</a>
254
            [% END %]
255
        [% END %]
256
        [% IF ( displaynext ) %]
257
            <a href="parcel.pl?invoiceid=[% invoiceid %]&amp;startfrom=[% nextstartfrom %][% IF ( resultsperpage ) %]&amp;resultsperpage=[% resultsperpage %][% END %]#resultnumber">Next &gt;&gt;</a>
258
        [% END %]
259
        </div>
260
    </div>
269
    </div>
261
[% ELSE %]
270
[% ELSE %]
262
    <p>
271
    <p>
Lines 363-369 Link Here
363
</div>
372
</div>
364
</div>
373
</div>
365
<div class="yui-b">
374
<div class="yui-b">
366
<form action="/cgi-bin/koha/acqui/parcel.pl" id="filterform" method="post">
375
<form onsubmit="return filter();">
367
        <fieldset class="brief">
376
        <fieldset class="brief">
368
377
369
            <h4>Filter</h4>
378
            <h4>Filter</h4>
Lines 395-401 Link Here
395
        <input type="hidden" value="search" name="op" />
404
        <input type="hidden" value="search" name="op" />
396
        <input type="hidden" value="[% invoiceid %]" name="invoiceid" />
405
        <input type="hidden" value="[% invoiceid %]" name="invoiceid" />
397
        <input type="submit" value="Filter" />
406
        <input type="submit" value="Filter" />
398
        <a href="/cgi-bin/koha/acqui/parcel.pl?invoiceid=[% invoiceid %]">Clear</a>
407
        <a href="#" onclick="clearFilters(); return false;">Clear</a>
399
		</fieldset>
408
		</fieldset>
400
409
401
410
(-)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