Koha/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tt
Jonathan Druart 56f3c32fe3 Bug 11578: Improve the funds list view
The current funds list view does not allow to search in the table and
the ergonomics of the page is quite bad.

This patch add the datatables plugin combined to the treetable plugin in
order to offer a better view of the budgets/funds.

Test plan:
- Verify there is no regression on this page: try to add/modify/delete a
fund and a budget.
- Verify the funds hierarchy is correctly displayed.
- Filter the funds using the branch and the budget filters.

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
2014-05-03 18:09:59 +00:00

640 lines
23 KiB
Text

[% INCLUDE 'doc-head-open.inc' %]
<title>Koha &rsaquo; Administration &rsaquo; Funds[% IF op == 'add_form' %] &rsaquo; [% IF ( budget_id ) %]Modify fund[% IF ( budget_name ) %] '[% budget_name %]'[% END %][% ELSE %]Add fund [% END %][% END %]</title>
[% INCLUDE 'doc-head-close.inc' %]
<script type="text/javascript">
//<![CDATA[
var MSG_BUDGET_PARENT_ALLOCATION = "- " + _("Fund amount exceeds parent allocation") + "\n";
var MSG_BUDGET_PERIOD_ALLOCATION = "- " + _("Fund amount exceeds period allocation") + "\n";
var MSG_PARENT_BENEATH_BUDGET = "- " + _("New budget-parent is beneath budget") + "\n";
//]]>
</script>
<script type="text/javascript" src="[% themelang %]/js/acq.js"></script>
[% IF op == 'add_form' %]
<script type="text/javascript">
//<![CDATA[
function userPopup() {
window.open("/cgi-bin/koha/admin/aqbudget_user_search.pl?type=user",
'PatronPopup',
'width=740,height=450,location=yes,toolbar=no,'
+ 'scrollbars=yes,resize=yes'
);
}
function ownerPopup() {
window.open("/cgi-bin/koha/admin/aqbudget_user_search.pl?type=owner",
'PatronPopup',
'width=740,height=450,location=yes,toolbar=no,'
+ 'scrollbars=yes,resize=yes'
);
}
function edit_owner(borrowernumber, surname, firstname) {
$('#budget_owner_name').empty();
$('#budget_owner_id').val('');
if (borrowernumber) {
var ownerlink = '<a href="/cgi-bin/koha/members/moremember.pl'
+ '?borrowernumber=' + borrowernumber + '">'
+ firstname + ' ' + surname + '</a>';
$('#budget_owner_name').html(ownerlink);
$('#budget_owner_id').val(borrowernumber);
}
}
function ownerRemove() {
edit_owner(0);
}
function add_user(borrowernumber, surname, firstname) {
var ids = $("#budget_users_id").val().split(':');
if(borrowernumber && ids.indexOf(borrowernumber) == -1) {
var li = '<li id="user_' + borrowernumber + '">'
+ '<a href="/cgi-bin/koha/members/moremember.pl?borrowernumber='
+ borrowernumber + '">' + firstname + ' ' + surname
+ '</a> [<a style="cursor:pointer"'
+ 'onclick="del_user(' + borrowernumber +')">Remove</a>]</li>';
$(li).insertBefore("li#add_user_button");
ids.push(borrowernumber);
$("#budget_users_id").val(ids.join(':'));
} else {
return -1;
}
return 0;
}
function del_user(borrowernumber) {
var ids = $("#budget_users_id").val().split(':');
if (borrowernumber) {
var idx = ids.indexOf(borrowernumber+'');
if (idx != -1) {
ids.splice(idx, 1);
$("#budget_users_id").val(ids.join(':'));
$("li#user_" + borrowernumber).remove();
}
}
}
function Check(f) {
var ok=1;
var _alertString="";
var alertString2;
if (!(isNotNull(f.budget_code,1))) {
_alertString += _("- Budget code cannot be blank") + "\n";
}
if (!(isNotNull(f.budget_name,1))) {
_alertString += _("- Budget name cannot be blank") + "\n";
}
if (!(isNotNull(f.budget_amount,1))) {
_alertString += _("- Budget amount cannot be blank") + "\n";
}
var budgetId;
if (typeof(f.budget_id ) != "undefined") {
budgetId = f.budget_id.value
}
var newBudgetParent;
// hack to test if selected parent_id in scrolling-list...
// if value == 'undef' its got a selected_parent :/
if(f.budget_parent_id){
var chkAdd = f.budget_parent_id.value ;
if ( typeof(chkAdd ) != "undefined") {
newBudgetParent = f.budget_parent_id.value
} else {
newBudgetParent = f.budget_parent_id.item(0).value
}
if (budgetId > 0) { ; //its a mod ...
// if parent == curent-budget, fail...
if ( newBudgetParent == budgetId ) {
_alertString += _("- Budget parent is current budget") + "\n";
}
else if (newBudgetParent) {
var result = checkBudgetParent( budgetId , newBudgetParent );
if (result) {
_alertString += result;
}
}
}
}
// else do lookup
var budgetTotal = Math.abs(f.budget_amount.value);
var result = budgetExceedsParent (budgetTotal, budgetId, newBudgetParent, f.budget_period_id.value)
if (result) {
_alertString += result;
}
if (_alertString.length==0) {
document.Aform.submit();
} else {
alertString2 = _("Form not submitted because of the following problem(s)");
alertString2 += "\n------------------------------------------------------------------------------------\n\n";
alertString2 += _alertString;
alert(alertString2);
}
}
//]]>
</script>
[% ELSIF op == 'list' %]
<link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" />
[% INCLUDE 'datatables.inc' %]
<link href="[% interface %]/lib/jquery/plugins/treetable/stylesheets/jquery.treetable.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="[% interface %]/lib/jquery/plugins/treetable/jquery.treetable.js"></script>
<script type="text/javascript">
//<![CDATA[
//
$(document).ready(function() {
var oTable = $("#budgeth").dataTable($.extend(true, {}, dataTablesDefaults, {
"fnDrawCallback": function ( oSettings ) {
if ( oSettings.aiDisplay.length == 0 )
{
return;
}
var nTrs = $('#budgeth tbody tr');
var iColspan = nTrs[0].getElementsByTagName('td').length;
var sLastGroup = "";
for ( var i=0 ; i<nTrs.length ; i++ )
{
var iDisplayIndex = oSettings._iDisplayStart + i;
var sGroup = oSettings.aoData[ oSettings.aiDisplay[iDisplayIndex] ]._aData[0];
if ( sGroup != sLastGroup )
{
var nGroup = document.createElement( 'tr' );
var nCell = document.createElement( 'td' );
nCell.colSpan = iColspan;
nCell.className = "group";
nCell.innerHTML = sGroup;
nGroup.appendChild( nCell );
nTrs[i].parentNode.insertBefore( nGroup, nTrs[i] );
sLastGroup = sGroup;
}
}
},
"aoColumnDefs": [
{ "bVisible": false, "aTargets": [ 0 ] }
],
"aaSortingFixed": [[ 0, 'asc' ]],
"aaSorting": [[ 1, 'asc' ]],
'bSort': false,
'bPaginate': false,
"bAutoWidth": false
}));
$(oTable).treetable({
expandable: true
});
$(oTable).treetable('expandAll');
$("#expand_all").click(function(e){
e.preventDefault();
$(oTable).treetable('expandAll');
});
$("#collapse_all").click(function(e){
e.preventDefault();
$(oTable).treetable('collapseAll');
});
$("#filterbutton").click(function() {
$("#fundfilters").slideToggle(0);
});
});
//]]>
</script>
[% END %]
</head>
<body id="admin_aqbudgets" class="admin">
[% INCLUDE 'header.inc' %]
[% INCLUDE 'budgets-admin-search.inc' %]
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo;
<a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> &rsaquo; <a href="/cgi-bin/koha/admin/aqbudgetperiods.pl">Budgets</a> &rsaquo; [% IF op == 'list' %][% IF budget_period_id %]Funds for '[% budget_period_description %]'[% ELSE %]All funds[% END %][% END %]
[% IF op == 'add_form' %]
<a href="/cgi-bin/koha/admin/aqbudgets.pl?budget_period_id=[% budget_period_id %]">Funds</a> &rsaquo; [% IF ( budget_id ) %]Modify fund[% IF ( budget_name ) %] '[% budget_name %]'[% END %][% ELSE %]Add fund[% END %]
[% END %]
[% IF op == 'delete_confirm' %]
<a href="/cgi-bin/koha/admin/aqbudgets.pl">Funds</a> &rsaquo; Delete fund?
[% END %]
</div>
<div id="doc3" class="yui-t2">
<div id="bd">
<div id="yui-main">
<div class="yui-b" id="content">
[% UNLESS op == 'delete_confirm' %][% INCLUDE 'budgets-admin-toolbar.inc' %][% END %]
[% IF (error_not_authorised_to_modify) %]
<div class="error">
<p>You are not authorized to modify this fund</p>
</div>
[% END %]
[% IF op == 'list' %]
<h1>
[% IF budget_period_id %]
Funds for '[% budget_period_description %]'
[% ELSE %]
All funds
[% END %]
</h1>
[% INCLUDE 'budgets-active-currency.inc' %]
[% IF budgets %]
<table id="budgeth">
<caption>
<span class="actions"><a href="#" id="expand_all">Expand all</a>
| <a href="#" id="collapse_all">Collapse all</a></span>
</caption>
<thead>
<tr>
<th>Budget period description</th>
<th>Fund code</th>
<th>Fund name</th>
<th>Base-level allocated</th>
<th>Base-level ordered</th>
<th>Total ordered</th>
<th>Base-level spent</th>
<th>Total spent</th>
<th>Base-level available</th>
<th>Total available</th>
<th>Actions</th>
</tr>
</thead>
<tfoot>
<tr>
<th></th>
<th colspan="2" style="text-align: left;" nowrap="nowrap">Period allocated [% IF ( budget_period_total ) %][% budget_period_total %][% END %] </th>
<th nowrap="nowrap" class="data"> [% period_alloc_total %]</th>
<th></th>
<th class="data">[% ordered_total %]</th>
<th></th>
<th class="data">[% spent_total %]</th>
<th></th>
<th class="data">[% available_total %]</th>
<th></th>
</tr>
</tfoot>
<tbody>
[% FOREACH budget IN budgets %]
<tr data-tt-id="[% budget.budget_id %]" [% IF ( budget.budget_parent_id ) %]data-tt-parent-id="[% budget.budget_parent_id %]"[% END %]>
<td>Budget [% budget.budget_period_description %]</td>
<td>[% budget.budget_code_indent %]</td>
<td>[% budget.budget_name %]</td>
<td class="data">
[% IF budget.budget_parent_id %]
<span class="child_fund_amount">[% budget.budget_amount %]</span>
[% ELSE %]
[% budget.budget_amount %]
[% END %]
</td>
<td class="data">
[% IF budget.budget_parent_id %]
<span class="child_fund_amount">[% budget.budget_ordered %]</span>
[% ELSE %]
[% budget.budget_ordered %]
[% END %]
</td>
<td class="data">
[% IF budget.budget_parent_id %]
<span class="child_fund_amount">[% budget.total_ordered %]</span>
[% ELSE %]
[% budget.total_ordered %]
[% END %]
</td>
<td class="data">
[% IF budget.budget_parent_id %]
<span class="child_fund_amount">[% budget.budget_spent %]</span>
[% ELSE %]
[% budget.budget_spent %]
[% END %]
</td>
<td class="data">
[% IF budget.budget_parent_id %]
<span class="child_fund_amount">[% budget.total_spent %]</span>
[% ELSE %]
[% budget.total_spent %]
[% END %]
</td>
[% BLOCK colorcellvalue %]
[% IF parent %]
[% IF (value > 0) %]
<span class="child_fund_amount" style="color: green;">
[% ELSIF (value < 0) %]
<span class="child_fund_amount" style="color: red;">
[% ELSE %]
<span class="child_fund_amount">
[% END %]
[% ELSE %]
[% IF (value > 0) %]
<span style="color: green;">
[% ELSIF (value < 0) %]
<span style="color: red;">
[% ELSE %]
<span>
[% END %]
[% END %]
[% text %]
</span>
[% END %]
<td class="data">
[% INCLUDE colorcellvalue value=budget.budget_remaining text=budget.budget_remaining_display parent=budget.budget_parent_id %]
</td>
<td class="data">
[% INCLUDE colorcellvalue value=budget.total_remaining text=budget.total_remaining_display parent=budget.budget_parent_id %]
</td>
[% IF ( budget.budget_lock ) %]
<td> <span style="color: gray;"> Edit Delete </span> </td>
[% ELSE %]
<td>
<a href="/cgi-bin/koha/admin/aqbudgets.pl?op=add_form&amp;budget_id=[% budget.budget_id %]&amp;budget_period_id=[% budget.budget_period_id %]" >Edit</a>
<a href="/cgi-bin/koha/admin/aqbudgets.pl?op=delete_confirm&amp;budget_id=[% budget.budget_id %]&amp;budget_period_id=[% budget.budget_period_id %]">Delete</a>
<a href="/cgi-bin/koha/admin/aqbudgets.pl?op=add_form&amp;budget_parent_id=[% budget.budget_id %]&amp;budget_period_id=[% budget.budget_period_id %]">Add child fund</a>
</td>
[% END %]
</tr>
[% END %]
</tbody>
</table>
[% ELSE %]
No fund found
[% END %]
[% END %] <!-- list -->
<!-- ********************************************************************************************** -->
<!-- create add/mod entry form -->
[% IF op == 'add_form' && !error_not_authorised_to_modify %]
<form action="/cgi-bin/koha/admin/aqbudgets.pl" name="Aform" method="post">
<fieldset class="rows">
<legend>[% IF ( budget_id ) %]Modify[% ELSE %]Add[% END %] Fund
[% IF ( budget_period_description ) %]
[% budget_name %] for Budget '[% budget_period_description %]'
[% END %]
</legend>
<input type="hidden" name="op" value="add_validate" />
<input type="hidden" name="checked" value="0" />
<ol>
[% IF ( budget_parent_id ) %]
<li>
<span class="label">Fund parent: </span>
[% budget_parent_name %]
[% budget_parent_id %] - [% budget_parent_name %]
<input type="hidden" name="budget_parent_id" value="[% budget_parent_id %]" />
</li>
[% END %]
<li>
<label class="required" for="budget_code">Fund code: </label>
<input type="text" name="budget_code" id="budget_code" value="[% budget_code %]" size="30" />
</li>
<li>
<label class="required" for="budget_name">Fund name: </label>
<input type="text" name="budget_name" id="budget_name" value="[% budget_name %]" size="60" />
</li>
<li>
<label style="white-space: nowrap;" for="budget_amount" class="required">Amount: </label>
<input type="text" name="budget_amount" id="budget_amount" value="[% budget_amount %]" size="8" />
</li>
<li>
<label for="budget_encumb">Warning at (%): </label>
<input type="text" name="budget_encumb" id="budget_encumb" value="[% budget_encumb %]" size="10" />
<span style="color:grey">0 to disable</span>
</li>
<li>
<label for="budget_expend">Warning at (amount): </label>
<input type="text" name="budget_expend" id="budget_expend" value="[% budget_expend %]" size="10" /><input type="hidden" name="budget_owner_id" id="budget_owner_id" value="[% budget_owner_id %]" />
<span style="color:grey">0 to disable</span>
</li>
<li>
<span class="label">Owner: </span>
<span id="budget_owner_name">
<a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% budget_owner_id %]">
[% budget_owner_name %]
</a>
</span>
<input type="hidden" name="budget_owner_id" id="budget_owner_id"
value="[% budget_owner_id %]" />
<!-- FIXME: hardcoded button positions :/ -->
<input type="button" id="edit_owner" value="Edit owner"
onclick="ownerPopup(); return false;" />
<input type="button" id="remove_owner" value="Remove owner"
onclick="ownerRemove(); return false;" />
</li>
<li>
<span class="label">Users:</span>
<ul style="float:left;" id="budget_users">
[% FOREACH user IN budget_users %]
<li id="user_[% user.borrowernumber %]">
<a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% user.borrowernumber %]">
[% user.firstname %] [% user.surname %]
</a>
[<a style="cursor:pointer"
onclick="del_user([% user.borrowernumber %])">Remove</a>]
</li>
[% END %]
<li id="add_user_button">
<input type="button" onclick="userPopup()" value="Add users" />
</li>
</ul>
<input type="hidden" name="budget_users_ids" id="budget_users_id" value="[% budget_users_ids %]" />
<li>
<label for="budget_branchcode">Library: </label>
<select name="budget_branchcode" id="budget_branchcode">
<option value=""></option>
[% FOREACH branchloop_selec IN branchloop_select %]
[% UNLESS ( branchloop_selec.selected ) %] <option value="[% branchloop_selec.value %]" > [% ELSE %] <option value="[% branchloop_selec.value %]" selected="selected"> [% END %] [% branchloop_selec.value %]-[% branchloop_selec.branchname %]</option>
[% END %]
</select>
</li>
<li>
<label for="budget_permission">Restrict access to: </label>
<select name="budget_permission" id="budget_permission">
[% IF ( budget_perm_0 ) %]
<option value="0" selected="selected">
[% ELSE %]
<option value="0">
[% END %]
None
</option>
[% IF ( budget_perm_1 ) %]
<option value="1" selected="selected">
[% ELSE %]
<option value="1">
[% END %]
Owner
</option>
[% IF ( budget_perm_3) %]
<option value="3" selected="selected">
[% ELSE %]
<option value="3">
[% END %]
Owner and users
</option>
[% IF ( budget_perm_2 ) %]
<option value="2" selected="selected">
[% ELSE %]
<option value="2">
[% END %]
Owner, users and library
</option>
</select>
</li>
<li>
<label for="budget_notes">Notes: </label>
<textarea name="budget_notes" id="budget_notes" cols="80" rows="6">[% budget_notes %]</textarea>
</li>
<li>
<label style="white-space: nowrap;" for="authorised_value_category1">Statistic 1 done on: </label>
<select name="sort1_authcat" id="authorised_value_category1">
<option value=""></option>
[% FOREACH authorised_value_categories IN authorised_value_categories1 %]
[% IF ( authorised_value_categories.selected ) %]
<option value="[% authorised_value_categories.category %]" selected="selected">
[% authorised_value_categories.category %]
</option>
[% ELSE %]
<option value="[% authorised_value_categories.category %]">
[% authorised_value_categories.category %]
</option>
[% END %]
[% END %]
</select>
</li>
<li>
<label style="white-space: nowrap;" for="authorised_value_category2">Statistic 2 done on: </label>
<select name="sort2_authcat" id="authorised_value_category2">
<option value=""></option>
[% FOREACH authorised_value_categories IN authorised_value_categories2 %]
[% IF ( authorised_value_categories.selected ) %]
<option value="[% authorised_value_categories.category %]" selected="selected">
[% authorised_value_categories.category %]
</option>
[% ELSE %]
<option value="[% authorised_value_categories.category %]">
[% authorised_value_categories.category %]
</option>
[% END %]
[% END %]
</select>
</li>
</ol>
[% IF ( budget_id ) %]
<input type="hidden" name="budget_id" value="[% budget_id %]" />
[% END %]
</fieldset>
<fieldset class="action">
<input type="submit" value="Submit" onclick="Check(this.form); return false;" /> <a class="cancel" href="/cgi-bin/koha/admin/aqbudgets.pl">Cancel</a>
<input type="hidden" name="budget_period_id" value="[% budget_period_id %]" />
</fieldset>
</form>
[% END %] <!-- add_form -->
[% IF op == 'delete_confirm' %]
<div class="dialog alert"> <h3>Delete fund [% budget_name %]?</h3>
<table>
<tr>
<th scope="row">Fund amount:</th>
<td>[% budget_amount %]</td>
</tr>
</table>
<form action="/cgi-bin/koha/admin/aqbudgets.pl" method="post">
<input type="hidden" name="op" value="delete_confirmed" />
<input type="hidden" name="budget_id" value="[% budget_id %]" />
<input type="hidden" name="budget_period_id" value="[% budget_period_id %]" />
<input type="submit" value="Delete" class="approve" />
</form>
<form action="/cgi-bin/koha/admin/aqbudgets.pl" method="get">
<input type="submit" class="deny" value="Cancel" />
</form>
</div>
[% END %]
</div>
</div>
<div class="yui-b">
[% IF op == 'list' %]
<form action="/cgi-bin/koha/admin/aqbudgets.pl" method="get">
<a href="#" id="filterbutton">Filters</a>
<fieldset class="brief" id="fundfilters">
<h4>Fund filters</h4>
<ol>
<li>
<label for="filter_budgetbranch2">Library: </label>
<select name="filter_budgetbranch" id="filter_budgetbranch2" style="width:10em;">
<option value=""></option>
[% FOREACH branchloo IN branchloop %]
[% UNLESS ( branchloo.selected ) %]<option value="[% branchloo.value %]">
[% ELSE %]<option value="[% branchloo.value %]" selected="selected">[% END %]
[% branchloo.branchname %]</option>
[% END %]
</select>
</li>
<li class="radio">
<label for="show_mine">Show my funds only</label>
[% IF ( show_mine ) %]
<input type="checkbox" id="show_mine" name="show_mine" value="1" checked="checked" />
[% ELSE %]
<input type="checkbox" id="show_mine" name="show_mine" value="1" />
[% END %]
</li>
[% IF periods %]
<li>
<label for="periods">Budget:</label>
<select id="periods" name="budget_period_id">
<option value="">All budgets</option>
[% FOR period IN periods %]
[% IF budget_period_id && period.budget_period_id == budget_period_id %]
<option value="[% period.budget_period_id %]" selected="selected">[% period.budget_period_description %]</option>
[% ELSE %]
<option value="[% period.budget_period_id %]">[% period.budget_period_description %]</option>
[% END %]
[% END %]
</select>
</li>
[% END %]
</ol>
<input type="hidden" name="op" value="list" />
<input type="submit" class="submit" name="filter" value="Go" />
</fieldset>
</form>[% END %]
[% INCLUDE 'acquisitions-menu.inc' %]
</div>
</div>
[% INCLUDE 'intranet-bottom.inc' %]