summaryrefslogtreecommitdiff
path: root/FS/FS/part_event
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2013-08-18 19:58:15 -0700
committerIvan Kohler <ivan@freeside.biz>2013-08-18 19:58:15 -0700
commited0b1255389309d81f1e87ad3b1d5bd7ab3dd9b7 (patch)
treee05c5f615b63ba1842d39e7ef6b7f5b819bd76c8 /FS/FS/part_event
parentdc797c21faf993cec12ae92c190043c4f8bb2ab2 (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.pm40
-rw-r--r--FS/FS/part_event/Action/pkg_sales_credit.pm41
-rw-r--r--FS/FS/part_event/Action/pkg_sales_credit_pkg_class.pm9
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;