Bug 7369: Duplicate item and add dropdown buttons for item actions
authorNick Clemens <nick@quecheelibrary.org>
Sat, 21 Mar 2015 16:27:04 +0000 (12:27 -0400)
committerTomas Cohen Arazi <tomascohen@theke.io>
Mon, 9 Nov 2015 17:56:09 +0000 (14:56 -0300)
This patch adds a link to duplicate existing items on the edit items screen

To test:
1 - Apply patch
2 - navigate to the edit items screen for a record with existing items
3 - click the duplicate link and ensure item info but not barcode are carried over
4 - save the item and ensure it is added correctly
5 - check that all previous functionality on page works as before

Signed-off-by: Mark Tompsett <mtompset@hotmail.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

cataloguing/additem.pl
koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt

index b74605a..db09984 100755 (executable)
@@ -585,6 +585,40 @@ if ($op eq "additem") {
     $itemrecord = C4::Items::GetMarcItem($biblionumber,$itemnumber);
     $nextop = "saveitem";
 #-------------------------------------------------------------------------------
+} elsif ($op eq "dupeitem") {
+#-------------------------------------------------------------------------------
+# retrieve item if exist => then, it's a modif
+    $itemrecord = C4::Items::GetMarcItem($biblionumber,$itemnumber);
+    if (C4::Context->preference('autoBarcode') eq 'incremental') {
+        $itemrecord = _increment_barcode($itemrecord, $frameworkcode);
+    }
+    else {
+        # we have to clear the barcode field in the duplicate item record to make way for the new one generated by the javascript plugin
+        my ($tagfield,$tagsubfield) = &GetMarcFromKohaField("items.barcode",$frameworkcode);
+        my $fieldItem = $itemrecord->field($tagfield);
+        $itemrecord->delete_field($fieldItem);
+        $fieldItem->delete_subfields($tagsubfield);
+        $itemrecord->insert_fields_ordered($fieldItem);
+    }
+
+    #check for hidden subfield and remove them for the duplicated item
+    foreach my $field ($itemrecord->fields()){
+        my $tag = $field->{_tag};
+        foreach my $subfield ($field->subfields()){
+            my $subfieldtag = $subfield->[0];
+            if (subfield_is_koha_internal_p($subfieldtag) || $tagslib->{$tag}->{$subfieldtag}->{'tab'} ne "10"
+            ||  abs($tagslib->{$tag}->{$subfieldtag}->{hidden})>4 ){
+                my $fieldItem = $itemrecord->field($tag);
+                $itemrecord->delete_field($fieldItem);
+                $fieldItem->delete_subfields($subfieldtag);
+                $itemrecord->insert_fields_ordered($fieldItem);
+            }
+        }
+    }
+
+    $itemrecord = removeFieldsForPrefill($itemrecord) if ($prefillitem);
+    $nextop = "additem";
+#-------------------------------------------------------------------------------
 } elsif ($op eq "delitem") {
 #-------------------------------------------------------------------------------
     # check that there is no issue on this item before deletion.
index 1b0e317..c84cf60 100644 (file)
@@ -172,16 +172,25 @@ function confirm_deletion() {
                       <td>&nbsp;</td>
                     [% ELSE %]
                       <td>
+                          <div class="dropdown">
+                          <a class="btn btn-mini dropdown-toggle" id="itemactions[% item_loo.itemnumber %]" role="button" data-toggle="dropdown" href="#">
+                              Actions <b class="caret"></b>
+                          </a>
+                          <ul class="dropdown-menu" role="menu" aria-labelledby="itemactions[% item_loo.itemnumber %]">
+
                         [% IF ( item_loo.hostitemflag ) %]
-                          <a href="additem.pl?op=edititem&amp;biblionumber=[% item_loo.hostbiblionumber %]&amp;itemnumber=[% item_loo.itemnumber %]#edititem">Edit in host</a> &nbsp; <a class="delete" href="/cgi-bin/koha/cataloguing/additem.pl?op=delinkitem&amp;biblionumber=[% biblionumber %]&amp;hostitemnumber=[% item_loo.itemnumber %]&searchid=[% searchid %]">Delink</a>
+                              <li><a href="additem.pl?op=edititem&amp;biblionumber=[% item_loo.hostbiblionumber %]&amp;itemnumber=[% item_loo.itemnumber %]#edititem">Edit in host</a> &nbsp; <a class="delete" href="/cgi-bin/koha/cataloguing/additem.pl?op=delinkitem&amp;biblionumber=[% biblionumber %]&amp;hostitemnumber=[% item_loo.itemnumber %]&amp;searchid=[% searchid %]">Delink</a></li>
                         [% ELSE %]
-                          <a href="additem.pl?op=edititem&amp;biblionumber=[% biblionumber %]&amp;itemnumber=[% item_loo.itemnumber %]&searchid=[% searchid %]#edititem">Edit</a>
+                              <li><a href="additem.pl?op=edititem&amp;biblionumber=[% biblionumber %]&amp;itemnumber=[% item_loo.itemnumber %]&amp;searchid=[% searchid %]#edititem">Edit</a></li>
+                              <li><a href="additem.pl?op=dupeitem&amp;biblionumber=[% biblionumber %]&amp;itemnumber=[% item_loo.itemnumber %]&amp;searchid=[% searchid %]#additema">Duplicate</a></li>
                           [% IF ( item_loo.countanalytics ) %]
-                            <a href="/cgi-bin/koha/catalogue/search.pl?idx=hi&amp;q=% item_loo.itemnumber %]">View analytics</a>
+                              <li><a href="/cgi-bin/koha/catalogue/search.pl?idx=hi&amp;q=% item_loo.itemnumber %]">View analytics</a></li>
                           [% ELSE %]
-                            <a class="delete" href="/cgi-bin/koha/cataloguing/additem.pl?op=delitem&amp;biblionumber=[% biblionumber %]&amp;itemnumber=[% item_loo.itemnumber %]&searchid=[% searchid %]" onclick="return confirm_deletion();">Delete</a>
+                              <li><a class="delete" href="/cgi-bin/koha/cataloguing/additem.pl?op=delitem&amp;biblionumber=[% biblionumber %]&amp;itemnumber=[% item_loo.itemnumber %]&amp;searchid=[% searchid %]" onclick="return_confirm_deletion();">Delete</a></li>
                           [% END %]
                         [% END %]
+                          </ul>
+                          </div>
                       </td>
                     [% END %]
                 [% FOREACH item_valu IN item_loo.item_value %]