Bug 25548: Remove Apache rewrite directives that trigger redirects
[koha.git] / acqui / duplicate_orders.pl
blob7bbefea2eadc2f62d6a8db8556f801a5dfccada9
1 #!/usr/bin/perl
3 # Copyright 2018 Koha Development Team
5 # This file is part of Koha.
7 # Koha is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3 of the License, or
10 # (at your option) any later version.
12 # Koha is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with Koha; if not, see <http://www.gnu.org/licenses>.
20 use Modern::Perl;
22 use CGI qw ( -utf8 );
24 use C4::Auth;
25 use C4::Output;
26 use C4::Acquisition qw(GetHistory);
27 use C4::Budgets qw(GetBudgetPeriods GetBudgetHierarchy CanUserUseBudget);
28 use Koha::Acquisition::Baskets;
29 use Koha::Acquisition::Currencies;
30 use Koha::Acquisition::Orders;
31 use Koha::DateUtils qw(dt_from_string output_pref);
33 my $input = CGI->new;
34 my $basketno = $input->param('basketno');
35 my $op = $input->param('op') || 'search'; # search, select, batch_edit
37 my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user(
39 template_name => "acqui/duplicate_orders.tt",
40 query => $input,
41 type => "intranet",
42 flagsrequired => { acquisition => 'order_manage' },
46 my $basket = Koha::Acquisition::Baskets->find($basketno);
48 output_and_exit( $input, $cookie, $template, 'unknown_basket' )
49 unless $basket;
51 my $vendor = $basket->bookseller;
52 my $patron = Koha::Patrons->find($loggedinuser)->unblessed;
54 my $filters = {
55 basket => scalar $input->param('basket'),
56 title => scalar $input->param('title'),
57 author => scalar $input->param('author'),
58 isbn => scalar $input->param('isbn'),
59 name => scalar $input->param('name'),
60 ean => scalar $input->param('ean'),
61 basketgroupname => scalar $input->param('basketgroupname'),
62 booksellerinvoicenumber => scalar $input->param('booksellerinvoicenumber'),
63 budget => scalar $input->param('budget'),
64 orderstatus => scalar $input->param('orderstatus'),
65 ordernumber => scalar $input->param('ordernumber'),
66 search_children_too => scalar $input->param('search_children_too'),
67 created_by => [$input->multi_param('created_by')]
70 my $from_placed_on =
71 eval { dt_from_string( scalar $input->param('from') ) } || dt_from_string;
72 my $to_placed_on =
73 eval { dt_from_string( scalar $input->param('to') ) } || dt_from_string;
75 unless ( $input->param('from') ) {
76 # Fill the form with year-1
77 $from_placed_on->set_time_zone('floating')->subtract( years => 1 );
79 $filters->{from_placed_on} =
80 output_pref( { dt => $from_placed_on, dateformat => 'iso', dateonly => 1 } ),
81 $filters->{to_placed_on} =
82 output_pref( { dt => $to_placed_on, dateformat => 'iso', dateonly => 1 } ),
84 my ( @result_order_loop, @selected_order_loop );
85 my @ordernumbers = split ',', scalar $input->param('ordernumbers') || '';
86 if ( $op eq 'select' ) {
87 @result_order_loop = map {
88 my $order = $_;
89 ( grep {$_ eq $order->{ordernumber}} @ordernumbers ) ? () : $order
90 } @{ C4::Acquisition::GetHistory(%$filters) };
92 @selected_order_loop =
93 scalar @ordernumbers
94 ? @{ C4::Acquisition::GetHistory( ordernumbers => \@ordernumbers ) }
95 : ();
97 elsif ( $op eq 'batch_edit' ) {
98 @ordernumbers = $input->multi_param('ordernumber');
100 # build budget list
101 my $budget_loop = [];
102 my $budgets_hierarchy = GetBudgetHierarchy;
103 foreach my $r ( @{$budgets_hierarchy} ) {
104 next
105 unless ( C4::Budgets::CanUserUseBudget( $patron, $r, $userflags ) );
107 push @{$budget_loop},
109 b_id => $r->{budget_id},
110 b_txt => $r->{budget_name},
111 b_code => $r->{budget_code},
112 b_sort1_authcat => $r->{'sort1_authcat'},
113 b_sort2_authcat => $r->{'sort2_authcat'},
114 b_active => $r->{budget_period_active},
117 @{$budget_loop} =
118 sort { uc( $a->{b_txt} ) cmp uc( $b->{b_txt} ) } @{$budget_loop};
120 my @currencies = Koha::Acquisition::Currencies->search;
121 $template->param(
122 currencies => \@currencies,
123 budget_loop => $budget_loop,
126 elsif ( $op eq 'do_duplicate' ) {
127 my @fields_to_copy = $input->multi_param('copy_existing_value');
129 my $default_values;
130 for my $field (
131 qw(currency budget_id order_internalnote order_vendornote sort1 sort2 ))
133 next if grep { $_ eq $field } @fields_to_copy;
134 $default_values->{$field} = $input->param("all_$field");
137 @ordernumbers = $input->multi_param('ordernumber');
138 my @new_ordernumbers;
139 for my $ordernumber (@ordernumbers) {
140 my $original_order = Koha::Acquisition::Orders->find($ordernumber);
141 next unless $original_order;
142 my $new_order =
143 $original_order->duplicate_to( $basket, $default_values );
144 push @new_ordernumbers, $new_order->ordernumber;
147 my $new_orders =
148 C4::Acquisition::GetHistory( ordernumbers => \@new_ordernumbers );
149 $template->param( new_orders => $new_orders );
150 $op = 'duplication_done';
153 my $budgetperiods = C4::Budgets::GetBudgetPeriods;
154 my $bp_loop = $budgetperiods;
155 for my $bp ( @{$budgetperiods} ) {
156 my $hierarchy = C4::Budgets::GetBudgetHierarchy( $$bp{budget_period_id} );
157 for my $budget ( @{$hierarchy} ) {
158 $$budget{budget_display_name} =
159 sprintf( "%s", ">" x $$budget{depth} . $$budget{budget_name} );
161 $$bp{hierarchy} = $hierarchy;
164 $template->param(
165 basket => $basket,
166 vendor => $vendor,
167 filters => $filters,
168 result_order_loop => \@result_order_loop,
169 selected_order_loop => \@selected_order_loop,
170 bp_loop => $bp_loop,
171 ordernumbers => \@ordernumbers,
172 op => $op,
175 output_html_with_http_headers $input, $cookie, $template->output;