From 2a2a1e1ceb18c78fffa601de2aab8a0bccd3be53 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Mon, 12 Jun 2017 10:09:35 -0400 Subject: [PATCH] Bug 18786 - Add ability to create custom payment types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some libraries would like to be able to specify more specific payment types such as cash, check, credit card, or even canned food ( for food drives ). This feature will allow a library to specify payment types as authorised values of the type PAYMENT_TYPE. Test Plan: 1) Apply patches 2) Update database 3) Add authorised value PAYMENT_TYPE with values 'Cash', 'Check', 'Credit card' 4) Go to the fines section of a patron who has several fines 5) Tab 'Fines' 6) Click on 'Pay' for an individual fine 7) Verify that in the form a 'Pay an individual fine' dropdown appears with payment types 8) Select a payment type, confirm payment 9) Verify that payment type appears in "Description of charges" in tab 'Account' Signed-off-by: Marc VĂ©ron --- Koha/Account.pm | 2 + .../prog/en/modules/members/boraccount.tt | 2 + .../prog/en/modules/members/paycollect.tt | 36 +++++++++++++++++ .../opac-tmpl/bootstrap/en/modules/opac-account.tt | 2 + members/paycollect.pl | 45 +++++++++++++--------- t/db_dependent/Accounts.t | 7 +++- 6 files changed, 74 insertions(+), 20 deletions(-) diff --git a/Koha/Account.pm b/Koha/Account.pm index ed1fd3c..66673ed 100644 --- a/Koha/Account.pm +++ b/Koha/Account.pm @@ -72,6 +72,7 @@ sub pay { my $library_id = $params->{library_id}; my $lines = $params->{lines}; my $type = $params->{type} || 'payment'; + my $payment_type = $params->{payment_type} || undef; my $account_type = $params->{account_type}; my $offset_type = $params->{offset_type} || $type eq 'writeoff' ? 'Writeoff' : 'Payment'; @@ -215,6 +216,7 @@ sub pay { amount => 0 - $amount, description => $description, accounttype => $account_type, + payment_type => $payment_type, amountoutstanding => 0 - $balance_remaining, manager_id => $manager_id, note => $note, 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 ef4354a..4a31c08 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt @@ -1,6 +1,7 @@ [% USE Koha %] [% USE KohaDates %] [% USE ColumnsSettings %] +[% USE AuthorisedValues %] [% USE Price %] [% INCLUDE 'doc-head-open.inc' %] Koha › Patrons › Account for [% INCLUDE 'patron-title.inc' %] @@ -107,6 +108,7 @@ $(document).ready(function() { [% CASE 'CR' %]Credit [% CASE %][% account.accounttype %] [%- END -%] + [%- IF account.payment_type %], [% AuthorisedValues.GetByCode('PAYMENT_TYPE', account.payment_type) %][% END %] [%- IF account.description %], [% account.description %][% END %]  [% IF ( account.itemnumber ) %][% account.title |html %][% END %] [% account.note | html_line_break %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt index 12b2c4b..aeb838d 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt @@ -1,5 +1,6 @@ [% USE Koha %] [% USE Branches %] +[% USE AuthorisedValues %] [% INCLUDE 'doc-head-open.inc' %] Koha › Patrons › Collect fine payment for [% borrower.firstname %] [% borrower.surname %] [% INCLUDE 'doc-head-close.inc' %] @@ -148,6 +149,18 @@ function moneyFormat(textObj) { + [% SET payment_types = AuthorisedValues.GetAuthValueDropbox('PAYMENT_TYPE') %] + [% IF payment_types %] +
  • + + +
  • + [% END %] @@ -214,10 +227,33 @@ function moneyFormat(textObj) { + [% SET payment_types = AuthorisedValues.GetAuthValueDropbox('PAYMENT_TYPE') %] + [% IF payment_types %] +
  • + + +
  • + [% END %]
  • + [% IF payment_types.count %] +
  • + + +
  • + [% END %]
    diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-account.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-account.tt index 44c8555..b5e5f98 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-account.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-account.tt @@ -1,5 +1,6 @@ [% USE Koha %] [% USE KohaDates %] +[% USE AuthorisedValues %] [% USE Price %] [% SET ENABLE_OPAC_PAYMENTS = Koha.Preference('EnablePayPalOpacPayments') || plugins %] [% SET DISPLAY_PAYMENT_BLOCK = 0 %] @@ -127,6 +128,7 @@ [% CASE 'CR' %]Credit [% CASE %][% ACCOUNT_LINE.accounttype %] [%- END -%] + [%- IF ACCOUNT_LINE.payment_type %], [% AuthorisedValues.GetByCode('PAYMENT_TYPE', ACCOUNT_LINE.payment_type, 1) %][% END %] [%- IF ACCOUNT_LINE.description %], [% ACCOUNT_LINE.description %][% END %] [% IF ACCOUNT_LINE.title %]([% ACCOUNT_LINE.title %])[% END %] diff --git a/members/paycollect.pl b/members/paycollect.pl index 9ec3077..60052b1 100755 --- a/members/paycollect.pl +++ b/members/paycollect.pl @@ -17,24 +17,27 @@ # You should have received a copy of the GNU General Public License # along with Koha; if not, see . -use strict; -use warnings; +use Modern::Perl; + use URI::Escape; +use CGI qw ( -utf8 ); + use C4::Context; use C4::Auth; use C4::Output; -use CGI qw ( -utf8 ); use C4::Members; use C4::Members::Attributes qw(GetBorrowerAttributes); use C4::Accounts; use C4::Koha; -use Koha::Patron::Images; + use Koha::Patrons; +use Koha::Patron::Images; +use Koha::Patron::Categories; + +use Koha::AuthorisedValues; use Koha::Account; use Koha::Token; -use Koha::Patron::Categories; - my $input = CGI->new(); my $updatecharges_permissions = $input->param('writeoff_individual') ? 'writeoff' : 'remaining_permissions'; @@ -71,6 +74,7 @@ my $writeoff = $input->param('writeoff_individual'); my $select_lines = $input->param('selected'); my $select = $input->param('selected_accts'); my $payment_note = uri_unescape scalar $input->param('payment_note'); +my $payment_type = scalar $input->param('payment_type'); my $accountlines_id; if ( $individual || $writeoff ) { @@ -127,10 +131,11 @@ if ( $total_paid and $total_paid ne '0.00' ) { my $line = Koha::Account::Lines->find($accountlines_id); Koha::Account->new( { patron_id => $borrowernumber } )->pay( { - lines => [$line], - amount => $total_paid, - library_id => $branch, - note => $payment_note + lines => [$line], + amount => $total_paid, + library_id => $branch, + note => $payment_note, + payment_type => $payment_type, } ); print $input->redirect( @@ -158,21 +163,25 @@ if ( $total_paid and $total_paid ne '0.00' ) { } )->pay( { - amount => $total_paid, - lines => \@lines, - note => $note, + amount => $total_paid, + lines => \@lines, + note => $note, + payment_type => $payment_type, } ); } else { my $note = $input->param('selected_accts_notes'); - Koha::Account->new( { patron_id => $borrowernumber } ) - ->pay( { amount => $total_paid, note => $note } ); + Koha::Account->new( { patron_id => $borrowernumber } )->pay( + { + amount => $total_paid, + note => $note, + payment_type => $payment_type, + } + ); } - print $input->redirect( -"/cgi-bin/koha/members/boraccount.pl?borrowernumber=$borrowernumber" - ); + print $input->redirect("/cgi-bin/koha/members/boraccount.pl?borrowernumber=$borrowernumber"); } } } else { diff --git a/t/db_dependent/Accounts.t b/t/db_dependent/Accounts.t index 51c094a..60c010d 100644 --- a/t/db_dependent/Accounts.t +++ b/t/db_dependent/Accounts.t @@ -137,7 +137,7 @@ $dbh->do(q|DELETE FROM accountlines|); subtest "Koha::Account::pay tests" => sub { - plan tests => 12; + plan tests => 13; # Create a borrower my $categorycode = $builder->build({ source => 'Category' })->{ categorycode }; @@ -175,7 +175,10 @@ subtest "Koha::Account::pay tests" => sub { my $borrowernumber = $borrower->borrowernumber; my $data = '20.00'; my $payment_note = '$20.00 payment note'; - $account->pay( { amount => $data, note => $payment_note } ); + my $id = $account->pay( { amount => $data, note => $payment_note, payment_type => "TEST_TYPE" } ); + + my $accountline = Koha::Account::Lines->find( $id ); + is( $accountline->payment_type, "TEST_TYPE", "Payment type passed into pay is set in account line correctly" ); # There is now $280 in the account $sth = $dbh->prepare("SELECT amountoutstanding FROM accountlines WHERE borrowernumber=?"); -- 2.10.2