From 3074baadb228843226da8901c22e8ae10c980b9f Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Fri, 16 Jun 2023 12:34:59 +0200 Subject: [PATCH] Bug 34030: Add a "print slips" action links to print in batch Sponsored-by: BULAC - http://www.bulac.fr/ Signed-off-by: BULAC - http://www.bulac.fr/ --- koha-tmpl/intranet-tmpl/prog/css/print.css | 4 + .../prog/en/modules/circ/printslip.tt | 12 ++- .../components/Preservation/TrainsShow.vue | 95 ++++++++++++++++++- preservation/print_slip.pl | 43 ++++----- 4 files changed, 122 insertions(+), 32 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/css/print.css b/koha-tmpl/intranet-tmpl/prog/css/print.css index b1cbc010b6b..2a914e657f9 100644 --- a/koha-tmpl/intranet-tmpl/prog/css/print.css +++ b/koha-tmpl/intranet-tmpl/prog/css/print.css @@ -1,3 +1,7 @@ +@media print { + .pagebreak { break-after: page; } +} + a:link { color : #000000; text-decoration: none; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/printslip.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/printslip.tt index e75a25b6be8..ab07dbf4a3b 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/printslip.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/printslip.tt @@ -26,12 +26,18 @@
-[% IF plain %] +[% UNLESS slips && slips.size %] + [% SET slips = [{content => slip, is_html => !plain}] %] +[% END %] +[% FOR slip IN slips %] +[% UNLESS slip.is_html %]
-[% IF ( slip ) %][% slip | html %][% ELSE %]No slip template found[% END %]
+[% IF ( slip.content ) %][% slip.content | html %][% ELSE %]No slip template found[% END %]
 
[% ELSE %] -[% IF ( slip ) %][% slip | $raw %][% ELSE %]No slip template found[% END %] +[% IF ( slip.content ) %][% slip.content | $raw %][% ELSE %]No slip template found[% END %] +[% END %] +[% IF slips.size > 1 && !loop.last%]
[% END %] [% END %] [% INCLUDE 'intranet-bottom.inc' %] diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/Preservation/TrainsShow.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/Preservation/TrainsShow.vue index 6675ba3e7fd..ddd81a53a7a 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/Preservation/TrainsShow.vue +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/Preservation/TrainsShow.vue @@ -147,6 +147,27 @@
{{ $__("Items") }} + + {{ $__("Select all") }} + {{ $__("Clear all") }} + {{ $__("Actions: ") }} + {{ $__("Print slips") }} + {{ $__("Print slips") }} +
  1. { + return "" + }, + }, + { + name: "", + title: this.$__("ID"), + data: "item.user_train_item_id", + } + ) train.default_processing.attributes.forEach(a => this.item_table.columns.push({ name: a.name, @@ -468,6 +500,38 @@ export default { } ) }, + clearAll() { + this.selected_items = [] + $("#" + this.table_id) + .find("input[name='user_train_item_id'][type='checkbox']") + .prop("checked", false) + }, + selectAll() { + $("#" + this.table_id) + .find("input[name='user_train_item_id'][type='checkbox']") + .each((i, input) => { + this.selected_items.push($(input).val()) + $(input).prop("checked", true) + }) + }, + printSelected() { + window.open( + "/cgi-bin/koha/preservation/print_slip.pl?%s_blank".format( + this.selected_items + .map(id => "train_item_id=" + id) + .join("&") + ) + ) + }, + updateSelectedItems(checked, train_item_id) { + if (checked) { + this.selected_items.push(train_item_id) + } else { + this.selected_items = this.selected_items.filter( + id => id != train_item_id + ) + } + }, build_datatable: function () { let table_id = this.table_id let item_table = this.item_table @@ -476,6 +540,7 @@ export default { let printSlip = this.printSlip let selectTrainForCopy = this.selectTrainForCopy let train = this.train + let updateSelectedItems = this.updateSelectedItems let table = KohaTable(table_id, { data: item_table.data, @@ -484,6 +549,25 @@ export default { columns: item_table.columns, drawCallback: function (settings) { var api = new $.fn.dataTable.Api(settings) + $.each($(this).find("td.checkboxes"), function (index, e) { + let tr = $(this).parent() + let train_item = api.row(tr).data().item + let train_item_id = train_item.train_item_id + + let checkbox = createVNode("input", { + type: "checkbox", + name: "user_train_item_id", + value: train_item_id, + onChange: e => { + updateSelectedItems( + e.target.checked, + train_item_id + ) + }, + }) + + render(checkbox, e) + }) $.each($(this).find("td.actions"), function (index, e) { let tr = $(this).parent() let train_item = api.row(tr).data().item @@ -588,6 +672,7 @@ export default { .action_links a { padding-left: 0.2em; font-size: 11px; + cursor: pointer; } .attributes_values { float: left; diff --git a/preservation/print_slip.pl b/preservation/print_slip.pl index ec3687ba0f1..b6daf50993a 100755 --- a/preservation/print_slip.pl +++ b/preservation/print_slip.pl @@ -26,7 +26,7 @@ use Koha::Patrons; use Koha::Preservation::Train::Items; my $input = CGI->new; -my $train_item_id = $input->param('train_item_id'); +my @train_item_ids = $input->multi_param('train_item_id'); my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { @@ -40,32 +40,27 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( my $logged_in_user = Koha::Patrons->find($loggedinuser); my $branch = C4::Context->userenv->{'branch'}; -my $train_item = Koha::Preservation::Train::Items->find($train_item_id); - -unless ($train_item){ - print $input->redirect("/cgi-bin/koha/errors/404.pl"); - exit; +my @slips; +for my $train_item_id ( @train_item_ids ) { + my $train_item = Koha::Preservation::Train::Items->find($train_item_id); + my $letter = C4::Letters::GetPreparedLetter( + module => 'preservation', + letter_code => $train_item->processing->letter_code, + branchcode => $branch, + lang => $logged_in_user->lang, + tables => { + preservation_train_items => $train_item_id, + }, + message_transport_type => 'print' + ); + push @slips, { + content => $letter->{content}, + is_html => $letter->{is_html}, + }; } -my $train = $train_item->train; - -my $letter = C4::Letters::GetPreparedLetter( - module => 'preservation', - letter_code => $train_item->processing->letter_code, - branchcode => $branch, - lang => $logged_in_user->lang, - tables => { - preservation_train_items => $train_item_id, - }, - message_transport_type => 'print' -); - -my $slip = $letter->{content}; -my $is_html = $letter->{is_html}; - $template->param( - slip => $slip, - plain => !$is_html, + slips => \@slips, caller => 'preservation', stylesheet => C4::Context->preference("SlipCSS"), ); -- 2.25.1