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/Maintenance_job_schedule.php
<?php
if ( ! defined('BASEPATH')) exit('No direct script is allowed');
require_once("Base_controller.php");
class Maintenance_job_schedule  extends Base_controller{
	
	public function __construct(){
		parent::__construct('maintenance_job_schedule');
		if(!$this->Appconfig->isAppvalid()){
			redirect('config');
		}
		$this->collect_base_info();
	}
	
	// LOAD PAGE WITH TABLE DATA
	public function index(){
		$this->db->select('prime_service_type_id,service_type');
		$this->db->from('service_type');
		$this->db->where('cw_service_type.trans_status', 1);
		$service_type_rslt     = $this->db->get()->result();
		foreach($service_type_rslt as $rlst){
			$prime_service_type_id                     = $rlst->prime_service_type_id;
			$service_type                              = $rlst->service_type;
			$service_type_list[$prime_service_type_id] = $service_type;
		}
		$data['service_type_list'] = $service_type_list;
		
		$data['table_headers']= $this->xss_clean(get_Job_schedule_headers());
		$this->load->view("$this->control_name/manage",$data);
	}
	
	//LOAD MODEL PAGE VIEW WITH DATA
	public function view($prime_maintenance_job_schedule_id = -1){
		$this->db->from('maintenance_job_schedule');
		$this->db->join('vehicle_master', 'vehicle_master.prime_vehicle_master_id = maintenance_job_schedule.vehicle_no','LEFT');
		$this->db->where('maintenance_job_schedule.prime_maintenance_job_schedule_id', $prime_maintenance_job_schedule_id);
		$data['job_schedule']        = $this->db->get()->result();
		$fault_info                  = json_decode($this->get_labour_info($prime_maintenance_job_schedule_id));
		$data['labour_details_list'] = $fault_info->fault_table;
		$this->db->select('prime_service_type_id,service_type');
		$this->db->from('service_type');
		$this->db->where('cw_service_type.trans_status', 1);
		$service_type_rslt     = $this->db->get()->result();
		$service_type_list[""] = "--- Select ---";
		foreach($service_type_rslt as $rlst){
			$prime_service_type_id                     = $rlst->prime_service_type_id;
			$service_type                              = $rlst->service_type;
			$service_type_list[$prime_service_type_id] = $service_type;
		}
		$data['service_type_list'] = $service_type_list;
		
		$this->db->select('prime_employees_id,employee_name,technician_skills.skill_name');
		$this->db->from('employees');
		$this->db->join('technician_skills', 'technician_skills.prime_technician_skills_id = employees.technician_skills','inner');
		$this->db->where('cw_employees.role', 3);
		$this->db->where('cw_employees.trans_status', 1);
		$labour_rslt     = $this->db->get()->result();
		$labour_list[""]     = "--Select--";
		foreach($labour_rslt as $rlst){
			$prime_employees_id               = $rlst->prime_employees_id;
			$employee_name                    = $rlst->employee_name;
			$skill_name                       = $rlst->skill_name;
			$labour_list[$prime_employees_id] = $employee_name."-".$skill_name;
		}
		$data['labour_list'] = $labour_list;
		
		$this->load->view("$this->control_name/form",$data);
	}
	
	//SEARCH FAULTS LIST
	public function search_faults(){
		$search_fault_name    = $this->input->post_get('search_fault_name');
		$search_service_type  = $this->input->post_get('search_service_type');
		$suggestions = array();
		if($search_fault_name && $search_service_type){
			$this->db->select('cw_service_category.service_category,cw_maintenance_faults.fault_name,cw_maintenance_faults.prime_maintenance_faults_id as fault_id');
			$this->db->from('cw_service_checklist');
			$this->db->join('cw_service_category', 'cw_service_category.prime_service_category_id = cw_service_checklist.service_category','inner');
			$this->db->join('cw_maintenance_faults', 'cw_maintenance_faults.prime_maintenance_faults_id = cw_service_checklist.service_name','inner');
			$this->db->where('cw_service_checklist.service_type', $search_service_type);
			$this->db->where('cw_service_checklist.status', 1);
			$this->db->where('cw_service_checklist.trans_status', 1);
			$this->db->group_start();
				$this->db->like('cw_service_category.service_category',$search_fault_name);
				$this->db->or_like('cw_maintenance_faults.fault_name',$search_fault_name);
			$this->db->group_end();	
			$search_fault_info = $this->db->get()->result();
			foreach($search_fault_info as $search_rlst){
				$prime_maintenance_faults_id    = $search_rlst->fault_id;
				$fault_name                     = $search_rlst->fault_name;
				$service_category               = $search_rlst->service_category;
				$label                          = "$fault_name-$service_category";
				$suggestions[] = array('value'=>$fault_name,'label'=>$label,'prime_maintenance_faults_id'=>$prime_maintenance_faults_id);
			}
		}
		if(empty($suggestions)){
			$suggestions[] = array('value' => "0", 'label' => "No data found for this search");
		}
		echo json_encode($suggestions);
	}
	
	//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('prime_maintenance_job_schedule_id,prime_fault_id,job_card_number,cw_service_type.service_type,vehicle_master.register_no,vehicle_no,date,driver,km,company,job_status');
		$this->db->from('maintenance_job_schedule');
		$this->db->join('vehicle_master', 'vehicle_master.prime_vehicle_master_id = maintenance_job_schedule.vehicle_no','LEFT');
		$this->db->join('service_type', 'service_type.prime_service_type_id = maintenance_job_schedule.service_type','inner');	
		if($search){
			$this->db->group_start();
				$this->db->or_like('cw_service_type.service_type',$search);						
				$this->db->or_like('driver',$search);				
				$this->db->or_like('km',$search);				
				$this->db->or_like('vehicle_no',$search);			
				if(strpos($search, '-') !== false){
				  $this->db->or_like('date', date('Y-m-d',strtotime($search))); 
				}
			$this->db->group_end();	
		}
		$this->db->group_start();
		if($filters[0] > 0){
			$this->db->where_in('maintenance_job_schedule.service_type', $filters);
		}
		$this->db->where('DATE_FORMAT(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_Job_schedule_datarows($receiving,$this);
		}
		echo json_encode(array('total'=>$num_rows,'rows'=>$datarows));
	}
	
	//SAVE MODEL DATA TO DATA BASE
	public function save(){
		$prime_maintenance_job_schedule_id = (int)$this->input->post('prime_maintenance_job_schedule_id');
		if((int)$this->input->post('vehicle_id')){
			$vehicle_no = $this->input->post('vehicle_id');
		}else{
			$vehicle_no = $this->input->post('vehicle_no');
		}
		$prime_fault_id = $this->check_fault($vehicle_no);
		$job_schedule_data = array(
			'service_type'       => $this->input->post('service_type'),
			'date'               => date('Y-m-d H:i:s',strtotime($this->input->post('date'))),			
			'company'            => $this->input->post('company'),
			'driver'             => $this->input->post('driver'),
			'vehicle_no'         => $vehicle_no,
			'km'                 => $this->input->post('km'),
			'job_status'         => $this->input->post('job_status')
		);
		if((int)$prime_maintenance_job_schedule_id === 0){
			if($this->check_previous_faults_info($prime_fault_id,$vehicle_no)){
				$job_card_number                         = $this->generate_code("JOB",$vehicle_no);
				$job_schedule_data['job_card_number']    = $job_card_number;
				$job_schedule_data['prime_fault_id']     = $prime_fault_id;
				$job_schedule_data['trans_created_by']   = $this->session->userdata('logged_id');
				$job_schedule_data['trans_created_date'] = date("Y-m-d H:i:s");
				if($this->db->insert('cw_maintenance_job_schedule',$job_schedule_data)){
					$prime_maintenance_job_schedule_id = $this->db->insert_id();
					if((int)$prime_fault_id > 0){
						$this->update_labour_details($prime_maintenance_job_schedule_id,$prime_fault_id);
					}
					echo json_encode(array('success' => TRUE, 'message' => "Successfully Inserted",'prime_maintenance_job_schedule_id' => $prime_maintenance_job_schedule_id));
				}else{
					echo json_encode(array('success' => false, 'message' => "Insertion failed, Please Try Again"));
				}
			}else{
				echo json_encode(array('success' => false, 'message' => "Job is already exists for this vehicle"));
			}
		}else
		if((int)$prime_maintenance_job_schedule_id > 0){
				$job_schedule_data['trans_updated_by']   = $this->session->userdata('logged_id');
				$job_schedule_data['trans_updated_date'] = date("Y-m-d H:i:s");
				$this->db->where('prime_maintenance_job_schedule_id',$prime_maintenance_job_schedule_id);
				if($this->db->update('cw_maintenance_job_schedule',$job_schedule_data)){
					if($prime_fault_id){
						$this->update_labour_details($prime_maintenance_job_schedule_id,$prime_fault_id);
					}
					echo json_encode(array('success' => TRUE, 'message' => "Successfully Updated",'prime_maintenance_job_schedule_id'=> $prime_maintenance_job_schedule_id));
				}else{
					echo json_encode(array('success' => false, 'message' => "Update failed, Please Try Again",'prime_maintenance_job_schedule_id'=> $prime_maintenance_job_schedule_id));
				}
		}
	}
	
	// SEARCH BY VEHICLE AUTO COMPLETE
	public function search_vehicle(){
		$search_vehicle_name  = $this->input->post_get('search_vehicle_name');
		$company              = (int)$this->input->post_get('company');
		$suggestions = array();
		if($search_vehicle_name && $company == '1'){
			$this->db->select('prime_vehicle_master_id,register_no');
			$this->db->from('cw_vehicle_master');
			$this->db->where('cw_vehicle_master.trans_status', 1);
			$search_vehicle_info = $this->db->get()->result();
			foreach($search_vehicle_info as $search_rlst){
				$prime_vehicle_master_id   = $search_rlst->prime_vehicle_master_id;
				$vehicle_no                = $search_rlst->register_no;
				$label                     = "$vehicle_no";
				$suggestions[] = array('value'=>$vehicle_no,'label'=>$label,'prime_vehicle_master_id' => $prime_vehicle_master_id);
				}
		}
		if(empty($suggestions)){
			$suggestions[] = array('value' => "0", 'label' => "No data found for this search");
		}
		echo json_encode($suggestions);
	}
		
	// SEARCH BY VEHICLE AUTO COMPLETE
	public function search_driver(){
		$search_driver_name  = $this->input->post_get('search_driver_name');
		$company              = (int)$this->input->post_get('company');
		$suggestions = array();
		if($search_driver_name && $company == '1'){
		$this->db->select('prime_employees_id,employee_name');
		$this->db->from('cw_employees');
		$this->db->where('cw_employees.role', 4);
		$this->db->where('cw_employees.trans_status', 1);
		$driver_rslt = $this->db->get()->result();
			foreach($driver_rslt as $rlst){
				$prime_employees_id  = $rlst->prime_employees_id;
				$driver_name         = $rlst->employee_name;
				$label               = "$driver_name";
				$suggestions[] = array('value'=>$driver_name,'label'=>$label,'prime_employees_id' => $prime_employees_id);
			}
		}
		if(empty($suggestions)){
			$suggestions[] = array('value' => "0", 'label' => "No data found for this search");
		}
		echo json_encode($suggestions);
	}
	
	//SAVE LABOUR DETAILS
	public function labour_details_save(){
		$prime_maintenance_job_schedule_id       = (int)$this->input->post('job_schedule_id');
		$fault_name                              = (int)$this->input->post('prime_fault_id');
		$labour_info_data = array(
			'assign_labour'                      => (int)$this->input->post('assign_labour'),
			'fault_name'                         => $fault_name,
			'schedule_delivery_date'             => date('Y-m-d'),
			'remarks'                            => $this->input->post('remarks'),
			'prime_maintenance_job_schedule_id'  => $prime_maintenance_job_schedule_id,
			'status'                             => 0,
			'service_status'                     => 2
		);
		if($this->job_schedule_exists($prime_maintenance_job_schedule_id,TRUE)){
			if(!($this->check_labour_already_exists($fault_name,$prime_maintenance_job_schedule_id))){
				$labour_info_data['trans_created_by']   = $this->session->userdata('logged_id');
				$labour_info_data['trans_created_date'] = date("Y-m-d H:i:s");
				if($this->db->insert('labour_details',$labour_info_data)){
					echo json_encode(array('success' => TRUE, 'message' => "Successfully Inserted",'prime_maintenance_job_schedule_id' => $prime_maintenance_job_schedule_id));
				}else{
					echo json_encode(array('success' => FALSe, 'message' => "Insertion failed, Please Try Again"));
				}
			}else{
				echo json_encode(array('success' => False, 'message' => "Fault Already exists.!"));
			}
		}else
		{
			echo json_encode(array('success' => False, 'message' => "Please Fill Previous Tab Info.!"));
		}
	}
	
	//GET LABOUR DETAILS
	public function get_labour_info($prime_maintenance_job_schedule_id  = -1){
		if((int)$this->input->post('prime_maintenance_job_schedule_id') > 0){
			$prime_maintenance_job_schedule_id  = (int)$this->input->post('prime_maintenance_job_schedule_id');
		}
		$tble_line = "";
		if($this->job_schedule_exists($prime_maintenance_job_schedule_id,TRUE)){
			$this->db->select('prime_labour_details_id,hours,completed_delivery_date,maintenance_faults.fault_name ,cw_labour_details.fault_name as fault_id,cw_labour_details.remarks,assign_labour,schedule_delivery_date,cw_labour_details.status');
			$this->db->from('labour_details');
			$this->db->join('maintenance_faults', 'maintenance_faults.prime_maintenance_faults_id = cw_labour_details.fault_name','inner');
			$this->db->where('cw_labour_details.prime_maintenance_job_schedule_id', $prime_maintenance_job_schedule_id);
			$this->db->where('cw_labour_details.trans_status', 1);
			$this->db->where('cw_labour_details.service_status', 2);
			$labour_info      = $this->db->get()->result();
			$this->db->select('prime_employees_id,employee_name,technician_skills.skill_name');
			$this->db->from('employees');
			$this->db->join('technician_skills', 'technician_skills.prime_technician_skills_id = employees.technician_skills','inner');
			$this->db->where('cw_employees.role', 3);
			$this->db->where('cw_employees.trans_status', 1);
			$labour_rslt     = $this->db->get()->result();
			$labour_list[""]     = "--Select--";
			foreach($labour_rslt as $rlst){
				$prime_employees_id               = $rlst->prime_employees_id;
				$employee_name                    = $rlst->employee_name;
				$skill_name                       = $rlst->skill_name;
				$labour_list[$prime_employees_id] = $employee_name."-".$skill_name;
			}
			foreach($labour_info as $fault_rlst){
				$prime_labour_details_id      = $fault_rlst->prime_labour_details_id;
				$fault_name                   = $fault_rlst->fault_name;
				$fault_id                     = $fault_rlst->fault_id;
				$labour_checklist             = $fault_rlst->assign_labour;
				$remarks                      = $fault_rlst->remarks;
				$status                       = $fault_rlst->status;
				$schedule_delivery_date       = date('d-m-Y',strtotime($fault_rlst->schedule_delivery_date));
				$completed_delivery_date      = $fault_rlst->completed_delivery_date;
				$hours                        = $fault_rlst->hours;
				$status_list                  = array(0 => "Pending",1 => "on process",2 => "completed",3 => "incomplted");
				$completed_delivery_date = "-";
				$hours = "-";
				if((int)$status != 0){
					$completed_delivery_date = date('d-m-Y',strtotime($fault_rlst->completed_delivery_date));
					$hours = $fault_rlst->hours;
					$remarks                      = $remarks;
					$labour_checklist             = $labour_list[$labour_checklist];
					if($schedule_delivery_date){
						$date = date('d-m-Y',strtotime($schedule_delivery_date));
						if($date === "01-01-1970"){ $date = date("d-m-Y"); }
					}
					$schedule_delivery_date       = $date;
					$status                       = $status_list[$status];
				}else
				if((int)$status === 0){
					$remarks                      = form_input(array('name' => "remarks_$prime_labour_details_id",'id' => "remarks_$prime_labour_details_id",'class' => 'form-control input-sm alpha valid','placeholder'=>'Remarks','onchange' => "update_info($prime_labour_details_id)",'value'=>$remarks));
					$labour_checklist             = form_dropdown(array('name' => "assign_labour_$prime_labour_details_id",'id' => "assign_labour_$prime_labour_details_id",'class' => 'form-control input-sm select2','onchange' => "update_info($prime_labour_details_id)"), $labour_list,$labour_checklist);
					if($schedule_delivery_date){
						$date = date('d-m-Y',strtotime($schedule_delivery_date));
						if($date === "01-01-1970"){ $date = ''; }
					}
					$schedule_delivery_date       = form_input(array( 'name' => "schedule_delivery_date_$prime_labour_details_id", 'id' => "schedule_delivery_date_$prime_labour_details_id", 'class' => 'form-control input-sm datepicker' ,'value' => $date));
					$status                       = $status_list[$status];
				}
				$tble_line .= "	<tr>
									<td style='width:15%'>$fault_name</td>
									<td style='width:15%'>$labour_checklist</td>
									<td style='width:15%'>$remarks</td>
									<td style='width:15%'>$schedule_delivery_date</td>
									<td style='width:15%'>$status</td>
									<td style='width:15%'>$hours</td>
									<td style='width:10%'>$completed_delivery_date</td>
								</tr>";
			}
		}
		if($tble_line === ""){
			$tble_line = "<tr align='center'><td style='width:100%' colspan='7'>No Data Found</td></tr>";
		}
		$table_data = "	<h4 class='m-t-0 header-title'><b>Labours Information List</b></h4>
					<table class='table table-striped table-bordered' id='labours_info_table'>
					 <thead>
						<tr>
						   <th style='width:15%'>Fault Name</th>
						   <th style='width:15%'>Assign Labour</th>
						   <th style='width:15%'>Remarks</th>
						   <th style='width:15%'>Assign Date</th>
						   <th style='width:15%'>Status</th>
						   <th style='width:15%'>Hours Taken</th>
						   <th style='width:10%'>Completed Date</th>
						</tr>
					 </thead>
					 <tbody>
						$tble_line
					</tbody>
				</table>";
				
		return json_encode(array("success" => TRUE,'fault_table' => $table_data));
	}
	
	//GATE PASS INFO EXIST
	public function job_schedule_exists($prime_maintenance_job_schedule_id){
		$this->db->from('maintenance_job_schedule');
		$this->db->where('prime_maintenance_job_schedule_id', $prime_maintenance_job_schedule_id);
		$this->db->where('trans_status', 1);
		return ($this->db->get()->num_rows() == 1);
	}
	
	/* //CHECKING FAULT ALREADY EXIST
	public function fault_exists($prime_fault_id){
		$this->db->from('maintenance_fault_report');
		$this->db->where('prime_maintenance_fault_report_id', $prime_fault_id);
		$this->db->where('trans_status', 1);
		return ($this->db->get()->num_rows() == 1);
	}  */ 
	
	
	//CHECKING FAULT ALREADY EXIST ARE COMPLETED
	public function check_previous_faults_info($prime_fault_id,$vehicle_no){
		$this->db->from('maintenance_job_schedule');
		$this->db->join('maintenance_fault_report', 'maintenance_fault_report.prime_maintenance_fault_report_id = maintenance_job_schedule.prime_fault_id','inner');
		$this->db->where('maintenance_job_schedule.prime_fault_id', (int)$prime_fault_id);
		$this->db->where('maintenance_job_schedule.vehicle_no', $vehicle_no);
		$status = array(1,2);
		$this->db->where_in('maintenance_fault_report.fault_status',$status);
		$this->db->where('maintenance_fault_report.trans_status', 1);
		$this->db->where('maintenance_job_schedule.trans_status', 1);
		if((int)$this->db->get()->num_rows() === 1){
			return false;
		}else{
			return TRUE;
		}
	}
	
	//CHECK LABOUR IS ALREADY EXIST
	public function check_labour_already_exists($fault_name,$prime_maintenance_job_schedule_id){
		$this->db->from('labour_details');
		$this->db->where('fault_name', (int)$fault_name);
		$this->db->where('prime_maintenance_job_schedule_id', (int)$prime_maintenance_job_schedule_id);
		$this->db->where('trans_status', 1);
		if((int)($this->db->get()->num_rows()) === 1 ){
			return true;
		}else{
			return false;
		}
	}
	
	//GET TABLE VIEW FOR LABOUR INFORMATION TABLE
	public function get_labour_info_list_table(){
		$prime_maintenance_job_schedule_id = '';
		if((int)$this->input->post('prime_maintenance_job_schedule_id') > 0){
			$prime_maintenance_job_schedule_id  = $this->input->post('prime_maintenance_job_schedule_id');
		}
		$fault_info   = json_decode($this->get_labour_info($prime_maintenance_job_schedule_id));
		echo json_encode(array("success" => TRUE,'fault_info' => $fault_info->fault_table));
	}
	
	//UPDATE LABOURS ONCE
	public function update_labour_details($prime_maintenance_job_schedule_id,$fault_report_id){
		if($this->job_schedule_exists($prime_maintenance_job_schedule_id,TRUE)){
			if($prime_maintenance_job_schedule_id > 0){
				$update_data                                      = array();
				$update_data['prime_maintenance_job_schedule_id'] = $prime_maintenance_job_schedule_id;
				$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_maintenance_fault_report_id',(int)$fault_report_id);
				$this->db->update('labour_details',$update_data);
				$update_fault_status['fault_status'] = 2;
				$this->db->where('prime_maintenance_fault_report_id',(int)$fault_report_id);
				$this->db->update('maintenance_fault_report',$update_fault_status);
				
			}
		}
	}
	
	//UPDATE LABOUR INFO
	public function update_info(){
		$prime_labour_details_id                 = $this->input->post('prime_labour_details_id');
		$update_data['schedule_delivery_date']   = date('Y-m-d',strtotime($this->input->post('schedule_delivery_date')));
		$update_data['assign_labour']            = $this->input->post('assign_labour');
		$update_data['remarks']                  = $this->input->post('remarks');
		$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_labour_details_id',$prime_labour_details_id);
		if($this->db->update('cw_labour_details',$update_data)){
			echo json_encode(array("success" => TRUE,'message' => 'Updated successfully'));
		}else{
			echo json_encode(array("success" => False,'message' => "Please Try Again"));
		}
	}
	
	//PRINT JOB CARD  
	public function view_print($prime_maintenance_job_schedule_id = -1){
		if((int)$prime_maintenance_job_schedule_id > 0){
			$this->db->select('job_card_number,maintenance_job_schedule.company,vehicle_master.register_no, vehicle_no,maintenance_job_schedule.date,maintenance_job_schedule.driver,maintenance_job_schedule.km,IFNULL(GROUP_CONCAT(cw_maintenance_faults.fault_name),0) as fault_name,IFNULL(GROUP_CONCAT(cw_labour_details.remarks),0) as remarks,IFNULL(GROUP_CONCAT(cw_employees.employee_name),0) as employee_name,IFNULL(GROUP_CONCAT(cw_labour_details.schedule_delivery_date),0) as schedule_delivery_date,IFNULL(GROUP_CONCAT(cw_labour_details.hours),0) as hours,IFNULL(GROUP_CONCAT(cw_labour_details.status),0) as status');
			$this->db->from('cw_labour_details');
			$this->db->join('cw_maintenance_job_schedule','cw_maintenance_job_schedule.prime_maintenance_job_schedule_id = cw_labour_details.prime_maintenance_job_schedule_id','inner');
			$this->db->join('vehicle_master', 'vehicle_master.prime_vehicle_master_id = cw_maintenance_job_schedule.vehicle_no','LEFT');
			$this->db->join('cw_maintenance_faults','cw_maintenance_faults.prime_maintenance_faults_id = cw_labour_details.fault_name','inner');
			$this->db->join('cw_employees','cw_employees.prime_employees_id = cw_labour_details.assign_labour','inner');
			$this->db->where('cw_labour_details.prime_maintenance_job_schedule_id',(int)$prime_maintenance_job_schedule_id);
			$this->db->where('cw_labour_details.trans_status', 1);
			$this->db->where('cw_maintenance_faults.trans_status', 1);
			$this->db->where('cw_employees.trans_status', 1);
			$job_card_info = $this->db->get();
			$num_rows       = $job_card_info->num_rows();
			if((int)$num_rows > 0){
				$data['job_card'] = $job_card_info->result();
				$this->load->view("$this->control_name/view_print",$data);
			}
		}
	}
	
	//GENERATE JOB UNIQUE CODE
	public function generate_code($code="UN",$vehicle_no){
		$this->db->select('cw_vehicle_category.vehicle_category');
		$this->db->from('cw_vehicle_master');
		$this->db->join('cw_vehicle_category', 'cw_vehicle_category.prime_vehicle_category_id = cw_vehicle_master.vehicle_category','inner');
		$this->db->where('cw_vehicle_master.register_no',$vehicle_no);
		$result = $this->db->get()->row();
		$vehicle_category = substr("$result->vehicle_category",0,1);
		if($vehicle_category == ''){
			$vehicle_category = 'O';
		}
		$this->db->from('cw_maintenance_job_schedule');
		$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 . $vehicle_category . $date . $count;
		return strtoupper($uniqueCode);
	}
	
	//CHECK VEHICLE HAVE FAULT REPORT
	public function check_fault($vehicle_no){
		$this->db->from('maintenance_fault_report');
		$this->db->where('ntc_vehicle', $vehicle_no);
		$this->db->where('trans_status', 1);
		$this->db->where('fault_status', 1);
		$fault_info = $this->db->get();
		$count      = $fault_info->num_rows();
		if((int)$count > 0){
			$rlst = $fault_info->result();	
			return $rlst[0]->prime_maintenance_fault_report_id;
		}else{
			return 0;
		}
	}
	
	//GET CHECKLIST
	public function get_checklist(){
		$job_id          = (int)$this->input->post('job_schedule_id');
		$service_type    = (int)$this->input->post('service_type');
		$this->db->select('cw_service_type.prime_service_type_id,cw_service_type.process_by,cw_service_category.service_category,GROUP_CONCAT(cw_maintenance_faults.fault_name) as service_name,GROUP_CONCAT(cw_maintenance_faults.prime_maintenance_faults_id) as fault_id');
		$this->db->from('cw_service_checklist');
		$this->db->join('cw_service_type', 'cw_service_type.prime_service_type_id = cw_service_checklist.service_type','inner');
		$this->db->join('cw_service_category', 'cw_service_category.prime_service_category_id = cw_service_checklist.service_category','inner');
		$this->db->join('cw_maintenance_faults', 'cw_maintenance_faults.prime_maintenance_faults_id = cw_service_checklist.service_name','inner');
		$this->db->where('cw_service_checklist.service_type', $service_type);
		$this->db->where('cw_service_checklist.status', 1);
		$this->db->where('cw_service_checklist.trans_status', 1);
		$this->db->group_by('cw_service_checklist.service_category');
		$service_info = $this->db->get()->result();
		$process_by   = (int)$service_info[0]->process_by;
		$view_content = "";
		if($process_by === 2){
			$this->db->select('prime_maintenance_job_schedule_id,faults_list,status_list');
			$this->db->from('cw_maintenance_job_schedule');
			$this->db->where('cw_maintenance_job_schedule.prime_maintenance_job_schedule_id', $job_id);
			$faults_info = $this->db->get()->row();
			$faults_list = explode(',',$faults_info->faults_list);
			$status_list = explode(',',$faults_info->status_list);
			$rlst = array_combine($faults_list,$status_list);
			$li_line      = "";
			$status_info  = array(''=>'--select--','1'=>'satisfactory','2'=> 'Repair Needed','3' => 'Not Applicable');
			$i            = 1;
			foreach($service_info as $service_rlst){
				$prime_service_type_id       = $service_rlst->prime_service_type_id;
				$process_by                  = $service_rlst->process_by;
				$service_category            = $service_rlst->service_category;
				$service_name                = explode(',',$service_rlst->service_name);
				$fault_id                    = explode(',',$service_rlst->fault_id);
				$service_list_data = "";
				foreach($fault_id as $id => $value){
					$fault_id       = form_input(array('name' => 'hidden_fault_id[]','class' => 'form-control input-sm alpha valid','value'=>$value,'type'=>'hidden'));
					$status         = form_dropdown(array('name' =>'status[]','id'=>'status_'.$i,'class' => 'form-control input-sm select2 required status'), $status_info,$rlst[$value]);
					$service_list_data           .= "<tr style='width:20%;'><td style='width:59%;'><label for='status_$id' class='control-label $required'>$service_name[$id]</label> $fault_id</td><td style='width: 20%;'> $status</td></tr>";
					$i++;
				}
				$li_line .=  "<tr><td colspan='2'><h4 class='block_head' style='width:100%'>$service_category</h4></td></tr>
								<div class='form-inline'>
									$service_list_data
								</div>";	
			}
			//$form_open          = form_open('maintenance_job_schedule/save_checklist/',array('id'=>'save_checklist_form','class'=>'form-inline'));
			$job_schedule_id    = form_input(array('name' => 'prime_job_schedule_id','id'=>'prime_job_schedule_id','class' => 'form-control input-sm alpha valid','value'=>$job_id,'type'=>'hidden'));
			$btn         = "<div class='form-group' >
								<td colspan='2' style='text-align:right;'><button type='submit' class='btn btn-sm btn-primary' id='add_service_info_btn' > Add/Update </button>  <button type='button' class='btn btn-sm btn-danger' id='cancel_service_info_btn'>Cancel</button></td>
							</div>";
			//$form_close = form_close();
			$view_content .= "
					 <div class='content' style='padding: 8px;'>
						$job_schedule_id
						<table class='table table-hover' style='width: 84%;margin: auto;background-color:#ffffff;'>$li_line
						<tr>$btn</tr></table>
					 </div>";
		}
		echo json_encode(array('success'=>true,'service' =>true,'process_by' => $process_by,'view_content' => $view_content));
	}
	
	//SAVE CHECKLIST
	public function save_checklist(){
		$fault_id                 = $this->input->post('hidden_fault_id');
		$status                   = $this->input->post('status');
		$prime_job_schedule_id    = $this->input->post('prime_job_schedule_id');
		$array = array();
		foreach ($status as $key => $value) {
			if((int)$value === 0) {
				$array[$key] = 0;
			}else{
				$array[$key] = $value;
			}
		}
		$this->db->select('prime_maintenance_job_schedule_id,faults_list,status_list');
		$this->db->from('cw_maintenance_job_schedule');
		$this->db->where('cw_maintenance_job_schedule.prime_maintenance_job_schedule_id', $prime_job_schedule_id);
		$faults_info = $this->db->get()->row();
		$faults_list = explode(',',$faults_info->faults_list);
		$status_list = explode(',',$faults_info->status_list);
		$rlst = array_combine($fault_id,$array);
		$insert_count = 0;
		$update_count = 0;
		$i            = 0;
		foreach($rlst as $key => $value){
			if(!($this->check_labour_already_exists($key,$prime_job_schedule_id))){
				if((int)$value === 2){
					$labour_info_data = array(
						'fault_name'                         => $key,
						'schedule_delivery_date'             => date('Y-m-d'),
						'prime_maintenance_job_schedule_id'  => $prime_job_schedule_id,
						'service_status'                     => $value,
						'status'                             => 0,
						'trans_created_by'                   => $this->session->userdata('logged_id'),
						'trans_created_date'                 => date("Y-m-d H:i:s")
					);
					$this->db->insert('labour_details',$labour_info_data);
					$insert_count = (int)$insert_count + 1;
				}
			}else{
				if($this->check_labour_assign_to_fault($key,$prime_job_schedule_id)){
					$update_data['service_status']      = $value;
					$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('fault_name',$key);
					$this->db->where('prime_maintenance_job_schedule_id',$prime_job_schedule_id);
					$this->db->update('labour_details',$update_data);
					$update_count = (int)$update_count + 1;
				}else{
					$array[$i] = $status_list[$i];
				}
			}
			$i++;
		}
		$faults_list = implode(',',$fault_id);
		$status_list = implode(',',$array);
		$update_data = array();
		$update_data['faults_list']         = $faults_list;
		$update_data['status_list']         = $status_list;
		$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_maintenance_job_schedule_id',$prime_job_schedule_id);
		$this->db->update('cw_maintenance_job_schedule',$update_data);
		$update_status = false;
		if($insert_count === 0 && $update_count === 0){
			echo json_encode(array('success' => TRUE, 'message' => "No Service Added",'prime_maintenance_job_schedule_id' => $prime_job_schedule_id,'update_status'=>$update_status));
		}else{
			if($update_count === 0){
				$message       = "";
			}else{
				$update_status = true;
				$message       = "Successfully $update_count updated";
			}
			echo json_encode(array('success' => TRUE, 'message' => "Successfully $insert_count Service Added",'prime_maintenance_job_schedule_id' => $prime_job_schedule_id,'update_status' => $update_status,'update_message' => $message));
		}
	}
	
	//CHECK LABOUR FAULT ASSIGNED
	public function check_labour_assign_to_fault($fault_name,$prime_maintenance_job_schedule_id){
		$this->db->select('assign_labour');
		$this->db->from('labour_details');
		$this->db->where('fault_name', (int)$fault_name);
		$this->db->where('prime_maintenance_job_schedule_id', (int)$prime_maintenance_job_schedule_id);
		$this->db->where('trans_status', 1);
		$rlst          = $this->db->get()->result();
		$assign_labour = $rlst[0]->assign_labour;
		if((int)$assign_labour){
			return false;
		}else{
			return true;
		}
	}
}
?>