Bug 7677 - Schema update
[koha.git] / reports / orders_by_fund.pl
blob469b2c2c8d0f597f85e37c372ed8aaf807460cd4
1 #!/usr/bin/perl
3 # This file is part of Koha.
5 # Author : Frédérick Capovilla, 2011 - SYS-TECH
6 # Modified by : Élyse Morin, 2012 - Libéo
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.
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.
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
22 =head1 orders_by_budget
24 This script displays all orders associated to a selected budget.
26 =cut
28 use Modern::Perl;
30 use CGI qw( -utf8 );
31 use C4::Auth;
32 use C4::Output;
33 use C4::Budgets;
34 use C4::Biblio;
35 use C4::Reports;
36 use C4::Acquisition; #GetBasket()
37 use Koha::DateUtils;
39 my $query = new CGI;
40 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
42 template_name => "reports/orders_by_budget.tt",
43 query => $query,
44 type => "intranet",
45 authnotrequired => 0,
46 flagsrequired => { reports => '*' },
47 debug => 1,
51 my $params = $query->Vars;
52 my $get_orders = $params->{'get_orders'};
54 if ( $get_orders ) {
55 my $budgetfilter = $params->{'budgetfilter'} || undef;
56 my $total_quantity = 0;
57 my $total_rrp = 0;
58 my $total_ecost = 0;
59 my %budget_name;
61 # Fetch the orders
62 my @orders;
63 unless($budgetfilter) {
64 # If no budget filter was selected, get the orders of all budgets
65 my @budgets = C4::Budgets::GetBudgetsReport();
66 foreach my $budget (@budgets) {
67 push(@orders, $budget);
68 $budget_name{$budget->{'budget_id'}} = $budget->{'budget_name'};
71 else {
72 if ($budgetfilter eq 'activebudgets') {
73 # If all active budgets's option was selected, get the orders of all active budgets
74 my @active_budgets = C4::Budgets::GetBudgetsReport(1);
75 foreach my $active_budget (@active_budgets)
77 push(@orders, $active_budget);
78 $budget_name{$active_budget->{'budget_id'}} = $active_budget->{'budget_name'};
81 else {
82 # A budget filter was selected, only get the orders for the selected budget
83 my @filtered_budgets = C4::Budgets::GetBudgetReport($budgetfilter);
84 foreach my $budget (@filtered_budgets)
86 push(@orders, $budget);
87 $budget_name{$budget->{'budget_id'}} = $budget->{'budget_name'};
89 if ($filtered_budgets[0]) {
90 $template->param(
91 current_budget_name => $filtered_budgets[0]->{'budget_name'},
97 # Format the order's informations
98 foreach my $order (@orders) {
99 # Get the title of the ordered item
100 my $biblio = C4::Biblio::GetBiblio($order->{'biblionumber'});
101 my $basket = C4::Acquisition::GetBasket($order->{'basketno'});
103 $order->{'basketname'} = $basket->{'basketname'};
104 $order->{'authorisedbyname'} = $basket->{'authorisedbyname'};
106 $order->{'title'} = $biblio->{'title'} || $order->{'biblionumber'};
108 $order->{'total_rrp'} = $order->{'quantity'} * $order->{'rrp'};
109 $order->{'total_ecost'} = $order->{'quantity'} * $order->{'ecost'};
111 # Format the dates and currencies correctly
112 $order->{'datereceived'} = output_pref(dt_from_string($order->{'datereceived'}));
113 $order->{'entrydate'} = output_pref(dt_from_string($order->{'entrydate'}));
114 $total_quantity += $order->{'quantity'};
115 $total_rrp += $order->{'total_rrp'};
116 $total_ecost += $order->{'total_ecost'};
118 # Get the budget's name
119 $order->{'budget_name'} = $budget_name{$order->{'budget_id'}};
122 # If we are outputting to screen, output to the template.
123 if($params->{"output"} eq 'screen') {
124 $template->param(
125 total => scalar @orders,
126 ordersloop => \@orders,
127 get_orders => $get_orders,
128 total_quantity => $total_quantity,
129 total_rrp => $total_rrp,
130 total_ecost => $total_ecost,
133 # If we are outputting to a file, create it and exit.
134 else {
135 my $basename = $params->{"basename"};
136 my $sep = $params->{"sep"};
137 $sep = "\t" if ($sep eq 'tabulation');
139 # TODO Use Text::CSV to generate the CSV file
140 print $query->header(
141 -type => 'text/csv',
142 -encoding => 'utf-8',
143 -attachment => "$basename.csv",
144 -name => "$basename.csv"
147 #binmode STDOUT, ":encoding(UTF-8)";
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\"";
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);
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));
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;
188 exit(0);
191 else {
192 # Set file export choices
193 my @outputFormats = ('CSV');
194 my @CSVdelimiters =(',','#',qw(; tabulation \\ /));
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},
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')
215 # writing the template
216 output_html_with_http_headers $query, $cookie, $template->output;