Bug 27949: Allow multiple article requests print slip
authorAgustin Moyano <agustinmoyano@theke.io>
Thu, 3 Jun 2021 20:41:22 +0000 (17:41 -0300)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Mon, 18 Oct 2021 09:28:41 +0000 (11:28 +0200)
This bug allows for batch printing of multiple article requests slips

To test:
1. apply this patch
2. restart_all
3. enable ArticleRequests preference
4. create multiple article requests
5. go to circ/article-requests.pl in staff interface
6. print a single slip from a row
CHECK => it works as expected
7. select all rows and print slip from general actions menu (above the table)
SUCCESS => all article requests slips are printed
8. select multiple rows (not all) and print slip from general actions menu (above the table)
SUCCESS => only selected article requests slips are printed

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
JD amended patch: Perltidy!

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
circ/article-request-slip.pl
koha-tmpl/intranet-tmpl/prog/en/modules/circ/article-requests.tt

index 18d03bb..2efd495 100755 (executable)
@@ -30,7 +30,7 @@ use Koha::Patrons;
 
 my $cgi = CGI->new;
 
-my $id = $cgi->param('id');
+my @ids = split( ',', $cgi->param('id') );
 
 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     {
@@ -41,30 +41,42 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     }
 );
 
-my $ar = Koha::ArticleRequests->find($id);
+my $ars         = Koha::ArticleRequests->search( { id => { '-in' => \@ids } } );
+my $slipContent = '';
+my $first       = 1;
+while ( my $ar = $ars->next ) {
+    if ( !$first ) {
+        $slipContent .= "<hr/>";
+    }
+    $first = 0;
+    $template->param( article_request => $ar );
+    my $patron = Koha::Patrons->find( $ar->borrowernumber );
 
-$template->param( article_request => $ar );
-my $patron = Koha::Patrons->find( $ar->borrowernumber );
+    my $slip = C4::Letters::GetPreparedLetter(
+        module                 => 'circulation',
+        letter_code            => 'AR_SLIP',
+        message_transport_type => 'print',
+        lang                   => $patron->lang,
+        tables                 => {
+            article_requests => $ar->id,
+            borrowers        => $ar->borrowernumber,
+            biblio           => $ar->biblionumber,
+            biblioitems      => $ar->biblionumber,
+            items            => $ar->itemnumber,
+            branches         => $ar->branchcode,
+        },
+    );
 
-my $slip = C4::Letters::GetPreparedLetter(
-    module                 => 'circulation',
-    letter_code            => 'AR_SLIP',
-    message_transport_type => 'print',
-    lang                   => $patron->lang,
-    tables                 => {
-        article_requests => $ar->id,
-        borrowers        => $ar->borrowernumber,
-        biblio           => $ar->biblionumber,
-        biblioitems      => $ar->biblionumber,
-        items            => $ar->itemnumber,
-        branches         => $ar->branchcode,
-    },
-);
+    $slipContent .=
+        $slip->{is_html}
+      ? $slip->{content}
+      : '<pre>' . $slip->{content} . '</pre>';
+}
 
 $template->param(
-    slip   => $slip->{content},
+    slip => $slipContent,
     caller => 'article-request',
-    plain  => !$slip->{is_html},
+    plain  => 0,
 );
 
 output_html_with_http_headers $cgi, $cookie, $template->output;
index 9cfac9b..73964fa 100644 (file)
                     <i class="fa fa-print"></i>
                     Print slip
                 </a>
+                [% ELSE %]
+                <a class="ar-print-request" href="#" onclick="PrintMultipleSlip(); return false;">
+                    <i class="fa fa-print"></i>
+                    Print slip
+                </a>
                 [% END %]
+
             </li>
         </ul>
         </span>
             }, cancel_id, cancel_a)
         });
 
+        function PrintMultipleSlip() {
+            var ids = [];
+            $( active_tab + " input[type='checkbox']:checked").each(function() {
+                ids.push($(this).attr('reqid'));
+            });
+            var link = 'article-request-slip.pl?multi=1&id='+ids.join(',');
+            window.open(link, 'popup', 'width=600,height=400,resizable=1,toolbar=0,scrollbars=1,top');
+
+        }
+
         function Cancel( id, a ) {
             cancel_id = id;
             cancel_a = a;