From 5c0cfcb8dec7c4f3a7aecea4c550ffb4bfb774c3 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sun, 18 Aug 2013 02:01:19 -0700 Subject: [PATCH] continue sales person work: customer and package selection, commissions, reporting. RT#23402 --- FS/FS/agent.pm | 15 ++++ FS/FS/cust_pkg.pm | 6 +- httemplate/edit/process/quick-cust_pkg.cgi | 4 + httemplate/elements/tr-select-sales.html | 15 +++- httemplate/misc/order_pkg.html | 130 +++++++++++++++++++---------- httemplate/search/cust_pkg.cgi | 8 +- 6 files changed, 128 insertions(+), 50 deletions(-) diff --git a/FS/FS/agent.pm b/FS/FS/agent.pm index 57093e329..0cd07ef15 100644 --- a/FS/FS/agent.pm +++ b/FS/FS/agent.pm @@ -626,6 +626,21 @@ sub num_prepay_credit { $sth->fetchrow_arrayref->[0]; } +=item num_sales + +Returns the number of non-disabled sales people for this agent. + +=cut + +sub num_sales { + my $self = shift; + my $sth = dbh->prepare( + "SELECT COUNT(*) FROM sales WHERE agentnum = ? + AND ( disabled = '' OR disabled IS NULL )" + ) or die dbh->errstr; + $sth->execute($self->agentnum) or die $sth->errstr; + $sth->fetchrow_arrayref->[0]; +} =back diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index 3948c2ffd..676757ece 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -1,9 +1,9 @@ package FS::cust_pkg; - -use strict; -use base qw( FS::otaker_Mixin FS::cust_main_Mixin +use base qw( FS::otaker_Mixin FS::cust_main_Mixin FS::Sales_Mixin FS::contact_Mixin FS::location_Mixin FS::m2m_Common FS::option_Common ); + +use strict; use vars qw($disable_agentcheck $DEBUG $me); use Carp qw(cluck); use Scalar::Util qw( blessed ); diff --git a/httemplate/edit/process/quick-cust_pkg.cgi b/httemplate/edit/process/quick-cust_pkg.cgi index fe5ee5e9e..7dcd232bc 100644 --- a/httemplate/edit/process/quick-cust_pkg.cgi +++ b/httemplate/edit/process/quick-cust_pkg.cgi @@ -70,6 +70,9 @@ my $quantity = $1 || 1; $cgi->param('refnum') =~ /^(\d*)$/ or die 'illegal refnum '. $cgi->param('refnum'); my $refnum = $1; +$cgi->param('salesnum') =~ /^(\d*)$/ + or die 'illegal salesnum '. $cgi->param('salesnum'); +my $salesnum = $1; $cgi->param('contactnum') =~ /^(\-?\d*)$/ or die 'illegal contactnum '. $cgi->param('contactnum'); my $contactnum = $1; @@ -111,6 +114,7 @@ my %hash = ( ? parse_datetime($cgi->param('start_date')) : '' ), + 'salesnum' => $salesnum, 'refnum' => $refnum, 'contactnum' => $contactnum, 'locationnum' => $locationnum, diff --git a/httemplate/elements/tr-select-sales.html b/httemplate/elements/tr-select-sales.html index f77ef50b7..2a2edf03c 100644 --- a/httemplate/elements/tr-select-sales.html +++ b/httemplate/elements/tr-select-sales.html @@ -28,7 +28,11 @@ Example: % if ( scalar(@sales) > 0 ) { - <% $opt{'label'} || emt('Sales Person') %> +% if ( $opt{'th'} ) { + <% $opt{'label'} || emt('Sales Person') %> +% } else { + <% $opt{'label'} || emt('Sales Person') %> +% } > % my $sales = qsearchs('sales', { 'salesnum' => $salesnum }); <% $sales ? $sales->salesperson : '(none)' |h %> @@ -43,7 +47,11 @@ Example: % } else { - <% $opt{'label'} || emt('Sales Person') %> +% if ( $opt{'th'} ) { + <% $opt{'label'} || emt('Sales Person') %> +% } else { + <% $opt{'label'} || emt('Sales Person') %> +% } > <& /elements/select-sales.html, 'curr_value' => $salesnum, @@ -66,7 +74,8 @@ my @sales = qsearch({ 'table' => 'sales', 'hashref' => { 'disabled' => '' }, 'extra_sql' => ' AND '. $curuser->agentnums_sql, }); -warn scalar(@sales); + my $colspan = $opt{'colspan'} ? 'COLSPAN="'.$opt{'colspan'}.'"' : ''; + diff --git a/httemplate/misc/order_pkg.html b/httemplate/misc/order_pkg.html index 66c405ac1..057346810 100644 --- a/httemplate/misc/order_pkg.html +++ b/httemplate/misc/order_pkg.html @@ -1,5 +1,8 @@ -<& /elements/header-popup.html, $quotationnum ? mt('Add package to quotation') - : mt('Order new package') +<& /elements/header-popup.html, { + 'title' => $quotationnum ? mt('Add package to quotation') + : mt('Order new package'), + 'nobr' => 1, + } &> @@ -21,7 +24,39 @@ % } +% my $num_sales = $agent->num_sales; +% my $conf_pkg_referral = $conf->exists('pkg_referral'); +% my $show_sales = $num_sales && $conf_pkg_referral; +% my $show_sales_table = $num_sales || $conf_pkg_referral; + +% if ( $show_sales ) { + <% mt('Sales') |h %> +% } +% if ( $show_sales_table ) { + <% ntable("#cccccc", 2) %> +% } + +<& /elements/tr-select-sales.html, + 'curr_value' => scalar($cgi->param('salesnum')), + 'th' => 1, +&> + +% if ( $conf->exists('pkg_referral') ) { + <& /elements/tr-select-part_referral.html, + 'curr_value' => scalar( $cgi->param('refnum') ), #get rid of empty_label first# || $cust_main->refnum, + 'disable_empty' => 1, + 'multiple' => $conf->exists('pkg_referral-multiple'), + 'colspan' => 7, + &> +% } + +% if ( $show_sales_table ) { +
+% } + +<% mt('Package') |h %> <% ntable("#cccccc", 2) %> + % if ( $part_pkg ) { @@ -39,6 +74,14 @@ <& /elements/tr-input-pkg-quantity.html, curr_value => $quantity &> +% if ( $cust_main && $cust_main->payby =~ /^(CARD|CHEK)$/ ) { +% my $what = lc(FS::payby->shortname($cust_main->payby)); + + <% mt("Disable automatic $what charge") |h %> + + +% } + <% mt('Start date') |h %> @@ -55,38 +98,53 @@ -% if ( $cust_main && $cust_main->payby =~ /^(CARD|CHEK)$/ ) { -% my $what = lc(FS::payby->shortname($cust_main->payby)); - - <% mt("Disable automatic $what charge") |h %> - - -% } + + <% mt('Contract end date') |h %> + + <& /elements/input-date-field.html,{ + 'name' => 'contract_end', + 'format' => $date_format, + 'value' => '', + 'noinit' => 1, + } &> + + + +
+ +% my $discount_cust_pkg = $curuser->access_right('Discount customer package'); +% my $waive_setup_fee = $curuser->access_right('Waive setup fee'); +% +% if ( $discount_cust_pkg || $waive_setup_fee ) { + <% mt('Discounting') |h %> + <% ntable("#cccccc", 2) %> -% if ( $curuser->access_right('Discount customer package') ) { - <& /elements/tr-select-discount.html, +% if ( $waive_setup_fee ) { + + <% mt('Waive setup fee') |h %> + + +% } + +% if ( $discount_cust_pkg ) { + <& /elements/tr-select-discount.html, 'element_etc' => 'DISABLED', 'colspan' => 7, 'cgi' => $cgi, - &> -% } + &> +% } -% if ( $curuser->access_right('Waive setup fee') ) { - - <% mt('Waive setup fee') |h %> - - -% } +
-% if ( $conf->exists('pkg_referral') ) { - <& /elements/tr-select-part_referral.html, - 'curr_value' => scalar( $cgi->param('refnum') ), #get rid of empty_label first# || $cust_main->refnum, - 'disable_empty' => 1, - 'multiple' => $conf->exists('pkg_referral-multiple'), - 'colspan' => 7, - &> % } + +% my $lock_locationnum = scalar($cgi->param('lock_locationnum')); +% my $contact_title = $lock_locationnum ? 'Contact' +% : 'Contact and Location'; +<% mt($contact_title) |h %> +<% ntable("#cccccc", 2) %> + <& /elements/tr-select-contact.html, 'cgi' => $cgi, 'cust_main' => $cust_main, @@ -111,18 +169,6 @@ % } - - <% mt('Contract end date') |h %> - - <& /elements/input-date-field.html,{ - 'name' => 'contract_end', - 'format' => $date_format, - 'value' => '', - 'noinit' => 1, - } &> - - - % unless ( $cgi->param('lock_locationnum') ) { @@ -186,15 +232,15 @@ if ( $cgi->param('quotationnum') =~ /^(\d+)$/ ) { die 'no custnum or prospectnum' unless $cust_main || $prospect_main; +my $agent = $cust_main ? $cust_main->agent + : $prospect_main->agent; + my $part_pkg = ''; if ( $cgi->param('lock_pkgpart') ) { $part_pkg = qsearchs({ 'table' => 'part_pkg', 'hashref' => { 'pkgpart' => scalar($cgi->param('lock_pkgpart')) }, - 'extra_sql' => ' AND '. FS::part_pkg->agent_pkgs_sql( - $cust_main ? $cust_main->agent - : $prospect_main->agent - ), + 'extra_sql' => ' AND '. FS::part_pkg->agent_pkgs_sql($agent), }) or die "unknown pkgpart ". $cgi->param('lock_pkgpart'); } diff --git a/httemplate/search/cust_pkg.cgi b/httemplate/search/cust_pkg.cgi index 110da91ae..1cb61bccb 100755 --- a/httemplate/search/cust_pkg.cgi +++ b/httemplate/search/cust_pkg.cgi @@ -9,6 +9,7 @@ emt('Package'), emt('Class'), emt('Status'), + emt('Sales Person'), emt('Ordered by'), emt('Setup'), emt('Base Recur'), @@ -35,6 +36,7 @@ sub { $_[0]->pkg; }, 'classname', sub { ucfirst(shift->status); }, + 'salesperson', 'otaker', sub { sprintf( $money_char.'%.2f', shift->part_pkg->option('setup_fee'), @@ -99,13 +101,14 @@ '', '', '', + '', FS::UI::Web::cust_colors(), '', ], - 'style' => [ '', '', '', '', 'b', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', + 'style' => [ '', '', '', '', 'b', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', FS::UI::Web::cust_styles() ], 'size' => [ '', '', '', '', '-1' ], - 'align' => 'rrlcccrrlrrrrrrrrrrl'. FS::UI::Web::cust_aligns(). 'r', + 'align' => 'rrlccccrrlrrrrrrrrrrl'. FS::UI::Web::cust_aligns(). 'r', 'links' => [ $link, $link, @@ -123,6 +126,7 @@ '', '', '', + '', '', # link to changed-from package? '', '', -- 2.11.0