credits return taxes, but the magic calculation button does not yet work properly...
[freeside.git] / FS / FS / cust_bill_pkg_tax_location.pm
index db65237..0d3bd3a 100644 (file)
@@ -6,6 +6,8 @@ use FS::Record qw( qsearch qsearchs );
 use FS::cust_bill_pkg;
 use FS::cust_pkg;
 use FS::cust_location;
+use FS::cust_bill_pay_pkg;
+use FS::cust_credit_bill_pkg;
 
 =head1 NAME
 
@@ -122,6 +124,78 @@ sub check {
   $self->SUPER::check;
 }
 
+=item cust_bill_pkg
+
+Returns the associated cust_bill_pkg object
+
+=cut
+
+sub cust_bill_pkg {
+  my $self = shift;
+  qsearchs( 'cust_bill_pkg', { 'billpkgnum' => $self->billpkgnum }  );
+}
+
+=item cust_location
+
+Returns the associated cust_location object
+
+=cut
+
+sub cust_location {
+  my $self = shift;
+  qsearchs( 'cust_location', { 'locationnum' => $self->locationnum }  );
+}
+
+=item desc
+
+Returns a description for this tax line item constituent.  Currently this
+is the desc of the associated line item followed by the state/county/city
+for the location in parentheses.
+
+=cut
+
+sub desc {
+  my $self = shift;
+  my $cust_location = $self->cust_location;
+  my $location = join('/', grep { $_ }                 # leave in?
+                           map { $cust_location->$_ }
+                           qw( state county city )     # country?
+  );
+  $self->cust_bill_pkg->desc. " ($location)";
+}
+
+=item owed
+
+Returns the amount owed (still outstanding) on this tax line item which is
+the amount of this record minus all payment applications and credit
+applications.
+
+=cut
+
+sub owed {
+  my $self = shift;
+  my $balance = $self->amount;
+  $balance -= $_->amount foreach ( $self->cust_bill_pay_pkg('setup') );
+  $balance -= $_->amount foreach ( $self->cust_credit_bill_pkg('setup') );
+  $balance = sprintf( '%.2f', $balance );
+  $balance =~ s/^\-0\.00$/0.00/; #yay ieee fp
+  $balance;
+}
+
+sub cust_bill_pay_pkg {
+  my $self = shift;
+  qsearch( 'cust_bill_pay_pkg',
+           { map { $_ => $self->$_ } qw( billpkgtaxlocationnum billpkgnum ) }
+         );
+}
+
+sub cust_credit_bill_pkg {
+  my $self = shift;
+  qsearch( 'cust_credit_bill_pkg',
+           { map { $_ => $self->$_ } qw( billpkgtaxlocationnum billpkgnum ) }
+         );
+}
+
 =back
 
 =head1 BUGS