X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg.pm;h=540919ee5932996621135b7c10fb7a6b8e3e10d2;hb=35c18f29bc29dedfe2fa4ef037390d90b17f87ba;hp=e4927a3895d2d761a53acf7ac0213ef55b39d54d;hpb=03728b5a1f7e30faebc170389c4d91481ade685e;p=freeside.git diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm index e4927a389..540919ee5 100644 --- a/FS/FS/part_pkg.pm +++ b/FS/FS/part_pkg.pm @@ -1638,16 +1638,120 @@ sub _rebless { $self; } +=item calc_setup CUST_PKG START_DATE DETAILS_ARRAYREF OPTIONS_HASHREF + +=item calc_recur CUST_PKG START_DATE DETAILS_ARRAYREF OPTIONS_HASHREF + +Calculates and returns the setup or recurring fees, respectively, for this +package. Implementation is in the FS::part_pkg:* module specific to this price +plan. + +Adds invoicing details to the passed-in DETAILS_ARRAYREF + +Options are passed as a hashref. Available options: + +=over 4 + +=item freq_override + +Frequency override (for calc_recur) + +=item discounts + +This option is filled in by the method rather than controlling its operation. +It is an arrayref. Applicable discounts will be added to the arrayref, as +L. + +=item real_pkgpart + +For package add-ons, is the base L, otherwise +no different than pkgpart. + +=item precommit_hooks + +This option is filled in by the method rather than controlling its operation. +It is an arrayref. Anonymous coderefs will be added to the arrayref. They +need to be called before completing the billing operation. For calc_recur +only. + +=item increment_next_bill + +Increment the next bill date (boolean, for calc_recur). Typically true except +for particular situations. + +=item setup_fee + +This option is filled in by the method rather than controlling its operation. +It indicates a deferred setup fee that is billed at calc_recur time (see price +plan option prorate_defer_bill). + +=back + +Note: Don't calculate prices when not actually billing the package. For that, +see the L and L methods. + +=cut + #fatal fallbacks sub calc_setup { die 'no calc_setup for '. shift->plan. "\n"; } sub calc_recur { die 'no calc_recur for '. shift->plan. "\n"; } -#fallback that return 0 for old legacy packages with no plan +=item calc_remain CUST_PKG [ OPTION => VALUE ... ] + +Calculates and returns the remaining value to be credited upon package +suspension, change, or cancellation, if enabled. + +Options are passed as a list of keys and values. Available options: + +=over 4 + +=item time + +Override for the current time + +=item cust_credit_source_bill_pkg + +This option is filled in by the method rather than controlling its operation. +It is an arrayref. +L records will +be added to the arrayref indicating the specific line items and amounts which +are the source of this remaining credit. + +=back + +Note: Don't calculate prices when not actually suspending or cancelling the +package. + +=cut + +#fallback that returns 0 for old legacy packages with no plan sub calc_remain { 0; } + +=item calc_units CUST_PKG + +This returns the number of provisioned svc_phone records, or, of the package +count_available_phones option is set, the number available to be provisoined +in the package. + +=cut + +#fallback that returns 0 for old legacy packages with no plan sub calc_units { 0; } #fallback for everything not based on flat.pm sub recur_temporality { 'upcoming'; } + +=item calc_cancel START_DATE DETAILS_ARRAYREF OPTIONS_HASHREF + +Runs any necessary billing on cancellation: another recurring cycle for +recur_temporailty 'preceding' pacakges with the bill_recur_on_cancel option +set (calc_recur), or, any outstanding usage for pacakges with the +bill_usage_on_cancel option set (calc_usage). + +=cut + +#fallback for everything not based on flat.pm, doesn't do this yet (which is +#okay, nothing of ours not based on flat.pm does usage-on-cancel billing sub calc_cancel { 0; } #fallback for everything except bulk.pm @@ -1665,7 +1769,7 @@ recur_cost divided by freq (only supported for monthly and longer frequencies) sub recur_cost_permonth { my($self, $cust_pkg) = @_; return 0 unless $self->freq =~ /^\d+$/ && $self->freq > 0; - sprintf('%.2f', $self->recur_cost / $self->freq ); + sprintf('%.2f', ($self->recur_cost || 0) / $self->freq ); } =item cust_bill_pkg_recur CUST_PKG @@ -1710,7 +1814,7 @@ unit_setup minus setup_cost sub setup_margin { my $self = shift; - $self->unit_setup(@_) - $self->setup_cost; + $self->unit_setup(@_) - ($self->setup_cost || 0); } =item recur_margin_permonth