Bug 18277: Remove GetBiblionumberFromItemnumber - Easy ones
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Wed, 15 Mar 2017 15:28:13 +0000 (12:28 -0300)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Mon, 10 Jul 2017 16:03:37 +0000 (13:03 -0300)
To retrieve a biblionumber from an itemnumber, we can use:
  Koha::Item->biblio->biblionumber

This is only what this patchset does.
Doing that we will be able to get rid of the
C4::Biblio::GetBiblionumberFromItemnumber subroutine.

Test plan:
- Acquisition module: cancel a receipt
- Export a record to CSV
- Modify items in a batch

Item's info should be correct

Other changes with be checked by QA team, by reading the code.

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

C4/Acquisition.pm
C4/Items.pm
C4/Record.pm
Koha/REST/V1/Hold.pm
cataloguing/additem.pl
opac/opac-reserve.pl
tools/batchMod.pl

index b3b72b9..5e1e651 100644 (file)
@@ -31,6 +31,7 @@ use Koha::DateUtils qw( dt_from_string output_pref );
 use Koha::Acquisition::Order;
 use Koha::Acquisition::Booksellers;
 use Koha::Biblios;
+use Koha::Items;
 use Koha::Number::Price;
 use Koha::Libraries;
 use Koha::CsvProfiles;
@@ -1660,17 +1661,17 @@ sub CancelReceipt {
         my @affects = split q{\|}, C4::Context->preference("AcqItemSetSubfieldsWhenReceiptIsCancelled");
         if ( @affects ) {
             for my $in ( @itemnumbers ) {
-                my $biblionumber = C4::Biblio::GetBiblionumberFromItemnumber( $in );
-                my $frameworkcode = GetFrameworkCode($biblionumber);
-                my ( $itemfield ) = GetMarcFromKohaField( 'items.itemnumber', $frameworkcode );
-                my $item = C4::Items::GetMarcItem( $biblionumber, $in );
+                my $item = Koha::Items->find( $in );
+                my $biblio = $item->biblio;
+                my ( $itemfield ) = GetMarcFromKohaField( 'items.itemnumber', $biblio->frameworkcode );
+                my $item_marc = C4::Items::GetMarcItem( $biblio->biblionumber, $in );
                 for my $affect ( @affects ) {
                     my ( $sf, $v ) = split q{=}, $affect, 2;
-                    foreach ( $item->field($itemfield) ) {
+                    foreach ( $item_marc->field($itemfield) ) {
                         $_->update( $sf => $v );
                     }
                 }
-                C4::Items::ModItemFromMarc( $item, $biblionumber, $in );
+                C4::Items::ModItemFromMarc( $item_marc, $biblio->biblionumber, $in );
             }
         }
     }
index 26c14a1..2e5fbc7 100644 (file)
@@ -665,7 +665,8 @@ sub DelItem {
     my $biblionumber = $params->{biblionumber};
 
     unless ($biblionumber) {
-        $biblionumber = C4::Biblio::GetBiblionumberFromItemnumber($itemnumber);
+        my $item = Koha::Items->find( $itemnumber );
+        $biblionumber = $item->biblio->biblionumber;
     }
 
     # If there is no biblionumber for the given itemnumber, there is nothing to delete
index abc0075..e36e035 100644 (file)
@@ -34,6 +34,7 @@ use C4::XSLT ();
 use YAML; #marcrecords2csv
 use Template;
 use Text::CSV::Encoded; #marc2csv
+use Koha::Items;
 use Koha::SimpleMARC qw(read_field);
 use Koha::XSLT_Handler;
 use Koha::CsvProfiles;
@@ -427,7 +428,8 @@ sub marc2csv {
     my $firstpass = 1;
     if ( @$itemnumbers ) {
         for my $itemnumber ( @$itemnumbers) {
-            my $biblionumber = GetBiblionumberFromItemnumber $itemnumber;
+            my $item = Koha::Items->find( $itemnumber );
+            my $biblionumber = $item->biblio->biblionumber;
             $output .= marcrecord2csv( $biblionumber, $id, $firstpass, $csv, $fieldprocessing, [$itemnumber] );
             $firstpass = 0;
         }
index d72e5df..99af461 100644 (file)
@@ -22,6 +22,7 @@ use Mojo::Base 'Mojolicious::Controller';
 use C4::Biblio;
 use C4::Reserves;
 
+use Koha::Items;
 use Koha::Patrons;
 use Koha::Holds;
 use Koha::DateUtils;
@@ -65,18 +66,21 @@ sub add {
         }, 400);
     }
 
+    my $biblio;
     if ($itemnumber) {
-        my $item_biblionumber = C4::Biblio::GetBiblionumberFromItemnumber($itemnumber);
-        if ($biblionumber and $biblionumber != $item_biblionumber) {
+        my $item = Koha::Items->find( $itemnumber );
+        $biblio = $item->biblio;
+        if ($biblionumber and $biblionumber != $biblio->biblionumber) {
             return $c->$cb({
                 error => "Item $itemnumber doesn't belong to biblio $biblionumber"
             }, 400);
         }
-        $biblionumber ||= $item_biblionumber;
+        $biblionumber ||= $biblio->biblionumber;
+        $biblio->unblessed; # FIXME remove later
+    } else {
+        $biblio = C4::Biblio::GetBiblio($biblionumber);
     }
 
-    my $biblio = C4::Biblio::GetBiblio($biblionumber);
-
     my $can_reserve =
       $itemnumber
       ? CanItemBeReserved( $borrowernumber, $itemnumber )
index c986b19..03adf46 100755 (executable)
@@ -31,6 +31,7 @@ use C4::Circulation;
 use C4::Koha;
 use C4::ClassSource;
 use Koha::DateUtils;
+use Koha::Items;
 use Koha::ItemTypes;
 use Koha::Libraries;
 use List::MoreUtils qw/any/;
@@ -794,9 +795,10 @@ foreach my $field (@fields) {
 
        if ( C4::Context->preference('EasyAnalyticalRecords') ) {
            foreach my $hostitemnumber (@hostitemnumbers){
+            my $item = Koha::Items->find( $hostitemnumber );
                if ($this_row{itemnumber} eq $hostitemnumber){
                        $this_row{hostitemflag} = 1;
-                       $this_row{hostbiblionumber}= GetBiblionumberFromItemnumber($hostitemnumber);
+            $this_row{hostbiblionumber}= $item->biblio->biblionumber;
                        last;
                }
            }
index 7bb6e7a..3e2cf7b 100755 (executable)
@@ -245,7 +245,8 @@ if ( $query->param('place_reserve') ) {
 
 #item may belong to a host biblio, if yes change biblioNum to hosts bilbionumber
         if ( $itemNum ne '' ) {
-            my $hostbiblioNum = GetBiblionumberFromItemnumber($itemNum);
+            my $item = Koha::Items->find( $itemNum );
+            my $hostbiblioNum = $item->biblio->biblionumber;
             if ( $hostbiblioNum ne $biblioNum ) {
                 $biblioNum = $hostbiblioNum;
             }
index 1dc2174..7c87c7f 100755 (executable)
@@ -37,6 +37,7 @@ use List::MoreUtils qw/uniq/;
 
 use Koha::Biblios;
 use Koha::DateUtils;
+use Koha::Items;
 use Koha::ItemTypes;
 
 my $input = new CGI;
@@ -121,7 +122,10 @@ if ($op eq "action") {
            $items_display_hashref=BuildItemsData(@itemnumbers);
        } else {
            # Else, we only display the barcode
-           my @simple_items_display = map {{ itemnumber => $_, barcode => (GetBarcodeFromItemnumber($_) or ""), biblionumber => (GetBiblionumberFromItemnumber($_) or "") }} @itemnumbers;
+        my @simple_items_display = map {
+            my $itemnumber = $_;
+            my $item = Koha::Items->find($itemnumber);
+            { itemnumber => $itemnumber, barcode => ($item->barcode || q||), biblionumber => $item->biblio->biblionumber }} @itemnumbers;
            $template->param("simple_items_display" => \@simple_items_display);
        }