MOON
Server: Apache
System: Linux nserver.cafsindia.com 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: cafsindia (1002)
PHP: 8.2.30
Disabled: NONE
Upload Files
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;
	}
}
?>