From ab78d70c546616e5fa741232025a33bd92fa4144 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 | 105 +++++++++------- members/maninvoice.pl | 119 ++++++++++-------- 2 files changed, 133 insertions(+), 91 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..3e81514981 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 %] +
+ An error ocurred 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 occured, please check your logs + [% END %] +
+ [% END %] - [% 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 %] +
+ +
+ 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..39e6d3b1d2 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,34 +84,48 @@ 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 $item_id; my $barcode = $input->param('barcode'); - my $itemnum; if ($barcode) { my $item = Koha::Items->find( { barcode => $barcode } ); - $itemnum = $item->itemnumber if $item; + $item_id = $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; + 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; } - else { + + 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 + } + ); if ( C4::Context->preference('AccountAutoReconcile') ) { $patron->account->reconcile_balance; @@ -110,31 +136,26 @@ if ($add) { ); 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 + 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