From: Ivan Kohler Date: Mon, 11 Mar 2013 09:13:24 +0000 (-0700) Subject: fix quotations, RT#21103 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=53a1130923c4905b267239c369949aadde657c7c fix quotations, RT#21103 --- diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 717e49844..29f8ea4b8 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -1225,6 +1225,8 @@ sub tables_hashref { 'quotation_pkg' => { 'columns' => [ 'quotationpkgnum', 'serial', '', '', '', '', + 'quotationnum', 'int', 'NULL', '', '', '', #shouldn't be null, + # but history... 'pkgpart', 'int', '', '', '', '', 'locationnum', 'int', 'NULL', '', '', '', 'start_date', @date_type, '', '', diff --git a/FS/FS/Template_Mixin.pm b/FS/FS/Template_Mixin.pm index 0d0fbfb73..2a325349d 100644 --- a/FS/FS/Template_Mixin.pm +++ b/FS/FS/Template_Mixin.pm @@ -2049,6 +2049,11 @@ separate quantities, for some reason). =cut +sub _items_nontax { + my $self = shift; + grep { $_->pkgnum } $self->cust_bill_pkg; +} + 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; - 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; diff --git a/FS/FS/quotation.pm b/FS/FS/quotation.pm index bf2711b0a..6d36f19d9 100644 --- a/FS/FS/quotation.pm +++ b/FS/FS/quotation.pm @@ -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 diff --git a/FS/FS/quotation_pkg.pm b/FS/FS/quotation_pkg.pm index 47045cd13..b5823f450 100644 --- a/FS/FS/quotation_pkg.pm +++ b/FS/FS/quotation_pkg.pm @@ -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::quotation; 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 method. 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 @@ -113,8 +117,9 @@ sub check { 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') @@ -137,7 +142,7 @@ sub desc { 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'); @@ -150,6 +155,7 @@ sub setup { 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'); @@ -158,6 +164,42 @@ sub 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