X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=members%2Fpay.pl;h=848141906e2171905c637468c18ec13f90e911de;hb=831531d3bbd0e440693595d0b4fadc704b020d68;hp=70e45e2098155021a7c0d725f6961b355ea9969f;hpb=ddf494b18f6c422d3654b0a78a63be86f5356065;p=koha.git diff --git a/members/pay.pl b/members/pay.pl index 70e45e2098..848141906e 100755 --- a/members/pay.pl +++ b/members/pay.pl @@ -26,8 +26,7 @@ =cut -use strict; -use warnings; +use Modern::Perl; use URI::Escape; use C4::Context; @@ -41,7 +40,6 @@ use C4::Koha; use C4::Overdues; use C4::Members::Attributes qw(GetBorrowerAttributes); use Koha::Patrons; -use Koha::Patron::Images; use Koha::Patron::Categories; use URI::Escape; @@ -54,7 +52,7 @@ our ( $template, $loggedinuser, $cookie ) = get_template_and_user( query => $input, type => 'intranet', authnotrequired => 0, - flagsrequired => { borrowers => 1, updatecharges => $updatecharges_permissions }, + flagsrequired => { borrowers => 'edit_borrowers', updatecharges => $updatecharges_permissions }, debug => 1, } ); @@ -67,48 +65,59 @@ if ( !$borrowernumber ) { } # get borrower details -my $patron = Koha::Patrons->find( $borrowernumber ); -unless ( $patron ) { - print $input->redirect("/cgi-bin/koha/circ/circulation.pl?borrowernumber=$borrowernumber"); - exit; -} -my $category = $patron->category; -our $borrower = $patron->unblessed; -$borrower->{description} = $category->description; -$borrower->{category_type} = $category->category_type; +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{}; 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 $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 ); + + 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) { @@ -123,7 +132,6 @@ for (@names) { $template->param( finesview => 1, - RoutingSerials => C4::Context->preference('RoutingSerials'), ); add_accounts_to_template(); @@ -132,35 +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(%$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; } @@ -196,8 +200,6 @@ sub redirect_to_paycollect { $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='; @@ -234,22 +236,15 @@ sub writeoff_all { } 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 $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); + my $extendedattributes = GetBorrowerAttributes($patron->borrowernumber); $template->param( + extendedattributes => $extendedattributes, ExtendedPatronAttributes => 1, ); } @@ -258,7 +253,11 @@ sub borrower_add_additional_fields { } 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) { @@ -273,6 +272,7 @@ sub payselected { 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; @@ -280,3 +280,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; +}