<?php
class Reportsm extends CI_Model {
function __construct(){
parent::__construct();
}
function get_customer_orders($search_criteria=array()){
$this->db->select("o.*,ps.payment_status_detail,pg.gateway_detail, concat(u.first_name,' ',u.last_name) AS username, os.status_detail",false);
$this->db->from('orders as o',false);
$this->db->join('order_items as oi','o.order_id = oi.order_id');
$this->db->join('payment_status as ps','ps.payment_status_code = o.payment_status','left');
$this->db->join('payment_gateways as pg','pg.gateway_code = o.payment_method','left');
$this->db->join('order_status as os','os.status_code = o.order_status','left');
$this->db->join('users as u','u.user_id = o.user_id','left');
if(count($search_criteria) > 0){
foreach($search_criteria as $column => $value){
$this->db->where($column,$value);
}
}
$this->db->group_by("o.order_id");
$this->db->order_by("oi.date_required","asc");
$this->db->order_by("order_date","desc");
$q = $this->db->get();
$result = $q->result();
return $result;
}
function get_inventory_report($search_criteria=array(),$order_by=array()){
$this->db->select("man.manufacturer_id,man.manufacturer_name,o.*,oi.*,(select sum(quantity) from order_items where product_id = p.product_id and size_id = s.size_id and item_status IN ('S','D','L')) as total_shipped,
co.color,pst.style_name,oi.performance_date,p.sku,oi.date_required,oi.promising_date,o.order_date,s.size,oi.price,oi.order_id,order_item_id,p.product_name,
p.sku,p.item_number, oi.product_id,sum(distinct oi.qty_remaining) as quantity_left,ps.stock_available as size_available,
group_concat(distinct vo.v_order_id) as vendor_order_id, group_concat(distinct vo.stock_required) as vendor_stock_required,
group_concat(distinct vo.required_date) as vendor_stock_dates",false);
$this->db->from("order_items as oi",false);
$this->db->join("orders as o","o.order_id = oi.order_id");
$this->db->join("sizes as s","s.size_id = oi.size_id","left");
$this->db->join("products as p","p.product_id = oi.product_id");
$this->db->join("colors as co","co.color_id = p.color_id");
$this->db->join("manufacturers as man","man.manufacturer_id = p.manufacturer_id","left");
$this->db->join("product_styles as pst","pst.style_id = p.style_id","left");
$this->db->join("product_sizes as ps","oi.size_id = ps.size_id and ps.product_id = oi.product_id","left");
$this->db->join("vendor_orders as vo","vo.size_id = oi.size_id and vo.product_id = oi.product_id and vo.status = 'P'","left");
$show_detail_report = false;
if(count($search_criteria) > 0 && is_array($search_criteria)){
foreach($search_criteria as $column => $value){
if($column == "detail_report"){
if($value == 1){
$show_detail_report = true;
}
}else{
$this->db->where($column,$value);
}
}
}
if($search_criteria != "" && !is_array($search_criteria)){
$this->db->where($search_criteria);
}
if($show_detail_report){
$this->db->group_by("o.order_id,p.product_id,s.size_id");
}else{
$this->db->group_by("p.product_id,s.size_id");
}
//$this->db->group_by("p.product_id,s.size_id");
if(count($order_by) > 0){
foreach($order_by as $sort_column => $sort_type){
$this->db->order_by($sort_column,$sort_type);
}
}
$q = $this->db->get();
//echo $this->db->last_query();
$result = $q->result();
return $result;
}
function get_invoice_items($invoice_id,$search_criteria=array()){
$this->db->select("oi.price,u.email,co.color,o.*,ii.*,inv.*,,s.size,sum(oi.quantity) as original_qty,p.product_name,p.sku,p.item_number,
group_concat(s.size) as sizes_ordered,sum(ii.qty_shipped) as shipped_qty, group_concat(ii.qty_shipped) as qty_ordered",false);
$this->db->from("invoice_items as ii",false);
$this->db->join("invoices as inv","inv.invoice_id = ii.invoice_id");
$this->db->join("order_items as oi","oi.order_item_id = ii.order_item_id");
$this->db->join("orders as o","o.order_id = ii.order_id");
$this->db->join("sizes as s","s.size_id = oi.size_id","left");
$this->db->join("size_groups as sg","s.size_group_id = sg.size_group_id","left");
$this->db->join("products as p","p.product_id = oi.product_id");
$this->db->join("colors as co","co.color_id = p.color_id","left");
$this->db->join('users as u','u.user_id = o.user_id','left');
if(count($search_criteria) > 0 && is_array($search_criteria)){
foreach($search_criteria as $column => $value){
$this->db->where($column,$value);
}
}
if($search_criteria != "" && !is_array($search_criteria)){
$this->db->where($search_criteria);
}
if($invoice_id > 0){
$this->db->where("inv.invoice_id",$invoice_id);
}
$this->db->group_by("sg.size_group_id,p.product_id");
$this->db->order_by("s.size_id");
$q = $this->db->get();
$result = $q->result();
//echo $this->db->last_query();
return $result;
/*
SELECT ii.*, inv.*, s.size, p.product_name, p.sku, p.item_number, group_concat(s.size) as sizes_ordered,
group_concat(ii.qty_shipped) as qty_ordered
FROM (`invoice_items` as ii)
JOIN `invoices` as inv ON `inv`.`invoice_id` = `ii`.`invoice_id`
JOIN `order_items` as oi ON `oi`.`order_item_id` = `ii`.`order_item_id`
JOIN `orders` as o ON `o`.`order_id` = `ii`.`order_id`
JOIN `sizes` as s ON `s`.`size_id` = `ii`.`size_id`
JOIN `size_groups` as sg ON `s`.`size_group_id` = `sg`.`size_group_id`
JOIN `products` as p ON `p`.`product_id` = `oi`.`product_id`
WHERE `inv`.`invoice_id` = 1
GROUP BY `p`.`product_id`,`sg`.`size_group_id`
ORDER BY `s`.`size_id`
*/
}
function get_order_item_row($search_criteria){
$this->db->select("o.*,oi.*,s.size,p.product_name,p.sku,p.item_number",false);
$this->db->from("order_items as oi",false);
$this->db->join("orders as o","o.order_id = oi.order_id");
$this->db->join("sizes as s","s.size_id = oi.size_id");
$this->db->join("products as p","p.product_id = oi.product_id");
if(count($search_criteria) > 0 && is_array($search_criteria)){
foreach($search_criteria as $column => $value){
$this->db->where($column,$value);
}
}
if($search_criteria != "" && !is_array($search_criteria)){
$this->db->where($search_criteria);
}
$q = $this->db->get();
$result = $q->result();
return $result;
}
function get_order_item_detail_row($search_criteria){
$this->db->select("man.manufacturer_id,man.manufacturer_name,o.*,oi.*,(select sum(quantity) from order_items where product_id = p.product_id and size_id = s.size_id and item_status IN ('S','D','L')) as total_shipped,
co.color,pst.style_name,oi.performance_date,p.sku,oi.date_required,oi.promising_date,o.order_date,s.size,oi.price,oi.order_id,order_item_id,p.product_name,
p.sku,p.item_number, oi.product_id,sum(oi.quantity) as size_ordered,ps.stock_available as size_available, vo.stock_required,vo.required_date,
group_concat(vo.stock_required) as vendor_stock_required, group_concat(vo.required_date) as vendor_stock_dates",false);
$this->db->from("order_items as oi",false);
$this->db->join("orders as o","o.order_id = oi.order_id");
$this->db->join("sizes as s","s.size_id = oi.size_id");
$this->db->join("products as p","p.product_id = oi.product_id");
$this->db->join("colors as co","co.color_id = p.color_id");
$this->db->join("manufacturers as man","man.manufacturer_id = p.manufacturer_id","left");
$this->db->join("product_styles as pst","pst.style_id = p.style_id","left");
$this->db->join("product_sizes as ps","oi.size_id = ps.size_id and ps.product_id = oi.product_id","left");
$this->db->join("vendor_orders as vo","vo.size_id = oi.size_id and vo.product_id = oi.product_id","left");
if(count($search_criteria) > 0 && is_array($search_criteria)){
foreach($search_criteria as $column => $value){
$this->db->where($column,$value);
}
}
if($search_criteria != "" && !is_array($search_criteria)){
$this->db->where($search_criteria);
}
$q = $this->db->get();
$result = $q->result();
return $result;
}
function get_inventory_items($search_criteria=array()){
$result = $this->get_inventory_report($search_criteria,array("oi.order_item_id" => "desc"));
$sorted_data = array();
foreach($result as $row){
$sorted_data[$row->sku][] = $row;
}
return $result;
}
function get_sizes_orders($search_criteria=array()){
$result = $this->get_inventory_report($search_criteria,array("s.size_id" => "asc","order_item_id" => "desc"));
$sorted_data = array();
foreach($result as $row){
$sorted_data[$row->size][] = $row;
}
return $sorted_data;
}
function get_sku_orders($search_criteria=array()){
$result = $this->get_inventory_report($search_criteria,array("p.sku" => "asc","order_item_id" => "desc"));
$sorted_data = array();
foreach($result as $row){
$sorted_data[$row->sku][] = $row;
}
return $sorted_data;
}
function get_brand_orders($search_criteria=array()){
$result = $this->get_inventory_report($search_criteria,array("man.manufacturer_name" => "asc","order_item_id" => "desc"));
$sorted_data = array();
foreach($result as $row){
$sorted_data[$row->manufacturer_name][] = $row;
}
return $sorted_data;
}
}
@KyuuKazami