diff options
author | Ivan Kohler <ivan@freeside.biz> | 2013-08-18 02:01:19 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2013-08-18 02:01:19 -0700 |
commit | 5c0cfcb8dec7c4f3a7aecea4c550ffb4bfb774c3 (patch) | |
tree | 552c633c19398d8658dbe7c2a23a4ac06948fe2e | |
parent | 5f2093d63b321716766535a0ff3e7420882a8888 (diff) |
continue sales person work: customer and package selection, commissions, reporting. RT#23402
-rw-r--r-- | FS/FS/agent.pm | 15 | ||||
-rw-r--r-- | FS/FS/cust_pkg.pm | 6 | ||||
-rw-r--r-- | httemplate/edit/process/quick-cust_pkg.cgi | 4 | ||||
-rw-r--r-- | httemplate/elements/tr-select-sales.html | 15 | ||||
-rw-r--r-- | httemplate/misc/order_pkg.html | 130 | ||||
-rwxr-xr-x | 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 ) { <TR> - <TD ALIGN="right"><% $opt{'label'} || emt('Sales Person') %></TD> +% if ( $opt{'th'} ) { + <TH ALIGN="right"><% $opt{'label'} || emt('Sales Person') %></TH> +% } else { + <TD ALIGN="right"><% $opt{'label'} || emt('Sales Person') %></TD> +% } <TD BGCOLOR="#dddddd" <% $colspan %>> % my $sales = qsearchs('sales', { 'salesnum' => $salesnum }); <% $sales ? $sales->salesperson : '(none)' |h %> @@ -43,7 +47,11 @@ Example: % } else { <TR> - <TD ALIGN="right"><% $opt{'label'} || emt('Sales Person') %></TD> +% if ( $opt{'th'} ) { + <TH ALIGN="right"><% $opt{'label'} || emt('Sales Person') %></TH> +% } else { + <TD ALIGN="right"><% $opt{'label'} || emt('Sales Person') %></TD> +% } <TD <% $colspan %>> <& /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'}.'"' : ''; + </%init> 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, + } &> <LINK REL="stylesheet" TYPE="text/css" HREF="../elements/calendar-win2k-2.css" TITLE="win2k-2"> @@ -21,7 +24,39 @@ <INPUT TYPE="hidden" NAME="svcpart" VALUE="<% $svcpart %>"> % } +% 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 ) { + <FONT CLASS="fsinnerbox-title"><% mt('Sales') |h %></FONT> +% } +% 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 ) { + </TABLE><BR> +% } + +<FONT CLASS="fsinnerbox-title"><% mt('Package') |h %></FONT> <% ntable("#cccccc", 2) %> + % if ( $part_pkg ) { <INPUT TYPE="hidden" NAME="pkgpart" VALUE="<% $part_pkg->pkgpart %>"> <TR> @@ -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)); + <TR> + <TH ALIGN="right"><% mt("Disable automatic $what charge") |h %> </TH> + <TD COLSPAN=6><INPUT TYPE="checkbox" NAME="no_auto" VALUE="Y"></TD> + </TR> +% } + <TR> <TH ALIGN="right"><% mt('Start date') |h %> </TD> <TD COLSPAN=6> @@ -55,38 +98,53 @@ </TD> </TR> -% if ( $cust_main && $cust_main->payby =~ /^(CARD|CHEK)$/ ) { -% my $what = lc(FS::payby->shortname($cust_main->payby)); - <TR> - <TH ALIGN="right"><% mt("Disable automatic $what charge") |h %> </TH> - <TD COLSPAN=6><INPUT TYPE="checkbox" NAME="no_auto" VALUE="Y"></TD> - </TR> -% } +<TR> + <TH ALIGN="right"><% mt('Contract end date') |h %> </TD> + <TD COLSPAN=6> + <& /elements/input-date-field.html,{ + 'name' => 'contract_end', + 'format' => $date_format, + 'value' => '', + 'noinit' => 1, + } &> + </TD> +</TR> + +</TABLE><BR> + +% 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 ) { + <FONT CLASS="fsinnerbox-title"><% mt('Discounting') |h %></FONT> + <% ntable("#cccccc", 2) %> -% if ( $curuser->access_right('Discount customer package') ) { - <& /elements/tr-select-discount.html, +% if ( $waive_setup_fee ) { + <TR> + <TH ALIGN="right"><% mt('Waive setup fee') |h %> </TH> + <TD COLSPAN=6><INPUT TYPE="checkbox" NAME="waive_setup" VALUE="Y"></TD> + </TR> +% } + +% if ( $discount_cust_pkg ) { + <& /elements/tr-select-discount.html, 'element_etc' => 'DISABLED', 'colspan' => 7, 'cgi' => $cgi, - &> -% } + &> +% } -% if ( $curuser->access_right('Waive setup fee') ) { - <TR> - <TH ALIGN="right"><% mt('Waive setup fee') |h %> </TH> - <TD COLSPAN=6><INPUT TYPE="checkbox" NAME="waive_setup" VALUE="Y"></TD> - </TR> -% } + </TABLE><BR> -% 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'; +<FONT CLASS="fsinnerbox-title"><% mt($contact_title) |h %></FONT> +<% ntable("#cccccc", 2) %> + <& /elements/tr-select-contact.html, 'cgi' => $cgi, 'cust_main' => $cust_main, @@ -111,18 +169,6 @@ % } -<TR> - <TH ALIGN="right"><% mt('Contract end date') |h %> </TD> - <TD COLSPAN=6> - <& /elements/input-date-field.html,{ - 'name' => 'contract_end', - 'format' => $date_format, - 'value' => '', - 'noinit' => 1, - } &> - </TD> -</TR> - </TABLE> % 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? '', '', |