estimate tax on quotations, #32489
[freeside.git] / FS / FS / quotation_pkg.pm
index 28677d0..107b271 100644 (file)
@@ -2,7 +2,7 @@ package FS::quotation_pkg;
 
 use strict;
 use base qw( FS::TemplateItem_Mixin FS::Record );
-use FS::Record qw( qsearchs dbh ); #qsearch
+use FS::Record qw( qsearch qsearchs dbh );
 use FS::part_pkg;
 use FS::cust_location;
 use FS::quotation;
@@ -147,7 +147,7 @@ sub delete {
   my $oldAutoCommit = $FS::UID::AutoCommit;
   local $FS::UID::AutoCommit = 0;
 
-  foreach ($self->quotation_pkg_discount) {
+  foreach ($self->quotation_pkg_discount, $self->quotation_pkg_tax) {
     my $error = $_->delete;
     if ( $error ) {
       $dbh->rollback if $oldAutoCommit;
@@ -227,7 +227,7 @@ sub estimate {
   if ( $self->waive_setup eq 'Y' || $self->{'_NO_SETUP_KLUDGE'} ) {
     $unitsetup = '0.00';
   } else {
-    $unitsetup = $part_pkg->base_setup;
+    $unitsetup = $part_pkg->option('setup_fee',1) || '0.00'; # XXX 3.x only
   }
   if ( $self->{'_NO_RECUR_KLUDGE'} ) {
     $unitrecur = '0.00';
@@ -251,6 +251,9 @@ sub estimate {
 
   # XXX the order of applying discounts is ill-defined, which matters
   # if there are percentage and amount discounts on the same package.
+  #
+  # but right now there can only be one discount on any package, so 
+  # it doesn't matter
   foreach my $pkg_discount ($self->quotation_pkg_discount) {
 
     my $discount = $pkg_discount->discount;
@@ -312,7 +315,7 @@ sub insert_discount {
   #my ($self, %options) = @_;
   my $self = shift;
 
-  my $cust_pkg_discount = FS::quotation_pkg_discount->new( {
+  my $quotation_pkg_discount = FS::quotation_pkg_discount->new( {
     'quotationpkgnum' => $self->quotationpkgnum,
     'discountnum'     => $self->discountnum,
     #for the create a new discount case
@@ -323,7 +326,7 @@ sub insert_discount {
     'setup'       => $self->discountnum_setup,
   } );
 
-  $cust_pkg_discount->insert;
+  $quotation_pkg_discount->insert;
 }
 
 sub _item_discount {
@@ -345,7 +348,7 @@ sub _item_discount {
     push @ext, $pkg_discount->description;
     $d->{setup_amount} -= $pkg_discount->setup_amount;
     $d->{recur_amount} -= $pkg_discount->recur_amount;
-  } 
+  }
   $d->{setup_amount} *= $self->quantity || 1;
   $d->{recur_amount} *= $self->quantity || 1;
   $d->{amount} = $d->{setup_amount} + $d->{recur_amount};
@@ -355,13 +358,13 @@ sub _item_discount {
 
 sub setup {
   my $self = shift;
-  ($self->unitsetup - sum(map { $_->setup_amount } $self->pkg_discount))
+  ($self->unitsetup - sum(0, map { $_->setup_amount } $self->pkg_discount))
     * ($self->quantity || 1);
 }
 
 sub recur {
   my $self = shift;
-  ($self->unitrecur - sum(map { $_->recur_amount } $self->pkg_discount))
+  ($self->unitrecur - sum(0, map { $_->recur_amount } $self->pkg_discount))
     * ($self->quantity || 1);
 }
 
@@ -414,11 +417,38 @@ sub cust_main {
   $quotation->cust_main;
 }
 
+sub tax_locationnum {
+  my $self = shift;
+  $self->locationnum;
+}
+
+#stub for 3.x
+
+sub quotation {
+  my $self = shift;
+  FS::quotation->by_key($self->quotationnum);
+}
+
+sub quotation_pkg_discount {
+  my $self = shift;
+  qsearch('quotation_pkg_discount', { quotationpkgnum => $self->quotationpkgnum });
+}
+
+sub quotation_pkg_tax {
+  my $self = shift;
+  qsearch('quotation_pkg_tax', { quotationpkgnum => $self->quotationpkgnum });
+}
+
+sub cust_location {
+  my $self = shift;
+  $self->locationnum ? qsearchs('cust_location', { locationnum => $self->locationnum }) : '';
+}
+
 =back
 
 =head1 BUGS
 
-Doesn't support taxes, fees, or add-on packages.
+Doesn't support fees, or add-on packages.
 
 =head1 SEE ALSO