Line 0
Link Here
|
|
|
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; |