summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2013-02-26 01:21:55 -0800
committerIvan Kohler <ivan@freeside.biz>2013-02-26 01:21:55 -0800
commit19d05a388f1525eeb776295dbba7e3beda9b84f3 (patch)
tree92bb98b90035cd38b4d74f96da9430dfc369e572
parentcf5c051b077e618cf5fdc6f6a31b68b7d133a966 (diff)
add event action to increment the referring customer's pacakge's next bill date, RT#20143
-rw-r--r--FS/FS/part_event/Action/referral_pkg_billdate.pm55
1 files changed, 55 insertions, 0 deletions
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;