@@ -, +, @@ - Apply this patch(es), - update databases, - launch misc/devel/update_dbix_class_files.pl, - edit an item to have html or text content in chekin_alert (may need a koha to marc mapping for gui edition), - check out this item, - check it in: you should get a modal showing the alert, - check that you can print the alert. - Create a koha to marc mapping for the column checkin alert, - import an item with a checkin alert message, - check that the mapping is done --- C4/Circulation.pm | 4 ++ C4/Items.pm | 5 ++- circ/print-alert.pl | 51 ++++++++++++++++++++++ circ/returns.pl | 19 ++++++++ .../bug_18760-add-items-checkin-alert-column.sql | 2 + .../marc21/mandatory/marc21_framework_DEFAULT.sql | 1 + .../mandatory/unimarc_framework_DEFAULT.sql | 1 + installer/data/mysql/kohastructure.sql | 2 + .../prog/en/modules/circ/printalert.tt | 19 ++++++++ .../intranet-tmpl/prog/en/modules/circ/returns.tt | 44 +++++++++++++++++++ 10 files changed, 147 insertions(+), 1 deletion(-) create mode 100755 circ/print-alert.pl create mode 100644 installer/data/mysql/atomicupdate/bug_18760-add-items-checkin-alert-column.sql create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/circ/printalert.tt --- a/C4/Circulation.pm +++ a/C4/Circulation.pm @@ -2099,6 +2099,10 @@ sub AddReturn { } } + if ( $item->{checkin_alert} ) { + $messages->{checkin_alert} = $item->{checkin_alert}; + } + return ( $doreturn, $messages, $issue, ( $patron ? $patron->unblessed : {} )); } --- a/C4/Items.pm +++ a/C4/Items.pm @@ -478,6 +478,7 @@ sub _build_default_values_for_mod_marc { stocknumber => undef, uri => undef, withdrawn => 0, + checkin_alert => undef, }; my %default_values_for_mod_from_marc; while ( my ( $field, $default_value ) = each %$default_values ) { @@ -1784,7 +1785,8 @@ sub _koha_new_item { more_subfields_xml = ?, copynumber = ?, stocknumber = ?, - new_status = ? + new_status = ?, + checkin_alert = ? "; my $sth = $dbh->prepare($query); my $today = output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 }); @@ -1829,6 +1831,7 @@ sub _koha_new_item { $item->{'copynumber'}, $item->{'stocknumber'}, $item->{'new_status'}, + $item->{'checkin_alert'}, ); my $itemnumber; --- a/circ/print-alert.pl +++ a/circ/print-alert.pl @@ -0,0 +1,51 @@ +#!/usr/bin/perl + + +# Copyright 2017 Biblibre +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; +use C4::Context; +use C4::Output; +use CGI qw ( -utf8 ); +use C4::Auth qw/:DEFAULT get_session/; +use C4::Items qw/GetItem/; + +use vars qw($debug); + +BEGIN { + $debug = $ENV{DEBUG} || 0; +} + +my $input = new CGI; +my $itemnumber = $input->param('itemnumber'); +my $item = GetItem( $itemnumber ); + +my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + template_name => "circ/printalert.tt", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => { circulate => "circulate_remaining_permissions" }, + debug => $debug, + } +); + +$template->param( alert => $item->{checkin_alert} ) if ($item->{checkin_alert}); + +output_html_with_http_headers $input, $cookie, $template->output; --- a/circ/returns.pl +++ a/circ/returns.pl @@ -198,6 +198,14 @@ my $messages; my $issue; my $itemnumber; my $barcode = $query->param('barcode'); + +if ( $query->param('print_alert') ) { + $template->param( + print_alert => 1, + itemnumber => $query->param('itemnumber') + ); +} + my $exemptfine = $query->param('exemptfine'); if ( $exemptfine && @@ -486,6 +494,15 @@ if ( $messages->{'ResFound'}) { } # else { ; } # error? } +if ( $messages->{checkin_alert} ) { + $template->param( + found => 1, + checkin_alert => 1, + checkin_alert_message => $messages->{checkin_alert}, + itemnumber => $itemnumber + ); +} + # Error Messages my @errmsgloop; foreach my $code ( keys %$messages ) { @@ -556,6 +573,8 @@ foreach my $code ( keys %$messages ) { elsif ( $code eq 'DataCorrupted' ) { $err{data_corrupted} = 1; } + elsif ( $code eq 'checkin_alert' ) { + } else { die "Unknown error code $code"; # note we need all the (empty) elsif's above, or we die. # This forces the issue of staying in sync w/ Circulation.pm --- a/installer/data/mysql/atomicupdate/bug_18760-add-items-checkin-alert-column.sql +++ a/installer/data/mysql/atomicupdate/bug_18760-add-items-checkin-alert-column.sql @@ -0,0 +1,2 @@ +ALTER TABLE items ADD checkin_alert longtext DEFAULT NULL AFTER new_status; +ALTER TABLE deleteditems ADD checkin_alert longtext DEFAULT NULL AFTER new_status; --- a/installer/data/mysql/en/marcflavour/marc21/mandatory/marc21_framework_DEFAULT.sql +++ a/installer/data/mysql/en/marcflavour/marc21/mandatory/marc21_framework_DEFAULT.sql @@ -107,6 +107,7 @@ INSERT IGNORE INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblib ('952', 'h', 'Serial Enumeration / chronology', 'Serial Enumeration / chronology', 0, 0, 'items.enumchron', 10, '', '', '', 0, 0, '', '', '', NULL), ('952', 'i', 'Inventory number', 'Inventory number', 0, 0, 'items.stocknumber', 10, '', '', '', 0, 0, '', '', '', NULL), ('952', 'j', 'Shelving control number', 'Shelving control number', 0, 0, 'items.stack', 10, 'STACK', '', '', NULL, -1, '', '', '', NULL), + ('952', 'k', 'Checkin alert', '', 0, 0, 'items.checkin_alert', 10, '', '', '', NULL, -1, '', '', '', NULL), ('952', 'l', 'Total Checkouts', 'Total Checkouts', 0, 0, 'items.issues', 10, '', '', '', NULL, -5, '', '', '', NULL), ('952', 'm', 'Total Renewals', 'Total Renewals', 0, 0, 'items.renewals', 10, '', '', '', NULL, -5, '', '', '', NULL), ('952', 'n', 'Total Holds', 'Total Holds', 0, 0, 'items.reserves', 10, '', '', '', NULL, -5, '', '', '', NULL), --- a/installer/data/mysql/en/marcflavour/unimarc/mandatory/unimarc_framework_DEFAULT.sql +++ a/installer/data/mysql/en/marcflavour/unimarc/mandatory/unimarc_framework_DEFAULT.sql @@ -148,6 +148,7 @@ INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian` ('995', 'm', 'Date of loan or deposit', 'Date of loan or deposit', 0, 0, 'items.datelastborrowed', 10, '', '', '', 0, -5, '', '', '', NULL), ('995', 'n', 'Expiration of loan date', 'Expiration of loan date', 0, 0, 'items.onloan', 10, '', '', '', 0, -1, '', '', '', NULL), ('995', 'o', 'Circulation type (not for loan)', 'Circulation type (not for loan)', 0, 0, 'items.notforloan', 10, '', '', '', 0, 0, '', '', '', NULL), + ('952', 'q', 'Checkin alert', '', 0, 0, 'items.checkin_alert', 10, '', '', '', NULL, -1, '', '', '', NULL), ('995', 'r', 'Type of item and material', 'Type of item and material', 0, 1, 'items.itype', 10, 'itemtypes', '', '', 0, 0, '', '', '', NULL), ('995', 'u', 'Copy note', 'Copy note', 0, 0, 'items.itemnotes', 10, '', '', '', 0, 0, '', '', '', NULL), ('995', 'v', 'Serial Enumeration / chronology', 'Serial Enumeration / chronology', 0, 0, 'items.enumchron', 10, '', '', '', 0, -1, '', '', '', NULL); --- a/installer/data/mysql/kohastructure.sql +++ a/installer/data/mysql/kohastructure.sql @@ -692,6 +692,7 @@ CREATE TABLE `deleteditems` ( `copynumber` varchar(32) default NULL, -- copy number (MARC21 952$t) `stocknumber` varchar(32) default NULL, -- inventory number (MARC21 952$i) `new_status` VARCHAR(32) DEFAULT NULL, -- 'new' value, you can put whatever free-text information. This field is intented to be managed by the automatic_item_modification_by_age cronjob. + `checkin_alert` longtext DEFAULT NULL, -- Chekin alert field. Put html is this field, it will be displayed and printable while checkin item. PRIMARY KEY (`itemnumber`), KEY `delitembarcodeidx` (`barcode`), KEY `delitemstocknumberidx` (`stocknumber`), @@ -952,6 +953,7 @@ CREATE TABLE `items` ( -- holdings/item information `copynumber` varchar(32) default NULL, -- copy number (MARC21 952$t) `stocknumber` varchar(32) default NULL, -- inventory number (MARC21 952$i) `new_status` VARCHAR(32) DEFAULT NULL, -- 'new' value, you can put whatever free-text information. This field is intented to be managed by the automatic_item_modification_by_age cronjob. + `checkin_alert` longtext DEFAULT NULL, -- Chekin alert field. Put html is this field, it will be displayed and printable while checkin item. PRIMARY KEY (`itemnumber`), UNIQUE KEY `itembarcodeidx` (`barcode`), KEY `itemstocknumberidx` (`stocknumber`), --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/printalert.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/printalert.tt @@ -0,0 +1,19 @@ +[% USE Koha %] +[% INCLUDE 'doc-head-open.inc' %] +Koha › Circulation › Print alert +[% INCLUDE 'doc-head-close.inc' %] + + + +[% IF ( Koha.Preference('SlipCSS') ) %] + +[% END %] + +[% INCLUDE 'slip-print.inc' #printThenClose %] + + +
+ +[% IF ( alert ) %][% alert %][% END %] + +[% INCLUDE 'intranet-bottom.inc' %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt @@ -58,6 +58,10 @@ $(document).ready(function () { Dopop('hold-transfer-slip.pl?borrowernumber=[% borrowernumber %]&biblionumber=[% biblionumber %]'); [% END %] + [% IF print_alert %] + Dopop('print-alert.pl?itemnumber=[% itemnumber %]'); + [% END %] + var columns_settings = [% ColumnsSettings.GetColumns( 'circ', 'returns', 'checkedintable', 'json' ) %] var returns_table = KohaTable("#checkedintable", { "bFilter":false, @@ -577,6 +581,46 @@ $(document).ready(function () {
[% END %] + [% IF ( checkin_alert ) %] + + [% END %] [% END %] [% IF ( errmsgloop ) %] --