summaryrefslogtreecommitdiff
path: root/FS/FS/quotation_pkg.pm
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2014-03-25 12:59:42 -0700
committerIvan Kohler <ivan@freeside.biz>2014-03-25 12:59:42 -0700
commit0692ff47a2eac65616bf24104a51e558506f1b8f (patch)
treeb4ca73b7e1ca7454a94122df92e8c7a36ca0c0cd /FS/FS/quotation_pkg.pm
parent9979b45f11a865efaa04f6938207b1243d042831 (diff)
fix quotations vs. currency_fixed price plan, RT#26810, RT#21565
Diffstat (limited to 'FS/FS/quotation_pkg.pm')
-rw-r--r--FS/FS/quotation_pkg.pm38
1 files changed, 37 insertions, 1 deletions
diff --git a/FS/FS/quotation_pkg.pm b/FS/FS/quotation_pkg.pm
index c98e0f9..79cce80 100644
--- a/FS/FS/quotation_pkg.pm
+++ b/FS/FS/quotation_pkg.pm
@@ -157,13 +157,37 @@ sub recur {
my $self = shift;
return '0.00' if $self->{'_NO_RECUR_KLUDGE'};
my $part_pkg = $self->part_pkg;
- my $recur = $part_pkg->can('base_recur') ? $part_pkg->base_recur
+ my $recur = $part_pkg->can('base_recur') ? $part_pkg->base_recur($self)
: $part_pkg->option('recur_fee');
#XXX discounts
$recur *= $self->quantity if $self->quantity;
sprintf('%.2f', $recur);
}
+=item part_pkg_currency_option OPTIONNAME
+
+Returns a two item list consisting of the currency of this quotation's customer
+or prospect, if any, and a value for the provided option. If the customer or
+prospect has a currency, the value is the option value the given name and the
+currency (see L<FS::part_pkg_currency>). Otherwise, if the customer or
+prospect has no currency, is the regular option value for the given name (see
+L<FS::part_pkg_option>).
+
+=cut
+
+#false laziness w/cust_pkg->part_pkg_currency_option
+sub part_pkg_currency_option {
+ my( $self, $optionname ) = @_;
+ my $part_pkg = $self->part_pkg;
+ my $prospect_or_customer = $self->cust_main || $self->prospect_main;
+ if ( my $currency = $prospect_or_customer->currency ) {
+ ($currency, $part_pkg->part_pkg_currency_option($currency, $optionname) );
+ } else {
+ ('', $part_pkg->option($optionname) );
+ }
+}
+
+
=item cust_bill_pkg_display [ type => TYPE ]
=cut
@@ -213,6 +237,18 @@ sub cust_main {
$quotation->cust_main;
}
+=item prospect_main
+
+Returns the prospect (L<FS::prospect_main> object).
+
+=cut
+
+sub prospect_main {
+ my $self = shift;
+ my $quotation = FS::quotation->by_key($self->quotationnum) or return '';
+ $quotation->prospect_main;
+}
+
=back
=head1 BUGS