\!/ KyuuKazami \!/

Path : /home/kohli/public_html/application/models/
Upload :
Current File : /home/kohli/public_html/application/models/reportsm.php

<?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