File: /home/cafsindia/ntc_cafsinfotech_in_bk/application/controllers/Purchase_order.php
<?php if ( ! defined('BASEPATH')) exit('No direct script is allowed');
require_once("Base_controller.php");
class Purchase_order extends Base_controller{
public function __construct(){
parent::__construct('purchase_order');
if(!$this->Appconfig->isAppvalid()){
redirect('config');
}
$this->collect_base_info();
}
// LOAD PAGE WITH TABLE DATA
public function index(){
$data['cart_view'] = $this->get_cart_view();
$this->load->view("$this->control_name/manage",$data);
}
//AUTO SEARCH BY ITEMS OR BY SUPPLIER
public function item_search(){
$search_by = (int)$this->input->post_get('search_by');
$search_items = $this->input->post_get('search_items');
$cart_view = $this->session->userdata('cart_view');
$supplier_info = $cart_view['supplier_info'];
$supplier_id = $supplier_info['supplier_id'];
if($search_by === 1){
$this->db->select('prime_inventory_supplier_id,supplier_name,mobile_number,address');
$this->db->from('inventory_supplier');
$this->db->where('inventory_supplier.trans_status', 1);
$this->db->group_start();
$this->db->like('supplier_name',$search_items);
$this->db->or_like('mobile_number',$search_items);
$this->db->group_end();
$search_info = $this->db->get()->result();
foreach($search_info as $search){
$prime_inventory_supplier_id = $search->prime_inventory_supplier_id;
$supplier_name = $search->supplier_name;
$mobile_number = $search->mobile_number;
$address = $search->address;
$label = "$supplier_name - $mobile_number";
$suggestions[] = array('value'=>$supplier_name,'label'=>$label,'search_by'=>$search_by,'supplier_id' => $prime_inventory_supplier_id,'prime_id'=>$prime_inventory_supplier_id);
}
if(empty($suggestions)){
$suggestions[] = array('value' => "0", 'label' => "No data found for this search");
}
}else
if($search_by === 2){
$this->db->select('prime_inventory_product_id,product_name,inventory_brand.brand_name,inventory_category.category_name');
$this->db->from('inventory_product');
$this->db->join('inventory_brand','inventory_product.brand = inventory_brand.prime_inventory_brand_id');
$this->db->join('inventory_category','inventory_category.prime_inventory_category_id = inventory_product.category');
$this->db->where('inventory_product.trans_status', 1);
$this->db->where('inventory_product.supplier', $supplier_id);
$this->db->where('inventory_brand.status', 1);
$this->db->where('inventory_category.status', 1);
$this->db->group_start();
$this->db->like('product_name',$search_items);
$this->db->or_like('cw_inventory_brand.brand_name',$search_items);
$this->db->or_like('cw_inventory_category.category_name',$search_items);
$this->db->group_end();
$search_info = $this->db->get()->result();
foreach($search_info as $search_rslt){
$prime_inventory_product_id = $search_rslt->prime_inventory_product_id;
$product_name = $search_rslt->product_name;
$brand_name = $search_rslt->brand_name;
$category_name = $search_rslt->category_name;
$label = "$product_name - $brand_name - $category_name";
$suggestions[] = array('value'=>$product_name,'label'=>$label,'search_by'=>$search_by,'prime_id' => $prime_inventory_product_id,'supplier_id' => 0);
}
if(empty($suggestions)){
$suggestions[] = array('value' => "0", 'label' => "No data found for this search");
}
}
echo json_encode($suggestions);
}
//ADD ITEMS TO CART
public function add_items(){
$cart_view = $this->session->userdata('cart_view');
$search_by = (int)$this->input->post('search_by');
$prime_id = $this->input->post('prime_id');
$search_items = $this->input->post('search_items');
$cart_view['error'] = array();
if($search_by === 1){
$this->db->select('prime_inventory_supplier_id,supplier_name,mobile_number,address');
$this->db->from('inventory_supplier');
$this->db->where('inventory_supplier.trans_status', 1);
$this->db->where('prime_inventory_supplier_id',$prime_id);
$search_info = $this->db->get()->row();
$prime_inventory_supplier_id = $search_info->prime_inventory_supplier_id;
$supplier_name = $search_info->supplier_name;
$mobile_number = $search_info->mobile_number;
$address = $search_info->address;
$check_id = (int)$cart_view['supplier_info']['supplier_id'];
$prime_purchase_order_id = (int)$cart_view['supplier_info']['prime_purchase_order_id'];
$cart_view['supplier_info'] =
array('supplier_id' => $prime_inventory_supplier_id,
'prime_purchase_order_id'=> $prime_purchase_order_id,
'supplier_name' => $supplier_name,
'mobile_number' => $mobile_number,
'address' => $address
);
if(!($check_id === (int)$prime_inventory_supplier_id)){
$cart_view['purchase_info'] = array();
}
}else
if($search_by === 2){
$this->db->select('prime_inventory_product_id,product_name,product_type,product_code,inventory_brand.brand_name,inventory_category.category_name,total_quantity,prime_inventory_supplier_id,supplier_name,mobile_number,address,price');
$this->db->from('inventory_product');
$this->db->join('inventory_supplier','inventory_supplier.prime_inventory_supplier_id = inventory_product.supplier');
$this->db->join('inventory_brand','inventory_product.brand = inventory_brand.prime_inventory_brand_id');
$this->db->join('inventory_category','inventory_category.prime_inventory_category_id = inventory_product.category');
$this->db->where('inventory_product.trans_status', 1);
$this->db->where('inventory_brand.status', 1);
$this->db->where('inventory_category.status', 1);
$this->db->where('inventory_product.prime_inventory_product_id',$prime_id);
$item_info = $this->db->get()->row();
$prime_inventory_product_id = $item_info->prime_inventory_product_id;
$product_name = $item_info->product_name;
$product_type = $item_info->product_type;
$product_code = $item_info->product_code;
$brand_name = $item_info->brand_name;
$category_name = $item_info->category_name;
$prime_inventory_supplier_id = $item_info->prime_inventory_supplier_id;
$supplier_name = $item_info->supplier_name;
$mobile_number = $item_info->mobile_number;
$address = $item_info->address;
$price = $item_info->price;
if(empty($cart_view['supplier_info'])){
$cart_view['supplier_info'] =
array(
'supplier_id' => $prime_inventory_supplier_id,'prime_purchase_order_id' => "",
'supplier_name' => $supplier_name,
'mobile_number' => $mobile_number,
'address' => $address
);
$cart_view['purchase_info'][$prime_inventory_product_id] =
array('prime_inventory_product_id' => $prime_inventory_product_id,
'prime_inventory_supplier_id' => $prime_inventory_supplier_id,
'prime_purchase_order_id' => "",
'product_name' => $product_name,
'product_type' => $product_type,
'brand_name' => $brand_name,
'category_name' => $category_name,
'quantity' => 1,
'price' => $price
);
}else{
$check_id = (int)$cart_view['supplier_info']['supplier_id'];
$prime_purchase_order_id = (int)$cart_view['supplier_info']['prime_purchase_order_id'];
if($check_id === (int)$prime_inventory_supplier_id){
$cart_view['purchase_info'][$prime_inventory_product_id] =
array('prime_inventory_product_id' => $prime_inventory_product_id,
'prime_inventory_supplier_id' => $prime_inventory_supplier_id,
'prime_purchase_order_id' => $prime_purchase_order_id,
'product_name' => $product_name,
'product_type' => $product_type,
'brand_name' => $brand_name,
'category_name' => $category_name,
'quantity' => 1,
'price' => $price
);
}else{
$cart_view['error'][] = "Supplier should be same";
}
}
}
$this->session->set_userdata('cart_view', $cart_view);
$cart_view_infomation = $this->get_cart_view();
$cart_view = $this->session->userdata('cart_view');
echo json_encode(array('cart_view_infomation'=>$cart_view_infomation,'error'=>$cart_view['error']),JSON_FORCE_OBJECT);
}
//SAVE RECEIVED ORDERS TO DB
public function get_cart_view(){
$cart_view = $this->session->userdata('cart_view');
$tr_line = "";
foreach(array_reverse($cart_view['purchase_info']) as $data){
$prime_id = $data['prime_inventory_product_id'];
if($data['prime_inventory_supplier_id'] > 0){
$prime_inventory_supplier_id = $data['prime_inventory_supplier_id'];
}else{
$prime_inventory_supplier_id = 0;
}
$prime_purchase_order_id = $data['prime_purchase_order_id'];
$product_name = $data['product_name'];
$product_type = $data['product_type'];
$brand_name = $data['brand_name'];
$category_name = $data['category_name'];
$quantity = $data['quantity'];
$price = (int)$data['price'];
$total_price = (int)$price*(int)$quantity;
$tr_line .= "<tr id='tr_data_$prime_id'>
<td>
<button onclick = 'delete_item($prime_id)' class = 'btn btn-xs btn-edit'><span class='fa fa-trash'></span> Delete </button>
</td>
<td>
<input type='hidden' name='prime_purchase_order_id' id='prime_purchase_order_id' value='$prime_purchase_order_id'>
<input type='hidden' name='prime_inventory_supplier_id' id='prime_inventory_supplier_id' value='$prime_inventory_supplier_id'>
<input type='hidden' name='material_id_[]' id='material_id_$prime_id' value='$prime_id'>
<input type='hidden' name='brand_name_$prime_id' id='brand_name_$prime_id' value='$brand_name' >
<input type='hidden' name='category_name_$prime_id' id='category_name_$prime_id' value='$category_name'>
<input type='hidden' name='product_name_$prime_id' id='product_name_$prime_id' value='$product_name'>$product_name
</td>
<td>
$brand_name
</td>
<td>
$category_name
</td>
<td>
<input name='quantity[]' id='quantity_$prime_id' value='$quantity' class='number' style='width:100px;' onchange=update_product('$prime_id');>
</td>
<td>
<input name='value[]' id='value_$prime_id' value='$price' class='number' style='width:100px;' onchange=update_product('$prime_id');>
</td>
<td>
<span id='total_price_$prime_id' > $total_price </span>
</td>
</tr>";
}
$cart_content = "<h4 class='tab_head' style='margin:8px 0px;'>Product List</h4>
<table class='table table-striped'>
<thead>
<tr>
<td>Option</td>
<td>Items Name</td>
<td>Brand Name</td>
<td>Category Name</td>
<td>Quantity</td>
<td>Value</td>
<td>Total Price</td>
</tr>
</thead>
<tbody>
$tr_line
</tbody>
</table>";
$supplier_info = $cart_view['supplier_info'];
$supplier_name = $supplier_info['supplier_name'];
$supplier_id = $supplier_info['supplier_id'];
if(!((int)$supplier_id > 0)){
$supplier_id = 0;
}
$order_id = $supplier_info['prime_purchase_order_id'];
$mobile_number = $supplier_info['mobile_number'];
$address = $supplier_info['address'];
$supplier_content = "<table class='table' style='background-color:#ffffff;'>
<tr>
<input type='hidden' name='purchase_order_id' id='purchase_order_id' value='$order_id'>
<input type='hidden' name='inventory_supplier_id' id='inventory_supplier_id' value='$supplier_id'>
<td style='padding:4px;'><span style='color: #4e5b9a; font-size: 12px; font-weight: bold;'>Supplier Name</span><br/>$supplier_name</td>
<td style='padding:4px;'><span style='color: #4e5b9a; font-size: 12px; font-weight: bold;'>Mobile Number</span><br/>$mobile_number</td>
<td style='padding:4px;'><span style='color: #4e5b9a; font-size: 12px; font-weight: bold;'>Address</span><br/>$address</td>
</tr>
</table>";
return array('supplier_content'=>$supplier_content,'cart_content'=>$cart_content);
}
//UPDATE PRODUCT TO CART VIEW
public function update_product(){
$cart_view = $this->session->userdata('cart_view');
$prime_id = (int)trim($this->input->post('prime_id'));
$product_name = $this->input->post('product_name');
$prime_purchase_order_id = $this->input->post('prime_purchase_order_id');
$prime_inventory_supplier_id = $this->input->post('prime_inventory_supplier_id');
$brand_name = $this->input->post('brand_name');
$category_name = $this->input->post('category_name');
$quantity = $this->input->post('quantity');
$price = $this->input->post('price');
if($cart_view['purchase_info'][$prime_id]){
$cart_view['purchase_info'][$prime_id] = array(
'prime_inventory_product_id' => $prime_id,
'prime_purchase_order_id' => $prime_purchase_order_id,'prime_inventory_supplier_id' => $prime_inventory_supplier_id,
'product_name' => $product_name,
'brand_name' => $brand_name,
'category_name' => $category_name,
'quantity' => $quantity,
'price' => $price
);
}
$this->session->set_userdata('cart_view', $cart_view);
$cart_view_infomation = $this->get_cart_view();
echo json_encode(array('cart_view_infomation'=>$cart_view_infomation));
}
//DELETE ITEM FROM SESSION
public function delete_item(){
$prime_id = (int)$this->input->post('prime_id');
$cart_view = $this->session->userdata('cart_view');
if($cart_view['purchase_info'][$prime_id]){
unset($cart_view['purchase_info'][$prime_id]);
}
$this->session->set_userdata('cart_view',$cart_view);
$table_content = $this->get_cart_view();
echo json_encode(array('success'=>True,'message'=>'Deleted Successfully','cart_view_infomation'=>$table_content));
}
//Save to PURCHASE ORDER
public function save_order(){
$cart_view = $this->session->userdata('cart_view');
$supplier_info = $cart_view['supplier_info'];
$supplier_id = $supplier_info['supplier_id'];
$prime_purchase_order_id = $supplier_info['prime_purchase_order_id'];
$purchase_info = $cart_view['purchase_info'];
$prime_supplier_id = (int)$this->input->post('prime_inventory_supplier_id');
$purchase_order_id = (int)$this->input->post('prime_purchase_order_id');
$table_content = $this->get_cart_view();
$cart_view = array();
$this->session->set_userdata('cart_view',$cart_view);
if($supplier_id && $purchase_info){
if($this->order_exists($prime_purchase_order_id)){
if(((int)$supplier_id === (int)$prime_supplier_id) && ((int)$prime_purchase_order_id === (int)$purchase_order_id)){
$update_data = array();
$check_list = array();
foreach ($purchase_info as $value){
$quantity = $value['quantity'];
if((int)$quantity === 0){
$quantity = 1;
}
$price = $value['price'];
$product_name = $value['product_name'];
$brand_name = $value['brand_name'];
$category_name = $value['category_name'];
$material_id = $value['prime_inventory_product_id'];
$check_list[] = $material_id;
$amount = 0;
if($this->material_exists_in_order($prime_purchase_order_id,$material_id)){
$update_data = array(
'prime_purchase_order_id' => $prime_purchase_order_id,
'supplier_id' => $supplier_id,
'product_name' => $product_name,
'product_type' => $product_type,
'brand_name' => $brand_name,
'category_name' => $category_name,
'quantity' => $quantity,
'price' => $price
);
$amount = (int)$quantity*(int)$price;
$update_data['amount'] = $amount;
$update_data['trans_updated_by'] = $this->session->userdata('logged_id');
$update_data['trans_updated_date'] = date("Y-m-d H:i:s");
$this->db->where('prime_purchase_order_id',$prime_purchase_order_id);
$this->db->where('supplier_id',$supplier_id);
$this->db->where('prime_inventory_product_id',$material_id);
$this->db->update('cw_purchase_item_list',$update_data);
}else{
$insert_data = array(
'prime_purchase_order_id' => $prime_purchase_order_id,
'supplier_id' => $supplier_id,
'prime_inventory_product_id' => $value['prime_inventory_product_id'],
'product_name' => $product_name,
'product_type' => $product_type,
'brand_name' => $brand_name,
'category_name' => $category_name,
'quantity' => $quantity,
'price' => $price
);
$amount = (int)$quantity*(int)$price;
$insert_data['amount'] = $amount;
$insert_data['trans_created_by'] = $this->session->userdata('logged_id');
$insert_data['trans_created_date'] = date("Y-m-d H:i:s");
$this->db->insert('cw_purchase_item_list',$insert_data);
}
}
$inactive['trans_status'] = 0;
$inactive['trans_deleted_by'] = $this->session->userdata('logged_id');
$inactive['trans_deleted_date'] = date("Y-m-d H:i:s");
$this->db->where_not_in('prime_inventory_product_id', $check_list);
$this->db->where('prime_purchase_order_id', $prime_purchase_order_id);
$this->db->update('cw_purchase_item_list',$inactive);
$this->update_purchase_amount($prime_purchase_order_id);
$table_content = $this->get_cart_view();
echo json_encode(array('success'=>true,'message'=>'Updated Successfully','table_content'=>$table_content));
}else{
echo json_encode(array('success'=>false,'message'=>'Please Contact Admin','table_content'=>$table_content));
}
}else{
$pod_number = strtoupper($this->generate_code($code="POD"));
$receiving_data = array(
'supplier_id' => $supplier_id,
'pod_number' => $pod_number,
'entry_date' => date("Y-m-d"),
'po_status' => '1'
);
$receiving_data['trans_created_by'] = $this->session->userdata('logged_id');
$receiving_data['trans_created_date'] = date("Y-m-d H:i:s");
$this->db->insert('cw_purchase_order',$receiving_data);
$prime_purchase_order_id = $this->db->insert_id();
$amount = 0;
foreach ($purchase_info as $value){
$quantity = $value['quantity'];
$price = $value['price'];
$purchase_data = array(
'prime_purchase_order_id' => $prime_purchase_order_id,
'supplier_id' => $supplier_id,
'prime_inventory_product_id' => $value['prime_inventory_product_id'],
'product_name' => $value['product_name'],
'product_type' => $value['product_type'],
'brand_name' => $value['brand_name'],
'category_name' => $value['category_name'],
'quantity' => $quantity,
'price' => $price
);
$amount = (int)$quantity*(int)$price;
$purchase_data['amount'] = $amount;
$purchase_data['trans_created_by'] = $this->session->userdata('logged_id');
$purchase_data['trans_created_date'] = date("Y-m-d H:i:s");
$insert_data = $this->db->insert('cw_purchase_item_list',$purchase_data);
}
$table_content = $this->get_cart_view();
$this->update_purchase_amount($prime_purchase_order_id);
if($insert_data){
echo json_encode(array('success'=>TRUE,'message'=>'Purchase Order Created Successfully','table_content'=>$table_content));
}else{
echo json_encode(array('success'=>false,'message'=>'Please Try After Sometime','table_content'=>$table_content));
}
}
}else{
echo json_encode(array('success'=>false,'message'=>'Please add both Supplier and Items and then try again','table_content'=>$table_content));
}
}
//UPDATE AMOUNT IN PURCHASE ORDER AMOUNT
public function update_purchase_amount($prime_purchase_order_id){
$this->db->select('IFNULL(SUM(amount),0) as amount');
$this->db->from('purchase_item_list');
$this->db->where('trans_status',1);
$this->db->where('prime_purchase_order_id',(int)$prime_purchase_order_id);
$this->db->group_by('prime_purchase_order_id');
$purchase_list_info = $this->db->get();
$count = $purchase_list_info->num_rows();
$amount = 0;
if((int)$count === 1){
$purchase_rslt = $purchase_list_info->row();
$amount = (int)$purchase_rslt->amount;
$update_purchase_info['total_amount'] = $amount;
$update_purchase_info['trans_updated_by'] = $this->session->userdata('logged_id');
$update_purchase_info['trans_updated_date'] = date("Y-m-d H:i:s");
$this->db->where('prime_purchase_order_id', $prime_purchase_order_id);
$this->db->update('cw_purchase_order',$update_purchase_info);
}
}
//CHECK PURCHASE ORDER EXISTS
public function order_exists($prime_purchase_order_id){
$this->db->from('cw_purchase_order');
$this->db->where('trans_status',1);
$this->db->where('prime_purchase_order_id',(int)$prime_purchase_order_id);
$count = $this->db->get()->num_rows();
if((int)$count === 1){
return TRUE;
}else{
return FALSE;
}
}
//CHECK MATERIAL EXISTS
public function material_exists_in_order($prime_purchase_order_id,$material_id){
$this->db->from('cw_purchase_item_list');
$this->db->where('trans_status',1);
$this->db->where('prime_purchase_order_id',(int)$prime_purchase_order_id);
$this->db->where('prime_inventory_product_id',(int)$material_id);
$count = $this->db->get()->num_rows();
if((int)$count === 1){
return TRUE;
}else{
return FALSE;
}
}
public function cancel_order(){
$cart_view = array();
$this->session->set_userdata('cart_view',$cart_view);
echo json_encode(array('sts'=>true,'message'=>"Purchase Order removed successfully"));
}
public function generate_code($code="UN"){
$this->db->from('cw_purchase_order');
$this->db->where('trans_status', 1);
$count = (int)$this->db->get()->num_rows();
$count = $count + 1 ;
$count = str_pad($count, 4, '0', STR_PAD_LEFT);
$date = date('YMd');
$uniqueCode = $code . $date . $count;
return $uniqueCode;
}
}
?>