From fde5ea23fc87662e59a590aa8e90f8aea6caefa2 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=utf8 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 Signed-off-by: Josef Moravec Bug 18786: Remove use of Koha::Patron::Images Signed-off-by: Josef Moravec Bug 18786: Remove duplicate block with bad IF Signed-off-by: Jonathan Druart --- Koha/Account.pm | 2 + .../prog/en/modules/members/boraccount.tt | 2 + .../prog/en/modules/members/paycollect.tt | 25 ++++++++++++ .../bootstrap/en/modules/opac-account.tt | 2 + members/paycollect.pl | 38 +++++++++++-------- t/db_dependent/Accounts.t | 7 +++- 6 files changed, 59 insertions(+), 17 deletions(-) diff --git a/Koha/Account.pm b/Koha/Account.pm index 477e7a9325..493f4ac698 100644 --- a/Koha/Account.pm +++ b/Koha/Account.pm @@ -73,6 +73,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'; @@ -216,6 +217,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 20339d7a3f..faccfd0bd4 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt @@ -2,6 +2,7 @@ [% USE Koha %] [% USE KohaDates %] [% USE ColumnsSettings %] +[% USE AuthorisedValues %] [% USE Price %] [% SET footerjs = 1 %] [% INCLUDE 'doc-head-open.inc' %] @@ -78,6 +79,7 @@ [% 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.item.biblio.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 b9e03cf60f..a4467b1258 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt @@ -1,6 +1,7 @@ [% USE Asset %] [% USE Koha %] [% USE Branches %] +[% USE AuthorisedValues %] [% SET footerjs = 1 %] [% INCLUDE 'doc-head-open.inc' %] Koha › Patrons › Collect fine payment for [% patron.firstname %] [% patron.surname %] @@ -86,6 +87,18 @@ + [% SET payment_types = AuthorisedValues.GetAuthValueDropbox('PAYMENT_TYPE') %] + [% IF payment_types %] +
  • + + +
  • + [% END %] @@ -153,6 +166,18 @@ + [% SET payment_types = AuthorisedValues.GetAuthValueDropbox('PAYMENT_TYPE') %] + [% IF payment_types %] +
  • + + +
  • + [% 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 807aa8fa4c..d5b5e346ec 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-account.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-account.tt @@ -1,6 +1,7 @@ [% USE Asset %] [% USE Koha %] [% USE KohaDates %] +[% USE AuthorisedValues %] [% USE Price %] [% SET ENABLE_OPAC_PAYMENTS = Koha.Preference('EnablePayPalOpacPayments') || plugins %] [% SET DISPLAY_PAYMENT_BLOCK = 0 %] @@ -128,6 +129,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 7c16a0a0e6..82b5d2798e 100755 --- a/members/paycollect.pl +++ b/members/paycollect.pl @@ -19,20 +19,22 @@ 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::Patrons; +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'; @@ -66,6 +68,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 ) { @@ -118,10 +121,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( @@ -149,21 +153,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 9da6f59733..3d2cbea3d8 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.39.5