X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;ds=sidebyside;f=admin%2Faqbudgetperiods.pl;h=64b333a4850c4bf99417b8c36b0638a770dcc61b;hb=00bd409a9a4e7576a2d5f613e7e86e26758ee287;hp=08d3a3644592615fd7ea30582e2fa81121faf3b1;hpb=4ec7a86abe22297103e1dfaf4314b0290828656b;p=koha_gimpoz diff --git a/admin/aqbudgetperiods.pl b/admin/aqbudgetperiods.pl index 08d3a36445..64b333a485 100755 --- a/admin/aqbudgetperiods.pl +++ b/admin/aqbudgetperiods.pl @@ -14,9 +14,9 @@ # 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 +# You should have received a copy of the GNU General Public License along +# with Koha; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. =head1 admin/aqbudgetperiods.pl @@ -37,11 +37,16 @@ script to administer the budget periods table - we show the record having primkey=$primkey and ask for deletion validation form if $op=delete_confirmed - we delete the record having primkey=$primkey + if $op=duplicate_form + - displays the duplication of budget period form (allowing specification of dates) + if $op=duplicate_budget + - we perform the duplication of the budget period specified as budget_period_id =cut ## modules use strict; +#use warnings; FIXME - Bug 2505 use Number::Format qw(format_price); use CGI; use List::Util qw/min/; @@ -53,6 +58,7 @@ use C4::Output; use C4::Acquisition; use C4::Budgets; use C4::Debug; +use C4::SQLHelper; my $dbh = C4::Context->dbh; @@ -60,14 +66,13 @@ my $input = new CGI; my $searchfield = $input->param('searchfield'); my $budget_period_id = $input->param('budget_period_id'); -my $budget_period_active = $input->param('budget_period_active'); -my $budget_period_locked = $input->param('budget_period_locked'); -my $op = $input->param('op'); +my $op = $input->param('op')||"else"; +my $budget_period_hashref= $input->Vars; #my $sort1_authcat = $input->param('sort1_authcat'); #my $sort2_authcat = $input->param('sort2_authcat'); -my $pagesize = 10; +my $pagesize = 20; $searchfield =~ s/\,//g; my ($template, $borrowernumber, $cookie, $staff_flags ) = get_template_and_user( @@ -80,14 +85,11 @@ my ($template, $borrowernumber, $cookie, $staff_flags ) = get_template_and_user( } ); -my $script_name = "/cgi-bin/koha/admin/aqbudgetperiods.pl"; # ??? - -my ( $count, $results ) = GetBudgetPeriods(); -### $count -$template->param( period_button_only => 1 ) if ($count == 0) ; my $cur = GetCurrency(); -$template->param( cur => $cur->{symbol} ); +$template->param( symbol => $cur->{symbol}, + currency => $cur->{currency} + ); my $cur_format = C4::Context->preference("CurrencyFormat"); my $num; @@ -108,96 +110,45 @@ if ( $cur_format eq 'US' ) { ); } -if ($op) { $template->param( $op => 1 ); } -else { $template->param( 'else' => 1 ); } # ADD OR MODIFY A BUDGET PERIOD - BUILD SCREEN if ( $op eq 'add_form' ) { ## add or modify a budget period (preparation) ## get information about the budget period that must be modified -# my ( $default, $sort1_authcat_dropbox, $sort1_default, $sort2_default ); -# my ( $default, t ); if ($budget_period_id) { # MOD - my $data; - my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare(qq| - SELECT * FROM aqbudgetperiods - WHERE budget_period_id=? | ); - $sth->execute($budget_period_id); - $data = $sth->fetchrow_hashref; - $sth->finish; - + my $budgetperiod_hash=GetBudgetPeriod($budget_period_id); # get dropboxes + FormatData($budgetperiod_hash); + + my $editnum = new Number::Format( + 'int_curr_symbol' => '', + 'thousands_sep' => '', + 'mon_thousands_sep' => '', + 'mon_decimal_point' => '.' + ); + + $$budgetperiod_hash{budget_period_total}= $editnum->format_price($$budgetperiod_hash{'budget_period_total'}); $template->param( - budget_period_id => $budget_period_id, - budget_period_startdate => format_date( $data->{'budget_period_startdate'} ), - budget_period_enddate => format_date( $data->{'budget_period_enddate'} ), - budget_period_description => $data->{'budget_period_description'}, - budget_period_total => sprintf ("%.2f", $data->{'budget_period_total'} ), - budget_period_active => $data->{'budget_period_active'}, - budget_period_locked => $data->{'budget_period_locked'}, + %$budgetperiod_hash ); } # IF-MOD - $template->param( DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), ); + $template->param( DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),); } elsif ( $op eq 'add_validate' ) { ## add or modify a budget period (confirmation) - ## update budget period data - if ( $budget_period_id ne '' ) { - my $query = ' - UPDATE aqbudgetperiods - SET budget_period_startdate = ? - , budget_period_enddate = ? - , budget_period_description = ? - , budget_period_total = ? - , budget_period_locked = ? - WHERE budget_period_id = ? - '; - - my $sth = $dbh->prepare($query); - $sth->execute( - $input->param('budget_period_startdate') ? format_date_in_iso( $input->param('budget_period_startdate') ) : undef, - $input->param('budget_period_enddate') ? format_date_in_iso( $input->param('budget_period_enddate') ) : undef, - $input->param('budget_period_description') ? $input->param('budget_period_description') : undef, - $input->param('budget_period_total') ? $input->param('budget_period_total') : undef, - $input->param('budget_period_locked') ? $input->param('budget_period_locked') : undef, - $input->param('budget_period_id'), - ); - - # IF PASSED ACTIVE - THEN SET IT IN DB TOO. - set_active($budget_period_id) if ( $budget_period_active == 1 ); - - } else { # ELSE ITS AN ADD - my $query = " - INSERT INTO aqbudgetperiods ( - budget_period_id - , budget_period_startdate - , budget_period_enddate - , budget_period_total - , budget_period_description - , budget_period_locked ) - VALUES (?,?,?,?,?,? ); - "; - my $sth = $dbh->prepare($query); - $sth->execute( - $budget_period_id, - $input->param('budget_period_startdate') ? format_date_in_iso( $input->param('budget_period_startdate') ) : undef, - $input->param('budget_period_enddate') ? format_date_in_iso( $input->param('budget_period_enddate') ) : undef, - $input->param('budget_period_total') ? $input->param('budget_period_total') : undef, - $input->param('budget_period_description') ? $input->param('budget_period_description') : undef, - $input->param('budget_period_locked') ? $input->param('budget_period_locked') : undef, - ); - $budget_period_id = $dbh->last_insert_id( undef, undef, 'aqbudgetperiods', undef ); - set_active($budget_period_id) if ( $budget_period_active == 1 ); - } - - print "Content-Type: text/html\n\n"; #YUCK - # output_html_with_http_headers $input, $cookie, $template->output; # FIXME: THIS WOULD BE NICER THAN THE PREVIOUS PRINT - exit; + ## update budget period data + if ( $budget_period_id ne '' ) { + $$budget_period_hashref{$_}||=0 for qw(budget_period_active budget_period_locked); + my $status=ModBudgetPeriod($budget_period_hashref); + } + else { # ELSE ITS AN ADD + my $budget_period_id=AddBudgetPeriod($budget_period_hashref); + } + $op='else'; } #-------------------------------------------------- @@ -208,39 +159,96 @@ elsif ( $op eq 'delete_confirm' ) { my $total = 0; my $data = GetBudgetPeriod( $budget_period_id); + FormatData($data); + $$data{'budget_period_total'}=$num->format_price( $data->{'budget_period_total'}); $template->param( - budget_period_id => $budget_period_id, - budget_period_startdate => format_date($data->{'budget_period_startdate'}), - budget_period_enddate => format_date($data->{'budget_period_enddate'}), - budget_period_total => $num->format_price( $data->{'budget_period_total'} ) - -# budget_period_active => $data->{'budget_period_active'}, -# budget_period_description => $data->{'budget_period_description'}, -# template => C4::Context->preference('template'), ## ??!? + %$data ); } elsif ( $op eq 'delete_confirmed' ) { ## delete the budget period record - my $dbh = C4::Context->dbh; - my $budget_period_id = uc( $input->param('budget_period_id') ); - my $sth = $dbh->prepare("DELETE FROM aqbudgetperiods WHERE budget_period_id=?"); - $sth->execute($budget_period_id); - $sth->finish; - print "Content-Type: text/html\n\n"; - exit; + my $data = GetBudgetPeriod( $budget_period_id); + DelBudgetPeriod($budget_period_id); + $op='else'; +} + +# display the form for duplicating +elsif ( $op eq 'duplicate_form'){ + $template->param( + DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), + 'duplicate_form' => '1', + 'budget_period_id' => $budget_period_id, + ); } -else { +# handle the actual duplication +elsif ( $op eq 'duplicate_budget' ){ + die "please specify a budget period id\n" if( !defined $budget_period_id || $budget_period_id eq '' ); + my $startdate = $input->param('budget_period_startdate'); + my $enddate = $input->param('budget_period_enddate'); + + my $data = GetBudgetPeriod( $budget_period_id); + + $data->{'budget_period_startdate'} = $startdate; + $data->{'budget_period_enddate'} = $enddate; + delete $data->{'budget_period_id'}; + my $new_budget_period_id = C4::SQLHelper::InsertInTable('aqbudgetperiods', $data); + + my $tree = GetBudgetHierarchy( $budget_period_id ); + + # hash mapping old ids to new + my %old_new; + # hash mapping old parent ids to list of new children ids + # only store a child here if the parents old id isnt in the old_new map + # when the parent is found, this map will be used, and then the entry removed and their id placed in old_new + my %parent_children; + + for my $entry( @$tree ){ + die "serious errors, parent period $budget_period_id doesnt match child ", $entry->{'budget_period_id'}, "\n" if( $entry->{'budget_period_id'} != $budget_period_id ); + my $orphan = 0; # set to 1 if we need to make an entry in parent_children + my $old_id = delete $entry->{'budget_id'}; + my $parent_id = delete $entry->{'budget_parent_id'}; + $entry->{'budget_period_id'} = $new_budget_period_id; + + if( !defined $parent_id ){ + } elsif( defined $parent_id && $parent_id eq '' ){ + } elsif( defined $old_new{$parent_id} ){ + # set parent id now + $entry->{'budget_parent_id'} = $old_new{$parent_id}; + } else { + # make an entry in parent_children + $parent_children{$parent_id} = [] unless defined $parent_children{$parent_id}; + $orphan = 1; + } + + # write it to db + my $new_id = C4::SQLHelper::InsertInTable('aqbudgets', $entry); + $old_new{$old_id} = $new_id; + push @{$parent_children{$parent_id}}, $new_id if $orphan; + + # deal with any children + if( defined $parent_children{$old_id} ){ + # tell my children my new id + for my $child ( @{$parent_children{$old_id}} ){ + C4::SQLHelper::UpdateInTable('aqcudgets', [ 'budget_id' => $child, 'budget_parent_id' => $new_id ]); + } + delete $parent_children{$old_id}; + } + } + + # display the list of budgets + $op = 'else'; +} # DEFAULT - DISPLAY AQPERIODS TABLE # ------------------------------------------------------------------- # display the list of budget periods - my ( $count, $results ) = GetBudgetPeriods(); + my $results = GetBudgetPeriods(); + $template->param( period_button_only => 1 ) unless (@$results) ; my $page = $input->param('page') || 1; my $first = ( $page - 1 ) * $pagesize; - # if we are on the last page, the number of the last word to display # must not exceed the length of the results array my $last = min( $first + $pagesize - 1, scalar @{$results} - 1, ); @@ -248,34 +256,16 @@ else { my @period_loop; foreach my $result ( @{$results}[ $first .. $last ] ) { my $budgetperiod = $result; - $budgetperiod->{'budget_period_startdate'} = format_date( $budgetperiod->{'budget_period_startdate'} ); - $budgetperiod->{'budget_period_enddate'} = format_date( $budgetperiod->{'budget_period_enddate'} ); + FormatData($budgetperiod); $budgetperiod->{'budget_period_total'} = $num->format_price( $budgetperiod->{'budget_period_total'} ); - $budgetperiod->{toggle} = ( $toggle++ % 2 eq 0 ? 1 : 0 ); $budgetperiod->{budget_active} = 1; push( @period_loop, $budgetperiod ); } - my $budget_period_dropbox = GetBudgetPeriodsDropbox(); $template->param( - budget_period_dropbox => $budget_period_dropbox, period_loop => \@period_loop, -# pagination_bar => pagination_bar( $script_name, -# getnbpages( scalar @{$results}, -# $pagesize ), $page, 'page' ) + pagination_bar => pagination_bar("aqbudgetperiods.pl",getnbpages(scalar(@$results),$pagesize),$page), ); -} +$template->param($op=>1); output_html_with_http_headers $input, $cookie, $template->output; - -sub set_active { - my $sth = $dbh->do( - "UPDATE aqbudgetperiods - SET budget_period_active = 0 " - ); - my $sth = $dbh->do( - "UPDATE aqbudgetperiods - SET budget_period_active = 1 - WHERE budget_period_id = $budget_period_id" - ); -}