diff --git a/bin/ngcp-fraud-daily-lock b/bin/ngcp-fraud-daily-lock index 9062692..c29ffea 100755 --- a/bin/ngcp-fraud-daily-lock +++ b/bin/ngcp-fraud-daily-lock @@ -25,15 +25,19 @@ my $o = Sipwise::Provisioning::Billing->new(); my $db = $o->{database}; my $a = $db->sql_get_all_arrayref(<<"!"); -SELECT 'profile_limit' as type, cdr.source_account_id, SUM(cdr.source_customer_cost) AS daily_cost, bpinfo.contract_id, - bpinfo.fraud_daily_limit, bpinfo.fraud_daily_lock, bpinfo.fraud_daily_notify -FROM ( - SELECT contracts.id as contract_id, - billing_profiles.fraud_daily_limit, billing_profiles.fraud_daily_lock, billing_profiles.fraud_daily_notify - FROM billing.contracts - JOIN billing.billing_mappings ON contracts.id = billing_mappings.contract_id - JOIN billing.billing_profiles - ON (billing_profiles.id = +SELECT bpinfo.type, bpinfo.id, + SUM(cdr.source_customer_cost) as daily_cost, + bpinfo.fraud_daily_limit, bpinfo.fraud_daily_lock, bpinfo.fraud_daily_notify +FROM ( + SELECT contracts.id, + CASE WHEN cfp.fraud_daily_limit > 0 THEN 'account_limit' + ELSE 'profile_limit' END as type, + IF (cfp.fraud_daily_limit > 0, cfp.fraud_daily_limit, bp.fraud_daily_limit) as fraud_daily_limit, + IF (cfp.fraud_daily_limit > 0, cfp.fraud_daily_lock, bp.fraud_daily_lock) as fraud_daily_lock, + IF (cfp.fraud_daily_limit > 0, cfp.fraud_daily_notify, bp.fraud_daily_notify) as fraud_daily_notify + FROM billing.contracts + JOIN billing.billing_profiles bp + ON (bp.id = (SELECT m.billing_profile_id FROM billing.billing_mappings m WHERE ((m.start_date IS NULL) OR (m.start_date <= NOW())) @@ -42,27 +46,15 @@ FROM ( ORDER BY m.start_date DESC LIMIT 1 ) ) + LEFT JOIN billing.contract_fraud_preferences cfp ON cfp.contract_id = contracts.id WHERE (contracts.status = 'active') - AND (billing_profiles.fraud_daily_limit IS NOT NULL) - AND (billing_profiles.fraud_daily_limit > 0) -) as bpinfo -JOIN accounting.cdr ON cdr.source_account_id = bpinfo.contract_id -WHERE (DATEDIFF(FROM_UNIXTIME(cdr.start_time), CURDATE()) = 0) -GROUP BY cdr.source_account_id -HAVING (daily_cost > bpinfo.fraud_daily_limit) - -UNION ALL - -SELECT 'account_limit' as type, cdr.source_account_id, SUM(cdr.source_customer_cost) AS daily_cost, - contracts.id, - contract_fraud_preferences.fraud_daily_limit, contract_fraud_preferences.fraud_daily_lock, - contract_fraud_preferences.fraud_daily_notify -FROM accounting.cdr -JOIN billing.contracts ON cdr.source_account_id = contracts.id -JOIN billing.contract_fraud_preferences ON contracts.id = contract_fraud_preferences.contract_id -WHERE (contracts.status = 'active') - AND (DATEDIFF(FROM_UNIXTIME(cdr.start_time), CURDATE()) = 0) -GROUP BY cdr.source_account_id + AND (cfp.fraud_daily_limit > 0 OR bp.fraud_daily_limit > 0) +) as bpinfo +JOIN accounting.cdr ON cdr.source_account_id = bpinfo.id +WHERE cdr.start_time BETWEEN UNIX_TIMESTAMP(DATE_FORMAT(NOW(), '%Y-%m-%d 00:00:00')) + AND UNIX_TIMESTAMP(DATE_FORMAT(NOW(), '%Y-%m-%d 23:59:59')) +GROUP BY bpinfo.id +HAVING daily_cost > fraud_daily_limit ! my $x = {};