Translation updates for Koha 16.05 (beta) release
[koha.git] / reports / orders_by_fund.pl
1 #!/usr/bin/perl
2
3 # This file is part of Koha.
4 #
5 # Author : Frédérick Capovilla, 2011 - SYS-TECH
6 # Modified by : Élyse Morin, 2012 - Libéo
7 #
8 # Koha is free software; you can redistribute it and/or modify it under the
9 # terms of the GNU General Public License as published by the Free Software
10 # Foundation; either version 3 of the License, or (at your option) any later
11 # version.
12 #
13 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
14 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License along with
18 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
19 # Suite 330, Boston, MA  02111-1307 USA
20
21
22 =head1 orders_by_budget
23
24 This script displays all orders associated to a selected budget.
25
26 =cut
27
28 use strict;
29 use warnings;
30 use Modern::Perl;
31
32 use CGI;
33 use C4::Auth;
34 use C4::Output;
35 use C4::Budgets;
36 use C4::Biblio;
37 use C4::Reports;
38 use C4::Acquisition; #GetBasket()
39
40 my $query = new CGI;
41 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
42     {
43         template_name   => "reports/orders_by_budget.tt",
44         query           => $query,
45         type            => "intranet",
46         authnotrequired => 0,
47         flagsrequired   => { reports => '*' },
48         debug           => 1,
49     }
50 );
51
52 my $params = $query->Vars;
53 my $get_orders = $params->{'get_orders'};
54
55 if ( $get_orders ) {
56     my $budgetfilter     = $params->{'budgetfilter'}    || undef;
57     my $total_quantity = 0;
58     my $total_rrp = 0;
59     my $total_ecost = 0;
60     my %budget_name;
61
62     # Fetch the orders
63     my @orders;
64     unless($budgetfilter) {
65         # If no budget filter was selected, get the orders of all budgets
66         my @budgets = C4::Budgets::GetBudgetsReport();
67         foreach my $budget (@budgets) {
68             push(@orders, $budget);
69             $budget_name{$budget->{'budget_id'}} = $budget->{'budget_name'};
70         }
71     }
72     else {
73         if ($budgetfilter eq 'activebudgets') {
74            # If all active budgets's option was selected, get the orders of all active budgets
75            my @active_budgets = C4::Budgets::GetBudgetsReport(1);
76            foreach my $active_budget (@active_budgets)
77            {
78                push(@orders, $active_budget);
79                $budget_name{$active_budget->{'budget_id'}} = $active_budget->{'budget_name'};
80            }
81         }
82         else {
83             # A budget filter was selected, only get the orders for the selected budget
84             my @filtered_budgets = C4::Budgets::GetBudgetReport($budgetfilter);
85             foreach my $budget (@filtered_budgets)
86             {
87                 push(@orders, $budget);
88                 $budget_name{$budget->{'budget_id'}} = $budget->{'budget_name'};
89             }
90             if ($filtered_budgets[0]) {
91                 $template->param(
92                     current_budget_name => $filtered_budgets[0]->{'budget_name'},
93                 );
94             }
95         }
96     }
97
98     # Format the order's informations
99     foreach my $order (@orders) {
100         # Get the title of the ordered item
101         my $biblio = C4::Biblio::GetBiblio($order->{'biblionumber'});
102         my $basket = C4::Acquisition::GetBasket($order->{'basketno'});
103
104         $order->{'basketname'} = $basket->{'basketname'};
105         $order->{'authorisedbyname'} = $basket->{'authorisedbyname'};
106
107         $order->{'title'} = $biblio->{'title'} || $order->{'biblionumber'};
108
109         $order->{'total_rrp'} = $order->{'quantity'} * $order->{'rrp'};
110         $order->{'total_ecost'} = $order->{'quantity'} * $order->{'ecost'};
111
112         # Format the dates and currencies correctly
113         $order->{'datereceived'} = Koha::DateUtils::output_pref(Koha::DateUtils::dt_from_string($order->{'datereceived'}));
114         $order->{'entrydate'} = Koha::DateUtils::output_pref(Koha::DateUtils::dt_from_string($order->{'entrydate'}));
115         $total_quantity += $order->{'quantity'};
116         $total_rrp += $order->{'total_rrp'};
117         $total_ecost += $order->{'total_ecost'};
118
119         # Get the budget's name
120         $order->{'budget_name'} = $budget_name{$order->{'budget_id'}};
121     }
122
123     # If we are outputting to screen, output to the template.
124     if($params->{"output"} eq 'screen') {
125         $template->param(
126             total       => scalar @orders,
127             ordersloop   => \@orders,
128             get_orders   => $get_orders,
129             total_quantity => $total_quantity,
130             total_rrp => $total_rrp,
131             total_ecost => $total_ecost,
132         );
133     }
134     # If we are outputting to a file, create it and exit.
135     else {
136         my $basename = $params->{"basename"};
137         my $sep = $params->{"sep"};
138         $sep = "\t" if ($sep eq 'tabulation');
139
140         print $query->header(
141            -type       => 'application/vnd.sun.xml.calc',
142            -encoding    => 'utf-8',
143            -attachment => "$basename.csv",
144            -name       => "$basename.csv"
145         );
146
147         #binmode STDOUT, ":encoding(UTF-8)";
148
149         # Surrounds a string with double-quotes and escape the double-quotes inside
150         sub _surround {
151             my $string = shift || "";
152             $string =~ s/"/""/g;
153             return "\"$string\"";
154         }
155         my @rows;
156         foreach my $order (@orders) {
157             my @row;
158             push(@row, _surround($order->{'budget_name'}));
159             push(@row, _surround($order->{'basketno'}));
160             push(@row, _surround($order->{'basketname'}));
161             push(@row, _surround($order->{'authorisedbyname'}));
162             push(@row, _surround($order->{'biblionumber'}));
163             push(@row, _surround($order->{'title'}));
164             push(@row, _surround($order->{'currency'}));
165             push(@row, _surround($order->{'listprice'}));
166             push(@row, _surround($order->{'rrp'}));
167             push(@row, _surround($order->{'ecost'}));
168             push(@row, _surround($order->{'quantity'}));
169             push(@row, _surround($order->{'total_rrp'}));
170             push(@row, _surround($order->{'total_ecost'}));
171             push(@row, _surround($order->{'entrydate'}));
172             push(@row, _surround($order->{'datereceived'}));
173             push(@row, _surround($order->{'order_internalnote'}));
174             push(@row, _surround($order->{'order_vendornote'}));
175             push(@rows, \@row);
176         }
177
178         my @totalrow;
179         for(1..9){push(@totalrow, "")};
180         push(@totalrow, _surround($total_quantity));
181         push(@totalrow, _surround($total_rrp));
182         push(@totalrow, _surround($total_ecost));
183
184         my $csvTemplate = C4::Templates::gettemplate('reports/csv/orders_by_budget.tt', 'intranet', $query);
185         $csvTemplate->param(sep => $sep, rows => \@rows, totalrow => \@totalrow);
186         print $csvTemplate->output;
187
188         exit(0);
189     }
190 }
191 else {
192     # Set file export choices
193     my @outputFormats = ('CSV');
194     my @CSVdelimiters =(',','#',qw(; tabulation \\ /));
195
196     # getting all budgets
197     my $budgets = GetBudgetHierarchy;
198     my $budgetloop = [];
199     foreach my $budget  (@{$budgets}) {
200         push @{$budgetloop},{
201             value    => $budget->{budget_id},
202             description  => $budget->{budget_name},
203             period       => $budget->{budget_period_description},
204             active       => $budget->{budget_period_active},
205         };
206     }
207     @{$budgetloop} =sort { uc( $a->{description}) cmp uc( $b->{description}) } @{$budgetloop};
208     $template->param(   budgetsloop   => \@{$budgetloop},
209         outputFormatloop => \@outputFormats,
210         delimiterloop => \@CSVdelimiters,
211         delimiterPreference => C4::Context->preference('delimiter')
212     );
213 }
214
215 # writing the template
216 output_html_with_http_headers $query, $cookie, $template->output;