View | Details | Raw Unified | Return to bug 19532
Collapse All | Expand All

(-)a/C4/Auth.pm (+1 lines)
Lines 333-338 sub get_template_and_user { Link Here
333
            $template->param( CAN_user_stockrotation    => 1 );
333
            $template->param( CAN_user_stockrotation    => 1 );
334
            $template->param( CAN_user_cash_management  => 1 );
334
            $template->param( CAN_user_cash_management  => 1 );
335
            $template->param( CAN_user_problem_reports  => 1 );
335
            $template->param( CAN_user_problem_reports  => 1 );
336
            $template->param( CAN_user_recalls          => 1 );
336
337
337
            foreach my $module ( keys %$all_perms ) {
338
            foreach my $module ( keys %$all_perms ) {
338
                foreach my $subperm ( keys %{ $all_perms->{$module} } ) {
339
                foreach my $subperm ( keys %{ $all_perms->{$module} } ) {
(-)a/C4/InstallAuth.pm (+1 lines)
Lines 142-147 sub get_template_and_user { Link Here
142
            $template->param( CAN_user_serials          => 1 );
142
            $template->param( CAN_user_serials          => 1 );
143
            $template->param( CAN_user_reports          => 1 );
143
            $template->param( CAN_user_reports          => 1 );
144
            $template->param( CAN_user_problem_reports   => 1 );
144
            $template->param( CAN_user_problem_reports   => 1 );
145
            $template->param( CAN_user_recalls          => 1 );
145
        }
146
        }
146
147
147
        my $minPasswordLength = C4::Context->preference('minPasswordLength');
148
        my $minPasswordLength = C4::Context->preference('minPasswordLength');
(-)a/Koha/CirculationRules.pm (+18 lines)
Lines 169-174 our $RULE_KINDS = { Link Here
169
    decreaseloanholds => {
169
    decreaseloanholds => {
170
        scope => [ 'branchcode', 'categorycode', 'itemtype' ],
170
        scope => [ 'branchcode', 'categorycode', 'itemtype' ],
171
    },
171
    },
172
    recalls_allowed => {
173
        scope => [ 'branchcode', 'categorycode', 'itemtype' ],
174
    },
175
    recalls_per_record => {
176
        scope => [ 'branchcode', 'categorycode', 'itemtype' ],
177
    },
178
    on_shelf_recalls => {
179
        scope => [ 'branchcode', 'categorycode', 'itemtype' ],
180
    },
181
    recall_due_date_interval => {
182
        scope => [ 'branchcode', 'categorycode', 'itemtype' ],
183
    },
184
    recall_overdue_fine => {
185
        scope => [ 'branchcode', 'categorycode', 'itemtype' ],
186
    },
187
    recall_shelf_time => {
188
        scope => [ 'branchcode', 'categorycode', 'itemtype' ],
189
    },
172
    # Not included (deprecated?):
190
    # Not included (deprecated?):
173
    #   * accountsent
191
    #   * accountsent
174
    #   * reservecharge
192
    #   * reservecharge
(-)a/Makefile.PL (+1 lines)
Lines 352-357 my $target_map = { Link Here
352
  './patron_lists'              => 'INTRANET_CGI_DIR',
352
  './patron_lists'              => 'INTRANET_CGI_DIR',
353
  './plugins'                   => 'INTRANET_CGI_DIR',
353
  './plugins'                   => 'INTRANET_CGI_DIR',
354
  './pos'                       => 'INTRANET_CGI_DIR',
354
  './pos'                       => 'INTRANET_CGI_DIR',
355
  './recalls'                   => 'INTRANET_CGI_DIR',
355
  './reports'                   => 'INTRANET_CGI_DIR',
356
  './reports'                   => 'INTRANET_CGI_DIR',
356
  './reserve'                   => 'INTRANET_CGI_DIR',
357
  './reserve'                   => 'INTRANET_CGI_DIR',
357
  './reviews'                   => 'INTRANET_CGI_DIR',
358
  './reviews'                   => 'INTRANET_CGI_DIR',
(-)a/admin/smart-rules.pl (+18 lines)
Lines 108-113 if ($op eq 'delete') { Link Here
108
                cap_fine_to_replacement_price    => undef,
108
                cap_fine_to_replacement_price    => undef,
109
                article_requests                 => undef,
109
                article_requests                 => undef,
110
                note                             => undef,
110
                note                             => undef,
111
                recalls_allowed                  => undef,
112
                recalls_per_record               => undef,
113
                on_shelf_recalls                 => undef,
114
                recall_due_date_interval         => undef,
115
                recall_overdue_fine              => undef,
116
                recall_shelf_time                => undef,
111
            }
117
            }
112
        }
118
        }
113
    );
119
    );
Lines 286-291 elsif ($op eq 'add') { Link Here
286
    my $cap_fine_to_replacement_price = ($input->param('cap_fine_to_replacement_price') || '') eq 'on';
292
    my $cap_fine_to_replacement_price = ($input->param('cap_fine_to_replacement_price') || '') eq 'on';
287
    my $note = $input->param('note');
293
    my $note = $input->param('note');
288
    my $decreaseloanholds = $input->param('decreaseloanholds') || undef;
294
    my $decreaseloanholds = $input->param('decreaseloanholds') || undef;
295
    my $recalls_allowed = $input->param('recalls_allowed');
296
    my $recalls_per_record = $input->param('recalls_per_record');
297
    my $on_shelf_recalls = $input->param('on_shelf_recalls');
298
    my $recall_due_date_interval = $input->param('recall_due_date_interval');
299
    my $recall_overdue_fine = $input->param('recall_overdue_fine');
300
    my $recall_shelf_time = $input->param('recall_shelf_time');
289
301
290
    my $rules = {
302
    my $rules = {
291
        maxissueqty                   => $maxissueqty,
303
        maxissueqty                   => $maxissueqty,
Lines 320-325 elsif ($op eq 'add') { Link Here
320
        article_requests              => $article_requests,
332
        article_requests              => $article_requests,
321
        note                          => $note,
333
        note                          => $note,
322
        decreaseloanholds             => $decreaseloanholds,
334
        decreaseloanholds             => $decreaseloanholds,
335
        recalls_allowed               => $recalls_allowed,
336
        recalls_per_record            => $recalls_per_record,
337
        on_shelf_recalls              => $on_shelf_recalls,
338
        recall_due_date_interval      => $recall_due_date_interval,
339
        recall_overdue_fine           => $recall_overdue_fine,
340
        recall_shelf_time             => $recall_shelf_time,
323
    };
341
    };
324
342
325
    Koha::CirculationRules->set_rules(
343
    Koha::CirculationRules->set_rules(
(-)a/installer/data/mysql/atomicupdate/bug_19532-add_recalls_enum_branchtransfers.perl (+6 lines)
Line 0 Link Here
1
$DBversion = 'XXX';
2
if( CheckVersion( $DBversion ) ) {
3
    $dbh->do(q{ ALTER TABLE branchtransfers MODIFY COLUMN reason ENUM('Manual', 'StockrotationAdvance', 'StockrotationRepatriation', 'ReturnToHome', 'ReturnToHolding', 'RotatingCollection', 'Reserve', 'LostReserve', 'CancelReserve', 'Recall', 'CancelRecall') });
4
5
    NewVersion( $DBversion, 19532, "Add Recall and CancelReserve ENUM options to branchtransfers.reason" );
6
}
(-)a/installer/data/mysql/atomicupdate/bug_19532-add_recalls_flags.perl (+7 lines)
Line 0 Link Here
1
$DBversion = 'XXX';
2
if( CheckVersion( $DBversion ) ) {
3
    $dbh->do(q{ INSERT IGNORE INTO userflags (bit, flag, flagdesc, defaulton) VALUES (27, 'recalls', 'Recalls', 0) });
4
    $dbh->do(q{ INSERT IGNORE INTO permissions (module_bit, code, description) VALUES (27, 'manage_recalls', 'Manage recalls for patrons') });
5
6
    NewVersion( $DBversion, 19532, "Add recalls user flag and manage_recalls user permission" );
7
}
(-)a/installer/data/mysql/atomicupdate/bug_19532-add_recalls_notices.perl (+36 lines)
Line 0 Link Here
1
$DBversion = 'XXX';
2
if( CheckVersion( $DBversion ) ) {
3
    $dbh->do(q{
4
        INSERT IGNORE INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`) VALUES
5
        ('circulation','RETURN_RECALLED_ITEM','','Notification to return a recalled item','0','Notification to return a recalled item','Date: <<today>>
6
7
<<borrowers.firstname>> <<borrowers.surname>>,
8
9
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.
10
11
Thank you!','email'),
12
        ('circulation','PICKUP_RECALLED_ITEM','','Recalled item awaiting pickup','0','Recalled item awaiting pickup','Date: <<today>>
13
14
<<borrowers.firstname>> <<borrowers.surname>>,
15
16
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>>.
17
18
Thank you!','email'),
19
        ('circulation','RECALL_REQUESTER_DET','','Details of patron who recalled item',0,'Details of patron who recalled item','Date: <<today>>
20
21
Recall for pickup at <<branches.branchname>>
22
<<borrowers.surname>>, <<borrowers.firstname>> (<<borrowers.cardnumber>>)
23
<<borrowers.phone>>
24
<<borrowers.streetnumber>> <<borrowers.address>>, <<borrowers.address2>>, <<borrowers.city>> <<borrowers.zipcode>>
25
<<borrowers.email>>
26
27
ITEM RECALLED
28
<<biblio.title>> by <<biblio.author>>
29
Barcode: <<items.barcode>>
30
Callnumber: <<items.itemcallnumber>>
31
Waiting since: <<recalls.waitingdate>>
32
Notes: <<recalls.recallnotes>>', 'print')
33
    });
34
35
    NewVersion( $DBversion, 19532, "Add recalls notices: RETURN_RECALLED_ITEM, PICKUP_RECALLED_ITEM, RECALL_REQUESTER_DET" );
36
}
(-)a/installer/data/mysql/atomicupdate/bug_19532-add_recalls_sysprefs.perl (+11 lines)
Line 0 Link Here
1
$DBversion = 'XXX';
2
if( CheckVersion( $DBversion ) ) {
3
    $dbh->do(q{
4
        INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES
5
        ('RecallsLog','1',NULL,'If ON, log create/cancel/expire/fulfill actions on recalls','YesNo'),
6
        ('RecallsMaxPickUpDelay','7',NULL,'Define the maximum time a recall can be awaiting pickup','Integer'),
7
        ('UseRecalls','0',NULL,'Enable or disable recalls','YesNo')
8
    });
9
10
    NewVersion( $DBversion, 19532, "Add RecallsLog, RecallsMaxPickUpDelay and UseRecalls system preferences");
11
}
(-)a/installer/data/mysql/atomicupdate/bug_19532-add_recalls_table.perl (+34 lines)
Line 0 Link Here
1
$DBversion = 'XXX';
2
if( CheckVersion( $DBversion ) ) {
3
    $dbh->do(q{ DROP TABLE IF EXISTS recalls });
4
    $dbh->do(q{
5
        CREATE TABLE recalls (
6
            recall_id int(11) NOT NULL auto_increment,
7
            borrowernumber int(11) NOT NULL DEFAULT 0,
8
            recalldate datetime DEFAULT NULL,
9
            biblionumber int(11) NOT NULL DEFAULT 0,
10
            branchcode varchar(10) DEFAULT NULL,
11
            cancellationdate datetime DEFAULT NULL,
12
            recallnotes mediumtext,
13
            priority smallint(6) DEFAULT NULL,
14
            status varchar(1) DEFAULT NULL,
15
            timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
16
            itemnumber int(11) DEFAULT NULL,
17
            waitingdate datetime DEFAULT NULL,
18
            expirationdate datetime DEFAULT NULL,
19
            old TINYINT(1) DEFAULT NULL,
20
            item_level_recall TINYINT(1) NOT NULL DEFAULT 0,
21
            PRIMARY KEY (recall_id),
22
            KEY borrowernumber (borrowernumber),
23
            KEY biblionumber (biblionumber),
24
            KEY itemnumber (itemnumber),
25
            KEY branchcode (branchcode),
26
            CONSTRAINT recalls_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE,
27
            CONSTRAINT recalls_ibfk_2 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE,
28
            CONSTRAINT recalls_ibfk_3 FOREIGN KEY (itemnumber) REFERENCES items (itemnumber) ON DELETE CASCADE ON UPDATE CASCADE,
29
            CONSTRAINT recalls_ibfk_4 FOREIGN KEY (branchcode) REFERENCES branches (branchcode) ON DELETE CASCADE ON UPDATE CASCADE
30
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
31
    });
32
33
    NewVersion( $DBversion, 19532, "Add recalls table" );
34
}
(-)a/installer/data/mysql/en/mandatory/sample_notices.yml (+58 lines)
Lines 1545-1547 tables: Link Here
1545
            - "This item must be renewed at the library."
1545
            - "This item must be renewed at the library."
1546
            - "[% END %]"
1546
            - "[% END %]"
1547
            - "[% END %]"
1547
            - "[% END %]"
1548
1549
        - module: circulation
1550
          code: RETURN_RECALLED_ITEM
1551
          branchcode: ""
1552
          name: "Notification to return a recalled item"
1553
          is_html: 0
1554
          title: "Notification to return a recalled item"
1555
          message_transport_type: email
1556
          lang: default
1557
          content:
1558
            - "Date: <<today>>"
1559
            - ""
1560
            - "<<borrowers.firstname>> <<borrowers.surname>>,"
1561
            - ""
1562
            - "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."
1563
            - ""
1564
            - "Thank you!"
1565
1566
        - module: circulation
1567
          code: PICKUP_RECALLED_ITEM
1568
          branchcode: ""
1569
          name: "Recalled item awaiting pickup"
1570
          is_html: 0
1571
          title: "Recalled item awaiting pickup"
1572
          message_transport_type: email
1573
          lang: default
1574
          content:
1575
            - "Date: <<today>>"
1576
            - ""
1577
            - "<<borrowers.firstname>> <<borrowers.surname>>,"
1578
            - ""
1579
            - "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>>."
1580
            - ""
1581
            - "Thank you!"
1582
1583
        - module: circulation
1584
          code: RECALL_REQUESTER_DET
1585
          branchcode: ""
1586
          name: "Details of patron who recalled item"
1587
          is_html: 0
1588
          title: "Details of patron who recalled item"
1589
          message_transport_type: print
1590
          lang: default
1591
          content:
1592
            - "Date: <<today>>"
1593
            - ""
1594
            - "Recall for pickup at <<branches.branchname>>"
1595
            - "<<borrowers.surname>>, <<borrowers.firstname>> (<<borrowers.cardnumber>>)"
1596
            - "<<borrowers.phone>>"
1597
            - "<<borrowers.streetnumber>> <<borrowers.address>>, <<borrowers.address2>>, <<borrowers.city>> <<borrowers.zipcode>>"
1598
            - "<<borrowers.email>>"
1599
            - ""
1600
            - "ITEM RECALLED"
1601
            - "<<biblio.title>> by <<biblio.author>>"
1602
            - "Barcode: <<items.barcode>>"
1603
            - "Callnumber: <<items.itemcallnumber>>"
1604
            - "Waiting since: <<recalls.waitingdate>>"
1605
            - "Notes: <<recalls.recallnotes>>"
(-)a/installer/data/mysql/fr-CA/obligatoire/sample_notices.sql (-1 / +29 lines)
Lines 99-105 INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title` Link Here
99
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n\r\n\r\nMerci.', 'email'),
99
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n\r\n\r\nMerci.', 'email'),
100
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n', 'print'),
100
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n', 'print'),
101
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n\r\nMerci.', 'email'),
101
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n\r\nMerci.', 'email'),
102
('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');
102
('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'),
103
('circulation','RETURN_RECALLED_ITEM','','Notification to return a recalled item','0','Notification to return a recalled item','Date: <<today>>
104
105
<<borrowers.firstname>> <<borrowers.surname>>,
106
107
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.
108
109
Thank you!','email'),
110
('circulation','PICKUP_RECALLED_ITEM','','Recalled item awaiting pickup','0','Recalled item awaiting pickup','Date: <<today>>
111
112
<<borrowers.firstname>> <<borrowers.surname>>,
113
114
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>>.
115
116
Thank you!','email'),
117
('circulation','RECALL_REQUESTER_DET','','Details of patron who recalled item',0,'Date: <<today>>
118
119
Recall for pickup at <<branches.branchname>>
120
<<borrowers.surname>>, <<borrowers.firstname>> (<<borrowers.cardnumber>>)
121
<<borrowers.phone>>
122
<<borrowers.streetnumber>> <<borrowers.address>>, <<borrowers.address2>>, <<borrowers.city>> <<borrowers.zipcode>>
123
<<borrowers.email>>
124
125
ITEM RECALLED
126
<<biblio.title>> by <<biblio.author>>
127
Barcode: <<items.barcode>>
128
Callnumber: <<items.itemcallnumber>>
129
Waiting since: <<recalls.waitingdate>>
130
Notes: <<recalls.recallnotes>>', 'print');
103
131
104
INSERT INTO `letter` (module, code, branchcode, name, is_html, title, content, message_transport_type)
132
INSERT INTO `letter` (module, code, branchcode, name, is_html, title, content, message_transport_type)
105
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'),
133
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'),
(-)a/installer/data/mysql/fr-FR/1-Obligatoire/sample_notices.sql (-1 / +29 lines)
Lines 216-222 INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title` Link Here
216
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n\r\n\r\nThank you!', 'email'),
216
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n\r\n\r\nThank you!', 'email'),
217
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n', 'print'),
217
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n', 'print'),
218
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n\r\nThank you!', 'email'),
218
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n\r\nThank you!', 'email'),
219
('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');
219
('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'),
220
('circulation','RETURN_RECALLED_ITEM','','Notification to return a recalled item','0','Notification to return a recalled item','Date: <<today>>
221
222
<<borrowers.firstname>> <<borrowers.surname>>,
223
224
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.
225
226
Thank you!','email'),
227
('circulation','PICKUP_RECALLED_ITEM','','Recalled item awaiting pickup','0','Recalled item awaiting pickup','Date: <<today>>
228
229
<<borrowers.firstname>> <<borrowers.surname>>,
230
231
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>>.
232
233
Thank you!','email'),
234
('circulation','RECALL_REQUESTER_DET','','Details of patron who recalled item',0,'Date: <<today>>
235
236
Recall for pickup at <<branches.branchname>>
237
<<borrowers.surname>>, <<borrowers.firstname>> (<<borrowers.cardnumber>>)
238
<<borrowers.phone>>
239
<<borrowers.streetnumber>> <<borrowers.address>>, <<borrowers.address2>>, <<borrowers.city>> <<borrowers.zipcode>>
240
<<borrowers.email>>
241
242
ITEM RECALLED
243
<<biblio.title>> by <<biblio.author>>
244
Barcode: <<items.barcode>>
245
Callnumber: <<items.itemcallnumber>>
246
Waiting since: <<recalls.waitingdate>>
247
Notes: <<recalls.recallnotes>>', 'print');
220
248
221
INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`) VALUES
249
INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`) VALUES
222
('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'),
250
('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'),
(-)a/installer/data/mysql/kohastructure.sql (-2 / +34 lines)
Lines 1534-1541 CREATE TABLE `branchtransfers` ( Link Here
1534
  `datecancelled` datetime DEFAULT NULL COMMENT 'the date the transfer was cancelled',
1534
  `datecancelled` datetime DEFAULT NULL COMMENT 'the date the transfer was cancelled',
1535
  `tobranch` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'the branch the transfer was going to',
1535
  `tobranch` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'the branch the transfer was going to',
1536
  `comments` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'any comments related to the transfer',
1536
  `comments` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'any comments related to the transfer',
1537
  `reason` enum('Manual','StockrotationAdvance','StockrotationRepatriation','ReturnToHome','ReturnToHolding','RotatingCollection','Reserve','LostReserve','CancelReserve','TransferCancellation') COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'what triggered the transfer',
1537
  `reason` enum('Manual','StockrotationAdvance','StockrotationRepatriation','ReturnToHome','ReturnToHolding','RotatingCollection','Reserve','LostReserve','CancelReserve','TransferCancellation','Recall','CancelRecall') COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'what triggered the transfer',
1538
  `cancellation_reason` enum('Manual','StockrotationAdvance','StockrotationRepatriation','ReturnToHome','ReturnToHolding','RotatingCollection','Reserve','LostReserve','CancelReserve','ItemLost', 'WrongTransfer') COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'what triggered the transfer cancellation',
1538
  `cancellation_reason` enum('Manual','StockrotationAdvance','StockrotationRepatriation','ReturnToHome','ReturnToHolding','RotatingCollection','Reserve','LostReserve','CancelReserve','ItemLost', 'WrongTransfer','Recall','CancelRecall') COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'what triggered the transfer cancellation',
1539
  PRIMARY KEY (`branchtransfer_id`),
1539
  PRIMARY KEY (`branchtransfer_id`),
1540
  KEY `frombranch` (`frombranch`),
1540
  KEY `frombranch` (`frombranch`),
1541
  KEY `tobranch` (`tobranch`),
1541
  KEY `tobranch` (`tobranch`),
Lines 4260-4265 CREATE TABLE `ratings` ( Link Here
4260
/*!40101 SET character_set_client = @saved_cs_client */;
4260
/*!40101 SET character_set_client = @saved_cs_client */;
4261
4261
4262
--
4262
--
4263
-- Table structure for table `recalls`
4264
--
4265
4266
DROP TABLE IF EXISTS recalls;
4267
CREATE TABLE recalls ( -- information related to recalls in Koha
4268
    recall_id int(11) NOT NULL auto_increment, -- primary key
4269
    borrowernumber int(11) NOT NULL DEFAULT 0, -- foreign key from the borrowers table defining which patron requested a recall
4270
    recalldate datetime DEFAULT NULL, -- the date the recall request was placed
4271
    biblionumber int(11) NOT NULL DEFAULT 0, -- foreign key from the biblio table defining which bib record this request is for
4272
    branchcode varchar(10) DEFAULT NULL, -- foreign key from the branches table defining which branch the patron wishes to pick up their recall from
4273
    cancellationdate datetime DEFAULT NULL, -- the date this recall was cancelled
4274
    recallnotes mediumtext, -- notes related to this recall
4275
    priority smallint(6) DEFAULT NULL, -- where in the queue the patron sits
4276
    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
4277
    timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- the date and time this recall was last updated
4278
    itemnumber int(11) DEFAULT NULL, -- foreign key from the items table defining the specific item the recall request was placed on
4279
    waitingdate datetime DEFAULT NULL, -- the date the item was marked as waiting for the patron at the library
4280
    expirationdate datetime DEFAULT NULL, -- the date the recall expires
4281
    old TINYINT(1) DEFAULT NULL, -- flag if the recall is old and no longer active, i.e. expired, cancelled or completed
4282
    item_level_recall TINYINT(1) NOT NULL DEFAULT 0, -- flag if item-level recall
4283
     PRIMARY KEY (recall_id),
4284
     KEY borrowernumber (borrowernumber),
4285
     KEY biblionumber (biblionumber),
4286
     KEY itemnumber (itemnumber),
4287
     KEY branchcode (branchcode),
4288
     CONSTRAINT recalls_ibfk_1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE,
4289
     CONSTRAINT recalls_ibfk_2 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE,
4290
     CONSTRAINT recalls_ibfk_3 FOREIGN KEY (itemnumber) REFERENCES items (itemnumber) ON DELETE CASCADE ON UPDATE CASCADE,
4291
     CONSTRAINT recalls_ibfk_4 FOREIGN KEY (branchcode) REFERENCES branches (branchcode) ON DELETE CASCADE ON UPDATE CASCADE
4292
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
4293
4294
--
4263
-- Table structure for table `repeatable_holidays`
4295
-- Table structure for table `repeatable_holidays`
4264
--
4296
--
4265
4297
(-)a/installer/data/mysql/mandatory/sysprefs.sql (-1 / +3 lines)
Lines 548-554 INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` Link Here
548
('QueryWeightFields','1',NULL,'If ON, enables field weighting','YesNo'),
548
('QueryWeightFields','1',NULL,'If ON, enables field weighting','YesNo'),
549
('QuoteOfTheDay','','intranet,opac','Enable or disable display of Quote of the Day on the OPAC and staff interface home page','multiple'),
549
('QuoteOfTheDay','','intranet,opac','Enable or disable display of Quote of the Day on the OPAC and staff interface home page','multiple'),
550
('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'),
550
('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'),
551
('RecordStaffUserOnCheckout','0',NULL,'If ON, when an item is checked out, the user who checked out the item is recorded','YesNo'),
551
('RecallsLog','1',NULL,'If ON, log create/cancel/expire/fulfill actions on recalls','YesNo'),
552
('RecallsMaxPickUpDelay','7',NULL,'Define the maximum time a recall can be awaiting pickup','Integer'),
552
('RecordLocalUseOnReturn','0',NULL,'If ON, statistically record returns of unissued items as local use, instead of return','YesNo'),
553
('RecordLocalUseOnReturn','0',NULL,'If ON, statistically record returns of unissued items as local use, instead of return','YesNo'),
553
('Reference_NFL_Statuses','1|2',NULL,'Contains not for loan statuses considered as available for reference','Free'),
554
('Reference_NFL_Statuses','1|2',NULL,'Contains not for loan statuses considered as available for reference','Free'),
554
('RefundLostOnReturnControl','CheckinLibrary','CheckinLibrary|ItemHomeBranch|ItemHoldingBranch','If a lost item is returned, choose which branch to pick rules for refunding.','Choice'),
555
('RefundLostOnReturnControl','CheckinLibrary','CheckinLibrary|ItemHomeBranch|ItemHoldingBranch','If a lost item is returned, choose which branch to pick rules for refunding.','Choice'),
Lines 718-723 INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` Link Here
718
('useDischarge','0','','Allows librarians to discharge borrowers and borrowers to request a discharge','YesNo'),
719
('useDischarge','0','','Allows librarians to discharge borrowers and borrowers to request a discharge','YesNo'),
719
('UseEmailReceipts','0','','Send email receipts for payments and write-offs','YesNo'),
720
('UseEmailReceipts','0','','Send email receipts for payments and write-offs','YesNo'),
720
('UseICUStyleQuotes','0','1','Tell Koha whether to use ICU style quotes ({) or default (") when tracing subjects .','YesNo'),
721
('UseICUStyleQuotes','0','1','Tell Koha whether to use ICU style quotes ({) or default (") when tracing subjects .','YesNo'),
722
('UseRecalls','0',NULL,'Enable or disable recalls','YesNo'),
721
('UseTransportCostMatrix','0','','Use Transport Cost Matrix when filling holds','YesNo'),
723
('UseTransportCostMatrix','0','','Use Transport Cost Matrix when filling holds','YesNo'),
722
('UseWYSIWYGinSystemPreferences','0','','Show WYSIWYG editor when editing certain HTML system preferences.','YesNo'),
724
('UseWYSIWYGinSystemPreferences','0','','Show WYSIWYG editor when editing certain HTML system preferences.','YesNo'),
723
('viewISBD','1','','Allow display of ISBD view of bibiographic records','YesNo'),
725
('viewISBD','1','','Allow display of ISBD view of bibiographic records','YesNo'),
(-)a/installer/data/mysql/mandatory/userflags.sql (-1 / +2 lines)
Lines 23-27 INSERT INTO userflags (bit, flag, flagdesc, defaulton) VALUES Link Here
23
(23,'self_check','Self check modules',0),
23
(23,'self_check','Self check modules',0),
24
(24, 'stockrotation', 'Manage stockrotation operations', 0),
24
(24, 'stockrotation', 'Manage stockrotation operations', 0),
25
(25, 'cash_management', 'Cash management', 0),
25
(25, 'cash_management', 'Cash management', 0),
26
(26, 'problem_reports', 'Manage problem reports', 0)
26
(26, 'problem_reports', 'Manage problem reports', 0),
27
(27, 'recalls', 'Recalls', 0)
27
;
28
;
(-)a/installer/data/mysql/mandatory/userpermissions.sql (-1 / +2 lines)
Lines 136-140 INSERT INTO permissions (module_bit, code, description) VALUES Link Here
136
   (25, 'anonymous_refund', 'Perform refund actions from cash registers'),
136
   (25, 'anonymous_refund', 'Perform refund actions from cash registers'),
137
   (25, 'cashup', 'Perform cash register cashup action'),
137
   (25, 'cashup', 'Perform cash register cashup action'),
138
   (25, 'takepayment', 'Access the point of sale page and take payments'),
138
   (25, 'takepayment', 'Access the point of sale page and take payments'),
139
   (26, 'manage_problem_reports', 'Manage OPAC problem reports')
139
   (26, 'manage_problem_reports', 'Manage OPAC problem reports'),
140
   (27, 'manage_recalls', 'Manage recalls for patrons')
140
;
141
;
(-)a/installer/data/mysql/nb-NO/1-Obligatorisk/sample_notices.sql (-1 / +29 lines)
Lines 234-240 INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title` Link Here
234
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n\r\n\r\nThank you!', 'email'),
234
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n\r\n\r\nThank you!', 'email'),
235
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n', 'print'),
235
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n', 'print'),
236
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n\r\nThank you!', 'email'),
236
('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\nFormat: [% IF article_request.format == \'PHOTOCOPY\' %]Copy[% ELSIF article_request.format == \'SCAN\' %]Scan[% END %]\r\n\r\nThank you!', 'email'),
237
('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');
237
('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'),
238
('circulation','RETURN_RECALLED_ITEM','','Notification to return a recalled item','0','Notification to return a recalled item','Date: <<today>>
239
240
<<borrowers.firstname>> <<borrowers.surname>>,
241
242
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.
243
244
Thank you!','email'),
245
('circulation','PICKUP_RECALLED_ITEM','','Recalled item awaiting pickup','0','Recalled item awaiting pickup','Date: <<today>>
246
247
<<borrowers.firstname>> <<borrowers.surname>>,
248
249
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>>.
250
251
Thank you!','email'),
252
('circulation','RECALL_REQUESTER_DET','','Details of patron who recalled item',0,'Date: <<today>>
253
254
Recall for pickup at <<branches.branchname>>
255
<<borrowers.surname>>, <<borrowers.firstname>> (<<borrowers.cardnumber>>)
256
<<borrowers.phone>>
257
<<borrowers.streetnumber>> <<borrowers.address>>, <<borrowers.address2>>, <<borrowers.city>> <<borrowers.zipcode>>
258
<<borrowers.email>>
259
260
ITEM RECALLED
261
<<biblio.title>> by <<biblio.author>>
262
Barcode: <<items.barcode>>
263
Callnumber: <<items.itemcallnumber>>
264
Waiting since: <<recalls.waitingdate>>
265
Notes: <<recalls.recallnotes>>', 'print');
238
266
239
INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`) VALUES
267
INSERT INTO `letter` (`module`, `code`, `branchcode`, `name`, `is_html`, `title`, `content`, `message_transport_type`, `lang`) VALUES
240
('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'),
268
('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'),
(-)a/installer/onboarding.pl (+6 lines)
Lines 288-293 if ( $step == 5 ) { Link Here
288
                reservesallowed                  => $reservesallowed,
288
                reservesallowed                  => $reservesallowed,
289
                suspension_chargeperiod          => undef,
289
                suspension_chargeperiod          => undef,
290
                decreaseloanholds                => undef,
290
                decreaseloanholds                => undef,
291
                recalls_allowed                  => undef,
292
                recalls_per_record               => undef,
293
                on_shelf_recalls                 => undef,
294
                recall_due_date_interval         => undef,
295
                recall_overdue_fine              => undef,
296
                recall_shelf_time                => undef,
291
              }
297
              }
292
        };
298
        };
293
299
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/permissions.inc (+9 lines)
Lines 75-80 Link Here
75
    [%- CASE 'problem_reports' -%]
75
    [%- CASE 'problem_reports' -%]
76
        <span class="main_permission problem_reports_permission">OPAC problem reports management</span>
76
        <span class="main_permission problem_reports_permission">OPAC problem reports management</span>
77
        <span class="permissioncode">([% name | html %])</span>
77
        <span class="permissioncode">([% name | html %])</span>
78
    [%- CASE 'recalls' -%]
79
        <span class="main_permission recalls_permission">Recalls</span>
80
        <span class="permissioncode">([% name | html %])</span>
78
    [%- END -%]
81
    [%- END -%]
79
[%- END -%]
82
[%- END -%]
80
83
Lines 778-782 Link Here
778
            Manage OPAC problem reports
781
            Manage OPAC problem reports
779
        </span>
782
        </span>
780
        <span class="permissioncode">([% name | html %])</span>
783
        <span class="permissioncode">([% name | html %])</span>
784
  [%# recalls %]
785
    [%- CASE 'manage_recalls' -%]
786
        <span class="sub_permission place_recalls_subpermission">
787
            Manage recalls for patrons
788
        </span>
789
        <span class="permissioncode">([% name | html %])</span>
781
  [%- END -%]
790
  [%- END -%]
782
[%- END -%]
791
[%- END -%]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref (+12 lines)
Lines 1264-1266 Circulation: Link Here
1264
            - pref: ClaimReturnedWarningThreshold
1264
            - pref: ClaimReturnedWarningThreshold
1265
              class: integer
1265
              class: integer
1266
            - items.
1266
            - items.
1267
    Recalls:
1268
        -
1269
            - Mark a recall as problematic if it has been waiting to be picked up for
1270
            - pref: RecallsMaxPickUpDelay
1271
            - class: integer
1272
            - days.
1273
        -
1274
            - pref: UseRecalls
1275
              choices:
1276
                  yes: Use
1277
                  no: "Don't use"
1278
            - recalls. Make sure you configure <a href="/cgi-bin/koha/admin/smart-rules.pl">circulation and fines rules</a> for recalls once enabled.
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/logs.pref (+7 lines)
Lines 108-113 Logging: Link Here
108
                  on: Log
108
                  on: Log
109
                  off: "Don't log"
109
                  off: "Don't log"
110
            - " changes to news entries and other contents managed in the news tool."
110
            - " changes to news entries and other contents managed in the news tool."
111
        -
112
            - pref: RecallsLog
113
              choices:
114
                  on: Log
115
                  off: "Don't log"
116
            - any actions on recalls (create, cancel, expire, fulfill).
117
111
    Debugging:
118
    Debugging:
112
        -
119
        -
113
            - pref: DumpTemplateVarsIntranet
120
            - pref: DumpTemplateVarsIntranet
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt (-2 / +50 lines)
Lines 142-147 Link Here
142
                <th>OPAC item level holds</th>
142
                <th>OPAC item level holds</th>
143
                <th>Article requests</th>
143
                <th>Article requests</th>
144
                <th>Rental discount (%)</th>
144
                <th>Rental discount (%)</th>
145
                [% IF Koha.Preference('UseRecalls') %]
146
                    <th>Recalls allowed (total)</th>
147
                    <th>Recalls per record (count)</th>
148
                    <th>On shelf recalls allowed</th>
149
                    <th>Recall due date interval (day)</th>
150
                    <th>Recall overdue fine amount</th>
151
                    <th>Recall pickup period (day)</th>
152
                [% END %]
145
                <th class="noExport">Actions</th>
153
                <th class="noExport">Actions</th>
146
            </tr>
154
            </tr>
147
            </thead>
155
            </thead>
Lines 183-190 Link Here
183
                        [% SET article_requests = all_rules.$c.$i.article_requests %]
191
                        [% SET article_requests = all_rules.$c.$i.article_requests %]
184
                        [% SET rentaldiscount = all_rules.$c.$i.rentaldiscount %]
192
                        [% SET rentaldiscount = all_rules.$c.$i.rentaldiscount %]
185
                        [% SET decreaseloanholds = all_rules.$c.$i.decreaseloanholds %]
193
                        [% SET decreaseloanholds = all_rules.$c.$i.decreaseloanholds %]
194
                        [% SET recalls_allowed = all_rules.$c.$i.recalls_allowed %]
195
                        [% SET recalls_per_record = all_rules.$c.$i.recalls_per_record %]
196
                        [% SET on_shelf_recalls = all_rules.$c.$i.on_shelf_recalls %]
197
                        [% SET recall_due_date_interval = all_rules.$c.$i.recall_due_date_interval %]
198
                        [% SET recall_overdue_fine = all_rules.$c.$i.recall_overdue_fine %]
199
                        [% SET recall_shelf_time = all_rules.$c.$i.recall_shelf_time %]
186
200
187
                        [% SET show_rule = note || maxissueqty || maxonsiteissueqty || issuelength || daysmode || lengthunit || hardduedate || hardduedatecompare || fine || chargeperiod || chargeperiod_charge_at || firstremind || overduefinescap || cap_fine_to_replacement_price || finedays || maxsuspensiondays || suspension_chargeperiod || renewalsallowed || unseenrenewalsallowed || renewalperiod || norenewalbefore || auto_renew || no_auto_renewal_after || no_auto_renewal_after_hard_limit || reservesallowed || holds_per_day || holds_per_record || onshelfholds || opacitemholds || article_requests || rentaldiscount || decreaseloanholds %]
201
                        [% SET show_rule = note || maxissueqty || maxonsiteissueqty || issuelength || daysmode || lengthunit || hardduedate || hardduedatecompare || fine || chargeperiod || chargeperiod_charge_at || firstremind || overduefinescap || cap_fine_to_replacement_price || finedays || maxsuspensiondays || suspension_chargeperiod || renewalsallowed || unseenrenewalsallowed || renewalperiod || norenewalbefore || auto_renew || no_auto_renewal_after || no_auto_renewal_after_hard_limit || reservesallowed || holds_per_day || holds_per_record || onshelfholds || opacitemholds || article_requests || rentaldiscount || decreaseloanholds || recalls_allowed || recalls_per_record || on_shelf_recalls || recall_due_date_interval || recall_overdue_fine || recall_shelf_time %]
188
                        [% IF show_rule %]
202
                        [% IF show_rule %]
189
                            [% SET row_count = row_count + 1 %]
203
                            [% SET row_count = row_count + 1 %]
190
                            <tr row_countd="row_[% row_count | html %]">
204
                            <tr row_countd="row_[% row_count | html %]">
Lines 344-349 Link Here
344
                                        [% END %]
358
                                        [% END %]
345
                                    </td>
359
                                    </td>
346
                                    <td>[% rentaldiscount | html %]</td>
360
                                    <td>[% rentaldiscount | html %]</td>
361
                                    [% IF Koha.Preference('UseRecalls') %]
362
                                        <td>[% recalls_allowed | html %]</td>
363
                                        <td>[% recalls_per_record | html %]</td>
364
                                        <td>
365
                                            [% IF on_shelf_recalls == 'all' %]
366
                                                <span>If all unavailable</span>
367
                                            [% ELSE %]
368
                                                <span>If any unavailable</span>
369
                                            [% END %]
370
                                        </td>
371
                                        <td>[% recall_due_date_interval | html %]</td>
372
                                        <td>[% recall_overdue_fine FILTER format("%.2f") %]</td>
373
                                        <td>[% recall_shelf_time | html %]</td>
374
                                    [% END %]
347
                                    <td class="actions">
375
                                    <td class="actions">
348
                                      <a href="#" class="editrule btn btn-default btn-xs"><i class="fa fa-pencil"></i> Edit</a>
376
                                      <a href="#" class="editrule btn btn-default btn-xs"><i class="fa fa-pencil"></i> Edit</a>
349
                                      <a class="btn btn-default btn-xs delete" href="/cgi-bin/koha/admin/smart-rules.pl?op=delete&amp;itemtype=[% i || '*' | uri %]&amp;categorycode=[% c || '*' | uri %]&amp;branch=[% current_branch | uri %]"><i class="fa fa-trash"></i> Delete</a>
377
                                      <a class="btn btn-default btn-xs delete" href="/cgi-bin/koha/admin/smart-rules.pl?op=delete&amp;itemtype=[% i || '*' | uri %]&amp;categorycode=[% c || '*' | uri %]&amp;branch=[% current_branch | uri %]"><i class="fa fa-trash"></i> Delete</a>
Lines 473-478 Link Here
473
                        </select>
501
                        </select>
474
                    </td>
502
                    </td>
475
                    <td><input type="text" name="rentaldiscount" id="rentaldiscount" size="2" /></td>
503
                    <td><input type="text" name="rentaldiscount" id="rentaldiscount" size="2" /></td>
504
                    [% IF Koha.Preference('UseRecalls') %]
505
                        <td><input type="text" name="recalls_allowed" id="recalls_allowed" size="3"></td>
506
                        <td><input type="text" name="recalls_per_record" id="recalls_per_record" size="3"></td>
507
                        <td>
508
                            <select name="on_shelf_recalls" id="on_shelf_recalls">
509
                                <option value="any">If any unavailable</option>
510
                                <option value="all">If all unavailable</option>
511
                            </select>
512
                        </td>
513
                        <td><input type="text" name="recall_due_date_interval" id="recall_due_date_interval" size="3"></td>
514
                        <td><input type="text" name="recall_overdue_fine" id="recall_overdue_fine" size="6"></td>
515
                        <td><input type="text" name="recall_shelf_time" id="recall_shelf_time" size="3"></td>
516
                    [% END %]
476
                    <td class="actions">
517
                    <td class="actions">
477
                        <input type="hidden" name="branch" value="[% current_branch | html %]"/>
518
                        <input type="hidden" name="branch" value="[% current_branch | html %]"/>
478
                        <button type="submit" class="btn btn-default btn-xs"><i class="fa fa-save"></i> Save</button>
519
                        <button type="submit" class="btn btn-default btn-xs"><i class="fa fa-save"></i> Save</button>
Lines 519-524 Link Here
519
                      <th>OPAC item level holds</th>
560
                      <th>OPAC item level holds</th>
520
                      <th>Article requests</th>
561
                      <th>Article requests</th>
521
                      <th>Rental discount (%)</th>
562
                      <th>Rental discount (%)</th>
563
                      [% IF Koha.Preference('UseRecalls') %]
564
                        <th>Recalls allowed (total)</th>
565
                        <th>Recalls per record (count)</th>
566
                        <th>On shelf recalls allowed</th>
567
                        <th>Recall due date interval (day)</th>
568
                        <th>Recall overdue fine amount</th>
569
                        <th>Recall pickup period (day)</th>
570
                      [% END %]
522
                      <th>&nbsp;</th>
571
                      <th>&nbsp;</th>
523
                    </tr>
572
                    </tr>
524
                  </tfoot>
573
                  </tfoot>
525
- 

Return to bug 19532