Bugzilla – Attachment 104903 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: Database and installer stuff
Bug-19532-Database-and-installer-stuff.patch (text/plain), 72.02 KB, created by
Aleisha Amohia
on 2020-05-15 04:33:00 UTC
(
hide
)
Description:
Bug 19532: Database and installer stuff
Filename:
MIME Type:
Creator:
Aleisha Amohia
Created:
2020-05-15 04:33:00 UTC
Size:
72.02 KB
patch
obsolete
>From 6172d4eae719c09d69138deeaa49afb287bffd7a Mon Sep 17 00:00:00 2001 >From: Aleisha Amohia <aleishaamohia@hotmail.com> >Date: Wed, 22 Apr 2020 00:47:13 +0000 >Subject: [PATCH] Bug 19532: Database and installer stuff > >- Add recalls table >- Add recalls circulation rules - recalls allowed, recalls per record, on shelf recalls, recall due date interval, recall overdue fine, recall shelf time >- Add system preferences - useRecalls, RecallsMaxPickUpDelay, RecallsLog >- Add email notices (RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM) >- Add print notice (RECALL_REQUESTER_DET) >- Add user permission - recalls, manage_recalls >- Add Recall and CancelRecall enum options for branchtransfers reason >--- > C4/Auth.pm | 1 + > C4/InstallAuth.pm | 1 + > Koha/CirculationRules.pm | 18 +++++++ > Makefile.PL | 1 + > admin/smart-rules.pl | 18 +++++++ > ...bug_19532-add_recalls_enum_branchtransfers.perl | 6 +++ > .../atomicupdate/bug_19532-add_recalls_flags.perl | 7 +++ > .../bug_19532-add_recalls_notices.perl | 36 ++++++++++++++ > .../bug_19532-add_recalls_sysprefs.perl | 11 ++++ > .../atomicupdate/bug_19532-add_recalls_table.perl | 34 +++++++++++++ > .../data/mysql/de-DE/mandatory/sample_notices.sql | 30 ++++++++++- > .../data/mysql/en/mandatory/sample_notices.yml | 58 ++++++++++++++++++++++ > .../mysql/fr-CA/obligatoire/sample_notices.sql | 30 ++++++++++- > .../mysql/fr-FR/1-Obligatoire/sample_notices.sql | 30 ++++++++++- > installer/data/mysql/it-IT/necessari/notices.sql | 30 ++++++++++- > installer/data/mysql/kohastructure.sql | 34 ++++++++++++- > .../mysql/nb-NO/1-Obligatorisk/sample_notices.sql | 30 ++++++++++- > .../data/mysql/pl-PL/mandatory/sample_notices.sql | 30 ++++++++++- > .../data/mysql/ru-RU/mandatory/sample_notices.sql | 30 ++++++++++- > installer/data/mysql/sysprefs.sql | 3 ++ > .../data/mysql/uk-UA/mandatory/sample_notices.sql | 34 ++++++++++++- > installer/data/mysql/userflags.sql | 3 +- > installer/data/mysql/userpermissions.sql | 3 +- > installer/onboarding.pl | 6 +++ > .../intranet-tmpl/prog/en/includes/permissions.inc | 9 ++++ > .../en/modules/admin/preferences/circulation.pref | 12 +++++ > .../prog/en/modules/admin/preferences/logs.pref | 6 +++ > .../prog/en/modules/admin/smart-rules.tt | 51 ++++++++++++++++++- > 28 files changed, 550 insertions(+), 12 deletions(-) > create mode 100644 installer/data/mysql/atomicupdate/bug_19532-add_recalls_enum_branchtransfers.perl > create mode 100644 installer/data/mysql/atomicupdate/bug_19532-add_recalls_flags.perl > create mode 100644 installer/data/mysql/atomicupdate/bug_19532-add_recalls_notices.perl > create mode 100644 installer/data/mysql/atomicupdate/bug_19532-add_recalls_sysprefs.perl > create mode 100644 installer/data/mysql/atomicupdate/bug_19532-add_recalls_table.perl > >diff --git a/C4/Auth.pm b/C4/Auth.pm >index 6889c2532c9..f864ed9b711 100644 >--- a/C4/Auth.pm >+++ b/C4/Auth.pm >@@ -325,6 +325,7 @@ sub get_template_and_user { > $template->param( CAN_user_ill => 1 ); > $template->param( CAN_user_stockrotation => 1 ); > $template->param( CAN_user_problem_reports => 1 ); >+ $template->param( CAN_user_recalls => 1 ); > > foreach my $module ( keys %$all_perms ) { > foreach my $subperm ( keys %{ $all_perms->{$module} } ) { >diff --git a/C4/InstallAuth.pm b/C4/InstallAuth.pm >index 987045df504..7feccb3e2fa 100644 >--- a/C4/InstallAuth.pm >+++ b/C4/InstallAuth.pm >@@ -148,6 +148,7 @@ sub get_template_and_user { > $template->param( CAN_user_serials => 1 ); > $template->param( CAN_user_reports => 1 ); > $template->param( CAN_user_problem_reports => 1 ); >+ $template->param( CAN_user_recalls => 1 ); > } > > my $minPasswordLength = C4::Context->preference('minPasswordLength'); >diff --git a/Koha/CirculationRules.pm b/Koha/CirculationRules.pm >index 5042e6f55d3..467199115f8 100644 >--- a/Koha/CirculationRules.pm >+++ b/Koha/CirculationRules.pm >@@ -157,6 +157,24 @@ our $RULE_KINDS = { > note => { # This is not really a rule. Maybe we will want to separate this later. > scope => [ 'branchcode', 'categorycode', 'itemtype' ], > }, >+ recalls_allowed => { >+ scope => [ 'branchcode', 'categorycode', 'itemtype' ], >+ }, >+ recalls_per_record => { >+ scope => [ 'branchcode', 'categorycode', 'itemtype' ], >+ }, >+ on_shelf_recalls => { >+ scope => [ 'branchcode', 'categorycode', 'itemtype' ], >+ }, >+ recall_due_date_interval => { >+ scope => [ 'branchcode', 'categorycode', 'itemtype' ], >+ }, >+ recall_overdue_fine => { >+ scope => [ 'branchcode', 'categorycode', 'itemtype' ], >+ }, >+ recall_shelf_time => { >+ scope => [ 'branchcode', 'categorycode', 'itemtype' ], >+ }, > # Not included (deprecated?): > # * accountsent > # * reservecharge >diff --git a/Makefile.PL b/Makefile.PL >index ad98d8b6d33..d10f0608cca 100644 >--- a/Makefile.PL >+++ b/Makefile.PL >@@ -354,6 +354,7 @@ my $target_map = { > './patroncards' => 'INTRANET_CGI_DIR', > './patron_lists' => 'INTRANET_CGI_DIR', > './plugins' => 'INTRANET_CGI_DIR', >+ './recalls' => 'INTRANET_CGI_DIR', > './reports' => 'INTRANET_CGI_DIR', > './reserve' => 'INTRANET_CGI_DIR', > './reviews' => 'INTRANET_CGI_DIR', >diff --git a/admin/smart-rules.pl b/admin/smart-rules.pl >index 6bea920dd90..21b906cd0f8 100755 >--- a/admin/smart-rules.pl >+++ b/admin/smart-rules.pl >@@ -112,6 +112,12 @@ if ($op eq 'delete') { > cap_fine_to_replacement_price => undef, > article_requests => undef, > note => undef, >+ recalls_allowed => undef, >+ recalls_per_record => undef, >+ on_shelf_recalls => undef, >+ recall_due_date_interval => undef, >+ recall_overdue_fine => undef, >+ recall_shelf_time => undef, > } > } > ); >@@ -288,6 +294,12 @@ elsif ($op eq 'add') { > my $overduefinescap = $input->param('overduefinescap') || ''; > my $cap_fine_to_replacement_price = $input->param('cap_fine_to_replacement_price') eq 'on'; > my $note = $input->param('note'); >+ my $recalls_allowed = $input->param('recalls_allowed'); >+ my $recalls_per_record = $input->param('recalls_per_record'); >+ my $on_shelf_recalls = $input->param('on_shelf_recalls'); >+ my $recall_due_date_interval = $input->param('recall_due_date_interval'); >+ my $recall_overdue_fine = $input->param('recall_overdue_fine'); >+ my $recall_shelf_time = $input->param('recall_shelf_time'); > $debug and warn "Adding $br, $bor, $itemtype, $fine, $maxissueqty, $maxonsiteissueqty, $cap_fine_to_replacement_price"; > > my $rules = { >@@ -320,6 +332,12 @@ elsif ($op eq 'add') { > cap_fine_to_replacement_price => $cap_fine_to_replacement_price, > article_requests => $article_requests, > note => $note, >+ recalls_allowed => $recalls_allowed, >+ recalls_per_record => $recalls_per_record, >+ on_shelf_recalls => $on_shelf_recalls, >+ recall_due_date_interval => $recall_due_date_interval, >+ recall_overdue_fine => $recall_overdue_fine, >+ recall_shelf_time => $recall_shelf_time, > }; > > Koha::CirculationRules->set_rules( >diff --git a/installer/data/mysql/atomicupdate/bug_19532-add_recalls_enum_branchtransfers.perl b/installer/data/mysql/atomicupdate/bug_19532-add_recalls_enum_branchtransfers.perl >new file mode 100644 >index 00000000000..654242817e6 >--- /dev/null >+++ b/installer/data/mysql/atomicupdate/bug_19532-add_recalls_enum_branchtransfers.perl >@@ -0,0 +1,6 @@ >+$DBversion = 'XXX'; >+if( CheckVersion( $DBversion ) ) { >+ $dbh->do(q{ ALTER TABLE branchtransfers MODIFY COLUMN reason ENUM('Manual', 'StockrotationAdvance', 'StockrotationRepatriation', 'ReturnToHome', 'ReturnToHolding', 'RotatingCollection', 'Reserve', 'LostReserve', 'CancelReserve', 'Recall', 'CancelRecall') }); >+ >+ NewVersion( $DBversion, 19532, "Add Recall and CancelReserve ENUM options to branchtransfers.reason" ); >+} >diff --git a/installer/data/mysql/atomicupdate/bug_19532-add_recalls_flags.perl b/installer/data/mysql/atomicupdate/bug_19532-add_recalls_flags.perl >new file mode 100644 >index 00000000000..5ece22846ed >--- /dev/null >+++ b/installer/data/mysql/atomicupdate/bug_19532-add_recalls_flags.perl >@@ -0,0 +1,7 @@ >+$DBversion = 'XXX'; >+if( CheckVersion( $DBversion ) ) { >+ $dbh->do(q{ INSERT IGNORE INTO userflags (bit, flag, flagdesc, defaulton) VALUES (27, 'recalls', 'Recalls', 0) }); >+ $dbh->do(q{ INSERT IGNORE INTO permissions (module_bit, code, description) VALUES (27, 'manage_recalls', 'Manage recalls for patrons') }); >+ >+ NewVersion( $DBversion, 19532, "Add recalls user flag and manage_recalls user permission" ); >+} >diff --git a/installer/data/mysql/atomicupdate/bug_19532-add_recalls_notices.perl b/installer/data/mysql/atomicupdate/bug_19532-add_recalls_notices.perl >new file mode 100644 >index 00000000000..d3921778dfa >--- /dev/null >+++ b/installer/data/mysql/atomicupdate/bug_19532-add_recalls_notices.perl >@@ -0,0 +1,36 @@ >+$DBversion = 'XXX'; >+if( CheckVersion( $DBversion ) ) { >+ $dbh->do(q{ >+ INSERT IGNORE INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`) VALUES >+ ('circulation','RETURN_RECALLED_ITEM','','Notification to return a recalled item','0','Notification to return a recalled item','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall has been placed on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>). The due date has been updated, and is now <<issues.date_due>>. Please return the item before the due date. >+ >+Thank you!','email'), >+ ('circulation','PICKUP_RECALLED_ITEM','','Recalled item awaiting pickup','0','Recalled item awaiting pickup','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall that you requested on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>) is now ready for you to pick up at <<recalls.branchcode>>. Please pick up your item by <<recalls.expirationdate>>. >+ >+Thank you!','email'), >+ ('circulation','RECALL_REQUESTER_DET','','Details of patron who recalled item',0,'Details of patron who recalled item','Date: <<today>> >+ >+Recall for pickup at <<branches.branchname>> >+<<borrowers.surname>>, <<borrowers.firstname>> (<<borrowers.cardnumber>>) >+<<borrowers.phone>> >+<<borrowers.streetnumber>> <<borrowers.address>>, <<borrowers.address2>>, <<borrowers.city>> <<borrowers.zipcode>> >+<<borrowers.email>> >+ >+ITEM RECALLED >+<<biblio.title>> by <<biblio.author>> >+Barcode: <<items.barcode>> >+Callnumber: <<items.itemcallnumber>> >+Waiting since: <<recalls.waitingdate>> >+Notes: <<recalls.recallnotes>>', 'print') >+ }); >+ >+ NewVersion( $DBversion, 19532, "Add recalls notices: RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM, RECALL_REQUESTER_DET" ); >+} >diff --git a/installer/data/mysql/atomicupdate/bug_19532-add_recalls_sysprefs.perl b/installer/data/mysql/atomicupdate/bug_19532-add_recalls_sysprefs.perl >new file mode 100644 >index 00000000000..c5d48271e76 >--- /dev/null >+++ b/installer/data/mysql/atomicupdate/bug_19532-add_recalls_sysprefs.perl >@@ -0,0 +1,11 @@ >+$DBversion = 'XXX'; >+if( CheckVersion( $DBversion ) ) { >+ $dbh->do(q{ >+ INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES >+ ('RecallsLog','1',NULL,'If ON, log create/cancel/expire/fulfill actions on recalls','YesNo'), >+ ('RecallsMaxPickUpDelay','7',NULL,'Define the maximum time a recall can be awaiting pickup','Integer'), >+ ('UseRecalls','0',NULL,'Enable or disable recalls','YesNo') >+ }); >+ >+ NewVersion( $DBversion, 19532, "Add RecallsLog, RecallsMaxPickUpDelay and UseRecalls system preferences"); >+} >diff --git a/installer/data/mysql/atomicupdate/bug_19532-add_recalls_table.perl b/installer/data/mysql/atomicupdate/bug_19532-add_recalls_table.perl >new file mode 100644 >index 00000000000..57aaabd3adb >--- /dev/null >+++ b/installer/data/mysql/atomicupdate/bug_19532-add_recalls_table.perl >@@ -0,0 +1,34 @@ >+$DBversion = 'XXX'; >+if( CheckVersion( $DBversion ) ) { >+ $dbh->do(q{ DROP TABLE IF EXISTS recalls }); >+ $dbh->do(q{ >+ CREATE TABLE recalls ( >+ recall_id int(11) NOT NULL auto_increment, >+ borrowernumber int(11) NOT NULL DEFAULT 0, >+ recalldate datetime DEFAULT NULL, >+ biblionumber int(11) NOT NULL DEFAULT 0, >+ branchcode varchar(10) DEFAULT NULL, >+ cancellationdate datetime DEFAULT NULL, >+ recallnotes mediumtext, >+ priority smallint(6) DEFAULT NULL, >+ status varchar(1) DEFAULT NULL, >+ timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, >+ itemnumber int(11) DEFAULT NULL, >+ waitingdate datetime DEFAULT NULL, >+ expirationdate datetime DEFAULT NULL, >+ old TINYINT(1) DEFAULT NULL, >+ item_level_recall TINYINT(1) NOT NULL DEFAULT 0, >+ PRIMARY KEY (recall_id), >+ KEY borrowernumber (borrowernumber), >+ KEY biblionumber (biblionumber), >+ KEY itemnumber (itemnumber), >+ KEY branchcode (branchcode), >+ CONSTRAINT recalls_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE, >+ CONSTRAINT recalls_ibfk_2 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE, >+ CONSTRAINT recalls_ibfk_3 FOREIGN KEY (itemnumber) REFERENCES items (itemnumber) ON DELETE CASCADE ON UPDATE CASCADE, >+ CONSTRAINT recalls_ibfk_4 FOREIGN KEY (branchcode) REFERENCES branches (branchcode) ON DELETE CASCADE ON UPDATE CASCADE >+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; >+ }); >+ >+ NewVersion( $DBversion, 19532, "Add recalls table" ); >+} >diff --git a/installer/data/mysql/de-DE/mandatory/sample_notices.sql b/installer/data/mysql/de-DE/mandatory/sample_notices.sql >index b2055dd7aea..37385fa1b46 100644 >--- a/installer/data/mysql/de-DE/mandatory/sample_notices.sql >+++ b/installer/data/mysql/de-DE/mandatory/sample_notices.sql >@@ -205,7 +205,35 @@ INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title` > ('circulation', 'AR_PENDING', '', 'Artikelbestellung - Offen', 0, 'Artikelbestellung ist eingegangen', 'Liebe/r <<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>)\r\n\r\nIhre Artikelbestellung aus <<biblio.title>> (<<items.barcode>>) ist bei uns eingegangen.\r\n\r\nBestellter Artikel:\r\nTitel: <<article_requests.title>>\r\nVerfasser: <<article_requests.author>>\r\nJahrgang/Band: <<article_requests.volume>>\r\nHeft: <<article_requests.issue>>\r\nJahr/Datum: <<article_requests.date>>\r\nSeiten: <<article_requests.pages>>\r\nKapitel: <<article_requests.chapters>>\r\nHinweise: <<article_requests.patron_notes>>\r\n\r\n\r\nVielen Dank!', 'email'), > ('circulation', 'AR_SLIP', '', 'Artikelbestellung - Quittung', 0, 'Artikelbestellung', 'Artikelbestellung:\r\n\r\n<<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>)\r\n\r\nTitel: <<biblio.title>>\r\nBarcode: <<items.barcode>>\r\n\r\nBestellter Artikel:\r\nTitle: <<article_requests.title>>\r\nVerfasser: <<article_requests.author>>\r\nJahrgang/Band: <<article_requests.volume>>\r\nHeft: <<article_requests.issue>>\r\nJahr/Datum: <<article_requests.date>>\r\nSeiten: <<article_requests.pages>>\r\nKapitel: <<article_requests.chapters>>\r\nHinweise: <<article_requests.patron_notes>>\r\n', 'print'), > ('circulation', 'AR_PROCESSING', '', 'Artikelbestellung - In Bearbeitung', 0, 'Artikelbestellung in Bearbeitung', 'Liebe/r <<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>)\r\n\r\nIhre Artikelbestellung aus <<biblio.title>> (<<items.barcode>>) wird zur Zeit bearbeitet.\r\n\r\nBestellter Artikel:\r\nTitel: <<article_requests.title>>\r\nVerfasser: <<article_requests.author>>\r\nBand/Jahrgang: <<article_requests.volume>>\r\nHeft: <<article_requests.issue>>\r\nJahr/Datum: <<article_requests.date>>\r\nSeiten: <<article_requests.pages>>\r\nKapitel: <<article_requests.chapters>>\r\nHinweise: <<article_requests.patron_notes>>\r\n\r\nVielen Dank!', 'email'), >-('circulation', 'CHECKOUT_NOTE', '', 'Ausleihnotiz zu einem Exemplar', '0', 'Ausleihnotiz', '<<borrowers.firstname>> <<borrowers.surname>> hat eine Notiz zu folgendem Exemplar angegeben: <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email'); >+('circulation', 'CHECKOUT_NOTE', '', 'Ausleihnotiz zu einem Exemplar', '0', 'Ausleihnotiz', '<<borrowers.firstname>> <<borrowers.surname>> hat eine Notiz zu folgendem Exemplar angegeben: <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email'), >+('circulation','RETURN_RECALLED_ITEM','','Notification to return a recalled item','0','Notification to return a recalled item','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall has been placed on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>). The due date has been updated, and is now <<issues.date_due>>. Please return the item before the due date. >+ >+Thank you!','email'), >+('circulation','PICKUP_RECALLED_ITEM','','Recalled item awaiting pickup','0','Recalled item awaiting pickup','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall that you requested on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>) is now ready for you to pick up at <<recalls.branchcode>>. Please pick up your item by <<recalls.expirationdate>>. >+ >+Thank you!','email'), >+('circulation','RECALL_REQUESTER_DET','','Details of patron who recalled item',0,'Date: <<today>> >+ >+Recall for pickup at <<branches.branchname>> >+<<borrowers.surname>>, <<borrowers.firstname>> (<<borrowers.cardnumber>>) >+<<borrowers.phone>> >+<<borrowers.streetnumber>> <<borrowers.address>>, <<borrowers.address2>>, <<borrowers.city>> <<borrowers.zipcode>> >+<<borrowers.email>> >+ >+ITEM RECALLED >+<<biblio.title>> by <<biblio.author>> >+Barcode: <<items.barcode>> >+Callnumber: <<items.itemcallnumber>> >+Waiting since: <<recalls.waitingdate>> >+Notes: <<recalls.recallnotes>>', 'print'); > > INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`) VALUES > ('circulation', 'ACCOUNT_PAYMENT', '', 'Zahlung', 0, 'Zahlungsquittung für Bibliothekskonto', '[%- USE Price -%]\r\nEine Zahlung in Höhe von [% credit.amount * -1 | $Price %] wurde auf Ihr Konto verbucht.\r\n\r\nDiese Zahlung wurde mit den folgenden Gebührenposten verrechnet:\r\n[%- FOREACH o IN offsets %]\r\nBeschreibung: [% o.debit.description %]\r\nGezahlter Betrag: [% o.amount * -1 | $Price %]\r\nOffener Betrag: [% o.debit.amountoutstanding | $Price %]\r\n[% END %]', 'email', 'default'), >diff --git a/installer/data/mysql/en/mandatory/sample_notices.yml b/installer/data/mysql/en/mandatory/sample_notices.yml >index ca04caf2320..317483961dd 100644 >--- a/installer/data/mysql/en/mandatory/sample_notices.yml >+++ b/installer/data/mysql/en/mandatory/sample_notices.yml >@@ -1208,3 +1208,61 @@ tables: > - "[% ELSE %]" > - "The following item, [% biblio.title %], has correctly been renewed and is now due on [% checkout.date_due | $KohaDates as_due_date => 1 %]" > - "[% END %]" >+ >+ - module: circulation >+ code: RETURN_RECALLED_ITEM >+ branchcode: "" >+ name: "Notification to return a recalled item" >+ is_html: 0 >+ title: "Notification to return a recalled item" >+ message_transport_type: email >+ lang: default >+ content: >+ - "Date: <<today>>" >+ - "" >+ - "<<borrowers.firstname>> <<borrowers.surname>>," >+ - "" >+ - "A recall has been placed on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>). The due date has been updated, and is now <<issues.date_due>>. Please return the item before the due date." >+ - "" >+ - "Thank you!" >+ >+ - module: circulation >+ code: PICKUP_RECALLED_ITEM >+ branchcode: "" >+ name: "Recalled item awaiting pickup" >+ is_html: 0 >+ title: "Recalled item awaiting pickup" >+ message_transport_type: email >+ lang: default >+ content: >+ - "Date: <<today>>" >+ - "" >+ - "<<borrowers.firstname>> <<borrowers.surname>>," >+ - "" >+ - "A recall that you requested on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>) is now ready for you to pick up at <<recalls.branchcode>>. Please pick up your item by <<recalls.expirationdate>>." >+ - "" >+ - "Thank you!" >+ >+ - module: circulation >+ code: RECALL_REQUESTER_DET >+ branchcode: "" >+ name: "Details of patron who recalled item" >+ is_html: 0 >+ title: "Details of patron who recalled item" >+ message_transport_type: print >+ lang: default >+ content: >+ - "Date: <<today>>" >+ - "" >+ - "Recall for pickup at <<branches.branchname>>" >+ - "<<borrowers.surname>>, <<borrowers.firstname>> (<<borrowers.cardnumber>>)" >+ - "<<borrowers.phone>>" >+ - "<<borrowers.streetnumber>> <<borrowers.address>>, <<borrowers.address2>>, <<borrowers.city>> <<borrowers.zipcode>>" >+ - "<<borrowers.email>>" >+ - "" >+ - "ITEM RECALLED" >+ - "<<biblio.title>> by <<biblio.author>>" >+ - "Barcode: <<items.barcode>>" >+ - "Callnumber: <<items.itemcallnumber>>" >+ - "Waiting since: <<recalls.waitingdate>>" >+ - "Notes: <<recalls.recallnotes>>" >diff --git a/installer/data/mysql/fr-CA/obligatoire/sample_notices.sql b/installer/data/mysql/fr-CA/obligatoire/sample_notices.sql >index 8dd1c19a050..08131a25f88 100644 >--- a/installer/data/mysql/fr-CA/obligatoire/sample_notices.sql >+++ b/installer/data/mysql/fr-CA/obligatoire/sample_notices.sql >@@ -84,7 +84,35 @@ INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title` > ('circulation', 'AR_PENDING', '', 'Demande d\'article - en attente', 0, 'Demande d\'article reçue', 'Bonjour <<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>)\r\n\r\nNous avons bien reçu votre demande d\'article de <<biblio.title>> (<<items.barcode>>).\r\n\r\nArticle demandé :\r\nTitre : <<article_requests.title>>\r\nAuteur : <<article_requests.author>>\r\nVolume : <<article_requests.volume>>\r\nNuméro : <<article_requests.issue>>\r\nDate : <<article_requests.date>>\r\nPages : <<article_requests.pages>>\r\nChapitres : <<article_requests.chapters>>\r\nNotes : <<article_requests.patron_notes>>\r\n\r\n\r\nMerci.', 'email'), > ('circulation', 'AR_SLIP', '', 'Demande d\'article - ticket', 0, 'Demande d\'article', 'Demande d\'article :\r\n\r\n<<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>),\r\n\r\nTitre : <<biblio.title>>\r\nCode-barres : <<items.barcode>>\r\n\r\nArticle demandé :\r\nTitre : <<article_requests.title>>\r\nAuteur : <<article_requests.author>>\r\nVolume : <<article_requests.volume>>\r\nNuméro : <<article_requests.issue>>\r\nDate : <<article_requests.date>>\r\nPages : <<article_requests.pages>>\r\nChapitres : <<article_requests.chapters>>\r\nNotes : <<article_requests.patron_notes>>\r\n', 'print'), > ('circulation', 'AR_PROCESSING', '', 'Demande d\'article - en traitement', 0, 'Demande d\'article en traitement', 'Bonjour <<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>),\r\n\r\nNous traitons votre demande d\'article de <<biblio.title>> (<<items.barcode>>).\r\n\r\nArticle demandé :\r\nTitre : <<article_requests.title>>\r\nAuteur : <<article_requests.author>>\r\nVolume : <<article_requests.volume>>\r\nNuméro : <<article_requests.issue>>\r\nDate : <<article_requests.date>>\r\nPages : <<article_requests.pages>>\r\nChapitres : <<article_requests.chapters>>\r\nNotes : <<article_requests.patron_notes>>\r\n\r\nMerci.', 'email'), >-('circulation', 'CHECKOUT_NOTE', '', 'Notes d\'un utilisateur sur les documents en prêt', '0', 'Notes sur les documents en prêts', '<<borrowers.firstname>> <<borrowers.surname>> a ajouté une note sur un exemplaire de <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email'); >+('circulation', 'CHECKOUT_NOTE', '', 'Notes d\'un utilisateur sur les documents en prêt', '0', 'Notes sur les documents en prêts', '<<borrowers.firstname>> <<borrowers.surname>> a ajouté une note sur un exemplaire de <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email'), >+('circulation','RETURN_RECALLED_ITEM','','Notification to return a recalled item','0','Notification to return a recalled item','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall has been placed on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>). The due date has been updated, and is now <<issues.date_due>>. Please return the item before the due date. >+ >+Thank you!','email'), >+('circulation','PICKUP_RECALLED_ITEM','','Recalled item awaiting pickup','0','Recalled item awaiting pickup','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall that you requested on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>) is now ready for you to pick up at <<recalls.branchcode>>. Please pick up your item by <<recalls.expirationdate>>. >+ >+Thank you!','email'), >+('circulation','RECALL_REQUESTER_DET','','Details of patron who recalled item',0,'Date: <<today>> >+ >+Recall for pickup at <<branches.branchname>> >+<<borrowers.surname>>, <<borrowers.firstname>> (<<borrowers.cardnumber>>) >+<<borrowers.phone>> >+<<borrowers.streetnumber>> <<borrowers.address>>, <<borrowers.address2>>, <<borrowers.city>> <<borrowers.zipcode>> >+<<borrowers.email>> >+ >+ITEM RECALLED >+<<biblio.title>> by <<biblio.author>> >+Barcode: <<items.barcode>> >+Callnumber: <<items.itemcallnumber>> >+Waiting since: <<recalls.waitingdate>> >+Notes: <<recalls.recallnotes>>', 'print'); > > INSERT INTO `letter` (module, code, branchcode, name, is_html, title, content, message_transport_type) > VALUES ('members','PASSWORD_RESET','','Récupération de mot de passe en ligne',1,'Récupération de mot de passe','<html>\r\n<p>Ce courriel vous a été envoyé suite à une demande de récupération de mot de passe pour le compte de <strong><<user>></strong>.\r\n</p>\r\n<p>\r\nVous pouvez créer un nouveau mot de passe en cliquant le lien suivant :\r\n<br/><a href=\"<<passwordreseturl>>\"><<passwordreseturl>></a>\r\n</p>\r\n<p>Ce lien sera valide pour 2 jours après la réception de ce courriel. Si vous ne changez pas votre mot de passe d\'ici deux jours, vous devrez faire une nouvelle demande de récuération de mot de passe..</p>\r\n<p>Merci.</p>\r\n</html>\r\n','email'), >diff --git a/installer/data/mysql/fr-FR/1-Obligatoire/sample_notices.sql b/installer/data/mysql/fr-FR/1-Obligatoire/sample_notices.sql >index 45326ba0062..1183df588bb 100644 >--- a/installer/data/mysql/fr-FR/1-Obligatoire/sample_notices.sql >+++ b/installer/data/mysql/fr-FR/1-Obligatoire/sample_notices.sql >@@ -199,7 +199,35 @@ INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title` > ('circulation', 'AR_PENDING', '', 'Article request - pending', 0, 'Article request received', 'Dear <<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>)\r\n\r\nWe have received your request for an article from <<biblio.title>> (<<items.barcode>>).\r\n\r\nArticle requested:\r\nTitle: <<article_requests.title>>\r\nAuthor: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nIssue: <<article_requests.issue>>\r\nDate: <<article_requests.date>>\r\nPages: <<article_requests.pages>>\r\nChapters: <<article_requests.chapters>>\r\nNotes: <<article_requests.patron_notes>>\r\n\r\n\r\nThank you!', 'email'), > ('circulation', 'AR_SLIP', '', 'Article request - print slip', 0, 'Article request', 'Article request:\r\n\r\n<<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>),\r\n\r\nTitle: <<biblio.title>>\r\nBarcode: <<items.barcode>>\r\n\r\nArticle requested:\r\nTitle: <<article_requests.title>>\r\nAuthor: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nIssue: <<article_requests.issue>>\r\nDate: <<article_requests.date>>\r\nPages: <<article_requests.pages>>\r\nChapters: <<article_requests.chapters>>\r\nNotes: <<article_requests.patron_notes>>\r\n', 'print'), > ('circulation', 'AR_PROCESSING', '', 'Article request - processing', 0, 'Article request processing', 'Dear <<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>),\r\n\r\nWe are now processing your request for an article from <<biblio.title>> (<<items.barcode>>).\r\n\r\nArticle requested:\r\nTitle: <<article_requests.title>>\r\nAuthor: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nIssue: <<article_requests.issue>>\r\nDate: <<article_requests.date>>\r\nPages: <<article_requests.pages>>\r\nChapters: <<article_requests.chapters>>\r\nNotes: <<article_requests.patron_notes>>\r\n\r\nThank you!', 'email'), >-('circulation', 'CHECKOUT_NOTE', '', 'Checkout note on item set by patron', '0', 'Checkout note', '<<borrowers.firstname>> <<borrowers.surname>> has added a note to the item <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email'); >+('circulation', 'CHECKOUT_NOTE', '', 'Checkout note on item set by patron', '0', 'Checkout note', '<<borrowers.firstname>> <<borrowers.surname>> has added a note to the item <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email'), >+('circulation','RETURN_RECALLED_ITEM','','Notification to return a recalled item','0','Notification to return a recalled item','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall has been placed on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>). The due date has been updated, and is now <<issues.date_due>>. Please return the item before the due date. >+ >+Thank you!','email'), >+('circulation','PICKUP_RECALLED_ITEM','','Recalled item awaiting pickup','0','Recalled item awaiting pickup','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall that you requested on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>) is now ready for you to pick up at <<recalls.branchcode>>. Please pick up your item by <<recalls.expirationdate>>. >+ >+Thank you!','email'), >+('circulation','RECALL_REQUESTER_DET','','Details of patron who recalled item',0,'Date: <<today>> >+ >+Recall for pickup at <<branches.branchname>> >+<<borrowers.surname>>, <<borrowers.firstname>> (<<borrowers.cardnumber>>) >+<<borrowers.phone>> >+<<borrowers.streetnumber>> <<borrowers.address>>, <<borrowers.address2>>, <<borrowers.city>> <<borrowers.zipcode>> >+<<borrowers.email>> >+ >+ITEM RECALLED >+<<biblio.title>> by <<biblio.author>> >+Barcode: <<items.barcode>> >+Callnumber: <<items.itemcallnumber>> >+Waiting since: <<recalls.waitingdate>> >+Notes: <<recalls.recallnotes>>', 'print'); > > INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`) VALUES > ('circulation', 'ACCOUNT_PAYMENT', '', 'Account payment', 0, 'Account payment', '[%- USE Price -%]\r\nA payment of [% credit.amount * -1 | $Price %] has been applied to your account.\r\n\r\nThis payment affected the following fees:\r\n[%- FOREACH o IN offsets %]\r\nDescription: [% o.debit.description %]\r\nAmount paid: [% o.amount * -1 | $Price %]\r\nAmount remaining: [% o.debit.amountoutstanding | $Price %]\r\n[% END %]', 'email', 'default'), >diff --git a/installer/data/mysql/it-IT/necessari/notices.sql b/installer/data/mysql/it-IT/necessari/notices.sql >index d268548c907..96897dfb150 100644 >--- a/installer/data/mysql/it-IT/necessari/notices.sql >+++ b/installer/data/mysql/it-IT/necessari/notices.sql >@@ -201,7 +201,35 @@ INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title` > ('circulation', 'AR_PENDING', '', 'Richiesta articolo - ricevuta', 0, 'Ricevuto la richiesta di un articolo', 'Salve <<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>)\r\n\r\nAbbiamo ricevuto la tua richiesta di un articolo di <<biblio.title>> (<<items.barcode>>).\r\n\r\nL\'articolo richiesto:\r\nTitolo: <<article_requests.title>>\r\nAutore: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nFascicolo: <<article_requests.issue>>\r\nData: <<article_requests.date>>\r\nPagine: <<article_requests.pages>>\r\nChapitoli: <<article_requests.chapters>>\r\nNote: <<article_requests.patron_notes>>\r\n\r\nGrazie!', 'email'), > ('circulation', 'AR_SLIP', '', 'Richiesta articolo - ricevuta a stampa', 0, 'Richiesta articolo', 'Richiesta articolo\r\n\r\n<<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>),\r\n\r\nTitolo: <<biblio.title>>\r\nBarcode: <<items.barcode>>\r\n\r\nArticolo rechiesto:\r\nTitle: <<article_requests.title>>\r\nAutore: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nFascicolo: <<article_requests.issue>>\r\nData: <<article_requests.date>>\r\nPagine: <<article_requests.pages>>\r\nChapitoli: <<article_requests.chapters>>\r\nNote: <<article_requests.patron_notes>>\r\n', 'print'), > ('circulation', 'AR_PROCESSING', '', 'Richiesta articolo - in lavorazione', 0, 'La richiesta di un articolo è in lavorazione', 'Salve <<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>),\r\n\r\nStiamo ora lavorando la tua richiesta di un articolo da <<biblio.title>> (<<items.barcode>>).\r\n\r\nL\'articolo richiesto:\r\nTitolo: <<article_requests.title>>\r\nAutore: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nFascicolo: <<article_requests.issue>>\r\nData: <<article_requests.date>>\r\nPagine: <<article_requests.pages>>\r\nChapitoli: <<article_requests.chapters>>\r\nNote: <<article_requests.patron_notes>>\r\n\r\nGrazie!', 'email'), >-('circulation', 'CHECKOUT_NOTE', '', 'Checkout note on item set by patron', '0', 'Checkout note', '<<borrowers.firstname>> <<borrowers.surname>> has added a note to the item <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email'); >+('circulation', 'CHECKOUT_NOTE', '', 'Checkout note on item set by patron', '0', 'Checkout note', '<<borrowers.firstname>> <<borrowers.surname>> has added a note to the item <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email'), >+('circulation','RETURN_RECALLED_ITEM','','Notification to return a recalled item','0','Notification to return a recalled item','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall has been placed on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>). The due date has been updated, and is now <<issues.date_due>>. Please return the item before the due date. >+ >+Thank you!','email'), >+('circulation','PICKUP_RECALLED_ITEM','','Recalled item awaiting pickup','0','Recalled item awaiting pickup','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall that you requested on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>) is now ready for you to pick up at <<recalls.branchcode>>. Please pick up your item by <<recalls.expirationdate>>. >+ >+Thank you!','email'), >+('circulation','RECALL_REQUESTER_DET','','Details of patron who recalled item',0,'Date: <<today>> >+ >+Recall for pickup at <<branches.branchname>> >+<<borrowers.surname>>, <<borrowers.firstname>> (<<borrowers.cardnumber>>) >+<<borrowers.phone>> >+<<borrowers.streetnumber>> <<borrowers.address>>, <<borrowers.address2>>, <<borrowers.city>> <<borrowers.zipcode>> >+<<borrowers.email>> >+ >+ITEM RECALLED >+<<biblio.title>> by <<biblio.author>> >+Barcode: <<items.barcode>> >+Callnumber: <<items.itemcallnumber>> >+Waiting since: <<recalls.waitingdate>> >+Notes: <<recalls.recallnotes>>', 'print'); > > INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`) VALUES > ('circulation', 'ACCOUNT_PAYMENT', '', 'Account payment', 0, 'Account payment', '[%- USE Price -%]\r\nA payment of [% credit.amount * -1 | $Price %] has been applied to your account.\r\n\r\nThis payment affected the following fees:\r\n[%- FOREACH o IN offsets %]\r\nDescription: [% o.debit.description %]\r\nAmount paid: [% o.amount * -1 | $Price %]\r\nAmount remaining: [% o.debit.amountoutstanding | $Price %]\r\n[% END %]', 'email', 'default'), >diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql >index c5a3879662b..5a3c7fe99eb 100644 >--- a/installer/data/mysql/kohastructure.sql >+++ b/installer/data/mysql/kohastructure.sql >@@ -925,7 +925,7 @@ CREATE TABLE `branchtransfers` ( -- information for items that are in transit be > `datearrived` datetime default NULL, -- the date the transfer arrived at its destination > `tobranch` varchar(10) NOT NULL default '', -- the branch the transfer was going to > `comments` LONGTEXT, -- any comments related to the transfer >- `reason` ENUM('Manual', 'StockrotationAdvance', 'StockrotationRepatriation', 'ReturnToHome', 'ReturnToHolding', 'RotatingCollection', 'Reserve', 'LostReserve', 'CancelReserve'), -- what triggered the transfer >+ `reason` ENUM('Manual', 'StockrotationAdvance', 'StockrotationRepatriation', 'ReturnToHome', 'ReturnToHolding', 'RotatingCollection', 'Reserve', 'LostReserve', 'CancelReserve','Recall','CancelRecall'), -- what triggered the transfer > PRIMARY KEY (`branchtransfer_id`), > KEY `frombranch` (`frombranch`), > KEY `tobranch` (`tobranch`), >@@ -1739,6 +1739,38 @@ CREATE TABLE `patronimage` ( -- information related to patron images > ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; > > -- >+-- Table structure for table `recalls` >+-- >+ >+DROP TABLE IF EXISTS recalls; >+CREATE TABLE recalls ( -- information related to recalls in Koha >+ recall_id int(11) NOT NULL auto_increment, -- primary key >+ borrowernumber int(11) NOT NULL DEFAULT 0, -- foreign key from the borrowers table defining which patron requested a recall >+ recalldate datetime DEFAULT NULL, -- the date the recall request was placed >+ biblionumber int(11) NOT NULL DEFAULT 0, -- foreign key from the biblio table defining which bib record this request is for >+ branchcode varchar(10) DEFAULT NULL, -- foreign key from the branches table defining which branch the patron wishes to pick up their recall from >+ cancellationdate datetime DEFAULT NULL, -- the date this recall was cancelled >+ recallnotes mediumtext, -- notes related to this recall >+ priority smallint(6) DEFAULT NULL, -- where in the queue the patron sits >+ status varchar(1) DEFAULT NULL, -- a one letter code defining the status of the recall. R=requested, O=overdue, W=awaiting pickup, T=in transit, E=expired, C=cancelled, F=finished/completed >+ timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- the date and time this recall was last updated >+ itemnumber int(11) DEFAULT NULL, -- foreign key from the items table defining the specific item the recall request was placed on >+ waitingdate datetime DEFAULT NULL, -- the date the item was marked as waiting for the patron at the library >+ expirationdate datetime DEFAULT NULL, -- the date the recall expires >+ old TINYINT(1) DEFAULT NULL, -- flag if the recall is old and no longer active, i.e. expired, cancelled or completed >+ item_level_recall TINYINT(1) NOT NULL DEFAULT 0, -- flag if item-level recall >+ PRIMARY KEY (recall_id), >+ KEY borrowernumber (borrowernumber), >+ KEY biblionumber (biblionumber), >+ KEY itemnumber (itemnumber), >+ KEY branchcode (branchcode), >+ CONSTRAINT recalls_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE, >+ CONSTRAINT recalls_ibfk_2 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE, >+ CONSTRAINT recalls_ibfk_3 FOREIGN KEY (itemnumber) REFERENCES items (itemnumber) ON DELETE CASCADE ON UPDATE CASCADE, >+ CONSTRAINT recalls_ibfk_4 FOREIGN KEY (branchcode) REFERENCES branches (branchcode) ON DELETE CASCADE ON UPDATE CASCADE >+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; >+ >+-- > -- Table structure for table `reserves` > -- > >diff --git a/installer/data/mysql/nb-NO/1-Obligatorisk/sample_notices.sql b/installer/data/mysql/nb-NO/1-Obligatorisk/sample_notices.sql >index 534b4108380..b6e862c5226 100644 >--- a/installer/data/mysql/nb-NO/1-Obligatorisk/sample_notices.sql >+++ b/installer/data/mysql/nb-NO/1-Obligatorisk/sample_notices.sql >@@ -218,7 +218,35 @@ INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title` > ('circulation', 'AR_PENDING', '', 'Article request - pending', 0, 'Article request received', 'Dear <<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>)\r\n\r\nWe have received your request for an article from <<biblio.title>> (<<items.barcode>>).\r\n\r\nArticle requested:\r\nTitle: <<article_requests.title>>\r\nAuthor: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nIssue: <<article_requests.issue>>\r\nDate: <<article_requests.date>>\r\nPages: <<article_requests.pages>>\r\nChapters: <<article_requests.chapters>>\r\nNotes: <<article_requests.patron_notes>>\r\n\r\n\r\nThank you!', 'email'), > ('circulation', 'AR_SLIP', '', 'Article request - print slip', 0, 'Article request', 'Article request:\r\n\r\n<<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>),\r\n\r\nTitle: <<biblio.title>>\r\nBarcode: <<items.barcode>>\r\n\r\nArticle requested:\r\nTitle: <<article_requests.title>>\r\nAuthor: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nIssue: <<article_requests.issue>>\r\nDate: <<article_requests.date>>\r\nPages: <<article_requests.pages>>\r\nChapters: <<article_requests.chapters>>\r\nNotes: <<article_requests.patron_notes>>\r\n', 'print'), > ('circulation', 'AR_PROCESSING', '', 'Article request - processing', 0, 'Article request processing', 'Dear <<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>),\r\n\r\nWe are now processing your request for an article from <<biblio.title>> (<<items.barcode>>).\r\n\r\nArticle requested:\r\nTitle: <<article_requests.title>>\r\nAuthor: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nIssue: <<article_requests.issue>>\r\nDate: <<article_requests.date>>\r\nPages: <<article_requests.pages>>\r\nChapters: <<article_requests.chapters>>\r\nNotes: <<article_requests.patron_notes>>\r\n\r\nThank you!', 'email'), >-('circulation', 'CHECKOUT_NOTE', '', 'Checkout note on item set by patron', '0', 'Checkout note', '<<borrowers.firstname>> <<borrowers.surname>> has added a note to the item <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email'); >+('circulation', 'CHECKOUT_NOTE', '', 'Checkout note on item set by patron', '0', 'Checkout note', '<<borrowers.firstname>> <<borrowers.surname>> has added a note to the item <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email'), >+('circulation','RETURN_RECALLED_ITEM','','Notification to return a recalled item','0','Notification to return a recalled item','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall has been placed on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>). The due date has been updated, and is now <<issues.date_due>>. Please return the item before the due date. >+ >+Thank you!','email'), >+('circulation','PICKUP_RECALLED_ITEM','','Recalled item awaiting pickup','0','Recalled item awaiting pickup','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall that you requested on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>) is now ready for you to pick up at <<recalls.branchcode>>. Please pick up your item by <<recalls.expirationdate>>. >+ >+Thank you!','email'), >+('circulation','RECALL_REQUESTER_DET','','Details of patron who recalled item',0,'Date: <<today>> >+ >+Recall for pickup at <<branches.branchname>> >+<<borrowers.surname>>, <<borrowers.firstname>> (<<borrowers.cardnumber>>) >+<<borrowers.phone>> >+<<borrowers.streetnumber>> <<borrowers.address>>, <<borrowers.address2>>, <<borrowers.city>> <<borrowers.zipcode>> >+<<borrowers.email>> >+ >+ITEM RECALLED >+<<biblio.title>> by <<biblio.author>> >+Barcode: <<items.barcode>> >+Callnumber: <<items.itemcallnumber>> >+Waiting since: <<recalls.waitingdate>> >+Notes: <<recalls.recallnotes>>', 'print'); > > INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`) VALUES > ('circulation', 'ACCOUNT_PAYMENT', '', 'Account payment', 0, 'Account payment', '[%- USE Price -%]\r\nA payment of [% credit.amount * -1 | $Price %] has been applied to your account.\r\n\r\nThis payment affected the following fees:\r\n[%- FOREACH o IN offsets %]\r\nDescription: [% o.debit.description %]\r\nAmount paid: [% o.amount * -1 | $Price %]\r\nAmount remaining: [% o.debit.amountoutstanding | $Price %]\r\n[% END %]', 'email', 'default'), >diff --git a/installer/data/mysql/pl-PL/mandatory/sample_notices.sql b/installer/data/mysql/pl-PL/mandatory/sample_notices.sql >index dbfcc7b24d4..5640b340825 100644 >--- a/installer/data/mysql/pl-PL/mandatory/sample_notices.sql >+++ b/installer/data/mysql/pl-PL/mandatory/sample_notices.sql >@@ -196,7 +196,35 @@ INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title` > ('circulation', 'AR_PENDING', '', 'Article request - pending', 0, 'Article request received', 'Dear <<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>)\r\n\r\nWe have received your request for an article from <<biblio.title>> (<<items.barcode>>).\r\n\r\nArticle requested:\r\nTitle: <<article_requests.title>>\r\nAuthor: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nIssue: <<article_requests.issue>>\r\nDate: <<article_requests.date>>\r\nPages: <<article_requests.pages>>\r\nChapters: <<article_requests.chapters>>\r\nNotes: <<article_requests.patron_notes>>\r\n\r\n\r\nThank you!', 'email'), > ('circulation', 'AR_SLIP', '', 'Article request - print slip', 0, 'Article request', 'Article request:\r\n\r\n<<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>),\r\n\r\nTitle: <<biblio.title>>\r\nBarcode: <<items.barcode>>\r\n\r\nArticle requested:\r\nTitle: <<article_requests.title>>\r\nAuthor: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nIssue: <<article_requests.issue>>\r\nDate: <<article_requests.date>>\r\nPages: <<article_requests.pages>>\r\nChapters: <<article_requests.chapters>>\r\nNotes: <<article_requests.patron_notes>>\r\n', 'print'), > ('circulation', 'AR_PROCESSING', '', 'Article request - processing', 0, 'Article request processing', 'Dear <<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>),\r\n\r\nWe are now processing your request for an article from <<biblio.title>> (<<items.barcode>>).\r\n\r\nArticle requested:\r\nTitle: <<article_requests.title>>\r\nAuthor: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nIssue: <<article_requests.issue>>\r\nDate: <<article_requests.date>>\r\nPages: <<article_requests.pages>>\r\nChapters: <<article_requests.chapters>>\r\nNotes: <<article_requests.patron_notes>>\r\n\r\nThank you!', 'email'), >-('circulation', 'CHECKOUT_NOTE', '', 'Checkout note on item set by patron', '0', 'Checkout note', '<<borrowers.firstname>> <<borrowers.surname>> has added a note to the item <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email'); >+('circulation', 'CHECKOUT_NOTE', '', 'Checkout note on item set by patron', '0', 'Checkout note', '<<borrowers.firstname>> <<borrowers.surname>> has added a note to the item <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email'), >+('circulation','RETURN_RECALLED_ITEM','','Notification to return a recalled item','0','Notification to return a recalled item','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall has been placed on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>). The due date has been updated, and is now <<issues.date_due>>. Please return the item before the due date. >+ >+Thank you!','email'), >+('circulation','PICKUP_RECALLED_ITEM','','Recalled item awaiting pickup','0','Recalled item awaiting pickup','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall that you requested on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>) is now ready for you to pick up at <<recalls.branchcode>>. Please pick up your item by <<recalls.expirationdate>>. >+ >+Thank you!','email'), >+('circulation','RECALL_REQUESTER_DET','','Details of patron who recalled item',0,'Date: <<today>> >+ >+Recall for pickup at <<branches.branchname>> >+<<borrowers.surname>>, <<borrowers.firstname>> (<<borrowers.cardnumber>>) >+<<borrowers.phone>> >+<<borrowers.streetnumber>> <<borrowers.address>>, <<borrowers.address2>>, <<borrowers.city>> <<borrowers.zipcode>> >+<<borrowers.email>> >+ >+ITEM RECALLED >+<<biblio.title>> by <<biblio.author>> >+Barcode: <<items.barcode>> >+Callnumber: <<items.itemcallnumber>> >+Waiting since: <<recalls.waitingdate>> >+Notes: <<recalls.recallnotes>>', 'print'); > > INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`) VALUES > ('circulation', 'ACCOUNT_PAYMENT', '', 'Account payment', 0, 'Account payment', '[%- USE Price -%]\r\nA payment of [% credit.amount * -1 | $Price %] has been applied to your account.\r\n\r\nThis payment affected the following fees:\r\n[%- FOREACH o IN offsets %]\r\nDescription: [% o.debit.description %]\r\nAmount paid: [% o.amount * -1 | $Price %]\r\nAmount remaining: [% o.debit.amountoutstanding | $Price %]\r\n[% END %]', 'email', 'default'), >diff --git a/installer/data/mysql/ru-RU/mandatory/sample_notices.sql b/installer/data/mysql/ru-RU/mandatory/sample_notices.sql >index 60b86c61bff..6616841c55e 100644 >--- a/installer/data/mysql/ru-RU/mandatory/sample_notices.sql >+++ b/installer/data/mysql/ru-RU/mandatory/sample_notices.sql >@@ -198,7 +198,35 @@ INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title` > ('circulation', 'AR_PENDING', '', 'Article request - pending', 0, 'Article request received', 'Dear <<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>)\r\n\r\nWe have received your request for an article from <<biblio.title>> (<<items.barcode>>).\r\n\r\nArticle requested:\r\nTitle: <<article_requests.title>>\r\nAuthor: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nIssue: <<article_requests.issue>>\r\nDate: <<article_requests.date>>\r\nPages: <<article_requests.pages>>\r\nChapters: <<article_requests.chapters>>\r\nNotes: <<article_requests.patron_notes>>\r\n\r\n\r\nThank you!', 'email'), > ('circulation', 'AR_SLIP', '', 'Article request - print slip', 0, 'Article request', 'Article request:\r\n\r\n<<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>),\r\n\r\nTitle: <<biblio.title>>\r\nBarcode: <<items.barcode>>\r\n\r\nArticle requested:\r\nTitle: <<article_requests.title>>\r\nAuthor: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nIssue: <<article_requests.issue>>\r\nDate: <<article_requests.date>>\r\nPages: <<article_requests.pages>>\r\nChapters: <<article_requests.chapters>>\r\nNotes: <<article_requests.patron_notes>>\r\n', 'print'), > ('circulation', 'AR_PROCESSING', '', 'Article request - processing', 0, 'Article request processing', 'Dear <<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>),\r\n\r\nWe are now processing your request for an article from <<biblio.title>> (<<items.barcode>>).\r\n\r\nArticle requested:\r\nTitle: <<article_requests.title>>\r\nAuthor: <<article_requests.author>>\r\nVolume: <<article_requests.volume>>\r\nIssue: <<article_requests.issue>>\r\nDate: <<article_requests.date>>\r\nPages: <<article_requests.pages>>\r\nChapters: <<article_requests.chapters>>\r\nNotes: <<article_requests.patron_notes>>\r\n\r\nThank you!', 'email'), >-('circulation', 'CHECKOUT_NOTE', '', 'Checkout note on item set by patron', '0', 'Checkout note', '<<borrowers.firstname>> <<borrowers.surname>> has added a note to the item <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email'); >+('circulation', 'CHECKOUT_NOTE', '', 'Checkout note on item set by patron', '0', 'Checkout note', '<<borrowers.firstname>> <<borrowers.surname>> has added a note to the item <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email'), >+('circulation','RETURN_RECALLED_ITEM','','Notification to return a recalled item','0','Notification to return a recalled item','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall has been placed on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>). The due date has been updated, and is now <<issues.date_due>>. Please return the item before the due date. >+ >+Thank you!','email'), >+('circulation','PICKUP_RECALLED_ITEM','','Recalled item awaiting pickup','0','Recalled item awaiting pickup','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall that you requested on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>) is now ready for you to pick up at <<recalls.branchcode>>. Please pick up your item by <<recalls.expirationdate>>. >+ >+Thank you!','email'), >+('circulation','RECALL_REQUESTER_DET','','Details of patron who recalled item',0,'Date: <<today>> >+ >+Recall for pickup at <<branches.branchname>> >+<<borrowers.surname>>, <<borrowers.firstname>> (<<borrowers.cardnumber>>) >+<<borrowers.phone>> >+<<borrowers.streetnumber>> <<borrowers.address>>, <<borrowers.address2>>, <<borrowers.city>> <<borrowers.zipcode>> >+<<borrowers.email>> >+ >+ITEM RECALLED >+<<biblio.title>> by <<biblio.author>> >+Barcode: <<items.barcode>> >+Callnumber: <<items.itemcallnumber>> >+Waiting since: <<recalls.waitingdate>> >+Notes: <<recalls.recallnotes>>', 'print'); > > INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`) VALUES > ('circulation', 'ACCOUNT_PAYMENT', '', 'Account payment', 0, 'Account payment', '[%- USE Price -%]\r\nA payment of [% credit.amount * -1 | $Price %] has been applied to your account.\r\n\r\nThis payment affected the following fees:\r\n[%- FOREACH o IN offsets %]\r\nDescription: [% o.debit.description %]\r\nAmount paid: [% o.amount * -1 | $Price %]\r\nAmount remaining: [% o.debit.amountoutstanding | $Price %]\r\n[% END %]', 'email', 'default'), >diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql >index 58bd459e94b..a353fd3331b 100644 >--- a/installer/data/mysql/sysprefs.sql >+++ b/installer/data/mysql/sysprefs.sql >@@ -522,6 +522,8 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` > ('QueryWeightFields','1',NULL,'If ON, enables field weighting','YesNo'), > ('QuoteOfTheDay','0',NULL,'Enable or disable display of Quote of the Day on the OPAC home page','YesNo'), > ('RandomizeHoldsQueueWeight','0',NULL,'if ON, the holds queue in circulation will be randomized, either based on all location codes, or by the location codes specified in StaticHoldsQueueWeight','YesNo'), >+('RecallsLog','1',NULL,'If ON, log create/cancel/expire/fulfill actions on recalls','YesNo'), >+('RecallsMaxPickUpDelay','7',NULL,'Define the maximum time a recall can be awaiting pickup','Integer'), > ('RecordLocalUseOnReturn','0',NULL,'If ON, statistically record returns of unissued items as local use, instead of return','YesNo'), > ('RefundLostOnReturnControl','CheckinLibrary','CheckinLibrary|ItemHomeBranch|ItemHoldingBranch','If a lost item is returned, choose which branch to pick rules for refunding.','Choice'), > ('RenewAccruingItemWhenPaid','0','','If enabled, when the fines on an item accruing is paid off, attempt to renew that item. If the syspref "RenewalPeriodBase" is set to "due date", renewed items may still be overdue','YesNo'), >@@ -686,6 +688,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` > ('useDischarge','','','Allows librarians to discharge borrowers and borrowers to request a discharge','YesNo'), > ('UseEmailReceipts','0','','Send email receipts for payments and write-offs','YesNo'), > ('UseICU','0','1','Tell Koha if ICU indexing is in use for Zebra or not.','YesNo'), >+('UseRecalls','0',NULL,'Enable or disable recalls','YesNo'), > ('UseTransportCostMatrix','0','','Use Transport Cost Matrix when filling holds','YesNo'), > ('UseWYSIWYGinSystemPreferences','0','','Show WYSIWYG editor when editing certain HTML system preferences.','YesNo'), > ('viewISBD','1','','Allow display of ISBD view of bibiographic records','YesNo'), >diff --git a/installer/data/mysql/uk-UA/mandatory/sample_notices.sql b/installer/data/mysql/uk-UA/mandatory/sample_notices.sql >index 137e3721490..a5e87f5ea15 100644 >--- a/installer/data/mysql/uk-UA/mandatory/sample_notices.sql >+++ b/installer/data/mysql/uk-UA/mandatory/sample_notices.sql >@@ -289,7 +289,39 @@ INSERT INTO `letter` (module, code, branchcode, name, is_html, title, content, m > ('circulation', 'AR_PROCESSING', '', 'Ð·Ð°Ð¿Ð¸Ñ ÑÑаÑÑÑ - обÑобка', 0, 'ÐбÑобка запиÑÑ ÑÑаÑÑÑ', '<<borrowers.firstname>> <<borrowers.surname>> (<<borrowers.cardnumber>>)\r\n\r\n Ðи заÑаз обÑоблÑÑмо ÐÐ°Ñ Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° ÑÑаÑÑÑ Ð·Ñ â<<biblio.title>>â (<<items.barcode>>).\r\n\r\n ÐапиÑÑвана ÑÑаÑÑÑ:\r\n Ðаголовок: <<article_requests.title>>\r\n ÐвÑоÑ: <<article_requests.author>>\r\n Том: <<article_requests.volume>>\r\n ÐипÑÑк: <<article_requests.issue>>\r\n ÐаÑа: <<article_requests.date>>\r\n СÑоÑÑнки: <<article_requests.pages>>\r\n РоздÑли: <<article_requests.chapters>>\r\n ÐÑимÑÑки: <<article_requests.patron_notes>>\r\n\r\n СпаÑибÑ!', > 'email'), > >-('circulation', 'CHECKOUT_NOTE', '', 'Checkout note on item set by patron', '0', 'Checkout note', '<<borrowers.firstname>> <<borrowers.surname>> has added a note to the item <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email'); >+('circulation', 'CHECKOUT_NOTE', '', 'Checkout note on item set by patron', '0', 'Checkout note', '<<borrowers.firstname>> <<borrowers.surname>> has added a note to the item <<biblio.title>> - <<biblio.author>> (<<biblio.biblionumber>>).','email'), >+ >+('circulation','RETURN_RECALLED_ITEM','','Notification to return a recalled item','0','Notification to return a recalled item','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall has been placed on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>). The due date has been updated, and is now <<issues.date_due>>. Please return the item before the due date. >+ >+Thank you!','email'), >+ >+('circulation','PICKUP_RECALLED_ITEM','','Recalled item awaiting pickup','0','Recalled item awaiting pickup','Date: <<today>> >+ >+<<borrowers.firstname>> <<borrowers.surname>>, >+ >+A recall that you requested on the following item: <<biblio.title>> / <<biblio.author>> (<<items.barcode>>) is now ready for you to pick up at <<recalls.branchcode>>. Please pick up your item by <<recalls.expirationdate>>. >+ >+Thank you!','email'), >+ >+('circulation','RECALL_REQUESTER_DET','','Details of patron who recalled item',0,'Date: <<today>> >+ >+Recall for pickup at <<branches.branchname>> >+<<borrowers.surname>>, <<borrowers.firstname>> (<<borrowers.cardnumber>>) >+<<borrowers.phone>> >+<<borrowers.streetnumber>> <<borrowers.address>>, <<borrowers.address2>>, <<borrowers.city>> <<borrowers.zipcode>> >+<<borrowers.email>> >+ >+ITEM RECALLED >+<<biblio.title>> by <<biblio.author>> >+Barcode: <<items.barcode>> >+Callnumber: <<items.itemcallnumber>> >+Waiting since: <<recalls.waitingdate>> >+Notes: <<recalls.recallnotes>>', 'print') >+; > > INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`) VALUES > ('circulation', 'ACCOUNT_PAYMENT', '', 'Account payment', 0, 'Account payment', '[%- USE Price -%]\r\nA payment of [% credit.amount * -1 | $Price %] has been applied to your account.\r\n\r\nThis payment affected the following fees:\r\n[%- FOREACH o IN offsets %]\r\nDescription: [% o.debit.description %]\r\nAmount paid: [% o.amount * -1 | $Price %]\r\nAmount remaining: [% o.debit.amountoutstanding | $Price %]\r\n[% END %]', 'email', 'default'), >diff --git a/installer/data/mysql/userflags.sql b/installer/data/mysql/userflags.sql >index 40ec125eeaf..1f31b200fea 100644 >--- a/installer/data/mysql/userflags.sql >+++ b/installer/data/mysql/userflags.sql >@@ -23,5 +23,6 @@ INSERT INTO userflags (bit, flag, flagdesc, defaulton) VALUES > (23,'self_check','Self check modules',0), > (24, 'stockrotation', 'Manage stockrotation operations', 0), > (25, 'cash_management', 'Cash management', 0), >-(26, 'problem_reports', 'Manage problem reports', 0) >+(26, 'problem_reports', 'Manage problem reports', 0), >+(27, 'recalls', 'Recalls', 0) > ; >diff --git a/installer/data/mysql/userpermissions.sql b/installer/data/mysql/userpermissions.sql >index f90eee99a75..4a473708bd3 100644 >--- a/installer/data/mysql/userpermissions.sql >+++ b/installer/data/mysql/userpermissions.sql >@@ -128,5 +128,6 @@ INSERT INTO permissions (module_bit, code, description) VALUES > (25, 'anonymous_refund', 'Perform refund actions from cash registers'), > (25, 'cashup', 'Perform cash register cashup action'), > (25, 'takepayment', 'Access the point of sale page and take payments'), >- (26, 'manage_problem_reports', 'Manage OPAC problem reports') >+ (26, 'manage_problem_reports', 'Manage OPAC problem reports'), >+ (27, 'manage_recalls', 'Manage recalls for patrons') > ; >diff --git a/installer/onboarding.pl b/installer/onboarding.pl >index 547df29e0da..6130ed70216 100755 >--- a/installer/onboarding.pl >+++ b/installer/onboarding.pl >@@ -283,6 +283,12 @@ if ( $step == 5 ) { > rentaldiscount => 0, > reservesallowed => $reservesallowed, > suspension_chargeperiod => undef, >+ recalls_allowed => undef, >+ recalls_per_record => undef, >+ on_shelf_recalls => undef, >+ recall_due_date_interval => undef, >+ recall_overdue_fine => undef, >+ recall_shelf_time => undef, > } > }; > >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/permissions.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/permissions.inc >index 368202b7cc3..b49599f71b6 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/permissions.inc >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/permissions.inc >@@ -75,6 +75,9 @@ > [%- CASE 'problem_reports' -%] > <span class="main_permission problem_reports_permission">OPAC problem reports management</span> > <span class="permissioncode">([% name | html %])</span> >+ [%- CASE 'recalls' -%] >+ <span class="main_permission recalls_permission">Recalls</span> >+ <span class="permissioncode">([% name | html %])</span> > [%- END -%] > [%- END -%] > >@@ -738,5 +741,11 @@ > Manage OPAC problem reports > </span> > <span class="permissioncode">([% name | html %])</span> >+ [%# recalls %] >+ [%- CASE 'manage_recalls' -%] >+ <span class="sub_permission place_recalls_subpermission"> >+ Manage recalls for patrons >+ </span> >+ <span class="permissioncode">([% name | html %])</span> > [%- END -%] > [%- END -%] >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref >index 9ea394b716c..fbca46321fe 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref >@@ -1153,3 +1153,15 @@ Circulation: > - pref: ClaimReturnedWarningThreshold > class: integer > - items. >+ Recalls: >+ - >+ - Mark a recall as problematic if it has been waiting to be picked up for >+ - pref: RecallsMaxPickUpDelay >+ - class: integer >+ - days. >+ - >+ - pref: UseRecalls >+ choices: >+ yes: Use >+ no: "Don't use" >+ - recalls. >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/logs.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/logs.pref >index 462871c947e..837593df705 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/logs.pref >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/logs.pref >@@ -90,6 +90,12 @@ Logging: > on: Log > off: "Don't log" > - " successful authentications" >+ - >+ - pref: RecallsLog >+ choices: >+ on: Log >+ off: "Don't log" >+ - any actions on recalls (create, cancel, expire, fulfill). > > Debugging: > - >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt >index 5ae3bb94e1a..18913d2f539 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt >@@ -117,6 +117,14 @@ > <th>OPAC item level holds</th> > <th>Article requests</th> > <th>Rental discount (%)</th> >+ [% IF Koha.Preference('UseRecalls') %] >+ <th>Recalls allowed (total)</th> >+ <th>Recalls per record (count)</th> >+ <th>On shelf recalls allowed</th> >+ <th>Recall due date interval (day)</th> >+ <th>Recall overdue fine amount</th> >+ <th>Recall pickup period (day)</th> >+ [% END %] > <th>Actions</th> > </tr> > </thead> >@@ -155,8 +163,14 @@ > [% SET opacitemholds = all_rules.$c.$i.opacitemholds %] > [% SET article_requests = all_rules.$c.$i.article_requests %] > [% SET rentaldiscount = all_rules.$c.$i.rentaldiscount %] >+ [% SET recalls_allowed = all_rules.$c.$i.recalls_allowed %] >+ [% SET recalls_per_record = all_rules.$c.$i.recalls_per_record %] >+ [% SET on_shelf_recalls = all_rules.$c.$i.on_shelf_recalls %] >+ [% SET recall_due_date_interval = all_rules.$c.$i.recall_due_date_interval %] >+ [% SET recall_overdue_fine = all_rules.$c.$i.recall_overdue_fine %] >+ [% SET recall_shelf_time = all_rules.$c.$i.recall_shelf_time %] > >- [% SET show_rule = maxissueqty || maxonsiteissueqty || issuelength || lengthunit || hardduedate || hardduedatebefore || hardduedateexact || fine || chargeperiod || chargeperiod_charge_at || firstremind || overduefinescap || cap_fine_to_replacement_price || finedays || maxsuspensiondays || suspension_chargeperiod || renewalsallowed || renewalsallowed || norenewalbefore || auto_renew || no_auto_renewal_after || no_auto_renewal_after_hard_limit || reservesallowed || holds_per_day || holds_per_record || onshelfholds || opacitemholds || article_requests || article_requests %] >+ [% SET show_rule = maxissueqty || maxonsiteissueqty || issuelength || lengthunit || hardduedate || hardduedatebefore || hardduedateexact || fine || chargeperiod || chargeperiod_charge_at || firstremind || overduefinescap || cap_fine_to_replacement_price || finedays || maxsuspensiondays || suspension_chargeperiod || renewalsallowed || renewalsallowed || norenewalbefore || auto_renew || no_auto_renewal_after || no_auto_renewal_after_hard_limit || reservesallowed || holds_per_day || holds_per_record || onshelfholds || opacitemholds || article_requests || article_requests || recalls_allowed || recalls_per_record || on_shelf_recalls || recall_due_date_interval || recall_overdue_fine || recall_shelf_time %] > [% IF show_rule %] > [% SET row_count = row_count + 1 %] > <tr row_countd="row_[% row_count | html %]"> >@@ -301,6 +315,20 @@ > [% END %] > </td> > <td>[% rentaldiscount | html %]</td> >+ [% IF Koha.Preference('UseRecalls') %] >+ <td>[% recalls_allowed | html %]</td> >+ <td>[% recalls_per_record | html %]</td> >+ <td> >+ [% IF on_shelf_recalls == 'all' %] >+ <span>If all unavailable</span> >+ [% ELSE %] >+ <span>If any unavailable</span> >+ [% END %] >+ </td> >+ <td>[% recall_due_date_interval | html %]</td> >+ <td>[% recall_overdue_fine FILTER format("%.2f") %]</td> >+ <td>[% recall_shelf_time | html %]</td> >+ [% END %] > <td class="actions"> > <a href="#" class="editrule btn btn-default btn-xs"><i class="fa fa-pencil"></i> Edit</a> > <a class="btn btn-default btn-xs delete" href="/cgi-bin/koha/admin/smart-rules.pl?op=delete&itemtype=[% i || '*' | uri %]&categorycode=[% c || '*' | uri %]&branch=[% current_branch | uri %]"><i class="fa fa-trash"></i> Delete</a> >@@ -404,6 +432,19 @@ > </select> > </td> > <td><input type="text" name="rentaldiscount" id="rentaldiscount" size="2" /></td> >+ [% IF Koha.Preference('UseRecalls') %] >+ <td><input type="text" name="recalls_allowed" id="recalls_allowed" size="3"></td> >+ <td><input type="text" name="recalls_per_record" id="recalls_per_record" size="3"></td> >+ <td> >+ <select name="on_shelf_recalls" id="on_shelf_recalls"> >+ <option value="any">If any unavailable</option> >+ <option value="all">If all unavailable</option> >+ </select> >+ </td> >+ <td><input type="text" name="recall_due_date_interval" id="recall_due_date_interval" size="3"></td> >+ <td><input type="text" name="recall_overdue_fine" id="recall_overdue_fine" size="6"></td> >+ <td><input type="text" name="recall_shelf_time" id="recall_shelf_time" size="3"></td> >+ [% END %] > <td class="actions"> > <input type="hidden" name="branch" value="[% current_branch | html %]"/> > <button type="submit" class="btn btn-default btn-xs"><i class="fa fa-save"></i> Save</button> >@@ -443,6 +484,14 @@ > <th>OPAC item level holds</th> > <th>Article requests</th> > <th>Rental discount (%)</th> >+ [% IF Koha.Preference('UseRecalls') %] >+ <th>Recalls allowed (total)</th> >+ <th>Recalls per record (count)</th> >+ <th>On shelf recalls allowed</th> >+ <th>Recall due date interval (day)</th> >+ <th>Recall overdue fine amount</th> >+ <th>Recall pickup period (day)</th> >+ [% END %] > <th> </th> > </tr> > </tfoot> >-- >2.11.0
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