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 798-803 sub CanUserManageBasket { Link Here
798
    return 1;
799
    return 1;
799
}
800
}
800
801
802
=head3 CanUserReceiveOrder
803
804
    my $bool = CanUserReceiveOrder($borrower, $order[, $userflags]);
805
    my $bool = CanUserReceiveOrder($borrowernumber, $orderno[, $userflags]);
806
807
Check if a borrower can receive a order, according to user permissions, current
808
working branch and order and basket branches.
809
810
First parameter can be either a borrowernumber or a hashref as returned by
811
C4::Members::GetMember.
812
813
Second parameter can be either a ordernumber or a hashref as returned by
814
C4::Acquisition::GetOrder.
815
816
The third parameter is optional. If given, it should be a hashref as returned
817
by C4::Auth::getuserflags. If not, getuserflags is called.
818
819
If user is authorised to receive order, returns 1.
820
Otherwise returns 0.
821
822
=cut
823
824
sub CanUserReceiveOrder {
825
    my ($borrower, $order, $userflags) = @_;
826
827
    if (!ref $borrower) {
828
        $borrower = C4::Members::GetMember(borrowernumber => $borrower);
829
    }
830
    if (!ref $order) {
831
        $order = GetOrder($order);
832
    }
833
834
    return 0 unless ($borrower and $order);
835
836
    if (!defined $userflags) {
837
        my $dbh = C4::Context->dbh;
838
        my $sth = $dbh->prepare("SELECT flags FROM borrowers WHERE borrowernumber = ?");
839
        $sth->execute($borrower->{borrowernumber});
840
        my ($flags) = $sth->fetchrow_array;
841
        $sth->finish;
842
843
        $userflags = C4::Auth::getuserflags($flags, $borrower->{userid}, $dbh);
844
    }
845
846
    my $branch = C4::Context->userenv->{'branch'};
847
848
    unless ($userflags->{superlibrarian}
849
    || (!ref $userflags->{acquisition} && $userflags->{acquisition})
850
    || (ref $userflags->{acquisition} && $userflags->{acquisition}->{order_receive_all}) )
851
    {
852
        if (!ref $userflags->{acquisition} && !$userflags->{acquisition}) {
853
            return 0;
854
        }
855
        if (ref $userflags->{acquisition} && !$userflags->{acquisition}->{order_receive}) {
856
            return 0;
857
        }
858
        if (defined $order->{branch} && $order->{branch} ne $branch) {
859
            return 0;
860
        }
861
        if (!defined $order->{branch}) {
862
            my $basket = GetBasket($order->{basketno});
863
            if (!$basket || (defined $basket->{branch} && $basket->{branch} ne $branch)) {
864
                return 0;
865
            }
866
        }
867
    }
868
869
    return 1;
870
}
871
801
#------------------------------------------------------------#
872
#------------------------------------------------------------#
802
873
803
=head3 GetBasketsByBasketgroup
874
=head3 GetBasketsByBasketgroup
(-)a/acqui/addorder.pl (+1 lines)
Lines 226-231 my $orderinfo = $input->Vars; Link Here
226
$orderinfo->{'list_price'}    ||=  0;
226
$orderinfo->{'list_price'}    ||=  0;
227
$orderinfo->{'uncertainprice'} ||= 0;
227
$orderinfo->{'uncertainprice'} ||= 0;
228
$orderinfo->{subscriptionid} ||= undef;
228
$orderinfo->{subscriptionid} ||= undef;
229
$orderinfo->{branch} = undef if (defined $orderinfo->{branch} and $orderinfo->{branch} eq '');
229
230
230
my $user = $input->remote_user;
231
my $user = $input->remote_user;
231
232
(-)a/acqui/finishreceive.pl (-1 / +9 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');
40
41
41
my $user             = $input->remote_user;
42
my $user             = $input->remote_user;
42
my $biblionumber     = $input->param('biblionumber');
43
my $biblionumber     = $input->param('biblionumber');
Lines 58-63 my $bookfund = $input->param("bookfund"); Link Here
58
my $order            = GetOrder($ordernumber);
59
my $order            = GetOrder($ordernumber);
59
my $new_ordernumber  = $ordernumber;
60
my $new_ordernumber  = $ordernumber;
60
61
62
my $borrower = C4::Members::GetMember(userid => $userid);
63
unless (CanUserReceiveOrder($borrower, $ordernumber, $userflags)) {
64
    my $error = "cannot_receive_order";
65
    print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid&error=$error");
66
    exit;
67
}
68
61
#need old recievedate if we update the order, parcel.pl only shows the right parcel this way FIXME
69
#need old recievedate if we update the order, parcel.pl only shows the right parcel this way FIXME
62
if ($quantityrec > $origquantityrec ) {
70
if ($quantityrec > $origquantityrec ) {
63
    my @received_items = ();
71
    my @received_items = ();
(-)a/acqui/neworderempty.pl (-3 / +2 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;
71
use CGI;
70
use CGI;
72
use C4::Context;
71
use C4::Context;
73
use C4::Input;
72
use C4::Input;
Lines 241-247 foreach my $thisbranch ( sort {$branches->{$a}->{'branchname'} cmp $branches->{$ Link Here
241
        value      => $thisbranch,
240
        value      => $thisbranch,
242
        branchname => $branches->{$thisbranch}->{'branchname'},
241
        branchname => $branches->{$thisbranch}->{'branchname'},
243
    );
242
    );
244
    $row{'selected'} = 1 if( $thisbranch && $data->{branchcode} && $thisbranch eq $data->{branchcode}) ;
243
    $row{'selected'} = 1 if( $thisbranch && $data->{branch} && $thisbranch eq $data->{branch}) ;
245
    push @branchloop, \%row;
244
    push @branchloop, \%row;
246
}
245
}
247
$template->param( branchloop => \@branchloop );
246
$template->param( branchloop => \@branchloop );
(-)a/acqui/orderreceive.pl (+12 lines)
Lines 114-119 unless ( $results and @$results) { Link Here
114
# prepare the form for receiving
114
# prepare the form for receiving
115
my $order = $results->[0];
115
my $order = $results->[0];
116
116
117
unless (CanUserReceiveOrder($loggedinuser, $order, $userflags)) {
118
    $template->param(
119
        cannot_receive_order => 1,
120
        ordernumber => $ordernumber,
121
        invoice => $invoice,
122
        booksellerid => $booksellerid,
123
        name => $bookseller->{name}
124
    );
125
    output_html_with_http_headers $input, $cookie, $template->output;
126
    exit;
127
}
128
117
# Check if ACQ framework exists
129
# Check if ACQ framework exists
118
my $acq_fw = GetMarcStructure(1, 'ACQ');
130
my $acq_fw = GetMarcStructure(1, 'ACQ');
119
unless($acq_fw) {
131
unless($acq_fw) {
(-)a/acqui/parcel.pl (-3 / +9 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 110-116 sub get_gst { Link Here
110
        : $value * ( 1 + $gstrate ) - $value;
109
        : $value * ( 1 + $gstrate ) - $value;
111
}
110
}
112
111
113
my ($template, $loggedinuser, $cookie)
112
my ($template, $loggedinuser, $cookie, $userflags)
114
    = get_template_and_user({template_name => "acqui/parcel.tmpl",
113
    = get_template_and_user({template_name => "acqui/parcel.tmpl",
115
                 query => $input,
114
                 query => $input,
116
                 type => "intranet",
115
                 type => "intranet",
Lines 305-310 unless( defined $invoice->{closedate} ) { Link Here
305
        $line{holds}                = $holds;
304
        $line{holds}                = $holds;
306
        $line{holds_on_order}       = $itemholds?$itemholds:$holds if $line{left_holds_on_order};
305
        $line{holds_on_order}       = $itemholds?$itemholds:$holds if $line{left_holds_on_order};
307
306
307
        $line{can_receive} = CanUserReceiveOrder($loggedinuser, $pendingorders->[$i], $userflags);
308
308
        my $budget = GetBudget( $line{budget_id} );
309
        my $budget = GetBudget( $line{budget_id} );
309
        $line{budget_name} = $budget->{'budget_name'};
310
        $line{budget_name} = $budget->{'budget_name'};
310
311
Lines 316-321 unless( defined $invoice->{closedate} ) { Link Here
316
    );
317
    );
317
}
318
}
318
319
320
my @errors = $input->param('error');
321
foreach my $error (@errors) {
322
    $template->param("error_$error" => 1);
323
}
324
319
$template->param(
325
$template->param(
320
    invoiceid             => $invoice->{invoiceid},
326
    invoiceid             => $invoice->{invoiceid},
321
    invoice               => $invoice->{invoicenumber},
327
    invoice               => $invoice->{invoicenumber},
(-)a/installer/data/mysql/de-DE/mandatory/userpermissions.sql (+1 lines)
Lines 21-26 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
21
   (11, 'order_manage_all', 'Bestellungen aller Bibliotheken, unabhängig von Berechtigungen, verwalten'),
21
   (11, 'order_manage_all', 'Bestellungen aller Bibliotheken, unabhängig von Berechtigungen, verwalten'),
22
   (11, 'group_manage', 'Bestellgruppen vewalten'),
22
   (11, 'group_manage', 'Bestellgruppen vewalten'),
23
   (11, 'order_receive', 'Lieferungen verwalten'),
23
   (11, 'order_receive', 'Lieferungen verwalten'),
24
   (11, 'order_receive_all', 'Receive all orders'),
24
   (11, 'budget_add_del', 'Konten hinzufügen/ändern, aber bestehende nicht ändern'),
25
   (11, 'budget_add_del', 'Konten hinzufügen/ändern, aber bestehende nicht ändern'),
25
   (11, 'budget_manage_all', 'Alle Konten verwalten'),
26
   (11, 'budget_manage_all', 'Alle Konten verwalten'),
26
   (13, 'edit_news', 'Nachrichten für OPAC und Dienstoberfläche verfassen'),
27
   (13, 'edit_news', 'Nachrichten für OPAC und Dienstoberfläche verfassen'),
(-)a/installer/data/mysql/en/mandatory/userpermissions.sql (+1 lines)
Lines 21-26 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
21
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
21
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
22
   (11, 'group_manage', 'Manage orders & basketgroups'),
22
   (11, 'group_manage', 'Manage orders & basketgroups'),
23
   (11, 'order_receive', 'Manage orders & basket'),
23
   (11, 'order_receive', 'Manage orders & basket'),
24
   (11, 'order_receive_all', 'Receive all orders'),
24
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
25
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
25
   (11, 'budget_manage_all', 'Manage all budgets'),
26
   (11, 'budget_manage_all', 'Manage all budgets'),
26
   (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
27
   (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
(-)a/installer/data/mysql/es-ES/mandatory/userpermissions.sql (+1 lines)
Lines 21-26 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
21
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
21
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
22
   (11, 'group_manage', 'Manage orders & basketgroups'),
22
   (11, 'group_manage', 'Manage orders & basketgroups'),
23
   (11, 'order_receive', 'Manage orders & basket'),
23
   (11, 'order_receive', 'Manage orders & basket'),
24
   (11, 'order_receive_all', 'Receive all orders'),
24
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
25
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
25
   (11, 'budget_manage_all', 'Manage all budgets'),
26
   (11, 'budget_manage_all', 'Manage all budgets'),
26
   (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
27
   (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
(-)a/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql (+1 lines)
Lines 39-44 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
39
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
39
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
40
   (11, 'group_manage', 'Gérer les commandes et les bons de commande'),
40
   (11, 'group_manage', 'Gérer les commandes et les bons de commande'),
41
   (11, 'order_receive', 'Gérer les réceptions'),
41
   (11, 'order_receive', 'Gérer les réceptions'),
42
   (11, 'order_receive_all', 'Gérer toutes les réceptions'),
42
   (11, 'budget_add_del', 'Ajouter et supprimer les budgets (mais pas modifier)'),
43
   (11, 'budget_add_del', 'Ajouter et supprimer les budgets (mais pas modifier)'),
43
   (11, 'budget_manage_all', 'Gérer tous les budgets'),
44
   (11, 'budget_manage_all', 'Gérer tous les budgets'),
44
   (13, 'manage_csv_profiles', 'Gérer les profils d''export CSV'),
45
   (13, 'manage_csv_profiles', 'Gérer les profils d''export CSV'),
(-)a/installer/data/mysql/it-IT/necessari/userpermissions.sql (+1 lines)
Lines 23-28 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
23
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
23
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
24
   (11, 'group_manage', 'Gestisci ordini e raccoglitori raggruppati'),
24
   (11, 'group_manage', 'Gestisci ordini e raccoglitori raggruppati'),
25
   (11, 'order_receive', 'Gestisci arrivi'),
25
   (11, 'order_receive', 'Gestisci arrivi'),
26
   (11, 'order_receive_all', 'Receive all orders'),
26
   (11, 'budget_add_del', 'Aggiungi e cancella budgets (senza modificarli)'),
27
   (11, 'budget_add_del', 'Aggiungi e cancella budgets (senza modificarli)'),
27
   (11, 'budget_manage_all', 'Gestisci tutti i budgets'),
28
   (11, 'budget_manage_all', 'Gestisci tutti i budgets'),
28
   (13, 'edit_news', 'Scrivi le news per l\'OPAC e per l\'interfaccia staff'),
29
   (13, 'edit_news', 'Scrivi le news per l\'OPAC e per l\'interfaccia staff'),
(-)a/installer/data/mysql/kohastructure.sql (+3 lines)
Lines 2996-3010 CREATE TABLE `aqorders` ( -- information related to the basket line items Link Here
2996
  `claimed_date` date default NULL, -- last date a claim was generated
2996
  `claimed_date` date default NULL, -- last date a claim was generated
2997
  `subscriptionid` int(11) default NULL, -- links this order line to a subscription (subscription.subscriptionid)
2997
  `subscriptionid` int(11) default NULL, -- links this order line to a subscription (subscription.subscriptionid)
2998
  parent_ordernumber int(11) default NULL, -- ordernumber of parent order line, or same as ordernumber if no parent
2998
  parent_ordernumber int(11) default NULL, -- ordernumber of parent order line, or same as ordernumber if no parent
2999
  branch varchar(10) default NULL, -- order line branch
2999
  `orderstatus` varchar(16) default 'new', -- the current status for this line item. Can be 'new', 'ordered', 'partial', 'complete' or 'cancelled'
3000
  `orderstatus` varchar(16) default 'new', -- the current status for this line item. Can be 'new', 'ordered', 'partial', 'complete' or 'cancelled'
3000
  PRIMARY KEY  (`ordernumber`),
3001
  PRIMARY KEY  (`ordernumber`),
3001
  KEY `basketno` (`basketno`),
3002
  KEY `basketno` (`basketno`),
3002
  KEY `biblionumber` (`biblionumber`),
3003
  KEY `biblionumber` (`biblionumber`),
3003
  KEY `budget_id` (`budget_id`),
3004
  KEY `budget_id` (`budget_id`),
3005
  KEY branch (branch),
3004
  CONSTRAINT `aqorders_ibfk_1` FOREIGN KEY (`basketno`) REFERENCES `aqbasket` (`basketno`) ON DELETE CASCADE ON UPDATE CASCADE,
3006
  CONSTRAINT `aqorders_ibfk_1` FOREIGN KEY (`basketno`) REFERENCES `aqbasket` (`basketno`) ON DELETE CASCADE ON UPDATE CASCADE,
3005
  CONSTRAINT `aqorders_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE SET NULL ON UPDATE CASCADE,
3007
  CONSTRAINT `aqorders_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE SET NULL ON UPDATE CASCADE,
3006
  CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (invoiceid) REFERENCES aqinvoices (invoiceid) ON DELETE SET NULL ON UPDATE CASCADE,
3008
  CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (invoiceid) REFERENCES aqinvoices (invoiceid) ON DELETE SET NULL ON UPDATE CASCADE,
3007
  CONSTRAINT `aqorders_subscriptionid` FOREIGN KEY (`subscriptionid`) REFERENCES `subscription` (`subscriptionid`) ON DELETE CASCADE ON UPDATE CASCADE
3009
  CONSTRAINT `aqorders_subscriptionid` FOREIGN KEY (`subscriptionid`) REFERENCES `subscription` (`subscriptionid`) ON DELETE CASCADE ON UPDATE CASCADE
3010
  CONSTRAINT aqorders_branch FOREIGN KEY (branch) REFERENCES branches (branchcode) ON UPDATE CASCADE ON DELETE SET NULL
3008
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3011
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3009
3012
3010
3013
(-)a/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql (+1 lines)
Lines 41-46 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
41
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
41
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
42
   (11, 'group_manage', 'Administrere bestillinger og kurv-grupper'),
42
   (11, 'group_manage', 'Administrere bestillinger og kurv-grupper'),
43
   (11, 'order_receive', 'Administrere bestillinger og kurver'),
43
   (11, 'order_receive', 'Administrere bestillinger og kurver'),
44
   (11, 'order_receive_all', 'Receive all orders'),
44
   (11, 'budget_add_del', 'Legge til og slette budsjetter (men ikke endre budsjetter)'),
45
   (11, 'budget_add_del', 'Legge til og slette budsjetter (men ikke endre budsjetter)'),
45
   (11, 'budget_manage_all', 'Administrere alle budsjetter'),
46
   (11, 'budget_manage_all', 'Administrere alle budsjetter'),
46
   (13, 'edit_news', 'Legge ut nyhter i OPACen og det interne grensesnittet'),
47
   (13, 'edit_news', 'Legge ut nyhter i OPACen og det interne grensesnittet'),
(-)a/installer/data/mysql/pl-PL/mandatory/userpermissions.sql (+1 lines)
Lines 21-26 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
21
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
21
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
22
   (11, 'group_manage', 'Manage orders & basketgroups'),
22
   (11, 'group_manage', 'Manage orders & basketgroups'),
23
   (11, 'order_receive', 'Manage orders & basket'),
23
   (11, 'order_receive', 'Manage orders & basket'),
24
   (11, 'order_receive_all', 'Receive all orders'),
24
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
25
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
25
   (11, 'budget_manage_all', 'Manage all budgets'),
26
   (11, 'budget_manage_all', 'Manage all budgets'),
26
   (13, 'edit_news', 'RTworzeniei publikowanie wiadomości w interfejsie bibliotekarza i OPAC'),
27
   (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 47-52 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
47
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
47
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
48
   (11, 'group_manage', 'Manage orders & basketgroups'),
48
   (11, 'group_manage', 'Manage orders & basketgroups'),
49
   (11, 'order_receive', 'Manage orders & basket'),
49
   (11, 'order_receive', 'Manage orders & basket'),
50
   (11, 'order_receive_all', 'Receive all orders'),
50
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
51
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
51
   (11, 'budget_manage_all', 'Manage all budgets'),
52
   (11, 'budget_manage_all', 'Manage all budgets'),
52
   (13, 'edit_news',                   'Написание новостей для электронного каталога и интерфейса библиотекарей'),
53
   (13, 'edit_news',                   'Написание новостей для электронного каталога и интерфейса библиотекарей'),
(-)a/installer/data/mysql/uk-UA/mandatory/permissions_and_user_flags.sql (+1 lines)
Lines 47-52 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
47
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
47
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
48
   (11, 'group_manage', 'Manage orders & basketgroups'),
48
   (11, 'group_manage', 'Manage orders & basketgroups'),
49
   (11, 'order_receive', 'Manage orders & basket'),
49
   (11, 'order_receive', 'Manage orders & basket'),
50
   (11, 'order_receive_all', 'Receive all orders'),
50
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
51
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
51
   (11, 'budget_manage_all', 'Manage all budgets'),
52
   (11, 'budget_manage_all', 'Manage all budgets'),
52
   (13, 'edit_news',                   'Написання новин для електронного каталогу та інтерфейсу бібліотекарів'),
53
   (13, 'edit_news',                   'Написання новин для електронного каталогу та інтерфейсу бібліотекарів'),
(-)a/installer/data/mysql/updatedatabase.pl (+16 lines)
Lines 8083-8088 if ( CheckVersion($DBversion) ) { Link Here
8083
    SetVersion($DBversion);
8083
    SetVersion($DBversion);
8084
}
8084
}
8085
8085
8086
$DBversion = "XXX";
8087
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
8088
    $dbh->do("
8089
        ALTER TABLE aqorders
8090
          ADD COLUMN branch VARCHAR(10) DEFAULT NULL,
8091
          ADD CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (branch)
8092
            REFERENCES branches (branchcode) ON UPDATE CASCADE ON DELETE SET NULL
8093
    ");
8094
    $dbh->do("
8095
        INSERT INTO permissions (module_bit, code, description)
8096
          VALUES (11, 'order_receive_all', 'Receive all orders')
8097
    ");
8098
    print "Upgrade to $DBversion done (Add aqorders.branch and permission order_receive_all)\n";
8099
    SetVersion($DBversion);
8100
}
8101
8086
=head1 FUNCTIONS
8102
=head1 FUNCTIONS
8087
8103
8088
=head2 TableExists($table)
8104
=head2 TableExists($table)
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt (+19 lines)
Lines 210-215 $(document).ready(function() Link Here
210
<form action="/cgi-bin/koha/acqui/addorder.pl" method="post" id="Aform" onsubmit="return Check(this);">
210
<form action="/cgi-bin/koha/acqui/addorder.pl" method="post" id="Aform" onsubmit="return Check(this);">
211
211
212
<fieldset class="rows">
212
<fieldset class="rows">
213
    <legend>Order details</legend>
214
    <ol>
215
        <li>
216
            <span class="label">Branch:</span>
217
            <select name="branch">
218
                <option value="">&nbsp;</option>
219
                [% FOREACH branch IN branchloop %]
220
                    [% IF branch.selected %]
221
                        <option selected="selected" value="[% branch.value %]">[% branch.branchname %]</option>
222
                    [% ELSE %]
223
                        <option value="[% branch.value %]">[% branch.branchname %]</option>
224
                    [% END %]
225
                [% END %]
226
            </select>
227
        </li>
228
    </ol>
229
</fieldset>
230
231
<fieldset class="rows">
213
        <legend>
232
        <legend>
214
            Catalog details
233
            Catalog details
215
            [% IF ( biblionumber ) %]
234
            [% IF ( biblionumber ) %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt (+5 lines)
Lines 129-134 Link Here
129
129
130
<h1>Receive items from : [% name %] [% IF ( invoice ) %][[% invoice %]] [% END %] (order #[% ordernumber %])</h1>
130
<h1>Receive items from : [% name %] [% IF ( invoice ) %][[% invoice %]] [% END %] (order #[% ordernumber %])</h1>
131
131
132
[% IF (cannot_receive_order) %]
133
    <p class="error">You are not authorised to receive this order.</p>
134
[% ELSE %]
135
132
[% IF ( count ) %]
136
[% IF ( count ) %]
133
    <form action="/cgi-bin/koha/acqui/finishreceive.pl" method="post" onsubmit="return Check(this);">
137
    <form action="/cgi-bin/koha/acqui/finishreceive.pl" method="post" onsubmit="return Check(this);">
134
<div class="yui-g">
138
<div class="yui-g">
Lines 341-346 Link Here
341
    This ordernumber does not exist.
345
    This ordernumber does not exist.
342
[% END %]
346
[% END %]
343
347
348
[% END %][%# IF (cannot_receive_order) %]
344
</div>
349
</div>
345
</div>
350
</div>
346
<div class="yui-b">
351
<div class="yui-b">
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt (-4 / +22 lines)
Lines 163-173 Link Here
163
	<div class="yui-b">
163
	<div class="yui-b">
164
	[% IF ( receive_error ) %]
164
	[% IF ( receive_error ) %]
165
	<div class="dialog alert">
165
	<div class="dialog alert">
166
	<h3>Error adding items:</h3>
166
	<h3>Error receiving items:</h3>
167
	<ul>
167
	<ul>
168
	[% FOREACH error_loo IN error_loop %]
168
        [% FOREACH error IN error_loop %]
169
		<li>[% error_loo.error_param %][% IF ( error_loo.error_duplicate_barcode ) %]Duplicate Barcode[% END %] <!-- todo: other error conditions come here. --></li>
169
            <li>
170
	[% END %]
170
                [% error.error_param %]
171
                [% IF ( error.error_duplicate_barcode ) %]
172
                    Duplicate Barcode
173
                [% ELSIF (error.error_cannot_receive_order) %]
174
                    You were not authorised to receive this order
175
                [% END %]
176
                <!-- todo: other error conditions come here. -->
177
            </li>
178
        [% END %]
171
	</ul>
179
	</ul>
172
	</div>
180
	</div>
173
	[% END %]
181
	[% END %]
Lines 214-219 Link Here
214
        </div>
222
        </div>
215
    [% END %]
223
    [% END %]
216
224
225
    [% IF error_cannot_receive_order %]
226
      <div class="dialog error">
227
        You cannot receive this order.
228
      </div>
229
    [% END %]
230
217
[% UNLESS no_orders_to_display %]
231
[% UNLESS no_orders_to_display %]
218
<div id="acqui_receive_summary">
232
<div id="acqui_receive_summary">
219
<p><strong>Invoice number:</strong> [% invoice %] <strong>Received by:</strong> [% loggedinusername %] <strong>On:</strong> [% formatteddatereceived %]</p>
233
<p><strong>Invoice number:</strong> [% invoice %] <strong>Received by:</strong> [% loggedinusername %] <strong>On:</strong> [% formatteddatereceived %]</p>
Lines 287-293 Link Here
287
                <td>[% loop_order.ordertotal %]</td>
301
                <td>[% loop_order.ordertotal %]</td>
288
                <td>[% loop_order.budget_name %]</td>
302
                <td>[% loop_order.budget_name %]</td>
289
				<td>
303
				<td>
304
                            [% IF (loop_order.can_receive) %]
290
                              <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;invoiceid=[% invoiceid %]">Receive</a>
305
                              <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;invoiceid=[% invoiceid %]">Receive</a>
306
                            [% ELSE %]
307
                              Can't receive order
308
                            [% END %]
291
                    <br />
309
                    <br />
292
                    <a href="#" onclick="transfer_order_popup([% loop_order.ordernumber %]); return false;">Transfer</a>
310
                    <a href="#" onclick="transfer_order_popup([% loop_order.ordernumber %]); return false;">Transfer</a>
293
				</td>
311
				</td>
(-)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