X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=members%2Fpay.pl;h=2f967b34a33f40346626cceeefd80163e205212f;hb=c95f5c17a6b1e41be28819f79ebb0e6fa8f015e8;hp=b2e3a1f904fa216c529eb7241e3455708691f349;hpb=bb0c2fce1b87222933bfa5dd02ca614521ba2a0c;p=koha.git diff --git a/members/pay.pl b/members/pay.pl index b2e3a1f904..2f967b34a3 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; @@ -39,8 +38,11 @@ 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; @@ -50,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, } ); @@ -63,34 +65,56 @@ 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('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'); - my $payment_note = $input->param("payment_note"); - WriteOffFee( $borrowernumber, $accountlines_id, $itemno, $account_type, $amount, $branch, $payment_note ); + 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) { @@ -105,8 +129,6 @@ for (@names) { $template->param( finesview => 1, - activeBorrowerRelationship => (C4::Context->preference('borrowerRelationship') ne ''), - RoutingSerials => C4::Context->preference('RoutingSerials'), ); add_accounts_to_template(); @@ -115,33 +137,25 @@ 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_lines = $patron->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 ($picture, $dberror) = GetPatronImage($borrower->{'borrowernumber'}); - $template->param( picture => 1 ) if $picture; $template->param( - accounts => $accounts, - borrower => $borrower, - categoryname => $borrower->{'description'}, + patron => $patron, + accounts => \@accounts, total => $total, ); return; @@ -151,7 +165,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{}; } @@ -173,12 +190,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( '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( $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 .= $user; return print $input->redirect($redirect); @@ -187,78 +203,75 @@ sub redirect_to_paycollect { sub writeoff_all { my @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 $value = $1; + my $amount = $input->param("amountoutstanding$value"); my $accountlines_id = $input->param("accountlines_id$value"); - my $payment_note = $input->param("payment_note_$value"); - WriteOffFee( $borrowernumber, $accountlines_id, $itemno, $accounttype, $amount, $branch, $payment_note ); + 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->{borrowernumber} ); - if ($picture) { - $b_ref->{has_picture} = 1; + if ( $patron->is_child ) { + 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->categorycode ) if $patron_categories->count == 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("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;