Adds a Hide Lost Items option to the staff client, as detailed in the enhancement request
at http://wiki.koha-community.org/wiki/Hidelostitems_option_for_the_staff_client_RFC
Minor edits: Whitespace
Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
&PutPatronImage
&RmPatronImage
+ &GetHideLostItemsPreference
+
&IsMemberBlocked
&GetMemberAccountRecords
&GetBorNotifyAcctRecord
return $dberror;
}
+=head2 GetHideLostItemsPreference
+
+ $hidelostitemspref = &GetHideLostItemsPreference($borrowernumber);
+
+Returns the HideLostItems preference for the patron category of the supplied borrowernumber
+C<&$hidelostitemspref>return value of function, 0 or 1
+
+=cut
+
+sub GetHideLostItemsPreference {
+ my ($borrowernumber) = @_;
+ my $dbh = C4::Context->dbh;
+ my $query = "SELECT hidelostitems FROM borrowers,categories WHERE borrowers.categorycode = categories.categorycode AND borrowernumber = ?";
+ my $sth = $dbh->prepare($query);
+ $sth->execute($borrowernumber);
+ my $hidelostitems = $sth->fetchrow;
+ return $hidelostitems;
+}
+
=head2 GetRoadTypeDetails (OUEST-PROVENCE)
($roadtype) = &GetRoadTypeDetails($roadtypeid);
use C4::Search::PazPar2;
use XML::Simple;
use C4::Dates qw(format_date);
+use C4::Members qw(GetHideLostItemsPreference);
use C4::XSLT;
use C4::Branch;
use C4::Reserves; # CheckReserves
my $prefix = $item->{$hbranch} . '--' . $item->{location} . $item->{itype} . $item->{itemcallnumber};
# For each grouping of items (onloan, available, unavailable), we build a key to store relevant info about that item
- if ( $item->{onloan} ) {
+ my $userenv = C4::Context->userenv;
+ if ( $item->{onloan} && !(C4::Members::GetHideLostItemsPreference($userenv->{'number'}) && $item->{itemlost}) ) {
$onloan_count++;
my $key = $prefix . $item->{onloan} . $item->{barcode};
$onloan_items->{$key}->{due_date} = format_date($item->{onloan});
my $data;
if ($categorycode) {
my $dbh = C4::Context->dbh;
- my $sth=$dbh->prepare("select categorycode,description,enrolmentperiod,enrolmentperioddate,upperagelimit,dateofbirthrequired,enrolmentfee,issuelimit,reservefee,overduenoticerequired,category_type from categories where categorycode=?");
+ my $sth=$dbh->prepare("select categorycode,description,enrolmentperiod,enrolmentperioddate,upperagelimit,dateofbirthrequired,enrolmentfee,issuelimit,reservefee,hidelostitems,overduenoticerequired,category_type from categories where categorycode=?");
$sth->execute($categorycode);
$data=$sth->fetchrow_hashref;
$sth->finish;
overduenoticerequired => $data->{'overduenoticerequired'},
issuelimit => $data->{'issuelimit'},
reservefee => sprintf("%.2f",$data->{'reservefee'}),
+ hidelostitems => $data->{'hidelostitems'},
category_type => $data->{'category_type'},
DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
"type_".$data->{'category_type'} => 1,
}
if ($is_a_modif) {
- my $sth=$dbh->prepare("UPDATE categories SET description=?,enrolmentperiod=?, enrolmentperioddate=?,upperagelimit=?,dateofbirthrequired=?,enrolmentfee=?,reservefee=?,overduenoticerequired=?,category_type=? WHERE categorycode=?");
- $sth->execute(map { $input->param($_) } ('description','enrolmentperiod','enrolmentperioddate','upperagelimit','dateofbirthrequired','enrolmentfee','reservefee','overduenoticerequired','category_type','categorycode'));
+ my $sth=$dbh->prepare("UPDATE categories SET description=?,enrolmentperiod=?, enrolmentperioddate=?,upperagelimit=?,dateofbirthrequired=?,enrolmentfee=?,reservefee=?,hidelostitems=?,overduenoticerequired=?,category_type=? WHERE categorycode=?");
+ $sth->execute(map { $input->param($_) } ('description','enrolmentperiod','enrolmentperioddate','upperagelimit','dateofbirthrequired','enrolmentfee','reservefee','hidelostitems','overduenoticerequired','category_type','categorycode'));
$sth->finish;
} else {
- my $sth=$dbh->prepare("INSERT INTO categories (categorycode,description,enrolmentperiod,enrolmentperioddate,upperagelimit,dateofbirthrequired,enrolmentfee,reservefee,overduenoticerequired,category_type) values (?,?,?,?,?,?,?,?,?,?)");
- $sth->execute(map { $input->param($_) } ('categorycode','description','enrolmentperiod','enrolmentperioddate','upperagelimit','dateofbirthrequired','enrolmentfee','reservefee','overduenoticerequired','category_type'));
+ my $sth=$dbh->prepare("INSERT INTO categories (categorycode,description,enrolmentperiod,enrolmentperioddate,upperagelimit,dateofbirthrequired,enrolmentfee,reservefee,hidelostitems,overduenoticerequired,category_type) values (?,?,?,?,?,?,?,?,?,?)");
+ $sth->execute(map { $input->param($_) } ('categorycode','description','enrolmentperiod','enrolmentperioddate','upperagelimit','dateofbirthrequired','enrolmentfee','reservefee','hidelostitems','overduenoticerequired','category_type'));
$sth->finish;
}
if (C4::Context->preference('EnhancedMessagingPreferences')) {
$sth->finish;
$template->param(total => $total->{'total'});
- my $sth2=$dbh->prepare("select categorycode,description,enrolmentperiod,enrolmentperioddate,upperagelimit,dateofbirthrequired,enrolmentfee,issuelimit,reservefee,overduenoticerequired,category_type from categories where categorycode=?");
+ my $sth2=$dbh->prepare("select categorycode,description,enrolmentperiod,enrolmentperioddate,upperagelimit,dateofbirthrequired,enrolmentfee,issuelimit,reservefee,hidelostitems,overduenoticerequired,category_type from categories where categorycode=?");
$sth2->execute($categorycode);
my $data=$sth2->fetchrow_hashref;
$sth2->finish;
overduenoticerequired => $data->{'overduenoticerequired'},
issuelimit => $data->{'issuelimit'},
reservefee => sprintf("%.2f",$data->{'reservefee'}),
+ hidelostitems => $data->{'hidelostitems'},
category_type => $data->{'category_type'},
);
# END $OP eq DELETE_CONFIRM
overduenoticerequired => $results->[$i]{'overduenoticerequired'},
issuelimit => $results->[$i]{'issuelimit'},
reservefee => sprintf("%.2f",$results->[$i]{'reservefee'}),
+ hidelostitems => $results->[$i]{'hidelostitems'},
category_type => $results->[$i]{'category_type'},
"type_".$results->[$i]{'category_type'} => 1);
if (C4::Context->preference('EnhancedMessagingPreferences')) {
my $biblionumber = $query->param('biblionumber');
my $fw = GetFrameworkCode($biblionumber);
+my $showallitems = $query->param('showallitems');
+
## get notes and subjects from MARC record
my $marcflavour = C4::Context->preference("marcflavour");
my $record = GetMarcBiblio($biblionumber);
my $itemtypes = GetItemTypes();
my $dbh = C4::Context->dbh;
-# change back when ive fixed request.pl
-my @items = &GetItemsInfo( $biblionumber, 'intra' );
+# 'intra' param included, even though it's not respected in GetItemsInfo currently
+my @all_items= GetItemsInfo($biblionumber, 'intra');
+my @items;
+for my $itm (@all_items) {
+ push @items, $itm unless ( $itm->{itemlost} && GetHideLostItemsPreference($borrowernumber) && !$showallitems);
+}
my $dat = &GetBiblioData($biblionumber);
# get count of holds
if ( defined $dat->{'itemtype'} ) {
$dat->{imageurl} = getitemtypeimagelocation( 'intranet', $itemtypes->{ $dat->{itemtype} }{imageurl} );
}
-$dat->{'count'} = scalar @items;
+
+$dat->{'count'} = scalar @all_items;
+$dat->{'showncount'} = scalar @items;
+$dat->{'hiddencount'} = scalar @all_items - scalar @items;
+
my $shelflocations = GetKohaAuthorisedValues('items.location', $fw);
my $collections = GetKohaAuthorisedValues('items.ccode' , $fw);
my (@itemloop, %itemfields);
use C4::Circulation; # to use itemissues
use C4::Members; # to use GetMember
use C4::Search; # enabled_staff_search_views
+use C4::Members qw/GetHideLostItemsPreference/;
my $query=new CGI;
my $title=$query->param('title');
my $bi=$query->param('bi');
$bi = $biblionumber unless $bi;
+my $itemnumber = $query->param('itemnumber');
my $data=GetBiblioData($biblionumber);
my $dewey = $data->{'dewey'};
+my $showallitems = $query->param('showallitems');
#coping with subscriptions
my $subscriptionsnumber = CountSubscriptionFromBiblionumber($biblionumber);
my @results;
my $fw = GetFrameworkCode($biblionumber);
-my @items= GetItemsInfo($biblionumber);
-my $count=@items;
-$data->{'count'}=$count;
+my @all_items= GetItemsInfo($biblionumber);
+my @items;
+for my $itm (@all_items) {
+ push @items, $itm unless ( $itm->{itemlost} &&
+ GetHideLostItemsPreference($loggedinuser) &&
+ !$showallitems &&
+ ($itemnumber != $itm->{itemnumber}));
+}
+
+my $totalcount=@all_items;
+my $showncount=@items;
+my $hiddencount = $totalcount - $showncount;
+$data->{'count'}=$totalcount;
+$data->{'showncount'}=$showncount;
+$data->{'hiddencount'}=$hiddencount; # can be zero
my $ccodes= GetKohaAuthorisedValues('items.ccode',$fw);
my $itemtypes = GetItemTypes;
$data->{'itemtypename'} = $itemtypes->{$data->{'itemtype'}}->{'description'};
$results[0]=$data;
-my $itemnumber;
($itemnumber) and @items = (grep {$_->{'itemnumber'} == $itemnumber} @items);
foreach my $item (@items){
$item->{itemlostloop}= GetAuthorisedValues(GetAuthValCode('items.itemlost',$fw),$item->{itemlost}) if GetAuthValCode('items.itemlost',$fw);
$template->param(biblionumber => $biblionumber);
$template->param(biblioitemnumber => $bi);
$template->param(itemnumber => $itemnumber);
-$template->param(ONLY_ONE => 1) if ( $itemnumber && $count != @items );
+$template->param(ONLY_ONE => 1) if ( $itemnumber && $showncount != @items );
$template->param(z3950_search_params => C4::Search::z3950_search_args(GetBiblioData($biblionumber)));
output_html_with_http_headers $query, $cookie, $template->output;
`overduenoticerequired` tinyint(1) default NULL,
`issuelimit` smallint(6) default NULL,
`reservefee` decimal(28,6) default NULL,
+ `hidelostitems` tinyint(1) NOT NULL default '0'
`category_type` varchar(1) NOT NULL default 'A',
PRIMARY KEY (`categorycode`),
UNIQUE KEY `categorycode` (`categorycode`)
SetVersion ($DBversion);
}
+$DBversion = '3.03.00.XXX';
+if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
+ $dbh->do("ALTER TABLE `categories` ADD `hidelostitems` tinyint(1) NOT NULL default '0' AFTER `reservefee`");
+ print "Upgrade to $DBversion done (Add hidelostitems preference to borrower categories)\n";
+ SetVersion ($DBversion);
+}
+
=head1 FUNCTIONS
=head2 DropAllForeignKeys($table)
<option value="1">Yes</option>
<!-- /TMPL_IF -->
</select></li>
+ <li><label for="hidelostitems">Lost items in staff client</label> <select name="hidelostitems" id="hidelostitems">
+ <!-- TMPL_IF NAME="hidelostitems" -->
+ <option value="0">Shown</option>
+ <option value="1" selected="selected">Hidden by default</option>
+ <!-- TMPL_ELSE -->
+ <option value="0" selected="selected">Shown</option>
+ <option value="1">Hidden by default</option>
+ <!-- /TMPL_IF -->
+ </select></li>
<li><label for="reservefee">Hold fee: </label><input type="text" name="reservefee" id="reservefee" size="6" value="<!-- TMPL_VAR NAME="reservefee" -->" /></li>
<li><label for="category_type">Category type: </label> <select name="category_type" id="category_type">
<!-- TMPL_IF NAME="type_n" --><option value="" selected="selected">Select a Category type</option><!-- TMPL_ELSE --><option value="">Select a Category type</option><!-- /TMPL_IF -->
<tr><th scope="row">Upperage limit: </th><td><!-- TMPL_VAR NAME="upperagelimit" --> years</td></tr>
<tr><th scope="row">Enrollment fee: </th><td><!-- TMPL_VAR NAME="enrolmentfee" --></td></tr>
<tr><th scope="row">Receives overdue notices: </th><td><!-- TMPL_IF NAME="overduenoticerequired" -->Yes<!-- TMPL_ELSE -->No<!-- /TMPL_IF --></td></tr>
+ <tr><th scope="row">Lost items in staff client</th><td><!-- TMPL_IF NAME="hidelostitems" -->Hidden by default<!-- TMPL_ELSE -->Shown<!-- /TMPL_IF --></td></tr>
<tr><th scope="row">Hold fee: </th><td><!-- TMPL_VAR NAME="reservefee" --></td></tr>
</table>
<fieldset class="action"><!-- TMPL_IF NAME="totalgtzero" -->
<th scope="col">Upper age limit</th>
<th scope="col">Enrollment fee</th>
<th scope="col">Overdue</th>
+ <th scope="col">Lost Items</th>
<th scope="col">Hold fee</th>
<!-- TMPL_IF NAME="EnhancedMessagingPreferences" -->
<th scope="col">Messaging</th>
<td><!-- TMPL_VAR NAME="upperagelimit" --> years</td>
<td><!-- TMPL_VAR NAME="enrolmentfee" --></td>
<td><!-- TMPL_IF NAME="overduenoticerequired" -->Yes<!-- TMPL_ELSE -->No<!-- /TMPL_IF --></td>
+ <td><!-- TMPL_IF NAME="hidelostitems" -->Hidden<!-- TMPL_ELSE -->Shown<!-- /TMPL_IF --></td>
<td><!-- TMPL_VAR NAME="reservefee" --></td>
<!-- TMPL_IF NAME="EnhancedMessagingPreferences" -->
<td>
<div id="holdings">
<!-- TMPL_IF name="count" -->
+ <!-- TMPL_IF name="showncount" -->
<table>
<tr>
<!-- TMPL_IF NAME="item_level_itypes" --><th>Item type</th><!-- /TMPL_IF -->
</tr>
<!-- /TMPL_LOOP -->
</table>
+ <!-- /TMPL_IF -->
+ <!-- TMPL_IF NAME="hiddencount" -->
+ <p><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&showallitems=1">Show all items (<!-- TMPL_VAR NAME="hiddencount" --> hidden)</a>
+ <!-- /TMPL_IF -->
<!-- TMPL_IF NAME="debug_display" -->
<br /><br />
<table>
<tr><td>itemdata_copynumber</td><td><!-- TMPL_VAR NAME="itemdata_copynumber" --></td></tr>
<tr><td>serial</td><td><!-- TMPL_VAR NAME="serial" --></td></tr>
</table>
- <!-- /TMPL_IF -->
+ <!-- /TMPL_IF -->
<!-- TMPL_ELSE -->
<p>No physical items for this record</p>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="volumeddesc" --><li><span class="label">Volume:</span> <!-- TMPL_VAR NAME="volumeddesc" --></li><!-- /TMPL_IF -->
<li><span class="label">Physical Details:</span> <!-- TMPL_VAR NAME="pages" --> <!-- TMPL_VAR NAME="illus" --> <!-- TMPL_VAR NAME="size" --> </li>
<!-- TMPL_IF NAME="bnotes" --><li><span class="label">Notes:</span> <!-- TMPL_VAR NAME="bnotes" --></li><!-- /TMPL_IF -->
- <li><span class="label">No. of Items:</span> <!-- TMPL_VAR NAME="count" --> </li>
+ <li><span class="label">No. of Items:</span> <!-- TMPL_VAR NAME="count" --> <!-- TMPL_IF NAME="hiddencount" -->total (<!-- TMPL_VAR NAME="showncount" --> shown / <!-- TMPL_VAR NAME="hiddencount" --> hidden)
+<a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&showallitems=1">Show all items</a><!-- /TMPL_IF --></li>
</ol>
<!-- /TMPL_LOOP -->
<br clear="all" />
<th>Information</th>
</tr>
<!-- TMPL_LOOP Name="itemloop" -->
+ <!-- TMPL_UNLESS NAME="hide"-->
<tr class="<!-- TMPL_VAR NAME="backgroundcolor" -->">
<td>
<!-- TMPL_IF NAME="available" -->
<!-- /TMPL_IF -->
</td>
</tr>
+ <!-- /TMPL_UNLESS --> <!--UNLESS item hide-->
<!-- /TMPL_LOOP --> <!-- itemloop -->
</table>
-
+ <!-- TMPL_IF NAME=hiddencount -->
+ <form>
+ <p class="hiddencount"><a href="request.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber"-->&cardnumber=<!-- TMPL_VAR NAME="cardnumber" -->&showallitems=1">Show all items (<!--TMPL_VAR NAME="hiddencount" --> hidden)</a></p>
+ </form>
+ <!-- /TMPL_IF --> <!-- hiddencount -->
<!-- /TMPL_LOOP --> <!-- bibitemloop -->
<!-- TMPL_ELSE --><!-- UNLESS multi_hold -->
my $multihold = $input->param('multi_hold');
$template->param(multi_hold => $multihold);
+my $showallitems = $input->param('showallitems');
# get Branches and Itemtypes
my $branches = GetBranches();
my $biblioitem = $biblioiteminfos_of->{$biblioitemnumber};
my $num_available = 0;
my $num_override = 0;
+ my $hiddencount = 0;
$biblioitem->{description} =
$itemtypes->{ $biblioitem->{itemtype} }{description};
$item->{notforloanvalue} =
$notforloan_label_of->{ $item->{notforloan} };
}
-
+
# Management of lost or long overdue items
if ( $item->{itemlost} ) {
: $item->{itemlost} == 2 ? "(long overdue)"
: "";
$item->{backgroundcolor} = 'other';
+ if (GetHideLostItemsPreference($borrowernumber) && !$showallitems) {
+ $item->{hide} = 1;
+ $hiddencount++;
+ }
}
# Check the transit status
$biblioloopiter{warn} = 1;
$biblioloopiter{none_avail} = 1;
}
+ $template->param( hiddencount => $hiddencount);
push @bibitemloop, $biblioitem;
}