From 5f00877fb5ad1e2e34d950554873bd147beaa4d9 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Tue, 12 Nov 2019 12:23:32 +0000 Subject: [PATCH] Bug 22393: Remove last remaining use of C4::Accounts::manualinvoice --- .../prog/en/modules/members/maninvoice.tt | 103 ++++++++----- members/maninvoice.pl | 142 +++++++++++------- 2 files changed, 148 insertions(+), 97 deletions(-) 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 9713cfc27f..1b6347d522 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt @@ -24,51 +24,72 @@
- [% 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 %] +
+ An error occurred when adding this manual invoice: + [% SWITCH error %] + [% CASE 'debit_type_code' %] + Debit type not found. + [% CASE 'itemnumber' %] + Item not found. + [% CASE 'register_id' %] + Cash register not found. + [% CASE '1' %] + An unhandled error occurred, please check your logs + [% END %] +
+ [% END %] - [% END %] -
-
+
+ +
+ Manual invoice +
    +
  1. + + +
  2. +
  3. + + +
  4. +
  5. + + +
  6. +
  7. + + +
  8. +
  9. + + Example: 5.00 +
  10. +
+
+
+ Cancel +
+
+
+
diff --git a/members/maninvoice.pl b/members/maninvoice.pl index a54206fb74..6681da4016 100755 --- a/members/maninvoice.pl +++ b/members/maninvoice.pl @@ -23,6 +23,7 @@ # along with Koha; if not, see . use Modern::Perl; +use Try::Tiny; use C4::Auth; use C4::Output; @@ -60,6 +61,17 @@ unless ($patron) { exit; } +my $logged_in_user = Koha::Patrons->find($loggedinuser); +output_and_exit_if_error( + $input, $cookie, + $template, + { + module => 'members', + logged_in_user => $logged_in_user, + current_patron => $patron + } +); + my $library_id = C4::Context->userenv->{'branch'}; my $add = $input->param('add'); @@ -72,69 +84,87 @@ if ($add) { } ); -# 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 + # 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 $desc = $input->param('desc'); + my $amount = $input->param('amount'); + my $note = $input->param('note'); + my $debit_type = $input->param('type'); + + # If LOST try to match barcode to Item and then try to match Item + Borrower to an Issue. + my $failed; + my $item_id; 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 ); + if ($item) { + $item_id = $item->itemnumber; + } + else { + $template->param( error => 'itemnumber' ); + $failed = 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 $issue_id; + if ( $debit_type eq 'LOST' && $item_id ) { + my $checkouts = Koha::Checkouts->search( + { itemnumber => $item_id, borrowernumber => $borrowernumber } ); + my $checkout = + $checkouts->count + ? $checkouts->next + : Koha::Old::Checkouts->search( + { itemnumber => $item_id, borrowernumber => $borrowernumber }, + { order_by => { -desc => 'returndate' }, rows => 1 } + )->next; + $issue_id = $checkout ? $checkout->issue_id : undef; + } - if ( C4::Context->preference('AccountAutoReconcile') ) { - $patron->account->reconcile_balance; - } + unless ($failed) { + try { + $patron->account->add_debit( + { + amount => $amount, + description => $desc, + note => $note, + user_id => $logged_in_user->borrowernumber, + interface => 'intranet', + library_id => $library_id, + type => $debit_type, + item_id => $item_id, + issue_id => $issue_id + } + ); - print $input->redirect( - "/cgi-bin/koha/members/boraccount.pl?borrowernumber=$borrowernumber" - ); - exit; - } -} -else { + if ( C4::Context->preference('AccountAutoReconcile') ) { + $patron->account->reconcile_balance; + } - 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 + print $input->redirect( + "/cgi-bin/koha/members/boraccount.pl?borrowernumber=$borrowernumber" + ); + exit; + } + catch { + my $error = $_; + if ( ref($error) eq 'Koha::Exceptions::Object::FKConstraint' ) { + $template->param( error => $error->broken_fk ); + } else { + $template->param( error => '1' ); + } } - ); - - my @debit_types = Koha::Account::DebitTypes->search_with_library_limits( - { can_be_added_manually => 1, archived => 0 }, - {}, $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, - ); - output_html_with_http_headers $input, $cookie, $template->output; + } } + +my @debit_types = Koha::Account::DebitTypes->search_with_library_limits( + { can_be_added_manually => 1, archived => 0 }, + {}, $library_id ); + +$template->param( + debit_types => \@debit_types, + 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