package FS::part_export::freeswitch_nibblebill;
use base qw( FS::part_export );
use vars qw( %info ); # $DEBUG );
use Tie::IxHash;
use DBI;
#use FS::Record qw( qsearch ); #qsearchs );
#use FS::svc_phone;
#use FS::Schema qw( dbdef );
#$DEBUG = 1;
tie my %options, 'Tie::IxHash',
'datasrc' => { label=>'DBI data source ' },
'username' => { label=>'Database username' },
'password' => { label=>'Database password' },
;
%info = (
'svc' => 'svc_phone',
'desc' => 'Provision prepaid credit to a FreeSWITCH mod_nibblebill database',
'options' => \%options,
'notes' => <<'END',
Provision prepaid credit to a FreeSWITCH mod_nibblebill database. Use with the Prepaid credit in FreeSWITCH mod_nibblebill price plan.
See the
DBI documentation
and the
documentation for your DBD
for the exact syntax of a DBI data source.
END
);
sub rebless { shift; }
sub _export_insert {
my( $self, $svc_phone ) = ( shift, shift );
#add phonenum to db (unless it is there already)
# w/the setup amount makes the most sense in this usage (rather than the
# (balance/pkg-balance), since you would order the package, then provision
# the phone number.
my $cust_pkg = $svc_phone->cust_svc->cust_pkg;
my $amount = $cust_pkg ? $cust_pkg->part_pkg->option('setup_fee')
: '';
my $queue = new FS::queue {
svcnum => $svcnum,
job => 'FS::part_export::freeswitch_nibblebill::nibblebill_insert',
};
$queue->insert(
$self->option('datasrc'),
$self->option('username'),
$self->option('password'),
$svc_phone->phonenum,
$amount,
);
}
sub nibblebill_insert {
my($datasrc, $username, $password, $phonenum, $amount) = @_;
my $dbh = DBI->connect($datasrc, $username, $password) or die $DBI::errstr;
#check for existing account
$dbh->{FetchHashKeyName} = 'NAME_lc';
my $esth = $dbh->prepare('SELECT id, name, cash FROM accounts WHERE id = ?')
or die $dbh->errstr;
$esth->execute($phonenum) or die $esth->errstr;
my $row = $esth->fetchrow_hashref;
#die "$phonenum already exists in nibblebill db" if $row && $row->{'id'};
if ( $row && $row->{'id'} ) {
nibblebill_adjust_cash($datasrc, $username, $password, $phonenum, $amount);
} else {
my $sth = $dbh->prepare(
'INSERT INTO accounts (id, name, cash) VALUES (?, ?, ?)'
) or die $dbh->errsrr;
$sth->execute($phonenum, $phonenum, $amount) or die $sth->errstr;
}
}
sub _export_replace {
my( $self, $new, $old ) = ( shift, shift, shift );
#XXX change phonenum in db?
'';
}
sub _export_delete {
my( $self, $svc_phone) = @_;
#XXX delete the phonenum in db, suck back any unused credit and make a credit?
''
}
sub _adjust {
my( $self, $svc_phone, $amount ) = @_;
my $queue = new FS::queue {
svcnum => $svcnum,
job => 'FS::part_export::freeswitch_nibblebill::nibblebill_adjust_cash',
};
$queue->insert(
$self->option('datasrc'),
$self->option('username'),
$self->option('password'),
$svc_phone->phonenum,
$amount,
) or $queue;
}
sub nibblebill_adjust_cash {
my($datasrc, $username, $password, $phonenum, $amount) = @_;
my $dbh = DBI->connect($datasrc, $username, $password) or die $DBI::errstr;
my $sth = $dbh->prepare('UPDATE accounts SET cash = cash + ? WHERE id = ?')
or die $dbh->errsrr;
$sth->execute($amount, $phonenum) or die $sth->errstr;
}
sub export_getstatus {
my( $self, $svc_phone, $htmlref, $hashref ) = @_;
my $dbh = DBI->connect( map $self->option($_), qw( datasrc username password ) )
or return $DBI::errstr;
my $sth = $dbh->prepare('SELECT cash FROM accounts WHERE id = ?')
or return $dbh->errstr;
$sth->execute($svc_phone->phonenum) or return $sth->errstr;
my $row = $sth->fetchrow_hashref or return '';
$hashref->{'Balance'} = $row->{'cash'};
'';
}
1;