Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
digibib
deichman
Commits
a0924c74
Commit
a0924c74
authored
Jan 15, 2019
by
Benjamin Rokseth
Committed by
Benjamin Rokseth
Jan 15, 2019
Browse files
koha: Add Deichman::Item->reservableItemsCount
parent
a70e9e01
Changes
2
Show whitespace changes
Inline
Side-by-side
koha/Core/Circulation.pm
View file @
a0924c74
...
...
@@ -11,6 +11,7 @@ use DateTime;
use
DateTime::
Duration
;
use
DateTime::Format::
Strptime
;
use
Deichman::
Item
;
use
Koha::
Holds
;
use
Koha::
Items
;
use
Koha::
Item
;
...
...
@@ -798,7 +799,6 @@ sub canItemBeRenewed {
if
(
$override
)
{
return
$self
;
}
# Too few items to fill holds means item cannot be renewed
if
(
not
$self
->
canItemFillHold
())
{
$self
->
{
error
}
=
Core::Exception::Circulation::
RenewError
->
new
("
on_hold
");
...
...
@@ -867,6 +867,7 @@ sub canItemBeReturned {
=head
Check if item can fill a pending hold
reservable means:
- item is not on item level hold
- item not found (Waiting or in Transfer)
- item not lost, withdrawn
- item notforloan not code > 0
...
...
@@ -885,21 +886,28 @@ sub canItemFillHold {
# IndependentBranches
# canreservefromotherbranches
# AllowHoldsOnDamagedItems
my
$reservableItems
=
Koha::
Items
->
search
({
"
me.biblionumber
"
=>
$self
->
{
item
}
->
biblionumber
,
itemlost
=>
0
,
withdrawn
=>
0
,
notforloan
=>
{
"
<=
"
=>
0
},
"
reserves.found
"
=>
{
"
!=
"
=>
undef
},
},
{
join
=>
"
reserves
"
});
if
(
$reservableItems
->
count
<
$self
->
getPendingHoldsByBiblio
->
count
)
{
return
0
;
}
else
{
return
1
;
}
# my $reservableItems = Koha::Items->search({
# "me.biblionumber" => $self->{item}->biblionumber,
# itemlost => 0,
# withdrawn => 0,
# notforloan => { "<=" => 0 },
# "reserves.found" => { "!=" => undef },
# },
# { join => "reserves" });
# if ($reservableItems->count < $self->getPendingHoldsByBiblio->count) {
# return 0;
# } else {
# return 1;
# }
my
$reservable
;
try
{
my
$it
=
Deichman::
Item
->
new
()
->
Get
(
$self
->
{
item
}
->
itemnumber
);
$reservable
=
$it
->
reservableItemsCount
()
>=
1
;
}
catch
{
warn
$_
;
};
return
$reservable
;
}
=head
get soonest renewal date from date and circ rule
...
...
koha/Deichman/Item.pm
View file @
a0924c74
...
...
@@ -101,6 +101,33 @@ sub GetBiblioHolds {
return
$self
;
}
sub
reservableItemsCount
{
my
(
$self
)
=
@_
;
return
unless
$self
->
{
item
};
my
$dbh
=
$self
->
dbh
;
my
$q
=
"
SELECT available.total - reserves.total AS count
FROM
( SELECT SUM(1) AS total FROM items i
LEFT JOIN issues iss USING (itemnumber)
LEFT JOIN branchtransfers bt ON (bt.itemnumber = i.itemnumber AND bt.datearrived IS NULL)
LEFT JOIN borrowers b ON (b.borrowernumber=iss.borrowernumber)
WHERE i.biblionumber = ?
AND i.itemlost = 0 AND i.withdrawn = 0
AND i.notforloan <= 0
AND i.deleted_on IS NULL
AND iss.issue_id IS NULL
AND bt.itemnumber IS NULL
) available
JOIN
( SELECT COALESCE(SUM(1), 0) AS total FROM reserves WHERE biblionumber = ? ) reserves
";
my
$sth
=
$dbh
->
prepare
(
$q
);
$sth
->
execute
(
$self
->
{
item
}
->
{
biblionumber
},
$self
->
{
item
}
->
{
biblionumber
})
or
Deichman::Exception::
Item
->
throw
(
$dbh
->
errstr
);
my
(
$count
)
=
$sth
->
fetchrow_array
();
return
$count
;
}
sub
MarkAsMaybeIPP
{
my
(
$self
)
=
@_
;
my
$dbh
=
$self
->
dbh
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment