BUGfixes in availability management

- the availability status was not available on result list. This patch reintroduces that
- notforloan as itemtype was not properly managed : an itemtype that was notforloan resulted in nothing in detail. Not, the user can't place a reserve anymore, and the status is correctly displayed

the fix is for OPAC as well as staff

(owen, pls, validate cat-toolbar.inc & catalogue/detail.tmpl)

Signed-off-by: Chris Cormack <crc@liblime.com>
Signed-off-by: Joshua Ferraro <jmf@liblime.com>
This commit is contained in:
Paul POULAIN 2007-10-14 16:20:51 -05:00 committed by Joshua Ferraro
parent feea56bfd8
commit b426ecb4f2
6 changed files with 96 additions and 112 deletions

View file

@ -697,7 +697,7 @@ sub GetBiblioData {
my $dbh = C4::Context->dbh; my $dbh = C4::Context->dbh;
my $query = " my $query = "
SELECT * , biblioitems.notes AS bnotes, biblio.notes SELECT * , biblioitems.notes AS bnotes, itemtypes.notforloan as bi_notforloan, biblio.notes
FROM biblio FROM biblio
LEFT JOIN biblioitems ON biblio.biblionumber = biblioitems.biblionumber LEFT JOIN biblioitems ON biblio.biblionumber = biblioitems.biblionumber
LEFT JOIN itemtypes ON biblioitems.itemtype = itemtypes.itemtype LEFT JOIN itemtypes ON biblioitems.itemtype = itemtypes.itemtype

View file

@ -21,6 +21,7 @@ use C4::Context;
use C4::Biblio; # GetMarcFromKohaField use C4::Biblio; # GetMarcFromKohaField
use C4::Koha; # getFacets use C4::Koha; # getFacets
use Lingua::Stem; use Lingua::Stem;
use C4::Date;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
@ -832,13 +833,14 @@ sub searchResults {
#find itemtype & itemtype image #find itemtype & itemtype image
my %itemtypes; my %itemtypes;
$bsth = $bsth =
$dbh->prepare("SELECT itemtype,description,imageurl,summary FROM itemtypes"); $dbh->prepare("SELECT itemtype,description,imageurl,summary,notforloan FROM itemtypes");
$bsth->execute(); $bsth->execute();
while ( my $bdata = $bsth->fetchrow_hashref ) { while ( my $bdata = $bsth->fetchrow_hashref ) {
$itemtypes{ $bdata->{'itemtype'} }->{description} = $itemtypes{ $bdata->{'itemtype'} }->{description} =
$bdata->{'description'}; $bdata->{'description'};
$itemtypes{ $bdata->{'itemtype'} }->{imageurl} = $bdata->{'imageurl'}; $itemtypes{ $bdata->{'itemtype'} }->{imageurl} = $bdata->{'imageurl'};
$itemtypes{ $bdata->{'itemtype'} }->{summary} = $bdata->{'summary'}; $itemtypes{ $bdata->{'itemtype'} }->{summary} = $bdata->{'summary'};
$itemtypes{ $bdata->{'itemtype'} }->{notforloan} = $bdata->{'notforloan'};
} }
#search item field code #search item field code
@ -948,41 +950,58 @@ sub searchResults {
my $itemlost_count = 0; my $itemlost_count = 0;
my $norequests = 1; my $norequests = 1;
#
# check the loan status of the item :
# it is not stored in the MARC record, for pref (zebra reindexing)
# reason. Thus, we have to get the status from a specific SQL query
#
my $sth_issue = $dbh->prepare("
SELECT date_due,returndate
FROM issues
WHERE itemnumber=? AND returndate IS NULL");
foreach my $field (@fields) { foreach my $field (@fields) {
my $item; my $item;
foreach my $code ( keys %subfieldstosearch ) { foreach my $code ( keys %subfieldstosearch ) {
$item->{$code} = $field->subfield( $subfieldstosearch{$code} ); $item->{$code} = $field->subfield( $subfieldstosearch{$code} );
} }
$sth_issue->execute($item->{itemnumber});
$item->{due_date} = format_date($sth_issue->fetchrow);
$item->{onloan} = 1 if $item->{due_date};
# at least one item can be reserved : suppose no
$norequests = 1;
if ( $item->{wthdrawn} ) { if ( $item->{wthdrawn} ) {
$wthdrawn_count++; $wthdrawn_count++;
} }
elsif ( $item->{notforloan} == -1 ) {
$ordered_count++;
$norequests = 0;
}
elsif ( $item->{itemlost} ) { elsif ( $item->{itemlost} ) {
$itemlost_count++; $itemlost_count++;
} }
elsif ( ( $item->{onloan} ) && ( $item->{onloan} != '0000-00-00' ) ) unless ( $item->{notforloan}) {
# OK, this one can be issued, so at least one can be reserved
$norequests = 0;
}
if ( ( $item->{onloan} ) && ( $item->{onloan} != '0000-00-00' ) )
{ {
$items->{ $item->{'homebranch'}.'--'.$item->{'itemcallnumber'} }->{onloancount} = 1;
$items->{ $item->{'homebranch'}.'--'.$item->{'itemcallnumber'} }->{due_date} = $item->{due_date};
$onloan_count++; $onloan_count++;
$norequests = 0;
} }
else { if ( $item->{'homebranch'} ) {
$norequests = 0; $items->{ $item->{'homebranch'}.'--'.$item->{'itemcallnumber'} }->{count}++;
if ( $item->{'homebranch'} ) { }
$items->{ $item->{'homebranch'}.'--'.$item->{'itemcallnumber'} }->{count}++;
}
# Last resort # Last resort
elsif ( $item->{'holdingbranch'} ) { elsif ( $item->{'holdingbranch'} ) {
$items->{ $item->{'holdingbranch'} }->{count}++; $items->{ $item->{'holdingbranch'} }->{count}++;
}
$items->{ $item->{'homebranch'}.'--'.$item->{'itemcallnumber'} }->{itemcallnumber} = $item->{itemcallnumber};
$items->{ $item->{'homebranch'}.'--'.$item->{'itemcallnumber'} }->{location} = $item->{location};
$items->{ $item->{'homebranch'}.'--'.$item->{'itemcallnumber'} }->{branchcode} = $item->{homebranch};
} }
$items->{ $item->{'homebranch'}.'--'.$item->{'itemcallnumber'} }->{itemcallnumber} = $item->{itemcallnumber};
$items->{ $item->{'homebranch'}.'--'.$item->{'itemcallnumber'} }->{location} = $item->{location};
$items->{ $item->{'homebranch'}.'--'.$item->{'itemcallnumber'} }->{branchcode} = $item->{homebranch};
} # notforloan, item level and biblioitem level } # notforloan, item level and biblioitem level
# last check for norequest : if itemtype is notforloan, it can't be reserved either, whatever the items
$norequests = 1 if $itemtypes{$oldbiblio->{itemtype}}->{notforloan};
for my $key ( sort keys %$items ) { for my $key ( sort keys %$items ) {
my $this_item = { my $this_item = {
branchname => $branches{$items->{$key}->{branchcode}}, branchname => $branches{$items->{$key}->{branchcode}},
@ -990,6 +1009,8 @@ sub searchResults {
count => $items->{$key}->{count}==1 ?"":$items->{$key}->{count}, count => $items->{$key}->{count}==1 ?"":$items->{$key}->{count},
itemcallnumber => $items->{$key}->{itemcallnumber}, itemcallnumber => $items->{$key}->{itemcallnumber},
location => $items->{$key}->{location}, location => $items->{$key}->{location},
onloancount => $items->{$key}->{onloancount},
due_date => $items->{$key}->{due_date},
}; };
push @items_loop, $this_item; push @items_loop, $this_item;
} }
@ -1000,61 +1021,6 @@ sub searchResults {
$oldbiblio->{itemlostcount} = $itemlost_count; $oldbiblio->{itemlostcount} = $itemlost_count;
$oldbiblio->{orderedcount} = $ordered_count; $oldbiblio->{orderedcount} = $ordered_count;
$oldbiblio->{isbn} =~ s/-//g; # deleting - in isbn to enable amazon content $oldbiblio->{isbn} =~ s/-//g; # deleting - in isbn to enable amazon content
# FIXME
# Ugh ... this is ugly, I'll re-write it better above then delete it
# my $norequests = 1;
# my $noitems = 1;
# if (@items) {
# $noitems = 0;
# foreach my $itm (@items) {
# $norequests = 0 unless $itm->{'itemnotforloan'};
# }
# }
# $oldbiblio->{'noitems'} = $noitems;
# $oldbiblio->{'norequests'} = $norequests;
# $oldbiblio->{'even'} = $even = not $even;
# $oldbiblio->{'itemcount'} = $counts{'total'};
# my $totalitemcounts = 0;
# foreach my $key (keys %counts){
# if ($key ne 'total'){
# $totalitemcounts+= $counts{$key};
# $oldbiblio->{'locationhash'}->{$key}=$counts{$key};
# }
# }
# my ($locationtext, $locationtextonly, $notavailabletext) = ('','','');
# foreach (sort keys %{$oldbiblio->{'locationhash'}}) {
# if ($_ eq 'notavailable') {
# $notavailabletext="Not available";
# my $c=$oldbiblio->{'locationhash'}->{$_};
# $oldbiblio->{'not-available-p'}=$c;
# } else {
# $locationtext.="$_";
# my $c=$oldbiblio->{'locationhash'}->{$_};
# if ($_ eq 'Item Lost') {
# $oldbiblio->{'lost-p'} = $c;
# } elsif ($_ eq 'Withdrawn') {
# $oldbiblio->{'withdrawn-p'} = $c;
# } elsif ($_ eq 'On Loan') {
# $oldbiblio->{'on-loan-p'} = $c;
# } else {
# $locationtextonly.= $_;
# $locationtextonly.= " ($c)<br/> " if $totalitemcounts > 1;
# }
# if ($totalitemcounts>1) {
# $locationtext.=" ($c)<br/> ";
# }
# }
# }
# if ($notavailabletext) {
# $locationtext.= $notavailabletext;
# } else {
# $locationtext=~s/, $//;
# }
# $oldbiblio->{'location'} = $locationtext;
# $oldbiblio->{'location-only'} = $locationtextonly;
# $oldbiblio->{'use-location-flags-p'} = 1;
push( @newresults, $oldbiblio ); push( @newresults, $oldbiblio );
} }
return @newresults; return @newresults;

View file

@ -8,5 +8,6 @@
<li><a id="deletebiblio" href="javascript:confirm_deletion(<!-- TMPL_VAR NAME="count" -->)">Delete</a></li> <li><a id="deletebiblio" href="javascript:confirm_deletion(<!-- TMPL_VAR NAME="count" -->)">Delete</a></li>
<li><a id="addtoshelf" href="#" onclick="window.open('/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->','Add_to_virtualshelf','width=500,height=400,toolbar=false,scrollbars=yes'); return false;">Add to shelf</a></li> <li><a id="addtoshelf" href="#" onclick="window.open('/cgi-bin/koha/virtualshelves/addbybiblionumber.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->','Add_to_virtualshelf','width=500,height=400,toolbar=false,scrollbars=yes'); return false;">Add to shelf</a></li>
<li><a id="printbiblio" href="/cgi-bin/koha/catalogue/detailprint.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->">Print</a></li> <li><a id="printbiblio" href="/cgi-bin/koha/catalogue/detailprint.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->">Print</a></li>
<!-- TMPL_IF NAME="norequests" --><!-- TMPL_ELSE --><li><a id="placehold" href="/cgi-bin/koha/reserve/request.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->">Place Hold</a></li><!-- /TMPL_IF --> <!-- TMPL_UNLESS name="bi_notforloan" -->
<!-- TMPL_UNLESS NAME="norequests" --><li><a id="placehold" href="/cgi-bin/koha/reserve/request.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->">Place Hold</a></li><!-- /TMPL_UNLESS --><!-- TMPL_UNLESS -->
</ul></div> </ul></div>

View file

@ -69,14 +69,16 @@ function confirm_deletion(count) {
function yuiToolbar(){ function yuiToolbar(){
YAHOO.toolbar.init = function () { YAHOO.toolbar.init = function () {
var oAddbiblio = new YAHOO.widget.Button("addbiblio"); var oAddbiblio = new YAHOO.widget.Button("addbiblio");
var oEditbiblio = new YAHOO.widget.Button("editbiblio"); var oEditbiblio = new YAHOO.widget.Button("editbiblio");
var oEdititems = new YAHOO.widget.Button("edititems"); var oEdititems = new YAHOO.widget.Button("edititems");
var oDuplicatebiblio = new YAHOO.widget.Button("duplicatebiblio"); var oDuplicatebiblio = new YAHOO.widget.Button("duplicatebiblio");
var oDeletebiblio = new YAHOO.widget.Button("deletebiblio"); var oDeletebiblio = new YAHOO.widget.Button("deletebiblio");
var oAddtoshelf = new YAHOO.widget.Button("addtoshelf"); var oAddtoshelf = new YAHOO.widget.Button("addtoshelf");
var oPrintbiblio = new YAHOO.widget.Button("printbiblio"); var oPrintbiblio = new YAHOO.widget.Button("printbiblio");
var oPlacehold = new YAHOO.widget.Button("placehold"); <!-- TMPL_UNLESS name="bi_notforloan" -->
var oPlacehold = new YAHOO.widget.Button("placehold");
<!-- /TMPL_UNLESS -->
} (); } ();
} }
@ -236,16 +238,21 @@ function yuiToolbar(){
<td><!-- TMPL_IF name="datedue" --> <td><!-- TMPL_IF name="datedue" -->
On issue to <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=<!-- TMPL_VAR NAME="borrowernumber" -->"><!-- TMPL_VAR NAME="firstname" --> <!-- TMPL_VAR NAME="surname" --></a> On issue to <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=<!-- TMPL_VAR NAME="borrowernumber" -->"><!-- TMPL_VAR NAME="firstname" --> <!-- TMPL_VAR NAME="surname" --></a>
<!-- TMPL_ELSE --> <!-- TMPL_ELSE -->
<!-- TMPL_IF name="notforloan" --> <!-- TMPL_IF name="bi_notforloan" -->
<!-- TMPL_VAR name="notforloan" --> Not For loan (itemtype)
<!-- TMPL_ELSE --> <!-- TMPL_ELSE -->
<!-- TMPL_IF name="itemlost"--> <!-- TMPL_IF name="notforloan" -->
Item lost <!-- TMPL_VAR name="notforloan" -->
<!-- TMPL_ELSE --> <!-- TMPL_ELSE -->
<!-- TMPL_IF NAME="wthdrawn" -->Item Cancelled<!-- TMPL_ELSE -->Available<!-- /TMPL_IF --> <!-- TMPL_IF name="itemlost"-->
Item lost
<!-- TMPL_ELSE -->
<!-- TMPL_IF NAME="wthdrawn" -->Item Cancelled<!-- TMPL_ELSE -->Available<!-- /TMPL_IF -->
<!-- /TMPL_IF -->
<!-- /TMPL_IF --> <!-- /TMPL_IF -->
<!-- /TMPL_IF --> <!-- /TMPL_IF -->
<!-- /TMPL_IF --></td> <!-- /TMPL_IF -->
</td>
<td><!-- TMPL_VAR NAME="datedue" --></td> <td><!-- TMPL_VAR NAME="datedue" --></td>
<td><!-- TMPL_VAR NAME="datelastseen" --></td> <td><!-- TMPL_VAR NAME="datelastseen" --></td>
<td><a href="/cgi-bin/koha/catalogue/moredetail.pl?type=<!-- TMPL_VAR NAME="type" -->&amp;item=<!-- TMPL_VAR NAME="itemnumber" -->&amp;biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&amp;bi=<!-- TMPL_VAR NAME="biblioitemnumber" -->"><!-- TMPL_VAR NAME="barcode" --></a></td> <td><a href="/cgi-bin/koha/catalogue/moredetail.pl?type=<!-- TMPL_VAR NAME="type" -->&amp;item=<!-- TMPL_VAR NAME="itemnumber" -->&amp;biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&amp;bi=<!-- TMPL_VAR NAME="biblioitemnumber" -->"><!-- TMPL_VAR NAME="barcode" --></a></td>

View file

@ -7,11 +7,13 @@
<div id="action"> <div id="action">
<!-- TMPL_UNLESS NAME="norequests" --> <!-- TMPL_UNLESS NAME="norequests" -->
<!-- TMPL_IF NAME="RequestOnOpac" --> <!-- TMPL_UNLESS name="bi_notforloan" -->
<a href="/cgi-bin/koha/opac-reserve.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->"> <!-- TMPL_IF NAME="RequestOnOpac" -->
Place Reserve <a href="/cgi-bin/koha/opac-reserve.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->">
</a> Place Reserve
<!-- /TMPL_IF --> </a>
<!-- /TMPL_IF -->
<!-- /TMPL_UNLESS -->
<!-- /TMPL_UNLESS --> <!-- /TMPL_UNLESS -->
<a href="/cgi-bin/koha/opac-MARCdetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->"> <a href="/cgi-bin/koha/opac-MARCdetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->">
MARC View MARC View
@ -186,18 +188,26 @@
<td><!-- TMPL_VAR NAME="description" --></td> <td><!-- TMPL_VAR NAME="description" --></td>
<td><!-- TMPL_VAR NAME="branchname" --> <!-- TMPL_VAR name="location" --> <!-- TMPL_IF NAME="itemcallnumber" --> <!-- TMPL_VAR NAME="itemcallnumber" --><!-- /TMPL_IF --></td> <td><!-- TMPL_VAR NAME="branchname" --> <!-- TMPL_VAR name="location" --> <!-- TMPL_IF NAME="itemcallnumber" --> <!-- TMPL_VAR NAME="itemcallnumber" --><!-- /TMPL_IF --></td>
<td> <td>
<!-- TMPL_IF name="datedue" --> <!-- TMPL_IF name="bi_notforloan" -->
On issue Not for loan
<!-- TMPL_ELSE --> <!-- TMPL_ELSE -->
<!-- TMPL_IF name="notforloan" --> <!-- TMPL_IF name="datedue" -->
<!-- TMPL_VAR name="notforloan" --> On issue
<!-- TMPL_ELSE --> <!-- TMPL_ELSE -->
<!-- TMPL_IF name="itemlost"--> <!-- TMPL_IF name="notforloan" -->
Item lost <!-- TMPL_VAR name="notforloan" -->
<!-- TMPL_ELSE --> <!-- TMPL_ELSE -->
<!-- TMPL_IF NAME="wthdrawn" -->Item Cancelled<!-- TMPL_ELSE -->Available<!-- /TMPL_IF --> <!-- TMPL_IF name="itemlost"-->
<!-- /TMPL_IF --> Item lost
<!-- /TMPL_IF --> <!-- TMPL_ELSE -->
<!-- TMPL_IF NAME="wthdrawn" -->
Item Cancelled
<!-- TMPL_ELSE -->
Available
<!-- /TMPL_IF -->
<!-- /TMPL_IF -->
<!-- /TMPL_IF -->
<!-- /TMPL_IF -->
<!-- /TMPL_IF --> <!-- /TMPL_IF -->
</td> </td>
<td><!-- TMPL_VAR NAME="datedue" --></td> <td><!-- TMPL_VAR NAME="datedue" --></td>

View file

@ -315,15 +315,15 @@ Error :
<!-- /TMPL_IF --> <!-- /TMPL_IF -->
</i> </i>
<br /> <br />
<span class="unavailable">
<!-- TMPL_IF NAME="onloancount" --> On loan (due date <!-- TMPL_VAR name="due_date" -->)<br /> <!-- /TMPL_IF -->
<!-- TMPL_IF NAME="wthdrawncount" --> Withdrawn (<!-- TMPL_VAR NAME="wthdrawncount" -->),<br /> <!-- /TMPL_IF -->
<!-- TMPL_IF NAME="itemlostcount" --> Lost (<!-- TMPL_VAR NAME="itemlostcount" -->)<br /><!-- /TMPL_IF -->
<!-- TMPL_IF NAME="orderedcount" --> On order (<!-- TMPL_VAR NAME="orderedcount" -->)<!-- /TMPL_IF -->
</span>
<!-- /TMPL_LOOP --> <!-- /TMPL_LOOP -->
</span> </span>
<!-- /TMPL_IF --> <!-- /TMPL_IF -->
<span class="unavailable">
<!-- TMPL_IF NAME="onloancount" --> On loan (<!-- TMPL_VAR NAME="onloancount" -->),<br /> <!-- /TMPL_IF -->
<!-- TMPL_IF NAME="wthdrawncount" --> Withdrawn (<!-- TMPL_VAR NAME="wthdrawncount" -->),<br /> <!-- /TMPL_IF -->
<!-- TMPL_IF NAME="itemlostcount" --> Lost (<!-- TMPL_VAR NAME="itemlostcount" -->)<br /><!-- /TMPL_IF -->
<!-- TMPL_IF NAME="orderedcount" --> On order (<!-- TMPL_VAR NAME="orderedcount" -->)<!-- /TMPL_IF -->
</span>
</td> </td>
<!-- TMPL_IF NAME="RequestOnOpac" --> <!-- TMPL_IF NAME="RequestOnOpac" -->
<td> <td>