- bring prepaid support into this century (close: Bug#1124)
[freeside.git] / FS / FS / cust_pay.pm
index 3317a32..80d4a14 100644 (file)
@@ -150,6 +150,8 @@ sub insert {
     }
   }
 
+  $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+
   #false laziness w/ cust_credit::insert
   if ( $unsuspendauto && $old_balance && $cust_main->balance <= 0 ) {
     my @errors = $cust_main->unsuspend;
@@ -325,13 +327,7 @@ sub delete {
 
 =item replace OLD_RECORD
 
-Currently unimplemented (accounting reasons).
-
-=cut
-
-sub replace {
-   return "Can't (yet?) modify cust_pay records!";
-}
+You probably shouldn't modify payments...
 
 =item check
 
@@ -361,7 +357,7 @@ sub check {
 
   $self->_date(time) unless $self->_date;
 
-  $self->payby =~ /^(CARD|CHEK|LECB|BILL|COMP)$/ or return "Illegal payby";
+  $self->payby =~ /^(CARD|CHEK|LECB|BILL|COMP|PREP)$/ or return "Illegal payby";
   $self->payby($1);
 
   #false laziness with cust_refund::check
@@ -396,7 +392,8 @@ payment.
 
 sub cust_bill_pay {
   my $self = shift;
-  sort { $a->_date <=> $b->_date }
+  sort {    $a->_date  <=> $b->_date
+         || $a->invnum <=> $b->invnum }
     qsearch( 'cust_bill_pay', { 'paynum' => $self->paynum } )
   ;
 }
@@ -432,6 +429,21 @@ sub unapplied {
   sprintf("%.2f", $amount );
 }
 
+=item unrefunded
+
+Returns the amount of this payment that has not been refuned; which is
+paid minus all  refund applications (see L<FS::cust_pay_refund>).
+
+=cut
+
+sub unrefunded {
+  my $self = shift;
+  my $amount = $self->paid;
+  $amount -= $_->amount foreach ( $self->cust_pay_refund );
+  sprintf("%.2f", $amount );
+}
+
+
 =item cust_main
 
 Returns the parent customer object (see L<FS::cust_main>).