[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