use CGI qw ( -utf8 );
use C4::Auth;
use C4::Debug;
-use C4::Items qw( ModItem ModItemTransfer );
+use C4::Items qw( ModItemTransfer );
use C4::Reserves qw( ModReserveCancelAll );
use Koha::Biblios;
use Koha::DateUtils;
template_name => "circ/pendingreserves.tt",
query => $input,
type => "intranet",
- authnotrequired => 0,
flagsrequired => { circulate => "circulate_remaining_permissions" },
debug => 1,
}
if ( $op eq 'cancel_reserve' and $reserve_id ) {
my $hold = Koha::Holds->find( $reserve_id );
if ( $hold ) {
- $hold->cancel;
+ my $cancellation_reason = $input->param('cancellation-reason');
+ $hold->cancel({ cancellation_reason => $cancellation_reason });
push @messages, { type => 'message', code => 'hold_cancelled' };
}
} elsif ( $op =~ m|^mark_as_lost| ) {
}
$hold->cancel;
if ( $item->homebranch ne $item->holdingbranch ) {
- C4::Items::ModItemTransfer( $item->itemnumber, $item->holdingbranch, $item->homebranch );
+ C4::Items::ModItemTransfer( $item->itemnumber, $item->holdingbranch, $item->homebranch, 'LostReserve' );
}
if ( my $yaml = C4::Context->preference('UpdateItemWhenLostFromHoldList') ) {
}
else {
eval {
- C4::Items::ModItem( $assignments, undef, $item->itemnumber );
+ while ( my ( $f, $v ) = each( %$assignments ) ) {
+ $item->$f($v);
+ }
+ $item->store;
};
warn "Unable to modify item itemnumber=" . $item->itemnumber . ": $@" if $@;
}
my $item_type = C4::Context->preference('item-level_itypes') ? "items.itype" : "biblioitems.itemtype";
+# Bug 21320
+if ( ! C4::Context->preference('AllowHoldsOnDamagedItems') ) {
+ $sqldatewhere .= " AND damaged = 0";
+}
+
my $strsth =
"SELECT min(reservedate) as l_reservedate,
reserves.reserve_id,
GROUP_CONCAT(DISTINCT items.location
ORDER BY items.itemnumber SEPARATOR '|') l_location,
GROUP_CONCAT(DISTINCT items.itemcallnumber
- ORDER BY items.itemnumber SEPARATOR '<br/>') l_itemcallnumber,
+ ORDER BY items.itemnumber SEPARATOR '|') l_itemcallnumber,
GROUP_CONCAT(DISTINCT items.enumchron
- ORDER BY items.itemnumber SEPARATOR '<br/>') l_enumchron,
+ ORDER BY items.itemnumber SEPARATOR '|') l_enumchron,
GROUP_CONCAT(DISTINCT items.copynumber
- ORDER BY items.itemnumber SEPARATOR '<br/>') l_copynumber,
+ ORDER BY items.itemnumber SEPARATOR '|') l_copynumber,
+ GROUP_CONCAT(DISTINCT items.barcode
+ ORDER BY items.itemnumber SEPARATOR '|') l_barcode,
biblio.title,
+ biblio.copyrightdate,
+ biblioitems.publicationyear,
+ biblio.subtitle,
+ biblio.medium,
+ biblio.part_number,
+ biblio.part_name,
biblio.author,
+ biblioitems.editionstatement,
count(DISTINCT items.itemnumber) as icount,
count(DISTINCT reserves.borrowernumber) as rcount,
borrowers.firstname,
LEFT JOIN branchtransfers ON items.itemnumber=branchtransfers.itemnumber
LEFT JOIN issues ON items.itemnumber=issues.itemnumber
LEFT JOIN borrowers ON reserves.borrowernumber=borrowers.borrowernumber
+ LEFT JOIN circulation_rules ON ( items.itype=circulation_rules.itemtype AND rule_name = 'holdallowed' AND circulation_rules.branchcode IS NULL AND circulation_rules.categorycode IS NULL )
WHERE
reserves.found IS NULL
$sqldatewhere
AND (reserves.itemnumber IS NULL OR reserves.itemnumber = items.itemnumber)
AND items.itemnumber NOT IN (SELECT itemnumber FROM branchtransfers where datearrived IS NULL)
- AND items.itemnumber NOT IN (select itemnumber FROM reserves where found IS NOT NULL)
+ AND items.itemnumber NOT IN (SELECT itemnumber FROM reserves WHERE found IS NOT NULL AND itemnumber IS NOT NULL)
AND issues.itemnumber IS NULL
AND reserves.priority <> 0
AND reserves.suspend = 0
- AND notforloan = 0 AND damaged = 0 AND itemlost = 0 AND withdrawn = 0
+ AND notforloan = 0 AND itemlost = 0 AND withdrawn = 0
+ AND ( circulation_rules.rule_value IS NULL OR circulation_rules.rule_value != 0 )
";
# GROUP BY reserves.biblionumber allows only items that are not checked out, else multiples occur when
# multiple patrons have a hold on an item
-
+#FIXME "found IS NOT NULL AND itemnumber IS NOT NULL" is just a workaround: see BZ 25726
if (C4::Context->preference('IndependentBranches')){
$strsth .= " AND items.holdingbranch=? ";
$sth->execute(@query_params);
while ( my $data = $sth->fetchrow_hashref ) {
- my $record = Koha::Biblios->find($data->{biblionumber});
- if ($record){
- $data->{subtitle} = [ $record->subtitles ];
- }
push(
@reservedata, {
- reservedate => $data->{l_reservedate},
- firstname => $data->{firstname} || '',
- surname => $data->{surname},
- title => $data->{title},
- subtitle => $data->{subtitle},
- author => $data->{author},
- borrowernumber => $data->{borrowernumber},
- biblionumber => $data->{biblionumber},
- holdingbranches => [split('\|', $data->{l_holdingbranch})],
- branch => $data->{l_branch},
- itemcallnumber => $data->{l_itemcallnumber},
- enumchron => $data->{l_enumchron},
- copyno => $data->{l_copynumber},
- count => $data->{icount},
- rcount => $data->{rcount},
- pullcount => $data->{icount} <= $data->{rcount} ? $data->{icount} : $data->{rcount},
- itemTypes => [split('\|', $data->{l_item_type})],
- locations => [split('\|', $data->{l_location})],
- reserve_id => $data->{reserve_id},
- holdingbranch => $data->{holdingbranch},
- homebranch => $data->{homebranch},
- itemnumber => $data->{itemnumber},
+ reservedate => $data->{l_reservedate},
+ firstname => $data->{firstname} || '',
+ surname => $data->{surname},
+ title => $data->{title},
+ editionstatement => $data->{editionstatement},
+ subtitle => $data->{subtitle},
+ medium => $data->{medium},
+ part_number => $data->{part_number},
+ part_name => $data->{part_name},
+ author => $data->{author},
+ borrowernumber => $data->{borrowernumber},
+ biblionumber => $data->{biblionumber},
+ holdingbranches => [split('\|', $data->{l_holdingbranch})],
+ branch => $data->{l_branch},
+ itemcallnumber => [split('\|', $data->{l_itemcallnumber})],
+ enumchron => [split('\|', $data->{l_enumchron})],
+ copyno => [split('\|', $data->{l_copynumber})],
+ barcode => [split('\|', $data->{l_barcode})],
+ count => $data->{icount},
+ rcount => $data->{rcount},
+ pullcount => $data->{icount} <= $data->{rcount} ? $data->{icount} : $data->{rcount},
+ itemTypes => [split('\|', $data->{l_item_type})],
+ locations => [split('\|', $data->{l_location})],
+ reserve_id => $data->{reserve_id},
+ holdingbranch => $data->{holdingbranch},
+ homebranch => $data->{homebranch},
+ itemnumber => $data->{itemnumber},
+ publicationyear => C4::Context->preference('marcflavour') eq "MARC21" ? $data->{copyrightdate} : $data->{publicationyear},
}
);
}