From 5643de4d79f274b35f92aa03f5f8cbc124359e52 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Thu, 21 Dec 2017 14:15:52 +0000 Subject: [PATCH] Bug 2696: Fine payments should show what was paid for Test Plan: 1) Apply this patch and its' dependencies 2) Create and pay some various fees and fines 3) View the payments for fees, and fees paid by payments by using the new 'Details' button available on boraccount.pl Signed-off-by: Lee Jamison Running updatedatabase.pl after patch application makes dependencies happy. Passes QA Tools and works as intended. Rebased (2017-12-21): Alex Arnaud Signed-off-by: Katrin Fischer Bug 2696: (QA follow-up) - Remove use of GetMember Signed-off-by: Katrin Fischer Signed-off-by: Jonathan Druart --- Koha/Account/Offset.pm | 23 +++ .../prog/en/includes/account_offset_type.inc | 8 + .../prog/en/includes/accounttype.inc | 24 +++ .../en/modules/members/accountline-details.tt | 137 ++++++++++++++++++ .../prog/en/modules/members/boraccount.tt | 26 +--- members/accountline-details.pl | 66 +++++++++ t/db_dependent/Accounts.t | 8 +- 7 files changed, 267 insertions(+), 25 deletions(-) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/includes/account_offset_type.inc create mode 100644 koha-tmpl/intranet-tmpl/prog/en/includes/accounttype.inc create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/members/accountline-details.tt create mode 100644 members/accountline-details.pl diff --git a/Koha/Account/Offset.pm b/Koha/Account/Offset.pm index b41165338e..3110d6a52b 100644 --- a/Koha/Account/Offset.pm +++ b/Koha/Account/Offset.pm @@ -20,6 +20,7 @@ use Modern::Perl; use Carp; use Koha::Database; +use Koha::Account::Line; use base qw(Koha::Object); @@ -35,6 +36,28 @@ Account offsets are used to track the changes in account lines =cut +=head3 debit + +=cut + +sub debit { + my ( $self ) = @_; + my $debit_rs = $self->_result->debit; + return unless $debit_rs; + return Koha::Account::Line->_new_from_dbic( $debit_rs ); +} + +=head3 credit + +=cut + +sub credit { + my ( $self ) = @_; + my $credit_rs = $self->_result->credit; + return unless $credit_rs; + return Koha::Account::Line->_new_from_dbic( $credit_rs ); +} + =head3 _type =cut diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/account_offset_type.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/account_offset_type.inc new file mode 100644 index 0000000000..a36a883a86 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/account_offset_type.inc @@ -0,0 +1,8 @@ +[% SWITCH account_offset.type %] + [% CASE 'Payment' %]Payment + [% CASE 'Manual Debit' %]Manual invoice + [% CASE 'Lost Item Return' %]Lost item returned + [% CASE 'Writeoff' %]Writeoff + [% CASE 'Void Payment' %]Void payment + [% CASE %][% account_offset.type %] +[%- END -%] diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/accounttype.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/accounttype.inc new file mode 100644 index 0000000000..7d7cdc6109 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/accounttype.inc @@ -0,0 +1,24 @@ +[% SWITCH account.accounttype %] + [% CASE 'Pay' %]Payment, thanks + [% CASE 'Pay00' %]Payment, thanks (cash via SIP2) + [% CASE 'Pay01' %]Payment, thanks (VISA via SIP2) + [% CASE 'Pay02' %]Payment, thanks (credit card via SIP2) + [% CASE 'VOID' %]Payment, Voided + [% CASE 'N' %]New card + [% CASE 'F' %]Fine + [% CASE 'A' %]Account management fee + [% CASE 'M' %]Sundry + [% CASE 'L' %]Lost item + [% CASE 'W' %]Writeoff + [% CASE 'FU' %]Accruing fine + [% CASE 'HE' %]Hold waiting too long + [% CASE 'Rent' %]Rental fee + [% CASE 'FOR' %]Forgiven + [% CASE 'LR' %]Lost item fee refund + [% CASE 'PF' %]Processing fee + [% CASE 'PAY' %]Payment + [% CASE 'WO' %]Writeoff + [% CASE 'C' %]Credit + [% CASE 'CR' %]Credit + [% CASE %][% account.accounttype %] +[%- END -%] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/accountline-details.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/accountline-details.tt new file mode 100644 index 0000000000..5e5a5049d6 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/accountline-details.tt @@ -0,0 +1,137 @@ +[%- USE Price -%] +[%- USE KohaDates -%] +[%- USE AuthorisedValues -%] + +[% INCLUDE 'doc-head-open.inc' %] +Koha › Patrons › Account for [% INCLUDE 'patron-title.inc' %] +[% INCLUDE 'doc-head-close.inc' %] + + +[% INCLUDE 'header.inc' %] +[% INCLUDE 'patron-search.inc' %] + + + +
+
+
+
+ [% IF accountline %] + [% IF type == 'credit' %] +

Details for payment

+ [% ELSIF type == 'debit' %] +

Details for fee

+ [% END %] + + + + + + + + + + + + + + + + + + + + + + + + +
DateDescription of chargesNoteAmountOutstanding
+ [% accountline.date |$KohaDates %] + + [% INCLUDE 'accounttype.inc' accountline => accountline %] + [%- IF accountline.payment_type -%] + , [% AuthorisedValues.GetByCode('PAYMENT_TYPE', accountline.payment_type) %] + [%- END =%] + [%- IF accountline.description -%] + , [% accountline.description %] + [%- END -%] + +   + [% IF ( accountline.itemnumber ) %] + [% accountline.title |html %] + [% END %] + + [% accountline.note | html_line_break %] + + [% accountline.amount | $Price %] + + [% accountline.amountoutstanding | $Price %] +
+ + [% IF type == 'credit' %] +

Fees paid

+ [% ELSIF type == 'debit' %] +

Payments

+ [% END %] + + [% IF account_offsets %] + + + + + + + + + + + + + + + + + + + [% FOREACH ao IN account_offsets.sort('created_on') %] + [% IF type == 'credit' %] + [% SET offset_accountline = ao.debit %] + [% ELSIF type == 'debit' %] + [% SET offset_accountline = ao.credit %] + [% END %] + + [% IF offset_accountline %] + + + + + + + + + + + + + + [% END %] + [% END %] + +
Date createdDate updatedAmountAmount outstandingTypeNoteTransacting
librarian id
Date/Time of changeAmount of changeType of change 
[% offset_accountline.date | $KohaDates %][% offset_accountline.timestamp | $KohaDates with_hours => 1 %][% offset_accountline.amount | $Price %][% offset_accountline.amountoutstanding | $Price %][% INCLUDE 'accounttype.inc' accountline => offset_accountline %][% offset_accountline.note %][% IF offset_accountline.manager_id %][% offset_accountline.manager_id %][% END %][% ao.created_on | $KohaDates with_hours => 1 %][% ao.amount | $Price %][% INCLUDE 'account_offset_type.inc' account_offset => ao %] Details
+ [% ELSE %] + No details available for this payment. + [% END %] + [% ELSE %] +
+

Account line not found.

+
+ [% END %] +
+
+ +
+ [% INCLUDE 'circ-menu.inc' %] +
+
+[% INCLUDE 'intranet-bottom.inc' %] 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 14f4859a7e..f91f929ff0 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt @@ -56,30 +56,7 @@ [% account.date |$KohaDates %] - [% SWITCH account.accounttype %] - [% CASE 'Pay' %]Payment, thanks - [% CASE 'Pay00' %]Payment, thanks (cash via SIP2) - [% CASE 'Pay01' %]Payment, thanks (VISA via SIP2) - [% CASE 'Pay02' %]Payment, thanks (credit card via SIP2) - [% CASE 'VOID' %]Payment, voided - [% CASE 'N' %]New card - [% CASE 'F' %]Fine - [% CASE 'A' %]Account management fee - [% CASE 'M' %]Sundry - [% CASE 'L' %]Lost item - [% CASE 'W' %]Writeoff - [% CASE 'FU' %]Accruing fine - [% CASE 'HE' %]Hold waiting too long - [% CASE 'Rent' %]Rental fee - [% CASE 'FOR' %]Forgiven - [% CASE 'LR' %]Lost item fee refund - [% CASE 'PF' %]Processing fee - [% CASE 'PAY' %]Payment - [% CASE 'WO' %]Writeoff - [% CASE 'C' %]Credit - [% CASE 'CR' %]Credit - [% CASE %][% account.accounttype %] - [%- END -%] + [% INCLUDE 'accounttype.inc' accountline => account %] [%- IF account.payment_type %], [% AuthorisedValues.GetByCode('PAYMENT_TYPE', account.payment_type) %][% END %] [%- IF account.description %], [% account.description %][% END %]  [% IF ( account.itemnumber ) %][% account.item.biblio.title |html %][% END %] @@ -92,6 +69,7 @@ [% ELSE %] Print [% END %] + Details [% IF ( reverse_col) %] [% IF ( account.payment ) %] Reverse diff --git a/members/accountline-details.pl b/members/accountline-details.pl new file mode 100644 index 0000000000..cd22d80baf --- /dev/null +++ b/members/accountline-details.pl @@ -0,0 +1,66 @@ +#!/usr/bin/perl + +# This file is part of Koha. +# +# Copyright 2017 ByWater Solutions +# +# 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 CGI; +use C4::Auth; +use C4::Output; +use C4::Context; +use Koha::Patrons; +use Koha::Account::Lines; + +my $input = new CGI; + +my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + template_name => "members/accountline-details.tt", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => { + borrowers => 1, + updatecharges => 'remaining_permissions' + }, + } +); + +my $accountlines_id = $input->param('accountlines_id'); + +my $accountline = Koha::Account::Lines->find($accountlines_id); + +if ($accountline) { + my $type = $accountline->amount < 0 ? 'credit' : 'debit'; + my $column = $type eq 'credit' ? 'credit_id' : 'debit_id'; + + my @account_offsets = Koha::Account::Offsets->search( { $column => $accountlines_id } ); + + $template->param( + type => $type, + accountline => $accountline, + account_offsets => \@account_offsets, + + finesview => 1, + ); + + my $patron = Koha::Patrons->find( $accountline->borrowernumber ); + $template->param( patron => $patron ); +} + +output_html_with_http_headers $input, $cookie, $template->output; diff --git a/t/db_dependent/Accounts.t b/t/db_dependent/Accounts.t index e4ac8e9e53..541564e92c 100644 --- a/t/db_dependent/Accounts.t +++ b/t/db_dependent/Accounts.t @@ -846,7 +846,7 @@ subtest "Koha::Account::non_issues_charges tests" => sub { subtest "Koha::Account::Line::void tests" => sub { - plan tests => 12; + plan tests => 14; # Create a borrower my $categorycode = $builder->build({ source => 'Category' })->{ categorycode }; @@ -876,6 +876,12 @@ subtest "Koha::Account::Line::void tests" => sub { amount => 30, } ); + + # Test debit and credit methods fo Koha::Account::Offset + my $account_offset = Koha::Account::Offsets->find( { credit_id => $id, debit_id => $line1->id } ); + is( $account_offset->debit->id, $line1->id, "Koha::Account::Offset->debit gets correct accountline" ); + is( $account_offset->credit->id, $id, "Koha::Account::Offset->credit gets correct accountline" ); + my $account_payment = Koha::Account::Lines->find( $id ); is( $account->balance(), 0, "Account balance is 0" ); -- 2.39.2