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
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.
31 use C4::Auth qw( get_template_and_user );
32 use C4::Output qw( output_html_with_http_headers );
33 use C4::Budgets qw( GetBudgetsReport GetBudgetHierarchy );
34 use C4::Acquisition qw( GetBasket get_rounded_price );
39 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
41 template_name => "reports/orders_by_budget.tt",
44 flagsrequired => { reports => '*' },
48 my $params = $query->Vars;
49 my $get_orders = $params->{'get_orders'};
52 my $budgetfilter = $params->{'budgetfilter'} || undef;
53 my $total_quantity = 0;
60 unless($budgetfilter) {
61 # If no budget filter was selected, get the orders of all budgets
62 my @budgets = C4::Budgets::GetBudgetsReport();
63 foreach my $budget (@budgets) {
64 push(@orders, $budget);
65 $budget_name{$budget->{'budget_id'}} = $budget->{'budget_name'};
69 if ($budgetfilter eq 'activebudgets') {
70 # If all active budgets's option was selected, get the orders of all active budgets
71 my @active_budgets = C4::Budgets::GetBudgetsReport(1);
72 foreach my $active_budget (@active_budgets)
74 push(@orders, $active_budget);
75 $budget_name{$active_budget->{'budget_id'}} = $active_budget->{'budget_name'};
79 # A budget filter was selected, only get the orders for the selected budget
80 my @filtered_budgets = C4::Budgets::GetBudgetReport($budgetfilter);
81 foreach my $budget (@filtered_budgets)
83 push(@orders, $budget);
84 $budget_name{$budget->{'budget_id'}} = $budget->{'budget_name'};
86 if ($filtered_budgets[0]) {
88 current_budget_name => $filtered_budgets[0]->{'budget_name'},
94 # Format the order's informations
95 foreach my $order (@orders) {
96 # Get the title of the ordered item
97 my $biblio = Koha::Biblios->find( $order->{biblionumber} );
98 my $basket = C4::Acquisition::GetBasket($order->{'basketno'});
100 $order->{'basketname'} = $basket->{'basketname'};
101 $order->{'authorisedbyname'} = $basket->{'authorisedbyname'};
103 $order->{title} = $biblio ? $biblio->title : '';
104 $order->{title} ||= $order->{biblionumber};
106 $order->{'total_rrp'} = get_rounded_price($order->{'quantity'}) * $order->{'rrp'};
107 $order->{'total_ecost'} = get_rounded_price($order->{'quantity'}) * $order->{'ecost'};
109 # Format the currencies correctly
110 $total_quantity += $order->{'quantity'};
111 $total_rrp += $order->{'total_rrp'};
112 $total_ecost += $order->{'total_ecost'};
114 # Get the budget's name
115 $order->{'budget_name'} = $budget_name{$order->{'budget_id'}};
118 # If we are outputting to screen, output to the template.
119 if($params->{"output"} eq 'screen') {
121 total => scalar @orders,
122 ordersloop => \@orders,
123 get_orders => $get_orders,
124 total_quantity => $total_quantity,
125 total_rrp => $total_rrp,
126 total_ecost => $total_ecost,
129 # If we are outputting to a file, create it and exit.
131 my $basename = $params->{"basename"};
132 my $sep = C4::Context->csv_delimiter(scalar $params->{"sep"});
134 # TODO Use Text::CSV to generate the CSV file
135 print $query->header(
137 -encoding => 'utf-8',
138 -attachment => "$basename.csv",
139 -name => "$basename.csv"
142 #binmode STDOUT, ":encoding(UTF-8)";
144 # Surrounds a string with double-quotes and escape the double-quotes inside
146 my $string = shift || "";
148 return "\"$string\"";
151 foreach my $order (@orders) {
153 push(@row, _surround($order->{'budget_name'}));
154 push(@row, _surround($order->{'basketno'}));
155 push(@row, _surround($order->{'basketname'}));
156 push(@row, _surround($order->{'authorisedbyname'}));
157 push(@row, _surround($order->{'biblionumber'}));
158 push(@row, _surround($order->{'title'}));
159 push(@row, _surround($order->{'currency'}));
160 push(@row, _surround($order->{'listprice'}));
161 push(@row, _surround($order->{'rrp'}));
162 push(@row, _surround($order->{'ecost'}));
163 push(@row, _surround($order->{'quantity'}));
164 push(@row, _surround($order->{'total_rrp'}));
165 push(@row, _surround($order->{'total_ecost'}));
166 push(@row, _surround($order->{'entrydate'}));
167 push(@row, _surround($order->{'datereceived'}));
168 push(@row, _surround($order->{'order_internalnote'}));
169 push(@row, _surround($order->{'order_vendornote'}));
174 for(1..9){push(@totalrow, "")};
175 push(@totalrow, _surround($total_quantity));
176 push(@totalrow, _surround($total_rrp));
177 push(@totalrow, _surround($total_ecost));
179 my $csvTemplate = C4::Templates::gettemplate('reports/csv/orders_by_budget.tt', 'intranet', $query);
180 $csvTemplate->param(sep => $sep, rows => \@rows, totalrow => \@totalrow);
181 print $csvTemplate->output;
187 # Set file export choices
188 my @outputFormats = ('CSV');
189 my @CSVdelimiters =(',','#',qw(; tabulation \\ /));
191 # getting all budgets
192 my $budgets = GetBudgetHierarchy;
194 foreach my $budget (@{$budgets}) {
195 push @{$budgetloop},{
196 value => $budget->{budget_id},
197 description => $budget->{budget_name},
198 period => $budget->{budget_period_description},
199 active => $budget->{budget_period_active},
202 @{$budgetloop} =sort { uc( $a->{description}) cmp uc( $b->{description}) } @{$budgetloop};
203 $template->param( budgetsloop => \@{$budgetloop},
204 outputFormatloop => \@outputFormats,
205 delimiterloop => \@CSVdelimiters,
206 delimiterPreference => C4::Context->preference('CSVDelimiter')
210 # writing the template
211 output_html_with_http_headers $query, $cookie, $template->output;