| Lines 3-11
          
      
      
        Link Here | 
        
          | 3 | #written 11/1/2000 by chris@katipo.oc.nz | 3 | #written 11/1/2000 by chris@katipo.oc.nz | 
        
          | 4 | #script to display borrowers account details | 4 | #script to display borrowers account details | 
        
          | 5 |  | 5 |  | 
            
              | 6 |  |  |  | 
        
          | 7 | # Copyright 2000-2002 Katipo Communications | 6 | # Copyright 2000-2002 Katipo Communications | 
        
          | 8 | # Copyright 2010 BibLibre | 7 | # Copyright 2010 BibLibre | 
            
              |  |  | 8 | # Copyright 2019 PTFS Europe | 
        
          | 9 | # | 9 | # | 
        
          | 10 | # This file is part of Koha. | 10 | # This file is part of Koha. | 
        
          | 11 | # | 11 | # | 
  
    | Lines 36-129
          use Koha::Items;
      
      
        Link Here | 
        
          | 36 | use Koha::Patrons; | 36 | use Koha::Patrons; | 
        
          | 37 |  | 37 |  | 
        
          | 38 | use Koha::Patron::Categories; | 38 | use Koha::Patron::Categories; | 
            
              |  |  | 39 | use Koha::Account::DebitTypes; | 
        
          | 39 |  | 40 |  | 
          
            
              | 40 | my $input=new CGI; | 41 | my $input = new CGI; | 
            
              | 41 | my $flagsrequired = { borrowers => 'edit_borrowers' }; |  |  | 
        
          | 42 | my ( $template, $loggedinuser, $cookie ) = get_template_and_user( | 42 | my ( $template, $loggedinuser, $cookie ) = get_template_and_user( | 
          
            
              | 43 |     {   template_name   => "members/maninvoice.tt", | 43 |     { | 
            
              |  |  | 44 |         template_name   => "members/maninvoice.tt", | 
        
          | 44 |         query           => $input, | 45 |         query           => $input, | 
        
          | 45 |         type            => "intranet", | 46 |         type            => "intranet", | 
        
          | 46 |         authnotrequired => 0, | 47 |         authnotrequired => 0, | 
          
            
              | 47 |         flagsrequired   => $flagsrequired, | 48 |         flagsrequired   => { | 
            
              | 48 |         debug           => 1, | 49 |             borrowers     => 'edit_borrowers', | 
            
              |  |  | 50 |             updatecharges => 'remaining_permissions' | 
            
              | 51 |         } | 
        
          | 49 |     } | 52 |     } | 
        
          | 50 | ); | 53 | ); | 
        
          | 51 |  | 54 |  | 
          
            
              | 52 | my $borrowernumber=$input->param('borrowernumber'); | 55 | my $borrowernumber = $input->param('borrowernumber'); | 
            
              | 53 |  | 56 | my $patron         = Koha::Patrons->find($borrowernumber); | 
            
              | 54 | my $patron = Koha::Patrons->find( $borrowernumber ); | 57 | unless ($patron) { | 
            
              | 55 | unless ( $patron ) { | 58 |     print $input->redirect( | 
            
              | 56 |     print $input->redirect("/cgi-bin/koha/circ/circulation.pl?borrowernumber=$borrowernumber"); | 59 |         "/cgi-bin/koha/circ/circulation.pl?borrowernumber=$borrowernumber"); | 
        
          | 57 |     exit; | 60 |     exit; | 
        
          | 58 | } | 61 | } | 
        
          | 59 |  | 62 |  | 
          
            
              | 60 | my $add=$input->param('add'); | 63 | my $library_id = C4::Context->userenv->{'branch'}; | 
            
              | 61 | if ($add){ |  |  | 
            
              | 62 |     if ( checkauth( $input, 0, $flagsrequired, 'intranet' ) ) { | 
            
              | 63 |         output_and_exit( $input, $cookie, $template,  'wrong_csrf_token' ) | 
            
              | 64 |             unless Koha::Token->new->check_csrf( { | 
            
              | 65 |                 session_id => scalar $input->cookie('CGISESSID'), | 
            
              | 66 |                 token => scalar $input->param('csrf_token'), | 
            
              | 67 |             }); | 
            
              | 68 |         # Note: If the logged in user is not allowed to see this patron an invoice can be forced | 
            
              | 69 |         # Here we are trusting librarians not to hack the system | 
            
              | 70 |         my $barcode=$input->param('barcode'); | 
            
              | 71 |         my $itemnum; | 
            
              | 72 |         if ($barcode) { | 
            
              | 73 |             my $item = Koha::Items->find({barcode => $barcode}); | 
            
              | 74 |             $itemnum = $item->itemnumber if $item; | 
            
              | 75 |         } | 
            
              | 76 |         my $desc=$input->param('desc'); | 
            
              | 77 |         my $amount=$input->param('amount'); | 
            
              | 78 |         my $type=$input->param('type'); | 
            
              | 79 |         my $note    = $input->param('note'); | 
            
              | 80 |         my $error   = C4::Accounts::manualinvoice( $borrowernumber, $itemnum, $desc, $type, $amount, $note ); | 
            
              | 81 |         if ($error) { | 
            
              | 82 |             if ( $error =~ /FOREIGN KEY/ && $error =~ /itemnumber/ ) { | 
            
              | 83 |                 $template->param( 'ITEMNUMBER' => 1 ); | 
            
              | 84 |             } | 
            
              | 85 |             $template->param( csrf_token => Koha::Token->new->generate_csrf({ session_id => scalar $input->cookie('CGISESSID') }) ); | 
            
              | 86 |             $template->param( 'ERROR' => $error ); | 
            
              | 87 |             output_html_with_http_headers $input, $cookie, $template->output; | 
            
              | 88 |         } else { | 
        
          | 89 |  | 64 |  | 
          
            
              | 90 |             if ( C4::Context->preference('AccountAutoReconcile') ) { | 65 | my $add = $input->param('add'); | 
            
              | 91 |                 $patron->account->reconcile_balance; | 66 | if ($add) { | 
            
              | 92 |             } | 67 |     output_and_exit( $input, $cookie, $template, 'wrong_csrf_token' ) | 
            
              | 93 |  | 68 |       unless Koha::Token->new->check_csrf( | 
            
              | 94 |             print $input->redirect("/cgi-bin/koha/members/boraccount.pl?borrowernumber=$borrowernumber"); | 69 |         { | 
            
              | 95 |             exit; | 70 |             session_id => scalar $input->cookie('CGISESSID'), | 
            
              |  |  | 71 |             token      => scalar $input->param('csrf_token'), | 
        
          | 96 |         } | 72 |         } | 
            
              |  |  | 73 |       ); | 
            
              | 74 |  | 
            
              | 75 | # Note: If the logged in user is not allowed to see this patron an invoice can be forced | 
            
              | 76 | # Here we are trusting librarians not to hack the system | 
            
              | 77 |     my $barcode = $input->param('barcode'); | 
            
              | 78 |     my $itemnum; | 
            
              | 79 |     if ($barcode) { | 
            
              | 80 |         my $item = Koha::Items->find( { barcode => $barcode } ); | 
            
              | 81 |         $itemnum = $item->itemnumber if $item; | 
        
          | 97 |     } | 82 |     } | 
          
            
              | 98 | } else { | 83 |     my $desc   = $input->param('desc'); | 
            
              | 99 |  | 84 |     my $amount = $input->param('amount'); | 
            
              | 100 |     my ($template, $loggedinuser, $cookie) = get_template_and_user({ | 85 |     my $type   = $input->param('type'); | 
            
              | 101 |         template_name   => "members/maninvoice.tt", | 86 |     my $note   = $input->param('note'); | 
            
              | 102 |         query           => $input, | 87 |     my $error = | 
            
              | 103 |         type            => "intranet", | 88 |       C4::Accounts::manualinvoice( $borrowernumber, $itemnum, $desc, $type, | 
            
              | 104 |         authnotrequired => 0, | 89 |         $amount, $note ); | 
            
              | 105 |         flagsrequired   => { borrowers => 'edit_borrowers', | 90 |     if ($error) { | 
            
              | 106 |                              updatecharges => 'remaining_permissions' }, | 91 |         if ( $error =~ /FOREIGN KEY/ && $error =~ /itemnumber/ ) { | 
            
              | 107 |         debug           => 1, | 92 |             $template->param( 'ITEMNUMBER' => 1 ); | 
            
              | 108 |     }); | 93 |         } | 
            
              |  |  | 94 |         $template->param( | 
            
              | 95 |             csrf_token => Koha::Token->new->generate_csrf( | 
            
              | 96 |                 { session_id => scalar $input->cookie('CGISESSID') } | 
            
              | 97 |             ) | 
            
              | 98 |         ); | 
            
              | 99 |         $template->param( 'ERROR' => $error ); | 
            
              | 100 |         output_html_with_http_headers $input, $cookie, $template->output; | 
            
              | 101 |     } | 
            
              | 102 |     else { | 
        
          | 109 |  | 103 |  | 
          
            
              | 110 |     my $logged_in_user = Koha::Patrons->find( $loggedinuser ) or die "Not logged in"; | 104 |         if ( C4::Context->preference('AccountAutoReconcile') ) { | 
            
              | 111 |     output_and_exit_if_error( $input, $cookie, $template, { module => 'members', logged_in_user => $logged_in_user, current_patron => $patron } ); | 105 |             $patron->account->reconcile_balance; | 
            
              |  |  | 106 |         } | 
        
          | 112 |  | 107 |  | 
          
            
              | 113 |   # get authorised values with type of MANUAL_INV | 108 |         print $input->redirect( | 
            
              | 114 |   my @invoice_types; | 109 |             "/cgi-bin/koha/members/boraccount.pl?borrowernumber=$borrowernumber" | 
            
              | 115 |   my $dbh = C4::Context->dbh; | 110 |         ); | 
            
              | 116 |   my $sth = $dbh->prepare('SELECT * FROM authorised_values WHERE category = "MANUAL_INV"'); | 111 |         exit; | 
            
              | 117 |   $sth->execute(); | 112 |     } | 
            
              | 118 |   while ( my $row = $sth->fetchrow_hashref() ) { | 113 | } | 
            
              | 119 |     push @invoice_types, $row; | 114 | else { | 
            
              | 120 |   } | 115 |  | 
            
              | 121 |   $template->param( invoice_types_loop => \@invoice_types ); | 116 |     my $logged_in_user = Koha::Patrons->find($loggedinuser) | 
            
              |  |  | 117 |       or die "Not logged in"; | 
            
              | 118 |     output_and_exit_if_error( | 
            
              | 119 |         $input, $cookie, | 
            
              | 120 |         $template, | 
            
              | 121 |         { | 
            
              | 122 |             module         => 'members', | 
            
              | 123 |             logged_in_user => $logged_in_user, | 
            
              | 124 |             current_patron => $patron | 
            
              | 125 |         } | 
            
              | 126 |     ); | 
        
          | 122 |  | 127 |  | 
            
              |  |  | 128 |     my @debit_types = Koha::Account::DebitTypes->search_with_library_limits( | 
            
              | 129 |         { can_be_added_manually => 1 }, | 
            
              | 130 |         {}, $library_id ); | 
            
              | 131 |     $template->param( debit_types => \@debit_types ); | 
        
          | 123 |     $template->param( | 132 |     $template->param( | 
          
            
              | 124 |         csrf_token => Koha::Token->new->generate_csrf({ session_id => scalar $input->cookie('CGISESSID') }), | 133 |         csrf_token => Koha::Token->new->generate_csrf( | 
            
              | 125 |         patron         => $patron, | 134 |             { session_id => scalar $input->cookie('CGISESSID') } | 
            
              | 126 |         finesview      => 1, | 135 |         ), | 
            
              |  |  | 136 |         patron    => $patron, | 
            
              | 137 |         finesview => 1, | 
        
          | 127 |     ); | 138 |     ); | 
        
          | 128 |     output_html_with_http_headers $input, $cookie, $template->output; | 139 |     output_html_with_http_headers $input, $cookie, $template->output; | 
        
          | 129 | } | 140 | } | 
            
              | 130 | -  |  |  |