X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=members%2Fboraccount.pl;h=83fa43bf653b17cb11b756eb08fd7386eebf56e6;hb=909a3f5612340ec8eea7274f8182a7fd4743467f;hp=7f94bf2e45a525b0f02fa0314ca88c66a877da48;hpb=9f112ff75c2049cb3e5a259e38ad27a7282f53d2;p=srvgit diff --git a/members/boraccount.pl b/members/boraccount.pl index 7f94bf2e45..83fa43bf65 100755 --- a/members/boraccount.pl +++ b/members/boraccount.pl @@ -23,17 +23,20 @@ # along with Koha; if not, see . use Modern::Perl; +use URI::Escape qw( uri_unescape ); -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::Members::Attributes qw(GetBorrowerAttributes); +use Koha::Cash::Registers; use Koha::Patrons; use Koha::Patron::Categories; +use Koha::Items; +use Koha::Token; -my $input=new CGI; +my $input=CGI->new; my ($template, $loggedinuser, $cookie) = get_template_and_user( @@ -41,17 +44,20 @@ my ($template, $loggedinuser, $cookie) = get_template_and_user( template_name => "members/boraccount.tt", query => $input, type => "intranet", - authnotrequired => 0, flagsrequired => { borrowers => 'edit_borrowers', updatecharges => 'remaining_permissions'}, - debug => 1, } ); +my $schema = Koha::Database->new->schema; my $borrowernumber = $input->param('borrowernumber'); -my $action = $input->param('action') || ''; +my $payment_id = $input->param('payment_id'); +my $change_given = $input->param('change_given'); +my $action = $input->param('action') || ''; +my @renew_results = $input->multi_param('renew_result'); -my $logged_in_user = Koha::Patrons->find( $loggedinuser ) or die "Not logged in"; +my $logged_in_user = Koha::Patrons->find( $loggedinuser ); +my $library_id = C4::Context->userenv->{'branch'}; my $patron = Koha::Patrons->find( $borrowernumber ); unless ( $patron ) { print $input->redirect("/cgi-bin/koha/circ/circulation.pl?borrowernumber=$borrowernumber"); @@ -60,16 +66,115 @@ unless ( $patron ) { output_and_exit_if_error( $input, $cookie, $template, { module => 'members', logged_in_user => $logged_in_user, current_patron => $patron } ); +my $registerid = $input->param('registerid'); + if ( $action eq 'void' ) { my $payment_id = scalar $input->param('accountlines_id'); my $payment = Koha::Account::Lines->find( $payment_id ); - $payment->void(); + $payment->void( + { + branch => $library_id, + staff_id => $logged_in_user->id, + interface => 'intranet', + } + ); +} + +if ( $action eq 'payout' ) { + my $payment_id = scalar $input->param('accountlines_id'); + my $amount = scalar $input->param('amount'); + my $payout_type = scalar $input->param('payout_type'); + if ( $payment_id eq "" ) { + $schema->txn_do( + sub { + $patron->account->payout_amount( + { + payout_type => $payout_type, + branch => $library_id, + staff_id => $logged_in_user->id, + cash_register => $registerid, + interface => 'intranet', + amount => $amount + } + ); + } + ); + } else { + my $payment = Koha::Account::Lines->find($payment_id); + $schema->txn_do( + sub { + my $payout = $payment->payout( + { + payout_type => $payout_type, + branch => $library_id, + staff_id => $logged_in_user->id, + cash_register => $registerid, + interface => 'intranet', + amount => $amount + } + ); + } + ); + } +} + +if ( $action eq 'refund' ) { + my $charge_id = scalar $input->param('accountlines_id'); + my $charge = Koha::Account::Lines->find($charge_id); + my $amount = scalar $input->param('amount'); + my $refund_type = scalar $input->param('refund_type'); + $schema->txn_do( + sub { + + my $refund = $charge->reduce( + { + reduction_type => 'REFUND', + branch => $library_id, + staff_id => $logged_in_user->id, + interface => 'intranet', + amount => $amount + } + ); + unless ( $refund_type eq 'AC' ) { + my $payout = $refund->payout( + { + payout_type => $refund_type, + branch => $library_id, + staff_id => $logged_in_user->id, + cash_register => $registerid, + interface => 'intranet', + amount => $amount + } + ); + } + } + ); +} + +if ( $action eq 'discount' ) { + my $charge_id = scalar $input->param('accountlines_id'); + my $charge = Koha::Account::Lines->find($charge_id); + my $amount = scalar $input->param('amount'); + $schema->txn_do( + sub { + + my $discount = $charge->reduce( + { + reduction_type => 'DISCOUNT', + branch => $library_id, + staff_id => $logged_in_user->id, + interface => 'intranet', + amount => $amount + } + ); + } + ); } #get account details my $total = $patron->account->balance; -my @accountlines = Koha::Account::Lines->search( +my $accountlines = Koha::Account::Lines->search( { borrowernumber => $patron->borrowernumber }, { order_by => { -desc => 'accountlines_id' } } ); @@ -79,23 +184,36 @@ if($total <= 0){ $totalcredit = 1; } -my $reverse_col = 0; # Flag whether we need to show the reverse column - -if (C4::Context->preference('ExtendedPatronAttributes')) { - my $attributes = GetBorrowerAttributes($borrowernumber); - $template->param( - ExtendedPatronAttributes => 1, - extendedattributes => $attributes - ); +# Populate an arrayref with everything we need to display any +# renew errors 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 + }; } +my $csrf_token = Koha::Token->new->generate_csrf({ + session_id => scalar $input->cookie('CGISESSID'), +}); + $template->param( patron => $patron, finesview => 1, total => sprintf("%.2f",$total), totalcredit => $totalcredit, - reverse_col => $reverse_col, - accounts => \@accountlines, + accounts => $accountlines, + payment_id => $payment_id, + change_given => $change_given, + renew_results => $renew_results_display, + csrf_token => $csrf_token, ); output_html_with_http_headers $input, $cookie, $template->output;