9d7bbf8b39e73631f45674bca7740d59f8a031dc
[freeside.git] / FS / FS / part_event / Action / pkg_referral_credit.pm
1 package FS::part_event::Action::pkg_referral_credit;
2
3 use strict;
4 use base qw( FS::part_event::Action::Mixin::credit_flat
5              FS::part_event::Action  );
6
7 sub description { 'Credit the referring customer a specific amount'; }
8
9 sub eventtable_hashref {
10   { 'cust_pkg' => 1 };
11 }
12
13 sub do_action {
14   my( $self, $cust_pkg, $cust_event ) = @_;
15
16   my $cust_main = $self->cust_main($cust_pkg);
17
18 #  my $part_pkg = $cust_pkg->part_pkg;
19
20   return 'No referring customer' unless $cust_main->referral_custnum;
21
22   my $referring_cust_main = $cust_main->referring_cust_main;
23   return 'Referring customer is cancelled'
24     if $referring_cust_main->status eq 'cancelled';
25
26   my $amount    = $self->_calc_credit($cust_pkg, $referring_cust_main);
27   return '' unless $amount > 0;
28
29   my $reasonnum = $self->option('reasonnum');
30
31   my $error = $referring_cust_main->credit(
32     $amount, 
33     \$reasonnum,
34     'eventnum' => $cust_event->eventnum,
35     'addlinfo' => 'for customer #'. $cust_main->display_custnum.
36                                ': '.$cust_main->name,
37   );
38   die "Error crediting customer ". $cust_main->referral_custnum.
39       " for referral: $error"
40     if $error;
41
42 }
43
44 1;