Bug 23805: Update mancredit to use the new credit types
[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;
27 use C4::Output;
28 use CGI qw ( -utf8 );
29
30 use C4::Members;
31 use C4::Accounts;
32 use C4::Items;
33
34 use Koha::Items;
35 use Koha::Patrons;
36 use Koha::Patron::Categories;
37 use Koha::Account::CreditTypes;
38
39 use Koha::Token;
40
41 my $input = new CGI;
42 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
43     {
44         template_name   => "members/mancredit.tt",
45         query           => $input,
46         type            => "intranet",
47         authnotrequired => 0,
48         flagsrequired   => {
49             borrowers     => 'edit_borrowers',
50             updatecharges => 'remaining_permissions'
51         }
52     }
53 );
54
55 my $logged_in_user = Koha::Patrons->find($loggedinuser) or die "Not logged in";
56 my $borrowernumber = $input->param('borrowernumber');
57 my $patron         = Koha::Patrons->find($borrowernumber);
58
59 output_and_exit_if_error(
60     $input, $cookie,
61     $template,
62     {
63         module         => 'members',
64         logged_in_user => $logged_in_user,
65         current_patron => $patron
66     }
67 );
68
69 my $library_id =
70   C4::Context->userenv ? C4::Context->userenv->{'branch'} : undef;
71
72 my $add = $input->param('add');
73 if ($add) {
74     output_and_exit( $input, $cookie, $template, 'wrong_csrf_token' )
75       unless Koha::Token->new->check_csrf(
76         {
77             session_id => scalar $input->cookie('CGISESSID'),
78             token      => scalar $input->param('csrf_token'),
79         }
80       );
81
82 # Note: If the logged in user is not allowed to see this patron an invoice can be forced
83 # Here we are trusting librarians not to hack the system
84     my $barcode = $input->param('barcode');
85     my $item_id;
86     if ($barcode) {
87         my $item = Koha::Items->find( { barcode => $barcode } );
88         $item_id = $item->itemnumber if $item;
89     }
90     my $description = $input->param('desc');
91     my $note        = $input->param('note');
92     my $amount      = $input->param('amount') || 0;
93     my $type        = $input->param('type');
94
95     $patron->account->add_credit(
96         {
97             amount      => $amount,
98             description => $description,
99             item_id     => $item_id,
100             library_id  => $library_id,
101             note        => $note,
102             type        => $type,
103             user_id     => $logged_in_user->id,
104             interface   => C4::Context->interface
105         }
106     );
107
108     if ( C4::Context->preference('AccountAutoReconcile') ) {
109         $patron->account->reconcile_balance;
110     }
111
112     print $input->redirect(
113         "/cgi-bin/koha/members/boraccount.pl?borrowernumber=$borrowernumber");
114     exit;
115 }
116 else {
117
118     my @credit_types = Koha::Account::CreditTypes->search_with_library_limits(
119         { can_be_added_manually => 1 },
120         {}, $library_id );
121
122     $template->param(
123         patron       => $patron,
124         credit_types => \@credit_types,
125         finesview    => 1,
126         csrf_token   => Koha::Token->new->generate_csrf(
127             { session_id => scalar $input->cookie('CGISESSID') }
128         ),
129     );
130     output_html_with_http_headers $input, $cookie, $template->output;
131 }