'salesnum', 'serial', '', '', '', '',
'salesperson', 'varchar', '', $char_d, '', '',
'agentnum', 'int', 'NULL', '', '', '',
+ 'sales_custnum', 'int', 'NULL', '', '', '',
'disabled', 'char', 'NULL', 1, '', '',
],
'primary_key' => 'salesnum',
|| $self->ut_foreign_keyn('contactnum', 'contact', 'contactnum' )
|| $self->ut_foreign_keyn('locationnum', 'cust_location', 'locationnum')
|| $self->ut_foreign_keyn('salesnum', 'sales', 'salesnum')
+ || $self->ut_numbern('quantity')
|| $self->ut_numbern('start_date')
|| $self->ut_numbern('setup')
|| $self->ut_numbern('bill')
=item set_quantity QUANTITY
-Change the package's quantity field. This is the one package property
+Change the package's quantity field. This is one of the few package properties
that can safely be changed without canceling and reordering the package
(because it doesn't affect tax eligibility). Returns an error or an
empty string.
sub set_quantity {
my $self = shift;
$self = $self->replace_old; # just to make sure
- my $qty = shift;
- ($qty =~ /^\d+$/ and $qty > 0) or return "bad package quantity $qty";
- $self->set('quantity' => $qty);
+ $self->quantity(shift);
+ $self->replace;
+}
+
+=item set_salesnum SALESNUM
+
+Change the package's salesnum (sales person) field. This is one of the few
+package properties that can safely be changed without canceling and reordering
+the package (because it doesn't affect tax eligibility). Returns an error or
+an empty string.
+
+=cut
+
+sub set_salesnum {
+ my $self = shift;
+ $self = $self->replace_old; # just to make sure
+ $self->salesnum(shift);
$self->replace;
}
use base qw( FS::Agent_Mixin FS::Record );
use strict;
+use FS::Record qw( qsearchs ); #qsearch qsearchs );
use FS::agent;
+use FS::cust_main;
=head1 NAME
$self->ut_numbern('salesnum')
|| $self->ut_text('salesperson')
|| $self->ut_foreign_key('agentnum', 'agent', 'agentnum')
+ || $self->ut_foreign_keyn('sales_custnum', 'cust_main', 'custnum')
|| $self->ut_enum('disabled', [ '', 'Y' ])
;
return $error if $error;
$self->SUPER::check;
}
+=item sales_cust_main
+
+Returns the FS::cust_main object (see L<FS::cust_main>), if any, for this
+sales person.
+
+=cut
+
+sub sales_cust_main {
+ my $self = shift;
+ qsearchs( 'cust_main', { 'custnum' => $self->sales_custnum } );
+}
+
=back
=head1 BUGS
my $curuser = $FS::CurrentUser::CurrentUser;
die "access denied" unless $curuser->access_right('Edit sales people');
+my $conf = new FS::Conf;
+
#Sales people bring in business.<BR><BR>
my @header = ( 'Sales person' );
push @links, [ $p.'edit/agent.cgi?', 'agentnum' ];
}
+push @header, 'Master Customer';
+push @fields, sub {
+ my $sales = shift;
+ return '' unless $sales->sales_custnum;
+ include('/elements/small_custview.html',
+ $sales->sales_custnum,
+ scalar($conf->config('countrydefault')),
+ 1, #show balance
+ );
+};
+push @links, '';
+
push @header, 'Commissions';
push @fields, sub {
#later 'custnum' => $custnum,
'pkgpart' => $pkgpart,
'locationnum' => scalar($cgi->param('locationnum')),
+ 'salesnum' => scalar($cgi->param('salesnum')),
} );
'table' => 'sales',
'fields' => [ 'salesperson',
{ field=>'agentnum', type=>'select-agent', disable_empty=>1, },
+ { field=>'sales_custnum', type=>'search-cust_main', },
{ field=>'disabled', type=>'checkbox', value=>'Y', },
],
- 'labels' => { 'salesnum' => 'Sales Person',
- 'salesperson' => 'Name',
- 'agentnum' => 'Agent',
- 'disabled' => 'Disabled',
+ 'labels' => { 'salesnum' => 'Sales Person',
+ 'salesperson' => 'Name',
+ 'agentnum' => 'Agent',
+ 'sales_custnum' => 'Master customer',
+ 'disabled' => 'Disabled',
},
'viewall_dir' => 'browse',
'agent_virt' => 1,
<TD CLASS="inv package" BGCOLOR="<% $bgcolor %>" VALIGN="top" <%$style%>>
<TABLE CLASS="inv package">
+
+
<TR>
<TD COLSPAN=2>
<% $opt{before_pkg_callback}
</TD>
</TR>
-% if ( $cust_pkg->quantity > 1 ) {
- <TR>
- <TD COLSPAN=2>
- <% mt('Quantity:') |h %>
- <B><% $cust_pkg->quantity %></B>
- </TD>
- </TR>
-% }
<TR>
<TD COLSPAN=2>
</TD>
</TR>
+
+ <TR>
+ <TD COLSPAN=2>
+
+% my $change_quan_label = 'Change quantity';
+% if ( $cust_pkg->quantity > 1 ) {
+% $change_quan_label = 'change';
+ <% mt('Quantity:') |h %>
+ <B><% $cust_pkg->quantity %></B>
+% }
+
+% if ( $curuser->access_right('Change customer package')
+% && ! $cust_pkg->get('cancel')
+% && ! $supplemental
+% && $part_pkg->freq ne '0'
+% && ! $opt{no_links}
+% && $opt{'invoice-unitprice'}
+% )
+% {
+ <FONT SIZE="-1">
+ ( <% pkg_change_quantity_link($cust_pkg, $change_quan_label) %> )
+ </FONT>
+% }
+
+ </TD>
+ </TR>
+
+
+ <TR>
+ <TD COLSPAN=2>
+
+% my $change_sales_label = 'Change sales person';
+% if ( $cust_pkg->salesnum ) {
+% $change_sales_label = 'change';
+ <% mt('Sales Person:') |h %>
+ <B><% $cust_pkg->salesperson %></B>
+% }
+
+% if ( $curuser->access_right('Change customer package')
+% && ! $cust_pkg->get('cancel')
+% && ! $supplemental
+% #&& $part_pkg->freq ne '0'
+% && ! $opt{no_links}
+% )
+% {
+ <FONT SIZE="-1">
+ ( <% pkg_change_salesnum_link($cust_pkg, $change_sales_label) %> )
+ </FONT>
+% }
+
+ </TD>
+ </TR>
+
+
% my $editi = $curuser->access_right('Edit customer package invoice details');
% my $editc = $curuser->access_right('Edit customer package comments');
% my @cust_pkg_detail = $cust_pkg->cust_pkg_detail;
% }
</TR>
-% if ( $curuser->access_right('Change customer package')
-% && ! $cust_pkg->get('cancel')
-% && ! $supplemental
-% && $part_pkg->freq ne '0'
-% && ! $opt{no_links}
-% )
-% {
- <TR>
-% # yeah, I guess we'll let you do this on a future change package
-% if ( FS::Conf->new->exists('invoice-unitprice') ) {
- <TD><FONT SIZE="-1">
- ( <% pkg_change_quantity_link($cust_pkg) %> )
- </FONT></TD>
-% }
- </TR>
-% }
+
+
% }
</TABLE>
+
% if ( @cust_pkg_usage ) {
<TABLE CLASS="usage inv">
<TR><TH COLSPAN=4><% mt('Included usage') %></TH></TR>
}
sub pkg_change_quantity_link {
+ my( $cust_pkg, $label ) = @_;
include( '/elements/popup_link-cust_pkg.html',
'action' => $p. 'edit/cust_pkg_quantity.html?',
- 'label' => emt('Change quantity'),
+ 'label' => emt($label),
'actionlabel' => emt('Change'),
- 'cust_pkg' => shift,
+ 'cust_pkg' => $cust_pkg,
+ 'width' => 390,
+ 'height' => 220,
+ );
+}
+
+sub pkg_change_salesnum_link {
+ my( $cust_pkg, $label ) = @_;
+ include( '/elements/popup_link-cust_pkg.html',
+ 'action' => $p. 'edit/cust_pkg_salesnum.html?',
+ 'label' => emt($label),
+ 'actionlabel' => emt('Change'),
+ 'cust_pkg' => $cust_pkg,
'width' => 390,
'height' => 220,
);
my $countrydefault = scalar($conf->config('countrydefault')) || 'US';
my %conf_opt = (
+ #for package.html
+ 'invoice-unitprice' => $conf->exists('invoice-unitprice'),
+
#for services.html and status.html
'cust_pkg-display_times' => ($conf->exists('cust_pkg-display_times')
|| $curuser->option('cust_pkg-display_times')),