[freeside-commits] branch master updated. ed0b1255389309d81f1e87ad3b1d5bd7ab3dd9b7

Ivan ivan at 420.am
Sun Aug 18 19:58:16 PDT 2013


The branch, master has been updated
       via  ed0b1255389309d81f1e87ad3b1d5bd7ab3dd9b7 (commit)
      from  dc797c21faf993cec12ae92c190043c4f8bb2ab2 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit ed0b1255389309d81f1e87ad3b1d5bd7ab3dd9b7
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Sun Aug 18 19:58:15 2013 -0700

    continue sales person work: customer and package selection, commissions, reporting.  RT#23402

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 0000000..666de13
--- /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 0000000..8e04a3b
--- /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 0000000..600985b
--- /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 0000000..dba2a90
--- /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 </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 0000000..aab3741
--- /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>

-----------------------------------------------------------------------

Summary of changes:
 .../Action/Mixin/credit_sales_pkg_class.pm         |   40 +++++++++++++++++++
 FS/FS/part_event/Action/pkg_sales_credit.pm        |   41 ++++++++++++++++++++
 .../Action/pkg_sales_credit_pkg_class.pm           |    9 ++++
 ...st_pkg_quantity.html => cust_pkg_salesnum.html} |   12 +++---
 ...st_pkg_quantity.html => cust_pkg_salesnum.html} |   10 ++--
 5 files changed, 101 insertions(+), 11 deletions(-)
 create mode 100644 FS/FS/part_event/Action/Mixin/credit_sales_pkg_class.pm
 create mode 100644 FS/FS/part_event/Action/pkg_sales_credit.pm
 create mode 100644 FS/FS/part_event/Action/pkg_sales_credit_pkg_class.pm
 copy httemplate/edit/{cust_pkg_quantity.html => cust_pkg_salesnum.html} (78%)
 copy httemplate/edit/process/{cust_pkg_quantity.html => cust_pkg_salesnum.html} (73%)




More information about the freeside-commits mailing list