Files
FloatBackOfffice/CRONS/subscribed_summary.php
dev-chiefworks f76abffdcd first commit
2022-05-31 16:21:53 -04:00

258 lines
7.3 KiB
PHP

<?php
// require_once( '/Users/osx/Sites/Float/adminsavvy/backend.php' );
include '../backend.php';
require_once( 'common/Logger.php' );
/**
* Transfer Subscription Report
*/
class SubscribedSummary {
public $conn;
public $repConn;
protected $hard_limit = 550;
function __construct() {
global $savvyext;
$this->conn = self::__cnn( $savvyext );
$this->repConn = self::__repCnn( $savvyext );
}
private static function __cnn( $savvyext ) {
$db_host = $savvyext->cfgReadChar('database.host');
$db_name = $savvyext->cfgReadChar('database.name');
$db_user = $savvyext->cfgReadChar('database.user');
$db_pass = $savvyext->cfgReadChar('database.pass');
$db_port = $savvyext->cfgReadLong('database.port');
$connstr = sprintf( 'host=%s port=%s dbname=%s user=%s password=%s', $db_host, $db_port, $db_name, $db_user, $db_pass );
$conn = pg_connect($connstr);
return $conn;
}
private static function __repCnn( $savvyext ) {
$db_host = $savvyext->cfgReadChar('database_replica.host');
$db_name = $savvyext->cfgReadChar('database_replica.name');
$db_user = $savvyext->cfgReadChar('database_replica.user');
$db_pass = $savvyext->cfgReadChar('database_replica.pass');
$db_port = $savvyext->cfgReadLong('database_replica.port');
$connstr = sprintf( 'host=%s port=%s dbname=%s user=%s password=%s', $db_host, $db_port, $db_name, $db_user, $db_pass );
$conn = pg_connect($connstr);
return $conn;
}
/**
* Get all members_card_assign items
* @return array
*/
public function getDeals() {
try {
// get all deals card
$sql = sprintf( "
SELECT
mc.id as cardid,
case when mc.card_country is null then 'Worldwide' else mc.card_country end as country
from main_cards mc
where mc.button1_action in ('GOOFFERS')
and mc.status = 1
" );
$results = pg_query( $this->repConn, $sql );
if ( $error = pg_last_error( $this->repConn ) ) {
throw new Exception( $error );
}
$results = pg_fetch_all( $results );
return $results;
} catch (Exception $e) {
Logger::debug( $e->getMessage() );
}
}
/**
* Get total redeem by cards
* @param array $card_ids list card ids
* @return array
*/
private function getRedeem( $card_ids ) {
$redeem = sprintf("
SELECT
mca.card_id as cardid,
count( mca ) as redeem
from members_card_assign mca
left join main_cards mc ON mc.id = mca.card_id
where
mca.completed is not null
and mca.status = 1
and mca.card_id in (%s)
group by cardid
", $card_ids);
$results = pg_query( $this->repConn, $redeem );
if ( $error = pg_last_error( $this->repConn ) ) {
throw new Exception( $error );
}
$redeem = pg_fetch_all( $results );
return $redeem;
}
/**
* Get total report
* @param array $card_ids list card ids
* @return array
*/
private function getReport( $card_ids ) {
$report = sprintf( "
SELECT
mca.card_id as cardid,
sum( case when mca.added between now() - interval '24 hours' and now() then 1 else 0 end ) as last_24hours,
sum( case when mca.added between now() - interval '7 days' and now() then 1 else 0 end ) as last_7days,
sum( case when mca.added between now() - interval '14 days' and now() then 1 else 0 end ) as last_14days,
sum( case when mca.added between now() - interval '30 days' and now() then 1 else 0 end ) as last_30days,
count( mca.id ) as total_sub
from members_card_assign mca
left join main_cards mc ON mc.id = mca.card_id
where
mc.card_reciept is not null
and mca.subscribe is not null
and mca.completed is null
and mca.reciept_count = 0
and mca.card_id in (%s)
group by cardid
", $card_ids );
$results = pg_query( $this->repConn, $report );
if ( $error = pg_last_error( $this->repConn ) ) {
throw new Exception( $error );
}
$report = pg_fetch_all( $results );
return $report;
}
/**
* Get all subscribed report
* @return array
*/
public function getSubscripbed() {
$deals = $this->getDeals();
try {
if ( !$deals ) {
throw new Exception( 'Deals card not found!' );
}
$card_ids = implode( ', ', array_column( $deals, 'cardid' ) );
// get subscribed total redeem
$redeem = $this->getRedeem( $card_ids );
// get subscribed report
$report = $this->getReport( $card_ids );
// combine report and redeem
if ( $report ) {
foreach ( $report as $key => $value ) {
$report[ $key ]['total_redeem'] = 0;
if ( $redeem ) {
foreach ( $redeem as $subkey => $subvalue ) {
if ( $subvalue['cardid'] == $value['cardid'] ) {
$report[ $key ]['total_redeem'] = $subvalue['redeem'];
}
}
}
}
$results = array();
array_walk( $report, function( $value, $key ) use (&$results) {
$results[ $value['cardid'] ] = $value;
} );
foreach ( $deals as $key => $value ) {
$cardid = $value['cardid'];
$deals[ $key ]['last_24hours'] = isset( $results[ $cardid ] ) ? $results[ $cardid ]['last_24hours'] : 0;
$deals[ $key ]['last_7days'] = isset( $results[ $cardid ] ) ? $results[ $cardid ]['last_7days'] : 0;
$deals[ $key ]['last_14days'] = isset( $results[ $cardid ] ) ? $results[ $cardid ]['last_14days'] : 0;
$deals[ $key ]['last_30days'] = isset( $results[ $cardid ] ) ? $results[ $cardid ]['last_30days'] : 0;
$deals[ $key ]['total_sub'] = isset( $results[ $cardid ] ) ? $results[ $cardid ]['total_sub'] : 0;
$deals[ $key ]['total_redeem'] = isset( $results[ $cardid ] ) ? $results[ $cardid ]['total_redeem'] : 0;
}
}
return $deals;
} catch (Exception $e) {
Logger::debug( $e->getMessage() );
}
}
/**
* Update report after get all subscribed
* @return mixed
*/
public function updateSubscribedReport() {
$results = $this->getSubscripbed();
try {
if ( !$results ) {
throw new Exception( 'Subscribed not found!' );
}
$table_columns = array(
'card_id',
'country',
'last_24hours',
'last_7days',
'last_14days',
'last_30days',
'total_sub',
'total_redeem'
);
$table_results = array();
array_filter( $results, function( $var ) use ( &$table_results ) {
$content = array();
array_walk( $var, function( $value, $key ) use ( &$content ) {
$value = $value ?? 0;
array_push( $content, $value );
} );
$table_results[] = sprintf( '(%s)', implode( ', ', $content ) );
} );
$sql = sprintf( "
begin;
truncate table subscription_summary;
insert into subscription_summary (%s)
values %s;
commit;
rollback;
",
// insert
implode( ', ', $table_columns ),
preg_replace( '/([a-zA-Z]+)/m', '\'$0\'', implode( ', ', $table_results ) ) );
$results = pg_query( $this->conn, $sql );
if ( $error = pg_last_error( $this->repConn ) ) {
throw new Exception( $error );
}
return 'success';
} catch (Exception $e) {
Logger::debug( $e->getMessage() );
}
}
}
echo "[" . date("Y-m-d H:i:s") . "] subscribed_summary job is starting.\n";
$instance = new SubscribedSummary();
// $instance->getSubscripbed();
echo $instance->updateSubscribedReport() . PHP_EOL;
echo "[" . date("Y-m-d H:i:s") . "] subscribed_summary job is ending.\n";