=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
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) ) {
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
}
+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);
}
+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);