Bug 34478: Manual fix - add op - members/mancredit
[koha.git] / members / mancredit.pl
1 #!/usr/bin/perl
2
3 #written 11/1/2000 by chris@katipo.oc.nz
4 #script to display borrowers account details
5
6 # Copyright 2000-2002 Katipo Communications
7 # Copyright 2010 BibLibre
8 #
9 # This file is part of Koha.
10 #
11 # Koha is free software; you can redistribute it and/or modify it
12 # under the terms of the GNU General Public License as published by
13 # the Free Software Foundation; either version 3 of the License, or
14 # (at your option) any later version.
15 #
16 # Koha is distributed in the hope that it will be useful, but
17 # WITHOUT ANY WARRANTY; without even the implied warranty of
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 # GNU General Public License for more details.
20 #
21 # You should have received a copy of the GNU General Public License
22 # along with Koha; if not, see <http://www.gnu.org/licenses>.
23
24 use Modern::Perl;
25
26 use C4::Auth qw( get_template_and_user );
27 use C4::Output qw( output_and_exit_if_error output_and_exit output_html_with_http_headers );
28 use CGI qw ( -utf8 );
29
30 use C4::Members;
31 use C4::Accounts;
32
33 use Koha::Items;
34 use Koha::Patrons;
35 use Koha::Patron::Categories;
36 use Koha::Account::CreditTypes;
37 use Koha::AdditionalFields;
38
39 my $input = CGI->new;
40 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
41     {
42         template_name   => "members/mancredit.tt",
43         query           => $input,
44         type            => "intranet",
45         flagsrequired   => {
46             borrowers     => 'edit_borrowers',
47             updatecharges => 'manual_credit'
48         }
49     }
50 );
51
52 my $logged_in_user = Koha::Patrons->find($loggedinuser);
53 my $borrowernumber = $input->param('borrowernumber');
54 my $patron         = Koha::Patrons->find($borrowernumber);
55
56 output_and_exit_if_error(
57     $input, $cookie,
58     $template,
59     {
60         module         => 'members',
61         logged_in_user => $logged_in_user,
62         current_patron => $patron
63     }
64 );
65
66 my $library_id =
67   C4::Context->userenv ? C4::Context->userenv->{'branch'} : undef;
68
69 my $op = $input->param('op') // q{};
70 if ( $op eq 'cud-add' ) {
71
72 # Note: If the logged in user is not allowed to see this patron an invoice can be forced
73 # Here we are trusting librarians not to hack the system
74     my $barcode = $input->param('barcode');
75     my $item_id;
76     if ($barcode) {
77         my $item = Koha::Items->find( { barcode => $barcode } );
78         $item_id = $item->itemnumber if $item;
79     }
80     my $description      = $input->param('desc');
81     my $note             = $input->param('note');
82     my $amount           = $input->param('amount') || 0;
83     my $type             = $input->param('type');
84     my $credit_type      = $input->param('credit_type');
85     my $cash_register_id = $input->param('cash_register');
86
87     my $line = $patron->account->add_credit(
88         {
89             amount        => $amount,
90             description   => $description,
91             item_id       => $item_id,
92             library_id    => $library_id,
93             note          => $note,
94             type          => $type,
95             user_id       => $logged_in_user->id,
96             interface     => C4::Context->interface,
97             payment_type  => $credit_type,
98             cash_register => $cash_register_id
99         }
100     );
101
102     my @additional_fields;
103     my $accountline_fields = Koha::AdditionalFields->search({ tablename => 'accountlines:credit' });
104     while ( my $field = $accountline_fields->next ) {
105         my $value = $input->param('additional_field_' . $field->id);
106         if (defined $value) {
107             push @additional_fields, {
108                 id => $field->id,
109                 value => $value,
110             };
111         }
112     }
113     if (@additional_fields) {
114         $line->set_additional_fields(\@additional_fields);
115     }
116
117     if ( C4::Context->preference('AccountAutoReconcile') ) {
118         $patron->account->reconcile_balance;
119     }
120
121     print $input->redirect(
122         "/cgi-bin/koha/members/boraccount.pl?borrowernumber=$borrowernumber");
123     exit;
124 }
125 else {
126
127     my @credit_types = Koha::Account::CreditTypes->search_with_library_limits(
128         { can_be_added_manually => 1, archived => 0 },
129         {}, $library_id )->as_list;
130
131     $template->param(
132         patron       => $patron,
133         credit_types => \@credit_types,
134         finesview    => 1,
135         available_additional_fields => [ Koha::AdditionalFields->search({ tablename => 'accountlines:credit' })->as_list ],
136     );
137     output_html_with_http_headers $input, $cookie, $template->output;
138 }