From 522e9c5861854fad7c9b292f75ebd19968f5b11c Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Mon, 10 Nov 2014 10:45:25 +0100 Subject: [PATCH] Bug 12905: funds with children could not be deleted The interface should prevent to delete funds with children. Otherwise the relationship is broken and problems occur: 1/ You don't see the orphan fund in the fund list 2/ You cannot edit the orphan fund amount ('Fund amount exceeds parent allocation'). This patch: - adds a JS check, template side - adds a check in the perl script (should never be true) - adds an updatedatabase check, in order to alert users with inconsistent data. Test plan: Verify you are not allow to delete a fund with children. Signed-off-by: Paola Rossi Signed-off-by: Kyle M Hall Signed-off-by: Tomas Cohen Arazi --- admin/aqbudgets.pl | 6 +++++ installer/data/mysql/updatedatabase.pl | 22 +++++++++++++++++++ .../prog/en/modules/admin/aqbudgets.tt | 11 +++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/admin/aqbudgets.pl b/admin/aqbudgets.pl index 4ea2b9d034..b32f925e24 100755 --- a/admin/aqbudgets.pl +++ b/admin/aqbudgets.pl @@ -231,6 +231,10 @@ if ($op eq 'add_form') { # END $OP eq DELETE_CONFIRM # called by delete_confirm, used to effectively confirm deletion of data in DB } elsif ( $op eq 'delete_confirmed' ) { + if ( BudgetHasChildren( $budget_id ) ) { + # We should never be here, the interface does not provide this action. + die("Delete a fund with children is not possible"); + } my $rc = DelBudget($budget_id); $op = 'list'; } elsif( $op eq 'add_validate' ) { @@ -330,6 +334,8 @@ if ( $op eq 'list' ) { @budget_hierarchy = reverse(@budget_hierarchy); $budget->{budget_hierarchy} = \@budget_hierarchy; + + $budget->{budget_has_children} = BudgetHasChildren( $budget->{budget_id} ); } my $budget_period_total = $period->{budget_period_total}; diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 4653c02e80..891ee2546f 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -9669,6 +9669,28 @@ if ( CheckVersion($DBversion) ) { SetVersion ($DBversion); } +$DBversion = "3.18.00.001"; +if ( CheckVersion($DBversion) ) { + my $orphan_budgets = $dbh->selectall_arrayref(q| + SELECT budget_id, budget_name, budget_code + FROM aqbudgets + WHERE budget_parent_id IS NOT NULL + AND budget_parent_id NOT IN ( + SELECT DISTINCT budget_id FROM aqbudgets + ) + |, { Slice => {} } ); + + if ( @$orphan_budgets ) { + for my $b ( @$orphan_budgets ) { + print "Fund $b->{budget_name} (code:$b->{budget_code}, id:$b->{budget_id}) does not have a parent, it may cause problem\n"; + } + print "Upgrade to $DBversion done (Bug 12905: Check budget integrity: FAIL)\n"; + } else { + print "Upgrade to $DBversion done (Bug 12905: Check budget integrity: OK)\n"; + } + SetVersion($DBversion); +} + =head1 FUNCTIONS =head2 TableExists($table) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tt index 2adf469c6d..fe67194e45 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tt @@ -225,6 +225,11 @@ var MSG_PARENT_BENEATH_BUDGET = "- " + _("New budget-parent is beneath budget") $("#filterbutton").click(function() { $("#fundfilters").slideToggle(0); }); + + $(".deletefund-disabled").on("click", function(e){ + e.preventDefault(); + alert("This fund has children. It cannot be deleted."); + }); }); //]]> @@ -398,7 +403,11 @@ var MSG_PARENT_BENEATH_BUDGET = "- " + _("New budget-parent is beneath budget") -- 2.39.5