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/Request_receiving.php
<?php if ( ! defined('BASEPATH')) exit('No direct script is allowed');
require_once("Base_controller.php");
class Request_receiving  extends Base_controller{
	
	public function __construct(){
		parent::__construct('request_receiving');
		if(!$this->Appconfig->isAppvalid()){
			redirect('config');
		}
		$this->collect_base_info();
	}
	
	// LOAD PAGE WITH TABLE DATA
	public function index(){
		$data['table_headers']= get_request_receiving_headers();
		$this->load->view("$this->control_name/manage",$data);
	}
	
	//LOAD PAGE TABLE VIEW WITH DATA BASED ON SEARCH FILTERS
	public function search(){
		$search            = $this->input->get('search');
		$limit             = $this->input->get('limit');
		$offset            = $this->input->get('offset');
		$sort              = $this->input->get('sort');
		$order             = $this->input->get('order');
		$start_date        = str_replace("/","-",$this->input->get('start_date'));
		$end_date          = str_replace("/","-",$this->input->get('end_date'));	
		$from_date         = date('Y-m-d',strtotime($start_date));
		$to_date           = date('Y-m-d',strtotime($end_date));			
		$filters           = $this->input->get('filters');
		$this->db->select('material_request.prime_material_request_id,job_card_number,request_no,request_date,	company,vehicle_no,material_request.status');
		$this->db->from('material_request');
		if($search){
			$this->db->group_start();
				$this->db->like('job_card_number',$search);
				$this->db->or_like('request_no',$search);				
				$this->db->or_like('service_category',$search);				
				$this->db->or_like('company',$search);				
				$this->db->or_like('vehicle_no',$search);				
				if(strpos($search, '-') !== false){
				  $this->db->or_like('request_date', date('Y-m-d',strtotime($search))); 
				}
			$this->db->group_end();	
		}
		$this->db->group_start();
		$filters_sts = array();
		foreach($filters as $key=>$value){
			if($value){ $filters_sts[] = $value; }
		}
		if(count($filters_sts) > 0){
			$this->db->where_in('material_request.status', $filters_sts);
		}
		$this->db->where('DATE_FORMAT(request_date, "%Y-%m-%d") BETWEEN '. $this->db->escape($from_date).' AND '.$this->db->escape($to_date));
		$this->db->group_end();
		
		$this->db->order_by($sort,$order);
		$receiving_data = $this->db->get();
		$receiving_rslt = $receiving_data->result();
		$num_rows       = $receiving_data->num_rows();
		$datarows       = array();		
		foreach($receiving_rslt as $receiving){
			$datarows[] = get_request_receiving_datarows($receiving,$this);
		}
		echo json_encode(array('total'=>$num_rows,'rows'=>$datarows));
	}
	
	//LOAD MODEL PAGE VIEW WITH DATA
	public function view($prime_material_request_id=-1){
		if($this->request_exists($prime_material_request_id)){
			$search_info            = $this->get_table_info($prime_material_request_id);
			$cart_view_infomation   = $this->get_cart_view($search_info);
			$data['cart_view_infomation'] = $cart_view_infomation;
		}else{
			$cart_view_infomation   = $this->get_cart_view();
			$data['cart_view_infomation'] = $cart_view_infomation;
		}
		$this->load->view("$this->control_name/form",$data);
	}
	
	//AUTO SEARCH BY Request Number
	public function search_qty_info(){
		$search_by        = (int)$this->input->post_get('search_by');
		$search_qty_info  = $this->input->post_get('search_qty_info');
		if($search_by === 1){
			$this->db->select('prime_material_request_id,request_no');
			$this->db->from('cw_material_request');
			$this->db->where('cw_material_request.status','on process')	;	
			$this->db->group_start();
				$this->db->like('request_no',$search_qty_info);
			$this->db->group_end();	
			$search_info = $this->db->get()->result();
			foreach($search_info as $search){
				$prime_material_request_id  = $search->prime_material_request_id;
				$request_no                 = $search->request_no;
				$label                      = "$request_no";
				$suggestions[] = array('value'=>$prime_material_request_id,'label'=>$label,'search_by'=>$search_by,'prime_id' => $prime_material_request_id);
			}
			if(empty($suggestions)){
				$suggestions[] = array('value' => "0", 'label' => "No data found for this search");
			}			
		}
		echo json_encode($suggestions);
	}
	
	//ADD ITEMS TO CART
	public function get_items(){
		$search_by          = (int)$this->input->post('search_by');
		$prime_id           = $this->input->post('prime_id');
		$search_qty_info    = (int)$this->input->post_get('search_qty_info');
		if($search_by === 1){
			if($this->request_exists($prime_id)){
				$search_info            = $this->get_table_info($prime_id);
				$cart_view_infomation   = $this->get_cart_view($search_info);
				echo json_encode(array('cart_view_infomation'=>$cart_view_infomation,'error'=>""),JSON_FORCE_OBJECT);
			}else{
				$cart_view_infomation   = $this->get_cart_view();
				echo json_encode(array('cart_view_infomation'=>$cart_view_infomation,'error'=>""),JSON_FORCE_OBJECT);
			}
		}else{
			$cart_view_infomation   = $this->get_cart_view();
			echo json_encode(array('cart_view_infomation'=>$cart_view_infomation,'error'=>"Please Contact The Admin"),JSON_FORCE_OBJECT);
		}		
	}
	
	//ADD ITEMS TO CART
	public function get_table_info($prime_id = -1){
		$this->db->select('prime_material_request_list_id,cw_material_request.prime_material_request_id,cw_inventory_product.product_name,cw_inventory_product.total_quantity,cw_material_request_list.pending_quantity,cw_material_request_list.quantity,cw_employees.user_name as technician_name,cw_material_request.request_no as request_no,cw_employees.mobile_number,cw_employees.residential_address as address,cw_employees.prime_employees_id as technician_id,cw_inventory_product.prime_inventory_product_id');
		$this->db->from('cw_material_request_list');
		$this->db->join('cw_material_request','cw_material_request.prime_material_request_id = cw_material_request_list.prime_material_request_id');
		$this->db->join('cw_employees','cw_employees.prime_employees_id = cw_material_request.trans_created_by');
		$this->db->join('cw_inventory_product','cw_inventory_product.prime_inventory_product_id = cw_material_request_list.product_name');
		$this->db->where('cw_material_request_list.trans_status', 1);
		$this->db->where('cw_material_request_list.status','Pending');
		$this->db->where('cw_material_request.trans_status', 1);
		$this->db->where('cw_material_request_list.prime_material_request_id',$prime_id);
		return $this->db->get()->result();
	}
	
	public function get_cart_view($search_info = -1){
			$tr_line                         = "";
			$quantity_info                   = $this->session->userdata('quantity_info');
			$technician_name                 = $search_info[0]->technician_name;
			$technician_id                   = $search_info[0]->technician_id;
			$prime_material_request_id       = $search_info[0]->prime_material_request_id;
			$mobile_number                   = $search_info[0]->mobile_number;
			$address                         = $search_info[0]->address;
			$request_no                      = $search_info[0]->request_no;
			$technician_content = "<table class='table' style='background-color:#ffffff;'>
									<tr>
										<input type='hidden' name='prime_material_request_id' id='prime_material_request_id' value='$prime_material_request_id'>
										<input type='hidden' name='technician_id_id' id='technician_id_id' value='$technician_id'>
										<td style='padding:4px;'><span style='color: #4e5b9a; font-size: 12px; font-weight: bold;'>Technician Name</span><br/>$technician_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>";
			foreach($search_info as $data){
				$prime_material_request_id      = $data->prime_material_request_id;
				$prime_material_request_list_id = $data->prime_material_request_list_id;
				$prime_inventory_product_id     = $data->prime_inventory_product_id;
				$technician_id                  = $data->technician_id;
				$product_name                   = $data->product_name;
				$total_quantity                 = $data->total_quantity;
				$quantity                       = $data->quantity;
				$pending_quantity               = $data->pending_quantity;
				$quantity_info['quantity_info']['prime_info'] = 
				array('prime_material_request_list_id' => $prime_material_request_list_id,
					  'prime_material_request_id'      => $prime_material_request_id
					  );
				$quantity_info['quantity_info'][$prime_inventory_product_id] = 
				array('prime_material_request_list_id' => $prime_material_request_list_id,
					  'prime_material_request_id'      => $prime_material_request_id,
					  'material_id'                    => $prime_inventory_product_id,
					  'rec_quantity'                   => 0
					  );
				$tr_line .= "<tr id='tr_data_$prime_id'>
								<td>
									<button onclick = 'set_purchase_order($prime_inventory_product_id,$prime_material_request_list_id)' class = 'btn btn-success btn-sm'><span class='fa fa-paper-plane'></span> PO </button>
								</td>
								<td>
									<input type='hidden' name='material_request_$prime_material_request_list_id' id='material_request_$prime_material_request_list_id' value='$prime_material_request_id'>
									<input type='hidden' name='material_id_$prime_material_request_list_id' id='material_id_$prime_material_request_list_id' value='$prime_inventory_product_id'>
									<input type='hidden' name='product_name_$prime_material_request_list_id' id='product_name_$prime_material_request_list_id' value='$product_name'>
									<input type='hidden' name='quantity_$prime_material_request_list_id' id='quantity_$prime_material_request_list_id' value='$pending_quantity'>$product_name
									
								</td>
								<td>
									$total_quantity
								</td>
								<td>
									$quantity
								</td>
								<td>
									$pending_quantity
								</td>
								<td>
									<input name='rec_quantity_$prime_material_request_list_id' id='rec_quantity_$prime_material_request_list_id' value='0' class='number' style='width:100px;' onchange=update_quantity($prime_material_request_list_id);>
								</td>
							</tr>";								
			}
			if($tr_line == ""){
				$tr_line = "<tr colspan='5'><td>No Data Found</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>Material Name</td>
											<td>Total Quantity</td>
											<td>Requested Quantity</td>
											<td>Pending Quantity</td>
											<td>Send Quantity</td>
									</tr>
									</thead>
									<tbody>
										$tr_line
									</tbody>
								</table>";
			$this->session->set_userdata('quantity_info',$quantity_info);
			return array('technician_content'=>$technician_content,'cart_content'=>$cart_content);
	}
	
	//UPDATE QUANTITY TO MATERIAL LIST
	public function update_quantity(){
		$prime_material_request_list_id    = $this->input->post('prime_material_request_list_id');
		$prime_material_request_id         = $this->input->post('prime_material_request_id');
		$material_id                       = $this->input->post('material_id');
		$rec_quantity                      = $this->input->post('rec_quantity');
		$this->db->select('prime_inventory_product_id,total_quantity');
		$this->db->from('cw_inventory_product');
		$this->db->where('trans_status',1);
		$this->db->where('prime_inventory_product_id',(int)$material_id);
		$material_info  = $this->db->get()->row();
		$total_quantity = $material_info->total_quantity;
		$quantity_info  = $this->session->userdata('quantity_info');
		if((int)$total_quantity >= (int)$rec_quantity){
			if((int)$rec_quantity === 0){
				$rec_quantity = 1;
			}
			$quantity_info['quantity_info'][$material_id] = 
				array('prime_material_request_list_id' => $prime_material_request_list_id,
					  'prime_material_request_id'      => $prime_material_request_id,
					  'material_id'                    => $material_id,
					  'rec_quantity'                   => $rec_quantity
					  );
			$this->session->set_userdata('quantity_info',$quantity_info);
			echo json_encode(array('success' => true,'message' => "Updated Successfully",'rec_quantity' => $rec_quantity));
		}else
		if((int)$total_quantity === 0){
			unset($quantity_info['quantity_info'][$material_id]);
			$this->session->set_userdata('quantity_info',$quantity_info);
			echo json_encode(array('success' => false,'message' => "Available quantity is empty, Kindly rise the PO request",'total_quantity' => $total_quantity));
		}else{
			$quantity_info['quantity_info'][$material_id] = 
				array('prime_material_request_list_id' => $prime_material_request_list_id,
					  'prime_material_request_id'      => $prime_material_request_id,
					  'material_id'                    => $material_id,
					  'rec_quantity'                   => $total_quantity
					  );
			$this->session->set_userdata('quantity_info',$quantity_info);
			echo json_encode(array('success' => false,'message' => "Cannot Send More than available Quantity",'total_quantity' => $total_quantity));
		}			
	}
	
	//SAVE TO MATERIAL REQUEST LIST	
	public function update_rec_qty(){
		$cart_view                      = $this->session->userdata('quantity_info');
		$quantity_info                  = $cart_view['quantity_info'];
		$prime_material_request_list_id = $quantity_info['prime_info']['prime_material_request_list_id'];		
		$prime_material_request_id      = $quantity_info['prime_info']['prime_material_request_id'];		
		$material_id                    = $quantity_info['prime_info']['material_id'];		
		$rec_quantity                   = $quantity_info['prime_info']['rec_quantity'];
		$cart_view                      = array();
		$table_content                  = $this->get_cart_view();
		$this->session->set_userdata('quantity_info',$cart_view);
		if($this->request_exists($prime_material_request_id)){
			foreach ($quantity_info as $value){
				$this->db->select('received_quantity');
				$this->db->from('material_request_list');
				$this->db->where('trans_status',1);
				$this->db->where('prime_material_request_list_id',(int)$value['prime_material_request_list_id']);
				$this->db->where('product_name',(int)$value['material_id']);
				$received_quantity = $this->db->get()->row();
				$received_quantity = $received_quantity->received_quantity;
				$update_rec_info['received_quantity']  = (int)$received_quantity + (int)$value['rec_quantity'];
				$update_rec_info['trans_updated_by']   = $this->session->userdata('logged_id');
				$update_rec_info['trans_updated_date'] = date("Y-m-d H:i:s");
				$this->db->where('prime_material_request_list_id',(int)$value['prime_material_request_list_id']);
				$this->db->where('product_name',(int)$value['material_id']);
				$this->db->update('cw_material_request_list',$update_rec_info);
				$this->update_available_quantity((int)$value['material_id'],(int)$value['rec_quantity']);
			}
			$this->update_quantity_info($prime_material_request_id);
			echo json_encode(array('success'=>true,'message'=>'Purchase Recevied Successfully','table_content'=>$table_content));
		}else{
			echo json_encode(array('success'=>false,'message'=>'Please Contact Admin','table_content'=>$table_content));
		}
	}
	
	//CHECK PURCHASE ORDER EXISTS
	public function request_exists($prime_material_request_id){
		$this->db->from('cw_material_request');
		$this->db->where('trans_status',1);
		$this->db->where('status','on process');
		$this->db->where('prime_material_request_id',(int)$prime_material_request_id);
		$count = $this->db->get()->num_rows();
		if((int)$count === 1){
			return TRUE;
		}else{
			return FALSE;
		}
	}
	
	//UPDATE QUANTITY LINE
	public function update_quantity_info($prime_material_request_id){
		$this->db->select('prime_material_request_list_id,quantity,received_quantity');
		$this->db->from('material_request_list');
		$this->db->where('trans_status',1);
		$this->db->where('prime_material_request_id',(int)$prime_material_request_id);
		$rlst_info = $this->db->get();
		$update_data   = array();
		if((int)($rlst_info->num_rows()) > 0){
			$quantity_info = $rlst_info->result(); 
			$count         = 0;
			foreach($quantity_info as $rlst){
					$prime_material_request_list_id = (int)$rlst->prime_material_request_list_id;
					$quantity                       = (int)$rlst->quantity;
					$received_quantity              = (int)$rlst->received_quantity;
					if(!($quantity == $received_quantity)){ 
						$update_data   = array();
						$count++;
						$update_data['pending_quantity'] = (int)$quantity - (int)$received_quantity;
						$update_data['status']           = "Pending";
						$this->db->where('prime_material_request_list_id',(int)$prime_material_request_list_id);
						$this->db->update('material_request_list',$update_data);
					}else{
						$update_data   = array();
						$update_data['pending_quantity'] = 0;
						$update_data['status']           = "Received";
						$this->db->where('prime_material_request_list_id',(int)$prime_material_request_list_id);
						$this->db->update('material_request_list',$update_data);
					}
			}
			$update_data   = array();
			if((int)$count === 0){
				$update_data['status'] = "completed";
				$this->db->where('prime_material_request_id',(int)$prime_material_request_id);
				$this->db->update('material_request',$update_data);
			}else{
				$update_data['status'] = "on process";
				$this->db->where('prime_material_request_id',(int)$prime_material_request_id);
				$this->db->update('material_request',$update_data);
			}
		}else{
			$update_data['status'] = "on process";
			$this->db->where('prime_material_request_id',(int)$prime_material_request_id);
			$this->db->update('material_request',$update_data);
		}
	}

		
    //CANCEL REQUEST FROM CART
	public function cancel_req(){
		$cart_view = array();
		$this->session->set_userdata('quantity_info',$quantity_info);
		echo json_encode(array('sts'=>true,'message'=>"Removed successfully"));
	}
	
	//SET PURCHASE ORDER
	public function set_purchase_order(){
		$prime_inventory_product_id    = $this->input->post('prime_inventory_product_id');
		$pending_quantity              = $this->input->post('pending_quantity');
		$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_inventory_product_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;
		$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'                     => $pending_quantity,
						  'price'                        => $price
					);
		$this->session->set_userdata('cart_view', $cart_view);
		$cart_view_infomation   = $this->get_cart_view();
		$cart_view              = $this->session->userdata('cart_view');
		return true;
	}
	
	//UPDATE AVAILABLE QUANTITY
	public function update_available_quantity($material_id,$received_quantity){
		$this->db->select('prime_inventory_product_id,total_quantity');
		$this->db->from('inventory_product');
		$this->db->where('trans_status',1);
		$this->db->where('prime_inventory_product_id',(int)$material_id);
		$rlst_info      = $this->db->get()->row();
		$total_quantity = $rlst_info->total_quantity;
		$update_data['total_quantity'] = (int)$total_quantity - (int)$received_quantity;
		$this->db->where('prime_inventory_product_id',(int)$material_id);
		$this->db->update('inventory_product',$update_data);
	}
	
	//GET MATERIAL LIST
	public function view_items(){
		$prime_material_request_id = (int)$this->input->post('prime_material_request_id');
		$tble_line = '';
		if($this->material_request_exists((int)$prime_material_request_id,TRUE)){
			$this->db->select('cw_material_request.job_card_number,cw_material_request.request_no,cw_material_request.request_date,cw_material_request_list.prime_material_request_list_id,cw_material_request_list.prime_material_request_id,cw_material_request_list.quantity,cw_inventory_product.product_name as product_name,cw_material_request_list.received_quantity,cw_material_request_list.status,cw_material_request_list.pending_quantity');
			$this->db->from('cw_material_request');
			$this->db->join('material_request_list', 'material_request_list.prime_material_request_id = cw_material_request.prime_material_request_id','inner');	
			$this->db->join('inventory_product', 'material_request_list.product_name = inventory_product.prime_inventory_product_id','inner');	
			$this->db->where('cw_material_request.prime_material_request_id', (int)$prime_material_request_id);
			$this->db->where('material_request_list.trans_status', 1);
			$send_request_info = $this->db->get()->result();
			$received_quantity = 0;
			foreach($send_request_info as $send_rlst){
				$prime_material_request_list_id = $send_rlst->prime_material_request_list_id;
				$prime_material_request_id      = $send_rlst->prime_material_request_id;
				$job_card_number                = $send_rlst->job_card_number;
				$request_no                     = $send_rlst->request_no;
				$request_date                   = date('d-m-Y',strtotime($send_rlst->request_date));
				$quantity                       = $send_rlst->quantity;
				$product_name                  = $send_rlst->product_name;
				$received_quantity              = $send_rlst->received_quantity;
				$pending_quantity               = $send_rlst->pending_quantity;
				$status                         = $send_rlst->status;
				$tble_line .= "	<tr>
								<td>$request_no</td>
								<td>$request_date</td>
								<td>$product_name</td>
								<td>$quantity</td>
								<td>$received_quantity</td>
								<td>$pending_quantity</td>
								<td>$status</td>
							</tr>";
			}
		}
		$table_data = "	<table class='table table-striped table-bordered' id='material_request_info_table'>
						 <thead>
							<tr>
							   <th>Request Number</th>
							   <th>Date</th>
							   <th>Material Name</th>
							   <th>Quantities</th>
							   <th>Received Quantity</th>
							   <th>Pending Quantity</th>
							   <th>Status</th>
							</tr>
						 </thead>
						 <tbody>
							$tble_line
						</tbody>
					</table>";
				
		echo json_encode(array("success" => TRUE,'request_table' => $table_data));
	}
	
	//MATERAL REQUEST EXIST
	public function material_request_exists($prime_material_request_id){
		$this->db->from('material_request');
		$this->db->where('prime_material_request_id', $prime_material_request_id);
		$this->db->where('trans_status', 1);
		return ($this->db->get()->num_rows() == 1);
	}
	
}
?>