[Koha-patches] [PATCH] Analytical records: Support for holds on items linked via host records

savitra.sirohi at osslabs.biz savitra.sirohi at osslabs.biz
Wed Nov 24 05:48:30 CET 2010


From: Amit Gupta <amit.gupta at osslabs.biz>

---
 C4/Items.pm                                        |   38 ++++++++++++++++++++
 C4/Reserves.pm                                     |    8 ++++
 .../prog/en/modules/reserve/request.tmpl           |    8 ++++-
 .../opac-tmpl/prog/en/includes/item-status.inc     |    2 +
 reserve/placerequest.pl                            |   10 +++++
 reserve/request.pl                                 |   21 +++++++++--
 6 files changed, 82 insertions(+), 5 deletions(-)

diff --git a/C4/Items.pm b/C4/Items.pm
index c0c223a..1f82db1 100644
--- a/C4/Items.pm
+++ b/C4/Items.pm
@@ -66,6 +66,7 @@ BEGIN {
         GetItemsInfo
 	GetHostItemsInfo
         get_itemnumbers_of
+	get_hostitemnumbers_of
         GetItemnumberFromBarcode
         GetBarcodeFromItemnumber
 
@@ -1433,6 +1434,43 @@ sub get_itemnumbers_of {
     return \%itemnumbers_of;
 }
 
+=head2 get_hostitemnumbers_of
+
+  my @itemnumbers_of = get_hostitemnumbers_of($biblionumber);
+
+Given a biblionumber, return the list of corresponding itemnumbers that are linked to it via host fields
+
+Return a reference on a hash where key is a biblionumber and values are
+references on array of itemnumbers.
+
+=cut
+
+
+sub get_hostitemnumbers_of {
+	my ($biblionumber) = @_;
+	my $marcrecord = GetMarcBiblio($biblionumber);
+        my @returnhostitemnumbers;
+
+        #MARC21 mapping, UNIMARC to be added
+        foreach my $hostfield ( $marcrecord->field('773') ) {
+                my $hostbiblionumber = $hostfield->subfield("w");
+                my $linkeditemnumber = $hostfield->subfield("o");
+		my @itemnumbers;
+                if (my $itemnumbers = get_itemnumbers_of($hostbiblionumber)->{$hostbiblionumber})
+		{
+			@itemnumbers = @$itemnumbers;
+		}
+                foreach my $itemnumber (@itemnumbers){
+                        if ($itemnumber eq $linkeditemnumber){
+                                push (@returnhostitemnumbers,$itemnumber);
+                                last;
+                        }
+                }
+	}
+        return @returnhostitemnumbers;
+}
+
+
 =head2 GetItemnumberFromBarcode
 
   $result = GetItemnumberFromBarcode($barcode);
diff --git a/C4/Reserves.pm b/C4/Reserves.pm
index fcf9209..763830f 100644
--- a/C4/Reserves.pm
+++ b/C4/Reserves.pm
@@ -381,6 +381,14 @@ sub CanBookBeReserved{
     my ($borrowernumber, $biblionumber) = @_;
 
     my @items = GetItemsInfo($biblionumber);
+
+	#get items linked via host records
+	my $marcrecord= GetMarcBiblio($biblionumber);
+	my @hostitemInfos = GetHostItemsInfo($marcrecord);
+	if (@hostitemInfos){
+		push (@items, at hostitemInfos);
+	}
+
     foreach my $item (@items){
         return 1 if CanItemBeReserved($borrowernumber, $item->{itemnumber});
     }
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tmpl
index 53f9138..3628fa0 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tmpl
@@ -253,7 +253,7 @@ function checkMultiHold() {
             <input type="hidden" name="request" value="any"/>
             <!-- TMPL_LOOP NAME="biblioloop" -->
               <input type="hidden" name="title_<!-- TMPL_VAR NAME="biblionumber">" value="<!-- TMPL_VAR NAME="title" ESCAPE="html">"/>
-              <input type="hidden" name="rank_<!-- TMPL_VAR NAME="biblionumber">" value="<!-- TMPL_VAR NAME="rank">"/>
+              <input type="hidden" name="rank_<!-- TMPL_VAR NAME="biblionumber">" value="<!-- TMPL_VAR NAME="rank">"/> 
             <!-- /TMPL_LOOP -->
         <!-- TMPL_ELSE -->
             <input type="hidden" name="biblionumber" value="<!-- TMPL_VAR NAME="biblionumber" -->" />
@@ -389,6 +389,9 @@ function checkMultiHold() {
             <th>Call no.</th>
             <th>Copy no.</th>
             <th>Information</th>
+		<!-- TMPL_IF NAME="hostitemsflag"-->
+		<th>Host record</th>
+		<!--/TMPL_IF-->
         </tr>
     <!-- TMPL_LOOP Name="itemloop" -->
         <tr class="<!-- TMPL_VAR NAME="backgroundcolor" -->">
@@ -454,6 +457,9 @@ function checkMultiHold() {
                     Not on hold
             <!-- /TMPL_IF -->
             </td>
+		<!-- TMPL_IF NAME="hostitemsflag" -->
+			<td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->">Host Record</a></td>
+		<!-- /TMPL_IF -->
         </tr>
     <!-- /TMPL_LOOP --> <!-- itemloop -->
         </table>
diff --git a/koha-tmpl/opac-tmpl/prog/en/includes/item-status.inc b/koha-tmpl/opac-tmpl/prog/en/includes/item-status.inc
index 5e881fe..276bf24 100644
--- a/koha-tmpl/opac-tmpl/prog/en/includes/item-status.inc
+++ b/koha-tmpl/opac-tmpl/prog/en/includes/item-status.inc
@@ -9,6 +9,8 @@
     to <!-- TMPL_VAR NAME="transfertto" --> since <!-- TMPL_VAR NAME="transfertwhen" -->
 <!-- TMPL_ELSIF NAME="waiting" -->
     On hold
+<!-- TMPL_ELSIF NAME="onhold" -->
+	On hold
 <!-- TMPL_ELSIF NAME="wthdrawn" -->
     Item withdrawn
 <!-- TMPL_ELSIF name="itemlost"-->
diff --git a/reserve/placerequest.pl b/reserve/placerequest.pl
index bc3fc74..a665333 100755
--- a/reserve/placerequest.pl
+++ b/reserve/placerequest.pl
@@ -81,6 +81,7 @@ if ($checkitem ne ''){
     }
 }
 
+
 if ($type eq 'str8' && $borrowernumber ne ''){
 
     foreach my $biblionumber (keys %bibinfos) {
@@ -98,6 +99,15 @@ if ($type eq 'str8' && $borrowernumber ne ''){
         }
         my $const;
 
+	if ($checkitem ne ''){
+		my $item = GetItem($checkitem);
+        	if ($item->{'biblionumber'} ne $biblionumber) {
+                	$biblionumber = $item->{'biblionumber'};
+        	}
+	}
+
+
+
         if ($multi_hold) {
             my $bibinfo = $bibinfos{$biblionumber};
             AddReserve($branch,$borrowernumber->{'borrowernumber'},$biblionumber,'a',[$biblionumber],
diff --git a/reserve/request.pl b/reserve/request.pl
index 859a65b..ea7811e 100755
--- a/reserve/request.pl
+++ b/reserve/request.pl
@@ -285,16 +285,22 @@ foreach my $biblionumber (@biblionumbers) {
     my @branchcodes;
     my %itemnumbers_of_biblioitem;
     my @itemnumbers;
-    
+
     ## $items is array of 'item' table numbers
     if (my $items = get_itemnumbers_of($biblionumber)->{$biblionumber}){
         @itemnumbers  = @$items;
     }
-    else {
+	my @hostitems = get_hostitemnumbers_of($biblionumber);
+	if (@hostitems){
+		push(@itemnumbers, @hostitems);
+	}
+
+    if (!@itemnumbers) {
         $template->param('noitems' => 1);
         $biblioloopiter{noitems} = 1;
     }
-    
+
+   
     ## Hash of item number to 'item' table fields
     my $iteminfos_of = GetItemInfosOf(@itemnumbers);
     
@@ -322,6 +328,9 @@ foreach my $biblionumber (@biblionumbers) {
         
         $biblioitem->{description} =
           $itemtypes->{ $biblioitem->{itemtype} }{description};
+	if($biblioitem->{biblioitemnumber} ne $biblionumber){
+		$biblioitem->{hostitemsflag}=1;
+	}
         $biblioloopiter{description} = $biblioitem->{description};
         $biblioloopiter{itypename} = $biblioitem->{description};
         $biblioloopiter{imageurl} =
@@ -344,7 +353,11 @@ foreach my $biblionumber (@biblionumbers) {
                 $item->{holdingbranchname} =
                   $branches->{ $item->{holdingbranch} }{branchname};
             }
-            
+
+		if($item->{biblionumber} ne $biblionumber){
+			$item->{hostitemsflag}=1;
+		}
+		
             #   add information
             $item->{itemcallnumber} = $item->{itemcallnumber};
             
-- 
1.5.4.5



More information about the Koha-patches mailing list