| Lines 64-70
          patron.
      
      
        Link Here | 
        
          | 64 |  | 64 |  | 
        
          | 65 | Record payment by a patron. C<$borrowernumber> is the patron's | 65 | Record payment by a patron. C<$borrowernumber> is the patron's | 
        
          | 66 | borrower number. C<$payment> is a floating-point number, giving the | 66 | borrower number. C<$payment> is a floating-point number, giving the | 
          
            
              | 67 | amount that was paid.  | 67 | amount that was paid. | 
        
          | 68 |  | 68 |  | 
        
          | 69 | Amounts owed are paid off oldest first. That is, if the patron has a | 69 | Amounts owed are paid off oldest first. That is, if the patron has a | 
        
          | 70 | $1 fine from Feb. 1, another $1 fine from Mar. 1, and makes a payment | 70 | $1 fine from Feb. 1, another $1 fine from Mar. 1, and makes a payment | 
  
    | Lines 105-116
          sub recordpayment {
      
      
        Link Here | 
        
          | 105 |             $newamtos   = $accdata->{'amountoutstanding'} - $amountleft; | 105 |             $newamtos   = $accdata->{'amountoutstanding'} - $amountleft; | 
        
          | 106 |             $amountleft = 0; | 106 |             $amountleft = 0; | 
        
          | 107 |         } | 107 |         } | 
          
            
              | 108 |         my $thisacct = $accdata->{accountno}; | 108 |         my $thisacct = $accdata->{accountlinesid}; | 
        
          | 109 |         my $usth     = $dbh->prepare( | 109 |         my $usth     = $dbh->prepare( | 
        
          | 110 |             "UPDATE accountlines SET amountoutstanding= ? | 110 |             "UPDATE accountlines SET amountoutstanding= ? | 
          
            
              | 111 |      WHERE (borrowernumber = ?) AND (accountno=?)" | 111 |      WHERE (accountlinesid = ?)" | 
        
          | 112 |         ); | 112 |         ); | 
          
            
              | 113 |         $usth->execute( $newamtos, $borrowernumber, $thisacct ); | 113 |         $usth->execute( $newamtos, $thisacct ); | 
        
          | 114 |         $usth->finish; | 114 |         $usth->finish; | 
        
          | 115 | #        $usth = $dbh->prepare( | 115 | #        $usth = $dbh->prepare( | 
        
          | 116 | #            "INSERT INTO accountoffsets | 116 | #            "INSERT INTO accountoffsets | 
  
    | Lines 136-142
          sub recordpayment {
      
      
        Link Here | 
        
          | 136 |  | 136 |  | 
        
          | 137 | =head2 makepayment | 137 | =head2 makepayment | 
        
          | 138 |  | 138 |  | 
          
            
              | 139 |   &makepayment($borrowernumber, $acctnumber, $amount, $branchcode); | 139 |   &makepayment($accountlinesid, $borrowernumber, $acctnumber, $amount, $branchcode); | 
        
          | 140 |  | 140 |  | 
        
          | 141 | Records the fact that a patron has paid off the entire amount he or | 141 | Records the fact that a patron has paid off the entire amount he or | 
        
          | 142 | she owes. | 142 | she owes. | 
  
    | Lines 157-163
          sub makepayment {
      
      
        Link Here | 
        
          | 157 |     #here we update both the accountoffsets and the account lines | 157 |     #here we update both the accountoffsets and the account lines | 
        
          | 158 |     #updated to check, if they are paying off a lost item, we return the item | 158 |     #updated to check, if they are paying off a lost item, we return the item | 
        
          | 159 |     # from their card, and put a note on the item record | 159 |     # from their card, and put a note on the item record | 
          
            
              | 160 |     my ( $borrowernumber, $accountno, $amount, $user, $branch ) = @_; | 160 |     my ( $accountlinesid, $borrowernumber, $accountno, $amount, $user, $branch ) = @_; | 
        
          | 161 |     my $dbh = C4::Context->dbh; | 161 |     my $dbh = C4::Context->dbh; | 
        
          | 162 |     my $manager_id = 0; | 162 |     my $manager_id = 0; | 
        
          | 163 |     $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv;  | 163 |     $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv;  | 
  
    | Lines 165-174
          sub makepayment {
      
      
        Link Here | 
        
          | 165 |     # begin transaction | 165 |     # begin transaction | 
        
          | 166 |     my $nextaccntno = getnextacctno($borrowernumber); | 166 |     my $nextaccntno = getnextacctno($borrowernumber); | 
        
          | 167 |     my $newamtos    = 0; | 167 |     my $newamtos    = 0; | 
          
            
              | 168 |     my $sth = | 168 |     my $sth         = $dbh->prepare("SELECT * FROM accountlines WHERE accountlinesid=?"); | 
            
              | 169 |       $dbh->prepare( | 169 |     $sth->execute( $accountlinesid ); | 
            
              | 170 |         "SELECT * FROM accountlines WHERE  borrowernumber=? AND accountno=?"); |  |  | 
            
              | 171 |     $sth->execute( $borrowernumber, $accountno ); | 
        
          | 172 |     my $data = $sth->fetchrow_hashref; | 170 |     my $data = $sth->fetchrow_hashref; | 
        
          | 173 |     $sth->finish; | 171 |     $sth->finish; | 
        
          | 174 |  | 172 |  | 
  
    | Lines 177-198
          sub makepayment {
      
      
        Link Here | 
        
          | 177 |             $dbh->prepare( | 175 |             $dbh->prepare( | 
        
          | 178 |                 "UPDATE accountlines | 176 |                 "UPDATE accountlines | 
        
          | 179 |                     SET amountoutstanding = 0, description = 'Payment,thanks' | 177 |                     SET amountoutstanding = 0, description = 'Payment,thanks' | 
          
            
              | 180 |                     WHERE borrowernumber = ? | 178 |                     WHERE accountlinesid = ? | 
            
              | 181 |                     AND accountno = ? |  |  | 
        
          | 182 |                 " | 179 |                 " | 
        
          | 183 |             ); | 180 |             ); | 
          
            
              | 184 |         $udp->execute($borrowernumber, $accountno ); | 181 |         $udp->execute($accountlinesid); | 
        
          | 185 |         $udp->finish; | 182 |         $udp->finish; | 
        
          | 186 |     }else{ | 183 |     }else{ | 
        
          | 187 |         my $udp = 		 | 184 |         my $udp = 		 | 
        
          | 188 |             $dbh->prepare( | 185 |             $dbh->prepare( | 
        
          | 189 |                 "UPDATE accountlines | 186 |                 "UPDATE accountlines | 
        
          | 190 |                     SET amountoutstanding = 0 | 187 |                     SET amountoutstanding = 0 | 
          
            
              | 191 |                     WHERE borrowernumber = ? | 188 |                     WHERE accountlinesid = ? | 
            
              | 192 |                     AND accountno = ? |  |  | 
        
          | 193 |                 " | 189 |                 " | 
        
          | 194 |             ); | 190 |             ); | 
          
            
              | 195 |         $udp->execute($borrowernumber, $accountno ); | 191 |         $udp->execute($accountlinesid); | 
        
          | 196 |         $udp->finish; | 192 |         $udp->finish; | 
        
          | 197 |  | 193 |  | 
        
          | 198 |          # create new line | 194 |          # create new line | 
  
    | Lines 219-224
          sub makepayment {
      
      
        Link Here | 
        
          | 219 |     if ( $data->{'accounttype'} eq 'Rep' || $data->{'accounttype'} eq 'L' ) { | 215 |     if ( $data->{'accounttype'} eq 'Rep' || $data->{'accounttype'} eq 'L' ) { | 
        
          | 220 |         C4::Circulation::ReturnLostItem( $borrowernumber, $data->{'itemnumber'} ); | 216 |         C4::Circulation::ReturnLostItem( $borrowernumber, $data->{'itemnumber'} ); | 
        
          | 221 |     } | 217 |     } | 
            
              |  |  | 218 |     my $sthr = $dbh->prepare("SELECT max(accountlinesid) AS lastinsertid FROM accountlines"); | 
            
              | 219 |     $sthr->execute(); | 
            
              | 220 |     my $datalastinsertid = $sthr->fetchrow_hashref; | 
            
              | 221 |     $sthr->finish; | 
            
              | 222 |     return $datalastinsertid->{'lastinsertid'}; | 
        
          | 222 | } | 223 | } | 
        
          | 223 |  | 224 |  | 
        
          | 224 | =head2 getnextacctno | 225 | =head2 getnextacctno | 
  
    | Lines 246-263
          sub getnextacctno ($) {
      
      
        Link Here | 
        
          | 246 |  | 247 |  | 
        
          | 247 | =head2 fixaccounts (removed) | 248 | =head2 fixaccounts (removed) | 
        
          | 248 |  | 249 |  | 
          
            
              | 249 |   &fixaccounts($borrowernumber, $accountnumber, $amount); | 250 |   &fixaccounts($accountlinesid, $borrowernumber, $accountnumber, $amount); | 
        
          | 250 |  | 251 |  | 
        
          | 251 | #' | 252 | #' | 
        
          | 252 | # FIXME - I don't understand what this function does. | 253 | # FIXME - I don't understand what this function does. | 
        
          | 253 | sub fixaccounts { | 254 | sub fixaccounts { | 
          
            
              | 254 |     my ( $borrowernumber, $accountno, $amount ) = @_; | 255 |     my ( $accountlinesid, $borrowernumber, $accountno, $amount ) = @_; | 
        
          | 255 |     my $dbh = C4::Context->dbh; | 256 |     my $dbh = C4::Context->dbh; | 
        
          | 256 |     my $sth = $dbh->prepare( | 257 |     my $sth = $dbh->prepare( | 
          
            
              | 257 |         "SELECT * FROM accountlines WHERE borrowernumber=? | 258 |         "SELECT * FROM accountlines WHERE accountlinesid=?" | 
            
              | 258 |      AND accountno=?" |  |  | 
        
          | 259 |     ); | 259 |     ); | 
          
            
              | 260 |     $sth->execute( $borrowernumber, $accountno ); | 260 |     $sth->execute( $accountlinesid ); | 
        
          | 261 |     my $data = $sth->fetchrow_hashref; | 261 |     my $data = $sth->fetchrow_hashref; | 
        
          | 262 |  | 262 |  | 
        
          | 263 |     # FIXME - Error-checking | 263 |     # FIXME - Error-checking | 
  
    | Lines 269-276
          sub fixaccounts {
      
      
        Link Here | 
        
          | 269 |         UPDATE  accountlines | 269 |         UPDATE  accountlines | 
        
          | 270 |         SET     amount = '$amount', | 270 |         SET     amount = '$amount', | 
        
          | 271 |                 amountoutstanding = '$outstanding' | 271 |                 amountoutstanding = '$outstanding' | 
          
            
              | 272 |         WHERE   borrowernumber = $borrowernumber | 272 |         WHERE   accountlinesid = $accountlinesid | 
            
              | 273 |           AND   accountno = $accountno |  |  | 
        
          | 274 | EOT | 273 | EOT | 
        
          | 275 | 	# FIXME: exceedingly bad form.  Use prepare with placholders ("?") in query and execute args. | 274 | 	# FIXME: exceedingly bad form.  Use prepare with placholders ("?") in query and execute args. | 
        
          | 276 | } | 275 | } | 
  
    | Lines 448-459
          sub fixcredit {
      
      
        Link Here | 
        
          | 448 |             $newamtos   = $accdata->{'amountoutstanding'} - $amountleft; | 447 |             $newamtos   = $accdata->{'amountoutstanding'} - $amountleft; | 
        
          | 449 |             $amountleft = 0; | 448 |             $amountleft = 0; | 
        
          | 450 |         } | 449 |         } | 
          
            
              | 451 |         my $thisacct = $accdata->{accountno}; | 450 |         my $thisacct = $accdata->{accountlinesid}; | 
        
          | 452 |         my $usth     = $dbh->prepare( | 451 |         my $usth     = $dbh->prepare( | 
        
          | 453 |             "UPDATE accountlines SET amountoutstanding= ? | 452 |             "UPDATE accountlines SET amountoutstanding= ? | 
          
            
              | 454 |      WHERE (borrowernumber = ?) AND (accountno=?)" | 453 |      WHERE (accountlinesid = ?)" | 
        
          | 455 |         ); | 454 |         ); | 
          
            
              | 456 |         $usth->execute( $newamtos, $borrowernumber, $thisacct ); | 455 |         $usth->execute( $newamtos, $thisacct ); | 
        
          | 457 |         $usth->finish; | 456 |         $usth->finish; | 
        
          | 458 |         $usth = $dbh->prepare( | 457 |         $usth = $dbh->prepare( | 
        
          | 459 |             "INSERT INTO accountoffsets | 458 |             "INSERT INTO accountoffsets | 
  
    | Lines 487-498
          sub fixcredit {
      
      
        Link Here | 
        
          | 487 |             $newamtos   = $accdata->{'amountoutstanding'} - $amountleft; | 486 |             $newamtos   = $accdata->{'amountoutstanding'} - $amountleft; | 
        
          | 488 |             $amountleft = 0; | 487 |             $amountleft = 0; | 
        
          | 489 |         } | 488 |         } | 
          
            
              | 490 |         my $thisacct = $accdata->{accountno}; | 489 |         my $thisacct = $accdata->{accountlinesid}; | 
        
          | 491 |         my $usth     = $dbh->prepare( | 490 |         my $usth     = $dbh->prepare( | 
        
          | 492 |             "UPDATE accountlines SET amountoutstanding= ? | 491 |             "UPDATE accountlines SET amountoutstanding= ? | 
          
            
              | 493 |      WHERE (borrowernumber = ?) AND (accountno=?)" | 492 |      WHERE (accountlinesid = ?)" | 
        
          | 494 |         ); | 493 |         ); | 
          
            
              | 495 |         $usth->execute( $newamtos, $borrowernumber, $thisacct ); | 494 |         $usth->execute( $newamtos, $thisacct ); | 
        
          | 496 |         $usth->finish; | 495 |         $usth->finish; | 
        
          | 497 |         $usth = $dbh->prepare( | 496 |         $usth = $dbh->prepare( | 
        
          | 498 |             "INSERT INTO accountoffsets | 497 |             "INSERT INTO accountoffsets | 
  
    | Lines 553-564
          sub refund {
      
      
        Link Here | 
        
          | 553 |         } | 552 |         } | 
        
          | 554 |  | 553 |  | 
        
          | 555 |         #     print $amountleft; | 554 |         #     print $amountleft; | 
          
            
              | 556 |         my $thisacct = $accdata->{accountno}; | 555 |         my $thisacct = $accdata->{accountlinesid}; | 
        
          | 557 |         my $usth     = $dbh->prepare( | 556 |         my $usth     = $dbh->prepare( | 
        
          | 558 |             "UPDATE accountlines SET amountoutstanding= ? | 557 |             "UPDATE accountlines SET amountoutstanding= ? | 
          
            
              | 559 |      WHERE (borrowernumber = ?) AND (accountno=?)" | 558 |      WHERE (accountlinesid = ?)" | 
        
          | 560 |         ); | 559 |         ); | 
          
            
              | 561 |         $usth->execute( $newamtos, $borrowernumber, $thisacct ); | 560 |         $usth->execute( $newamtos, $thisacct ); | 
        
          | 562 |         $usth->finish; | 561 |         $usth->finish; | 
        
          | 563 |         $usth = $dbh->prepare( | 562 |         $usth = $dbh->prepare( | 
        
          | 564 |             "INSERT INTO accountoffsets | 563 |             "INSERT INTO accountoffsets | 
  
    | Lines 591-600
          sub getcharges {
      
      
        Link Here | 
        
          | 591 | } | 590 | } | 
        
          | 592 |  | 591 |  | 
        
          | 593 | sub ModNote { | 592 | sub ModNote { | 
          
            
              | 594 |     my ( $borrowernumber, $accountno, $note ) = @_; | 593 |     my ( $accountlinesid, $note ) = @_; | 
        
          | 595 |     my $dbh = C4::Context->dbh; | 594 |     my $dbh = C4::Context->dbh; | 
          
            
              | 596 |     my $sth = $dbh->prepare('UPDATE accountlines SET note = ? WHERE borrowernumber = ? AND accountno = ?'); | 595 |     my $sth = $dbh->prepare('UPDATE accountlines SET note = ? WHERE accountlinesid = ?'); | 
            
              | 597 |     $sth->execute( $note, $borrowernumber, $accountno ); | 596 |     $sth->execute( $note, $accountlinesid ); | 
        
          | 598 | } | 597 | } | 
        
          | 599 |  | 598 |  | 
        
          | 600 | sub getcredits { | 599 | sub getcredits { | 
  
    | Lines 639-659
          sub getrefunds {
      
      
        Link Here | 
        
          | 639 | } | 638 | } | 
        
          | 640 |  | 639 |  | 
        
          | 641 | sub ReversePayment { | 640 | sub ReversePayment { | 
          
            
              | 642 |   my ( $borrowernumber, $accountno ) = @_; | 641 |     my ( $accountlinesid ) = @_; | 
            
              | 643 |   my $dbh = C4::Context->dbh; | 642 |     my $dbh = C4::Context->dbh; | 
            
              | 644 |    | 643 |  | 
            
              | 645 |   my $sth = $dbh->prepare('SELECT amountoutstanding FROM accountlines WHERE borrowernumber = ? AND accountno = ?'); | 644 |     my $sth = $dbh->prepare('SELECT amountoutstanding FROM accountlines WHERE accountlinesid = ?'); | 
            
              | 646 |   $sth->execute( $borrowernumber, $accountno ); | 645 |     $sth->execute( $accountlinesid ); | 
            
              | 647 |   my $row = $sth->fetchrow_hashref(); | 646 |     my $row = $sth->fetchrow_hashref(); | 
            
              | 648 |   my $amount_outstanding = $row->{'amountoutstanding'}; | 647 |     my $amount_outstanding = $row->{'amountoutstanding'}; | 
            
              | 649 |    | 648 |  | 
            
              | 650 |   if ( $amount_outstanding <= 0 ) { | 649 |     if ( $amount_outstanding <= 0 ) { | 
            
              | 651 |     $sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding = amount * -1, description = CONCAT( description, " Reversed -" ) WHERE borrowernumber = ? AND accountno = ?'); | 650 |         $sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding = amount * -1, description = CONCAT( description, " Reversed -" ) WHERE accountlinesid = ?'); | 
            
              | 652 |     $sth->execute( $borrowernumber, $accountno ); | 651 |         $sth->execute( $accountlinesid ); | 
            
              | 653 |   } else { | 652 |     } else { | 
            
              | 654 |     $sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding = 0, description = CONCAT( description, " Reversed -" ) WHERE borrowernumber = ? AND accountno = ?'); | 653 |         $sth = $dbh->prepare('UPDATE accountlines SET amountoutstanding = 0, description = CONCAT( description, " Reversed -" ) WHERE accountlinesid = ?'); | 
            
              | 655 |     $sth->execute( $borrowernumber, $accountno ); | 654 |         $sth->execute( $accountlinesid ); | 
            
              | 656 |   } | 655 |     } | 
        
          | 657 | } | 656 | } | 
        
          | 658 |  | 657 |  | 
        
          | 659 | =head2 recordpayment_selectaccts | 658 | =head2 recordpayment_selectaccts | 
  
    | Lines 695-701
          sub recordpayment_selectaccts {
      
      
        Link Here | 
        
          | 695 |  | 694 |  | 
        
          | 696 |     # offset transactions | 695 |     # offset transactions | 
        
          | 697 |     my $sth     = $dbh->prepare('UPDATE accountlines SET amountoutstanding= ? ' . | 696 |     my $sth     = $dbh->prepare('UPDATE accountlines SET amountoutstanding= ? ' . | 
          
            
              | 698 |         'WHERE (borrowernumber = ?) AND (accountno=?)'); | 697 |         'WHERE accountlinesid=?'); | 
        
          | 699 |     for my $accdata ( @{$rows} ) { | 698 |     for my $accdata ( @{$rows} ) { | 
        
          | 700 |         if ($amountleft == 0) { | 699 |         if ($amountleft == 0) { | 
        
          | 701 |             last; | 700 |             last; | 
  
    | Lines 708-715
          sub recordpayment_selectaccts {
      
      
        Link Here | 
        
          | 708 |             $newamtos   = $accdata->{amountoutstanding} - $amountleft; | 707 |             $newamtos   = $accdata->{amountoutstanding} - $amountleft; | 
        
          | 709 |             $amountleft = 0; | 708 |             $amountleft = 0; | 
        
          | 710 |         } | 709 |         } | 
          
            
              | 711 |         my $thisacct = $accdata->{accountno}; | 710 |         my $thisacct = $accdata->{accountlinesid}; | 
            
              | 712 |         $sth->execute( $newamtos, $borrowernumber, $thisacct ); | 711 |         $sth->execute( $newamtos, $thisacct ); | 
        
          | 713 |     } | 712 |     } | 
        
          | 714 |  | 713 |  | 
        
          | 715 |     # create new line | 714 |     # create new line | 
  
    | Lines 724-730
          sub recordpayment_selectaccts {
      
      
        Link Here | 
        
          | 724 | # makepayment needs to be fixed to handle partials till then this separate subroutine | 723 | # makepayment needs to be fixed to handle partials till then this separate subroutine | 
        
          | 725 | # fills in | 724 | # fills in | 
        
          | 726 | sub makepartialpayment { | 725 | sub makepartialpayment { | 
          
            
              | 727 |     my ( $borrowernumber, $accountno, $amount, $user, $branch ) = @_; | 726 |     my ( $accountlinesid, $borrowernumber, $accountno, $amount, $user, $branch ) = @_; | 
        
          | 728 |     my $manager_id = 0; | 727 |     my $manager_id = 0; | 
        
          | 729 |     $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; | 728 |     $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; | 
        
          | 730 |     if (!$amount || $amount < 0) { | 729 |     if (!$amount || $amount < 0) { | 
  
    | Lines 736-747
          sub makepartialpayment {
      
      
        Link Here | 
        
          | 736 |     my $newamtos    = 0; | 735 |     my $newamtos    = 0; | 
        
          | 737 |  | 736 |  | 
        
          | 738 |     my $data = $dbh->selectrow_hashref( | 737 |     my $data = $dbh->selectrow_hashref( | 
          
            
              | 739 |         'SELECT * FROM accountlines WHERE  borrowernumber=? AND accountno=?',undef,$borrowernumber,$accountno); | 738 |         'SELECT * FROM accountlines WHERE  accountlinesid=?',undef,$accountlinesid); | 
        
          | 740 |     my $new_outstanding = $data->{amountoutstanding} - $amount; | 739 |     my $new_outstanding = $data->{amountoutstanding} - $amount; | 
        
          | 741 |  | 740 |  | 
          
            
              | 742 |     my $update = 'UPDATE  accountlines SET amountoutstanding = ?  WHERE   borrowernumber = ? ' | 741 |     my $update = 'UPDATE  accountlines SET amountoutstanding = ?  WHERE   accountlinesid = ? '; | 
            
              | 743 |     . ' AND   accountno = ?'; | 742 |     $dbh->do( $update, undef, $new_outstanding, $accountlinesid); | 
            
              | 744 |     $dbh->do( $update, undef, $new_outstanding, $borrowernumber, $accountno); |  |  | 
        
          | 745 |  | 743 |  | 
        
          | 746 |     # create new line | 744 |     # create new line | 
        
          | 747 |     my $insert = 'INSERT INTO accountlines (borrowernumber, accountno, date, amount, ' | 745 |     my $insert = 'INSERT INTO accountlines (borrowernumber, accountno, date, amount, ' |