diff options
author | Ivan Kohler <ivan@freeside.biz> | 2013-08-18 19:58:15 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2013-08-18 19:58:15 -0700 |
commit | ed0b1255389309d81f1e87ad3b1d5bd7ab3dd9b7 (patch) | |
tree | e05c5f615b63ba1842d39e7ef6b7f5b819bd76c8 /FS/FS/part_event | |
parent | dc797c21faf993cec12ae92c190043c4f8bb2ab2 (diff) |
continue sales person work: customer and package selection, commissions, reporting. RT#23402
Diffstat (limited to 'FS/FS/part_event')
-rw-r--r-- | FS/FS/part_event/Action/Mixin/credit_sales_pkg_class.pm | 40 | ||||
-rw-r--r-- | FS/FS/part_event/Action/pkg_sales_credit.pm | 41 | ||||
-rw-r--r-- | FS/FS/part_event/Action/pkg_sales_credit_pkg_class.pm | 9 |
3 files changed, 90 insertions, 0 deletions
diff --git a/FS/FS/part_event/Action/Mixin/credit_sales_pkg_class.pm b/FS/FS/part_event/Action/Mixin/credit_sales_pkg_class.pm new file mode 100644 index 000000000..666de1378 --- /dev/null +++ b/FS/FS/part_event/Action/Mixin/credit_sales_pkg_class.pm @@ -0,0 +1,40 @@ +package FS::part_event::Action::Mixin::credit_sales_pkg_class; +use base qw( FS::part_event::Action::Mixin::credit_pkg ); + +use strict; +use FS::Record qw(qsearchs); + +sub option_fields { + my $class = shift; + my %option_fields = $class->SUPER::option_fields; + + delete $option_fields{'percent'}; + + $option_fields{'cust_main_sales'} = { + 'label' => "Credit the customer sales person if there is no package sales person", + 'type' => 'checkbox', + 'value' => 'Y', + }; + + %option_fields; +} + +sub _calc_credit_percent { + my( $self, $cust_pkg ) = @_; + + my $salesnum = $cust_pkg->salesnum; + $salesnum ||= $self->cust_main($cust_pkg)->salesnum + if $self->option('cust_main_sales'); + + return 0 unless $salesnum; + + my $sales_pkg_class = qsearchs( 'sales_pkg_class', { + 'salesnum' => $salesnum, + 'classnum' => $cust_pkg->part_pkg->classnum, + }); + + $sales_pkg_class ? $sales_pkg_class->commission_percent : 0; + +} + +1; diff --git a/FS/FS/part_event/Action/pkg_sales_credit.pm b/FS/FS/part_event/Action/pkg_sales_credit.pm new file mode 100644 index 000000000..8e04a3bd5 --- /dev/null +++ b/FS/FS/part_event/Action/pkg_sales_credit.pm @@ -0,0 +1,41 @@ +package FS::part_event::Action::pkg_sales_credit; + +use strict; +use base qw( FS::part_event::Action::pkg_referral_credit ); + +sub description { 'Credit the sales person a specific amount'; } + +#a little false laziness w/pkg_referral_credit +sub do_action { + my( $self, $cust_pkg, $cust_event ) = @_; + + my $cust_main = $self->cust_main($cust_pkg); + + my $sales = $cust_pkg->sales; + return "No customer record for sales person ". $sales->salesperson + unless $sales->sales_custnum; + + my $sales_cust_main = $sales->sales_cust_main; + #? or return "No customer record for sales person ". $sales->salesperson; + + my $amount = $self->_calc_credit($cust_pkg); + return '' unless $amount > 0; + + my $reasonnum = $self->option('reasonnum'); + + my $error = $sales_cust_main->credit( + $amount, + \$reasonnum, + 'eventnum' => $cust_event->eventnum, + 'addlinfo' => 'for customer #'. $cust_main->display_custnum. + ': '.$cust_main->name. + ', package #'. $cust_pkg->pkgnum, + #'commission_salesnum' => $sales->salesnum, + ); + die "Error crediting customer ". $sales_cust_main->custnum. + " for sales commission: $error" + if $error; + +} + +1; diff --git a/FS/FS/part_event/Action/pkg_sales_credit_pkg_class.pm b/FS/FS/part_event/Action/pkg_sales_credit_pkg_class.pm new file mode 100644 index 000000000..600985bd5 --- /dev/null +++ b/FS/FS/part_event/Action/pkg_sales_credit_pkg_class.pm @@ -0,0 +1,9 @@ +package FS::part_event::Action::pkg_sales_credit_pkg_class; + +use strict; +use base qw( FS::part_event::Action::Mixin::credit_sales_pkg_class + FS::part_event::Action::pkg_sales_credit ); + +sub description { "Credit the package sales person an amount based on their commission percentage for the package's class"; } + +1; |