use Modern::Perl;
-use C4::Branch;
use CGI qw ( -utf8 );
use List::MoreUtils qw/uniq/;
use Date::Calc qw/Date_to_Days/;
use C4::Search; # enabled_staff_search_views
use Koha::DateUtils;
use Koha::Holds;
+use Koha::Items;
+use Koha::ItemTypes;
use Koha::Libraries;
+use Koha::Patrons;
my $dbh = C4::Context->dbh;
my $input = new CGI;
$template->param(multi_hold => $multihold);
my $showallitems = $input->param('showallitems');
-# get Branches and Itemtypes
-my $branches = GetBranches();
-my $itemtypes = GetItemTypes();
+my $itemtypes = { map { $_->{itemtype} => $_ } @{ Koha::ItemTypes->search_with_localization->unblessed } };
# Select borrowers infos
my $findborrower = $input->param('findborrower');
my $borrowerinfo = GetMember( borrowernumber => $borrowernumber_hold );
my $diffbranch;
- # we check the reserves of the borrower, and if he can reserv a document
+ # we check the reserves of the user, and if they can reserve a document
# FIXME At this time we have a simple count of reservs, but, later, we could improve the infos "title" ...
my $reserves_count =
# FIXME launch another time GetMember perhaps until
my $borrowerinfo = GetMember( borrowernumber => $borrowernumber_hold );
+my $logged_in_patron = Koha::Patrons->find( $borrowernumber );
+
my $itemdata_enumchron = 0;
my @biblioloop = ();
foreach my $biblionumber (@biblionumbers) {
my $fixedRank = $count+1;
my %itemnumbers_of_biblioitem;
- my @itemnumbers;
- ## $items is array of 'item' table numbers
- if (my $items = get_itemnumbers_of($biblionumber)->{$biblionumber}){
- @itemnumbers = @$items;
- }
my @hostitems = get_hostitemnumbers_of($biblionumber);
+ my @itemnumbers;
if (@hostitems){
$template->param('hostitemsflag' => 1);
push(@itemnumbers, @hostitems);
}
- if (!@itemnumbers) {
+ my $items = Koha::Items->search({ -or => { biblionumber => $biblionumber, itemnumber => { in => \@itemnumbers } } });
+
+ unless ( $items->count ) {
+ # FIXME Then why do we continue?
$template->param('noitems' => 1);
$biblioloopiter{noitems} = 1;
}
- ## Hash of item number to 'item' table fields
- my $iteminfos_of = GetItemInfosOf(@itemnumbers);
-
## Here we go backwards again to create hash of biblioitemnumber to itemnumbers,
## when by definition all of the itemnumber have the same biblioitemnumber
- foreach my $itemnumber (@itemnumbers) {
- my $biblioitemnumber = $iteminfos_of->{$itemnumber}->{biblioitemnumber};
+ my ( $itemnumbers_of_biblioitem, $iteminfos_of);
+ while ( my $item = $items->next ) {
+ $item = $item->unblessed;
+ my $biblioitemnumber = $item->{biblioitemnumber};
+ my $itemnumber = $item->{itemnumber};
push( @{ $itemnumbers_of_biblioitem{$biblioitemnumber} }, $itemnumber );
+ $iteminfos_of->{$itemnumber} = $item;
}
## Should be same as biblionumber
my @biblioitemnumbers = keys %itemnumbers_of_biblioitem;
- my $notforloan_label_of = get_notforloan_label_of();
-
## Hash of biblioitemnumber to 'biblioitem' table records
my $biblioiteminfos_of = GetBiblioItemInfosOf(@biblioitemnumbers);
+ my $frameworkcode = GetFrameworkCode( $biblionumber );
+ my @notforloan_avs = Koha::AuthorisedValues->search_by_koha_field({ kohafield => 'items.notforloan', frameworkcode => $frameworkcode });
+ my $notforloan_label_of = { map { $_->authorised_value => $_->lib } @notforloan_avs };
+
my @bibitemloop;
my @available_itemtypes;
$item->{itypename} = $itemtypes->{ $item->{itype} }{description};
$item->{imageurl} = getitemtypeimagelocation( 'intranet', $itemtypes->{ $item->{itype} }{imageurl} );
- $item->{homebranchname} = $branches->{ $item->{homebranch} }{branchname};
+ $item->{homebranch} = $item->{homebranch};
# if the holdingbranch is different than the homebranch, we show the
# holdingbranch of the document too
if ( $item->{homebranch} ne $item->{holdingbranch} ) {
- $item->{holdingbranchname} =
- $branches->{ $item->{holdingbranch} }{branchname};
+ $item->{holdingbranch} = $item->{holdingbranch};
}
if($item->{biblionumber} ne $biblionumber){
}
# checking reserve
- my ($reservedate,$reservedfor,$expectedAt,$reserve_id,$wait) = GetReservesFromItemnumber($itemnumber);
- if ( defined $reservedate ) {
- my $ItemBorrowerReserveInfo = GetMember( borrowernumber => $reservedfor );
+ my $holds = Koha::Items->find( $itemnumber )->current_holds;
+ if ( my $first_hold = $holds->next ) {
+ my $ItemBorrowerReserveInfo = GetMember( borrowernumber => $first_hold->borrowernumber );
$item->{backgroundcolor} = 'reserved';
- $item->{reservedate} = output_pref({ dt => dt_from_string( $reservedate ), dateonly => 1 });
- $item->{ReservedForBorrowernumber} = $reservedfor;
+ $item->{reservedate} = output_pref({ dt => dt_from_string( $first_hold->reservedate ), dateonly => 1 }); # FIXME Should be formatted in the template
+ $item->{ReservedForBorrowernumber} = $first_hold->borrowernumber;
$item->{ReservedForSurname} = $ItemBorrowerReserveInfo->{'surname'};
$item->{ReservedForFirstname} = $ItemBorrowerReserveInfo->{'firstname'};
- $item->{ExpectedAtLibrary} = $branches->{$expectedAt}{branchname};
- $item->{waitingdate} = $wait;
+ $item->{ExpectedAtLibrary} = $first_hold->branchcode;
+ $item->{waitingdate} = $first_hold->waitingdate;
}
# Management of the notforloan document
: $item->{itemlost} == 2 ? "(long overdue)"
: "";
$item->{backgroundcolor} = 'other';
- if (GetHideLostItemsPreference($borrowernumber) && !$showallitems) {
+ if ($logged_in_patron->category->hidelostitems && !$showallitems) {
$item->{hide} = 1;
$hiddencount++;
}
if ( defined $transfertwhen && $transfertwhen ne '' ) {
$item->{transfertwhen} = output_pref({ dt => dt_from_string( $transfertwhen ), dateonly => 1 });
- $item->{transfertfrom} =
- $branches->{$transfertfrom}{branchname};
- $item->{transfertto} = $branches->{$transfertto}{branchname};
+ $item->{transfertfrom} = $transfertfrom;
+ $item->{transfertto} = $transfertto;
$item->{nocancel} = 1;
}
} @reserves
)
{
+ my $priority = $res->priority();
my %reserve;
my @optionloop;
for ( my $i = 1 ; $i <= $totalcount ; $i++ ) {
@optionloop,
{
num => $i,
- selected => ( $i == $res->priority() ),
+ selected => ( $i == $priority ),
}
);
}
$reserve{'surname'} = $res->borrower()->surname();
$reserve{'notes'} = $res->reservenotes();
$reserve{'waiting_date'} = $res->waitingdate();
- $reserve{'waiting_until'} = $res->is_waiting() ? $res->waiting_expires_on() : undef;
$reserve{'ccode'} = $res->item() ? $res->item()->ccode() : undef;
$reserve{'barcode'} = $res->item() ? $res->item()->barcode() : undef;
$reserve{'priority'} = $res->priority();
C4::Search::enabled_staff_search_views,
);
if (defined $borrowerinfo && exists $borrowerinfo->{'branchcode'}) {
- $template->param(
- borrower_branchname => $branches->{$borrowerinfo->{'branchcode'}}->{'branchname'},
- borrower_branchcode => $borrowerinfo->{'branchcode'},
- );
+ $template->param( borrower_branchcode => $borrowerinfo->{'branchcode'},);
}
$biblioloopiter{biblionumber} = $biblionumber;