Bugzilla – Attachment 72316 Details for
Bug 19532
Recalls for Koha
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 19532: Recall an item in OPAC
Bug-19532-Recall-an-item-in-OPAC.patch (text/plain), 10.15 KB, created by
Nick Clemens (kidclamp)
on 2018-03-01 16:00:37 UTC
(
hide
)
Description:
Bug 19532: Recall an item in OPAC
Filename:
MIME Type:
Creator:
Nick Clemens (kidclamp)
Created:
2018-03-01 16:00:37 UTC
Size:
10.15 KB
patch
obsolete
>From eae02d674319774c103a9819176ddf55cd1f2934 Mon Sep 17 00:00:00 2001 >From: Aleisha Amohia <aleishaamohia@hotmail.com> >Date: Mon, 13 Nov 2017 01:09:23 +0000 >Subject: [PATCH] Bug 19532: Recall an item in OPAC > > This patch: > - adds the 'Recall' button to the item on it's detail page > - adds ability to place a recall > - the recall is stored in the recalls table > - the due date for the checkout is updated to whatever has been set in > the issuing rule under recall_due_date_interval > - error messages for if the user isn't logged in, the user tries to > place a recall on an item they have already recalled, or if storing > the recall in the db fails for any reason > >Signed-off-by: Nick Clemens <nick@bywatersolutions.com> >--- > Koha/Recall.pm | 41 ++++++++- > Koha/Recalls.pm | 2 +- > .../bootstrap/en/includes/item-status.inc | 1 + > .../opac-tmpl/bootstrap/en/modules/opac-recall.tt | 62 ++++++++++++++ > opac/opac-recall.pl | 96 ++++++++++++++++++++++ > 5 files changed, 200 insertions(+), 2 deletions(-) > create mode 100644 koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-recall.tt > create mode 100755 opac/opac-recall.pl > >diff --git a/Koha/Recall.pm b/Koha/Recall.pm >index 7be9bad..596aafa 100644 >--- a/Koha/Recall.pm >+++ b/Koha/Recall.pm >@@ -37,10 +37,49 @@ Koha::Recall - Koha Recall Object class > > =cut > >-sub type { >+sub _type { > return 'Recall'; > } > >+=head3 is_waiting >+ >+Returns true if recall is awaiting pickup >+ >+=cut >+ >+sub is_waiting { >+ my ($self) = @_; >+ >+ my $status = $self->status; >+ return $status && $status eq 'W'; >+} >+ >+=head3 has_expired >+ >+Returns true if recall has expired >+ >+=cut >+ >+sub has_expired { >+ my ($self) = @_; >+ >+ my $status = $self->status; >+ return $status && $status eq 'E'; >+} >+ >+=head3 is_requested >+ >+Returns true if recall has been requested >+ >+=cut >+ >+sub is_requested { >+ my ($self) = @_; >+ >+ my $status = $self->status; >+ return $status && $status eq 'R'; >+} >+ > =head1 AUTHOR > > Aleisha Amohia <aleisha@catalyst.net.nz> >diff --git a/Koha/Recalls.pm b/Koha/Recalls.pm >index 067af85..578f7c8 100644 >--- a/Koha/Recalls.pm >+++ b/Koha/Recalls.pm >@@ -38,7 +38,7 @@ Koha::Recalls - Koha Recalls Object Set class > > =cut > >-sub type { >+sub _type { > return 'Recall'; > } > >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc b/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc >index ffb4d52..3c8400c 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc >@@ -38,6 +38,7 @@ > <span class="item-status checkedout">Checked out</span> > [% END %] > [% END %] >+ [% IF loggedinusername %]<a href="/cgi-bin/koha/opac-recall.pl?itemnumber=[% item.itemnumber %]" class="btn btn-default btn-xs">Recall</a>[% END %] > [% END %] > > [% IF NOT ( item.isa('Koha::Item') ) AND item.transfertwhen %] [%# transfertwhen is set in C4::Search, do not have it for course reserves %] >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-recall.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-recall.tt >new file mode 100644 >index 0000000..e5c5805 >--- /dev/null >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-recall.tt >@@ -0,0 +1,62 @@ >+[% USE Koha %] >+[% INCLUDE 'doc-head-open.inc' %] >+<title>[% IF ( LibraryNameTitle ) %][% LibraryNameTitle %][% ELSE %]Koha online[% END %] catalog › Recall</title> >+[% INCLUDE 'doc-head-close.inc' %] >+[% BLOCK cssinclude %][% END %] >+</head> >+<body id="opac-recall" class="scrollto"> >+[% INCLUDE 'masthead.inc' %] >+ >+<div class="main"> >+ <ul class="breadcrumb"> >+ <li><a href="/cgi-bin/koha/opac-main.pl">Home</a> <span class="divider">›</span></li> >+ <li><a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblio.biblionumber %]">Details for: [% biblio.title %]</a> <span class="divider">›</span></li> >+ <li><a href="/cgi-bin/koha/opac-recall.pl?itemnumber=[% itemnumber %]">Recall item</a></li> >+ </ul> >+ >+ <div class="container-fluid"> >+ <div class="row-fluid"> >+ <div class="span2"> >+ <div id="navigation"> >+ [% INCLUDE 'navigation.inc' IsPatronPage=1 %] >+ </div> >+ </div> >+ <div class="span10"> >+ <div id="discharge" class="maincontainer"> >+ <h1>Recall an item</h1> >+ [% IF error %] >+ <div class="dialog alert"> >+ [% IF error == 'notloggedin' %] >+ Please log in to place a recall. >+ [% ELSIF error == 'duplicate' %] >+ You have already placed a recall on this item. >+ [% ELSE %] >+ An error has occurred while attempting to place a recall. Please contact your library. >+ [% END %] >+ </div> >+ [% END %] >+ >+ [% IF success %] >+ <p>Your recall has been placed. The user the item is currently checked out to has been asked to return the item within [% due_interval %] [% due_unit %].</p> >+ <p>You will be notified when your item is waiting to be picked up at the library.</p> >+ [% ELSIF not error %] >+ <p>All borrowable material is subject to recall if checked out and needed by someone else. We will ask the person who has checked out this item to return it so you may use it.</p> >+ <p><strong>Warning</strong>: Your library does not allow recalls for x item types.</p> >+<hr> >+ [% IF loggedinusername %] >+ <div class="dialog"> >+ <p>Place a recall on [% biblio.title %] ([% biblio.author %])?</p> <a href="/cgi-bin/koha/opac-recall.pl?op=request&itemnumber=[% itemnumber %]" class="btn btn-default btn-sm">Confirm</a> <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% biblio.biblionumber %]">Cancel</a> >+ </div> >+ [% ELSE %] >+ <div class="dialog alert">You must be logged in to place a recall.</div> >+ [% END %] >+ >+ [% END %] >+ </div> <!-- / #discharge --> >+ </div> <!-- / .span10 --> >+ </div> <!-- / .row-fluid --> >+ </div> <!-- / .container-fluid --> >+</div> <!-- / .main --> >+ >+[% INCLUDE 'opac-bottom.inc' %] >+[% BLOCK jsinclude %][% END %] >diff --git a/opac/opac-recall.pl b/opac/opac-recall.pl >new file mode 100755 >index 0000000..72602a5 >--- /dev/null >+++ b/opac/opac-recall.pl >@@ -0,0 +1,96 @@ >+#!/usr/bin/perl >+ >+# This file is part of Koha. >+# >+# Copyright 2017 Aleisha Amohia <aleisha@catalyst.net.nz> >+# >+# Koha is free software; you can redistribute it and/or modify it >+# under the terms of the GNU General Public License as published by >+# the Free Software Foundation; either version 3 of the License, or >+# (at your option) any later version. >+# >+# Koha is distributed in the hope that it will be useful, but >+# WITHOUT ANY WARRANTY; without even the implied warranty of >+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >+# GNU General Public License for more details. >+# >+# You should have received a copy of the GNU General Public License >+# along with Koha; if not, see <http://www.gnu.org/licenses>. >+ >+use Modern::Perl; >+use CGI qw ( -utf8 ); >+use DateTime; >+use C4::Auth; >+use C4::Output; >+use C4::Context; >+use Koha::Items; >+use Koha::Recall; >+use Koha::Recalls; >+use Koha::DateUtils; >+use Koha::IssuingRules; >+use Koha::Patrons; >+ >+my $query = new CGI; >+my ( $template, $borrowernumber, $cookie ) = get_template_and_user( >+ { >+ template_name => "opac-recall.tt", >+ query => $query, >+ type => "opac", >+ authnotrequired => 0, >+ } >+); >+ >+my $op = $query->param('op') || ''; >+ >+my $itemnumber = $query->param('itemnumber'); >+my $item = Koha::Items->find($itemnumber); >+my $biblio = Koha::Biblios->find($item->biblionumber); >+my $recalled = Koha::Recalls->find({ itemnumber => $itemnumber }); >+my $error; >+ >+if ($op eq 'request'){ >+ if (!defined($borrowernumber)){ >+ # can't place recall if not logged in >+ $error = 'notloggedin'; >+ print $query->redirect('/cgi-bin/koha/opac-detail.pl?biblionumber='.$item->biblionumber); >+ } elsif (defined $recalled && $recalled->borrowernumber == $borrowernumber){ >+ # can't place a recall on an item that this borrower has already recalled >+ $error = 'duplicate'; >+ } else { >+ # can recall >+ my $borrower = Koha::Patrons->find($borrowernumber); >+ my $issuing_rule = Koha::IssuingRules->get_effective_issuing_rule({ categorycode => $borrower->categorycode, itemtype => $item->itype, branchcode => $item->holdingbranch }); >+ my $recall_request = Koha::Recall->new({ >+ borrowernumber => $borrowernumber, >+ recalldate => dt_from_string(), >+ biblionumber => $biblio->biblionumber, >+ branchcode => $item->holdingbranch, >+ status => 'R', >+ itemnumber => $itemnumber, >+ itemtype => $item->itype, >+ })->store; >+ if (defined $recall_request->recall_id){ # successful recall >+ my $recall = Koha::Recalls->find($recall_request->recall_id); >+ # updating due date on checkout >+ my $timestamp = dt_from_string($recall->timestamp); >+ my $due_date = $timestamp->add( $issuing_rule->lengthunit => $issuing_rule->recall_due_date_interval ); >+ Koha::Checkouts->find({ itemnumber => $itemnumber })->update({ date_due => $due_date }); >+ >+ $template->param( >+ success => 1, >+ due_interval => $issuing_rule->recall_due_date_interval, >+ due_unit => $issuing_rule->lengthunit >+ ); >+ } else { >+ $error = 'failed'; >+ } >+ } >+} >+ >+$template->param( >+ biblio => $biblio, >+ itemnumber => $itemnumber, >+ error => $error >+); >+ >+output_with_http_headers $query, $cookie, $template->output, 'html'; >-- >2.1.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 19532
:
68569
|
68570
|
68571
|
68572
|
68642
|
68643
|
68644
|
68645
|
68653
|
69100
|
69102
|
69147
|
69148
|
69149
|
69170
|
69172
|
69221
|
69222
|
69223
|
69322
|
69353
|
69354
|
69405
|
69409
|
69410
|
69411
|
69841
|
69872
|
69873
|
69874
|
69875
|
69876
|
69877
|
69878
|
69879
|
69880
|
69881
|
69882
|
69883
|
69884
|
69885
|
69886
|
69887
|
69888
|
69889
|
69890
|
69986
|
70093
|
71409
|
71574
|
71575
|
71576
|
71577
|
71578
|
71579
|
71580
|
71581
|
71582
|
71583
|
71584
|
71585
|
71586
|
71587
|
71588
|
71589
|
71590
|
71591
|
71592
|
72244
|
72311
|
72312
|
72313
|
72314
|
72315
|
72316
|
72317
|
72318
|
72319
|
72320
|
72321
|
72322
|
72323
|
72324
|
72325
|
72326
|
72327
|
72328
|
72329
|
72330
|
72331
|
72332
|
72333
|
72334
|
72335
|
72336
|
72337
|
72338
|
72527
|
76817
|
76818
|
76819
|
76820
|
76821
|
76822
|
76823
|
76824
|
76825
|
76826
|
76827
|
76828
|
76829
|
76830
|
76831
|
76832
|
76833
|
76834
|
76835
|
76836
|
76837
|
76838
|
76839
|
76840
|
76841
|
76842
|
76843
|
76844
|
76845
|
76846
|
76847
|
77177
|
77178
|
77179
|
78755
|
78757
|
78759
|
78761
|
78763
|
78765
|
78766
|
78768
|
78770
|
78772
|
78773
|
78774
|
78775
|
78776
|
78777
|
78778
|
78780
|
78782
|
78785
|
78787
|
78789
|
78790
|
78792
|
78794
|
78797
|
78800
|
78801
|
78802
|
78803
|
78804
|
78805
|
78806
|
78807
|
78808
|
80763
|
80764
|
80765
|
80766
|
80767
|
80768
|
80769
|
80770
|
80771
|
80772
|
80773
|
80774
|
80775
|
80776
|
80777
|
80778
|
80779
|
80780
|
80781
|
80782
|
80783
|
80784
|
80785
|
80786
|
80787
|
80788
|
80789
|
80793
|
80878
|
81204
|
81205
|
81206
|
81207
|
81208
|
81209
|
81210
|
81211
|
81212
|
81213
|
81214
|
81215
|
81216
|
81217
|
81218
|
81219
|
81220
|
81221
|
81222
|
81223
|
81224
|
81225
|
81226
|
81227
|
81228
|
81229
|
81230
|
81231
|
81232
|
81233
|
81234
|
81235
|
81236
|
81237
|
81238
|
81239
|
81240
|
81241
|
81242
|
81243
|
81244
|
81245
|
81246
|
81247
|
81547
|
81548
|
81549
|
81550
|
81551
|
81552
|
81553
|
81554
|
81555
|
81556
|
81557
|
81558
|
81559
|
81560
|
81561
|
81562
|
81563
|
81564
|
81565
|
81566
|
81567
|
81568
|
81569
|
81583
|
81584
|
81585
|
81586
|
81587
|
81588
|
81595
|
81618
|
81652
|
81653
|
81654
|
81655
|
81656
|
81657
|
81658
|
81659
|
81660
|
81661
|
81662
|
81663
|
81664
|
81665
|
81666
|
81667
|
81668
|
81669
|
81670
|
81671
|
81672
|
81673
|
81674
|
81675
|
81676
|
81677
|
81678
|
81679
|
81680
|
81681
|
81682
|
81683
|
103887
|
103888
|
103890
|
103899
|
103900
|
103901
|
103999
|
104000
|
104001
|
104002
|
104005
|
104006
|
104007
|
104066
|
104067
|
104068
|
104069
|
104070
|
104071
|
104246
|
104247
|
104248
|
104249
|
104250
|
104322
|
104323
|
104324
|
104325
|
104326
|
104327
|
104328
|
104329
|
104330
|
104331
|
104332
|
104333
|
104334
|
104335
|
104336
|
104391
|
104392
|
104393
|
104394
|
104395
|
104396
|
104397
|
104398
|
104474
|
104475
|
104476
|
104477
|
104478
|
104479
|
104480
|
104481
|
104545
|
104546
|
104547
|
104548
|
104549
|
104550
|
104551
|
104552
|
104646
|
104647
|
104648
|
104649
|
104650
|
104651
|
104652
|
104653
|
104722
|
104723
|
104724
|
104725
|
104726
|
104727
|
104728
|
104729
|
104806
|
104807
|
104808
|
104809
|
104810
|
104811
|
104812
|
104813
|
104814
|
104815
|
104816
|
104817
|
104818
|
104819
|
104820
|
104821
|
104863
|
104864
|
104865
|
104866
|
104867
|
104868
|
104869
|
104870
|
104902
|
104903
|
104904
|
104905
|
104906
|
104907
|
104908
|
104909
|
104910
|
104913
|
104914
|
104915
|
104916
|
104917
|
104918
|
104919
|
104920
|
104988
|
104989
|
104990
|
104991
|
104992
|
106268
|
106269
|
106371
|
106372
|
106373
|
106374
|
106375
|
106376
|
106377
|
106378
|
106810
|
106811
|
106812
|
106813
|
106814
|
106815
|
106816
|
106817
|
106857
|
107198
|
107199
|
107200
|
107201
|
107202
|
107203
|
107204
|
107205
|
107807
|
107808
|
107809
|
107810
|
107811
|
107812
|
107813
|
107814
|
107918
|
107919
|
107920
|
107921
|
107922
|
107923
|
107924
|
107925
|
108222
|
108223
|
108224
|
108225
|
108226
|
108227
|
108228
|
108229
|
108980
|
108981
|
108982
|
109306
|
109307
|
109308
|
109309
|
109310
|
109311
|
109312
|
109313
|
109314
|
109315
|
109316
|
109317
|
109318
|
109463
|
109464
|
109465
|
109466
|
109467
|
109468
|
109469
|
109775
|
109776
|
109777
|
109778
|
109779
|
109780
|
109781
|
109782
|
109783
|
109784
|
109785
|
111199
|
111200
|
111201
|
111202
|
111203
|
111204
|
111205
|
111206
|
112316
|
112317
|
112321
|
112322
|
112323
|
112324
|
112325
|
112326
|
112346
|
112472
|
112491
|
112540
|
112612
|
112613
|
112614
|
112615
|
112616
|
112617
|
112618
|
112619
|
112620
|
112621
|
112622
|
113195
|
113196
|
113197
|
113198
|
113199
|
113200
|
113201
|
113202
|
113203
|
113204
|
113205
|
113286
|
113287
|
113288
|
113289
|
113290
|
113291
|
113292
|
113293
|
113294
|
113295
|
113296
|
113297
|
113298
|
113335
|
113351
|
113352
|
113353
|
113354
|
113355
|
113356
|
113357
|
113358
|
113359
|
113361
|
113362
|
113363
|
113364
|
113365
|
113430
|
113431
|
113432
|
113433
|
113434
|
113435
|
113436
|
113437
|
113438
|
113439
|
113440
|
113441
|
113442
|
113443
|
113444
|
113445
|
116121
|
116122
|
116123
|
116124
|
116125
|
116126
|
116127
|
116128
|
116129
|
116130
|
116131
|
116132
|
116133
|
116134
|
118267
|
118268
|
118269
|
118270
|
118271
|
118272
|
118273
|
118274
|
118275
|
118276
|
118277
|
118278
|
118279
|
118280
|
122993
|
122994
|
122995
|
122996
|
122997
|
122998
|
122999
|
123000
|
123001
|
123002
|
123003
|
123004
|
123005
|
126244
|
126245
|
126246
|
126247
|
126248
|
126249
|
126250
|
126251
|
126252
|
126253
|
126254
|
126255
|
126256
|
126257
|
126453
|
126454
|
126455
|
126456
|
126457
|
126458
|
126459
|
126460
|
126469
|
126470
|
126565
|
126566
|
126568
|
126569
|
126570
|
126571
|
126572
|
126573
|
126574
|
126575
|
126576
|
126577
|
126578
|
126579
|
126580
|
129305
|
129306
|
129307
|
129308
|
129309
|
129310
|
129311
|
129312
|
129313
|
129314
|
129315
|
129316
|
129317
|
129318
|
129319
|
130641
|
130642
|
130643
|
130644
|
130645
|
130646
|
130647
|
130648
|
130649
|
130650
|
130651
|
130652
|
130653
|
130654
|
130655
|
130656
|
131108
|
131156
|
131157
|
131158
|
131159
|
131160
|
131193
|
131213
|
131257
|
131260
|
131261
|
131262
|
131263
|
131264
|
131265
|
131266
|
131267
|
131268
|
131269
|
131270
|
131271
|
131272
|
131273
|
131274
|
131275
|
131276
|
131277
|
131278
|
131279
|
131280
|
131281
|
131282
|
131330
|
131629
|
131630
|
131631
|
131664
|
131665
|
131666
|
131701
|
132332