X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fquotation_pkg.pm;h=d5c02e116368326925ea48e3875cd8d46f10aeaa;hb=fe30e0938366ea9524ccbdffbfb63b0950233880;hp=88147bc99f5012e271641fa5a7515f2df7155fc8;hpb=c6df7ad114570d49e51ef1f806b83bb7e1a1bca8;p=freeside.git diff --git a/FS/FS/quotation_pkg.pm b/FS/FS/quotation_pkg.pm index 88147bc99..d5c02e116 100644 --- a/FS/FS/quotation_pkg.pm +++ b/FS/FS/quotation_pkg.pm @@ -105,11 +105,8 @@ otherwise returns false. =cut -use Data::Dumper; #XXX DEBUG sub insert { my ($self, %options) = @_; - warn Dumper($self); - warn Dumper(\%options); my $dbh = dbh; my $oldAutoCommit = $FS::UID::AutoCommit; @@ -150,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; @@ -198,6 +195,20 @@ sub check { || $self->ut_enum('waive_setup', [ '', 'Y'] ) ; + if ($self->locationnum eq '') { + # use the customer default + my $quotation = $self->quotation; + if ($quotation->custnum) { + $self->set('locationnum', $quotation->cust_main->ship_locationnum); + } elsif ($quotation->prospectnum) { + # 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 + } + return $error if $error; $self->SUPER::check; @@ -318,7 +329,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 @@ -329,7 +340,7 @@ sub insert_discount { 'setup' => $self->discountnum_setup, } ); - $cust_pkg_discount->insert; + $quotation_pkg_discount->insert; } sub _item_discount { @@ -351,7 +362,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}; @@ -361,13 +372,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); } @@ -420,6 +431,11 @@ sub cust_main { $quotation->cust_main; } +sub tax_locationnum { + my $self = shift; + $self->locationnum; +} + #stub for 3.x sub quotation { @@ -432,11 +448,39 @@ sub quotation_pkg_discount { 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 }) : ''; +} + + +sub _upgrade_data { + my $class = shift; + my @quotation_pkg_without_location = + qsearch( 'quotation_pkg', { locationnum => '' } ); + if (@quotation_pkg_without_location) { + warn "setting default location on quotation_pkg records\n"; + foreach my $quotation_pkg (@quotation_pkg_without_location) { + # check() will fix this + my $error = $quotation_pkg->replace; + if ($error) { + die "quotation #".$quotation_pkg->quotationnum.": $error\n"; + } + } + } + ''; +} + =back =head1 BUGS -Doesn't support taxes, fees, or add-on packages. +Doesn't support fees, or add-on packages. =head1 SEE ALSO