[freeside-commits] branch FREESIDE_3_BRANCH updated. 6891db8c9287fa670e5f6961c8ad3f2e3097fc3c

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


The branch, FREESIDE_3_BRANCH has been updated
       via  6891db8c9287fa670e5f6961c8ad3f2e3097fc3c (commit)
      from  48c5c17b6ca02cd04f1dd5deb530738f2409c585 (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 6891db8c9287fa670e5f6961c8ad3f2e3097fc3c
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Sun Aug 18 19:58:17 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