https://t.me/RX1948
Server : Apache/2.4.18 (Ubuntu)
System : Linux canvaswebdesign 3.13.0-71-generic #114-Ubuntu SMP Tue Dec 1 02:34:22 UTC 2015 x86_64
User : oppastar ( 1041)
PHP Version : 7.0.33-0ubuntu0.16.04.15
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
Directory :  /var/www/laciasmara.com/public_html/shop/application/models/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/laciasmara.com/public_html/shop/application/models/Promotional_campaign_usage_m.php
<?php
defined('BASEPATH') or exit('No direct script access allowed');
/**
 * Promotional Campaign Usage Model
 * For tracking actual usage/conversions (orders)
 *
 * Location: application/models/Promotional_campaign_usage_model.php
 */
class Promotional_campaign_usage_m extends CI_Model
{
    protected $table = 'promotional_campaign_usage';

    /**
     * Insert usage record
     *
     * @param array $data
     * @return int|bool
     */
    public function insert($data)
    {
        if ($this->db->insert($this->table, $data)) {
            return $this->db->insert_id();
        }
        return false;
    }

    /**
     * Get user usage count for campaign
     *
     * @param int $campaign_id
     * @param int $user_id (null for guest)
     * @param string $session_id
     * @return int
     */
    public function get_user_usage_count($campaign_id, $user_id = null, $session_id = null)
    {
        $this->db->where('campaign_id', $campaign_id);

        if ($user_id) {
            // For logged in users
            $this->db->where('user_id', $user_id);
        } else {
            // For guests, check by session or IP
            $this->db->group_start();

            if ($session_id) {
                $this->db->or_where('session_id', $session_id);
            }

            $this->db->or_where('ip_address', $this->input->ip_address());
            $this->db->group_end();
        }

        return $this->db->count_all_results($this->table);
    }

    /**
     * Get campaign usage by date range
     *
     * @param int $campaign_id
     * @param string $date_from
     * @param string $date_to
     * @return array
     */
    public function get_usage_by_date($campaign_id, $date_from, $date_to)
    {
        return $this->db
            ->select('DATE(used_at) as date, COUNT(*) as count, SUM(discount_amount) as total_discount')
            ->where('campaign_id', $campaign_id)
            ->where('used_at >=', $date_from)
            ->where('used_at <=', $date_to)
            ->group_by('date')
            ->order_by('date', 'ASC')
            ->get($this->table)
            ->result();
    }

    /**
     * Get total discount given for campaign
     *
     * @param int $campaign_id
     * @return float
     */
    public function get_total_discount($campaign_id)
    {
        $result = $this->db
            ->select_sum('discount_amount')
            ->where('campaign_id', $campaign_id)
            ->get($this->table)
            ->row();

        return $result->discount_amount ?? 0;
    }

    /**
     * Get usage details with order info
     *
     * @param int $campaign_id
     * @param array $options [limit, offset]
     * @return array
     */
    public function get_usage_details($campaign_id, $options = [])
    {
        $this->db
            ->select('cu.*, o.order_number, o.total_amount, o.status as order_status, u.name as user_name, u.email')
            ->from($this->table . ' cu')
            ->join('orders o', 'o.id = cu.order_id', 'left')
            ->join('users u', 'u.id = cu.user_id', 'left')
            ->where('cu.campaign_id', $campaign_id)
            ->order_by('cu.used_at', 'DESC');

        if (isset($options['limit'])) {
            $this->db->limit($options['limit'], $options['offset'] ?? 0);
        }

        return $this->db->get()->result();
    }

    /**
     * Get average order value for campaign
     *
     * @param int $campaign_id
     * @return float
     */
    public function get_average_order_value($campaign_id)
    {
        $result = $this->db
            ->select('AVG(o.total_amount) as avg_value')
            ->from($this->table . ' cu')
            ->join('orders o', 'o.id = cu.order_id')
            ->where('cu.campaign_id', $campaign_id)
            ->get()
            ->row();

        return $result->avg_value ?? 0;
    }

    /**
     * Check if user has used campaign before
     *
     * @param int $campaign_id
     * @param int $user_id
     * @param string $session_id
     * @return bool
     */
    public function has_user_used_campaign($campaign_id, $user_id = null, $session_id = null)
    {
        $this->db->where('campaign_id', $campaign_id);

        if ($user_id) {
            $this->db->where('user_id', $user_id);
        } else if ($session_id) {
            $this->db->where('session_id', $session_id);
        } else {
            return false;
        }

        return $this->db->count_all_results($this->table) > 0;
    }

    /**
     * Get top users by discount amount
     *
     * @param int $campaign_id
     * @param int $limit
     * @return array
     */
    public function get_top_users($campaign_id, $limit = 10)
    {
        return $this->db
            ->select('u.name, u.email, COUNT(*) as usage_count, SUM(cu.discount_amount) as total_discount')
            ->from($this->table . ' cu')
            ->join('users u', 'u.id = cu.user_id')
            ->where('cu.campaign_id', $campaign_id)
            ->where('cu.user_id IS NOT NULL')
            ->group_by('cu.user_id')
            ->order_by('total_discount', 'DESC')
            ->limit($limit)
            ->get()
            ->result();
    }
}

https://t.me/RX1948 - 2025