From 1d5a2672aa0297e6a8be23439715a2036f636389 Mon Sep 17 00:00:00 2001 From: Jonathan Druart <jonathan.druart@bugs.koha-community.org> Date: Thu, 29 Oct 2015 11:43:29 +0000 Subject: [PATCH] Bug 15084: use Koha::Acquisition::Currenc[y|ies] in admin/currency Signed-off-by: Josef Moravec <josef.moravec@gmail.com> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> --- admin/currency.pl | 262 +++++++-------------- .../prog/en/modules/admin/currency.tt | 173 +++++++------- 2 files changed, 168 insertions(+), 267 deletions(-) diff --git a/admin/currency.pl b/admin/currency.pl index f62f761..9c8f825 100755 --- a/admin/currency.pl +++ b/admin/currency.pl @@ -1,26 +1,8 @@ #!/usr/bin/perl -#script to administer the aqbudget table -#written 20/02/2002 by paul.poulain@free.fr -# This software is placed under the gnu General Public License, v2 (http://www.gnu.org/licenses/gpl.html) - -# ALGO : -# this script use an $op to know what to do. -# if $op is empty or none of the above values, -# - the default screen is build (with all records, or filtered datas). -# - the user can clic on add, modify or delete record. -# if $op=add_form -# - if primkey exists, this is a modification,so we read the $primkey record -# - builds the add/modify form -# if $op=add_validate -# - the user has just send datas, so we create/modify the record -# if $op=delete_form -# - we show the record having primkey=$primkey and ask for deletion validation form -# if $op=delete_confirm -# - we delete the record having primkey=$primkey - - # Copyright 2000-2002 Katipo Communications +# Copyright 2002 Paul Poulain +# Copyright Koha Development Team # # This file is part of Koha. # @@ -37,180 +19,112 @@ # You should have received a copy of the GNU General Public License # along with Koha; if not, see <http://www.gnu.org/licenses>. -use strict; -use warnings; +use Modern::Perl; use CGI qw ( -utf8 ); -use C4::Context; use C4::Auth; +use C4::Context; use C4::Output; -use C4::Budgets qw/GetCurrency GetCurrencies/; - -our $input = CGI->new; -my $searchfield = $input->param('searchfield') || $input->param('description') || q{}; -our $offset = $input->param('offset') || 0; -my $op = $input->param('op') || q{}; -my $script_name = '/cgi-bin/koha/admin/currency.pl'; -our $pagesize = 20; -our ($template, $loggedinuser, $cookie) = get_template_and_user({ - template_name => 'admin/currency.tt', - query => $input, - type => 'intranet', - flagsrequired => {parameters => 'parameters_remaining_permissions'}, - authnotrequired => 0, -}); - -$searchfield=~ s/\,//g; - - -$template->param(searchfield => $searchfield, - script_name => $script_name); - -our $dbh = C4::Context->dbh; +use Koha::Acquisition::Currency; +use Koha::Acquisition::Currencies; + +my $input = CGI->new; +my $searchfield = $input->param('searchfield') || $input->param('description') || q{}; +my $currency_code = $input->param('currency_code'); +my $op = $input->param('op') || 'list'; +my @messages; + +our ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { template_name => 'admin/currency.tt', + query => $input, + type => 'intranet', + authnotrequired => 0, + flagsrequired => { parameters => 'parameters_remaining_permissions' }, + } +); if ( $op eq 'add_form' ) { - add_form($searchfield); -} elsif ( $op eq 'save' ) { - add_validate(); - print $input->redirect('/cgi-bin/koha/admin/currency.pl'); -} elsif ( $op eq 'delete_confirm' ) { - delete_confirm($searchfield); -} elsif ( $op eq 'delete_confirmed' ) { - delete_currency($searchfield); -} else { - default_path($searchfield); -} - -output_html_with_http_headers $input, $cookie, $template->output; - -sub default_path { - my $searchfield = shift; - $template->param( else => 1 ); - - my @currencies = GetCurrencies(); - if ($searchfield) { - @currencies = grep { $_->{currency} =~ m/^$searchfield/o } @currencies; + my $currency; + if ($currency_code) { + $currency = Koha::Acquisition::Currencies->find($currency_code); } - my $end_of_page = $offset + $pagesize; - if ( $end_of_page > @currencies ) { - $end_of_page = @currencies; + + $template->param( currency => $currency, ); +} elsif ( $op eq 'add_validate' ) { + my $currency_code = $input->param('currency_code'); + my $symbol = $input->param('symbol'); + my $isocode = $input->param('isocode'); + my $rate = $input->param('rate'); + my $active = $input->param('active'); + my $is_a_modif = $input->param('is_a_modif'); + + if ($is_a_modif) { + my $currency = Koha::Acquisition::Currencies->find($currency_code); + $currency->symbol($symbol); + $currency->isocode($isocode); + $currency->rate($rate); + $currency->active($active); + eval { $currency->store; }; + if ($@) { + push @messages, { type => 'error', code => 'error_on_update' }; + } else { + push @messages, { type => 'message', code => 'success_on_update' }; + } } else { - $template->param( - ltcount => 1, - nextpage => $end_of_page + my $currency = Koha::Acquisition::Currency->new( + { currency => $currency_code, + symbol => $symbol, + isocode => $isocode, + rate => $rate, + active => $active, + } ); + eval { $currency->store; }; + if ($@) { + push @messages, { type => 'error', code => 'error_on_insert' }; + } else { + push @messages, { type => 'message', code => 'success_on_insert' }; + } } - $end_of_page--; - my @display_curr = @currencies[ $offset .. $end_of_page ]; - my $activecurrency = GetCurrency(); + $searchfield = q||; + $op = 'list'; +} elsif ( $op eq 'delete_confirm' ) { + my $currency = Koha::Acquisition::Currencies->find($currency_code); + # TODO rewrite the following when Koha::Acquisition::Orders will use Koha::Objects + my $schema = Koha::Database->schema; + my $nb_of_orders = $schema->resultset('Aqorder')->search( { currency => $currency->currency } )->count; $template->param( - loop => \@display_curr, - activecurrency => defined $activecurrency, + currency => $currency, + nb_of_orders => $nb_of_orders, ); +} elsif ( $op eq 'delete' ) { + my $currency = Koha::Acquisition::Currencies->find($currency_code); + my $deleted = eval { $currency->delete; }; - if ( $offset > 0 ) { - $template->param( - offsetgtzero => 1, - prevpage => $offset - $pagesize - ); + if ( $@ or not $deleted ) { + push @messages, { type => 'error', code => 'error_on_delete' }; + } else { + push @messages, { type => 'message', code => 'success_on_delete' }; } - return; -} - -sub delete_currency { - my $curr = shift; - - # TODO This should be a method of Currency - # also what about any orders using this currency - $template->param( delete_confirmed => 1 ); - $dbh->do( 'delete from currency where currency=?', {}, $curr ); - return; + $op = 'list'; } -sub delete_confirm { - my $curr = shift; - - $template->param( delete_confirm => 1 ); - my $total_row = $dbh->selectrow_hashref( - 'select count(*) as total from aqbooksellers where currency=?', - {}, $curr ); - - my $curr_ref = $dbh->selectrow_hashref( - 'select currency,rate from currency where currency=?', - {}, $curr ); - - if ( $total_row->{total} ) { - $template->param( totalgtzero => 1 ); - } +if ( $op eq 'list' ) { + $searchfield =~ s/\,//g; + my $currencies = Koha::Acquisition::Currencies->search( { currency => { -like => "$searchfield%" } } ); + my $no_active_currency = not Koha::Acquisition::Currencies->search( { active => 1 } )->count; $template->param( - rate => $curr_ref->{rate}, - total => $total_row->{total} + currencies => $currencies, + no_active_currency => $no_active_currency, ); - - return; -} - -sub add_form { - my $curr = shift; - - $template->param( add_form => 1 ); - - #---- if primkey exists, it's a modify action, so read values to modify... - my $date; - if ($curr) { - my $curr_rec = - $dbh->selectrow_hashref( 'select * from currency where currency=?', - {}, $curr ); - for ( keys %{$curr_rec} ) { - if($_ eq "timestamp"){ $date = $curr_rec->{$_}; } - $template->param( $_ => $curr_rec->{$_} ); - } - } - - return; } -sub add_validate { - $template->param( add_validate => 1 ); - - my $rec = { - rate => $input->param('rate'), - symbol => $input->param('symbol') || q{}, - isocode => $input->param('isocode') || q{}, - active => $input->param('active') || 0, - currency => $input->param('currency'), - }; - - if ( $rec->{active} == 1 ) { - $dbh->do('UPDATE currency SET active = 0'); - } - - my ($row_count) = $dbh->selectrow_array( - 'select count(*) as count from currency where currency = ?', - {}, $input->param('currency') ); - if ($row_count) { - $dbh->do( -q|UPDATE currency SET rate = ?, symbol = ?, isocode = ?, active = ? WHERE currency = ? |, - {}, - $rec->{rate}, - $rec->{symbol}, - $rec->{isocode}, - $rec->{active}, - $rec->{currency} - ); - } else { - $dbh->do( -q|INSERT INTO currency (currency, rate, symbol, isocode, active) VALUES (?,?,?,?,?) |, - {}, - $rec->{currency}, - $rec->{rate}, - $rec->{symbol}, - $rec->{isocode}, - $rec->{active} - ); +$template->param( + searchfield => $searchfield, + messages => \@messages, + op => $op, +); - } - return; -} +output_html_with_http_headers $input, $cookie, $template->output; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/currency.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/currency.tt index 6c94bb2..8aefa41 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/currency.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/currency.tt @@ -2,10 +2,9 @@ [% USE ColumnsSettings %] [% INCLUDE 'doc-head-open.inc' %] <title>Koha › Administration › Currencies & Exchange rates › -[% IF ( add_form ) %][% IF ( searchfield ) %]Modify currency '[% searchfield %]'[% ELSE %]New currency[% END %][% END %] -[% IF ( delete_confirm ) %]Confirm deletion of currency '[% searchfield %]'[% END %] -[% IF ( delete_confirmed ) %]Currency deleted[% END %] -[% IF ( else ) %]Currencies[% END %]</title> +[% IF op == 'add_form' %][% IF currency %]Modify currency '[% currency.currency %]'[% ELSE %]New currency[% END %][% END %] +[% IF op == 'delete_' %]Confirm deletion of currency '[% searchfield %]'[% END %] +[% IF op == 'list' %]Currencies[% END %]</title> [% INCLUDE 'doc-head-close.inc' %] <link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" /> [% INCLUDE 'datatables.inc' %] @@ -51,10 +50,10 @@ -<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> › <a href="/cgi-bin/koha/admin/currency.pl">Currencies & Exchange rates</a> › [% IF ( add_form ) %][% IF ( searchfield ) %]Modify currency '[% searchfield %]'[% ELSE %]New currency[% END %][% END %] -[% IF ( delete_confirm ) %]Confirm deletion of currency '<span class="ex">[% searchfield %]</span>'[% END %] -[% IF ( delete_confirmed ) %]Currency deleted[% END %] -[% IF ( else ) %]Currencies[% END %] +<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> › <a href="/cgi-bin/koha/admin/currency.pl">Currencies & Exchange rates</a> › [% IF op == 'add_form' %][% IF currency %]Modify currency '[% currency.currency %]'[% ELSE %]New currency[% END %][% END %] +[% IF op == 'delete_confirm' %]Confirm deletion of currency '<span class="ex">[% searchfield %]</span>' +[% ELSIF op == 'list' %]Currencies +[% END %] </div> <div id="doc3" class="yui-t2"> @@ -62,59 +61,61 @@ <div id="bd"> <div id="yui-main"> <div class="yui-b"> -[% IF ( else ) %] +[% IF op == 'list' %] <div id="toolbar" class="btn-toolbar"> - <a class="btn btn-small" id="newcurrency" href="[% script_name %]?op=add_form"><i class="fa fa-plus"></i> New currency</a> + <a class="btn btn-small" id="newcurrency" href="/cgi-bin/koha/admin/currency.pl?op=add_form"><i class="fa fa-plus"></i> New currency</a> </div> [% END %] -[% IF ( add_form ) %] +[% IF op == 'add_form' %] -<form action="[% script_name %]" name="Aform" method="post" class="validated"> - <input type="hidden" name="op" value="save" /> +<form action="/cgi-bin/koha/admin/currency.pl" name="Aform" method="post" class="validated"> + <input type="hidden" name="op" value="add_validate" /> <fieldset class="rows"> - <legend>[% IF ( searchfield ) %] - Modify currency - [% ELSE %] - New currency - [% END %]</legend> - <ol> - <li> - [% IF ( searchfield ) %] - <span class="label">Currency: </span> - <input type="hidden" name="currency" id="currency" value="[% searchfield %]" />[% searchfield %] - [% ELSE %] - <label for="currency" class="required">Currency: </label> - <input type="text" name="currency" id="currency" size="50" maxlength="50" onblur="toUC(this);" required="required" class="required" /> <span class="required">Required</span> - [% END %] - </li> - <li> - <label for="rate" class="required">Rate: </label> - <input type="text" name="rate" id="rate" size="10" maxlength="10" value="[% rate %]" required="required" class="required" /> <span class="required">Required</span> - </li> - <li> - <label for="symbol" class="required">Symbol: </label> - <input type="text" name="symbol" id="symbol" size="5" maxlength="5" value="[% symbol %]" required="required" class="required" /> <span class="required">Required</span> - </li> - <li> - <label for="isocode">ISO code: </label> - <input type="text" name="isocode" id="isocode" size="5" maxlength="5" value="[% isocode %]" /> - </li> - <li> - <span class="label">Last updated: </span>[% timestamp | $KohaDates %] - </li> - <li> - <label for="active">Active: </label> - [% IF ( active ) %] - <input type="checkbox" id="active" name="active" value="1" checked="checked" /> + <legend> + [% IF currency %] + Modify currency [% ELSE %] - <input type="checkbox" id="active" name="active" value="1" /> + New currency [% END %] - <span id="hint" class="hint"></span> - </li> - + </legend> + <ol> + <li> + [% IF currency %] + <span class="label">Currency: </span> + <input type="hidden" name="is_a_modif" value="1" /> + <input type="hidden" name="currency_code" id="currency" value="[% currency.currency %]" />[% currency.currency %] + [% ELSE %] + <label for="currency_code" class="required">Currency: </label> + <input type="text" name="currency_code" id="currency_code" size="50" maxlength="50" onblur="toUC(this);" required="required" class="required" /> <span class="required">Required</span> + [% END %] + </li> + <li> + <label for="rate" class="required">Rate: </label> + <input type="text" name="rate" id="rate" size="10" maxlength="10" value="[% currency.rate %]" required="required" class="required" /> <span class="required">Required</span> + </li> + <li> + <label for="symbol" class="required">Symbol: </label> + <input type="text" name="symbol" id="symbol" size="5" maxlength="5" value="[% currency.symbol %]" required="required" class="required" /> <span class="required">Required</span> + </li> + <li> + <label for="isocode">ISO code: </label> + <input type="text" name="isocode" id="isocode" size="5" maxlength="5" value="[% currency.isocode %]" /> + </li> + <li> + <span class="label">Last updated: </span>[% currency.timestamp | $KohaDates %] + </li> + <li> + <label for="active">Active: </label> + [% IF currency.active %] + <input type="checkbox" id="active" name="active" value="1" checked="checked" /> + [% ELSE %] + <input type="checkbox" id="active" name="active" value="1" /> + [% END %] + <span id="hint" class="hint"></span> + </li> </ol> - </fieldset> + </fieldset> <fieldset class="action"> <input type="submit" value="Submit" /> @@ -124,53 +125,47 @@ [% END %] -[% IF ( delete_confirm ) %] - [% IF ( totalgtzero ) %] - <div class="dialog message"> - <h3>Cannot delete currency <span class="ex">'[% searchfield %]'</span></h3> - <p>This currency is used [% total %] times. Deletion not possible</p> - <form action="[% script_name %]" method="post"> +[% IF op =='delete_confirm' %] + [% IF nb_of_orders %] + <div class="dialog alert"> + <h3>Cannot delete currency <span class="ex">'[% currency.currency %]'</span></h3> + <p>This currency is used by [% nb_of_orders %] orders. Deletion not possible</p> + <form action="/cgi-bin/koha/admin/currency.pl" method="post"> <input type="submit" value="OK" class="approve" /> </form> </div> [% ELSE %] <div class="dialog alert"> - <h3>Confirm deletion of currency <span class="ex">'[% searchfield %]'</span></h3> + <h3>Confirm deletion of currency <span class="ex">'[% currency.currency %]'</span></h3> <table> <tr><th>Currency</th> - <td>[% searchfield %]</td> + <td>[% currency.currency %]</td> </tr> <tr><th>Rate</th> - <td>[% rate %]</td> + <td>[% currency.rate %]</td> </tr> </table> - <form action="[% script_name %]" method="post"> + <form action="/cgi-bin/koha/admin/currency.pl" method="post"> <input type="hidden" name="op" value="delete_confirmed" /> - <input type="hidden" name="searchfield" value="[% searchfield %]" /> + <input type="hidden" name="currency_code" value="[% currency.currency_code %]" /> <input type="submit" class="approve" value="Delete this currency" /> </form> - <form action="[% script_name %]" method="post"> + <form action="/cgi-bin/koha/admin/currency.pl" method="post"> <input type="submit" class="deny" value="No, do not delete" /> </form> </div> [% END %] [% END %] -[% IF ( delete_confirmed ) %] -<div class="dialog message"><h3>Currency deleted</h3> -<form action="[% script_name %]" method="post"> - <input type="submit" class="approve" value="OK" /> -</form></div> -[% END %] - -[% IF ( else ) %] +[% IF op == 'list' %] <h2>Currencies and exchange rates</h2> -[% IF ( loop ) %][% UNLESS ( activecurrency ) %]<div class="dialog alert"><h3>No active currency is defined</h3><p>Please edit one currency and mark it as active.</p></div>[% END %][% END %] - + [% IF currencies and no_active_currency %] + <div class="dialog alert"><h3>No active currency is defined</h3><p>Please edit one currency and mark it as active.</p></div> + [% END %] - [% IF ( searchfield ) %] + [% IF searchfield %] You searched for [% searchfield %]</span> [% END %] @@ -187,33 +182,25 @@ </tr> </thead> <tbody> - [% FOREACH loo IN loop %] + [% FOREACH currency IN currencies %] <tr> - <td>[% loo.currency %]</td> - <td>[% loo.rate %]</td> - <td>[% loo.symbol |html %]</td> - <td>[% loo.isocode |html %]</td> - <td><span title="[% loo.timestamp %]">[% loo.timestamp | $KohaDates %]</span></td> - <td style="color:green;">[% IF ( loo.active ) %]✓[% END %]</td> + <td>[% currency.currency %]</td> + <td>[% currency.rate %]</td> + <td>[% currency.symbol |html %]</td> + <td>[% currency.isocode |html %]</td> + <td><span title="[% currency.timestamp %]">[% currency.timestamp | $KohaDates %]</span></td> + <td style="color:green;">[% IF currency.active %]✓[% END %]</td> <td> - <a href="[% loo.script_name %]?op=add_form&searchfield=[% loo.currency %]">Edit</a> + <a href="/cgi-bin/koha/admin/currency.pl?op=add_form&currency_code=[% currency.currency %]">Edit</a> | - <a href="[% loo.script_name %]?op=delete_confirm&searchfield=[% loo.currency %]">Delete</a> + <a href="/cgi-bin/koha/admin/currency.pl?op=delete_confirm&currency_code=[% currency.currency %]">Delete</a> </td> </tr> [% END %] </tbody> </table> -<br /> - - [% IF ( offsetgtzero ) %] - <a href="[% script_name %]?offset=[% prevpage %]"><< Previous</a> - [% END %] - - [% IF ( ltcount ) %] - <a href="[% script_name %]?offset=[% nextpage %]">Next >></a> - [% END %] + <br /> <div class="hint"> <p> When importing MARC files via the staging tools, the tool will attempt to find and use the price of the currently active currency. -- 2.1.4