From 6fd825ea20c0bfdfb1640243d60ccc483e87f920 Mon Sep 17 00:00:00 2001
From: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Date: Thu, 16 Jul 2020 09:42:20 +0100
Subject: [PATCH] Bug 26734: Ratify account slip printing

This patch simplifies the members/print*.pl controller scripts to only
pass around the minimum required data for the templates.
---
 .../prog/en/modules/members/boraccount.tt     |   6 +-
 members/printfeercpt.pl                       | 100 ++++++------------
 members/printinvoice.pl                       |  78 +++++---------
 pos/printreceipt.pl                           |  25 +++--
 4 files changed, 76 insertions(+), 133 deletions(-)

diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt
index b0b51732ea..1a9d15972b 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt
@@ -87,9 +87,9 @@
       [% IF account.amountoutstanding <= 0 %]<td class="credit" style="text-align: right;">[% ELSE %]<td class="debit" style="text-align: right;">[% END %][% account.amountoutstanding | $Price %]</td>
       <td class="actions">
         [% IF ( account.is_credit ) %]
-          <a target="_blank" href="printfeercpt.pl?action=print&amp;accountlines_id=[% account.accountlines_id | uri %]&amp;borrowernumber=[% account.borrowernumber | uri %]" class="btn btn-default btn-xs"><i class="fa fa-print"></i> Print</a>
+          <a target="_blank" href="printfeercpt.pl?action=print&amp;accountlines_id=[% account.accountlines_id | uri %]" class="btn btn-default btn-xs"><i class="fa fa-print"></i> Print</a>
         [% ELSE %]
-          <a target="_blank" href="printinvoice.pl?action=print&amp;accountlines_id=[% account.accountlines_id | uri %]&amp;borrowernumber=[% account.borrowernumber | uri %]" class="btn btn-default btn-xs"><i class="fa fa-print"></i> Print</a>
+          <a target="_blank" href="printinvoice.pl?action=print&amp;accountlines_id=[% account.accountlines_id | uri %]" class="btn btn-default btn-xs"><i class="fa fa-print"></i> Print</a>
         [% END %]
         <a href="accountline-details.pl?accountlines_id=[% account.accountlines_id | uri %]" class="btn btn-default btn-xs"><i class="fa fa-list"></i> Details</a>
         [% IF account.is_debit && account.amountoutstanding > 0 %]
@@ -316,7 +316,7 @@
     <script>
         $(document).ready(function() {
             [% IF payment_id && Koha.Preference('FinePaymentAutoPopup') %]
-                window.open('/cgi-bin/koha/members/printfeercpt.pl?action=print&change_given=[% change_given | html %]&accountlines_id=[% payment_id | html %]&borrowernumber=[% patron.borrowernumber | html %]', '_blank');
+                window.open('/cgi-bin/koha/members/printfeercpt.pl?action=print&change_given=[% change_given | html %]&accountlines_id=[% payment_id | html %]', '_blank');
             [% END %]
 
             var txtActivefilter = _("Filter paid transactions");
diff --git a/members/printfeercpt.pl b/members/printfeercpt.pl
index 5777971868..0dd60f3de2 100755
--- a/members/printfeercpt.pl
+++ b/members/printfeercpt.pl
@@ -1,11 +1,7 @@
 #!/usr/bin/perl
 
-
-#written 3rd May 2010 by kmkale@anantcorp.com adapted from boraccount.pl by chris@katipo.oc.nz
-#script to print fee receipts
-
-
-# Copyright Koustubha Kale
+# Copyright Koustubha Kale 2010
+# Copyright PTFS Europe 2020
 #
 # This file is part of Koha.
 #
@@ -27,73 +23,47 @@ use Modern::Perl;
 use C4::Auth;
 use C4::Output;
 use CGI qw ( -utf8 );
-use C4::Members;
-use C4::Accounts;
 use C4::Letters;
 use Koha::Account::Lines;
-use Koha::DateUtils;
-use Koha::Patrons;
-use Koha::Patron::Categories;
-
-my $input=CGI->new;
-
-
-my ($template, $loggedinuser, $cookie)
-    = get_template_and_user({template_name => "members/printfeercpt.tt",
-                            query => $input,
-                            type => "intranet",
-                            flagsrequired => {borrowers => 'edit_borrowers', updatecharges => 'remaining_permissions'},
-                            debug => 1,
-                            });
-
-my $borrowernumber=$input->param('borrowernumber');
-my $action = $input->param('action') || '';
-my $accountlines_id = $input->param('accountlines_id');
-my $change_given = $input->param('change_given');
 
-my $logged_in_user = Koha::Patrons->find( $loggedinuser );
-my $patron         = Koha::Patrons->find( $borrowernumber );
-output_and_exit_if_error( $input, $cookie, $template, { module => 'members', logged_in_user => $logged_in_user, current_patron => $patron } );
-
-#get account details
-my $total = $patron->account->balance;
-
-# FIXME This whole stuff is ugly and should be rewritten
-# FIXME We should pass the $accts iterator to the template and do this formatting part there
-my $accountline_object = Koha::Account::Lines->find($accountlines_id);
-my $accountline = $accountline_object->unblessed;
-my $totalcredit;
-if($total <= 0){
-        $totalcredit = 1;
-}
-
-$accountline->{'amount'} += 0.00;
-if ( $accountline->{'amount'} <= 0 ) {
-    $accountline->{'amountcredit'} = 1;
-    $accountline->{'amount'} *= -1.00;
-}
-$accountline->{'amountoutstanding'} += 0.00;
-if ( $accountline->{'amountoutstanding'} <= 0 ) {
-    $accountline->{'amountoutstandingcredit'} = 1;
-}
+my $input = CGI->new;
+
+my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+    {
+        template_name   => "members/printfeercpt.tt",
+        query           => $input,
+        type            => "intranet",
+        flagsrequired   => {
+            borrowers     => 'edit_borrowers',
+            updatecharges => 'remaining_permissions'
+        }
+    }
+);
 
-my $letter = C4::Letters::getletter( 'circulation', 'ACCOUNT_CREDIT', C4::Context::mybranch, 'print', $patron->lang );
+my $credit_id = $input->param('accountlines_id');
+my $credit    = Koha::Account::Lines->find($credit_id);
+my $patron    = $credit->patron;
+
+my $logged_in_user = Koha::Patrons->find($loggedinuser) or die "Not logged in";
+output_and_exit_if_error(
+    $input, $cookie,
+    $template,
+    {
+        module         => 'members',
+        logged_in_user => $logged_in_user,
+        current_patron => $patron
+    }
+);
 
-my @account_offsets = Koha::Account::Offsets->search( { credit_id => $accountline_object->id } );
+my $letter = C4::Letters::getletter( 'circulation', 'ACCOUNT_CREDIT',
+    C4::Context::mybranch, 'print', $patron->lang );
 
 $template->param(
-    letter      => $letter,
-    patron      => $patron,
-    library     => C4::Context::mybranch,
-    offsets     => \@account_offsets,
-    credit      => $accountline_object,
-
-    finesview   => 1,
-    total       => $total,
-    totalcredit => $totalcredit,
-    accounts    => [$accountline],        # FIXME There is always only 1 row!
+    letter => $letter,
+    credit => $credit,
 
-    change_given => $change_given,
+    tendered => scalar $input->param('tendered'),
+    change   => scalar $input->param('change')
 );
 
 output_html_with_http_headers $input, $cookie, $template->output;
diff --git a/members/printinvoice.pl b/members/printinvoice.pl
index 9fd49fb178..4c41461bfa 100755
--- a/members/printinvoice.pl
+++ b/members/printinvoice.pl
@@ -1,9 +1,7 @@
 #!/usr/bin/perl
 
-#written 3rd May 2010 by kmkale@anantcorp.com adapted from boraccount.pl by chris@katipo.oc.nz
-#script to print fee receipts
-
-# Copyright Koustubha Kale
+# Copyright Koustubha Kale 2010
+# Copyright PTFS Europe 2020
 #
 # This file is part of Koha.
 #
@@ -24,70 +22,46 @@ use Modern::Perl;
 
 use C4::Auth;
 use C4::Output;
-use Koha::DateUtils;
 use CGI qw ( -utf8 );
-use C4::Members;
-use C4::Accounts;
-
+use C4::Letters;
 use Koha::Account::Lines;
-use Koha::Patrons;
-use Koha::Patron::Categories;
 
 my $input = CGI->new;
 
 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
-    {   template_name   => "members/printinvoice.tt",
+    {
+        template_name   => "members/printinvoice.tt",
         query           => $input,
         type            => "intranet",
-        flagsrequired => { borrowers => 'edit_borrowers', updatecharges => 'remaining_permissions' },
-        debug           => 1,
+        flagsrequired   => {
+            borrowers     => 'edit_borrowers',
+            updatecharges => 'remaining_permissions'
+        }
     }
 );
 
-my $borrowernumber  = $input->param('borrowernumber');
-my $action          = $input->param('action') || '';
-my $accountlines_id = $input->param('accountlines_id');
-
-my $logged_in_user = Koha::Patrons->find( $loggedinuser );
-my $patron         = Koha::Patrons->find( $borrowernumber );
-output_and_exit_if_error( $input, $cookie, $template, { module => 'members', logged_in_user => $logged_in_user, current_patron => $patron } );
-
-#get account details
-my $total = $patron->account->balance;
-my $accountline_object = Koha::Account::Lines->find($accountlines_id);
-my $accountline = $accountline_object->unblessed;
-
-my $totalcredit;
-if ( $total <= 0 ) {
-    $totalcredit = 1;
-}
-
-
-$accountline->{'amount'} += 0.00;
-if ( $accountline->{'amount'} <= 0 ) {
-    $accountline->{'amountcredit'} = 1;
-    $accountline->{'amount'} *= -1.00;
-}
-$accountline->{'amountoutstanding'} += 0.00;
-if ( $accountline->{'amountoutstanding'} <= 0 ) {
-    $accountline->{'amountoutstandingcredit'} = 1;
-}
-
-my @account_offsets = Koha::Account::Offsets->search( { debit_id => $accountline_object->id } );
+my $debit_id = $input->param('accountlines_id');
+my $debit = Koha::Account::Lines->find($debit_id);
+my $patron = $debit->patron;
+
+my $logged_in_user = Koha::Patrons->find($loggedinuser) or die "Not logged in";
+output_and_exit_if_error(
+    $input, $cookie,
+    $template,
+    {
+        module         => 'members',
+        logged_in_user => $logged_in_user,
+        current_patron => $patron
+    }
+);
 
-my $letter = C4::Letters::getletter( 'circulation', 'ACCOUNT_DEBIT', C4::Context::mybranch, 'print', $patron->lang );
+my $letter = C4::Letters::getletter( 'circulation', 'ACCOUNT_DEBIT',
+    C4::Context::mybranch, 'print', $patron->lang );
 
 $template->param(
     letter  => $letter,
-    patron  => $patron,
-    library => C4::Context::mybranch,
-    offsets => \@account_offsets,
-    debit   => $accountline_object,
+    debit   => $debit
 
-    finesview   => 1,
-    total       => sprintf( "%.2f", $total ),
-    totalcredit => $totalcredit,
-    accounts    => [$accountline],           # FIXME There is always only 1 row!
 );
 
 output_html_with_http_headers $input, $cookie, $template->output;
diff --git a/pos/printreceipt.pl b/pos/printreceipt.pl
index bb3861d04c..14e4b72484 100755
--- a/pos/printreceipt.pl
+++ b/pos/printreceipt.pl
@@ -36,31 +36,30 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     }
 );
 
-my $action = $input->param('action') || '';
 my $payment_id = $input->param('accountlines_id');
+my $payment    = Koha::Account::Lines->find($payment_id);
+my $patron     = $payment->patron;
 
 my $logged_in_user = Koha::Patrons->find($loggedinuser) or die "Not logged in";
 output_and_exit_if_error(
     $input, $cookie,
     $template,
     {
-        module         => 'pos',
+        module         => 'members',
         logged_in_user => $logged_in_user,
+        current_patron => $patron
     }
-);
-
-my $payment = Koha::Account::Lines->find($payment_id);
-my @offsets = Koha::Account::Offsets->search( { credit_id => $payment_id } );
+) if $patron;    # Payment could have been anonymous
 
-my $letter =
-  C4::Letters::getletter( 'pos', 'RECEIPT', C4::Context::mybranch, 'print' );
+my $letter = C4::Letters::getletter( 'pos', 'RECEIPT',
+    C4::Context::mybranch, 'print', $patron->lang );
 
 $template->param(
-    letter    => $letter,
-    payment   => $payment,
-    offsets   => \@offsets,
-    collected => scalar $input->param('collected'),
-    change    => scalar $input->param('change')
+    letter  => $letter,
+    payment => $payment,
+
+    tendered => scalar $input->param('tendered'),
+    change   => scalar $input->param('change')
 );
 
 output_html_with_http_headers $input, $cookie, $template->output;
-- 
2.20.1