Bug 23543: Adding Withdrawn to the Item Search
authorOwen Leonard <oleonard@myacpl.org>
Fri, 6 Sep 2019 15:37:43 +0000 (15:37 +0000)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Thu, 3 Oct 2019 09:53:11 +0000 (10:53 +0100)
This patch adds "Withdrawn" status to the item search form and item
search results.

To test you should have one or more items in your catalog which have a
'Withdrawn' status.

Perform an item search and limit to a widthdrawn status. Verify that the
search returns the correct results and that the withdrawn column in
search results shows the correct information.

Test the "Export results to CSV" button. The resulting file should
contain the correct data, including withdrawn status.

Signed-off-by: Joe Sikowitz <joe@flo.org>
Signed-off-by: David Roberts <david.roberts@ptfs-europe.com>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Kelly McElligott <kelly@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

catalogue/itemsearch.pl
koha-tmpl/intranet-tmpl/prog/en/includes/catalogue/itemsearch_item.csv.inc
koha-tmpl/intranet-tmpl/prog/en/includes/catalogue/itemsearch_item.json.inc
koha-tmpl/intranet-tmpl/prog/en/includes/csv_headers/catalogue/itemsearch.tt
koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/itemsearch.tt

index 36e22b6..090192e 100755 (executable)
@@ -106,6 +106,9 @@ my $location_values = $mss->count ? GetAuthorisedValues($mss->next->authorised_v
 $mss = Koha::MarcSubfieldStructures->search({ frameworkcode => '', kohafield => 'items.itemlost', authorised_value => [ -and => {'!=' => undef }, {'!=' => ''}] });
 my $itemlost_values = $mss->count ? GetAuthorisedValues($mss->next->authorised_value) : [];
 
+$mss = Koha::MarcSubfieldStructures->search({ frameworkcode => '', kohafield => 'items.withdrawn', authorised_value => [ -and => {'!=' => undef }, {'!=' => ''}] });
+my $withdrawn_values = $mss->count ? GetAuthorisedValues($mss->next->authorised_value) : [];
+
 if (scalar keys %params > 0) {
     # Parameters given, it's a search
 
@@ -114,7 +117,7 @@ if (scalar keys %params > 0) {
         filters => [],
     };
 
-    foreach my $p (qw(homebranch holdingbranch location itype ccode issues datelastborrowed notforloan itemlost)) {
+    foreach my $p (qw(homebranch holdingbranch location itype ccode issues datelastborrowed notforloan itemlost withdrawn)) {
         if (my @q = $cgi->multi_param($p)) {
             if ($q[0] ne '') {
                 my $f = {
@@ -241,6 +244,12 @@ if (scalar keys %params > 0) {
             $itemlost_map->{$il_value->{authorised_value}} = $il_value->{lib};
         }
 
+        # Get withdrawn labels
+        my $withdrawn_map = {};
+        foreach my $wd_value (@$withdrawn_values) {
+            $withdrawn_map->{$wd_value->{authorised_value}} = $wd_value->{lib};
+        }
+
         foreach my $item (@$results) {
             my $biblio = Koha::Biblios->find( $item->{biblionumber} );
             $item->{biblio} = $biblio;
@@ -321,6 +330,14 @@ foreach my $value (@$itemlost_values) {
     };
 }
 
+my @withdrawns;
+foreach my $value (@$withdrawn_values) {
+    push @withdrawns, {
+        value => $value->{authorised_value},
+        label => $value->{lib},
+    };
+}
+
 my @items_search_fields = GetItemSearchFields();
 
 my $authorised_values = {};
@@ -337,6 +354,7 @@ $template->param(
     ccodes => \@ccodes,
     notforloans => \@notforloans,
     itemlosts => \@itemlosts,
+    withdrawns => \@withdrawns,
     items_search_fields => \@items_search_fields,
     authorised_values_json => to_json($authorised_values),
 );
index a1101c6..f52e3a6 100644 (file)
@@ -4,4 +4,4 @@
 [% USE AuthorisedValues %]
 [%- SET biblio = item.biblio -%]
 [%- SET biblioitem = item.biblioitem -%]
-"[% biblio.title | html %] [% IF ( Koha.Preference( 'marcflavour' ) == 'UNIMARC' && biblio.author ) %]by [% END %][% biblio.author | html %]", "[% (biblioitem.publicationyear || biblio.copyrightdate) | html %]", "[% biblioitem.publishercode | html %]", "[% AuthorisedValues.GetByCode( 'CCODE', item.ccode ) | html %]", "[% item.barcode | html %]", "[% item.itemcallnumber | html %]", "[% Branches.GetName(item.homebranch) | html %]", "[% Branches.GetName(item.holdingbranch) | html %]", "[% item.location | html %]", "[% ItemTypes.GetDescription(item.itype) | html %]", "[% item.stocknumber | html %]", "[% item.status | html %]","[% AuthorisedValues.GetByCode( 'LOST', item.itemlost ) || "" | html %]", "[% (item.issues || 0) | html %]"
+"[% biblio.title | html %] [% IF ( Koha.Preference( 'marcflavour' ) == 'UNIMARC' && biblio.author ) %]by [% END %][% biblio.author | html %]", "[% (biblioitem.publicationyear || biblio.copyrightdate) | html %]", "[% biblioitem.publishercode | html %]", "[% AuthorisedValues.GetByCode( 'CCODE', item.ccode ) | html %]", "[% item.barcode | html %]", "[% item.itemcallnumber | html %]", "[% Branches.GetName(item.homebranch) | html %]", "[% Branches.GetName(item.holdingbranch) | html %]", "[% item.location | html %]", "[% ItemTypes.GetDescription(item.itype) | html %]", "[% item.stocknumber | html %]", "[% item.status | html %]","[% AuthorisedValues.GetByCode( 'LOST', item.itemlost ) || "" | html %]","[% AuthorisedValues.GetByCode( 'WITHDRAWN', item.withdrawn ) || "" | html %]", "[% (item.issues || 0) | html %]"
index 16db6ad..b0ca870 100644 (file)
@@ -23,6 +23,7 @@
   "[% item.stocknumber | html %]",
   "[% item.status | html %]",
   "[% AuthorisedValues.GetByCode( 'LOST', item.itemlost ) || "" | html %]",
+  "[% AuthorisedValues.GetByCode( 'WITHDRAWN', item.withdrawn ) || "" | html %]",
   "[% (item.issues || 0) | html %]",
   "[% FILTER escape_quotes ~%]
     <div class="btn-group dropup"><button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa fa-pencil"></i> Edit <span class="caret"></span> </button> <ul class="dropdown-menu"> <li><a href="/cgi-bin/koha/cataloguing/additem.pl?op=edititem&biblionumber=[% item.biblionumber | uri %]&itemnumber=[% item.itemnumber | uri %]">Edit item</a></li> <li><a href="/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=[% item.biblionumber | html %]">Edit record</a></li> </ul> </div>
index e19e6c2..34c6d31 100644 (file)
@@ -1 +1 @@
-[%- BLOCK -%]Title, Publication date, Publisher, Collection, Barcode, Call number, Home library, Current location, Shelving location, Itemtype, Inventory number, Not for loan status, Lost status, Checkouts[%- END -%]
+[%- BLOCK -%]Title, Publication date, Publisher, Collection, Barcode, Call number, Home library, Current location, Shelving location, Itemtype, Inventory number, Not for loan status, Lost status, Withdrawn status, Checkouts[%- END -%]
index 7adecfe..8c9a625 100644 (file)
@@ -27,6 +27,7 @@
     [% CASE 'All statuses' %]<span>All statuses</span>
     [% CASE 'damaged' %]<span>Damaged</span>
     [% CASE 'itemlost' %]<span>Lost</span>
+    [% CASE 'withdrawn' %]<span>Withdrawn</span>
   [% END %]
 [% END %]
 
             [% IF itemlosts.size %]
                 [% INCLUDE form_field_select name="itemlost" options = itemlosts empty_option = "All statuses" %]
             [% END %]
+            [% IF withdrawns.size %]
+                [% INCLUDE form_field_select name="withdrawn" options = withdrawns empty_option = "All statuses" %]
+            [% END %]
           </fieldset>
           <fieldset>
             [% INCLUDE form_field_select_text %]
                 + '      <th id="item_inventoryno">' + _("Inventory number") + '</th>'
                 + '      <th id="items_status">' + _("Not for loan status") + '</th>'
                 + '      <th id="items_itemlost">' + _("Lost status") + '</th>'
+                + '      <th id="items_widthdrawn">' + _("Withdrawn status") + '</th>'
                 + '      <th id="items_checkouts">' + _("Checkouts") + '</th>'
                 + '      <th id=""></th>'
                 + '    </tr>'
                     { 'sName': 'stocknumber' },
                     { 'sName': 'notforloan' },
                     { 'sName': 'itemlost' },
+                    { 'sName': 'withdrawn' },
                     { 'sName': 'issues' },
                     { 'sName': 'checkbox', 'bSortable': false }
                 ],
                     [% ELSE %]
                         null,
                     [% END %]
+                    [% IF withdrawns.size %]
+                        { 'type': 'select', 'values': [% INCLUDE escape_html_value_label elts => withdrawns %] },
+                    [% ELSE %]
+                        null,
+                    [% END %]
                     { 'type': 'text' },
                     null
                 ]