X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=members%2Fpay.pl;h=27181164ad186c3f5cec2c3c6f49dc12b8352cf8;hb=9d6d641d1f8b77271800f43bc027b651f9aea52b;hp=3400ee06676bf5eca1be2a421b404f9762c1e8df;hpb=bb22703dcaa53400c17674b8bb7ba1cf76dffac8;p=srvgit diff --git a/members/pay.pl b/members/pay.pl index 3400ee0667..27181164ad 100755 --- a/members/pay.pl +++ b/members/pay.pl @@ -26,24 +26,23 @@ =cut -use strict; -use warnings; +use Modern::Perl; -use URI::Escape; +use URI::Escape qw( uri_escape_utf8 uri_unescape ); use C4::Context; -use C4::Auth; -use C4::Output; +use C4::Auth qw( get_template_and_user ); +use C4::Output qw( output_and_exit_if_error output_and_exit output_html_with_http_headers ); use CGI qw ( -utf8 ); use C4::Members; use C4::Accounts; use C4::Stats; use C4::Koha; use C4::Overdues; -use C4::Members::Attributes qw(GetBorrowerAttributes); -use Koha::Patron::Images; +use Koha::Patrons; +use Koha::Items; use Koha::Patron::Categories; -use URI::Escape; +use URI::Escape qw( uri_escape_utf8 uri_unescape ); our $input = CGI->new; @@ -52,9 +51,7 @@ our ( $template, $loggedinuser, $cookie ) = get_template_and_user( { template_name => 'members/pay.tt', query => $input, type => 'intranet', - authnotrequired => 0, - flagsrequired => { borrowers => 1, updatecharges => $updatecharges_permissions }, - debug => 1, + flagsrequired => { borrowers => 'edit_borrowers', updatecharges => $updatecharges_permissions }, } ); @@ -65,41 +62,69 @@ if ( !$borrowernumber ) { $borrowernumber = $input->param('borrowernumber0'); } +my $payment_id = $input->param('payment_id'); +our $change_given = $input->param('change_given'); +our @renew_results = $input->multi_param('renew_result'); + # get borrower details -our $borrower = GetMember( borrowernumber => $borrowernumber ); +my $logged_in_user = Koha::Patrons->find( $loggedinuser ); +our $patron = Koha::Patrons->find($borrowernumber); +output_and_exit_if_error( $input, $cookie, $template, { module => 'members', logged_in_user => $logged_in_user, current_patron => $patron } ); + our $user = $input->remote_user; $user ||= q{}; our $branch = C4::Context->userenv->{'branch'}; -my $writeoff_item = $input->param('confirm_writeoff'); -my $paycollect = $input->param('paycollect'); -if ($paycollect) { +if ( $input->param('paycollect') ) { print $input->redirect( - "/cgi-bin/koha/members/paycollect.pl?borrowernumber=$borrowernumber"); + "/cgi-bin/koha/members/paycollect.pl?borrowernumber=$borrowernumber&change_given=$change_given"); } -my $payselected = $input->param('payselected'); -if ($payselected) { - payselected(@names); +elsif ( $input->param('payselected') ) { + payselected({ params => \@names }); } - -my $writeoff_all = $input->param('woall'); # writeoff all fines -if ($writeoff_all) { +elsif ( $input->param('writeoff_selected') ) { + payselected({ params => \@names, type => 'WRITEOFF' }); +} +elsif ( $input->param('woall') ) { writeoff_all(@names); -} elsif ($writeoff_item) { +} +elsif ( $input->param('apply_credits') ) { + apply_credits({ patron => $patron, cgi => $input }); +} +elsif ( $input->param('confirm_writeoff') ) { + my $item_id = $input->param('itemnumber'); my $accountlines_id = $input->param('accountlines_id'); - my $amount = $input->param('amountoutstanding'); - my $payment_note = $input->param("payment_note"); - - Koha::Account->new( { patron_id => $borrowernumber } )->pay( - { - amount => $amount, - lines => [ scalar Koha::Account::Lines->find($accountlines_id) ], - type => 'writeoff', - note => $payment_note, - library_id => $branch, - } - ); + my $amount = $input->param('amountwrittenoff'); + my $payment_note = $input->param("payment_note"); + + my $accountline = Koha::Account::Lines->find( $accountlines_id ); + + $amount = $accountline->amountoutstanding if (abs($amount - $accountline->amountoutstanding) < 0.01) && C4::Context->preference('RoundFinesAtPayment'); + if ( $amount > $accountline->amountoutstanding ) { + print $input->redirect( "/cgi-bin/koha/members/paycollect.pl?" + . "borrowernumber=$borrowernumber" + . "&amount=" . $accountline->amount + . "&amountoutstanding=" . $accountline->amountoutstanding + . "&debit_type_code=" . $accountline->debit_type_code + . "&accountlines_id=" . $accountlines_id + . "&change_given=" . $change_given + . "&writeoff_individual=1" + . "&error_over=1" ); + + } else { + $payment_id = Koha::Account->new( { patron_id => $borrowernumber } )->pay( + { + amount => $amount, + lines => [ Koha::Account::Lines->find($accountlines_id) ], + type => 'WRITEOFF', + note => $payment_note, + interface => C4::Context->interface, + item_id => $item_id, + library_id => $branch, + } + )->{payment_id}; + } } for (@names) { @@ -112,9 +137,27 @@ for (@names) { } } +# Populate an arrayref with everything we need to display any +# renew results that occurred based on what we were passed +my $renew_results_display = []; +foreach my $renew_result(@renew_results) { + my ($itemnumber, $success, $info) = split(/,/, $renew_result); + my $item = Koha::Items->find($itemnumber); + if ($success) { + $info = uri_unescape($info); + } + push @{$renew_results_display}, { + item => $item, + success => $success, + info => $info + }; +} + $template->param( - finesview => 1, - RoutingSerials => C4::Context->preference('RoutingSerials'), + finesview => 1, + payment_id => $payment_id, + change_given => $change_given, + renew_results => $renew_results_display ); add_accounts_to_template(); @@ -123,35 +166,23 @@ output_html_with_http_headers $input, $cookie, $template->output; sub add_accounts_to_template { - my ( $total, undef, undef ) = GetMemberAccountRecords($borrowernumber); - my $accounts = []; - my @notify = NumberNotifyId($borrowernumber); - - my $notify_groups = []; - for my $notify_id (@notify) { - my ( $acct_total, $accountlines, undef ) = - GetBorNotifyAcctRecord( $borrowernumber, $notify_id ); - if ( @{$accountlines} ) { - my $totalnotify = AmountNotify( $notify_id, $borrowernumber ); - push @{$accounts}, - { accountlines => $accountlines, - notify => $notify_id, - total => $totalnotify, - }; - } + my $patron = Koha::Patrons->find( $borrowernumber ); + my $account = $patron->account; + my $outstanding_credits = $account->outstanding_credits; + my $account_lines = $account->outstanding_debits; + my $total = $account_lines->total_outstanding; + my @accounts; + while ( my $account_line = $account_lines->next ) { + push @accounts, $account_line; } - borrower_add_additional_fields($borrower); - - $template->param(%$borrower); - my $patron_image = Koha::Patron::Images->find($borrower->{borrowernumber}); - $template->param( picture => 1 ) if $patron_image; $template->param( - accounts => $accounts, - borrower => $borrower, - categoryname => $borrower->{'description'}, + patron => $patron, + accounts => \@accounts, total => $total, + outstanding_credits => $outstanding_credits ); + return; } @@ -159,7 +190,10 @@ sub add_accounts_to_template { sub get_for_redirect { my ( $name, $name_in, $money ) = @_; my $s = q{&} . $name . q{=}; - my $value = uri_escape_utf8( $input->param($name_in) ); + my $value; + if (defined $input->param($name_in)) { + $value = uri_escape_utf8( scalar $input->param($name_in) ); + } if ( !defined $value ) { $value = ( $money == 1 ) ? 0 : q{}; } @@ -177,18 +211,17 @@ sub redirect_to_paycollect { "/cgi-bin/koha/members/paycollect.pl?borrowernumber=$borrowernumber"; $redirect .= q{&}; $redirect .= "$action=1"; - $redirect .= get_for_redirect( 'accounttype', "accounttype$line_no", 0 ); + $redirect .= get_for_redirect( 'debit_type_code', "debit_type_code$line_no", 0 ); $redirect .= get_for_redirect( 'amount', "amount$line_no", 1 ); $redirect .= get_for_redirect( 'amountoutstanding', "amountoutstanding$line_no", 1 ); $redirect .= get_for_redirect( 'description', "description$line_no", 0 ); $redirect .= get_for_redirect( 'title', "title$line_no", 0 ); $redirect .= get_for_redirect( 'itemnumber', "itemnumber$line_no", 0 ); - $redirect .= get_for_redirect( 'notify_id', "notify_id$line_no", 0 ); - $redirect .= get_for_redirect( 'notify_level', "notify_level$line_no", 0 ); $redirect .= get_for_redirect( 'accountlines_id', "accountlines_id$line_no", 0 ); - $redirect .= q{&} . 'payment_note' . q{=} . uri_escape_utf8( $input->param("payment_note_$line_no") ); + $redirect .= q{&} . 'payment_note' . q{=} . uri_escape_utf8( scalar $input->param("payment_note_$line_no") ); $redirect .= '&remote_user='; + $redirect .= "change_given=$change_given"; $redirect .= $user; return print $input->redirect($redirect); } @@ -208,9 +241,10 @@ sub writeoff_all { Koha::Account->new( { patron_id => $borrowernumber } )->pay( { amount => $amount, - lines => [ scalar Koha::Account::Lines->find($accountlines_id) ], - type => 'writeoff', + lines => [ Koha::Account::Lines->find($accountlines_id) ], + type => 'WRITEOFF', note => $payment_note, + interface => C4::Context->interface, library_id => $branch, } ); @@ -221,46 +255,27 @@ sub writeoff_all { return; } -sub borrower_add_additional_fields { - my $b_ref = shift; - -# some borrower info is not returned in the standard call despite being assumed -# in a number of templates. It should not be the business of this script but in lieu of -# a revised api here it is ... - if ( $b_ref->{category_type} eq 'C' ) { - my $patron_categories = Koha::Patron::Categories->search_limited({ category_type => 'A' }, {order_by => ['categorycode']}); - $template->param( 'CATCODE_MULTI' => 1) if $patron_categories->count > 1; - $template->param( 'catcode' => $patron_categories->next ) if $patron_categories->count == 1; - } elsif ( $b_ref->{category_type} eq 'A' || $b_ref->{category_type} eq 'I' ) { - $b_ref->{adultborrower} = 1; - } - - if (C4::Context->preference('ExtendedPatronAttributes')) { - $b_ref->{extendedattributes} = GetBorrowerAttributes($borrowernumber); - $template->param( - ExtendedPatronAttributes => 1, - ); - } +sub payselected { + my $parameters = shift; - return; -} + my @params = @{ $parameters->{params} }; + my $type = $parameters->{type} || 'PAYMENT'; -sub payselected { - my @params = @_; my $amt = 0; my @lines_to_pay; foreach (@params) { if (/^incl_par_(\d+)$/) { my $index = $1; - push @lines_to_pay, $input->param("accountlines_id$index"); + push @lines_to_pay, scalar $input->param("accountlines_id$index"); $amt += $input->param("amountoutstanding$index"); } } $amt = '&amt=' . $amt; my $sel = '&selected=' . join ',', @lines_to_pay; - my $notes = '¬es=' . join("%0A", map { $input->param("payment_note_$_") } @lines_to_pay ); + my $notes = '¬es=' . join("%0A", map { scalar $input->param("payment_note_$_") } @lines_to_pay ); my $redirect = "/cgi-bin/koha/members/paycollect.pl?borrowernumber=$borrowernumber" + . "&type=$type" . $amt . $sel . $notes; @@ -268,3 +283,15 @@ sub payselected { print $input->redirect($redirect); return; } + +sub apply_credits { + my ($args) = @_; + + my $patron = $args->{patron}; + my $cgi = $args->{cgi}; + + $patron->account->reconcile_balance(); + + print $cgi->redirect("/cgi-bin/koha/members/pay.pl?borrowernumber=" . $patron->borrowernumber ); + return; +}