Bug 11371 - Add a new report : Orders by fund with more options
Add option show or no inactive budget and more options
Use subroutine GetBudgetHierarchy for return all budgets
Delete subroutine GetBudgetPeriodDescription and theire tests
Use Price TT plugin
Correct name of column and capitalization the first letter
Add checkbox for show inactive budgets, default the drop down list containt a active budget
Not use [i] for inactive budgets, i add (inactive) at the end of inactive budget
Add vendor note in the list of show attribute
Test case:
Go to Home > Reports > Orders by fund
Select one or all budgets
You can show the inactive budget, default the drop down list containt a active budget
Choose output to screen ou csv file
Works as expected. QA tools OK with Bug 16104 applied.
Signed-off-by: Marc Véron <veron@veron.ch>
Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
- changed 'Fund (budget):' back to 'Fund:', as the budget
no longer shows in the pull down.
- Fixed number of tests in Budgets.t
- Removed &GetBudgetPeriodDescription
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
parent
ae40e5e4c6
commit
97e36c0264
122
C4/Budgets.pm
122
C4/Budgets.pm
|
|
@ -33,6 +33,9 @@ BEGIN {
|
|||
&GetBudgetByOrderNumber
|
||||
&GetBudgetByCode
|
||||
&GetBudgets
|
||||
&BudgetsByActivity
|
||||
&GetBudgetsReport
|
||||
&GetBudgetReport
|
||||
&GetBudgetHierarchy
|
||||
&AddBudget
|
||||
&ModBudget
|
||||
|
|
@ -71,7 +74,6 @@ BEGIN {
|
|||
|
||||
# ----------------------------BUDGETS.PM-----------------------------";
|
||||
|
||||
|
||||
=head1 FUNCTIONS ABOUT BUDGETS
|
||||
|
||||
=cut
|
||||
|
|
@ -451,7 +453,6 @@ sub GetBudgetPeriod {
|
|||
return $data;
|
||||
}
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
sub DelBudgetPeriod{
|
||||
my ($budget_period_id) = @_;
|
||||
my $dbh = C4::Context->dbh;
|
||||
|
|
@ -595,6 +596,8 @@ sub DelBudget {
|
|||
}
|
||||
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
=head2 GetBudget
|
||||
|
||||
&GetBudget($budget_id);
|
||||
|
|
@ -603,7 +606,6 @@ get a specific budget
|
|||
|
||||
=cut
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
sub GetBudget {
|
||||
my ( $budget_id ) = @_;
|
||||
my $dbh = C4::Context->dbh;
|
||||
|
|
@ -618,6 +620,8 @@ sub GetBudget {
|
|||
return $result;
|
||||
}
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
|
||||
=head2 GetBudgetByOrderNumber
|
||||
|
||||
&GetBudgetByOrderNumber($ordernumber);
|
||||
|
|
@ -626,7 +630,6 @@ get a specific budget by order number
|
|||
|
||||
=cut
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
sub GetBudgetByOrderNumber {
|
||||
my ( $ordernumber ) = @_;
|
||||
my $dbh = C4::Context->dbh;
|
||||
|
|
@ -642,6 +645,117 @@ sub GetBudgetByOrderNumber {
|
|||
return $result;
|
||||
}
|
||||
|
||||
=head2 GetBudgetReport
|
||||
|
||||
&GetBudgetReport( [$budget_id] );
|
||||
|
||||
Get all orders for a specific budget, without cancelled orders.
|
||||
|
||||
Returns an array of hashrefs.
|
||||
|
||||
=cut
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
sub GetBudgetReport {
|
||||
my ( $budget_id ) = @_;
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $query = '
|
||||
SELECT o.*, b.budget_name
|
||||
FROM aqbudgets b
|
||||
INNER JOIN aqorders o
|
||||
ON b.budget_id = o.budget_id
|
||||
WHERE b.budget_id=?
|
||||
AND (o.orderstatus != "cancelled")
|
||||
ORDER BY b.budget_name';
|
||||
|
||||
my $sth = $dbh->prepare($query);
|
||||
$sth->execute( $budget_id );
|
||||
|
||||
my @results = ();
|
||||
while ( my $data = $sth->fetchrow_hashref ) {
|
||||
push( @results, $data );
|
||||
}
|
||||
return @results;
|
||||
}
|
||||
|
||||
=head2 GetBudgetsByActivity
|
||||
|
||||
&GetBudgetsByActivity( $budget_period_active );
|
||||
|
||||
Get all active or inactive budgets, depending of the value
|
||||
of the parameter.
|
||||
|
||||
1 = active
|
||||
0 = inactive
|
||||
|
||||
=cut
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
sub GetBudgetsByActivity {
|
||||
my ( $budget_period_active ) = @_;
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $query = "
|
||||
SELECT DISTINCT b.*
|
||||
FROM aqbudgetperiods bp
|
||||
INNER JOIN aqbudgets b
|
||||
ON bp.budget_period_id = b.budget_period_id
|
||||
WHERE bp.budget_period_active=?
|
||||
";
|
||||
my $sth = $dbh->prepare($query);
|
||||
$sth->execute( $budget_period_active );
|
||||
my @results = ();
|
||||
while ( my $data = $sth->fetchrow_hashref ) {
|
||||
push( @results, $data );
|
||||
}
|
||||
return @results;
|
||||
}
|
||||
# --------------------------------------------------------------------
|
||||
|
||||
=head2 GetBudgetsReport
|
||||
|
||||
&GetBudgetsReport( [$activity] );
|
||||
|
||||
Get all but cancelled orders for all funds.
|
||||
|
||||
If the optionnal activity parameter is passed, returns orders for active/inactive budgets only.
|
||||
|
||||
active = 1
|
||||
inactive = 0
|
||||
|
||||
Returns an array of hashrefs.
|
||||
|
||||
=cut
|
||||
|
||||
sub GetBudgetsReport {
|
||||
my ($activity) = @_;
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $query = '
|
||||
SELECT o.*, b.budget_name
|
||||
FROM aqbudgetperiods bp
|
||||
INNER JOIN aqbudgets b
|
||||
ON bp.budget_period_id = b.budget_period_id
|
||||
INNER JOIN aqorders o
|
||||
ON b.budget_id = o.budget_id ';
|
||||
if($activity ne ''){
|
||||
$query .= 'WHERE bp.budget_period_active=? ';
|
||||
}
|
||||
$query .= 'AND (o.orderstatus != "cancelled")
|
||||
ORDER BY b.budget_name';
|
||||
|
||||
my $sth = $dbh->prepare($query);
|
||||
if($activity ne ''){
|
||||
$sth->execute($activity);
|
||||
}
|
||||
else{
|
||||
$sth->execute;
|
||||
}
|
||||
my @results = ();
|
||||
while ( my $data = $sth->fetchrow_hashref ) {
|
||||
push( @results, $data );
|
||||
}
|
||||
return @results;
|
||||
}
|
||||
|
||||
=head2 GetBudgetByCode
|
||||
|
||||
my $budget = &GetBudgetByCode($budget_code);
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
Fund[% sep %]"Basket num"[% sep %]"Basket name"[% sep %]"Authorised by"[% sep %]"Biblio number"[% sep %]Title[% sep %]Currency[% sep %]"Vendor price"[% sep %]RRP[% sep %]"Budgeted cost"[% sep %]Quantity[% sep %]"Total RRP"[% sep %]"Total cost"[% sep %]"Entry date"[% sep %]"Date received"[% sep %]"Internal note"[% sep %]"Vendor note"
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
[% INCLUDE csv_headers/reports/orders_by_budget.tt %]
|
||||
[%- FOREACH row IN rows %]
|
||||
[%- FOREACH field IN row;
|
||||
field;
|
||||
sep IF !loop.last;
|
||||
END %]
|
||||
[% END -%]
|
||||
TOTAL
|
||||
[%- FOREACH field IN totalrow;
|
||||
field;
|
||||
sep IF !loop.last;
|
||||
END %]
|
||||
|
|
@ -0,0 +1,161 @@
|
|||
[% USE Price %]
|
||||
[% INCLUDE 'doc-head-open.inc' %]
|
||||
<title>Koha › Reports › Orders by fund</title>
|
||||
[% INCLUDE 'doc-head-close.inc' %]
|
||||
</head>
|
||||
<body>
|
||||
[% INCLUDE 'header.inc' %]
|
||||
[% INCLUDE 'cat-search.inc' %]
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" />
|
||||
[% INCLUDE 'datatables.inc' %]
|
||||
<script type="text/javascript">
|
||||
$(document).ready( function () {
|
||||
$('#funds').DataTable($.extend(true, {}, dataTablesDefaults,{"sPaginationType": "full_numbers"}));
|
||||
|
||||
showallbudgets = $('#budgetfilter').html();
|
||||
$('#budgetfilter .b_inactive').remove();
|
||||
|
||||
$('#showbudgets').click(function(){
|
||||
if ($(this).is(":checked"))
|
||||
$('#budgetfilter').html(showallbudgets);
|
||||
else
|
||||
$('#budgetfilter .b_inactive').remove();
|
||||
});
|
||||
} );
|
||||
</script>
|
||||
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/reports/reports-home.pl">Reports</a>[% IF ( get_orders ) %] › <a href="/cgi-bin/koha/reports/orders_by_fund.pl">Orders by fund</a> › Results[% ELSE %] › Orders by fund[% END %]</div>
|
||||
|
||||
<div id="doc3" class="yui-t2">
|
||||
|
||||
<div id="bd">
|
||||
<div id="yui-main">
|
||||
<div class="yui-b">
|
||||
|
||||
[% IF ( current_budget_name ) %]<h1>Orders for fund '[% current_budget_name %]'</h1>
|
||||
[% ELSE %]<h1>Orders by fund</h1>
|
||||
[% END %]
|
||||
|
||||
[% IF ( get_orders ) %]
|
||||
<div class="results">
|
||||
[% IF ( total ) %]
|
||||
Orders found: [% total %]
|
||||
[% ELSE %]
|
||||
No order found
|
||||
[% END %]
|
||||
</div>
|
||||
|
||||
[% IF ( ordersloop ) %]<table id="funds">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Fund</th>
|
||||
<th>Basket</th>
|
||||
<th>Basket name</th>
|
||||
<th>Basket by</th>
|
||||
<th>Title</th>
|
||||
<th>Currency</th>
|
||||
<th>List price</th>
|
||||
<th>RRP</th>
|
||||
<th>Budgeted cost</th>
|
||||
<th>Quantity</th>
|
||||
<th>Total RRP</th>
|
||||
<th>Total cost</th>
|
||||
<th>Entry date</th>
|
||||
<th>Date deceived</th>
|
||||
<th>Internal note</th>
|
||||
<th>Vendor note</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
[% FOREACH ordersloo IN ordersloop %]
|
||||
[% UNLESS ( loop.odd ) %]<tr class="highlight">
|
||||
[% ELSE %] <tr>
|
||||
[% END %]
|
||||
<td>[% ordersloo.budget_name |html %]</td>
|
||||
<td><a href="/cgi-bin/koha/acqui/basket.pl?basketno=[% ordersloo.basketno %]"> [% ordersloo.basketno |html %]</a></td>
|
||||
<td>[% ordersloo.basketname |html %]</td>
|
||||
<td>[% ordersloo.authorisedbyname %]</td>
|
||||
<td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% ordersloo.biblionumber %]"> [% ordersloo.title |html %]</a></td>
|
||||
<td>[% ordersloo.currency %]</td>
|
||||
<td>[% ordersloo.listprice | $Price %]</td>
|
||||
<td>[% ordersloo.rrp | $Price %]</td>
|
||||
<td>[% ordersloo.ecost | $Price %]</td>
|
||||
<td>[% ordersloo.quantity %]</td>
|
||||
<td>[% ordersloo.total_rrp | $Price %]</td>
|
||||
<td>[% ordersloo.total_ecost | $Price %]</td>
|
||||
<td>[% ordersloo.entrydate %]</td>
|
||||
<td>[% ordersloo.datereceived %]</td>
|
||||
<td>[% ordersloo.order_internalnote |html %]</td>
|
||||
<td>[% ordersloo.order_vendornote |html %]</td>
|
||||
</tr>
|
||||
[% END %]
|
||||
</tbody>
|
||||
<tfoot><tr><th>TOTAL</th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th>[% total_quantity %]</th><th>[% total_rrp | $Price %]</th><th>[% total_ecost | $Price %]</th><th></th><th></th><th></th></tr></tfoot>
|
||||
</table>
|
||||
[% END %]
|
||||
[% ELSE %]
|
||||
<form name="f" action="/cgi-bin/koha/reports/orders_by_fund.pl" method="post">
|
||||
<fieldset class="rows">
|
||||
<legend>Filters</legend>
|
||||
<ol><li><label for="budgetfilter">Fund: </label>
|
||||
<select name="budgetfilter" id="budgetfilter">
|
||||
<option value="">All funds</option>
|
||||
<option value="activebudgets">All active funds</option>
|
||||
[% FOREACH budgetsloo IN budgetsloop %]
|
||||
[% IF ( budgetsloo.selected ) %]
|
||||
<option value="[% budgetsloo.value %]" selected="selected">
|
||||
[% ELSE %]
|
||||
[% bdgclass=budgetsloo.active? "": "b_inactive" %]
|
||||
<option class="[% bdgclass %]" value="[% budgetsloo.value %]">
|
||||
[% END %]
|
||||
[% budgetsloo.description %] [% IF !budgetsloo.active %](inactive)[% END %]
|
||||
</option>
|
||||
[% END %]
|
||||
</select>
|
||||
<label for="showallbudgets" style="float:none;"> Show inactive:</label>
|
||||
<input type="checkbox" id="showbudgets" />
|
||||
</li></ol>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="rows">
|
||||
<legend>Output</legend>
|
||||
<ol><li><label for="outputscreen">To screen into the browser: </label><input type="radio" checked="checked" name="output" id="outputscreen" value="screen" /> </li>
|
||||
<li><label for="outputfile">To a file:</label>
|
||||
<input type="radio" name="output" value="file" id="outputfile" />
|
||||
<label class="inline" for="basename">Named: </label>
|
||||
<input type="text" name="basename" id="basename" value="Export" />
|
||||
<label class="inline" for="MIME">Into an application </label>
|
||||
<select id='MIME' name='MIME' size='1'>
|
||||
[% FOREACH outputFormatloo IN outputFormatloop %]
|
||||
<option value="[% outputFormatloo %]">[% outputFormatloo %]</option>
|
||||
[% END %]
|
||||
</select>
|
||||
<select id='sep' name='sep' size='1'>
|
||||
[% FOREACH delimiterloo IN delimiterloop %]
|
||||
[% IF delimiterloo == delimiterPreference %]
|
||||
<option value="[% delimiterloo %]">[% delimiterloo %]</option>
|
||||
[% END %]
|
||||
[% END %]
|
||||
[% FOREACH delimiterloo IN delimiterloop %]
|
||||
[% IF delimiterloo != delimiterPreference %]
|
||||
<option value="[% delimiterloo %]">[% delimiterloo %]</option>
|
||||
[% END %]
|
||||
[% END %]
|
||||
</select>
|
||||
</li></ol>
|
||||
</fieldset>
|
||||
|
||||
<fieldset class="action">
|
||||
<input type="submit" value="Submit" />
|
||||
<input type="hidden" name="get_orders" value="1" /></fieldset>
|
||||
</form>
|
||||
|
||||
[% END %]
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="yui-b">
|
||||
[% INCLUDE 'reports-menu.inc' %]
|
||||
</div>
|
||||
</div>
|
||||
[% INCLUDE 'intranet-bottom.inc' %]
|
||||
|
|
@ -13,30 +13,30 @@
|
|||
<div id="bd">
|
||||
<div id="yui-main">
|
||||
|
||||
<div class="yui-g">
|
||||
<h1>Reports</h1>
|
||||
<div class="yui-g">
|
||||
<h1>Reports</h1>
|
||||
<div class="yui-u first"><h2>Guided reports</h2>
|
||||
<ul>
|
||||
<li><a href="/cgi-bin/koha/reports/guided_reports.pl">Guided reports wizard</a></li>
|
||||
[% IF ( CAN_user_reports_create_reports ) %]<li><a href="/cgi-bin/koha/reports/guided_reports.pl?phase=Build%20new">Build new</a></li>[% END %]
|
||||
[% IF ( CAN_user_reports_execute_reports ) %]<li><a href="/cgi-bin/koha/reports/guided_reports.pl?phase=Use%20saved">Use saved</a></li>[% END %]
|
||||
[% IF ( CAN_user_reports_create_reports ) %]<li><a href="/cgi-bin/koha/reports/guided_reports.pl?phase=Create%20report%20from%20SQL">Create from SQL</a></li>[% END %]
|
||||
</ul>
|
||||
|
||||
<h5>Reports dictionary</h5>
|
||||
<ul>
|
||||
<li><a href="/cgi-bin/koha/reports/dictionary.pl?phase=View%20Dictionary">View dictionary</a></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><a href="/cgi-bin/koha/reports/guided_reports.pl">Guided reports wizard</a></li>
|
||||
[% IF ( CAN_user_reports_create_reports ) %]<li><a href="/cgi-bin/koha/reports/guided_reports.pl?phase=Build%20new">Build new</a></li>[% END %]
|
||||
[% IF ( CAN_user_reports_execute_reports ) %]<li><a href="/cgi-bin/koha/reports/guided_reports.pl?phase=Use%20saved">Use saved</a></li>[% END %]
|
||||
[% IF ( CAN_user_reports_create_reports ) %]<li><a href="/cgi-bin/koha/reports/guided_reports.pl?phase=Create%20report%20from%20SQL">Create from SQL</a></li>[% END %]
|
||||
</ul>
|
||||
|
||||
<h2>Statistics wizards</h2>
|
||||
<ul>
|
||||
<li><a href="/cgi-bin/koha/reports/acquisitions_stats.pl">Acquisitions</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/borrowers_stats.pl">Patrons</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/catalogue_stats.pl">Catalog</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/issues_stats.pl">Circulation</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/serials_stats.pl">Serials</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/reserves_stats.pl">Holds</a></li>
|
||||
</ul>
|
||||
<h5>Reports dictionary</h5>
|
||||
<ul>
|
||||
<li><a href="/cgi-bin/koha/reports/dictionary.pl?phase=View%20Dictionary">View dictionary</a></li>
|
||||
</ul>
|
||||
|
||||
<h2>Statistics wizards</h2>
|
||||
<ul>
|
||||
<li><a href="/cgi-bin/koha/reports/acquisitions_stats.pl">Acquisitions</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/borrowers_stats.pl">Patrons</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/catalogue_stats.pl">Catalog</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/issues_stats.pl">Circulation</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/serials_stats.pl">Serials</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/reserves_stats.pl">Holds</a></li>
|
||||
</ul>
|
||||
|
||||
[% IF UseKohaPlugins %]
|
||||
<h2>Report Plugins</h2>
|
||||
|
|
@ -51,23 +51,24 @@
|
|||
<ul>
|
||||
<li><a href="/cgi-bin/koha/reports/bor_issues_top.pl">Patrons with the most checkouts</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/cat_issues_top.pl">Most-circulated items</a></li>
|
||||
</ul>
|
||||
|
||||
<h2>Inactive</h2>
|
||||
<ul>
|
||||
<li><a href="/cgi-bin/koha/reports/borrowers_out.pl">Patrons who haven't checked out</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/catalogue_out.pl">Items with no checkouts</a></li>
|
||||
</ul>
|
||||
|
||||
<h2>Other</h2>
|
||||
<ul>
|
||||
<li><a href="/cgi-bin/koha/reports/itemslost.pl">Items lost</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/manager.pl?report_name=itemtypes">Catalog by item type</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/issues_avg_stats.pl">Average loan time</a></li>
|
||||
<li><a href="http://schema.koha-community.org/" target="blank">Koha database schema</a></li>
|
||||
<li><a href="http://wiki.koha-community.org/wiki/SQL_Reports_Library" target="blank">Koha reports library</a></li>
|
||||
<!--<li><a href="/cgi-bin/koha/reports/stats.screen.pl">Till reconciliation</a></li> -->
|
||||
</ul></div>
|
||||
</ul>
|
||||
|
||||
<h2>Inactive</h2>
|
||||
<ul>
|
||||
<li><a href="/cgi-bin/koha/reports/borrowers_out.pl">Patrons who haven't checked out</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/catalogue_out.pl">Items with no checkouts</a></li>
|
||||
</ul>
|
||||
|
||||
<h2>Other</h2>
|
||||
<ul>
|
||||
<li><a href="/cgi-bin/koha/reports/itemslost.pl">Items lost</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/orders_by_fund.pl">Orders by fund</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/manager.pl?report_name=itemtypes">Catalog by itemtype</a></li>
|
||||
<li><a href="/cgi-bin/koha/reports/issues_avg_stats.pl">Average loan time</a></li>
|
||||
<li><a href="http://schema.koha-community.org/" target="blank">Koha database schema</a></li>
|
||||
<li><a href="http://wiki.koha-community.org/wiki/SQL_Reports_Library" target="blank">Koha reports library</a></li>
|
||||
<!--<li><a href="/cgi-bin/koha/reports/stats.screen.pl">Till reconciliation</a></li> -->
|
||||
</ul></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,216 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# This file is part of Koha.
|
||||
#
|
||||
# Author : Frédérick Capovilla, 2011 - SYS-TECH
|
||||
# Modified by : Élyse Morin, 2012 - Libéo
|
||||
#
|
||||
# Koha is free software; you can redistribute it and/or modify it under the
|
||||
# terms of the GNU General Public License as published by the Free Software
|
||||
# Foundation; either version 3 of the License, or (at your option) any later
|
||||
# version.
|
||||
#
|
||||
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along with
|
||||
# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
|
||||
# Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
=head1 orders_by_budget
|
||||
|
||||
This script displays all orders associated to a selected budget.
|
||||
|
||||
=cut
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Modern::Perl;
|
||||
|
||||
use CGI;
|
||||
use C4::Auth;
|
||||
use C4::Output;
|
||||
use C4::Budgets;
|
||||
use C4::Biblio;
|
||||
use C4::Reports;
|
||||
use C4::Acquisition; #GetBasket()
|
||||
|
||||
my $query = new CGI;
|
||||
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
|
||||
{
|
||||
template_name => "reports/orders_by_budget.tt",
|
||||
query => $query,
|
||||
type => "intranet",
|
||||
authnotrequired => 0,
|
||||
flagsrequired => { reports => '*' },
|
||||
debug => 1,
|
||||
}
|
||||
);
|
||||
|
||||
my $params = $query->Vars;
|
||||
my $get_orders = $params->{'get_orders'};
|
||||
|
||||
if ( $get_orders ) {
|
||||
my $budgetfilter = $params->{'budgetfilter'} || undef;
|
||||
my $total_quantity = 0;
|
||||
my $total_rrp = 0;
|
||||
my $total_ecost = 0;
|
||||
my %budget_name;
|
||||
|
||||
# Fetch the orders
|
||||
my @orders;
|
||||
unless($budgetfilter) {
|
||||
# If no budget filter was selected, get the orders of all budgets
|
||||
my @budgets = C4::Budgets::GetBudgetsReport();
|
||||
foreach my $budget (@budgets) {
|
||||
push(@orders, $budget);
|
||||
$budget_name{$budget->{'budget_id'}} = $budget->{'budget_name'};
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ($budgetfilter eq 'activebudgets') {
|
||||
# If all active budgets's option was selected, get the orders of all active budgets
|
||||
my @active_budgets = C4::Budgets::GetBudgetsReport(1);
|
||||
foreach my $active_budget (@active_budgets)
|
||||
{
|
||||
push(@orders, $active_budget);
|
||||
$budget_name{$active_budget->{'budget_id'}} = $active_budget->{'budget_name'};
|
||||
}
|
||||
}
|
||||
else {
|
||||
# A budget filter was selected, only get the orders for the selected budget
|
||||
my @filtered_budgets = C4::Budgets::GetBudgetReport($budgetfilter);
|
||||
foreach my $budget (@filtered_budgets)
|
||||
{
|
||||
push(@orders, $budget);
|
||||
$budget_name{$budget->{'budget_id'}} = $budget->{'budget_name'};
|
||||
}
|
||||
if ($filtered_budgets[0]) {
|
||||
$template->param(
|
||||
current_budget_name => $filtered_budgets[0]->{'budget_name'},
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Format the order's informations
|
||||
foreach my $order (@orders) {
|
||||
# Get the title of the ordered item
|
||||
my $biblio = C4::Biblio::GetBiblio($order->{'biblionumber'});
|
||||
my $basket = C4::Acquisition::GetBasket($order->{'basketno'});
|
||||
|
||||
$order->{'basketname'} = $basket->{'basketname'};
|
||||
$order->{'authorisedbyname'} = $basket->{'authorisedbyname'};
|
||||
|
||||
$order->{'title'} = $biblio->{'title'} || $order->{'biblionumber'};
|
||||
|
||||
$order->{'total_rrp'} = $order->{'quantity'} * $order->{'rrp'};
|
||||
$order->{'total_ecost'} = $order->{'quantity'} * $order->{'ecost'};
|
||||
|
||||
# Format the dates and currencies correctly
|
||||
$order->{'datereceived'} = Koha::DateUtils::output_pref(Koha::DateUtils::dt_from_string($order->{'datereceived'}));
|
||||
$order->{'entrydate'} = Koha::DateUtils::output_pref(Koha::DateUtils::dt_from_string($order->{'entrydate'}));
|
||||
$total_quantity += $order->{'quantity'};
|
||||
$total_rrp += $order->{'total_rrp'};
|
||||
$total_ecost += $order->{'total_ecost'};
|
||||
|
||||
# Get the budget's name
|
||||
$order->{'budget_name'} = $budget_name{$order->{'budget_id'}};
|
||||
}
|
||||
|
||||
# If we are outputting to screen, output to the template.
|
||||
if($params->{"output"} eq 'screen') {
|
||||
$template->param(
|
||||
total => scalar @orders,
|
||||
ordersloop => \@orders,
|
||||
get_orders => $get_orders,
|
||||
total_quantity => $total_quantity,
|
||||
total_rrp => $total_rrp,
|
||||
total_ecost => $total_ecost,
|
||||
);
|
||||
}
|
||||
# If we are outputting to a file, create it and exit.
|
||||
else {
|
||||
my $basename = $params->{"basename"};
|
||||
my $sep = $params->{"sep"};
|
||||
$sep = "\t" if ($sep eq 'tabulation');
|
||||
|
||||
print $query->header(
|
||||
-type => 'application/vnd.sun.xml.calc',
|
||||
-encoding => 'utf-8',
|
||||
-attachment => "$basename.csv",
|
||||
-name => "$basename.csv"
|
||||
);
|
||||
|
||||
#binmode STDOUT, ":encoding(UTF-8)";
|
||||
|
||||
# Surrounds a string with double-quotes and escape the double-quotes inside
|
||||
sub _surround {
|
||||
my $string = shift || "";
|
||||
$string =~ s/"/""/g;
|
||||
return "\"$string\"";
|
||||
}
|
||||
my @rows;
|
||||
foreach my $order (@orders) {
|
||||
my @row;
|
||||
push(@row, _surround($order->{'budget_name'}));
|
||||
push(@row, _surround($order->{'basketno'}));
|
||||
push(@row, _surround($order->{'basketname'}));
|
||||
push(@row, _surround($order->{'authorisedbyname'}));
|
||||
push(@row, _surround($order->{'biblionumber'}));
|
||||
push(@row, _surround($order->{'title'}));
|
||||
push(@row, _surround($order->{'currency'}));
|
||||
push(@row, _surround($order->{'listprice'}));
|
||||
push(@row, _surround($order->{'rrp'}));
|
||||
push(@row, _surround($order->{'ecost'}));
|
||||
push(@row, _surround($order->{'quantity'}));
|
||||
push(@row, _surround($order->{'total_rrp'}));
|
||||
push(@row, _surround($order->{'total_ecost'}));
|
||||
push(@row, _surround($order->{'entrydate'}));
|
||||
push(@row, _surround($order->{'datereceived'}));
|
||||
push(@row, _surround($order->{'order_internalnote'}));
|
||||
push(@row, _surround($order->{'order_vendornote'}));
|
||||
push(@rows, \@row);
|
||||
}
|
||||
|
||||
my @totalrow;
|
||||
for(1..9){push(@totalrow, "")};
|
||||
push(@totalrow, _surround($total_quantity));
|
||||
push(@totalrow, _surround($total_rrp));
|
||||
push(@totalrow, _surround($total_ecost));
|
||||
|
||||
my $csvTemplate = C4::Templates::gettemplate('reports/csv/orders_by_budget.tt', 'intranet', $query);
|
||||
$csvTemplate->param(sep => $sep, rows => \@rows, totalrow => \@totalrow);
|
||||
print $csvTemplate->output;
|
||||
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
# Set file export choices
|
||||
my @outputFormats = ('CSV');
|
||||
my @CSVdelimiters =(',','#',qw(; tabulation \\ /));
|
||||
|
||||
# getting all budgets
|
||||
my $budgets = GetBudgetHierarchy;
|
||||
my $budgetloop = [];
|
||||
foreach my $budget (@{$budgets}) {
|
||||
push @{$budgetloop},{
|
||||
value => $budget->{budget_id},
|
||||
description => $budget->{budget_name},
|
||||
period => $budget->{budget_period_description},
|
||||
active => $budget->{budget_period_active},
|
||||
};
|
||||
}
|
||||
@{$budgetloop} =sort { uc( $a->{description}) cmp uc( $b->{description}) } @{$budgetloop};
|
||||
$template->param( budgetsloop => \@{$budgetloop},
|
||||
outputFormatloop => \@outputFormats,
|
||||
delimiterloop => \@CSVdelimiters,
|
||||
delimiterPreference => C4::Context->preference('delimiter')
|
||||
);
|
||||
}
|
||||
|
||||
# writing the template
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
@ -19,7 +19,7 @@ use Modern::Perl;
|
|||
|
||||
use POSIX qw(strftime);
|
||||
|
||||
use Test::More tests => 87;
|
||||
use Test::More tests => 91;
|
||||
use Koha::Database;
|
||||
|
||||
BEGIN {
|
||||
|
|
@ -147,10 +147,18 @@ ok(
|
|||
);
|
||||
ok( $basket = GetBasket($basketno), "GetBasket($basketno) returns $basket" );
|
||||
|
||||
my $bpid=AddBudgetPeriod({
|
||||
budget_period_startdate => '2008-01-01'
|
||||
, budget_period_enddate => '2008-12-31'
|
||||
, budget_period_active => 1
|
||||
, budget_period_description => "MAPERI"
|
||||
});
|
||||
|
||||
my $budgetid = C4::Budgets::AddBudget(
|
||||
{
|
||||
budget_code => "budget_code_test_getordersbybib",
|
||||
budget_name => "budget_name_test_getordersbybib",
|
||||
budget_period_id => $bpid,
|
||||
}
|
||||
);
|
||||
my $budget = C4::Budgets::GetBudget($budgetid);
|
||||
|
|
@ -934,3 +942,15 @@ ok((not defined GetBiblio($order4->{biblionumber})), "biblio does not exist anym
|
|||
# End of tests for DelOrder
|
||||
|
||||
$schema->storage->txn_rollback();
|
||||
# Budget reports
|
||||
#my @report = GetBudgetReport(1);
|
||||
#ok(@report >= 1, "GetBudgetReport OK");
|
||||
|
||||
my $all_count = scalar GetBudgetsReport();
|
||||
ok($all_count >= 1, "GetBudgetReport OK");
|
||||
|
||||
my $active_count = scalar GetBudgetsReport(1);
|
||||
ok($active_count >= 1 , "GetBudgetsReport(1) OK");
|
||||
|
||||
ok($all_count == scalar GetBudgetsReport(), "GetBudgetReport returns inactive budget period acquisitions.");
|
||||
ok($active_count >= scalar GetBudgetsReport(1), "GetBudgetReport doesn't return inactive budget period acquisitions.");
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/perl
|
||||
use Modern::Perl;
|
||||
use Test::More tests => 130;
|
||||
|
||||
use Test::More tests => 133;
|
||||
BEGIN {
|
||||
use_ok('C4::Budgets')
|
||||
}
|
||||
|
|
@ -468,6 +468,15 @@ for my $budget (@$budget_hierarchy_cloned) {
|
|||
is( $number_of_budgets_not_reset, 0,
|
||||
'CloneBudgetPeriod has reset all budgets (funds)' );
|
||||
|
||||
#GetBudgetsByActivity
|
||||
my $result=C4::Budgets::GetBudgetsByActivity(1);
|
||||
isnt( $result, undef ,'GetBudgetsByActivity return correct value with parameter 1');
|
||||
$result=C4::Budgets::GetBudgetsByActivity(0);
|
||||
isnt( $result, undef ,'GetBudgetsByActivity return correct value with parameter 0');
|
||||
$result=C4::Budgets::GetBudgetsByActivity();
|
||||
is( $result, 0 , 'GetBudgetsByActivity return 0 with none parameter or other 0 or 1' );
|
||||
DelBudget($budget_id);
|
||||
DelBudgetPeriod($bpid);
|
||||
|
||||
# CloneBudgetPeriod with param amount_change_*
|
||||
$budget_period_id_cloned = C4::Budgets::CloneBudgetPeriod(
|
||||
|
|
|
|||
Loading…
Reference in New Issue