employee commission reporting, RT#6991
[freeside.git] / FS / FS / part_event / Action / pkg_employee_credit.pm
1 package FS::part_event::Action::pkg_employee_credit;
2
3 use strict;
4 use base qw( FS::part_event::Action::pkg_referral_credit );
5 use FS::Record qw(qsearchs);
6 use FS::access_user;
7
8 sub description { 'Credit the ordering employee a specific amount'; }
9
10 #a little false laziness w/pkg_referral_credit
11 sub do_action {
12   my( $self, $cust_pkg, $cust_event ) = @_;
13
14   my $cust_main = $self->cust_main($cust_pkg);
15
16   #yuck.  this is why text $otaker is gone in 2.1
17   my $otaker = $cust_pkg->otaker;
18   my $employee = qsearchs('access_user', { 'username' => $otaker } )
19     or return "No employee for username $otaker";
20   return "No customer record for employee ". $employee->username
21     unless $employee->user_custnum;
22
23   my $employee_cust_main = $employee->user_cust_main;
24     #? or return "No customer record for employee ". $employee->username;
25
26   my $amount    = $self->_calc_credit($cust_pkg);
27   return '' unless $amount > 0;
28
29   my $reasonnum = $self->option('reasonnum');
30
31   my $error = $employee_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 ". $employee_cust_main->custnum.
39       " for employee commission: $error"
40     if $error;
41
42 }
43
44 1;