use FS::contact;
use FS::cust_location;
+use FS::ClientAPI::MyAccount::quotation; # just for code organization
+
$DEBUG = 0;
$me = '[FS::ClientAPI::MyAccount]';
'logo' => scalar($conf->config_binary('logo.png', $agentnum )),
( map { $_ => join("\n", $conf->config("selfservice-$_", $agentnum ) ) }
qw( head body_header body_footer company_address ) ),
+ 'money_char' => $conf->config("money_char") || '$',
'menu' => join("\n", $conf->config("ng_selfservice-menu", $agentnum ) ) ||
'main.php Home
}
# no usage to hide here
- } elsif ( $svcdb eq 'svc_phone' ) {
+ } elsif ( $svcdb eq 'svc_phone' or $svcdb eq 'svc_pbx' ) {
if (!$hide_usage) {
# could potentially show lots of things...
$hash{'outbound'} = 1;
$hash{'inbound'} = 0;
- if ( $part_pkg->plan eq 'voip_inbound' ) {
- $hash{'outbound'} = 0;
- $hash{'inbound'} = 1;
- } elsif ( $part_pkg->option('selfservice_inbound_format')
- or $conf->config('selfservice-default_inbound_cdr_format')
- ) {
- $hash{'inbound'} = 1;
+ if ( $svcdb eq 'svc_phone' ) {
+ if ( $part_pkg->plan eq 'voip_inbound' ) {
+ $hash{'outbound'} = 0;
+ $hash{'inbound'} = 1;
+ } elsif ( $part_pkg->option('selfservice_inbound_format')
+ or $conf->config('selfservice-default_inbound_cdr_format')
+ ) {
+ $hash{'inbound'} = 1;
+ }
}
foreach (qw(inbound outbound)) {
# hmm...we can't filter by status here, because there might
# XXX CDR type support...
# XXX any way to do a paged search on this?
# we have to return the results all at once...
- my($svc_phone, $begin, $end, %opt) = @_;
+ my($svc_x, $begin, $end, %opt) = @_;
map [ $_->downstream_csv(%opt, 'keeparray' => 1) ],
- $svc_phone->get_cdrs(
- 'begin'=>$begin,
- 'end'=>$end,
+ $svc_x->get_cdrs(
+ 'begin' => $begin,
+ 'end' => $end,
'disable_charged_party' => 1,
%opt
);
sub list_cdr_usage {
my $p = shift;
- _usage_details( \&_list_cdr_usage, $p,
- 'svcdb' => 'svc_phone',
- );
+ _usage_details( \&_list_cdr_usage, $p );
}
sub _usage_details {
my $search = { 'svcnum' => $p->{'svcnum'} };
$search->{'agentnum'} = $session->{'agentnum'} if $context eq 'agent';
- my $svcdb = $opt{'svcdb'} || 'svc_acct';
-
- my $svc_x = qsearchs( $svcdb, $search );
+ my $cust_svc = qsearchs( 'cust_svc', $search );
return { 'error' => 'No service selected in list_svc_usage' }
- unless $svc_x;
+ unless $cust_svc;
- my $cust_pkg = $svc_x->cust_svc->cust_pkg;
+ my $svc_x = $cust_svc->svc_x;
+ my $svcdb = $svc_x->table;
+ my $cust_pkg = $cust_svc->cust_pkg;
my $freq = $cust_pkg->part_pkg->freq;
my %callback_opt;
my $header = [];
- if ( $svcdb eq 'svc_phone' ) {
+ if ( $svcdb eq 'svc_phone' or $svcdb eq 'svc_pbx' ) {
my $format = '';
if ( $p->{inbound} ) {
$format = $cust_pkg->part_pkg->option('selfservice_inbound_format')
{ 'bulkdid' => [ @bulkdid ], 'svc' => $error->{'svc'} }
}
+sub provision_pbx {
+ my $p = shift;
+ warn "provision_pbx called\n"
+ if $DEBUG;
+
+ warn "provision_pbx calling _provision\n"
+ if $DEBUG;
+ _provision( 'FS::svc_pbx',
+ [qw(id title max_extensions max_simultaneous ip_addr)],
+ [qw(id title max_extensions max_simultaneous ip_addr)],
+ $p,
+ @_
+ );
+}
+
sub provision_acct {
my $p = shift;
warn "provision_acct called\n"
);
}
+sub provision_forward {
+ my $p = shift;
+ _provision( 'FS::svc_forward',
+ ['srcsvc','src','dstsvc','dst'],
+ [],
+ $p,
+ );
+}
+
sub _provision {
my( $class, $fields, $return_fields, $p ) = splice(@_, 0, 4);
warn "_provision called for $class\n"
my $part_svc = qsearchs('part_svc', { 'svcpart' => $p->{'svcpart'} } )
or return { 'error' => "unknown svcpart $p->{'svcpart'}" };
+ return { error=> 'svcpart '. $p->{'svcpart'}. " is not a $class definition" }
+ if $class ne 'FS::'. $part_svc->svcdb;
+
warn "creating $class record\n"
if $DEBUG;
my $svc_x = $class->new( {
}
}
+ if ($ret->{'svcdb'} eq 'svc_forward') {
+ $ret->{'forward_emails'} = {$cust_pkg->forward_emails()};
+ }
+
$ret;
}