From 0bc88050ca6946df8202bfead2f16fa1ac9998c5 Mon Sep 17 00:00:00 2001
From: Aleisha Amohia
Date: Fri, 18 Sep 2020 11:58:05 +1200
Subject: [PATCH] Bug 12224: Print a slip of borrower's checkins for today
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
To test:
1) Apply patch and run installer
2) Check out two items (or more) to a borrower
3) Check in two items (or more) for this borrower (you should end up on
circ/returns.pl)
4) Notice the checked-in items table has started building. There should
be a new column with the button 'Print checkin slip' in each row.
5) Click the button and confirm the checkin slip opens for printing in a
new window.
6) Go to the patron's account
7) Click the Print dropdown. Confirm there is a 'Print checkin slip'
option. Click this and confirm the checkin slip opens for printing in a
new window.
Sponsored-by: Bibliotheksservice-Zentrum Baden-Württemberg (BSZ)
Signed-off-by: Owen Leonard
Signed-off-by: David Nind
Signed-off-by: Alexandra Speer
Signed-off-by: Katrin Fischer
---
.../bug_12224-add_CHECKINSLIP_notice.perl | 22 +++++++++++
.../data/mysql/de-DE/mandatory/sample_notices.sql | 17 +++++++-
.../data/mysql/en/mandatory/sample_notices.yml | 23 +++++++++++
.../mysql/fr-CA/obligatoire/sample_notices.sql | 15 ++++++-
.../mysql/fr-FR/1-Obligatoire/sample_notices.sql | 17 +++++++-
installer/data/mysql/it-IT/necessari/notices.sql | 17 +++++++-
.../mysql/nb-NO/1-Obligatorisk/sample_notices.sql | 17 +++++++-
.../data/mysql/pl-PL/mandatory/sample_notices.sql | 17 +++++++-
.../data/mysql/ru-RU/mandatory/sample_notices.sql | 17 +++++++-
.../data/mysql/uk-UA/mandatory/sample_notices.sql | 17 +++++++-
.../prog/en/includes/members-toolbar.inc | 1 +
.../intranet-tmpl/prog/en/modules/circ/returns.tt | 11 ++++++
koha-tmpl/intranet-tmpl/prog/js/members-menu.js | 5 +++
members/printslip.pl | 46 +++++++++++++++++++++-
14 files changed, 233 insertions(+), 9 deletions(-)
create mode 100644 installer/data/mysql/atomicupdate/bug_12224-add_CHECKINSLIP_notice.perl
diff --git a/installer/data/mysql/atomicupdate/bug_12224-add_CHECKINSLIP_notice.perl b/installer/data/mysql/atomicupdate/bug_12224-add_CHECKINSLIP_notice.perl
new file mode 100644
index 0000000000..fc33a72771
--- /dev/null
+++ b/installer/data/mysql/atomicupdate/bug_12224-add_CHECKINSLIP_notice.perl
@@ -0,0 +1,22 @@
+$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','CHECKINSLIP','','Checkin slip',1,'Checkin slip',
+"<>
+Checked in items for <> <> <> <>
+(<>)
+
+<>
+
+Checked in today
+
+
+<>
+Barcode: <>
+
+",
+ 'print')
+ });
+
+ NewVersion( $DBversion, 12224, "Add CHECKINSLIP notice" );
+}
diff --git a/installer/data/mysql/de-DE/mandatory/sample_notices.sql b/installer/data/mysql/de-DE/mandatory/sample_notices.sql
index 0bf9d28c5d..c5c78823e9 100644
--- a/installer/data/mysql/de-DE/mandatory/sample_notices.sql
+++ b/installer/data/mysql/de-DE/mandatory/sample_notices.sql
@@ -48,7 +48,22 @@ VALUES ('suggestions','NEW_SUGGESTION','Neuer Anschaffungsvorschlag','Neuer Ansc
Grund für den Vorschlag: <>
Notiz: <>
-
',1, 'email');
+ ',1, 'email'),
+ ('circulation','CHECKINSLIP','Checkin slip','Checkin slip',
+ "<>
+ Checked in items for <> <> <> <>
+ (<>)
+
+ <>
+
+ Checked in today
+
+
+ <>
+ Barcode: <>
+
+ ",1,'print');
+
INSERT INTO `letter` (module, code, name, title, content, is_html, message_transport_type)
VALUES ('members', 'DISCHARGE', 'Entlastung', 'Entlastung für <> <>', '
<>
diff --git a/installer/data/mysql/en/mandatory/sample_notices.yml b/installer/data/mysql/en/mandatory/sample_notices.yml
index 50bb421386..82e40a4027 100644
--- a/installer/data/mysql/en/mandatory/sample_notices.yml
+++ b/installer/data/mysql/en/mandatory/sample_notices.yml
@@ -1221,3 +1221,26 @@ tables:
- "[%- USE AuthorisedValues -%]"
- "Dear [% borrower.firstname %] [% borrower.surname %],"
- "Your hold for [% biblio.title %] was canceled for the following reason: [% AuthorisedValues.GetByCode( 'HOLD_CANCELLATION', hold.cancellation_reason ) %]"
+
+ - module: circulation
+ code: CHECKINSLIP
+ branchcode: ""
+ name: "Checkin slip"
+ is_html: 1
+ title: "Checkin slip"
+ message_transport_type: print
+ lang: default
+ content:
+ - "<>
"
+ - "Checked in items for <> <> <> <>
"
+ - "(<>)
"
+ - ""
+ - "<>
"
+ - ""
+ - "Checked in today
"
+ - ""
+ - ""
+ - "<>
"
+ - "Barcode: <>
"
+ - "
"
+ - ""
diff --git a/installer/data/mysql/fr-CA/obligatoire/sample_notices.sql b/installer/data/mysql/fr-CA/obligatoire/sample_notices.sql
index 1a231dd12e..3242343d3d 100644
--- a/installer/data/mysql/fr-CA/obligatoire/sample_notices.sql
+++ b/installer/data/mysql/fr-CA/obligatoire/sample_notices.sql
@@ -22,7 +22,20 @@ INSERT INTO `letter` (module, code, branchcode, name, is_html, title, content, m
('suggestions','ACCEPTED','','Suggestion d\'achat acceptée',0,'Suggestion d\'achat acceptée','Bonjour <> <>,\r\n\r\nVous nous avez suggéré l\'achat du document <> par <>.\r\n\r\nNous avons évalué votre suggestion aujourdhui. Le document sera commandé dès que possible. Vous serez tenu au courant par courriel quand le document aura été commandé et quand il sera disponible à la bibliothèque.\r\n\r\nPour toute question, veuillez nous contacter à l\'adresse suivante : <>.\r\n\r\nMerci.\r\n\r\n<>','email'),
('suggestions','AVAILABLE','','Suggestion d\'achat disponible',0,'Suggestion d\'achat disponible','Bonjour <> <>,\r\n\r\nVous nous avez suggéré l\'achat du document <> par <>.\r\n\r\nNous avons le plaisir de vous informer que le document fait aujourd\'hui partie de nos collection et qu\'il est disponible à la bibliothèque.\r\n\r\nPour toute question, veuillez nous contacter à l\'adresse suivante : <>.\r\n\r\nMerci.\r\n\r\n<>','email'),
('suggestions','ORDERED','','Suggestion d\'achat commandée',0,'Suggestion d\'achat commandée','Bonjour <> <>,\r\n\r\nVous nous avez suggéré l\'achat du document <> par <>.\r\n\r\nNous avons le plaisir de vous informer que le document a été commandé.\r\n\r\nVous recevrez une nouvelle notification quand le document sera disponible à bibliothèque.\r\n\r\nPour toute question, veuillez nous contacter à l\'adresse suivante : <>.\r\n\r\nMerci.\r\n\r\n<>','email'),
-('suggestions','REJECTED','','Suggestion d\'achat rejetée',0,'Suggestion d\'achat rejetée','Bonjour <> <>,\r\n\r\nVous nous avez suggéré l\'achat du document <> par <>.\r\n\r\nNous avons évalué votre suggestion aujourd\'hui et décidé de ne pas l\'acheter cette fois.\r\n\r\nLa raison de notre refus est : <>\r\n\r\nPour toute question, veuillez nous contacter à l\'adresse suivante : <>.\r\n\r\nMerci.\r\n\r\n<>','email');
+('suggestions','REJECTED','','Suggestion d\'achat rejetée',0,'Suggestion d\'achat rejetée','Bonjour <> <>,\r\n\r\nVous nous avez suggéré l\'achat du document <> par <>.\r\n\r\nNous avons évalué votre suggestion aujourd\'hui et décidé de ne pas l\'acheter cette fois.\r\n\r\nLa raison de notre refus est : <>\r\n\r\nPour toute question, veuillez nous contacter à l\'adresse suivante : <>.\r\n\r\nMerci.\r\n\r\n<>','email'),
+('circulation','CHECKINSLIP','','Checkin slip',1,'Checkin slip',"<>
+Checked in items for <> <> <> <>
+(<>)
+
+<>
+
+Checked in today
+
+
+<>
+Barcode: <>
+
+", 'print');
INSERT INTO `letter` (module, code, name, title, content, is_html, message_transport_type)
VALUES ('suggestions','NEW_SUGGESTION','Nouvelle suggestion','Nouvelle suggestion','Suggestion en attente
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 f844c90b2a..ca17495bf5 100644
--- a/installer/data/mysql/fr-FR/1-Obligatoire/sample_notices.sql
+++ b/installer/data/mysql/fr-FR/1-Obligatoire/sample_notices.sql
@@ -50,7 +50,22 @@ VALUES ('suggestions','NEW_SUGGESTION','New suggestion','New suggestion','Su
Reason for suggestion: <>
Notes: <>
- ',1, 'email');
+ ',1, 'email'),
+ ('circulation','CHECKINSLIP','Checkin slip','Checkin slip',
+ "<>
+ Checked in items for <> <> <> <>
+ (<>)
+
+ <>
+
+ Checked in today
+
+
+ <>
+ Barcode: <>
+
+ ",1, 'print');
+
INSERT INTO `letter` (module, code, name, title, content, is_html)
VALUES ('circulation','ISSUESLIP','Ticket de de prêt','Ticket de prêt', '<>
Prêts à <> <> <> <>
diff --git a/installer/data/mysql/it-IT/necessari/notices.sql b/installer/data/mysql/it-IT/necessari/notices.sql
index 9be907b0b5..434544b2aa 100644
--- a/installer/data/mysql/it-IT/necessari/notices.sql
+++ b/installer/data/mysql/it-IT/necessari/notices.sql
@@ -55,7 +55,22 @@ VALUES ('suggestions','NEW_SUGGESTION','New suggestion','New suggestion','Su
Reason for suggestion: <>
Notes: <>
- ',1, 'email');
+ ',1, 'email'),
+ ('circulation','CHECKINSLIP','Checkin slip','Checkin slip',
+ "<>
+ Checked in items for <> <> <> <>
+ (<>)
+
+ <>
+
+ Checked in today
+
+
+ <>
+ Barcode: <>
+
+ ",1, 'print');
+
INSERT INTO letter (module, code, name, title, content, is_html)
VALUES ('circulation','ISSUESLIP','Ricevuta di prestito','Ricevuta di prestito', '<>
Prestito a <> <> <> <>
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 e3564ffb1d..9003de6e43 100644
--- a/installer/data/mysql/nb-NO/1-Obligatorisk/sample_notices.sql
+++ b/installer/data/mysql/nb-NO/1-Obligatorisk/sample_notices.sql
@@ -70,7 +70,22 @@ VALUES ('suggestions','NEW_SUGGESTION','New suggestion','New suggestion','Su
Reason for suggestion: <>
Notes: <>
- ',1, 'email');
+ ',1, 'email'),
+ ('circulation','CHECKINSLIP','Checkin slip','Checkin slip',
+ "<>
+ Checked in items for <> <> <> <>
+ (<>)
+
+ <>
+
+ Checked in today
+
+
+ <>
+ Barcode: <>
+
+ ",1, 'print');
+
INSERT INTO `letter` (module, code, name, title, content, is_html)
VALUES ('circulation','ISSUESLIP','Utlån','Utlån', '<>
Utlånt til <> <> <> <>
diff --git a/installer/data/mysql/pl-PL/mandatory/sample_notices.sql b/installer/data/mysql/pl-PL/mandatory/sample_notices.sql
index f228b5c68d..66aa99dcde 100644
--- a/installer/data/mysql/pl-PL/mandatory/sample_notices.sql
+++ b/installer/data/mysql/pl-PL/mandatory/sample_notices.sql
@@ -49,7 +49,22 @@ VALUES ('suggestions','NEW_SUGGESTION','New suggestion','New suggestion','Su
Reason for suggestion: <>
Notes: <>
- ',1, 'email');
+ ',1, 'email'),
+ ('circulation','CHECKINSLIP','Checkin slip','Checkin slip',
+ "<>
+ Checked in items for <> <> <> <>
+ (<>)
+
+ <>
+
+ Checked in today
+
+
+ <>
+ Barcode: <>
+
+ ",1, 'print');
+
INSERT INTO `letter` (module, code, name, title, content, is_html)
VALUES ('circulation','ISSUESLIP','Issue slip','Issue slip', '<>
Checked out to <> <> <> <>
diff --git a/installer/data/mysql/ru-RU/mandatory/sample_notices.sql b/installer/data/mysql/ru-RU/mandatory/sample_notices.sql
index 27f002b195..4041680b30 100644
--- a/installer/data/mysql/ru-RU/mandatory/sample_notices.sql
+++ b/installer/data/mysql/ru-RU/mandatory/sample_notices.sql
@@ -48,7 +48,22 @@ VALUES ('suggestions','NEW_SUGGESTION','New suggestion','New suggestion','Su
Reason for suggestion: <>
Notes: <>
- ',1, 'email');
+ ',1, 'email'),
+ ('circulation','CHECKINSLIP','Checkin slip','Checkin slip',
+ "<>
+ Checked in items for <> <> <> <>
+ (<>)
+
+ <>
+
+ Checked in today
+
+
+ <>
+ Barcode: <>
+
+ ",1, 'print');
+
INSERT INTO `letter` (module, code, name, title, content, is_html)
VALUES ('circulation','ISSUESLIP','Issue slip','Issue slip', '<>
Checked out to <> <> <> <>
diff --git a/installer/data/mysql/uk-UA/mandatory/sample_notices.sql b/installer/data/mysql/uk-UA/mandatory/sample_notices.sql
index 17bd9f7606..11308e81f7 100644
--- a/installer/data/mysql/uk-UA/mandatory/sample_notices.sql
+++ b/installer/data/mysql/uk-UA/mandatory/sample_notices.sql
@@ -113,7 +113,22 @@ VALUES ('suggestions','NEW_SUGGESTION','New suggestion','New suggestion','Su
Reason for suggestion: <>
Notes: <>
- ',1, 'email');
+ ',1, 'email'),
+ ('circulation','CHECKINSLIP','Checkin slip','Checkin slip',
+ "<>
+ Checked in items for <> <> <> <>
+ (<>)
+
+ <>
+
+ Checked in today
+
+
+ <>
+ Barcode: <>
+
+ ",1, 'print');
+
INSERT INTO `letter` (module, code, name, title, content, is_html, message_transport_type) VALUES
('members', 'DISCHARGE', 'підтвердження на розрахування',
'Розрахування для відвідувача — <> <>', '
diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc
index bebe5a143c..bb9abf4089 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc
+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc
@@ -27,6 +27,7 @@
[% IF patron.has_overdues %]
Print overdues
[% END %]
+ Print checkin slip
[% END %]
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt
index 1e1ca7d2ff..e313bf3f96 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt
@@ -794,6 +794,7 @@
Collection |
Patron |
Note |
+ |
@@ -876,6 +877,9 @@
[% riloo.itemnotes_nonpublic | html %]
[% END %]
+
+ Print checkin slip
+ |
[% END # /FOREACH riloo %]
@@ -1071,6 +1075,13 @@
}
});
$('[data-toggle="tooltip"]').tooltip();
+
+ $("#printcheckinslip").click(function(){
+ var borrowernumber = $(this).data('borrowernumber');
+ window.open("/cgi-bin/koha/members/printslip.pl?borrowernumber=" + borrowernumber + "&print=checkinslip", "printwindow");
+ return false;
+ });
+
});
[% END %]
diff --git a/koha-tmpl/intranet-tmpl/prog/js/members-menu.js b/koha-tmpl/intranet-tmpl/prog/js/members-menu.js
index f5458cfea4..9be4c7930d 100644
--- a/koha-tmpl/intranet-tmpl/prog/js/members-menu.js
+++ b/koha-tmpl/intranet-tmpl/prog/js/members-menu.js
@@ -71,6 +71,11 @@ $(document).ready(function(){
$(".btn-group").removeClass("open");
return false;
});
+ $("#printcheckinslip").click(function(){
+ printx_window("checkinslip");
+ $(".btn-group").removeClass("open");
+ return false;
+ });
$("#printclearscreen").click(function(){
printx_window("slip");
window.location.replace("/cgi-bin/koha/circ/circulation.pl");
diff --git a/members/printslip.pl b/members/printslip.pl
index e59c625f91..80459e9063 100755
--- a/members/printslip.pl
+++ b/members/printslip.pl
@@ -39,6 +39,7 @@ use C4::Auth qw/:DEFAULT get_session/;
use C4::Output;
use C4::Members;
use C4::Koha;
+use Koha::DateUtils;
#use Smart::Comments;
#use Data::Dumper;
@@ -79,7 +80,50 @@ output_and_exit_if_error( $input, $cookie, $template, { module => 'members', log
my $branch=C4::Context->userenv->{'branch'};
my ($slip, $is_html);
-if (my $letter = IssueSlip ($session->param('branch') || $branch, $borrowernumber, $print eq "qslip")) {
+if ( $print eq 'checkinslip' ) {
+ my $checkinslip_branch = $session->param('branch') ? $session->param('branch') : $branch;
+
+ # get today's checkins
+ my $today_start = dt_from_string->set( hour => 0, minute => 0, second => 0 );
+ my $today_end = dt_from_string->set( hour => 23, minute => 59, second => 0 );
+ $today_start = Koha::Database->new->schema->storage->datetime_parser->format_datetime( $today_start );
+ $today_end = Koha::Database->new->schema->storage->datetime_parser->format_datetime( $today_end );
+ my $todays_checkins = Koha::Old::Checkouts->search({
+ returndate => {
+ '>=' => $today_start,
+ '<=' => $today_end,
+ },
+ borrowernumber => $borrowernumber,
+ branchcode => $checkinslip_branch,
+ });
+
+ my @checkins;
+ while ( my $c = $todays_checkins->next ) {
+ push @checkins, {
+ biblio => $c->item->biblio->unblessed,
+ items => $c->item->unblessed,
+ };
+ }
+ my %repeat = (
+ checkedin => \@checkins,
+ );
+
+ my $letter = C4::Letters::GetPreparedLetter(
+ module => 'circulation',
+ letter_code => 'CHECKINSLIP',
+ branchcode => $checkinslip_branch,
+ tables => {
+ branches => $checkinslip_branch,
+ borrowers => $borrowernumber,
+ },
+ repeat => \%repeat,
+ message_transport_type => 'print'
+ );
+
+ $slip = $letter->{content};
+ $is_html = $letter->{is_html};
+
+} elsif (my $letter = IssueSlip ($session->param('branch') || $branch, $borrowernumber, $print eq "qslip")) {
$slip = $letter->{content};
$is_html = $letter->{is_html};
}
--
2.11.0