X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=members%2Fpay.pl;h=848141906e2171905c637468c18ec13f90e911de;hb=d561273ef84f4bc2534ac63d0f8793c9eb2a7fb9;hp=4b918aefd9e6b7cfff67b5f716801f1b9682bbf1;hpb=9b8a5274732edd0bbcf3dd80b82c00b182a292da;p=koha.git diff --git a/members/pay.pl b/members/pay.pl index 4b918aefd9..848141906e 100755 --- a/members/pay.pl +++ b/members/pay.pl @@ -6,18 +6,18 @@ # # This file is part of Koha. # -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. # -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along -# with Koha; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . =head1 pay.pl @@ -26,29 +26,33 @@ =cut -use strict; -use warnings; +use Modern::Perl; +use URI::Escape; use C4::Context; use C4::Auth; use C4::Output; -use CGI; +use CGI qw ( -utf8 ); use C4::Members; use C4::Accounts; use C4::Stats; use C4::Koha; use C4::Overdues; -use C4::Branch; use C4::Members::Attributes qw(GetBorrowerAttributes); +use Koha::Patrons; + +use Koha::Patron::Categories; +use URI::Escape; our $input = CGI->new; +my $updatecharges_permissions = $input->param('woall') ? 'writeoff' : 'remaining_permissions'; our ( $template, $loggedinuser, $cookie ) = get_template_and_user( - { template_name => 'members/pay.tmpl', + { template_name => 'members/pay.tt', query => $input, type => 'intranet', authnotrequired => 0, - flagsrequired => { borrowers => 1, updatecharges => 1 }, + flagsrequired => { borrowers => 'edit_borrowers', updatecharges => $updatecharges_permissions }, debug => 1, } ); @@ -61,33 +65,59 @@ if ( !$borrowernumber ) { } # get borrower details -our $borrower = GetMember( borrowernumber => $borrowernumber ); +my $logged_in_user = Koha::Patrons->find( $loggedinuser ) or die "Not logged in"; +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{}; -my $branches = GetBranches(); -our $branch = GetBranch( $input, $branches ); +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"); } -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 $accountlines_id = $input->param('accountlines_id'); - my $itemno = $input->param('itemnumber'); - my $account_type = $input->param('accounttype'); - my $amount = $input->param('amountoutstanding'); - WriteOffFee( $borrowernumber, $accountlines_id, $itemno, $account_type, $amount ); + my $amount = $input->param('amountwrittenoff'); + my $payment_note = $input->param("payment_note"); + + my $accountline = Koha::Account::Lines->find( $accountlines_id ); + + if ( $amount > $accountline->amountoutstanding ) { + print $input->redirect( "/cgi-bin/koha/members/paycollect.pl?" + . "borrowernumber=$borrowernumber" + . "&amount=" . $accountline->amount + . "&amountoutstanding=" . $accountline->amountoutstanding + . "&accounttype=" . $accountline->accounttype + . "&accountlines_id=" . $accountlines_id + . "&writeoff_individual=1" + . "&error_over=1" ); + + } else { + 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, + } + ); + } } for (@names) { @@ -100,7 +130,9 @@ for (@names) { } } -$template->param( activeBorrowerRelationship => (C4::Context->preference('borrowerRelationship') ne '') ); +$template->param( + finesview => 1, +); add_accounts_to_template(); @@ -108,29 +140,31 @@ 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 ) { + $account_line = $account_line->unblessed; + if ( $account_line->{itemnumber} ) { + my $item = Koha::Items->find( $account_line->{itemnumber} ); + my $biblio = $item->biblio; + $account_line->{biblionumber} = $biblio->biblionumber; + $account_line->{title} = $biblio->title; } + push @accounts, $account_line; } - borrower_add_additional_fields($borrower); + borrower_add_additional_fields($patron); + $template->param( - accounts => $accounts, - borrower => $borrower, + patron => $patron, + accounts => \@accounts, total => $total, + outstanding_credits => $outstanding_credits ); + return; } @@ -138,7 +172,10 @@ sub add_accounts_to_template { sub get_for_redirect { my ( $name, $name_in, $money ) = @_; my $s = q{&} . $name . q{=}; - my $value = $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{}; } @@ -160,13 +197,11 @@ sub redirect_to_paycollect { $redirect .= get_for_redirect( 'amount', "amount$line_no", 1 ); $redirect .= get_for_redirect( 'amountoutstanding', "amountoutstanding$line_no", 1 ); - $redirect .= get_for_redirect( 'accountno', "accountno$line_no", 0 ); - $redirect .= get_for_redirect( 'description', "description$line_no", 0 ); - $redirect .= get_for_redirect( 'title', "title$line_no", 0 ); + $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( scalar $input->param("payment_note_$line_no") ); $redirect .= '&remote_user='; $redirect .= $user; return print $input->redirect($redirect); @@ -174,80 +209,86 @@ sub redirect_to_paycollect { sub writeoff_all { my @params = @_; - my @wo_lines = grep { /^accountno\d+$/ } @params; + my @wo_lines = grep { /^accountlines_id\d+$/ } @params; + + my $borrowernumber = $input->param('borrowernumber'); + for (@wo_lines) { if (/(\d+)/) { - my $value = $1; - my $accounttype = $input->param("accounttype$value"); - - # my $borrowernum = $input->param("borrowernumber$value"); - my $itemno = $input->param("itemnumber$value"); - my $amount = $input->param("amountoutstanding$value"); - my $accountno = $input->param("accountno$value"); + my $value = $1; + my $amount = $input->param("amountoutstanding$value"); my $accountlines_id = $input->param("accountlines_id$value"); - WriteOffFee( $borrowernumber, $accountlines_id, $itemno, $accounttype, $amount ); + my $payment_note = $input->param("payment_note_$value"); + 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, + } + ); } } - $borrowernumber = $input->param('borrowernumber'); - print $input->redirect( - "/cgi-bin/koha/members/boraccount.pl?borrowernumber=$borrowernumber"); + print $input->redirect("/cgi-bin/koha/members/boraccount.pl?borrowernumber=$borrowernumber"); return; } sub borrower_add_additional_fields { - my $b_ref = shift; + my $patron = 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 ( $catcodes, $labels ) = - GetborCatFromCatType( 'A', 'WHERE category_type = ?' ); - if ( @{$catcodes} ) { - if ( @{$catcodes} > 1 ) { - $b_ref->{CATCODE_MULTI} = 1; - } elsif ( @{$catcodes} == 1 ) { - $b_ref->{catcode} = $catcodes->[0]; - } - } - } elsif ( $b_ref->{category_type} eq 'A' ) { - $b_ref->{adultborrower} = 1; - } - my ( $picture, $dberror ) = GetPatronImage( $b_ref->{cardnumber} ); - if ($picture) { - $b_ref->{has_picture} = 1; - } - if (C4::Context->preference('ExtendedPatronAttributes')) { - $b_ref->{extendedattributes} = GetBorrowerAttributes($borrowernumber); + my $extendedattributes = GetBorrowerAttributes($patron->borrowernumber); $template->param( + extendedattributes => $extendedattributes, ExtendedPatronAttributes => 1, ); } - $b_ref->{branchname} = GetBranchName( $b_ref->{branchcode} ); return; } sub payselected { - my @params = @_; + my $parameters = shift; + + my @params = @{ $parameters->{params} }; + my $type = $parameters->{type} || 'payment'; + my $amt = 0; my @lines_to_pay; foreach (@params) { if (/^incl_par_(\d+)$/) { my $index = $1; - push @lines_to_pay, $input->param("accountno$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 { scalar $input->param("payment_note_$_") } @lines_to_pay ); my $redirect = "/cgi-bin/koha/members/paycollect.pl?borrowernumber=$borrowernumber" + . "&type=$type" . $amt - . $sel; + . $sel + . $notes; 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; +}