add E911 address to self-service provision_phone, document it, RT#34069
[freeside.git] / FS / FS / quotation_pkg.pm
index dae459e..1674d2b 100644 (file)
@@ -2,7 +2,7 @@ package FS::quotation_pkg;
 use base qw( FS::TemplateItem_Mixin FS::Record );
 
 use strict;
-use FS::Record qw( qsearchs dbh ); #qsearch
+use FS::Record qw( qsearchs qsearch dbh );
 use FS::part_pkg;
 use FS::quotation_pkg_discount; #so its loaded when TemplateItem_Mixin needs it
 use List::Util qw(sum);
@@ -70,6 +70,11 @@ The amount per package that will be charged in setup/one-time fees.
 
 The amount per package that will be charged per billing cycle.
 
+=item freq
+
+The length of the billing cycle. If zero it's a one-time charge; if any 
+other number it's that many months; other values are in L<FS::Misc::pkg_freqs>.
+
 =back
 
 =head1 METHODS
@@ -180,6 +185,8 @@ and replace methods.
 sub check {
   my $self = shift;
 
+  my @freqs = ('', keys (%{ FS::Misc->pkg_freqs }));
+
   my $error = 
     $self->ut_numbern('quotationpkgnum')
     || $self->ut_foreign_key(  'quotationnum', 'quotation',    'quotationnum' )
@@ -190,6 +197,7 @@ sub check {
     || $self->ut_numbern('quantity')
     || $self->ut_moneyn('unitsetup')
     || $self->ut_moneyn('unitrecur')
+    || $self->ut_enum('freq', \@freqs)
     || $self->ut_enum('waive_setup', [ '', 'Y'] )
   ;
 
@@ -199,7 +207,11 @@ sub check {
     if ($quotation->custnum) {
       $self->set('locationnum', $quotation->cust_main->ship_locationnum);
     } elsif ($quotation->prospectnum) {
-      $self->set('locationnum', $quotation->prospect_main->locationnum);
+      # use the first non-disabled location for that prospect
+      my $cust_location = qsearchs('cust_location',
+        { prospectnum => $quotation->prospectnum,
+          disabled => '' });
+      $self->set('locationnum', $cust_location->locationnum) if $cust_location;
     } # else the quotation is invalid
   }
 
@@ -427,11 +439,6 @@ sub cust_bill_pkg_display {
     $recur->{'type'} = 'R';
 
     if ( $type eq 'S' ) {
-sub tax_locationnum {
-  my $self = shift;
-  $self->locationnum;
-}
-
       return ($setup);
     } elsif ( $type eq 'R' ) {
       return ($recur);
@@ -468,6 +475,11 @@ sub prospect_main {
   $quotation->prospect_main;
 }
 
+sub tax_locationnum {
+  my $self = shift;
+  $self->locationnum;
+}
+
 
 sub _upgrade_data {
   my $class = shift;