fix quotations, RT#21103
authorIvan Kohler <ivan@freeside.biz>
Mon, 11 Mar 2013 09:13:24 +0000 (02:13 -0700)
committerIvan Kohler <ivan@freeside.biz>
Mon, 11 Mar 2013 09:13:24 +0000 (02:13 -0700)
FS/FS/Schema.pm
FS/FS/Template_Mixin.pm
FS/FS/quotation.pm
FS/FS/quotation_pkg.pm

index 717e498..29f8ea4 100644 (file)
@@ -1225,6 +1225,8 @@ sub tables_hashref {
     'quotation_pkg' => {
       'columns' => [
         'quotationpkgnum',   'serial',     '', '', '', '', 
     'quotation_pkg' => {
       'columns' => [
         'quotationpkgnum',   'serial',     '', '', '', '', 
+        'quotationnum',         'int', 'NULL', '', '', '', #shouldn't be null,
+                                                           # but history...
         'pkgpart',              'int',     '', '', '', '', 
         'locationnum',          'int', 'NULL', '', '', '',
         'start_date',      @date_type,             '', '', 
         'pkgpart',              'int',     '', '', '', '', 
         'locationnum',          'int', 'NULL', '', '', '',
         'start_date',      @date_type,             '', '', 
index 0d0fbfb..2a32534 100644 (file)
@@ -2049,6 +2049,11 @@ separate quantities, for some reason).
 
 =cut
 
 
 =cut
 
+sub _items_nontax {
+  my $self = shift;
+  grep { $_->pkgnum } $self->cust_bill_pkg;
+}
+
 sub _items_pkg {
   my $self = shift;
   my %options = @_;
 sub _items_pkg {
   my $self = shift;
   my %options = @_;
@@ -2056,7 +2061,7 @@ sub _items_pkg {
   warn "$me _items_pkg searching for all package line items\n"
     if $DEBUG > 1;
 
   warn "$me _items_pkg searching for all package line items\n"
     if $DEBUG > 1;
 
-  my @cust_bill_pkg = grep { $_->pkgnum } $self->cust_bill_pkg;
+  my @cust_bill_pkg = $self->_items_nontax;
 
   warn "$me _items_pkg filtering line items\n"
     if $DEBUG > 1;
 
   warn "$me _items_pkg filtering line items\n"
     if $DEBUG > 1;
index bf2711b..6d36f19 100644 (file)
@@ -176,6 +176,15 @@ sub _total {
 
 }
 
 
 }
 
+#prevent things from falsely showing up as taxes, at least until we support
+# quoting tax amounts..
+sub _items_tax {
+  return ();
+}
+sub _items_nontax {
+  shift->cust_bill_pkg;
+}
+
 =item enable_previous
 
 =cut
 =item enable_previous
 
 =cut
index 47045cd..b5823f4 100644 (file)
@@ -5,6 +5,7 @@ use base qw( FS::TemplateItem_Mixin FS::Record );
 use FS::Record qw( qsearchs ); #qsearch
 use FS::part_pkg;
 use FS::cust_location;
 use FS::Record qw( qsearchs ); #qsearch
 use FS::part_pkg;
 use FS::cust_location;
+use FS::quotation;
 use FS::quotation_pkg_discount; #so its loaded when TemplateItem_Mixin needs it
 
 =head1 NAME
 use FS::quotation_pkg_discount; #so its loaded when TemplateItem_Mixin needs it
 
 =head1 NAME
@@ -82,8 +83,11 @@ points to.  You can ask the object for a copy with the I<hash> method.
 sub table { 'quotation_pkg'; }
 
 sub display_table         { 'quotation_pkg'; }
 sub table { 'quotation_pkg'; }
 
 sub display_table         { 'quotation_pkg'; }
-sub display_table_orderby { 'quotationpkgnum'; } # something else?
-                                                 #  (for invoice display order)
+
+#forget it, just overriding cust_bill_pkg_display entirely
+#sub display_table_orderby { 'quotationpkgnum'; } # something else?
+#                                                 #  (for invoice display order)
+
 sub discount_table        { 'quotation_pkg_discount'; }
 
 =item insert
 sub discount_table        { 'quotation_pkg_discount'; }
 
 =item insert
@@ -113,8 +117,9 @@ sub check {
 
   my $error = 
     $self->ut_numbern('quotationpkgnum')
 
   my $error = 
     $self->ut_numbern('quotationpkgnum')
-    || $self->ut_foreign_key('pkgpart', 'part_pkg', 'pkgpart' )
-    || $self->ut_foreign_keyn('locationnum', 'cust_location', 'locationnum' )
+    || $self->ut_foreign_key(  'quotationnum', 'quotation',    'quotationnum' )
+    || $self->ut_foreign_key(  'pkgpart',      'part_pkg',     'pkgpart'      )
+    || $self->ut_foreign_keyn( 'locationnum', 'cust_location', 'locationnum'  )
     || $self->ut_numbern('start_date')
     || $self->ut_numbern('contract_end')
     || $self->ut_numbern('quantity')
     || $self->ut_numbern('start_date')
     || $self->ut_numbern('contract_end')
     || $self->ut_numbern('quantity')
@@ -137,7 +142,7 @@ sub desc {
 
 sub setup {
   my $self = shift;
 
 sub setup {
   my $self = shift;
-  return '0.00' if $self->waive_setup eq 'Y';
+  return '0.00' if $self->waive_setup eq 'Y' || $self->{'_NO_SETUP_KLUDGE'};
   my $part_pkg = $self->part_pkg;
   #my $setup = $part_pkg->can('base_setup') ? $part_pkg->base_setup
   #                                         : $part_pkg->option('setup_fee');
   my $part_pkg = $self->part_pkg;
   #my $setup = $part_pkg->can('base_setup') ? $part_pkg->base_setup
   #                                         : $part_pkg->option('setup_fee');
@@ -150,6 +155,7 @@ sub setup {
 
 sub recur {
   my $self = shift;
 
 sub recur {
   my $self = shift;
+  return '0.00' if $self->{'_NO_RECUR_KLUDGE'};
   my $part_pkg = $self->part_pkg;
   my $recur = $part_pkg->can('base_recur') ? $part_pkg->base_recur
                                            : $part_pkg->option('recur_fee');
   my $part_pkg = $self->part_pkg;
   my $recur = $part_pkg->can('base_recur') ? $part_pkg->base_recur
                                            : $part_pkg->option('recur_fee');
@@ -158,6 +164,42 @@ sub recur {
   sprintf('%.2f', $recur);
 }
 
   sprintf('%.2f', $recur);
 }
 
+=item cust_bill_pkg_display [ type => TYPE ]
+
+=cut
+
+sub cust_bill_pkg_display {
+  my ( $self, %opt ) = @_;
+
+  my $type = $opt{type} if exists $opt{type};
+  return () if $type eq 'U'; #quotations don't have usage
+
+  if ( $self->get('display') ) {
+    return ( grep { defined($type) ? ($type eq $_->type) : 1 }
+               @{ $self->get('display') }
+           );
+  } else {
+
+    #??
+    my $setup = $self->new($self->hashref);
+    $setup->{'_NO_RECUR_KLUDGE'} = 1;
+    $setup->{'type'} = 'S';
+    my $recur = $self->new($self->hashref);
+    $recur->{'_NO_SETUP_KLUDGE'} = 1;
+    $recur->{'type'} = 'R';
+
+    if ( $type eq 'S' ) {
+      return ($setup);
+    } elsif ( $type eq 'R' ) {
+      return ($recur);
+    } else {
+      return ($setup, $recur);
+    }
+
+  }
+
+}
+
 =back
 
 =head1 BUGS
 =back
 
 =head1 BUGS