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

(-)a/C4/Acquisition.pm (+71 lines)
Lines 48-53 BEGIN { Link Here
48
48
49
        &GetBasketUsers &ModBasketUsers
49
        &GetBasketUsers &ModBasketUsers
50
        &CanUserManageBasket
50
        &CanUserManageBasket
51
        &CanUserReceiveOrder
51
52
52
        &ModBasketHeader
53
        &ModBasketHeader
53
54
Lines 643-648 sub CanUserManageBasket { Link Here
643
    return 1;
644
    return 1;
644
}
645
}
645
646
647
=head3 CanUserReceiveBasket
648
649
    my $bool = CanUserReceiveBasket($borrower, $order[, $userflags]);
650
    my $bool = CanUserReceiveBasket($borrowernumber, $orderno[, $userflags]);
651
652
Check if a borrower can receive a order, according to user permissions, current
653
working branch and order and basket branches.
654
655
First parameter can be either a borrowernumber or a hashref as returned by
656
C4::Members::GetMember.
657
658
Second parameter can be either a ordernumber or a hashref as returned by
659
C4::Acquisition::GetOrder.
660
661
The third parameter is optional. If given, it should be a hashref as returned
662
by C4::Auth::getuserflags. If not, getuserflags is called.
663
664
If user is authorised to receive order, returns 1.
665
Otherwise returns 0.
666
667
=cut
668
669
sub CanUserReceiveOrder {
670
    my ($borrower, $order, $userflags) = @_;
671
672
    if (!ref $borrower) {
673
        $borrower = C4::Members::GetMember(borrowernumber => $borrower);
674
    }
675
    if (!ref $order) {
676
        $order = GetOrder($order);
677
    }
678
679
    return 0 unless ($borrower and $order);
680
681
    if (!defined $userflags) {
682
        my $dbh = C4::Context->dbh;
683
        my $sth = $dbh->prepare("SELECT flags FROM borrowers WHERE borrowernumber = ?");
684
        $sth->execute($borrower->{borrowernumber});
685
        my ($flags) = $sth->fetchrow_array;
686
        $sth->finish;
687
688
        $userflags = C4::Auth::getuserflags($flags, $borrower->{userid}, $dbh);
689
    }
690
691
    my $branch = C4::Context->userenv->{'branch'};
692
693
    unless ($userflags->{superlibrarian}
694
    || (!ref $userflags->{acquisition} && $userflags->{acquisition})
695
    || (ref $userflags->{acquisition} && $userflags->{acquisition}->{order_receive_all}) )
696
    {
697
        if (!ref $userflags->{acquisition} && !$userflags->{acquisition}) {
698
            return 0;
699
        }
700
        if (ref $userflags->{acquisition} && !$userflags->{acquisition}->{order_receive}) {
701
            return 0;
702
        }
703
        if (defined $order->{branch} && $order->{branch} ne $branch) {
704
            return 0;
705
        }
706
        if (!defined $order->{branch}) {
707
            my $basket = GetBasket($order->{basketno});
708
            if (!$basket || (defined $basket->{branch} && $basket->{branch} ne $branch)) {
709
                return 0;
710
            }
711
        }
712
    }
713
714
    return 1;
715
}
716
646
#------------------------------------------------------------#
717
#------------------------------------------------------------#
647
718
648
=head3 GetBasketsByBasketgroup
719
=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
#my $ordernumber        = $input->param('ordernumber');
157
#my $ordernumber        = $input->param('ordernumber');
157
#my $basketno      = $input->param('basketno');
158
#my $basketno      = $input->param('basketno');
158
#my $booksellerid  = $input->param('booksellerid');
159
#my $booksellerid  = $input->param('booksellerid');
(-)a/acqui/finishreceive.pl (-1 / +15 lines)
Lines 35-41 use List::MoreUtils qw/any/; Link Here
35
my $input=new CGI;
35
my $input=new CGI;
36
my $flagsrequired = {acquisition => 'order_receive'};
36
my $flagsrequired = {acquisition => 'order_receive'};
37
37
38
checkauth($input, 0, $flagsrequired, 'intranet');
38
my ($userid, $cookie, undef, $userflags)
39
    = checkauth($input, 0, $flagsrequired, 'intranet');
40
39
41
40
my $user=$input->remote_user;
42
my $user=$input->remote_user;
41
my $biblionumber = $input->param('biblionumber');
43
my $biblionumber = $input->param('biblionumber');
Lines 56-61 my $error_url_str; Link Here
56
my $ecost = $input->param('ecost');
58
my $ecost = $input->param('ecost');
57
my $note = $input->param("note");
59
my $note = $input->param("note");
58
60
61
my $borrower = C4::Members::GetMember(userid => $userid);
62
unless (CanUserReceiveOrder($borrower, $ordernumber, $userflags)) {
63
    my $error = "cannot_receive_order";
64
    $error_url_str = "&error=$error";
65
    print $input->redirect(
66
        "/cgi-bin/koha/acqui/parcel.pl?invoice=$invoiceno"
67
        . "&booksellerid=$booksellerid&freight=$freight&gst=$gst"
68
        . "&datereceived=$datereceived$error_url_str"
69
    );
70
    exit;
71
}
72
59
#need old recievedate if we update the order, parcel.pl only shows the right parcel this way FIXME
73
#need old recievedate if we update the order, parcel.pl only shows the right parcel this way FIXME
60
if ($quantityrec > $origquantityrec ) {
74
if ($quantityrec > $origquantityrec ) {
61
    # now, add items if applicable
75
    # now, add items if applicable
(-)a/acqui/neworderempty.pl (-4 / +4 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 );
Lines 380-386 $template->param( Link Here
380
    listprice        => sprintf("%.2f", $data->{'listprice'}||$data->{'price'}||$listprice),
380
    listprice        => sprintf("%.2f", $data->{'listprice'}||$data->{'price'}||$listprice),
381
    total            => sprintf("%.2f", ($data->{'ecost'}||0)*($data->{'quantity'}||0) ),
381
    total            => sprintf("%.2f", ($data->{'ecost'}||0)*($data->{'quantity'}||0) ),
382
    ecost            => $data->{'ecost'},
382
    ecost            => $data->{'ecost'},
383
    unitprice        => sprintf("%.2f", $data->{'unitprice'}),
383
    unitprice        => sprintf("%.2f", $data->{'unitprice'} || 0),
384
    notes            => $data->{'notes'},
384
    notes            => $data->{'notes'},
385
    publishercode    => $data->{'publishercode'},
385
    publishercode    => $data->{'publishercode'},
386
    barcode_subfield => $barcode_subfield,
386
    barcode_subfield => $barcode_subfield,
(-)a/acqui/orderreceive.pl (-1 / +13 lines)
Lines 103-109 my $order = GetOrder($ordernumber); Link Here
103
103
104
my $date = @$results[0]->{'entrydate'};
104
my $date = @$results[0]->{'entrydate'};
105
105
106
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
106
my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user(
107
    {
107
    {
108
        template_name   => "acqui/orderreceive.tmpl",
108
        template_name   => "acqui/orderreceive.tmpl",
109
        query           => $input,
109
        query           => $input,
Lines 116-121 my ( $template, $loggedinuser, $cookie ) = get_template_and_user( Link Here
116
116
117
# prepare the form for receiving
117
# prepare the form for receiving
118
if ( $count == 1 ) {
118
if ( $count == 1 ) {
119
    unless (CanUserReceiveOrder($loggedinuser, $order, $userflags)) {
120
        $template->param(
121
            cannot_receive_order => 1,
122
            ordernumber => $ordernumber,
123
            invoice => $invoice,
124
            booksellerid => $booksellerid,
125
            name => $bookseller->{name}
126
        );
127
        output_html_with_http_headers $input, $cookie, $template->output;
128
        exit;
129
    }
130
119
    if (C4::Context->preference('AcqCreateItem') eq 'receiving') {
131
    if (C4::Context->preference('AcqCreateItem') eq 'receiving') {
120
        # Check if ACQ framework exists
132
        # Check if ACQ framework exists
121
        my $marc = GetMarcStructure(1, 'ACQ');
133
        my $marc = GetMarcStructure(1, 'ACQ');
(-)a/acqui/parcel.pl (-45 / +11 lines)
Lines 56-63 To filter the results list on this given date. Link Here
56
56
57
=cut
57
=cut
58
58
59
use strict;
59
use Modern::Perl;
60
#use warnings; FIXME - Bug 2505
60
61
use C4::Auth;
61
use C4::Auth;
62
use C4::Acquisition;
62
use C4::Acquisition;
63
use C4::Budgets;
63
use C4::Budgets;
Lines 76-82 my $bookseller=GetBookSellerFromId($booksellerid); Link Here
76
76
77
my $invoice=$input->param('invoice') || '';
77
my $invoice=$input->param('invoice') || '';
78
my $freight=$input->param('freight');
78
my $freight=$input->param('freight');
79
my $input_gst = ($input->param('gst') eq '' ? undef : $input->param('gst'));
79
my $input_gst = $input->param('gst');
80
$input_gst = (!defined $input_gst or $input_gst eq '') ? undef : $input_gst;
80
my $gst= $input_gst // $bookseller->{gstrate} // C4::Context->preference("gist") // 0;
81
my $gst= $input_gst // $bookseller->{gstrate} // C4::Context->preference("gist") // 0;
81
my $datereceived =  ($input->param('op') eq 'new') ? C4::Dates->new($input->param('datereceived')) 
82
my $datereceived =  ($input->param('op') eq 'new') ? C4::Dates->new($input->param('datereceived')) 
82
					:  C4::Dates->new($input->param('datereceived'), 'iso')   ;
83
					:  C4::Dates->new($input->param('datereceived'), 'iso')   ;
Lines 85-96 my $code = $input->param('code'); Link Here
85
my @rcv_err         = $input->param('error');
86
my @rcv_err         = $input->param('error');
86
my @rcv_err_barcode = $input->param('error_bc');
87
my @rcv_err_barcode = $input->param('error_bc');
87
88
88
my $startfrom=$input->param('startfrom');
89
my $format = $input->param('format');
89
my $resultsperpage = $input->param('resultsperpage');
90
if ($format and $format eq 'json'){
90
$resultsperpage = 20 unless ($resultsperpage);
91
$startfrom=0 unless ($startfrom);
92
93
if($input->param('format') eq "json"){
94
    my ($template, $loggedinuser, $cookie)
91
    my ($template, $loggedinuser, $cookie)
95
        = get_template_and_user({template_name => "acqui/ajax.tmpl",
92
        = get_template_and_user({template_name => "acqui/ajax.tmpl",
96
                 query => $input,
93
                 query => $input,
Lines 132-138 if($input->param('format') eq "json"){ Link Here
132
    exit;
129
    exit;
133
}
130
}
134
131
135
my ($template, $loggedinuser, $cookie)
132
my ($template, $loggedinuser, $cookie, $userflags)
136
    = get_template_and_user({template_name => "acqui/parcel.tmpl",
133
    = get_template_and_user({template_name => "acqui/parcel.tmpl",
137
                 query => $input,
134
                 query => $input,
138
				 type => "intranet",
135
				 type => "intranet",
Lines 250-299 for (my $i = 0 ; $i < $countpendings ; $i++) { Link Here
250
    $line{biblios}              = $countbiblio - 1;
247
    $line{biblios}              = $countbiblio - 1;
251
    $line{left_subscription}    = 1 if scalar @subscriptions >= 1;
248
    $line{left_subscription}    = 1 if scalar @subscriptions >= 1;
252
    $line{subscriptions}        = scalar @subscriptions;
249
    $line{subscriptions}        = scalar @subscriptions;
253
    $line{left_holds}           = 1 if $holds >= 1;
250
    $line{left_holds}           = ($holds >= 1) ? 1 : 0;
254
    $line{left_holds_on_order}  = 1 if $line{left_holds}==1 && ($line{items} == 0 || $itemholds );
251
    $line{left_holds_on_order}  = 1 if $line{left_holds}==1 && ($line{items} == 0 || $itemholds );
255
    $line{holds}                = $holds;
252
    $line{holds}                = $holds;
256
    $line{holds_on_order}       = $itemholds?$itemholds:$holds if $line{left_holds_on_order};
253
    $line{holds_on_order}       = $itemholds?$itemholds:$holds if $line{left_holds_on_order};
257
    
254
    
255
    $line{can_receive} = CanUserReceiveOrder($loggedinuser, $pendingorders->[$i], $userflags);
258
    
256
    
259
    push @loop_orders, \%line if ($i >= $startfrom and $i < $startfrom + $resultsperpage);
257
    push @loop_orders, \%line;
260
}
258
}
261
$freight = $totalfreight unless $freight;
259
$freight = $totalfreight unless $freight;
262
260
263
my $count = $countpendings;
261
my $count = $countpendings;
264
262
265
if ($count>$resultsperpage){
263
$tototal //= 0;
266
    my $displaynext=0;
267
    my $displayprev=$startfrom;
268
    if(($count - ($startfrom+$resultsperpage)) > 0 ) {
269
        $displaynext = 1;
270
    }
271
272
    my @numbers = ();
273
    for (my $i=1; $i<$count/$resultsperpage+1; $i++) {
274
            my $highlight=0;
275
            ($startfrom/$resultsperpage==($i-1)) && ($highlight=1);
276
            push @numbers, { number => $i,
277
                highlight => $highlight ,
278
                startfrom => ($i-1)*$resultsperpage};
279
    }
280
281
    my $from = $startfrom*$resultsperpage+1;
282
    my $to;
283
    if($count < (($startfrom+1)*$resultsperpage)){
284
        $to = $count;
285
    } else {
286
        $to = (($startfrom+1)*$resultsperpage);
287
    }
288
    $template->param(numbers=>\@numbers,
289
                     displaynext=>$displaynext,
290
                     displayprev=>$displayprev,
291
                     nextstartfrom=>(($startfrom+$resultsperpage<$count)?$startfrom+$resultsperpage:$count),
292
                     prevstartfrom=>(($startfrom-$resultsperpage>0)?$startfrom-$resultsperpage:0)
293
                    );
294
}
295
296
#$totalfreight=$freight;
297
$tototal = $tototal + $freight;
264
$tototal = $tototal + $freight;
298
265
299
$template->param(
266
$template->param(
Lines 321-327 $template->param( Link Here
321
    totalPquantity        => $totalPquantity,
288
    totalPquantity        => $totalPquantity,
322
    totalPqtyrcvd         => $totalPqtyrcvd,
289
    totalPqtyrcvd         => $totalPqtyrcvd,
323
    totalPecost           => sprintf("%.2f", $totalPecost),
290
    totalPecost           => sprintf("%.2f", $totalPecost),
324
    resultsperpage        => $resultsperpage,
325
);
291
);
326
output_html_with_http_headers $input, $cookie, $template->output;
292
output_html_with_http_headers $input, $cookie, $template->output;
327
 
293
 
(-)a/installer/data/mysql/de-DE/mandatory/userpermissions.sql (+1 lines)
Lines 16-21 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
16
   (11, 'order_manage_all', 'Manage all orders & baskets'),
16
   (11, 'order_manage_all', 'Manage all orders & baskets'),
17
   (11, 'group_manage', 'Bestellgruppen vewalten'),
17
   (11, 'group_manage', 'Bestellgruppen vewalten'),
18
   (11, 'order_receive', 'Lieferungen verwalten'),
18
   (11, 'order_receive', 'Lieferungen verwalten'),
19
   (11, 'order_receive_all', 'Receive all orders'),
19
   (11, 'budget_add_del', 'Konten hinzufügen/ändern, aber bestehende nicht ändern'),
20
   (11, 'budget_add_del', 'Konten hinzufügen/ändern, aber bestehende nicht ändern'),
20
   (13, 'edit_news', 'Nachrichten für OPAC und Dienstoberfläche verfassen'),
21
   (13, 'edit_news', 'Nachrichten für OPAC und Dienstoberfläche verfassen'),
21
   (13, 'label_creator', 'Etiketten und Barcodes aus Katalog- und Benutzerdaten erstellen'),
22
   (13, 'label_creator', 'Etiketten und Barcodes aus Katalog- und Benutzerdaten erstellen'),
(-)a/installer/data/mysql/en/mandatory/userpermissions.sql (+1 lines)
Lines 16-21 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
16
   (11, 'order_manage_all', 'Manage all orders & baskets'),
16
   (11, 'order_manage_all', 'Manage all orders & baskets'),
17
   (11, 'group_manage', 'Manage orders & basketgroups'),
17
   (11, 'group_manage', 'Manage orders & basketgroups'),
18
   (11, 'order_receive', 'Manage orders & basket'),
18
   (11, 'order_receive', 'Manage orders & basket'),
19
   (11, 'order_receive_all', 'Receive all orders'),
19
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
20
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
20
   (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
21
   (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
21
   (13, 'label_creator', 'Create printable labels and barcodes from catalog and patron data'),
22
   (13, 'label_creator', 'Create printable labels and barcodes from catalog and patron data'),
(-)a/installer/data/mysql/es-ES/mandatory/userpermissions.sql (+1 lines)
Lines 16-21 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
16
   (11, 'order_manage_all', 'Manage all orders & baskets'),
16
   (11, 'order_manage_all', 'Manage all orders & baskets'),
17
   (11, 'group_manage', 'Manage orders & basketgroups'),
17
   (11, 'group_manage', 'Manage orders & basketgroups'),
18
   (11, 'order_receive', 'Manage orders & basket'),
18
   (11, 'order_receive', 'Manage orders & basket'),
19
   (11, 'order_receive_all', 'Receive all orders'),
19
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
20
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
20
   (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
21
   (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
21
   (13, 'label_creator', 'Create printable labels and barcodes from catalog and patron data'),
22
   (13, 'label_creator', 'Create printable labels and barcodes from catalog and patron data'),
(-)a/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql (+1 lines)
Lines 31-36 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
31
   (11, 'order_manage_all', 'Gérer toutes les commandes et panier'),
31
   (11, 'order_manage_all', 'Gérer toutes les commandes et panier'),
32
   (11, 'group_manage', 'Gérer les commandes et les bons de commande'),
32
   (11, 'group_manage', 'Gérer les commandes et les bons de commande'),
33
   (11, 'order_receive', 'Gérer les réceptions'),
33
   (11, 'order_receive', 'Gérer les réceptions'),
34
   (11, 'order_receive_all', 'Gérer toutes les réceptions'),
34
   (11, 'budget_add_del', 'Ajouter et supprimer les budgets (mais pas modifier)'),
35
   (11, 'budget_add_del', 'Ajouter et supprimer les budgets (mais pas modifier)'),
35
   (13, 'manage_csv_profiles', 'Gérer les profils d''export CSV'),
36
   (13, 'manage_csv_profiles', 'Gérer les profils d''export CSV'),
36
   (13, 'moderate_tags', 'Modérer les tags des adhérents'),
37
   (13, 'moderate_tags', 'Modérer les tags des adhérents'),
(-)a/installer/data/mysql/it-IT/necessari/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 & baskets'),
18
   (11, 'order_manage_all', 'Manage all orders & baskets'),
19
   (11, 'group_manage', 'Gestisci ordini e raccoglitori raggruppati'),
19
   (11, 'group_manage', 'Gestisci ordini e raccoglitori raggruppati'),
20
   (11, 'order_receive', 'Gestisci arrivi'),
20
   (11, 'order_receive', 'Gestisci arrivi'),
21
   (11, 'order_receive_all', 'Receive all orders'),
21
   (11, 'budget_add_del', 'Aggiungi e cancella budgets (senza modificarli)'),
22
   (11, 'budget_add_del', 'Aggiungi e cancella budgets (senza modificarli)'),
22
   (13, 'edit_news', 'Scrivi le news per l\'OPAC e per l\'interfaccia staff'),
23
   (13, 'edit_news', 'Scrivi le news per l\'OPAC e per l\'interfaccia staff'),
23
   (13, 'label_creator', 'Crea etichette da stampare e barcodes dal catalogo e dai dati degli utenti'),
24
   (13, 'label_creator', 'Crea etichette da stampare e barcodes dal catalogo e dai dati degli utenti'),
(-)a/installer/data/mysql/kohastructure.sql (-1 / +4 lines)
Lines 2761-2772 CREATE TABLE `aqorders` ( Link Here
2761
  `uncertainprice` tinyint(1),
2761
  `uncertainprice` tinyint(1),
2762
  `claims_count` int(11) default 0,
2762
  `claims_count` int(11) default 0,
2763
  `claimed_date` date default NULL,
2763
  `claimed_date` date default NULL,
2764
  branch varchar(10) default NULL,
2764
  PRIMARY KEY  (`ordernumber`),
2765
  PRIMARY KEY  (`ordernumber`),
2765
  KEY `basketno` (`basketno`),
2766
  KEY `basketno` (`basketno`),
2766
  KEY `biblionumber` (`biblionumber`),
2767
  KEY `biblionumber` (`biblionumber`),
2767
  KEY `budget_id` (`budget_id`),
2768
  KEY `budget_id` (`budget_id`),
2769
  KEY branch (branch),
2768
  CONSTRAINT `aqorders_ibfk_1` FOREIGN KEY (`basketno`) REFERENCES `aqbasket` (`basketno`) ON DELETE CASCADE ON UPDATE CASCADE,
2770
  CONSTRAINT `aqorders_ibfk_1` FOREIGN KEY (`basketno`) REFERENCES `aqbasket` (`basketno`) ON DELETE CASCADE ON UPDATE CASCADE,
2769
  CONSTRAINT `aqorders_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE SET NULL ON UPDATE CASCADE
2771
  CONSTRAINT `aqorders_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE SET NULL ON UPDATE CASCADE,
2772
  CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (branch) REFERENCES branches (branchcode) ON UPDATE CASCADE ON DELETE SET NULL
2770
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2773
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2771
2774
2772
2775
(-)a/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql (+1 lines)
Lines 37-42 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
37
   (11, 'order_manage_all', 'Manage all orders & baskets'),
37
   (11, 'order_manage_all', 'Manage all orders & baskets'),
38
   (11, 'group_manage', 'Administrere bestillinger og kurv-grupper'),
38
   (11, 'group_manage', 'Administrere bestillinger og kurv-grupper'),
39
   (11, 'order_receive', 'Administrere bestillinger og kurver'),
39
   (11, 'order_receive', 'Administrere bestillinger og kurver'),
40
   (11, 'order_receive_all', 'Receive all orders'),
40
   (11, 'budget_add_del', 'Legge til og slette budsjetter (men ikke endre budsjetter)'),
41
   (11, 'budget_add_del', 'Legge til og slette budsjetter (men ikke endre budsjetter)'),
41
   (13, 'edit_news', 'Legge ut nyhter i OPACen og det interne grensesnittet'),
42
   (13, 'edit_news', 'Legge ut nyhter i OPACen og det interne grensesnittet'),
42
   (13, 'label_creator', 'Lage etiketter og strekkoder basert på bibliografiske poster og lånerdata'),
43
   (13, 'label_creator', 'Lage etiketter og strekkoder basert på bibliografiske poster og lånerdata'),
(-)a/installer/data/mysql/pl-PL/mandatory/userpermissions.sql (+1 lines)
Lines 16-21 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
16
   (11, 'order_manage_all', 'Manage all orders & baskets'),
16
   (11, 'order_manage_all', 'Manage all orders & baskets'),
17
   (11, 'group_manage', 'Manage orders & basketgroups'),
17
   (11, 'group_manage', 'Manage orders & basketgroups'),
18
   (11, 'order_receive', 'Manage orders & basket'),
18
   (11, 'order_receive', 'Manage orders & basket'),
19
   (11, 'order_receive_all', 'Receive all orders'),
19
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
20
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
20
   (13, 'edit_news', 'RTworzeniei publikowanie wiadomości w interfejsie bibliotekarza i OPAC'),
21
   (13, 'edit_news', 'RTworzeniei publikowanie wiadomości w interfejsie bibliotekarza i OPAC'),
21
   (13, 'label_creator', 'Create printable labels and barcodes from catalog and patron data'),
22
   (13, 'label_creator', 'Create printable labels and barcodes from catalog and patron data'),
(-)a/installer/data/mysql/ru-RU/mandatory/permissions_and_user_flags.sql (+1 lines)
Lines 40-45 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
40
   (11, 'order_manage_all', 'Manage all orders & baskets'),
40
   (11, 'order_manage_all', 'Manage all orders & baskets'),
41
   (11, 'group_manage', 'Manage orders & basketgroups'),
41
   (11, 'group_manage', 'Manage orders & basketgroups'),
42
   (11, 'order_receive', 'Manage orders & basket'),
42
   (11, 'order_receive', 'Manage orders & basket'),
43
   (11, 'order_receive_all', 'Receive all orders'),
43
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
44
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
44
   (13, 'edit_news',                   'Написание новостей для электронного каталога и интерфейса библиотекарей'),
45
   (13, 'edit_news',                   'Написание новостей для электронного каталога и интерфейса библиотекарей'),
45
   (13, 'label_creator',               'Создание печатных наклеек и штрихкодов из каталога и с данными о пользователях'),
46
   (13, 'label_creator',               'Создание печатных наклеек и штрихкодов из каталога и с данными о пользователях'),
(-)a/installer/data/mysql/uk-UA/mandatory/permissions_and_user_flags.sql (+1 lines)
Lines 40-45 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
40
   (11, 'order_manage_all', 'Manage all orders & baskets'),
40
   (11, 'order_manage_all', 'Manage all orders & baskets'),
41
   (11, 'group_manage', 'Manage orders & basketgroups'),
41
   (11, 'group_manage', 'Manage orders & basketgroups'),
42
   (11, 'order_receive', 'Manage orders & basket'),
42
   (11, 'order_receive', 'Manage orders & basket'),
43
   (11, 'order_receive_all', 'Receive all orders'),
43
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
44
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
44
   (13, 'edit_news',                   'Написання новин для електронного каталогу та інтерфейсу бібліотекарів'),
45
   (13, 'edit_news',                   'Написання новин для електронного каталогу та інтерфейсу бібліотекарів'),
45
   (13, 'label_creator',               'Створення друкованих наклейок і штрих-кодів з каталогу та з даними про користувачів'),
46
   (13, 'label_creator',               'Створення друкованих наклейок і штрих-кодів з каталогу та з даними про користувачів'),
(-)a/installer/data/mysql/updatedatabase.pl (+16 lines)
Lines 5245-5250 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { Link Here
5245
    SetVersion($DBversion);
5245
    SetVersion($DBversion);
5246
}
5246
}
5247
5247
5248
$DBversion = "XXX";
5249
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5250
    $dbh->do("
5251
        ALTER TABLE aqorders
5252
          ADD COLUMN branch VARCHAR(10) DEFAULT NULL,
5253
          ADD CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (branch)
5254
            REFERENCES branches (branchcode) ON UPDATE CASCADE ON DELETE SET NULL
5255
    ");
5256
    $dbh->do("
5257
        INSERT INTO permissions (module_bit, code, description)
5258
          VALUES (11, 'order_receive_all', 'Receive all orders')
5259
    ");
5260
    print "Upgrade to $DBversion done (Add aqorders.branch and permission order_receive_all)\n";
5261
    SetVersion($DBversion);
5262
}
5263
5248
5264
5249
=head1 FUNCTIONS
5265
=head1 FUNCTIONS
5250
5266
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt (+19 lines)
Lines 203-208 $(document).ready(function() Link Here
203
<form action="/cgi-bin/koha/acqui/addorder.pl" method="post" id="Aform" onsubmit="return Check(this);">
203
<form action="/cgi-bin/koha/acqui/addorder.pl" method="post" id="Aform" onsubmit="return Check(this);">
204
204
205
<fieldset class="rows">
205
<fieldset class="rows">
206
    <legend>Order details</legend>
207
    <ol>
208
        <li>
209
            <span class="label">Branch:</span>
210
            <select name="branch">
211
                <option value="">&nbsp;</option>
212
                [% FOREACH branch IN branchloop %]
213
                    [% IF branch.selected %]
214
                        <option selected="selected" value="[% branch.value %]">[% branch.branchname %]</option>
215
                    [% ELSE %]
216
                        <option value="[% branch.value %]">[% branch.branchname %]</option>
217
                    [% END %]
218
                [% END %]
219
            </select>
220
        </li>
221
    </ol>
222
</fieldset>
223
224
<fieldset class="rows">
206
        <legend>
225
        <legend>
207
            Catalog details
226
            Catalog details
208
            [% IF ( biblionumber ) %]
227
            [% IF ( biblionumber ) %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt (+5 lines)
Lines 54-59 Link Here
54
54
55
<h1>Receive items from : [% name %] [% IF ( invoice ) %][[% invoice %]] [% END %] (order #[% ordernumber %])</h1>
55
<h1>Receive items from : [% name %] [% IF ( invoice ) %][[% invoice %]] [% END %] (order #[% ordernumber %])</h1>
56
56
57
    [% IF (cannot_receive_order) %]
58
        <p class="error">You are not authorised to receive this order.</p>
59
    [% ELSE %]
60
57
[% IF ( count ) %]
61
[% IF ( count ) %]
58
    <form action="/cgi-bin/koha/acqui/finishreceive.pl" method="post" onsubmit="return Check(this);">
62
    <form action="/cgi-bin/koha/acqui/finishreceive.pl" method="post" onsubmit="return Check(this);">
59
<div class="yui-g">
63
<div class="yui-g">
Lines 218-223 Link Here
218
</div>
222
</div>
219
[% END %]
223
[% END %]
220
224
225
[% END %][%# IF (cannot_receive_order) %]
221
</div>
226
</div>
222
</div>
227
</div>
223
<div class="yui-b">
228
<div class="yui-b">
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt (-139 / +52 lines)
Lines 1-136 Link Here
1
[% INCLUDE 'doc-head-open.inc' %]
1
[% INCLUDE 'doc-head-open.inc' %]
2
<title>Koha &rsaquo; Acquisitions &rsaquo; [% IF ( date ) %]
2
<title>Koha &rsaquo; Acquisitions &rsaquo; [% IF ( date ) %]
3
            Receipt summary for [% name %] [% IF ( invoice ) %]invoice [% invoice %][% END %] on [% formatteddatereceived %][% ELSE %]Receive orders from [% name %][% END %]</title>
3
            Receipt summary for [% name %] [% IF ( invoice ) %]invoice [% invoice %][% END %] on [% formatteddatereceived %][% ELSE %]Receive orders from [% name %][% END %]</title>
4
<link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" />
4
[% INCLUDE 'doc-head-close.inc' %]
5
[% INCLUDE 'doc-head-close.inc' %]
5
[% INCLUDE 'greybox.inc' %]
6
[% INCLUDE 'greybox.inc' %]
6
<script type="text/javascript" src="[% yuipath %]/json/json-min.js"></script>
7
<script type="text/javascript" src="[% yuipath %]/json/json-min.js"></script>
7
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.tablesorter.min.js"></script>
8
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.dataTables.min.js"></script>
9
[% INCLUDE 'datatables-strings.inc' %]
10
<script type="text/javascript" src="[% themelang %]/js/datatables.js"></script>
8
<script type="text/javascript">
11
<script type="text/javascript">
9
//<![CDATA[
12
//<![CDATA[
13
    var dt_pending;
10
14
11
    var rowsToCollapse = 5;
12
13
	$.tablesorter.addParser({
14
	    id: 'articles',
15
	    is: function(s) {return false;  },
16
	    format: function(s) { return s.toLowerCase().replace(/^(the|an|a) /,''); },
17
	    type: 'text'
18
	});
19
20
    $(document).ready(function(){
21
    $("#pendingt").tablesorter({
22
		headers: { 2: { sorter: 'articles' },3: { sorter: false },7:{sorter:false}}
23
    });
24
25
	rowCountPending  = $("#pendingt tbody.filterclass tr").length;
26
	rowCountReceived = $("#receivedt tbody.filterclass tr").length;
27
	if (rowCountPending  > rowsToCollapse) { pendingCollapse(); }
28
	if (rowCountReceived > rowsToCollapse) { receivedCollapse(); }
29
    });
30
31
     // Case-insensitive version of jquery's contains function
32
     jQuery.extend(jQuery.expr[':'], {
33
	    icontains : "jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0"
34
     });
35
36
     // Contains exactly function
37
     jQuery.extend(jQuery.expr[':'], {
38
          containsExactly: "$(a).text() == m[3]"
39
     });
40
41
42
    // Collapse pending items table
43
    function pendingCollapse() {
44
	$("#pendingcollapserow").remove();
45
    $("#pendingt tr").show();
46
	$("#pendingt tbody.filterclass tr:gt(" + (rowsToCollapse-1) + ")").hide();
47
	$("#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>");
48
49
    }
50
51
    // Expend pending items table
52
    function pendingExpand() {
53
	$("#pendingcollapserow").remove();
54
	$("#pendingt tr").show();
55
    $("#pendingt tbody.filterclass tr.orderfound").remove();
56
	$("#pendingt").before("<p id=\"pendingcollapserow\">" + rowCountPending + _(" items are displayed.") + "<a href=\"javascript:pendingCollapse();\">" + _("Click here to show only the first ") + rowsToCollapse + _(" items") + "<\/a>.<\/p>");
57
    }
58
59
    // Collapse already received items table
60
    function receivedCollapse() {
61
	$("#receivedcollapserow").remove();
62
	$("#receivedt tbody.filterclass tr:gt(" + (rowsToCollapse-1) + ")").hide();
63
	$("#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>");
64
    }
65
66
    // Expand already received items table
67
    function receivedExpand() {
68
	$("#receivedcollapserow").remove();
69
	$("#receivedt tr").show();
70
	$("#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>");
71
    }
72
73
    // Launch filtering
74
    function filter() {
15
    function filter() {
75
16
        var summaryStatus = jQuery.trim($("#summaryfilter").val());
76
    var summaryStatus = jQuery.trim($("#summaryfilter").val());
17
        var basketStatus  = $("#basketfilter").val();
77
	var basketStatus  = $("#basketfilter").val();
18
        var orderStatus   = $("#orderfilter").val();
78
	var orderStatus   = $("#orderfilter").val();
19
79
20
        if (summaryStatus == '' && basketStatus == '' && orderStatus == '') {
80
	if (summaryStatus == '' && basketStatus == '' && orderStatus == '') { clearFilters(); return false; }
21
            clearFilters();
81
22
            return false;
82
	var filtered = "table#pendingt tbody.filterclass tr";
23
        }
83
24
        dt_pending.fnFilter(summaryStatus,2);
84
	// We hide everything
25
        dt_pending.fnFilter(orderStatus,1);
85
	$("#nothingfoundrow").remove();
26
        dt_pending.fnFilter(basketStatus,0);
86
	$(filtered).hide();
27
87
28
        return false;
88
	// Do the search
89
	var callback =  {
90
		success: function(o) {
91
			var jsonString = o.responseText;
92
			var gst = "[% gst %]";
93
			try {
94
				var orders = YAHOO.lang.JSON.parse(jsonString);
95
				var foundCount = orders.length;
96
97
				for( i = 0 ; i < orders.length ; i++){
98
					order = orders[i];
99
					$('<tr class="orderfound">'
100
                       + '<td class="basketfilterclass"><a href="/cgi-bin/koha/acqui/basket.pl?basketno=' + order.basketno + '">' + order.basketno + '</a></td>'
101
                       + '<td class="orderfilterclass"> <a href="neworderempty.pl?ordernumber=' + order.ordernumber + '&booksellerid=' + order.booksellerid + '">' + order.ordernumber + ' </a></td>'
102
                       + '<td class="summaryfilterclass">'
103
                       + '<a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=' + order.biblionumber + '">' + order.title + '</a>' + _(" by ") + order.author + '&nbsp;&ndash;&nbsp;' + order.isbn + '</td>'
104
                       + '<td><a href="/cgi-bin/koha/catalogue/showmarc.pl?id=' + order.biblionumber + '" title="MARC" rel="gb_page_center[600,500]">MARC</a> | <a href="/cgi-bin/koha/catalogue/showmarc.pl?viewas=card&amp;id=' + order.biblionumber + '" title="MARC" rel="gb_page_center[600,500]">Card</a></td>'
105
                       + '<td>' + order.quantity + '</td>'
106
                       + '<td>' + order.ecost + '</td>'
107
                       + '<td>' + order.ordertotal + '</td>'
108
                       + '<td>'
109
                       + '<a href="orderreceive.pl?ordernumber=' + order.ordernumber + '&amp;datereceived=[% invoicedatereceived %]&amp;invoice=[% invoice %]&amp;gst=' + gst + '&amp;freight=' + order.freight + '&amp;booksellerid=[% booksellerid %]">Receive</a> /'
110
                       + '<a href="parcel.pl?type=intra&amp;ordernumber=' + order.ordernumber + '&amp;biblionumber=' + order.biblionumber + '&amp;action=cancelorder&amp;booksellerid=[% booksellerid %]&amp;datereceived=[% invoicedatereceived %]&amp;invoice=[% invoice %]" onclick="return confirm(\'' + _('Are you sure you want to cancel this order?') + '\');">Cancel</a>'
111
                       + '</td></tr>').appendTo("table#pendingt");
112
				}
113
114
				// If nothing has been found, we tell the user so
115
				if (orders.length == 0) {
116
				    $("<tr><td id=\"nothingfoundrow\" colspan=\"8\">No items match your criteria.<\/tr>").appendTo("#pendingt");
117
				}
118
			}catch(e){alert(e);}
119
		}
120
	}
121
	var transaction = YAHOO.util.Connect.asyncRequest('GET', '/cgi-bin/koha/acqui/parcel.pl?booksellerid=[% booksellerid %]&search='+summaryStatus+'&basketno='+basketStatus+'&orderno='+orderStatus+'&format=json', callback, null);
122
123
	return false;
124
    }
29
    }
125
30
126
    // Clear already applied filters
31
    // Clear already applied filters
127
    function clearFilters() {
32
    function clearFilters() {
128
	$("#nothingfoundrow").remove();
33
        $("#summaryfilter").val('');
129
        $("#pendingt tbody.filterclass tr").show();
34
        $("#basketfilter").val('');
130
        //$("#pendingt tbody.filterclass tr.orderfound").remove();
35
        $("#orderfilter").val('');
131
	pendingExpand();
36
        var oSettings = dt_pending.fnSettings();
37
        for(iCol = 0; iCol < oSettings.aoPreSearchCols.length; iCol++) {
38
            oSettings.aoPreSearchCols[ iCol ].sSearch = '';
39
        }
40
        dt_pending.fnDraw();
132
    }
41
    }
133
42
43
    $(document).ready(function() {
44
        var dt_options = $.extend(true, {}, dataTablesDefaults, {
45
            'aLengthMenu': [[5, 10, 20, 50, -1], [5, 10, 20, 50, _("All")]],
46
            'iDisplayLength': 5,
47
            'sDom': '<"top pager"ilp>t'
48
        });
49
        dt_pending = $("#pendingt").dataTable(dt_options);
50
        $("#receivedt").dataTable(dt_options);
51
    });
134
//]]>
52
//]]>
135
</script>
53
</script>
136
<script type="text/javascript">
54
<script type="text/javascript">
Lines 170-180 Link Here
170
	<div class="yui-b">
88
	<div class="yui-b">
171
	[% IF ( receive_error ) %]
89
	[% IF ( receive_error ) %]
172
	<div class="dialog alert">
90
	<div class="dialog alert">
173
	<h3>Error adding items:</h3>
91
	<h3>Error receiving items:</h3>
174
	<ul>
92
	<ul>
175
	[% FOREACH error_loo IN error_loop %]
93
        [% FOREACH error IN error_loop %]
176
		<li>[% error_loo.error_param %][% IF ( error_loo.error_duplicate_barcode ) %]Duplicate Barcode[% END %] <!-- todo: other error conditions come here. --></li>
94
            <li>
177
	[% END %]
95
                [% error.error_param %]
96
                [% IF ( error.error_duplicate_barcode ) %]
97
                    Duplicate Barcode
98
                [% ELSIF (error.error_cannot_receive_order) %]
99
                    You were not authorised to receive this order
100
                [% END %]
101
                <!-- todo: other error conditions come here. -->
102
            </li>
103
        [% END %]
178
	</ul>
104
	</ul>
179
	</div>
105
	</div>
180
	[% END %]
106
	[% END %]
Lines 258-265 Link Here
258
                <td>[% loop_order.ecost %]</td>
184
                <td>[% loop_order.ecost %]</td>
259
                <td>[% loop_order.ordertotal %]</td>
185
                <td>[% loop_order.ordertotal %]</td>
260
				<td>
186
				<td>
261
				    <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;datereceived=[% loop_order.invoicedatereceived %]&amp;invoice=[% loop_order.invoice %]&amp;gst=[% loop_order.gst %]&amp;freight=[% loop_order.freight %]&amp;booksellerid=[% loop_order.booksellerid %]">Receive</a>
187
                    [% IF (loop_order.can_receive) %]
262
				    
188
                        <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;datereceived=[% loop_order.invoicedatereceived %]&amp;invoice=[% loop_order.invoice %]&amp;gst=[% loop_order.gst %]&amp;freight=[% loop_order.freight %]&amp;booksellerid=[% loop_order.booksellerid %]">Receive</a>
189
                    [% ELSE %]
190
                        Can't receive order
191
                    [% END %]
263
				</td>
192
				</td>
264
				<td>
193
				<td>
265
				    [% IF ( loop_order.left_holds_on_order ) %]
194
				    [% IF ( loop_order.left_holds_on_order ) %]
Lines 289-310 Link Here
289
        [% END %]
218
        [% END %]
290
    </tbody>
219
    </tbody>
291
     </table>[% ELSE %]There are no pending orders.[% END %]
220
     </table>[% ELSE %]There are no pending orders.[% END %]
292
   <div id="resultnumber">
293
	<!-- Row of numbers corresponding to search result pages -->
294
	[% IF ( displayprev ) %]
295
		<a href="parcel.pl?type=intra&amp;booksellerid=[% booksellerid %]&amp;startfrom=[% prevstartfrom %][% IF ( datereceived ) %]&amp;datereceived=[% datereceived %][% END %][% IF ( invoice ) %]&amp;invoice=[% invoice %][% END %][% IF ( resultsperpage ) %]&amp;resultsperpage=[% resultsperpage %][% END %]#resultnumber">&lt;&lt; Previous</a>
296
	[% END %]
297
	[% FOREACH number IN numbers %]
298
		[% IF ( number.highlight ) %]
299
		<span class="current">[% number.number %]</span>
300
		[% ELSE %]
301
		<a href="parcel.pl?type=intra&amp;booksellerid=[% booksellerid %]&amp;startfrom=[% number.startfrom %][% IF ( datereceived ) %]&amp;datereceived=[% datereceived %][% END %][% IF ( invoice ) %]&amp;invoice=[% invoice %][% END %][% IF ( resultsperpage ) %]&amp;resultsperpage=[% resultsperpage %][% END %]#resultnumber">[% number.number %]</a>
302
		[% END %]
303
	[% END %]
304
	[% IF ( displaynext ) %]
305
		<a href="parcel.pl?type=intra&amp;booksellerid=[% booksellerid %]&amp;startfrom=[% nextstartfrom %][% IF ( datereceived ) %]&amp;datereceived=[% datereceived %][% END %][% IF ( invoice ) %]&amp;invoice=[% invoice %][% END %][% IF ( resultsperpage ) %]&amp;resultsperpage=[% resultsperpage %][% END %]#resultnumber">Next &gt;&gt;</a>
306
	[% END %]
307
	</div>
308
</div>
221
</div>
309
<div id="acqui_receive_receivelist">
222
<div id="acqui_receive_receivelist">
310
    <h3>Already received</h3>
223
    <h3>Already received</h3>
(-)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