From 19d05a388f1525eeb776295dbba7e3beda9b84f3 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Tue, 26 Feb 2013 01:21:55 -0800 Subject: [PATCH] add event action to increment the referring customer's pacakge's next bill date, RT#20143 --- FS/FS/part_event/Action/referral_pkg_billdate.pm | 55 ++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 FS/FS/part_event/Action/referral_pkg_billdate.pm diff --git a/FS/FS/part_event/Action/referral_pkg_billdate.pm b/FS/FS/part_event/Action/referral_pkg_billdate.pm new file mode 100644 index 000000000..40d94e2d5 --- /dev/null +++ b/FS/FS/part_event/Action/referral_pkg_billdate.pm @@ -0,0 +1,55 @@ +package FS::part_event::Action::referral_pkg_billdate; + +use strict; +use base qw( FS::part_event::Action ); + +sub description { "Increment the referring customer's package's next bill date"; } + +#sub eventtable_hashref { +#} + +sub option_fields { + ( + 'if_pkgpart' => { 'label' => 'Only packages', + 'type' => 'select-part_pkg', + 'multiple' => 1, + }, + 'increment' => { 'label' => 'Increment by', + 'type' => 'freq', + 'value' => '1m', + }, + ); +} + +sub do_action { + my( $self, $cust_object, $cust_event ) = @_; + + my $cust_main = $self->cust_main($cust_object); + + return 'No referring customer' unless $cust_main->referral_custnum; + + my $referring_cust_main = $cust_main->referring_cust_main; + #return 'Referring customer is cancelled' + # if $referring_cust_main->status eq 'cancelled'; + + my %if_pkgpart = map { $_=>1 } split(/\s*,\s*/, $self->option('if_pkgpart') ); + my @cust_pkg = grep $if_pkgpart{ $_->pkgpart }, + $referring_cust_main->billing_pkgs; + return 'No qualifying billing package definition' unless @cust_pkg; + + my $cust_pkg = $cust_pkg[0]; #only one + + my $bill = $cust_pkg->bill || $cust_pkg->setup || time; + + $cust_pkg->bill( + $cust_pkg->part_pkg->add_freq( $bill, $self->option('increment') ) + ); + + my $error = $cust_pkg->replace; + die "Error incrementing next bill date: $error" if $error; + + ''; + +} + +1; -- 2.11.0