use base qw( FS::part_export );
-use Cpanel::JSON::XS;
+use Date::Format 'time2str';
+use JSON::XS;
use Net::HTTPS::Any qw(https_post);
use FS::Conf;
'customer_name' => { label => 'Customer Name',
default => 'FREESIDE CUST $custnum' },
'account_id' => { label => 'Account ID',
- default => 'FREESIDE SVC $svcnum' },
+ default => 'SVC$svcnum' },
+ 'product_id' => { label => 'Account Product ID' },
'debug' => { type => 'checkbox',
label => 'Enable debug warnings' },
;
'notes' => <<'END',
During insert, this will add customers to portaone if they do not yet exist,
using the "Customer Name" option with substitutions from the customer record
-in freeside. If option "Account ID" is also specified, an account will be
-created for the service and assigned to the customer, using substitutions
-from the phone service record in freeside.
+in freeside. If options "Account ID" and "Account Product ID" are also specified,
+an account will be created for the service and assigned to the customer, using
+substitutions from the phone service record in freeside for the Account ID.
During replace, if a matching account id for the old service can be found,
the existing customer and account will be updated. Otherwise, if a matching
# export account if account id is configured
my $account_id = $self->portaone_account_id($svc_phone);
- if ($account_id) {
+ my $product_id = $self->option('product_id');
+ if ($account_id && $product_id) {
# check if account already exists
my $account_info = $self->api_call('Account','get_account_info',{
'id' => $account_id,
# normal case--insert account for this service
$i_account = $self->api_call('Account','add_account',{
'account_info' => {
- 'id' => $self->portaone_account_id($svc_phone),
+ 'id' => $account_id,
'i_customer' => $i_customer,
'iso_4217' => ($conf->config('currency') || 'USD'),
+ 'i_product' => $product_id,
+ 'activation_date' => time2str("%Y-%m-%d",time),
+ 'billing_model' => 1, # '1' for credit, '-1' for debit, could make this an export option
+ 'h323_password' => $svc_phone->sip_password,
}
},'i_account');
return $self->api_error_logout if $self->api_error;
if ($account_info) {
$i_account = $account_info->{'i_account'};
$i_customer = $account_info->{'i_customer'};
+ # if nothing changed, no need to update account
+ $i_account = undef
+ if ($account_info->{'i_product'} eq $self->option('product_id'))
+ && ($account_id eq $self->portaone_account_id($svc_phone));
# otherwise, check for existing customer
} else {
my $customer_name = $self->portaone_customer_name($cust_main);
'account_info' => {
'i_account' => $i_account,
'id' => $newid,
+ 'i_product' => $self->option('product_id'),
+ 'h323_password' => $svc_phone->sip_password,
},
},'i_account');
return if $self->api_error;