You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
240 lines
5.5 KiB
240 lines
5.5 KiB
package NGCP::BulkProcessor::Dao::Trunk::billing::contracts;
|
|
use strict;
|
|
|
|
## no critic
|
|
|
|
use NGCP::BulkProcessor::Logging qw(
|
|
getlogger
|
|
rowinserted
|
|
);
|
|
|
|
use NGCP::BulkProcessor::ConnectorPool qw(
|
|
get_billing_db
|
|
destroy_dbs
|
|
);
|
|
|
|
use NGCP::BulkProcessor::SqlProcessor qw(
|
|
checktableinfo
|
|
insert_record
|
|
copy_row
|
|
|
|
process_table
|
|
);
|
|
use NGCP::BulkProcessor::SqlRecord qw();
|
|
|
|
require Exporter;
|
|
our @ISA = qw(Exporter NGCP::BulkProcessor::SqlRecord);
|
|
our @EXPORT_OK = qw(
|
|
gettablename
|
|
check_table
|
|
insert_row
|
|
|
|
countby_status_resellerid
|
|
findby_contactid
|
|
|
|
process_records
|
|
|
|
$ACTIVE_STATE
|
|
$TERMINATED_STATE
|
|
);
|
|
|
|
my $tablename = 'contracts';
|
|
my $get_db = \&get_billing_db;
|
|
|
|
my $expected_fieldnames = [
|
|
'id',
|
|
'customer_id',
|
|
'contact_id',
|
|
'order_id',
|
|
'profile_package_id',
|
|
'status',
|
|
'external_id',
|
|
'modify_timestamp',
|
|
'create_timestamp',
|
|
'activate_timestamp',
|
|
'terminate_timestamp',
|
|
'max_subscribers',
|
|
'send_invoice',
|
|
'subscriber_email_template_id',
|
|
'passreset_email_template_id',
|
|
'invoice_email_template_id',
|
|
'invoice_template_id',
|
|
'vat_rate',
|
|
'add_vat',
|
|
];
|
|
|
|
my $indexes = {};
|
|
|
|
my $insert_unique_fields = [];
|
|
|
|
our $ACTIVE_STATE = 'active';
|
|
our $TERMINATED_STATE = 'terminated';
|
|
|
|
sub new {
|
|
|
|
my $class = shift;
|
|
my $self = NGCP::BulkProcessor::SqlRecord->new($class,$get_db,
|
|
$tablename,$expected_fieldnames,$indexes);
|
|
|
|
copy_row($self,shift,$expected_fieldnames);
|
|
|
|
return $self;
|
|
|
|
}
|
|
|
|
sub findby_contactid {
|
|
|
|
my ($contact_id,$load_recursive) = @_;
|
|
|
|
check_table();
|
|
my $db = &$get_db();
|
|
my $table = $db->tableidentifier($tablename);
|
|
|
|
my $stmt = 'SELECT * FROM ' . $table . ' WHERE ' .
|
|
$db->columnidentifier('contact_id') . ' = ?';
|
|
my @params = ($contact_id);
|
|
my $rows = $db->db_get_all_arrayref($stmt,@params);
|
|
|
|
return buildrecords_fromrows($rows,$load_recursive);
|
|
|
|
}
|
|
|
|
sub countby_status_resellerid {
|
|
|
|
my ($status,$reseller_id) = @_;
|
|
|
|
check_table();
|
|
my $db = &$get_db();
|
|
my $table = $db->tableidentifier($tablename);
|
|
|
|
my $stmt = 'SELECT COUNT(*) FROM ' . $table . ' AS contract' .
|
|
' INNER JOIN ' . $db->tableidentifier(NGCP::BulkProcessor::Dao::Trunk::billing::contacts::gettablename()) . ' AS contact ON contract.contact_id = contact.id';
|
|
my @params = ();
|
|
my @terms = ();
|
|
if ($status) {
|
|
push(@terms,'contract.status = ?');
|
|
push(@params,$status);
|
|
}
|
|
if ($reseller_id) {
|
|
push(@terms,'contact.reseller_id = ?');
|
|
push(@params,$reseller_id);
|
|
}
|
|
if ((scalar @terms) > 0) {
|
|
$stmt .= ' WHERE ' . join(' AND ',@terms);
|
|
}
|
|
|
|
return $db->db_get_value($stmt,@params);
|
|
|
|
}
|
|
|
|
sub insert_row {
|
|
|
|
my $db = &$get_db();
|
|
my $xa_db = shift // $db;
|
|
if ('HASH' eq ref $_[0]) {
|
|
my ($data,$insert_ignore) = @_;
|
|
check_table();
|
|
if (insert_record($db,$xa_db,__PACKAGE__,$data,$insert_ignore,$insert_unique_fields)) {
|
|
return $xa_db->db_last_insert_id();
|
|
}
|
|
} else {
|
|
my %params = @_;
|
|
my ($contact_id) = @params{qw/
|
|
contact_id
|
|
/};
|
|
|
|
if ($xa_db->db_do('INSERT INTO ' . $db->tableidentifier($tablename) . ' (' .
|
|
$db->columnidentifier('contact_id') . ', ' .
|
|
$db->columnidentifier('create_timestamp') . ', ' .
|
|
$db->columnidentifier('modify_timestamp') . ', ' .
|
|
$db->columnidentifier('status') . ') VALUES (' .
|
|
'?, ' .
|
|
'NOW(), ' .
|
|
'NOW(), ' .
|
|
'\'' . $ACTIVE_STATE . '\')',
|
|
$contact_id,
|
|
)) {
|
|
rowinserted($db,$tablename,getlogger(__PACKAGE__));
|
|
return $xa_db->db_last_insert_id();
|
|
}
|
|
}
|
|
return undef;
|
|
|
|
}
|
|
|
|
sub process_records {
|
|
|
|
my %params = @_;
|
|
my ($process_code,
|
|
$static_context,
|
|
$init_process_context_code,
|
|
$uninit_process_context_code,
|
|
$multithreading,
|
|
$numofthreads,
|
|
$load_recursive) = @params{qw/
|
|
process_code
|
|
static_context
|
|
init_process_context_code
|
|
uninit_process_context_code
|
|
multithreading
|
|
numofthreads
|
|
load_recursive
|
|
/};
|
|
|
|
check_table();
|
|
|
|
return process_table(
|
|
get_db => $get_db,
|
|
class => __PACKAGE__,
|
|
process_code => sub {
|
|
my ($context,$rowblock,$row_offset) = @_;
|
|
return &$process_code($context,buildrecords_fromrows($rowblock,$load_recursive),$row_offset);
|
|
},
|
|
static_context => $static_context,
|
|
init_process_context_code => $init_process_context_code,
|
|
uninit_process_context_code => $uninit_process_context_code,
|
|
destroy_reader_dbs_code => \&destroy_dbs,
|
|
multithreading => $multithreading,
|
|
tableprocessing_threads => $numofthreads,
|
|
);
|
|
}
|
|
|
|
|
|
sub buildrecords_fromrows {
|
|
|
|
my ($rows,$load_recursive) = @_;
|
|
|
|
my @records = ();
|
|
my $record;
|
|
|
|
if (defined $rows and ref $rows eq 'ARRAY') {
|
|
foreach my $row (@$rows) {
|
|
$record = __PACKAGE__->new($row);
|
|
|
|
# transformations go here ...
|
|
|
|
push @records,$record;
|
|
}
|
|
}
|
|
|
|
return \@records;
|
|
|
|
}
|
|
|
|
sub gettablename {
|
|
|
|
return $tablename;
|
|
|
|
}
|
|
|
|
sub check_table {
|
|
|
|
return checktableinfo($get_db,
|
|
__PACKAGE__,$tablename,
|
|
$expected_fieldnames,
|
|
$indexes);
|
|
|
|
}
|
|
|
|
1;
|