Bugzilla – Attachment 29614 Details for
Bug 7498
Cloning a budget: enable change of description
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 7498 - Cloning a budget, enable change of description
Bug-7498---Cloning-a-budget-enable-change-of-descr.patch (text/plain), 10.78 KB, created by
Charles Farmer
on 2014-07-10 15:46:29 UTC
(
hide
)
Description:
Bug 7498 - Cloning a budget, enable change of description
Filename:
MIME Type:
Creator:
Charles Farmer
Created:
2014-07-10 15:46:29 UTC
Size:
10.78 KB
patch
obsolete
>From 7e08a6305d1eab33adb9e00be9345194abd525cb Mon Sep 17 00:00:00 2001 >From: charles <charles@inlibro.com> >Date: Thu, 10 Jul 2014 10:48:07 -0400 >Subject: [PATCH] Bug 7498 - Cloning a budget, enable change of description > >Patch sponsored by the CCSR ( http://www.ccsr.qc.ca ) > >This patch allows to enter a new name for the duplicate budget and adds an option to transfer the not received orders in the budget copy. > >Took the previous patch, adapted it to the current master branch and made the tests work. >--- > C4/Budgets.pm | 62 ++++++++++++++++++++ > admin/aqbudgetperiods.pl | 8 +++ > .../prog/en/modules/admin/aqbudgetperiods.tt | 10 ++++ > t/db_dependent/Budgets.t | 52 +++++++++++++--- > 4 files changed, 125 insertions(+), 7 deletions(-) > >diff --git a/C4/Budgets.pm b/C4/Budgets.pm >index 30b9079..d0d86da 100644 >--- a/C4/Budgets.pm >+++ b/C4/Budgets.pm >@@ -921,6 +921,68 @@ sub CanUserModifyBudget { > > # ------------------------------------------------------------------- > >+sub DuplicateBudget { >+ my ($budget_period_id, $startdate, $enddate, $budget_period_description, $budget_transfer_data) = @_; >+ die "please specify a budget period id\n" if( !defined $budget_period_id || $budget_period_id eq '' ); >+ >+ my $dbh = C4::Context->dbh; >+ my $data = GetBudgetPeriod( $budget_period_id); >+ >+ $data->{'budget_period_startdate'} = $startdate; >+ $data->{'budget_period_enddate'} = $enddate; >+ $data->{'budget_period_description'} = $budget_period_description; >+ 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; >+ >+ if ($budget_transfer_data == 1) { >+ #Transfers the unreceived orders from the previous fund to the new >+ my $query = " >+ UPDATE aqorders SET budget_id = ? >+ WHERE budget_id=? AND >+ quantityreceived = 0 AND >+ datecancellationprinted IS NULL"; >+ my $sth = $dbh->prepare($query); >+ $sth->execute($new_id, $old_id ); >+ } >+ } >+ >+ return $new_budget_period_id; >+} >+ >+# ------------------------------------------------------------------- >+ > =head2 GetCurrencies > > @currencies = &GetCurrencies; >diff --git a/admin/aqbudgetperiods.pl b/admin/aqbudgetperiods.pl >index d565746..7432b64 100755 >--- a/admin/aqbudgetperiods.pl >+++ b/admin/aqbudgetperiods.pl >@@ -176,9 +176,11 @@ elsif ( $op eq 'delete_confirmed' ) { > > # display the form for duplicating > elsif ( $op eq 'duplicate_form'){ >+ my $budgetperiod = GetBudgetPeriod($budget_period_id, $input); > $template->param( > 'duplicate_form' => '1', > 'budget_period_id' => $budget_period_id, >+ 'budgetperiod' => $budgetperiod, > ); > } > >@@ -186,6 +188,9 @@ elsif ( $op eq 'duplicate_form'){ > 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'} = $budget_period_hashref->{budget_period_startdate}; > $data->{'budget_period_enddate'} = $budget_period_hashref->{budget_period_enddate}; >@@ -236,6 +241,9 @@ elsif ( $op eq 'duplicate_budget' ){ > delete $parent_children{$old_id}; > } > } >+ my $budget_period_description = $input->param('budget_period_description'); >+ my $budget_transfer_data = $input->param('budget_transfer_data'); >+ C4::Budgets::DuplicateBudget($budget_period_id, $startdate, $enddate, $budget_period_description, $budget_transfer_data); > > # display the list of budgets > $op = 'else'; >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt >index 060c450..c1c6eed 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt >@@ -185,6 +185,16 @@ > <div class="hint">[% INCLUDE 'date-format.inc' %]</div> > </li> > >+ <li> >+ <label class="required" for="budget_period_description">Description</label> >+ <input type="text" id="budget_period_description" name="budget_period_description" value="[% budgetperiod.budget_period_description %]" /> >+ </li> >+ >+ <li> >+ <label for="budget_transfer_data">Transfer the ordered acquisitions</label> >+ <input type="checkbox" id="budget_transfer_data" name="budget_transfer_data" value="1" /> >+ </li> >+ > </ol> > </fieldset> > >diff --git a/t/db_dependent/Budgets.t b/t/db_dependent/Budgets.t >index 39e0de6..cf6f019 100755 >--- a/t/db_dependent/Budgets.t >+++ b/t/db_dependent/Budgets.t >@@ -1,5 +1,5 @@ > use Modern::Perl; >-use Test::More tests => 63; >+use Test::More tests => 75; > > BEGIN { > use_ok('C4::Budgets') >@@ -84,6 +84,26 @@ is( DelBudgetPeriod($bpid), 1, 'DelBudgetPeriod returns true' ); > $budgetperiods = GetBudgetPeriods(); > is( @$budgetperiods, 0, 'GetBudgetPeriods returns the correct number of budget periods' ); > >+if (C4::Context->preference('dateformat') eq "metric"){ >+ ok($bpid=AddBudgetPeriod( >+ { budget_period_startdate =>'01-01-2008' >+ , budget_period_enddate =>'31-12-2008' >+ , budget_period_description =>"MAPERI"}), >+ "AddBudgetPeriod returned $bpid"); >+ } elsif (C4::Context->preference('dateformat') eq "us"){ >+ ok($bpid=AddBudgetPeriod( >+ { budget_period_startdate =>'01-01-2008' >+ , budget_period_enddate =>'12-31-2008' >+ , budget_period_description =>"MAPERI"}), >+ "AddBudgetPeriod returned $bpid"); >+ } >+ else{ >+ ok($bpid=AddBudgetPeriod( >+ {budget_period_startdate=>'2008-01-01' >+ ,budget_period_enddate =>'2008-12-31' >+ ,budget_period_description =>"MAPERI" >+ }), >+ "AddBudgetPeriod returned $bpid"); > > # > # Budget : >@@ -110,7 +130,6 @@ is( $budget->{budget_name}, $my_budget->{budget_name}, 'AddBudget stores the bud > is( $budget->{budget_notes}, $my_budget->{budget_notes}, 'AddBudget stores the budget notes correctly' ); > is( $budget->{budget_period_id}, $my_budget->{budget_period_id}, 'AddBudget stores the budget period id correctly' ); > >- > $my_budget = { > budget_code => 'EFG', > budget_amount => '321.231000', >@@ -131,7 +150,6 @@ is( $budget->{budget_name}, $my_budget->{budget_name}, 'ModBudget updates the bu > is( $budget->{budget_notes}, $my_budget->{budget_notes}, 'ModBudget updates the budget notes correctly' ); > is( $budget->{budget_period_id}, $my_budget->{budget_period_id}, 'ModBudget updates the budget period id correctly' ); > >- > $budgets = GetBudgets(); > is( @$budgets, 1, 'GetBudgets returns the correct number of budgets' ); > is( $budgets->[0]->{budget_id}, $my_budget->{budget_id}, 'GetBudgets returns the budget id correctly' ); >@@ -148,7 +166,6 @@ is( @$budgets, 1, 'GetBudgets With Order OK' ); > $budgets = GetBudgets( {budget_period_id => GetBudgetPeriod($bpid)->{budget_period_id}}, {-asc => "budget_name"} ); > is( @$budgets, 1, 'GetBudgets With Order Getting Active budgetPeriod OK'); > >- > my $budget_name = GetBudgetName( $budget_id ); > is($budget_name, $my_budget->{budget_name}, "Test the GetBudgetName routine"); > >@@ -169,10 +186,29 @@ isnt( $second_budget_id, undef, 'AddBudget does not returns undef' ); > $budgets = GetBudgets( {budget_period_id => $bpid} ); > ok( $budgets->[0]->{budget_name} lt $budgets->[1]->{budget_name}, 'default sort order for GetBudgets is by name' ); > >-is( DelBudget($budget_id), 1, 'DelBudget returns true' ); >-$budgets = GetBudgets(); >-is( @$budgets, 1, 'GetBudgets returns the correct number of budget periods' ); >+my $new_bpid; >+ok($new_bpid = C4::Budgets::DuplicateBudget($bpid, '2009-01-01', '2009-12-31', 'MAPERI COPY'), >+ "Duplicate budget returned $new_bpid"); >+ >+my $budgetcpyp; >+ok($budgetcpyp = GetBudgetPeriod($new_bpid) ,"GetBudgetPeriod OK"); > >+is ($budgetcpyp->{'budget_period_startdate'}, '2009-01-01'); >+is ($budgetcpyp->{'budget_period_enddate'}, '2009-12-31'); >+is ($budgetcpyp->{'budget_period_description'}, 'MAPERI COPY'); >+ >+my $budgetscpy; >+ok($budgetscpy = GetBudgetHierarchy( $bpid )); >+is (scalar(@$budgetscpy), 2, '2 budgets for that budget period : the original and his child'); >+is (@$budgetscpy[0]->{'budget_code'}, 'EFG'); >+is (@$budgetscpy[0]->{'budget_amount'}, '321.231000'); >+is (@$budgetscpy[0]->{'budget_notes'}, 'This is a modified note'); >+is (@$budgetscpy[0]->{'budget_name'}, 'Modified name'); >+ >+my $budgetCount = @{GetBudgets()}; >+is( DelBudget($second_budget_id), 1, 'DelBudget returns true' ); >+$budgets = GetBudgets(); >+is( @$budgets, $budgetCount-1, 'GetBudgets returns the correct number of budget periods' ); > > # GetBudgetHierarchySpent and GetBudgetHierarchyOrdered > my $budget_period_total = 10_000; >@@ -352,3 +388,5 @@ for my $infos (@order_infos) { > is( GetBudgetHierarchySpent( $budget_id1 ), 160, "total spent for budget1 is 160" ); > is( GetBudgetHierarchySpent( $budget_id11 ), 100, "total spent for budget11 is 100" ); > is( GetBudgetHierarchySpent( $budget_id111 ), 20, "total spent for budget111 is 20" ); >+ >+} >-- >1.7.9.5
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 7498
:
17871
|
18341
|
18816
|
18817
|
29614
|
30562
|
30785
|
30827