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 817-822 sub CanUserManageBasket { Link Here
817
    return 1;
818
    return 1;
818
}
819
}
819
820
821
=head3 CanUserReceiveOrder
822
823
    my $bool = CanUserReceiveOrder($borrower, $order[, $userflags]);
824
    my $bool = CanUserReceiveOrder($borrowernumber, $orderno[, $userflags]);
825
826
Check if a borrower can receive a order, according to user permissions, current
827
working branch and order and basket branches.
828
829
First parameter can be either a borrowernumber or a hashref as returned by
830
C4::Members::GetMember.
831
832
Second parameter can be either a ordernumber or a hashref as returned by
833
C4::Acquisition::GetOrder.
834
835
The third parameter is optional. If given, it should be a hashref as returned
836
by C4::Auth::getuserflags. If not, getuserflags is called.
837
838
If user is authorised to receive order, returns 1.
839
Otherwise returns 0.
840
841
=cut
842
843
sub CanUserReceiveOrder {
844
    my ($borrower, $order, $userflags) = @_;
845
846
    if (!ref $borrower) {
847
        $borrower = C4::Members::GetMember(borrowernumber => $borrower);
848
    }
849
    if (!ref $order) {
850
        $order = GetOrder($order);
851
    }
852
853
    return 0 unless ($borrower and $order);
854
855
    if (!defined $userflags) {
856
        my $dbh = C4::Context->dbh;
857
        my $sth = $dbh->prepare("SELECT flags FROM borrowers WHERE borrowernumber = ?");
858
        $sth->execute($borrower->{borrowernumber});
859
        my ($flags) = $sth->fetchrow_array;
860
        $sth->finish;
861
862
        $userflags = C4::Auth::getuserflags($flags, $borrower->{userid}, $dbh);
863
    }
864
865
    my $branch = C4::Context->userenv->{'branch'};
866
867
    unless ($userflags->{superlibrarian}
868
    || (!ref $userflags->{acquisition} && $userflags->{acquisition})
869
    || (ref $userflags->{acquisition} && $userflags->{acquisition}->{order_receive_all}) )
870
    {
871
        if (!ref $userflags->{acquisition} && !$userflags->{acquisition}) {
872
            return 0;
873
        }
874
        if (ref $userflags->{acquisition} && !$userflags->{acquisition}->{order_receive}) {
875
            return 0;
876
        }
877
        if (defined $order->{branch} && $order->{branch} ne $branch) {
878
            return 0;
879
        }
880
        if (!defined $order->{branch}) {
881
            my $basket = GetBasket($order->{basketno});
882
            if (!$basket || (defined $basket->{branch} && $basket->{branch} ne $branch)) {
883
                return 0;
884
            }
885
        }
886
    }
887
888
    return 1;
889
}
890
820
#------------------------------------------------------------#
891
#------------------------------------------------------------#
821
892
822
=head3 GetBasketsByBasketgroup
893
=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 242-248 foreach my $thisbranch ( sort {$branches->{$a}->{'branchname'} cmp $branches->{$ Link Here
242
        value      => $thisbranch,
241
        value      => $thisbranch,
243
        branchname => $branches->{$thisbranch}->{'branchname'},
242
        branchname => $branches->{$thisbranch}->{'branchname'},
244
    );
243
    );
245
    $row{'selected'} = 1 if( $thisbranch && $data->{branchcode} && $thisbranch eq $data->{branchcode}) ;
244
    $row{'selected'} = 1 if( $thisbranch && $data->{branch} && $thisbranch eq $data->{branch}) ;
246
    push @branchloop, \%row;
245
    push @branchloop, \%row;
247
}
246
}
248
$template->param( branchloop => \@branchloop );
247
$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 23-28 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
23
   (11, 'order_manage_all', 'Bestellungen aller Bibliotheken, unabhängig von Berechtigungen, verwalten'),
23
   (11, 'order_manage_all', 'Bestellungen aller Bibliotheken, unabhängig von Berechtigungen, verwalten'),
24
   (11, 'group_manage', 'Bestellgruppen vewalten'),
24
   (11, 'group_manage', 'Bestellgruppen vewalten'),
25
   (11, 'order_receive', 'Lieferungen verwalten'),
25
   (11, 'order_receive', 'Lieferungen verwalten'),
26
   (11, 'order_receive_all', 'Receive all orders'),
26
   (11, 'budget_add_del', 'Konten hinzufügen/ändern, aber bestehende nicht ändern'),
27
   (11, 'budget_add_del', 'Konten hinzufügen/ändern, aber bestehende nicht ändern'),
27
   (11, 'budget_manage_all', 'Alle Konten verwalten'),
28
   (11, 'budget_manage_all', 'Alle Konten verwalten'),
28
   (13, 'edit_news', 'Nachrichten für OPAC und Dienstoberfläche verfassen'),
29
   (13, 'edit_news', 'Nachrichten für OPAC und Dienstoberfläche verfassen'),
(-)a/installer/data/mysql/en/mandatory/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', 'Manage orders & basketgroups'),
24
   (11, 'group_manage', 'Manage orders & basketgroups'),
25
   (11, 'order_receive', 'Manage orders & basket'),
25
   (11, 'order_receive', 'Manage orders & basket'),
26
   (11, 'order_receive_all', 'Receive all orders'),
26
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
27
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
27
   (11, 'budget_manage_all', 'Manage all budgets'),
28
   (11, 'budget_manage_all', 'Manage all budgets'),
28
   (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
29
   (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
(-)a/installer/data/mysql/es-ES/mandatory/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', 'Manage orders & basketgroups'),
24
   (11, 'group_manage', 'Manage orders & basketgroups'),
25
   (11, 'order_receive', 'Manage orders & basket'),
25
   (11, 'order_receive', 'Manage orders & basket'),
26
   (11, 'order_receive_all', 'Receive all orders'),
26
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
27
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
27
   (11, 'budget_manage_all', 'Manage all budgets'),
28
   (11, 'budget_manage_all', 'Manage all budgets'),
28
   (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
29
   (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
(-)a/installer/data/mysql/fr-FR/1-Obligatoire/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', 'Gérer les commandes et les bons de commande'),
42
   (11, 'group_manage', 'Gérer les commandes et les bons de commande'),
43
   (11, 'order_receive', 'Gérer les réceptions'),
43
   (11, 'order_receive', 'Gérer les réceptions'),
44
   (11, 'order_receive_all', 'Gérer toutes les réceptions'),
44
   (11, 'budget_add_del', 'Ajouter et supprimer les budgets (mais pas modifier)'),
45
   (11, 'budget_add_del', 'Ajouter et supprimer les budgets (mais pas modifier)'),
45
   (11, 'budget_manage_all', 'Gérer tous les budgets'),
46
   (11, 'budget_manage_all', 'Gérer tous les budgets'),
46
   (13, 'manage_csv_profiles', 'Gérer les profils d''export CSV'),
47
   (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', 'Gestisci ordini e raccoglitori, indipendentemente dalle restrizioni su di loro'),
23
   (11, 'order_manage_all', 'Gestisci ordini e raccoglitori, indipendentemente dalle restrizioni su di loro'),
24
   (11, 'group_manage', 'Gestisci ordini e ordini d\'acquisto'),
24
   (11, 'group_manage', 'Gestisci ordini e ordini d\'acquisto'),
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 3024-3038 CREATE TABLE `aqorders` ( -- information related to the basket line items Link Here
3024
  `claimed_date` date default NULL, -- last date a claim was generated
3024
  `claimed_date` date default NULL, -- last date a claim was generated
3025
  `subscriptionid` int(11) default NULL, -- links this order line to a subscription (subscription.subscriptionid)
3025
  `subscriptionid` int(11) default NULL, -- links this order line to a subscription (subscription.subscriptionid)
3026
  parent_ordernumber int(11) default NULL, -- ordernumber of parent order line, or same as ordernumber if no parent
3026
  parent_ordernumber int(11) default NULL, -- ordernumber of parent order line, or same as ordernumber if no parent
3027
  branch varchar(10) default NULL, -- order line branch
3027
  `orderstatus` varchar(16) default 'new', -- the current status for this line item. Can be 'new', 'ordered', 'partial', 'complete' or 'cancelled'
3028
  `orderstatus` varchar(16) default 'new', -- the current status for this line item. Can be 'new', 'ordered', 'partial', 'complete' or 'cancelled'
3028
  PRIMARY KEY  (`ordernumber`),
3029
  PRIMARY KEY  (`ordernumber`),
3029
  KEY `basketno` (`basketno`),
3030
  KEY `basketno` (`basketno`),
3030
  KEY `biblionumber` (`biblionumber`),
3031
  KEY `biblionumber` (`biblionumber`),
3031
  KEY `budget_id` (`budget_id`),
3032
  KEY `budget_id` (`budget_id`),
3033
  KEY branch (branch),
3032
  CONSTRAINT `aqorders_ibfk_1` FOREIGN KEY (`basketno`) REFERENCES `aqbasket` (`basketno`) ON DELETE CASCADE ON UPDATE CASCADE,
3034
  CONSTRAINT `aqorders_ibfk_1` FOREIGN KEY (`basketno`) REFERENCES `aqbasket` (`basketno`) ON DELETE CASCADE ON UPDATE CASCADE,
3033
  CONSTRAINT `aqorders_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE SET NULL ON UPDATE CASCADE,
3035
  CONSTRAINT `aqorders_ibfk_2` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE SET NULL ON UPDATE CASCADE,
3034
  CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (invoiceid) REFERENCES aqinvoices (invoiceid) ON DELETE SET NULL ON UPDATE CASCADE,
3036
  CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (invoiceid) REFERENCES aqinvoices (invoiceid) ON DELETE SET NULL ON UPDATE CASCADE,
3035
  CONSTRAINT `aqorders_subscriptionid` FOREIGN KEY (`subscriptionid`) REFERENCES `subscription` (`subscriptionid`) ON DELETE CASCADE ON UPDATE CASCADE
3037
  CONSTRAINT `aqorders_subscriptionid` FOREIGN KEY (`subscriptionid`) REFERENCES `subscription` (`subscriptionid`) ON DELETE CASCADE ON UPDATE CASCADE
3038
  CONSTRAINT aqorders_branch FOREIGN KEY (branch) REFERENCES branches (branchcode) ON UPDATE CASCADE ON DELETE SET NULL
3036
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3039
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3037
3040
3038
3041
(-)a/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql (+1 lines)
Lines 43-48 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
43
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
43
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
44
   (11, 'group_manage', 'Administrere bestillinger og kurv-grupper'),
44
   (11, 'group_manage', 'Administrere bestillinger og kurv-grupper'),
45
   (11, 'order_receive', 'Administrere bestillinger og kurver'),
45
   (11, 'order_receive', 'Administrere bestillinger og kurver'),
46
   (11, 'order_receive_all', 'Receive all orders'),
46
   (11, 'budget_add_del', 'Legge til og slette budsjetter (men ikke endre budsjetter)'),
47
   (11, 'budget_add_del', 'Legge til og slette budsjetter (men ikke endre budsjetter)'),
47
   (11, 'budget_manage_all', 'Administrere alle budsjetter'),
48
   (11, 'budget_manage_all', 'Administrere alle budsjetter'),
48
   (13, 'edit_news', 'Legge ut nyhter i OPACen og det interne grensesnittet'),
49
   (13, 'edit_news', 'Legge ut nyhter i OPACen og det interne grensesnittet'),
(-)a/installer/data/mysql/pl-PL/mandatory/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', 'Manage orders & basketgroups'),
24
   (11, 'group_manage', 'Manage orders & basketgroups'),
25
   (11, 'order_receive', 'Manage orders & basket'),
25
   (11, 'order_receive', 'Manage orders & basket'),
26
   (11, 'order_receive_all', 'Receive all orders'),
26
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
27
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
27
   (11, 'budget_manage_all', 'Manage all budgets'),
28
   (11, 'budget_manage_all', 'Manage all budgets'),
28
   (13, 'edit_news', 'RTworzeniei publikowanie wiadomości w interfejsie bibliotekarza i OPAC'),
29
   (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 49-54 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
49
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
49
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
50
   (11, 'group_manage', 'Manage orders & basketgroups'),
50
   (11, 'group_manage', 'Manage orders & basketgroups'),
51
   (11, 'order_receive', 'Manage orders & basket'),
51
   (11, 'order_receive', 'Manage orders & basket'),
52
   (11, 'order_receive_all', 'Receive all orders'),
52
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
53
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
53
   (11, 'budget_manage_all', 'Manage all budgets'),
54
   (11, 'budget_manage_all', 'Manage all budgets'),
54
   (13, 'edit_news',                   'Написание новостей для электронного каталога и интерфейса библиотекарей'),
55
   (13, 'edit_news',                   'Написание новостей для электронного каталога и интерфейса библиотекарей'),
(-)a/installer/data/mysql/uk-UA/mandatory/permissions_and_user_flags.sql (+1 lines)
Lines 49-54 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
49
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
49
   (11, 'order_manage_all', 'Manage all orders and baskets, regardless of restrictions on them'),
50
   (11, 'group_manage', 'Manage orders & basketgroups'),
50
   (11, 'group_manage', 'Manage orders & basketgroups'),
51
   (11, 'order_receive', 'Manage orders & basket'),
51
   (11, 'order_receive', 'Manage orders & basket'),
52
   (11, 'order_receive_all', 'Receive all orders'),
52
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
53
   (11, 'budget_add_del', 'Add and delete budgets (but cant modify budgets)'),
53
   (11, 'budget_manage_all', 'Manage all budgets'),
54
   (11, 'budget_manage_all', 'Manage all budgets'),
54
   (13, 'edit_news',                   'Написання новин для електронного каталогу та інтерфейсу бібліотекарів'),
55
   (13, 'edit_news',                   'Написання новин для електронного каталогу та інтерфейсу бібліотекарів'),
(-)a/installer/data/mysql/updatedatabase.pl (+16 lines)
Lines 8471-8476 if ( CheckVersion($DBversion) ) { Link Here
8471
    SetVersion($DBversion);
8471
    SetVersion($DBversion);
8472
}
8472
}
8473
8473
8474
$DBversion = "XXX";
8475
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
8476
    $dbh->do("
8477
        ALTER TABLE aqorders
8478
          ADD COLUMN branch VARCHAR(10) DEFAULT NULL,
8479
          ADD CONSTRAINT aqorders_ibfk_3 FOREIGN KEY (branch)
8480
            REFERENCES branches (branchcode) ON UPDATE CASCADE ON DELETE SET NULL
8481
    ");
8482
    $dbh->do("
8483
        INSERT INTO permissions (module_bit, code, description)
8484
          VALUES (11, 'order_receive_all', 'Receive all orders')
8485
    ");
8486
    print "Upgrade to $DBversion done (Add aqorders.branch and permission order_receive_all)\n";
8487
    SetVersion($DBversion);
8488
}
8489
8474
=head1 FUNCTIONS
8490
=head1 FUNCTIONS
8475
8491
8476
=head2 TableExists($table)
8492
=head2 TableExists($table)
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tt (+19 lines)
Lines 228-233 $(document).ready(function() Link Here
228
<form action="/cgi-bin/koha/acqui/addorder.pl" method="post" id="Aform" onsubmit="return Check(this);">
228
<form action="/cgi-bin/koha/acqui/addorder.pl" method="post" id="Aform" onsubmit="return Check(this);">
229
229
230
<fieldset class="rows">
230
<fieldset class="rows">
231
    <legend>Order details</legend>
232
    <ol>
233
        <li>
234
            <span class="label">Branch:</span>
235
            <select name="branch">
236
                <option value="">&nbsp;</option>
237
                [% FOREACH branch IN branchloop %]
238
                    [% IF branch.selected %]
239
                        <option selected="selected" value="[% branch.value %]">[% branch.branchname %]</option>
240
                    [% ELSE %]
241
                        <option value="[% branch.value %]">[% branch.branchname %]</option>
242
                    [% END %]
243
                [% END %]
244
            </select>
245
        </li>
246
    </ol>
247
</fieldset>
248
249
<fieldset class="rows">
231
        <legend>
250
        <legend>
232
            Catalog details
251
            Catalog details
233
            [% IF ( biblionumber ) %]
252
            [% 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 343-348 Link Here
343
    This ordernumber does not exist.
347
    This ordernumber does not exist.
344
[% END %]
348
[% END %]
345
349
350
[% END %][%# IF (cannot_receive_order) %]
346
</div>
351
</div>
347
</div>
352
</div>
348
<div class="yui-b">
353
<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 292-298 Link Here
292
                <td>[% loop_order.ordertotal %]</td>
306
                <td>[% loop_order.ordertotal %]</td>
293
                <td>[% loop_order.budget_name %]</td>
307
                <td>[% loop_order.budget_name %]</td>
294
				<td>
308
				<td>
309
                            [% IF (loop_order.can_receive) %]
295
                              <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;invoiceid=[% invoiceid %]">Receive</a>
310
                              <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;invoiceid=[% invoiceid %]">Receive</a>
311
                            [% ELSE %]
312
                              Can't receive order
313
                            [% END %]
296
                    <br />
314
                    <br />
297
                    <a href="#" onclick="transfer_order_popup([% loop_order.ordernumber %]); return false;">Transfer</a>
315
                    <a href="#" onclick="transfer_order_popup([% loop_order.ordernumber %]); return false;">Transfer</a>
298
				</td>
316
				</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