X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fquotation.pm;h=1a6641f7dc3bfeddad2fccc618abc14e58582079;hb=0a91d21fcf8ebeb12cd71230d79153c1fa0d82a3;hp=38b9cd2ed08972030a1bd67c725716c29f47596f;hpb=e50c06b014a5727385087fac381f978603e227ad;p=freeside.git diff --git a/FS/FS/quotation.pm b/FS/FS/quotation.pm index 38b9cd2ed..1a6641f7d 100644 --- a/FS/FS/quotation.pm +++ b/FS/FS/quotation.pm @@ -133,8 +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 'confidence percentage 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 @@ -364,9 +365,8 @@ sub _items_total { 'total_amount' => sprintf('%.2f',$total_recur), 'break_after' => 1, }; - # show 'first payment' line (setup + recur) if there are no prorated - # packages included - my $disable_total = 0; + + my $prorate_total = 0; foreach my $quotation_pkg ($self->quotation_pkg) { my $part_pkg = $quotation_pkg->part_pkg; if ( $part_pkg->plan =~ /^(prorate|torrus|agent$)/ @@ -376,17 +376,27 @@ sub _items_total { && $self->cust_main->billing_pkgs #num_billing_pkgs when we have it ) ) { - $disable_total = 1; + $prorate_total = 1; last; } } - if (!$disable_total) { + + if ( $prorate_total ) { + push @items, { + 'total_item' => $self->mt('First payment (depending on day of month)'), + 'total_amount' => [ sprintf('%.2f', $total_setup), + sprintf('%.2f', $total_setup + $total_recur) + ], + 'break_after' => 1, + }; + } else { push @items, { 'total_item' => $self->mt('First payment'), 'total_amount' => sprintf('%.2f', $total_setup + $total_recur), 'break_after' => 1, }; } + } return @items; @@ -399,7 +409,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. @@ -411,10 +421,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 @@ -431,7 +444,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; @@ -443,7 +456,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. @@ -455,11 +468,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'; @@ -510,10 +528,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) { @@ -522,6 +541,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 }