summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
-rwxr-xr-xhttemplate/edit/cust_pkg_salesnum.html49
-rw-r--r--httemplate/edit/process/cust_pkg_salesnum.html33
5 files changed, 172 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;
diff --git a/httemplate/edit/cust_pkg_salesnum.html b/httemplate/edit/cust_pkg_salesnum.html
new file mode 100755
index 000000000..dba2a905e
--- /dev/null
+++ b/httemplate/edit/cust_pkg_salesnum.html
@@ -0,0 +1,49 @@
+<& /elements/header-popup.html, "Change Sales Person" &>
+<& /elements/error.html &>
+
+<FORM ACTION="<% $p %>edit/process/cust_pkg_salesnum.html" METHOD=POST>
+<INPUT TYPE="hidden" NAME="pkgnum" VALUE="<% $pkgnum %>">
+<& /elements/table-grid.html, 'bgcolor' => '#cccccc', 'cellpadding' => 2 &>
+
+ <TR>
+ <TH ALIGN="right">Current package&nbsp;</TH>
+ <TD CLASS="grid">
+ <% $curuser->option('show_pkgnum') ? $cust_pkg->pkgnum.': ' : '' %><B><% $part_pkg->pkg |h %></B> - <% $part_pkg->comment |h %>
+ </TD>
+ </TR>
+
+<& /elements/tr-select-sales.html,
+ #'field' => 'salesnum',
+ 'curr_value' => $cust_pkg->salesnum,
+ 'th' => 1,
+&>
+
+</TABLE>
+
+<BR>
+<INPUT NAME="submit" TYPE="submit" VALUE="Change">
+
+</FORM>
+</BODY>
+</HTML>
+
+<%init>
+
+#some false laziness w/misc/change_pkg.cgi
+
+my $conf = new FS::Conf;
+
+my $curuser = $FS::CurrentUser::CurrentUser;
+
+die "access denied"
+ unless $curuser->access_right('Change customer package');
+
+my $pkgnum = scalar($cgi->param('pkgnum'));
+$pkgnum =~ /^(\d+)$/ or die "illegal pkgnum $pkgnum";
+$pkgnum = $1;
+
+my $cust_pkg = FS::cust_pkg->by_key($pkgnum) or die "unknown pkgnum $pkgnum";
+
+my $part_pkg = $cust_pkg->part_pkg;
+
+</%init>
diff --git a/httemplate/edit/process/cust_pkg_salesnum.html b/httemplate/edit/process/cust_pkg_salesnum.html
new file mode 100644
index 000000000..aab37416a
--- /dev/null
+++ b/httemplate/edit/process/cust_pkg_salesnum.html
@@ -0,0 +1,33 @@
+% if ($error) {
+% $cgi->param('error', $error);
+% $cgi->redirect(popurl(3). 'edit/cust_pkg_salesnum.html?'. $cgi->query_string );
+% } else {
+
+ <& /elements/header-popup.html, "Sales Person changed" &>
+ <SCRIPT TYPE="text/javascript">
+ window.top.location.reload();
+ </SCRIPT>
+ </BODY>
+ </HTML>
+
+% }
+<%init>
+
+my $curuser = $FS::CurrentUser::CurrentUser;
+
+die "access denied"
+ unless $curuser->access_right('Change customer package');
+
+my $cust_pkg = qsearchs({
+ 'table' => 'cust_pkg',
+ 'addl_from' => 'LEFT JOIN cust_main USING ( custnum )',
+ 'hashref' => { 'pkgnum' => scalar($cgi->param('pkgnum')), },
+ 'extra_sql' => ' AND '. $curuser->agentnums_sql,
+});
+die 'unknown pkgnum' unless $cust_pkg;
+
+$cgi->param('salesnum') =~ /^(\d*)$/;
+my $salesnum = $1;
+my $error = $cust_pkg->set_salesnum($1);
+
+</%init>