From 3655c884ddf331026dab4b0ce1a6c6d328df5ae7 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Thu, 10 Oct 2019 17:14:39 +0100 Subject: [PATCH] Bug 23049: Update maninvoice to reference debit types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Test plan: 1) Naviage to a patron record and select the accounts > manual invoice tab 2) Add some manual invoices and confirm they are working as expected 3) Signoff Signed-off-by: Séverine QUEUNE --- Koha/Account/Line.pm | 14 ++ admin/debit_types.pl | 5 +- .../prog/en/includes/accounts.inc | 54 ++++--- .../prog/en/modules/members/maninvoice.tt | 102 ++++++------ members/maninvoice.pl | 153 ++++++++++-------- 5 files changed, 187 insertions(+), 141 deletions(-) diff --git a/Koha/Account/Line.pm b/Koha/Account/Line.pm index 124aa29153..1f70bb1312 100644 --- a/Koha/Account/Line.pm +++ b/Koha/Account/Line.pm @@ -22,6 +22,7 @@ use Data::Dumper; use C4::Log qw(logaction); +use Koha::Account::DebitType; use Koha::Account::Offsets; use Koha::Database; use Koha::Exceptions::Account; @@ -82,6 +83,19 @@ sub checkout { return $self->{_checkout}; } +=head3 debit_type + +Return the debit_type linked to this account line + +=cut + +sub debit_type { + my ( $self ) = @_; + my $rs = $self->_result->debit_type; + return unless $rs; + return Koha::Account::DebitType->_new_from_dbic( $rs ); +} + =head3 void $payment_accountline->void(); diff --git a/admin/debit_types.pl b/admin/debit_types.pl index a8336e69bb..56bd5fd286 100755 --- a/admin/debit_types.pl +++ b/admin/debit_types.pl @@ -23,6 +23,7 @@ use C4::Context; use C4::Auth; use C4::Output; +use Koha::Account::DebitType; use Koha::Account::DebitTypes; my $input = new CGI; @@ -134,7 +135,9 @@ elsif ( $op eq 'delete_confirmed' ) { if ( $op eq 'list' ) { my $debit_types = Koha::Account::DebitTypes->search(); - $template->param( debit_types => $debit_types ); + $template->param( + debit_types => $debit_types, + ); } $template->param( diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/accounts.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/accounts.inc index 61a31a2687..c863e98e22 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/accounts.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/accounts.inc @@ -1,28 +1,36 @@ [%- BLOCK account_type_description -%] - [%- SWITCH account.accounttype -%] - [%- CASE 'Pay' -%]Payment - [%- CASE 'N' -%]New card - [%- CASE 'OVERDUE' -%]Fine - [%- CASE 'ACCOUNT' -%]Account creation fee - [%- CASE 'ACCOUNT_RENEW' -%]Account renewal fee - [%- CASE 'M' -%]Sundry - [%- CASE 'LOST' -%]Lost item - [%- CASE 'W' -%]Writeoff - [%- CASE 'HE' -%]Hold waiting too long - [%- CASE 'RENT' -%]Rental fee - [%- CASE 'RENT_DAILY' -%]Daily rental fee - [%- CASE 'RENT_RENEW' -%]Renewal of rental item - [%- CASE 'RENT_DAILY_RENEW' -%]Rewewal of daily rental item - [%- CASE 'FOR' -%]Forgiven - [%- CASE 'PF' -%]Lost item processing fee - [%- CASE 'PAY' -%]Payment - [%- CASE 'WO' -%]Writeoff - [%- CASE 'C' -%]Credit - [%- CASE 'LOST_RETURN' -%]Lost item fee refund - [%- CASE 'Res' -%]Hold fee - [%- CASE -%][% account.accounttype | html %] + + [%- IF account.accounttype -%] + [%- SWITCH account.accounttype -%] + [%- CASE 'Pay' -%]Payment + [%- CASE 'W' -%]Writeoff + [%- CASE 'FOR' -%]Forgiven + [%- CASE 'PAY' -%]Payment + [%- CASE 'WO' -%]Writeoff + [%- CASE 'C' -%]Credit + [%- CASE 'LOST_RETURN' -%]Lost item fee refund + [%- CASE -%][% account.accounttype | html %] + [%- END -%] + [%- ELSIF account.debit_type -%] + [%- SWITCH account.debit_type -%] + [%- CASE 'ACCOUNT' -%]Account creation fee + [%- CASE 'ACCOUNT_RENEW' -%]Account renewal fee + [%- CASE 'HE' -%]Hold waiting too long + [%- CASE 'LOST' -%]Lost item + [%- CASE 'M' -%]Sundry + [%- CASE 'N' -%]New card + [%- CASE 'OVERDUE' -%]Fine + [%- CASE 'PF' -%]Lost item processing fee + [%- CASE 'RENT' -%]Rental fee + [%- CASE 'RENT_DAILY' -%]Daily rental fee + [%- CASE 'RENT_RENEW' -%]Renewal of rental item + [%- CASE 'RENT_DAILY_RENEW' -%]Rewewal of daily rental item + [%- CASE 'Res' -%]Hold fee + [%- CASE -%][% account.debit_type.description | html %] + [%- END -%] [%- END -%] - [%- PROCESS account_status_description account=account -%] + [%- PROCESS account_status_description account=account -%] + [%- END -%] [%- BLOCK offset_type_description -%] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt index 2dcb452029..9713cfc27f 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt @@ -1,6 +1,7 @@ [% USE raw %] [% USE Asset %] [% USE Koha %] +[% USE Price %] [% USE Branches %] [% SET footerjs = 1 %] [% INCLUDE 'doc-head-open.inc' %] @@ -12,58 +13,61 @@ [% INCLUDE 'header.inc' %] [% INCLUDE 'patron-search.inc' %] - +
-[% INCLUDE 'members-toolbar.inc' %] + [% INCLUDE 'members-toolbar.inc' %] - -
- -
+ +
+ +
-[% IF ( ERROR ) %] -[% IF ( ITEMNUMBER ) %] - ERROR an invalid itemnumber was entered, please hit back and try again -[% END %] -[% ELSE %] -
- -
- Manual invoice -
    -
  1. - - -
  2. -
  3. -
  4. -
  5. -
  6. Example: 5.00
  7. -
-
Cancel
-
+ [% IF ( ERROR ) %] + [% IF ( ITEMNUMBER ) %] + ERROR an invalid itemnumber was entered, please hit back and try again + [% END %] + [% ELSE %] +
+ +
+ Manual invoice +
    +
  1. + + +
  2. +
  3. +
  4. +
  5. +
  6. Example: 5.00
  7. +
+
+
+ Cancel +
+
-[% END %] -
+ [% END %] +
+
@@ -79,9 +83,9 @@ [% INCLUDE 'str/members-menu.inc' %] [% Asset.js("js/members-menu.js") | $raw %] [% END %] diff --git a/members/maninvoice.pl b/members/maninvoice.pl index 76d224b7bc..3642cd39be 100755 --- a/members/maninvoice.pl +++ b/members/maninvoice.pl @@ -3,9 +3,9 @@ #written 11/1/2000 by chris@katipo.oc.nz #script to display borrowers account details - # Copyright 2000-2002 Katipo Communications # Copyright 2010 BibLibre +# Copyright 2019 PTFS Europe # # This file is part of Koha. # @@ -36,94 +36,105 @@ use Koha::Items; use Koha::Patrons; use Koha::Patron::Categories; +use Koha::Account::DebitTypes; -my $input=new CGI; -my $flagsrequired = { borrowers => 'edit_borrowers' }; +my $input = new CGI; my ( $template, $loggedinuser, $cookie ) = get_template_and_user( - { template_name => "members/maninvoice.tt", + { + template_name => "members/maninvoice.tt", query => $input, type => "intranet", authnotrequired => 0, - flagsrequired => $flagsrequired, - debug => 1, + flagsrequired => { + borrowers => 'edit_borrowers', + updatecharges => 'remaining_permissions' + } } ); -my $borrowernumber=$input->param('borrowernumber'); - -my $patron = Koha::Patrons->find( $borrowernumber ); -unless ( $patron ) { - print $input->redirect("/cgi-bin/koha/circ/circulation.pl?borrowernumber=$borrowernumber"); +my $borrowernumber = $input->param('borrowernumber'); +my $patron = Koha::Patrons->find($borrowernumber); +unless ($patron) { + print $input->redirect( + "/cgi-bin/koha/circ/circulation.pl?borrowernumber=$borrowernumber"); exit; } -my $add=$input->param('add'); -if ($add){ - if ( checkauth( $input, 0, $flagsrequired, 'intranet' ) ) { - output_and_exit( $input, $cookie, $template, 'wrong_csrf_token' ) - unless Koha::Token->new->check_csrf( { - session_id => scalar $input->cookie('CGISESSID'), - token => scalar $input->param('csrf_token'), - }); - # Note: If the logged in user is not allowed to see this patron an invoice can be forced - # Here we are trusting librarians not to hack the system - my $barcode=$input->param('barcode'); - my $itemnum; - if ($barcode) { - my $item = Koha::Items->find({barcode => $barcode}); - $itemnum = $item->itemnumber if $item; - } - my $desc=$input->param('desc'); - my $amount=$input->param('amount'); - my $type=$input->param('type'); - my $note = $input->param('note'); - my $error = C4::Accounts::manualinvoice( $borrowernumber, $itemnum, $desc, $type, $amount, $note ); - if ($error) { - if ( $error =~ /FOREIGN KEY/ && $error =~ /itemnumber/ ) { - $template->param( 'ITEMNUMBER' => 1 ); - } - $template->param( csrf_token => Koha::Token->new->generate_csrf({ session_id => scalar $input->cookie('CGISESSID') }) ); - $template->param( 'ERROR' => $error ); - output_html_with_http_headers $input, $cookie, $template->output; - } else { +my $library_id = C4::Context->userenv->{'branch'}; - if ( C4::Context->preference('AccountAutoReconcile') ) { - $patron->account->reconcile_balance; - } - - print $input->redirect("/cgi-bin/koha/members/boraccount.pl?borrowernumber=$borrowernumber"); - exit; +my $add = $input->param('add'); +if ($add) { + output_and_exit( $input, $cookie, $template, 'wrong_csrf_token' ) + unless Koha::Token->new->check_csrf( + { + session_id => scalar $input->cookie('CGISESSID'), + token => scalar $input->param('csrf_token'), } + ); + +# Note: If the logged in user is not allowed to see this patron an invoice can be forced +# Here we are trusting librarians not to hack the system + my $barcode = $input->param('barcode'); + my $itemnum; + if ($barcode) { + my $item = Koha::Items->find( { barcode => $barcode } ); + $itemnum = $item->itemnumber if $item; } -} else { - - my ($template, $loggedinuser, $cookie) = get_template_and_user({ - template_name => "members/maninvoice.tt", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => { borrowers => 'edit_borrowers', - updatecharges => 'remaining_permissions' }, - debug => 1, - }); + my $desc = $input->param('desc'); + my $amount = $input->param('amount'); + my $type = $input->param('type'); + my $note = $input->param('note'); + my $error = + C4::Accounts::manualinvoice( $borrowernumber, $itemnum, $desc, $type, + $amount, $note ); + if ($error) { + if ( $error =~ /FOREIGN KEY/ && $error =~ /itemnumber/ ) { + $template->param( 'ITEMNUMBER' => 1 ); + } + $template->param( + csrf_token => Koha::Token->new->generate_csrf( + { session_id => scalar $input->cookie('CGISESSID') } + ) + ); + $template->param( 'ERROR' => $error ); + output_html_with_http_headers $input, $cookie, $template->output; + } + else { - 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 } ); + if ( C4::Context->preference('AccountAutoReconcile') ) { + $patron->account->reconcile_balance; + } - # get authorised values with type of MANUAL_INV - my @invoice_types; - my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare('SELECT * FROM authorised_values WHERE category = "MANUAL_INV"'); - $sth->execute(); - while ( my $row = $sth->fetchrow_hashref() ) { - push @invoice_types, $row; - } - $template->param( invoice_types_loop => \@invoice_types ); + print $input->redirect( + "/cgi-bin/koha/members/boraccount.pl?borrowernumber=$borrowernumber" + ); + exit; + } +} +else { + + 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 @debit_types = Koha::Account::DebitTypes->search_with_library_limits( + { can_be_added_manually => 1 }, + {}, $library_id ); + $template->param( debit_types => \@debit_types ); $template->param( - csrf_token => Koha::Token->new->generate_csrf({ session_id => scalar $input->cookie('CGISESSID') }), - patron => $patron, - finesview => 1, + csrf_token => Koha::Token->new->generate_csrf( + { session_id => scalar $input->cookie('CGISESSID') } + ), + patron => $patron, + finesview => 1, ); output_html_with_http_headers $input, $cookie, $template->output; } -- 2.20.1