Exemplo n.º 1
0
    return;
}
if (!empty($auth['user_id'])) {
    $partner_data = fn_get_partner_data($auth['user_id']);
    if (!empty($partner_data)) {
        $titles = fn_get_static_data_section('T');
        if (!empty($titles) && is_array($titles)) {
            foreach ($titles as $t) {
                if (!empty($t['param']) && $t['param'] == @$partner_data['title']) {
                    $partner_data['title_descr'] = $t['descr'];
                }
            }
        }
        $partner_data['total_payouts'] = db_get_field("SELECT SUM(amount) FROM ?:affiliate_payouts WHERE partner_id = ?i", $auth['user_id']);
        $cnt_period = Registry::if_get('addons.affiliate.number_last_periods', 10);
        $start_date = fn_get_date_of_payment_period($cnt_period);
        if (!empty($start_date)) {
            $last_payouts = array();
            $k = $cnt_period;
            $max_amount = 0;
            $cur_date = getdate(TIME);
            $checkpoint_1 = 1;
            $checkpoint_2 = 16;
            $checkpoint_return = $cur_date['mday'] < $checkpoint_2 ? false : true;
            while (!empty($k)) {
                switch (Registry::get('addons.affiliate.payment_period')) {
                    case '1w':
                        $end_date = $start_date + 7 * 24 * 3600;
                        break;
                    case '2w':
                        if ($checkpoint_return) {
Exemplo n.º 2
0
function fn_pay_affiliates($params, $do_pagination = false, $page = 1)
{
    // Init filter
    $params = fn_init_view('pay_affiliates', $params);
    // Set default values to input params
    $params['page'] = empty($params['page']) ? 1 : $params['page'];
    // default page is 1
    // Define sort fields
    $sortings = array('username' => 'user_login', 'email' => 'email', 'partner' => 'firstname', 'amount' => 'amount', 'awaiting_amount' => 'awaiting_amount', 'date' => 'date');
    $directions = array('asc' => 'asc', 'desc' => 'desc');
    if (empty($params['sort_order']) || empty($directions[$params['sort_order']])) {
        $params['sort_order'] = 'desc';
    }
    $sorting_direction = $directions[$params['sort_order']];
    if (empty($params['sort_by']) || empty($sortings[$params['sort_by']])) {
        $params['sort_by'] = 'username';
    }
    $sort_by = $params['sort_by'];
    if ($sort_by == 'date' || $sort_by == 'awaiting_amount') {
        $sort_by = 'username';
    }
    $sorting = (is_array($sortings[$sort_by]) ? implode(' ' . $sorting_direction . ', ', $sortings[$sort_by]) : $sortings[$sort_by]) . " " . $sorting_direction;
    // Reverse sorting (for usage in view)
    $params['sort_order'] = $params['sort_order'] == 'asc' ? 'desc' : 'asc';
    $pay_filter = array();
    $pay_filter['min_payment'] = empty($params['min_payment']) ? '' : 'Y';
    $pay_filter['last_payout'] = empty($params['last_payout']) ? '' : 'Y';
    $pay_filter['amount_from'] = empty($params['amount_from']) ? '' : floatval($params['amount_from']);
    $pay_filter['amount_to'] = empty($params['amount_to']) ? '' : floatval($params['amount_to']);
    $_SESSION['pay_filter'] = $pay_filter;
    $join = $condition = $group = '';
    $having = array();
    if (!empty($params['min_payment'])) {
        $having[] = 'SUM(pa.amount) >= AVG(ap.min_payment)';
    }
    if (isset($params['amount_from']) && fn_is_numeric($params['amount_from'])) {
        $having[] = db_quote("SUM(pa.amount) >= ?d", $params['amount_from']);
    }
    if (isset($params['amount_to']) && fn_is_numeric($params['amount_to'])) {
        $having[] = db_quote("SUM(pa.amount) <= ?d", $params['amount_to']);
    }
    if (!empty($params['last_payout'])) {
        $condition .= db_quote(" AND pa.date < ?i", fn_parse_date(fn_get_date_of_payment_period(), true));
    }
    $group = 'GROUP BY pa.partner_id' . (empty($having) ? ' ' : ' HAVING (' . implode(') AND (', $having) . ') ');
    if ($do_pagination) {
        if (empty($page)) {
            $page = 1;
        }
        $cnt_list_stats = db_get_fields("SELECT DISTINCT(pa.partner_id) FROM ?:aff_partner_actions as pa LEFT JOIN ?:aff_partner_profiles as pp ON pa.partner_id = pp.user_id LEFT JOIN ?:affiliate_plans as ap ON ap.plan_id = pp.plan_id WHERE pa.approved = 'Y' AND pa.payout_id = 0 ?p ?p", $condition, $group);
        $limit = fn_paginate($page, count($cnt_list_stats));
    } else {
        $limit = '';
    }
    $partner_balances = db_get_hash_array("SELECT pa.partner_id, u.user_login, u.firstname, u.lastname, u.email, SUM(amount) as amount FROM ?:aff_partner_actions as pa LEFT JOIN ?:users as u ON pa.partner_id = u.user_id LEFT JOIN ?:aff_partner_profiles as pp ON pa.partner_id = pp.user_id LEFT JOIN ?:affiliate_plans as ap ON ap.plan_id = pp.plan_id WHERE pa.approved = 'Y' AND payout_id = 0 ?p ?p ORDER BY {$sorting} {$limit}", 'partner_id', $condition, $group);
    $_partners = db_get_hash_array("SELECT pa.partner_id, SUM(amount) as amount FROM ?:aff_partner_actions as pa LEFT JOIN ?:aff_partner_profiles as pp ON pa.partner_id = pp.user_id LEFT JOIN ?:affiliate_plans as ap ON ap.plan_id = pp.plan_id WHERE pa.approved = 'N' AND payout_id = 0 GROUP BY pa.partner_id ORDER BY amount {$sorting_direction}", 'partner_id');
    $last_payout_dates = db_get_hash_array("SELECT partner_id, MAX(date) as date FROM ?:affiliate_payouts GROUP BY partner_id ORDER BY date {$sorting_direction}", 'partner_id');
    if ($params['sort_by'] != 'date' && $params['sort_by'] != 'awaiting_amount') {
        foreach ($partner_balances as $_partner_id => $_partner_data) {
            $partner_balances[$_partner_id]['awaiting_amount'] = empty($_partners[$_partner_id]['amount']) ? '' : floatval($_partners[$_partner_id]['amount']);
            $partner_balances[$_partner_id]['last_payout_date'] = @$last_payout_dates[$_partner_id]['date'];
        }
    } else {
        $temp_balances = array();
        if ($params['sort_by'] == 'awaiting_amount') {
            foreach ($_partners as $_partner_id => $_partner_data) {
                if (!empty($partner_balances[$_partner_id])) {
                    $temp_balances[$_partner_id] = $partner_balances[$_partner_id];
                    $temp_balances[$_partner_id]['awaiting_amount'] = floatval($_partner_data['amount']);
                    $temp_balances[$_partner_id]['last_payout_date'] = @$last_payout_dates[$_partner_id]['date'];
                    unset($partner_balances[$_partner_id]);
                }
            }
        } else {
            foreach ($last_payout_dates as $_partner_id => $_date) {
                if (!empty($partner_balances[$_partner_id])) {
                    $temp_balances[$_partner_id] = $partner_balances[$_partner_id];
                    $temp_balances[$_partner_id]['awaiting_amount'] = empty($_partners[$_partner_id]['amount']) ? '' : floatval($_partners[$_partner_id]['amount']);
                    $temp_balances[$_partner_id]['last_payout_date'] = $_date['date'];
                    unset($partner_balances[$_partner_id]);
                }
            }
        }
        $temp_balances2 = array();
        foreach ($partner_balances as $_partner_id => $_partner_data) {
            $temp_balances2[$_partner_id] = $_partner_data;
            $temp_balances2[$_partner_id]['awaiting_amount'] = empty($_partners[$_partner_id]['amount']) ? '' : floatval($_partners[$_partner_id]['amount']);
            $temp_balances2[$_partner_id]['last_payout_date'] = @$last_payout_dates[$_partner_id]['date'];
        }
        $partner_balances = $sorting_direction == 'desc' ? $temp_balances + $temp_balances2 : $temp_balances2 + $temp_balances;
    }
    return array($partner_balances, $params);
}