Bug 14805: Allow the user to delete multiple batches
authorJoonas Kylmälä <j.kylmala@gmail.com>
Fri, 11 Sep 2015 13:55:07 +0000 (13:55 +0000)
committerTomas Cohen Arazi <tomascohen@theke.io>
Wed, 4 Nov 2015 14:13:31 +0000 (11:13 -0300)
Allows the user to delete multiple patron card batches.

Test plan:

1. Add first some 20 batches
2. Go to the edit page of some X batch by first selecting from the
   batch list the batch you want to edit and then after that by clicking
   edit.
3. Delete one batch by selecting one batch and then clicking delete.
4. Select 0 batches and click delete, notice you cannot delete.
5. Select 0 batches and click edit, notice you cannot edit.
6. Select 2 batches and click edit, notice you cannot edit.
7. Apply patch
8. Check that steps from 2-6 work like they worked before.
   (and add more batches so that you have ~20 of them)
9. Select 2 batches and click delete. Make sure they are deleted.
10. Try to figure out some anomalies this patch might have caused.

Sponsored-by: Vaara-kirjastot
Followed test plan, works as expected.
Signed-off-by: Marc Véron <veron@veron.ch>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
koha-tmpl/intranet-tmpl/prog/en/modules/patroncards/manage.tt
patroncards/manage.pl

index 58feb0e..40ea92b 100644 (file)
         //<![CDATA[
             var MSG_CONFIRM_DELETE = _("Are you sure you want to delete this?");
             function DeleteConfirm() {
-                var element_id = selected_layout("delete");
-                if (element_id>-1) {
-                    var msg = _("Are you sure you want to delete %s %s?").format("[% PROCESS translate_card_element element=card_element %]", element_id);
-                    var answer = confirm(msg);
-                    if (answer) {
-                        window.location = "/cgi-bin/koha/patroncards/manage.pl?op=delete&card_element=[% card_element %]&element_id=" + element_id;
-                    }
-                    else {
-                        return; // abort delete
+                var element_ids = selected_layouts("delete");
+
+                var answer;
+                if (element_ids.length > 1) {
+                    var msg = _("Are you sure you want to delete %s batches?").format(element_ids.length);
+                    answer = confirm(msg);
+                } else if (element_ids.length == 1) {
+                    var msg = _("Are you sure you want to delete %s %s?").format("[% PROCESS translate_card_element element=card_element %]", element_ids[0]);
+                    answer = confirm(msg);
+                }
+
+                if (answer) {
+                    var elements = "";
+                    for (var i = 0; i < element_ids.length; i++) {
+                        if (element_ids[i] > -1) {
+                            elements += element_ids[i] + ","
+                        }
+                        else {
+                            return;     // no layout selected
+                        }
                     }
+
+                    window.location = "/cgi-bin/koha/patroncards/manage.pl?op=delete&card_element=[% card_element %]&element_id=" + elements;
                 }
                 else {
-                    return;     // no layout selected
-                };
+                    return; // abort delete
+                }
+
             };
+
             function Edit() {
-                var element_id = selected_layout("edit");
+                var element_id = selected_layouts("edit");
                 if (element_id>-1) {
                     window.location = "/cgi-bin/koha/patroncards/edit-[% card_element %].pl?op=edit&element_id=" + element_id;
                 }
@@ -67,7 +82,7 @@
                 }
                 return GB_showCenter(_("Export patron cards"), "/cgi-bin/koha/patroncards/print.pl?" + getstr, 700, 800);
             };
-            function selected_layout(op) {
+            function selected_layouts(op) {
                 var selected = new Array;
                 if (document.layouts.action.length) {
                     for (i=0;i<document.layouts.action.length;i++){
                             selected.push(i);
                         }
                     };
-                    if (selected.length == 1) {
-                        return(document.layouts.action[selected[0]].value);
+                    if (selected.length == 1 || (op == "delete" && selected.length >= 1)) {
+                        if (op == "delete") {
+                            var selectedDelete = new Array;
+                            for (i = 0; i < selected.length; i++) {
+                                selectedDelete.push(document.layouts.action[selected[i]].value);
+                            }
+                            return(selectedDelete);
+                        } else {
+                            // op == 'edit' returns only the object and not list
+                            return(document.layouts.action[selected[0]].value);
+                        }
+                    }
+                    else if (selected.length < 1) {
+                        if (op == "edit") {
+                            alert(_("Please select one %s to %s.").format("[% PROCESS translate_card_element element=card_element %]", op));
+                            return (-1);
+                        } else {
+                            alert(_("Please select at least one %s to %s.").format("[% PROCESS translate_card_element element=card_element %]", op));
+                            return (-1);
+                        }
                     }
                     else {
                         alert(_("Please select only one %s to %s.").format("[% PROCESS translate_card_element element=card_element %]", op));
index 316bb90..bd420b9 100755 (executable)
@@ -80,11 +80,14 @@ my $branch_code = ($card_element eq 'batch' ? C4::Context->userenv->{'branch'} :
 
 if ($op eq 'delete') {
     my $err = 0;
-    if          ($card_element eq 'layout')    {$err = C4::Patroncards::Layout::delete(layout_id => $element_id);}
-    elsif       ($card_element eq 'template')  {$err = C4::Patroncards::Template::delete(template_id => $element_id);}
-    elsif       ($card_element eq 'profile')   {$err = C4::Patroncards::Profile::delete(profile_id => $element_id);}
-    elsif       ($card_element eq 'batch')     {$err = C4::Labels::Batch::delete(batch_id => $element_id, branch_code => $branch_code);}
-    else                                       {warn sprintf("Unknown card element passed in for delete operation: %s.",$card_element); $errstr = 202;}
+    my @element_ids = split(/,/, $element_id);
+    foreach my $element_id (@element_ids) {
+        if          ($card_element eq 'layout')    {$err = C4::Patroncards::Layout::delete(layout_id => $element_id);}
+        elsif       ($card_element eq 'template')  {$err = C4::Patroncards::Template::delete(template_id => $element_id);}
+        elsif       ($card_element eq 'profile')   {$err = C4::Patroncards::Profile::delete(profile_id => $element_id);}
+        elsif       ($card_element eq 'batch')     {$err = C4::Labels::Batch::delete(batch_id => $element_id, branch_code => $branch_code);}
+        else                                       {warn sprintf("Unknown card element passed in for delete operation: %s.",$card_element); $errstr = 202;}
+    }
     print $cgi->redirect("manage.pl?card_element=$card_element" . ($err ? "&error=102" : ''));
     exit;
 }