Bug 12905: funds with children could not be deleted
authorJonathan Druart <jonathan.druart@biblibre.com>
Mon, 10 Nov 2014 09:45:25 +0000 (10:45 +0100)
committerTomas Cohen Arazi <tomascohen@gmail.com>
Thu, 5 Feb 2015 17:53:19 +0000 (14:53 -0300)
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 <paola.rossi@cineca.it>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
admin/aqbudgets.pl
installer/data/mysql/updatedatabase.pl
koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tt

index 4ea2b9d..b32f925 100755 (executable)
@@ -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};
index 4653c02..891ee25 100755 (executable)
@@ -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)
index 2adf469..fe67194 100644 (file)
@@ -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.");
+        });
     });
 //]]>
 </script>
@@ -398,7 +403,11 @@ var MSG_PARENT_BENEATH_BUDGET = "- " + _("New budget-parent is beneath budget")
                 </a>
                 <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="budgetactions[% budget.budget_id %]_[% budget.budget_period_id %]">
                     <li><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></li>
-                    <li><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></li>
+                    [% IF budget.budget_has_children %]
+                        <li class="disabled"><a href="#" class="deletefund-disabled" data-toggle="tooltip" data-placement="left" title="This fund has children">Delete</a></li>
+                    [% ELSE %]
+                        <li><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></li>
+                    [% END %]
                     <li><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></li>
                 </ul>
             </div>