usernum
+=item close_date
+
+projected date when the quotation will be closed
+
+=item confidence
+
+projected confidence (expressed as integer) that quotation will close
=back
|| $self->ut_numbern('_date')
|| $self->ut_enum('disabled', [ '', 'Y' ])
|| $self->ut_numbern('usernum')
+ || $self->ut_numbern('close_date')
+ || $self->ut_numbern('confidence')
;
return $error if $error;
$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;
my $part_pkg = $pkg->part_pkg;
my $recur_freq = $part_pkg->freq;
- $show{$recur_freq} = 1 if $pkg->unitrecur > 0;
- $show{0} = 1 if $pkg->unitsetup > 0;
+ $show{$recur_freq} = 1 if $pkg->unitrecur > 0 or $pkg->recur_show_zero;
+ $show{0} = 1 if $pkg->unitsetup > 0 or $pkg->setup_show_zero;
($subtotals{0} ||= 0) += $pkg->setup + $pkg->setup_tax;
($subtotals{$recur_freq} ||= 0) += $pkg->recur + $pkg->recur_tax;
$quotation_pkg->get('unit'.$setuprecur));
$this_item->{'amount'} = sprintf('%.2f', $this_item->{'unit_amount'}
* $quotation_pkg->quantity);
- next if $this_item->{'amount'} == 0;
+ next if $this_item->{'amount'} == 0 and !(
+ $setuprecur eq 'setup'
+ ? $quotation_pkg->setup_show_zero
+ : $quotation_pkg->recur_show_zero
+ );
if ( $preref ) {
$this_item->{'preref_html'} = &$preref($quotation_pkg);