/** * Get all transactions */ public function search($params = NULL) { $_tbl_transactions = Transaction::getTableName(); $_tbl_purchases = Purchase::getTableName(); $_tbl_products = Product::getTableName(); $_tbl_plans = Plan::getTableName(); $_tbl_affiliates = Affiliate::getTableName(); $_tbl_buyers = Buyer::getTableName(); // Build search params if (!$params) { $this->_build_search_params(); } else { $this->setSearchParams($params); } $from = strtotime("midnight", strtotime($this->_search_params['from'])); $to = strtotime("tomorrow", strtotime($this->_search_params['to'])) - 1; //echo $from . " | " . $to;exit; $fields = array("{$_tbl_transactions}.*", "{$_tbl_purchases}.affiliate_id", "{$_tbl_purchases}.product_id", "{$_tbl_products}.name AS product_name", "{$_tbl_plans}.name AS plan_name", "{$_tbl_affiliates}.name AS affiliate_name", "{$_tbl_buyers}.first_name AS buyer_first_name", "{$_tbl_buyers}.last_name AS buyer_last_name", "{$_tbl_buyers}.email AS buyer_email"); $transaction = DB::table($_tbl_transactions)->join($_tbl_purchases, "{$_tbl_purchases}.id", '=', "{$_tbl_transactions}.purchase_id")->join($_tbl_products, "{$_tbl_products}.id", '=', "{$_tbl_purchases}.product_id")->join($_tbl_plans, "{$_tbl_plans}.id", '=', "{$_tbl_transactions}.plan_id")->join($_tbl_buyers, "{$_tbl_buyers}.id", '=', "{$_tbl_purchases}.buyer_id")->leftJoin($_tbl_affiliates, "{$_tbl_affiliates}.id", '=', "{$_tbl_purchases}.affiliate_id")->select($fields); $transaction = $transaction->orderBy('created_at', 'DESC'); if (!$this->_search_params['paid'] or !$this->_search_params['refunded']) { if ($this->_search_params['paid'] and !$this->_search_params['refunded']) { $is_refunded = FALSE; } if (!$this->_search_params['paid'] and $this->_search_params['refunded']) { $is_refunded = TRUE; } if (isset($is_refunded)) { $transaction = $transaction->where("is_refunded", '=', $is_refunded); } } if ($this->_search_params['product']) { // Get All Plan IDs $plans = Plan::select('id')->where("product_id", '=', $this->_search_params['product'])->get(); $planArr = array(); foreach ($plans as $plan) { $planArr[] = $plan->id; } $transaction = $transaction->whereIn("{$_tbl_transactions}.plan_id", $planArr); } if ($this->_search_params['affiliate']) { if ($this->_search_params['affiliate'] == "no-affiliate") { $transaction = $transaction->where("{$_tbl_purchases}.affiliate_id", '=', NULL); } else { $transaction = $transaction->where("{$_tbl_purchases}.affiliate_id", '=', $this->_search_params['affiliate']); } } // Quick Search if ($this->_search_params['q']) { $transaction = $transaction->orWhere("{$_tbl_buyers}.email", '=', $this->_search_params['q'])->orWhere("{$_tbl_buyers}.first_name", 'LIKE', $this->_search_params['q'] . "%")->orWhere("{$_tbl_buyers}.last_name", 'LIKE', $this->_search_params['q'] . "%")->orWhere(DB::raw('CONCAT(' . $_tbl_buyers . '.first_name," ",' . $_tbl_buyers . '.last_name)'), 'LIKE', $this->_search_params['q'] . "%")->orWhere("{$_tbl_transactions}.pay_id", 'LIKE', "%" . $this->_search_params['q'] . "%"); } // Email Search if (!empty($this->_search_params['email'])) { $transaction = $transaction->where("{$_tbl_buyers}.email", '=', $this->_search_params['email']); } $transaction = $transaction->whereBetween("{$_tbl_transactions}.updated_at", array($from, $to)); return $transaction->paginate(25); }