use FS::Record qw( dbh qsearch qsearchs );
use FS::cust_main;
use FS::cust_pkg;
-use FS::agent_type;
-use FS::agent_currency;
use FS::reg_code;
+use FS::agent_payment_gateway;
use FS::TicketSystem;
use FS::Conf;
=over 4
-=item agentnum - primary key (assigned automatically for new agents)
+=item agentnum
-=item agent - Text name of this agent
+primary key (assigned automatically for new agents)
-=item typenum - Agent type (see L<FS::agent_type>)
+=item agent
-=item ticketing_queueid - Ticketing Queue
+Text name of this agent
-=item invoice_template - Invoice template name
+=item typenum
-=item agent_custnum - Optional agent customer (see L<FS::cust_main>)
+Agent type (see L<FS::agent_type>)
-=item disabled - Disabled flag, empty or 'Y'
+=item ticketing_queueid
-=item prog - Deprecated (never used)
+Ticketing Queue
-=item freq - Deprecated (never used)
+=item invoice_template
-=item username - (Deprecated) Username for the Agent interface
+Invoice template name
-=item _password - (Deprecated) Password for the Agent interface
+=item agent_custnum
+
+Optional agent customer (see L<FS::cust_main>)
+
+=item disabled
+
+Disabled flag, empty or 'Y'
+
+=item prog
+
+Deprecated (never used)
+
+=item freq
+
+Deprecated (never used)
+
+=item username
+
+(Deprecated) Username for the Agent interface
+
+=item _password
+
+(Deprecated) Password for the Agent interface
=back
|| $self->ut_textn('prog')
|| $self->ut_textn('invoice_template')
|| $self->ut_foreign_keyn('agent_custnum', 'cust_main', 'custnum' )
+ || $self->ut_numbern('ticketing_queueid')
;
return $error if $error;
Returns the FS::agent_type object (see L<FS::agent_type>) for this agent.
-=cut
-
-sub agent_type {
- my $self = shift;
- qsearchs( 'agent_type', { 'typenum' => $self->typenum } );
-}
-
=item agent_cust_main
Returns the FS::cust_main object (see L<FS::cust_main>), if any, for this
Returns the FS::agent_currency objects (see L<FS::agent_currency>), if any, for
this agent.
-=cut
-
-sub agent_currency {
- my $self = shift;
- qsearch('agent_currency', { 'agentnum' => $self->agentnum } );
-}
-
=item agent_currency_hashref
Returns a hash references of supported additional currencies for this agent.
sub ticketing_queue {
my $self = shift;
FS::TicketSystem->queue($self->ticketing_queueid);
-};
+}
=item payment_gateway [ OPTION => VALUE, ... ]
# seeing the card number
my $gatewaynum =
$conf->config('selfservice-payment_gateway', $self->agentnum);
- my $gateway = FS::payment_gateway->by_key($gatewaynum)
- if $gatewaynum;
+ my $gateway;
+ $gateway = FS::payment_gateway->by_key($gatewaynum) if $gatewaynum;
+ return $gateway if $gateway;
+
+ # a little less kludgey than the above, and allows PayPal to coexist
+ # with credit card gateways
+ my $is_paypal = { op => '!=', value => 'PayPal' };
+ if ( uc($options{method}) eq 'PAYPAL' ) {
+ $is_paypal = 'PayPal';
+ }
+
+ $gateway = qsearchs({
+ table => 'payment_gateway',
+ addl_from => ' JOIN agent_payment_gateway USING (gatewaynum) ',
+ hashref => {
+ gateway_namespace => 'Business::OnlineThirdPartyPayment',
+ gateway_module => $is_paypal,
+ disabled => '',
+ },
+ extra_sql => ' AND agentnum = '.$self->agentnum,
+ });
if ( $gateway ) {
return $gateway;
$payment_gateway;
}
+=item invoice_modes
+
+Returns all L<FS::invoice_mode> objects that are valid for this agent (i.e.
+those with this agentnum or null agentnum).
+
+=cut
+
+sub invoice_modes {
+ my $self = shift;
+ qsearch( {
+ table => 'invoice_mode',
+ hashref => { agentnum => $self->agentnum },
+ extra_sql => ' OR agentnum IS NULL',
+ order_by => ' ORDER BY modename',
+ } );
+}
+
=item num_prospect_cust_main
Returns the number of prospects (customers with no packages ever ordered) for
);
}
+=item num_ordered_cust_main
+
+Returns the number of ordered customers for this agent (customers with packages
+ordered, but not yet billed).
+
+=cut
+
+sub num_ordered_cust_main {
+ shift->num_sql(FS::cust_main->ordered_sql);
+}
+
+=item ordered_cust_main
+
+Returns the ordered customers for this agent (customers with packages ordered,
+but not yet billed), as cust_main objects.
+
+=cut
+
+sub ordered_cust_main {
+ shift->cust_main_sql(FS::cust_main->ordered_sql);
+}
+
+
=item num_active_cust_main
Returns the number of active customers for this agent (customers with active
$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