X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fquotation_pkg.pm;h=3f6742c7997eb7005d340530439ae87e4675d3a6;hp=e264209ef6e9911c5680483b007ea30e195f9854;hb=5372897f367498972c96f5494e142e6e11b29eb8;hpb=f32ac83068c6211f829f1688a1a9cdec71bc6ec7 diff --git a/FS/FS/quotation_pkg.pm b/FS/FS/quotation_pkg.pm index e264209ef..3f6742c79 100644 --- a/FS/FS/quotation_pkg.pm +++ b/FS/FS/quotation_pkg.pm @@ -106,7 +106,11 @@ sub detail_table { 'quotation_pkg_detail'; } =item insert Adds this record to the database. If there is an error, returns the error, -otherwise returns false. +otherwise returns false. Accepts the following options: + +quotation_details - optional arrayref of detail strings to add (creates quotation_pkg_detail records) + +copy_on_order - value for this field when creating quotation_pkg_detail records (same for all details) =cut @@ -117,6 +121,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->setup_discountnum || $self->recur_discountnum) ) { @@ -128,10 +148,22 @@ sub insert { if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; - } else { - $dbh->commit if $oldAutoCommit; - return ''; } + + if ($options{'quotation_details'}) { + $error = $self->set_details( + details => $options{'quotation_details'}, + copy_on_order => $options{'copy_on_order'} ? 'Y' : '', + ); + if ( $error ) { + $error .= ' (setting details)'; + $dbh->rollback if $oldAutoCommit; + return $error; + } + } + + $dbh->commit if $oldAutoCommit; + return ''; } =item delete @@ -311,6 +343,11 @@ sub setup { } +sub setup_show_zero { + my $self = shift; + return $self->part_pkg->setup_show_zero; +} + sub setup_tax { my $self = shift; sum(0, map { $_->setup_amount } $self->quotation_pkg_tax); @@ -326,6 +363,11 @@ sub recur { } +sub recur_show_zero { + my $self = shift; + return $self->part_pkg->recur_show_zero; +} + sub recur_tax { my $self = shift; sum(0, map { $_->recur_amount } $self->quotation_pkg_tax); @@ -380,16 +422,27 @@ sub delete_details { } -=item set_details [ DETAIL, DETAIL, ... ] +=item set_details PARAM + +Sets new quotation details for this package (see L), +removing existing details. + +Recognizes the following parameters: -Sets quotation details for this package (see L). +details - arrayref of strings, one for each new detail + +copy_on_order - if true, sets copy_on_order flag on new details If there is an error, returns the error, otherwise returns false. =cut sub set_details { - my( $self, @details ) = @_; + my $self = shift; + my %opt = @_; + + $opt{'details'} ||= []; + my @details = @{$opt{'details'}}; my $oldAutoCommit = $FS::UID::AutoCommit; local $FS::UID::AutoCommit = 0; @@ -405,6 +458,7 @@ sub set_details { my $quotation_pkg_detail = new FS::quotation_pkg_detail { 'quotationpkgnum' => $self->quotationpkgnum, 'detail' => $detail, + 'copy_on_order' => $opt{'copy_on_order'} ? 'Y' : '', }; $error = $quotation_pkg_detail->insert; if ( $error ) {