Bug 27569: Add tests
[koha.git] / members / maninvoice.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 # Copyright 2019 PTFS Europe
9 #
10 # This file is part of Koha.
11 #
12 # Koha is free software; you can redistribute it and/or modify it
13 # under the terms of the GNU General Public License as published by
14 # the Free Software Foundation; either version 3 of the License, or
15 # (at your option) any later version.
16 #
17 # Koha is distributed in the hope that it will be useful, but
18 # WITHOUT ANY WARRANTY; without even the implied warranty of
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 # GNU General Public License for more details.
21 #
22 # You should have received a copy of the GNU General Public License
23 # along with Koha; if not, see <http://www.gnu.org/licenses>.
24
25 use Modern::Perl;
26
27 use C4::Auth;
28 use C4::Output;
29 use CGI qw ( -utf8 );
30 use C4::Members;
31 use C4::Accounts;
32 use C4::Items;
33 use Koha::Token;
34
35 use Koha::Items;
36 use Koha::Patrons;
37
38 use Koha::Patron::Categories;
39 use Koha::Account::DebitTypes;
40
41 my $input = new CGI;
42 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
43     {
44         template_name   => "members/maninvoice.tt",
45         query           => $input,
46         type            => "intranet",
47         flagsrequired   => {
48             borrowers     => 'edit_borrowers',
49             updatecharges => 'remaining_permissions'
50         }
51     }
52 );
53
54 my $borrowernumber = $input->param('borrowernumber');
55 my $patron         = Koha::Patrons->find($borrowernumber);
56 unless ($patron) {
57     print $input->redirect(
58         "/cgi-bin/koha/circ/circulation.pl?borrowernumber=$borrowernumber");
59     exit;
60 }
61
62 my $library_id = C4::Context->userenv->{'branch'};
63
64 my $add = $input->param('add');
65 if ($add) {
66     output_and_exit( $input, $cookie, $template, 'wrong_csrf_token' )
67       unless Koha::Token->new->check_csrf(
68         {
69             session_id => scalar $input->cookie('CGISESSID'),
70             token      => scalar $input->param('csrf_token'),
71         }
72       );
73
74 # Note: If the logged in user is not allowed to see this patron an invoice can be forced
75 # Here we are trusting librarians not to hack the system
76     my $barcode = $input->param('barcode');
77     my $itemnum;
78     if ($barcode) {
79         my $item = Koha::Items->find( { barcode => $barcode } );
80         $itemnum = $item->itemnumber if $item;
81     }
82     my $desc   = $input->param('desc');
83     my $amount = $input->param('amount');
84     my $type   = $input->param('type');
85     my $note   = $input->param('note');
86     my $error =
87       C4::Accounts::manualinvoice( $borrowernumber, $itemnum, $desc, $type,
88         $amount, $note );
89     if ($error) {
90         if ( $error =~ /FOREIGN KEY/ && $error =~ /itemnumber/ ) {
91             $template->param( 'ITEMNUMBER' => 1 );
92         }
93         $template->param(
94             csrf_token => Koha::Token->new->generate_csrf(
95                 { session_id => scalar $input->cookie('CGISESSID') }
96             )
97         );
98         $template->param( 'ERROR' => $error );
99         output_html_with_http_headers $input, $cookie, $template->output;
100     }
101     else {
102
103         if ( C4::Context->preference('AccountAutoReconcile') ) {
104             $patron->account->reconcile_balance;
105         }
106
107         print $input->redirect(
108             "/cgi-bin/koha/members/boraccount.pl?borrowernumber=$borrowernumber"
109         );
110         exit;
111     }
112 }
113 else {
114
115     my $logged_in_user = Koha::Patrons->find($loggedinuser)
116       or die "Not logged in";
117     output_and_exit_if_error(
118         $input, $cookie,
119         $template,
120         {
121             module         => 'members',
122             logged_in_user => $logged_in_user,
123             current_patron => $patron
124         }
125     );
126
127     my @debit_types = Koha::Account::DebitTypes->search_with_library_limits(
128         { can_be_added_manually => 1, archived => 0 },
129         {}, $library_id );
130     $template->param( debit_types => \@debit_types );
131     $template->param(
132         csrf_token => Koha::Token->new->generate_csrf(
133             { session_id => scalar $input->cookie('CGISESSID') }
134         ),
135         patron    => $patron,
136         finesview => 1,
137     );
138     output_html_with_http_headers $input, $cookie, $template->output;
139 }