X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fquotation.pm;h=e2f6f02ea2751cfa769733f6acaec433516b148e;hb=c4f0fd74ef73d08f644693d2829086fddc2e7b7e;hp=daacf71fec4c056b17595ef4f7217ec7acea6fa2;hpb=ba751f4f2e474abd9312d958952b6c1a3821dc7c;p=freeside.git diff --git a/FS/FS/quotation.pm b/FS/FS/quotation.pm index daacf71fe..e2f6f02ea 100644 --- a/FS/FS/quotation.pm +++ b/FS/FS/quotation.pm @@ -133,6 +133,9 @@ sub check { $self->usernum($FS::CurrentUser::CurrentUser->usernum) unless $self->usernum; + return 'confidence must be an integer between 1 and 100' + if length($self->confidence) && (($self->confidence < 1) || ($self->confidence > 100)); + return 'prospectnum or custnum must be specified' if ! $self->prospectnum && ! $self->custnum; @@ -310,6 +313,17 @@ sub _items_total { }); my $total_setup = $self->total_setup; + my $total_recur = $self->total_recur; + my $setup_show = $total_setup > 0 ? 1 : 0; + my $recur_show = $total_recur > 0 ? 1 : 0; + unless ($setup_show && $recur_show) { + foreach my $quotation_pkg ($self->quotation_pkg) { + $setup_show = 1 if !$setup_show and $quotation_pkg->setup_show_zero; + $recur_show = 1 if !$recur_show and $quotation_pkg->recur_show_zero; + last if $setup_show && $recur_show; + } + } + foreach my $pkg_tax (@setup_tax) { if ($pkg_tax->setup_amount > 0) { $total_setup += $pkg_tax->setup_amount; @@ -320,9 +334,9 @@ sub _items_total { } } - if ( $total_setup > 0 ) { + if ( $setup_show ) { push @items, { - 'total_item' => $self->mt( $self->total_recur > 0 ? 'Total Setup' : 'Total' ), + 'total_item' => $self->mt( $recur_show ? 'Total Setup' : 'Total' ), 'total_amount' => sprintf('%.2f',$total_setup), 'break_after' => ( scalar(@recur_tax) ? 1 : 0 ) }; @@ -330,7 +344,6 @@ sub _items_total { #could/should add up the different recurring frequencies on lines of their own # but this will cover the 95% cases for now - my $total_recur = $self->total_recur; # label these with the frequency foreach my $pkg_tax (@recur_tax) { if ($pkg_tax->recur_amount > 0) { @@ -345,7 +358,7 @@ sub _items_total { } } - if ( $total_recur > 0 ) { + if ( $recur_show ) { push @items, { 'total_item' => $self->mt('Total Recurring'), 'total_amount' => sprintf('%.2f',$total_recur), @@ -386,7 +399,7 @@ sub _items_total { sub enable_previous { 0 } -=item convert_cust_main +=item convert_cust_main [ PARAMS ] If this quotation already belongs to a customer, then returns that customer, as an FS::cust_main object. @@ -398,10 +411,13 @@ packages as real packages for the customer. If there is an error, returns an error message, otherwise, returns the newly-created FS::cust_main object. +Accepts the same params as L. + =cut sub convert_cust_main { my $self = shift; + my $params = shift || {}; my $cust_main = $self->cust_main; return $cust_main if $cust_main; #already converted, don't again @@ -418,7 +434,7 @@ sub convert_cust_main { $self->prospectnum(''); $self->custnum( $cust_main->custnum ); - my $error = $self->replace || $self->order; + my $error = $self->replace || $self->order(undef,$params); if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; @@ -430,7 +446,7 @@ sub convert_cust_main { } -=item order [ HASHREF ] +=item order [ HASHREF ] [ PARAMS ] This method is for use with quotations which are already associated with a customer. @@ -442,11 +458,16 @@ If HASHREF is passed, it will be filled with a hash mapping the C of each quoted package to the C of the package as ordered. +If PARAMS hashref is passed, the following params are accepted: + +onhold - if true, suspends newly ordered packages + =cut sub order { my $self = shift; my $pkgnum_map = shift || {}; + my $params = shift || {}; my $details_map = {}; tie my %all_cust_pkg, 'Tie::RefHash'; @@ -497,10 +518,11 @@ sub order { } } - foreach my $quotationpkgnum (keys %$pkgnum_map) { - # convert the objects to just pkgnums - my $cust_pkg = $pkgnum_map->{$quotationpkgnum}; - $pkgnum_map->{$quotationpkgnum} = $cust_pkg->pkgnum; + if ($$params{'onhold'}) { + foreach my $quotationpkgnum (keys %$pkgnum_map) { + last if $error; + $error = $pkgnum_map->{$quotationpkgnum}->suspend(); + } } if ($error) { @@ -509,6 +531,13 @@ sub order { } $dbh->commit or die $dbh->errstr if $oldAutoCommit; + + foreach my $quotationpkgnum (keys %$pkgnum_map) { + # convert the objects to just pkgnums + my $cust_pkg = $pkgnum_map->{$quotationpkgnum}; + $pkgnum_map->{$quotationpkgnum} = $cust_pkg->pkgnum; + } + ''; #no error }