X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fquotation_pkg.pm;h=5607b9c331a2137922a2586cd9ebba128c75c2be;hb=690b42d0311236b1c07acb5bdbae32276e20e3b9;hp=f3356b51260baadd38aa402b00fdf01faed76f9a;hpb=818ae79719404b6b7a665872e0f7b57a6716a193;p=freeside.git diff --git a/FS/FS/quotation_pkg.pm b/FS/FS/quotation_pkg.pm index f3356b512..5607b9c33 100644 --- a/FS/FS/quotation_pkg.pm +++ b/FS/FS/quotation_pkg.pm @@ -114,6 +114,22 @@ sub insert { my $oldAutoCommit = $FS::UID::AutoCommit; local $FS::UID::AutoCommit = 0; + #false laziness w/cust_main::Packages::order_pkg + if ( $options{'locationnum'} and $options{'locationnum'} != -1 ) { + + $self->locationnum($options{'locationnum'}); + + } elsif ( $options{'cust_location'} ) { + + my $error = $options{'cust_location'}->find_or_insert; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return "inserting cust_location (transaction rolled back): $error"; + } + $self->locationnum($options{'cust_location'}->locationnum); + + } + my $error = $self->SUPER::insert; if ( !$error and $self->discountnum ) { @@ -242,25 +258,20 @@ on failure. sub estimate { my $self = shift; - my $part_pkg = $self->part_pkg; - my $quantity = $self->quantity || 1; - my ($unitsetup, $unitrecur); - # calculate base fees - if ( $self->waive_setup eq 'Y' || $self->{'_NO_SETUP_KLUDGE'} ) { - $unitsetup = '0.00'; - } else { - $unitsetup = $part_pkg->option('setup_fee',1) || '0.00'; # XXX 3.x only - } - if ( $self->{'_NO_RECUR_KLUDGE'} ) { - $unitrecur = '0.00'; - } else { - $unitrecur = $part_pkg->base_recur; - } - #XXX add-on packages + my( $unitsetup, $unitrecur ) = (0, 0); + foreach my $part_pkg ( $self->part_pkg->self_and_bill_linked ) { + + $unitsetup += $part_pkg->option('setup_fee',1) || '0' # 3.x only + unless $self->waive_setup eq 'Y' || $self->{'_NO_SETUP_KLUDGE'}; + + $unitrecur += $part_pkg->base_recur + unless $self->{'_NO_RECUR_KLUDGE'}; - $self->set('unitsetup', $unitsetup); - $self->set('unitrecur', $unitrecur); + } + + $self->set('unitsetup', sprintf('%.2f', $unitsetup) ); + $self->set('unitrecur', sprintf('%.2f', $unitrecur) ); my $error = $self->replace; return $error if $error; @@ -384,12 +395,22 @@ sub setup { * ($self->quantity || 1); } +sub setup_show_zero { + my $self = shift; + return $self->part_pkg->setup_show_zero; +} + sub recur { my $self = shift; ($self->unitrecur - sum(0, map { $_->recur_amount } $self->pkg_discount)) * ($self->quantity || 1); } +sub recur_show_zero { + my $self = shift; + return $self->part_pkg->recur_show_zero; +} + =item delete_details Deletes all quotation_pkgs_details associated with this pkg (see L).