Browse Source

Bug 24412: Attach waiting reserve to desk

When an item is checked in and marked 'Waiting' or already 'Waiting'
and there is a desk attached to the session, the item is marked
waiting at the current desk of the current library.

The information is displayed on the OPAC and on the intranet. The
patron can then know at which desk he can retrieve his document.

Desk Management (Bug 13881) is now useful.

Test plan :

1. apply Bug 24201
2. $KOHA_PATH/installer/data/mysql/updatedatabase.pl
3. Check out some document to someone
4. make another one reserve this document
5. check in the document
6. you can see the document is attach to the current library
7. create some desks and attach one to your session (see Bug 13881 and
Bug 24201)
8. cancel the preceding reserve and redo steps 3 to 5
9. you should see the document is waiting at the current library and
current desk on:
  a. the intranet document request page
  b. the intranet borrower holds tab
  c. the item list where the document is listed on the bibliographic
    details
  d. the borrower's OPAC holds tab.

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Séverine QUEUNE <severine.queune@bulac.fr>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Bug 24412: (follow-up) QA

Following Josef Moravec QA comments :

- rewrite Koha::Hold->desk according to Object Oriented Koha
Guidelines and use it to fetch desk name in various templates
- remove unused Desks.GetName
- Check for columns existence in db update

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Séverine QUEUNE <severine.queune@bulac.fr>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Bug 24412: (follow-up) QA: useless change

Maybe it was a relic of something usefull... anyway
not anymore.

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Séverine QUEUNE <severine.queune@bulac.fr>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Bug 24412: (follow-up) Fix POD

Koha::Desk and not Koha::Library...

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
20.11.x
Nicolas Legrand 2 years ago
committed by Jonathan Druart
parent
commit
47b32572d4
  1. 6
      C4/Reserves.pm
  2. 16
      Koha/Hold.pm
  3. 5
      circ/returns.pl
  4. 25
      installer/data/mysql/atomicupdate/bug_24412_Attach_waiting_reserve_to_desk.perl
  5. 2
      koha-tmpl/intranet-tmpl/prog/en/includes/holds_table.inc
  6. 2
      koha-tmpl/intranet-tmpl/prog/en/includes/waiting_holds.inc
  7. 2
      koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt
  8. 7
      koha-tmpl/intranet-tmpl/prog/js/holds.js
  9. 1
      koha-tmpl/opac-tmpl/bootstrap/en/includes/holds-table.inc
  10. 1
      reserve/request.pl
  11. 1
      svc/holds

6
C4/Reserves.pm

@ -1136,7 +1136,7 @@ sub ModReserveStatus {
=head2 ModReserveAffect
&ModReserveAffect($itemnumber,$borrowernumber,$diffBranchSend,$reserve_id);
&ModReserveAffect($itemnumber,$borrowernumber,$diffBranchSend,$reserve_id, $desk_id);
This function affect an item and a status for a given reserve, either fetched directly
by record_id, or by borrowernumber and itemnumber or biblionumber. If only biblionumber
@ -1150,7 +1150,7 @@ take care of the waiting status
=cut
sub ModReserveAffect {
my ( $itemnumber, $borrowernumber, $transferToDo, $reserve_id ) = @_;
my ( $itemnumber, $borrowernumber, $transferToDo, $reserve_id, $desk_id ) = @_;
my $dbh = C4::Context->dbh;
# we want to attach $itemnumber to $borrowernumber, find the biblionumber
@ -1183,7 +1183,7 @@ sub ModReserveAffect {
&& !$already_on_shelf) {
$hold->set_processing();
} else {
$hold->set_waiting();
$hold->set_waiting($desk_id);
_koha_notify_reserve( $hold->reserve_id ) unless $already_on_shelf;
my $transfers = Koha::Item::Transfers->search({
itemnumber => $itemnumber,

16
Koha/Hold.pm

@ -175,7 +175,7 @@ sub set_transfer {
=cut
sub set_waiting {
my ( $self ) = @_;
my ( $self, $desk_id ) = @_;
$self->priority(0);
@ -183,6 +183,7 @@ sub set_waiting {
my $values = {
found => 'W',
waitingdate => $today->ymd,
desk_id => $desk_id,
};
my $requested_expiration;
@ -365,6 +366,19 @@ sub branch {
return $self->{_branch};
}
=head3 desk
Returns the related Koha::Desk object for this Hold
=cut
sub desk {
my $self = shift;
my $desk_rs = $self->_result->desk;
return unless $desk_rs;
return Koha::Desk->_new_from_dbic($desk_rs);
}
=head3 borrower
Returns the related Koha::Patron object for this Hold

5
circ/returns.pl

@ -71,6 +71,7 @@ my ( $template, $librarian, $cookie, $flags ) = get_template_and_user(
my $sessionID = $query->cookie("CGISESSID");
my $session = get_session($sessionID);
my $desk_id = C4::Context->userenv->{"desk_id"} || '';
# Print a reserve slip on this page
if ( $query->param('print_slip') ) {
@ -155,7 +156,7 @@ if ( $query->param('reserve_id') ) {
my $diffBranchSend = ($userenv_branch ne $diffBranchReturned) ? $diffBranchReturned : undef;
# diffBranchSend tells ModReserveAffect whether document is expected in this library or not,
# i.e., whether to apply waiting status
ModReserveAffect( $itemnumber, $borrowernumber, $diffBranchSend, $reserve_id );
ModReserveAffect( $itemnumber, $borrowernumber, $diffBranchSend, $reserve_id, $desk_id );
}
# check if we have other reserves for this document, if we have a return send the message of transfer
my ( $messages, $nextreservinfo ) = GetOtherReserves($itemnumber);
@ -422,7 +423,7 @@ if ( $messages->{'ResFound'}) {
my $biblio = $item->biblio;
my $diffBranchSend = !$branchCheck ? $reserve->{branchcode} : undef;
ModReserveAffect( $reserve->{itemnumber}, $reserve->{borrowernumber}, $diffBranchSend, $reserve->{reserve_id} );
ModReserveAffect( $reserve->{itemnumber}, $reserve->{borrowernumber}, $diffBranchSend, $reserve->{reserve_id}, $desk_id );
my ( $messages, $nextreservinfo ) = GetOtherReserves($reserve->{itemnumber});
$template->param(

25
installer/data/mysql/atomicupdate/bug_24412_Attach_waiting_reserve_to_desk.perl

@ -1,16 +1,17 @@
$DBversion = 'XXX'; # will be replaced by the RM
if( CheckVersion( $DBversion ) ) {
# you can use $dbh here like:
$dbh->do(q{
ALTER TABLE reserves ADD COLUMN desk_id INT(11) DEFAULT NULL AFTER branchcode,
ADD KEY desk_id (`desk_id`),
ADD CONSTRAINT `reserves_ibfk_6` FOREIGN KEY (`desk_id`) REFERENCES `desks` (`desk_id`) ON DELETE CASCADE ON UPDATE CASCADE ;
});
$dbh->do(q{
ALTER TABLE old_reserves ADD COLUMN desk_id INT(11) DEFAULT NULL AFTER branchcode,
ADD KEY `old_desk_id` (`desk_id`);
});
if ( !column_exists( 'reserves', 'desk_id' ) ) {
$dbh->do(q{
ALTER TABLE reserves ADD COLUMN desk_id INT(11) DEFAULT NULL AFTER branchcode,
ADD KEY desk_id (`desk_id`),
ADD CONSTRAINT `reserves_ibfk_6` FOREIGN KEY (`desk_id`) REFERENCES `desks` (`desk_id`) ON DELETE CASCADE ON UPDATE CASCADE ;
});
$dbh->do(q{
ALTER TABLE old_reserves ADD COLUMN desk_id INT(11) DEFAULT NULL AFTER branchcode,
ADD KEY `old_desk_id` (`desk_id`);
});
SetVersion( $DBversion );
print "Upgrade to $DBversion done (Bug XXXXX - Attach waiting reserve to desk)\n";
SetVersion( $DBversion );
print "Upgrade to $DBversion done (Bug XXXXX - Attach waiting reserve to desk)\n";
}
}

2
koha-tmpl/intranet-tmpl/prog/en/includes/holds_table.inc

@ -122,7 +122,7 @@
<td>
[% IF ( hold.found ) %]
[% IF ( hold.atdestination ) %]
Item waiting at <strong> [% hold.wbrname | html %]</strong> <input type="hidden" name="pickup" value="[% hold.wbrcode | html %]" /> since [% hold.waiting_date | $KohaDates %]
Item waiting at <strong> [% hold.wbrname | html %]</strong>[% IF hold.desk_name %], [% hold.desk_name | html %],[% END %] <input type="hidden" name="pickup" value="[% hold.wbrcode | html %]" /> since [% hold.waiting_date | $KohaDates %]
[% ELSIF (hold.intransit) %]
Item being transferred to <strong> [% hold.wbrname | html %]</strong> <input type="hidden" name="pickup" value="[% hold.wbrcode | html %]" />
[% ELSIF (hold.inprocessing) %]

2
koha-tmpl/intranet-tmpl/prog/en/includes/waiting_holds.inc

@ -37,7 +37,7 @@
[% END %]
</td>
<td>[% Branches.GetName( reserveloo.item.homebranch ) | html %]</td>
<td>[% Branches.GetName( reserveloo.item.holdingbranch ) | html %]</td>
<td>[% Branches.GetName( reserveloo.item.holdingbranch ) | html %][% IF (reserveloo.desk_id ) %], [% Desks.GetName (reserveloo.desk_id) | html %][% END %]</td>
<td>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => reserveloo.item.location) | html %]</td>
<td>[% reserveloo.item.itemcallnumber | html %]</td>
<td>[% reserveloo.item.copynumber | html %]</td>

2
koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt

@ -461,7 +461,7 @@ Note that permanent location is a code, and location may be an authval.
[% SET hold = item.first_hold %]
[% IF hold %]
[% IF hold.waitingdate %]
<span class="waitingat">Waiting at [% Branches.GetName( hold.branchcode ) | html %] since [% hold.waitingdate | $KohaDates %].</span>
<span class="waitingat">Waiting at [% Branches.GetName( hold.branchcode ) | html %][% IF ( hold.desk_id ) %], [% hold.desk.desk_name | html %][% END %] since [% hold.waitingdate | $KohaDates %].</span>
[% IF canreservefromotherbranches AND ( hold.waitingdate OR hold.priority == 1 ) %]
<span class="heldfor">Hold for:</span>
[% INCLUDE 'patron-title.inc' patron=hold.borrower hide_patron_infos_if_needed=1 %]

7
koha-tmpl/intranet-tmpl/prog/js/holds.js

@ -161,9 +161,16 @@ $(document).ready(function() {
if ( oObj.waiting_here ) {
data += __("Item is <strong>waiting here</strong>");
if (oObj.desk_name) {
data += ", " + __("at %s").format( oObj.desk_name );
}
} else {
data += __("Item is <strong>waiting</strong>");
data += " " + __("at %s").format(oObj.waiting_at);
if (oObj.desk_name) {
data += ", " + __("at %s").format( oObj.desk_name );
}
}
} else if ( oObj.transferred ) {

1
koha-tmpl/opac-tmpl/bootstrap/en/includes/holds-table.inc

@ -100,6 +100,7 @@
<i class="fa fa-exclamation-circle text-warning" aria-hidden="true"></i>
[% IF ( HOLD.is_at_destination ) %]
Item waiting at <strong> [% HOLD.branch.branchname | html %]</strong>
[% IF ( HOLD.desk_id ) %], [% Desks.GetName ( HOLD.desk_id ) | html %],[% END %]
[% IF ( HOLD.waitingdate ) %]
since [% HOLD.waitingdate | $KohaDates %]
[% IF HOLD.expirationdate %]

1
reserve/request.pl

@ -658,6 +658,7 @@ foreach my $biblionumber (@biblionumbers) {
$reserve{'itemnumber'} = $res->itemnumber();
$reserve{'wbrname'} = $res->branch()->branchname();
$reserve{'atdestination'} = $res->is_at_destination();
$reserve{'desk_name'} = $res->desk()->desk_name();
$reserve{'found'} = $res->is_found();
$reserve{'inprocessing'} = $res->is_in_processing();
$reserve{'intransit'} = $res->is_in_transit();

1
svc/holds

@ -97,6 +97,7 @@ while ( my $h = $holds_rs->next() ) {
reserve_id => $h->reserve_id(),
branchcode => $h->branch()->branchname(),
branches => $libraries,
desk_name => $h->desk()->desk_name(),
reservedate => $h->reservedate(),
expirationdate => $h->expirationdate(),
suspend => $h->suspend(),

Loading…
Cancel
Save