HEX
Server: Apache/2.4.41 (Amazon) OpenSSL/1.0.2k-fips PHP/5.6.40
System: Linux ip-172-31-40-18 4.14.146-93.123.amzn1.x86_64 #1 SMP Tue Sep 24 00:45:23 UTC 2019 x86_64
User: apache (48)
PHP: 5.6.40
Disabled: NONE
Upload Files
File: /var/www/html/pmw24/app/application/controllers/admin/Job.php
<?php
defined('BASEPATH') or exit('No direct script access allowed');

class Job extends MY_Controller
{
	public function __construct()
	{
		parent::__construct();
		$this->redirect_guest();
		//$this->load->model('mcommon');
		$this->admin = $this->session->userdata('admin');
		$this->load->model('admin/mjob');
		$this->load->model('admin/mservicehistory');
	}

	public function index()
	{
		// $condition['type']=1;
		// $udata['is_read']=1;
		// $this->mcommon->update('notification',$condition,$udata);	
		$this->_load_list_view();
	}

	private function _load_list_view()
	{
		$data['admin'] = $this->admin;
		$data['content'] = 'admin/job/list';
		$this->load->view('admin/layouts/index', $data);
	}

	public function requested_job()
	{
		// $condition['type']=1;
		// $udata['is_read']=1;
		// $this->mcommon->update('notification',$condition,$udata);	
		$this->_load_requested_job_list_view();
	}

	private function _load_requested_job_list_view()
	{
		$data['admin'] = $this->admin;
		$data['content'] = 'admin/job/booking_request_list';
		$this->load->view('admin/layouts/index', $data);
	}


	public function all_content_list()
	{
		// Set proper JSON header using CodeIgniter's output class
		$this->output->set_content_type('application/json');

		try {
			// Validate required POST parameters
			if (!isset($_POST['draw']) || !isset($_POST['start']) || !isset($_POST['length'])) {
				$output = array(
					"draw" => isset($_POST['draw']) ? intval($_POST['draw']) : 0,
					"recordsTotal" => 0,
					"recordsFiltered" => 0,
					"data" => array(),
					"error" => "Invalid request parameters"
				);
				$this->output->set_output(json_encode($output));
				return;
			}

			// Check if model is loaded
			if (!isset($this->mjob) || !method_exists($this->mjob, 'get_datatables')) {
				$output = array(
					"draw" => intval($_POST['draw']),
					"recordsTotal" => 0,
					"recordsFiltered" => 0,
					"data" => array(),
					"error" => "Model method not available"
				);
				$this->output->set_output(json_encode($output));
				return;
			}

			$list = $this->mjob->get_datatables();

			// Handle case where get_datatables might return false or null
			if ($list === false || $list === null) {
				$list = array();
			}
			$data = array();
			$no = intval($_POST['start']);
			$i = 1;

			// Early return if no data
			if (empty($list)) {
				$recordsTotal = 0;
				$recordsFiltered = 0;
				try {
					$recordsTotal = method_exists($this->mjob, 'count_all') ? $this->mjob->count_all() : 0;
					$recordsFiltered = method_exists($this->mjob, 'count_filtered') ? $this->mjob->count_filtered() : 0;
				} catch (Exception $e) {
					// Use defaults if count methods fail
				}
				$output = array(
					"draw" => intval($_POST['draw']),
					"recordsTotal" => $recordsTotal,
					"recordsFiltered" => $recordsFiltered,
					"data" => array(),
				);
				$this->output->set_output(json_encode($output));
				return;
			}

			// Extract all job IDs for batch loading
			$job_ids = array();
			foreach ($list as $person) {
				$job_ids[] = $person->job_id;
			}

			// Batch load all related data efficiently (only 4 queries total)
			$assign_jobs = $this->mjob->getBatchAssignJobs($job_ids);
			$job_service_dates = $this->mjob->getBatchJobServiceDates($job_ids);
			$all_services = $this->mjob->getBatchServices($job_ids);

			// Extract unique mechanic IDs for batch loading
			$mechanic_ids = array();
			foreach ($assign_jobs as $aj) {
				if (!empty($aj['mechanic_id'])) {
					$mechanic_ids[] = $aj['mechanic_id'];
				}
			}
			$mechanics = $this->mjob->getBatchMechanics(array_unique($mechanic_ids));

			// Load role menu once (outside loop)
			$admin = $this->admin;
			$CI = &get_instance();
			$CI->db->select('*');
			$CI->db->from('role_menu');
			$CI->db->join('menu', 'menu.menu_id = role_menu.menu_id', 'left');
			$CI->db->where('role_id', $admin['role_id']);
			$CI->db->where('parent_id', 36);
			$query = $CI->db->get();
			$menus = $query->result_array();

			$status_result = $this->searcharray('Status', 'menu_name', $menus);
			$edit_result = $this->searcharray('Edit', 'menu_name', $menus);

			// Pre-compute base_url to avoid repeated function calls
			$base_url_prefix = base_url();

			foreach ($list as $person) {
				$row = array();
				$row[] = $i;
				$row[] = $person->car_no;

				// Get assign_job from lookup array
				$assign_job = isset($assign_jobs[$person->job_id]) ? $assign_jobs[$person->job_id] : null;

				// Mechanic name from lookup
				if (!empty($assign_job) && !empty($assign_job['mechanic_id'])) {
					$mechanic = isset($mechanics[$assign_job['mechanic_id']]) ? $mechanics[$assign_job['mechanic_id']] : null;
					$row[] = !empty($mechanic) ? $mechanic['first_name'] . " " . $mechanic['last_name'] : 'N/A';
				} else {
					$row[] = 'N/A';
				}

				// Services from lookup array
				$service_names = isset($all_services[$person->job_id]) ? $all_services[$person->job_id] : array();
				$row[] = !empty($service_names) ? implode(',', $service_names) : '';

				// Service date from lookup array
				$job_service_date = isset($job_service_dates[$person->job_id]) ? $job_service_dates[$person->job_id] : array();
				if (!empty($job_service_date['service_date'])) {
					$row[] = date("d/m/Y", strtotime($job_service_date['service_date']));
				} else {
					$row[] = 'N/A';
				}

				$row[] = $person->km_reading;

				// Job status logic
				if ($person->job_status == 0) {
					$job_status = "Not Started";
				} else if ($person->job_status == 1) {
					$job_status = "In Progress";
				} else if ($person->job_status == 2) {
					$job_status = "Completed";
					if (!empty($job_service_date['service_end_date'])) {
						$job_status = $job_status . ' On <b>' . date("d/m/Y", strtotime($job_service_date['service_end_date'])) . '</b>';
					}
				}

				$row[] = $job_status;

				// Assign status from lookup (use same assign_job)
				if (!empty($assign_job) && isset($assign_job['assign_status']) && $assign_job['assign_status'] != "") {
					if ($assign_job['assign_status'] == 1) {
						$row[] = '<div class="dropdown">
									<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Accepted
								</div>';
					} else if ($assign_job['assign_status'] == 0) {
						$row[] = '<div class="dropdown">
								  <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Rejected
								  <span class="caret"></span></button>
								  <ul class="dropdown-menu">
									<li><a href="' . $base_url_prefix . 'admin/job/rejectlist/' . $person->job_id . '">RejectList</a></li>
									<li><a href="' . $base_url_prefix . 'admin/job/reassign/' . $person->job_id . '">Re Assign</a></li>							
								  </ul>
								</div>';
					} else if ($assign_job['assign_status'] == 2) {
						$row[] = '<div class="dropdown">
									<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Assigned
								</div>';
					}
				} else {
					$row[] = isset($assign_job['assign_status']) ? $assign_job['assign_status'] : '';
				}

				// Action buttons
				if ($person->job_status == 2) {
					$row[] = '<a class="cstm_view" id="view" style="padding-left:5px" href="javascript:void(0)" title="' . $person->job_id . '"><i class="glyphicon glyphicon-eye-open"></i></a>';
				} else {
					$row[] = '<a class="cstm_view" id="view" style="padding-left:5px" href="javascript:void(0)" title="' . $person->job_id . '"><i class="glyphicon glyphicon-eye-open"></i></a>&nbsp;&nbsp;<a href="' . $base_url_prefix . 'admin/job/edit/' . $person->job_id . '" class="cstm_view" id="edit" style="padding-left:5px" href="javascript:void(0)"><i class="glyphicon glyphicon-edit"></i></a>';
				}

				if (!empty($status_result)) {
					$row[] = ($person->status == 1 ? '<a class="cstm_view_status btn btn-success" id="active" href="javascript:void(0)" title="' . $person->job_id . '"><span class="glyphicon glyphicon-ok"></span></a>' : '<a class="cstm_view_status btn btn-danger" id="inactive" href="javascript:void(0)" title="' . $person->job_id . '"><span class="glyphicon glyphicon-remove"></span></a>');
				}

				if (!empty($edit_result)) {
					$row[] = '<a href="' . $base_url_prefix . 'admin/job/details/' . $person->job_id . '" title="Edit" class="btn btn-info"><span class="glyphicon glyphicon-pencil"></span></a>';
				}

				$data[] = $row;
				$i++;
			}

			// Safely get count values
			$recordsTotal = 0;
			$recordsFiltered = 0;
			try {
				$recordsTotal = method_exists($this->mjob, 'count_all') ? $this->mjob->count_all() : 0;
				$recordsFiltered = method_exists($this->mjob, 'count_filtered') ? $this->mjob->count_filtered() : 0;
			} catch (Exception $e) {
				// Use defaults if count methods fail
			}

			$output = array(
				"draw" => intval($_POST['draw']),
				"recordsTotal" => $recordsTotal,
				"recordsFiltered" => $recordsFiltered,
				"data" => $data,
			);
			$this->output->set_output(json_encode($output));
		} catch (Exception $e) {
			// Handle any errors gracefully
			$error_message = $e->getMessage();
			$output = array(
				"draw" => isset($_POST['draw']) ? intval($_POST['draw']) : 0,
				"recordsTotal" => 0,
				"recordsFiltered" => 0,
				"data" => array(),
				"error" => "An error occurred: " . $error_message
			);
			// Log the error for debugging
			if (function_exists('log_message')) {
				log_message('error', 'DataTables error in all_content_list: ' . $error_message);
				log_message('error', 'Stack trace: ' . $e->getTraceAsString());
			}
			$this->output->set_output(json_encode($output));
		}
	}

	public function all_content_list_reject()
	{
		$job_id = $_POST['job_id'];
		$list = $this->mjob->get_datatables_reject($job_id);

		$data = array();
		$no = $_POST['start'];
		$i = 1;
		foreach ($list as $person) {
			$row = array();
			$row[] = $i;
			$row[] = $person->name;
			$row[] = $person->remarks;
			$row[] = '<a href="' . base_url('admin/job/reassign/' . $job_id) . '" title="Reassign" class="btn btn-info">Reassign</a>';
			$data[] = $row;
			$i++;
		}

		$output = array(
			"draw" => $_POST['draw'],
			"recordsTotal" => $this->mjob->count_all_reject($job_id),
			"recordsFiltered" => $this->mjob->count_filtered_reject($job_id),
			"data" => $data,
		);
		echo json_encode($output);
	}

	private function searcharray($value, $key, $array)
	{
		foreach ($array as $k => $val) {
			if ($val[$key] == $value) {
				return $val;
			}
		}
		return null;
	}

	public function all_details()
	{
		$job_id = $this->input->post('job_id');
		$result = $this->mjob->get_details($job_id);

		$new_service = array();
		$services = $this->mjob->getServices($job_id);
		foreach ($services as $key => $service) {
			$new_service[$key] = $service['service_name'];
		}
		//echo "<pre>";
		//print_r($new_service);
		$services = $this->mservicehistory->get_details($job_id);
		foreach ($services as $key => $service) {
			//$condition = array("service_id"=>$service['service_id']);			
			//$task = $this->mservicehistory->getRows('task',$condition);
			$task = $this->mservicehistory->selected_task_list_for_particular_service($job_id, $service['service_id']);
			$services[$key]['task'] = $task;
		}
		$result['services'] = $services;
		//echo "<pre>";
		//print_r($services);
		$service = implode(',', $new_service);
		$result['service'] = $service;

		$service_date_condition = array("job_id" => $job_id);
		$job_service_date = $this->mjob->getRow("job_service_date", $service_date_condition);

		//print_r($job_service_date);exit;

		$result['service_date'] = date("d/m/Y", strtotime($job_service_date['service_date']));

		$result['next_service_date'] = date("d/m/Y", strtotime($job_service_date['next_service_date']));

		$result['assign_job'] = $this->mjob->getAsssignJob($job_id);

		echo json_encode($result);
	}

	public function edit($job_id)
	{
		$data['job_details'] = $this->mjob->get_details($job_id);
		if (empty($data['job_details'])) {
			$this->_load_list_view();
		} else {
			$this->_load_details_view($data);
		}
	}



	public function reassign($job_id)
	{
		$mechanic_condition = array("role_id" => 14, "status" => 1);
		$mechanics = $this->mjob->getRows('admins', $mechanic_condition);

		$rejected_mechanic_condition = array("job_id" => $job_id);
		$rejected_mechanics = $this->mjob->getRows('assign_job', $rejected_mechanic_condition);

		$new_rejected_mechanic = array();
		foreach ($rejected_mechanics as $key => $rejected_mechanic) {
			$new_rejected_mechanic[] = $rejected_mechanic['mechanic_id'];
		}

		$new_mechanic = array();
		foreach ($mechanics as $mechanic) {
			$new_mechanic[] = $mechanic['admin_id'];
		}

		$reassign_mechanic_list = array_diff($new_mechanic, $new_rejected_mechanic);

		$data['new_mechanic_list'] = array();

		foreach ($reassign_mechanic_list	as $key_m => $reassign_mechanic) {
			$reassign_mechanic_condition = array("admin_id" => $reassign_mechanic);
			$reassign_mechanic = $this->mjob->getRow('admins', $reassign_mechanic_condition);
			$data['new_mechanic_list'][$key_m] = $reassign_mechanic;
		}

		$data['job_id'] = $job_id;
		$data['content'] = 'admin/job/reassign';
		$this->load->view('admin/layouts/index', $data);
	}

	public function savereassign()
	{
		$job_id = $this->input->post('job_id');
		$condition['job_id'] = $job_id;
		$data['mechanic_id'] = $this->input->post('mechanic');
		$data['assign_status'] = 2;
		$data['remarks'] = "";
		//$this->mjob->insert('assign_job',$data);
		$this->mcommon->update('assign_job', $condition, $data);

		/////////insert into user roaster////////////////////////////////////////////////
		$job_date_condition = array("job_id" => $job_id);
		$job_service_date = $this->mjob->getRows('job_service_date', $job_date_condition);

		$roaster_data['mechanic_id'] = $this->input->post('mechanic');
		$roaster_data['available_date'] = $job_service_date[0]['service_date'];
		$roaster_data['date_of_creation'] = date('Y-m-d');
		$this->mcommon->insert('user_roaster', $roaster_data);

		$this->session->set_flashdata('success_msg', 'Job updated successfully');
		redirect('admin/job');
	}

	private function _load_details_view($parms)
	{

		$data['assigned_mechanic'] = $this->mjob->getAssignedMechanic($parms['job_details']['job_id']);

		$service_condition = array("status" => 1);
		$data['services'] = $this->mjob->getRows('service', $service_condition);

		$service_date_condition = array("job_id" => $parms['job_details']['job_id']);
		$data['selected_services_date'] = $this->mjob->getRows('job_service_date', $service_date_condition);

		$services_condition = array("job_id" => $parms['job_details']['job_id']);
		$data['selected_services'] = $this->mjob->getRows('job_services', $services_condition);

		$selected_service_arr = array();
		foreach ($data['selected_services'] as $selected_services) {
			$selected_service_arr[] = $selected_services['service_id'];
		}
		$data['selected_service_arr'] = $selected_service_arr;

		$selected_car_condition = array("car_id" => $parms['job_details']['car_id']);
		//$data['cars'] = $this->mjob->getRows('car',$car_condition);
		$data['selected_car'] = $this->mjob->get_cars('car', $selected_car_condition);

		$car_condition = array("status" => 1, "car_assign_status" => 0);
		//$data['cars'] = $this->mjob->getRows('car',$car_condition);
		$data['cars'] = $this->mjob->get_cars('car', $car_condition);
		//echo '<pre>'; print_r($data['cars']); die();
		$mechanic_condition = array("role_id" => 14, "status" => 1);
		$mechanics = $data['mechanics'] = $this->mjob->getRows('admins', $mechanic_condition);

		$newDate = $data['selected_services_date'][0]['service_date'];

		$condition = array('available_date' => $newDate);

		$off_mechanics = $this->mjob->getRows('user_roaster', $condition);

		$new_off_mechanic = array();

		foreach ($off_mechanics as $off_mechanic) {
			$new_off_mechanic[] =  $off_mechanic['mechanic_id'];
		}


		$new_mechanic = array();
		foreach ($mechanics as $mechanic) {
			$new_mechanic[] = $mechanic['admin_id'];
		}

		$roasted_mechanic_list = array_diff($new_mechanic, $new_off_mechanic);

		$result['new_mechanic_list'] = array();

		foreach ($roasted_mechanic_list	as $key_m => $roasted_mechanic) {
			$reassign_mechanic_condition = array("admin_id" => $roasted_mechanic);
			$reassign_mechanic = $this->mjob->getRow('admins', $reassign_mechanic_condition);
			$result['new_mechanic_list'][$key_m] = $reassign_mechanic;
		}


		$data['available_mechanic'] = $result['new_mechanic_list'];

		$data['job_details'] = $parms['job_details'];

		$data['content'] = 'admin/job/detail';
		$this->load->view('admin/layouts/index', $data);
	}

	public function update()
	{
		if ($this->input->post()) {
			$job_id = $this->input->post('job_id');
			$this->form_validation->set_rules('car', 'Car', 'required');
			$this->form_validation->set_rules('mechanic', 'Mechanic', 'required');
			$this->form_validation->set_rules('service_date', 'Service Date', 'required');

			if ($this->form_validation->run() == FALSE) {
				$data['job_details'] = $this->mjob->get_details($job_id);
				$this->_load_details_view($data);
			} else {
				$condition = array('job_id' => $job_id);
				$udata['car_id'] = $this->input->post('car');

				$this->mjob->update($condition, $udata);

				$s_date = $this->input->post('service_date');
				$s_date_array = explode('/', $s_date);
				$service_date = $s_date_array[2] . "-" . $s_date_array[1] . "-" . $s_date_array[0];

				// $job_service_data['service_date'] = $service_date;
				// //$service_date = $this->input->post('service_date');
				// $next_date = date('Y-m-d', strtotime($service_date. ' + 45 days'));	
				// $next_date_remider_before_seven = date('Y-m-d', strtotime($service_date. ' + 38 days'));
				// $next_service_date_before_three = date('Y-m-d', strtotime($service_date. ' + 42 days'));
				// $job_service_data['next_service_date'] = $next_date;
				// $job_service_data['next_service_date_reminder_before_seven'] = $next_date_remider_before_seven;
				// $job_service_data['next_service_date_before_three'] = $next_service_date_before_three;
				// $job_service_data['job_id'] = $job_id;
				// $job_service_data['car_id'] = $this->input->post('car');
				// $cond_jobservice_date['job_id']=$job_id;
				// $this->mcommon->update('job_service_date',$cond_jobservice_date,$job_service_data);

				$cond_job_services['job_id'] = $job_id;
				$this->mcommon->delete('job_services', $cond_job_services);
				$this->mcommon->delete('job_service_date_specific', $cond_job_services);
				$service_data = array();
				$services = $this->input->post('service');
				foreach ($services as $key => $service) {
					$service_data[$key]['service_id'] = $service;
					$service_data[$key]['job_id'] = $job_id;
					if ($service == 7 || $service == 8 || $service == 20) {


						/////////////////////////////////For specific job noti///////////////////////////////
						$service_noti_condition = array("service_id" => $service);
						$service_noti_arr = $this->mjob->getRow("service", $service_noti_condition);
						$next_days_noti = $service_noti_arr['notification_days'];
						$next_days_noti_before_seven = $next_days_noti - 7;
						$next_days_noti_before_three = $next_days_noti - 3;

						$job_service_data_specific['service_date'] = $service_date;
						//$service_date = $this->input->post('service_date');
						$next_date_specific = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti . ' days'));
						$next_date_remider_before_seven_specific = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti_before_seven . ' days'));
						$next_service_date_before_three_specific = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti_before_three . ' days'));
						$job_service_data_specific['next_service_date'] = $next_date_specific;
						$job_service_data_specific['next_service_date_reminder_before_seven'] = $next_date_remider_before_seven_specific;
						$job_service_data_specific['next_service_date_before_three'] = $next_service_date_before_three_specific;
						$job_service_data_specific['job_id'] = $job_id;
						$job_service_data_specific['car_id'] = $this->input->post('car');
						$job_service_data_specific['service_id'] = $service;

						$this->mjob->insert('job_service_date_specific', $job_service_data_specific);
						//echo $this->db->last_query(); die;
					}
				}


				$this->mjob->batch_insert('job_services', $service_data);

				$next_days_noti = 60;
				if (in_array("7", $services)) {
					$service_noti_condition = array("service_id" => 7);
					$service_noti_arr = $this->mjob->getRow("service", $service_noti_condition);
					$next_days_noti = $service_noti_arr['notification_days'];
				}
				$next_days_noti_before_seven = $next_days_noti - 7;
				$next_days_noti_before_three = $next_days_noti - 3;

				$job_service_data['service_date'] = $service_date;
				//$service_date = $this->input->post('service_date');
				// $next_date = date('Y-m-d', strtotime($service_date. ' + 45 days'));	
				// $next_date_remider_before_seven = date('Y-m-d', strtotime($service_date. ' + 38 days'));
				// $next_service_date_before_three = date('Y-m-d', strtotime($service_date. ' + 42 days'));
				$next_date = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti . ' days'));
				$next_date_remider_before_seven = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti_before_seven . ' days'));
				$next_service_date_before_three = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti_before_three . ' days'));
				$job_service_data['next_service_date'] = $next_date;
				$job_service_data['next_service_date_reminder_before_seven'] = $next_date_remider_before_seven;
				$job_service_data['next_service_date_before_three'] = $next_service_date_before_three;
				$job_service_data['job_id'] = $job_id;
				$job_service_data['car_id'] = $this->input->post('car');
				$cond_jobservice_date['job_id'] = $job_id;
				$this->mcommon->update('job_service_date', $cond_jobservice_date, $job_service_data);

				$car_condition['car_id'] = $this->input->post('car');
				$car_update_data['car_assign_status'] = 1;

				$car_update_data['updated_by'] = $this->admin['admin_id'];
				$car_update_data['date_of_update'] = date('Y-m-d H:i:s');
				$this->mcommon->update("car", $car_condition, $car_update_data);

				$cond_user_roaster['mechanic_id'] = $this->input->post('mechanic');
				$cond_user_roaster['available_date'] = $service_date;
				$this->mcommon->delete('user_roaster', $cond_user_roaster);
				///////insert roster//////////////////////////////////////////////
				$roaster_data = array();
				$roaster_data['mechanic_id'] = $this->input->post('mechanic');
				$roaster_data['available_date'] = $service_date;
				$roaster_data['date_of_creation'] = date('Y-m-d');
				$this->mcommon->insert("user_roaster", $roaster_data);

				$assign_condition['job_id'] = $job_id;
				$assign_data['mechanic_id'] = $this->input->post('mechanic');
				$assign_data['assign_status'] = "2";
				$this->mcommon->update("assign_job", $assign_condition, $assign_data);

				$this->session->set_flashdata('success_msg', 'Job updated successfully');
				redirect('admin/job');
			}
		} else {
			$this->_load_list_view();
		}
	}






	public function add_content()
	{
		if ($this->input->post()) {
			$this->form_validation->set_rules('car', 'Car', 'required');
			$this->form_validation->set_rules('mechanic', 'Mechanic', 'required');
			$this->form_validation->set_rules('service_date', 'Service Date', 'required');
			$this->form_validation->set_rules('paid_or_unpaid', 'Paid or unpaid flag', 'required');

			if ($this->form_validation->run() == FALSE) {
				$this->_load_add_view();
			} else {
				//echo "<pre>";print_r($this->input->post('service'));die();
				$services = $this->input->post('service');
				$udata['car_id'] = $this->input->post('car');
				//$udata['service'] = implode(',',$service);				
				$udata['job_status'] = 0;
				$udata['created_by'] = $this->admin['admin_id'];
				$udata['paid_or_unpaid'] = $this->input->post('paid_or_unpaid');


				$udata['date_of_creation'] = date('Y-m-d H:i:s');
				$job_id = $this->mjob->add($udata);

				if ($job_id) {

					$s_date = $this->input->post('service_date');
					$s_date_array = explode('/', $s_date);
					$service_date = $s_date_array[2] . "-" . $s_date_array[1] . "-" . $s_date_array[0];

					$service_data = array();
					foreach ($services as $key => $service) {
						$service_data[$key]['service_id'] = $service;
						$service_data[$key]['job_id'] = $job_id;
						if ($service == 7 || $service == 8 || $service == 20) {


							/////////////////////////////////For specific job noti///////////////////////////////
							$service_noti_condition = array("service_id" => $service);
							$service_noti_arr = $this->mjob->getRow("service", $service_noti_condition);
							$next_days_noti = $service_noti_arr['notification_days'];
							$next_days_noti_before_seven = $next_days_noti - 7;
							$next_days_noti_before_three = $next_days_noti - 3;

							$job_service_data_specific['service_date'] = $service_date;
							//$service_date = $this->input->post('service_date');
							$next_date_specific = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti . ' days'));
							$next_date_remider_before_seven_specific = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti_before_seven . ' days'));
							$next_service_date_before_three_specific = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti_before_three . ' days'));
							$job_service_data_specific['next_service_date'] = $next_date_specific;
							$job_service_data_specific['next_service_date_reminder_before_seven'] = $next_date_remider_before_seven_specific;
							$job_service_data_specific['next_service_date_before_three'] = $next_service_date_before_three_specific;
							$job_service_data_specific['job_id'] = $job_id;
							$job_service_data_specific['car_id'] = $this->input->post('car');
							$job_service_data_specific['service_id'] = $service;

							$this->mjob->insert('job_service_date_specific', $job_service_data_specific);
							//echo $this->db->last_query(); die;
						}
					}

					$this->mjob->batch_insert('job_services', $service_data);
					$next_days_noti = 60;
					if (in_array("7", $services)) {
						$service_noti_condition = array("service_id" => 7);
						$service_noti_arr = $this->mjob->getRow("service", $service_noti_condition);
						$next_days_noti = $service_noti_arr['notification_days'];
					}
					$next_days_noti_before_seven = $next_days_noti - 7;
					$next_days_noti_before_three = $next_days_noti - 3;

					$job_service_data['service_date'] = $service_date;
					//$service_date = $this->input->post('service_date');
					// $next_date = date('Y-m-d', strtotime($service_date. ' + 45 days'));	
					// $next_date_remider_before_seven = date('Y-m-d', strtotime($service_date. ' + 38 days'));
					// $next_service_date_before_three = date('Y-m-d', strtotime($service_date. ' + 42 days'));
					$next_date = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti . ' days'));
					$next_date_remider_before_seven = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti_before_seven . ' days'));
					$next_service_date_before_three = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti_before_three . ' days'));
					$job_service_data['next_service_date'] = $next_date;
					$job_service_data['next_service_date_reminder_before_seven'] = $next_date_remider_before_seven;
					$job_service_data['next_service_date_before_three'] = $next_service_date_before_three;
					$job_service_data['job_id'] = $job_id;
					$job_service_data['car_id'] = $this->input->post('car');

					$this->mjob->insert('job_service_date', $job_service_data);


					$data['job_id'] = $job_id;
					$data['mechanic_id'] = $this->input->post('mechanic');
					$data['assign_status'] = "2";
					$data['remarks'] = "";
					$this->mjob->insert('assign_job', $data);



					$car_condition = array("car_id" => $this->input->post('car'));
					$car = $this->mjob->getRow("car", $car_condition);

					$service_condition = array("job_id" => $job_id);
					$job = $this->mjob->getRow("job", $service_condition);


					$device_condition = array("user_id" => $this->input->post('mechanic'));
					$device = $this->mjob->getRow("devices", $device_condition);

					$push['notification_type'] = "job";
					$push['car'] = $car['car_no'];
					$push['service'] = $job['service'];
					$push['service_date'] = $this->input->post('service_date');

					//echo $this->input->post('service_date');die();

					$bookingdate = $this->input->post('service_date');

					$this->send_android_notification($device['device_token'], $push);

					$condition = array("car_id" => $this->input->post('car'));
					//echo "<pre>";print_r($condition);die();
					$car_user = $this->mjob->getRow('car', $condition);

					//echo "<pre>";print_r($car_user);die();

					/*$message = "";

					foreach($services as $key=>$service)
					{
						$condition = array("service_id"=>$service);
						$service_details = $this->mjob->getRow('service',$condition);
						$message .= ++$key.") ".$service_details['service_name']."<br>";
					}*/

					///////update car assign//////////////////////////////////////////////
					$car_update_data['car_assign_status'] = 1;

					$car_update_data['updated_by'] = $this->admin['admin_id'];
					$car_update_data['date_of_update'] = date('Y-m-d H:i:s');
					$this->mcommon->update("car", $car_condition, $car_update_data);
					//echo $this->db->last_query();die; 

					///////insert roster//////////////////////////////////////////////
					$roaster_data = array();
					$roaster_data['mechanic_id'] = $this->input->post('mechanic');
					$roaster_data['available_date'] = $service_date;
					$roaster_data['date_of_creation'] = date('Y-m-d');
					$this->mcommon->insert("user_roaster", $roaster_data);

					$mail_temp = file_get_contents('./global/mail/job_create.html');
					$mail_temp = str_replace("{shop_name}", "Punjab Motor Workshop", $mail_temp);
					$mail_temp = str_replace("{shop_logo}", LOGOURL, $mail_temp);
					$mail_temp = str_replace("{name}", $car_user['name'], $mail_temp);
					$mail_temp = str_replace("{carnumber}", $car_user['car_no'], $mail_temp);
					$mail_temp = str_replace("{bookingdate}", $bookingdate, $mail_temp);
					$regmail['name'] = 'Punjab Motor';
					$regmail['to'] = $car_user['email'];
					$regmail['subject'] = 'Service List';
					$regmail['message'] = $mail_temp;
					//echo $mail_temp;exit;
					registration_mail($regmail);

					$this->session->set_flashdata('success_msg', 'Job assign successfully');
					redirect('admin/job/content');
				} else {
					$this->session->set_flashdata('error_msg', 'Something Went Wrong');
					redirect('admin/job/content');
				}
			}
		} else {
			$this->_load_list_view();
		}
	}

	private function image_upload()
	{
		$img = 'imgInp';
		if (!is_dir('./public/admin_assets/images/profilepics/')) {
			mkdir('./public/admin_assets/images/profilepics/', 0777, TRUE);
		}
		$config['upload_path'] = './public/admin_assets/images/profilepics/';
		$config['allowed_types'] = 'gif|jpg|png';
		//$config['min_width']  = '200';
		//$config['min_height']  = '200';
		//$config['max_size']	= '100';
		//$config['max_width']  = '1024';
		//$config['max_height']  = '768';
		$config['encrypt_name']  = true;
		$this->load->library('upload', $config);
		if (! $this->upload->do_upload($img)) {
			$message = array('result' => $this->upload->display_errors(), 'status' => 0);
		} else {
			$data = array('upload_data' => $this->upload->data());
			$message = array('result' => $data['upload_data']['file_name'], 'status' => 1);
		}
		return $message;
	}

	public function add()
	{
		$this->_load_add_view();
	}

	private function _load_add_view()
	{
		$car_condition = array("status" => 1, "car_assign_status" => 0);
		//$data['cars'] = $this->mjob->getRows('car',$car_condition);
		$data['cars'] = $this->mjob->get_cars('car', $car_condition);
		//echo '<pre>'; print_r($data['cars']); die();
		$mechanic_condition = array("role_id" => 14, "status" => 1);
		$data['mechanics'] = $this->mjob->getRows('admins', $mechanic_condition);


		$service_condition = array("status" => 1);
		$data['services'] = $this->mjob->getRows('service', $service_condition);
		$data['content'] = 'admin/job/add';
		$this->load->view('admin/layouts/index', $data);
	}

	public function getmechanicList()
	{
		$mechanic_condition = array("role_id" => 14, "status" => 1);
		$mechanics = $this->mjob->getRows('admins', $mechanic_condition);
		//$date = '10/01/2019';
		$date = $this->input->post('date');

		$date_array = explode('/', $date);
		$newDate = $date_array[2] . "-" . $date_array[1] . "-" . $date_array[0];

		$condition = array('available_date' => $newDate);

		$off_mechanics = $this->mjob->getRows('user_roaster', $condition);
		//echo $this->db->last_query(); die;
		//print_r($off_mechanics);die;
		$new_off_mechanic = array();

		foreach ($off_mechanics as $off_mechanic) {
			$new_off_mechanic[] =  $off_mechanic['mechanic_id'];
		}

		//print_r($new_off_mechanic);die;
		$new_mechanic = array();
		foreach ($mechanics as $mechanic) {
			$new_mechanic[] = $mechanic['admin_id'];
		}

		$roasted_mechanic_list = array_diff($new_mechanic, $new_off_mechanic);

		$result['new_mechanic_list'] = array();

		foreach ($roasted_mechanic_list	as $key_m => $roasted_mechanic) {
			$reassign_mechanic_condition = array("admin_id" => $roasted_mechanic);
			$reassign_mechanic = $this->mjob->getRow('admins', $reassign_mechanic_condition);
			$result['new_mechanic_list'][$key_m] = $reassign_mechanic;
		}

		echo json_encode($result);
	}

	public function delete_content()
	{
		$condition['job_id'] = $this->input->post('job_id');

		$this->mjob->delete($condition);
		$response = array('status' => 1, 'message' => 'Success');
		echo header('Content-Type: application/json');
		echo json_encode($response);
	}

	public function active()
	{
		$condition['user_id'] = $this->input->post('user_id');
		$udata['status'] = 1;
		$this->musersetting->active($condition, $udata);
		$response = array('status' => 1, 'message' => 'Success');
		echo json_encode($response);
	}

	public function inactive()
	{
		$condition['user_id'] = $this->input->post('user_id');
		$udata['status'] = 0;
		$this->musersetting->active($condition, $udata);
		$response = array('status' => 1, 'message' => 'Success');
		echo json_encode($response);
	}

	public function multiple_del()
	{
		$job_ids = explode(',', $this->input->post('job_ids'));
		foreach ($job_ids as $job_id) {
			$condition['job_id'] = $job_id;
			$this->mjob->delete($condition);
			$response = array('status' => 1, 'message' => 'Success');
		}
		echo header('Content-Type: application/json');
		echo json_encode($response);
	}

	public function get_sub_category()
	{
		$category_id =  $this->input->post('category_id');
		$result['sub_category'] = $this->musersetting->get_sub_category($category_id);
		if (empty($result)) {
			$result = array("category_name" => "Select");
		}
		echo json_encode($result);
	}

	public function get_client_address()
	{
		$client_name = $this->input->post('client_name');
		$result['client_addresss'] = $this->mjob->get_client_address($client_name);
		echo json_encode($result);
	}

	public function client_job()
	{
		$client_name = $this->input->post('client_name');
		$client_address = $this->input->post('client_address');
		$result['job_list'] = $this->mjob->getJobInformationForclient($client_name, $client_address);
		echo json_encode($result);
	}

	public function rejectlist($job_id)
	{
		$data['job_id'] = $job_id;
		$data['content'] = 'admin/job/rejectlist';

		// $condition['type']=2;
		// $condition['details_id']=$job_id;
		// $udata['is_read']=1;
		// $this->mcommon->update('notification',$condition,$udata);	
		$this->load->view('admin/layouts/index', $data);
	}

	public function send_special_notification()
	{
		$job_id = $this->input->post('job_id');
		$comment = $this->input->post('comment');
		$condition = array('job_id' => $job_id);
		$jobDetail = $this->mjob->getRow('job', $condition);
		$category_id = $jobDetail['cat_id'];
		$city_id = $jobDetail['city_id'];

		$deviceList = $this->mjob->deviceList($category_id, $city_id);


		$push['notification_type'] = "message";
		$push['message'] = $comment;


		if (!empty($deviceList)) {
			foreach ($deviceList as $device) {
				if ($device['device_type'] == 2 && $device['device_token'] != '' && $device['loggedin_status'] == 1) {
					$this->send_android_notification($device['device_token'], $push);
				} else if ($device['device_type'] == 1 && $device['device_token'] != '' && $device['loggedin_status'] == 1) {
					$this->send_ios_notification($device['device_token'], $push);
				}
			}
		}

		$result['notify_message'] = 'Notification Successfully Send';
		echo json_encode($result);
	}

	public function send_ios_notification($devicetoken, $data)
	{
		$passphrase = '123456';
		$deviceToken = $devicetoken;
		$ctx = stream_context_create();
		// ck.pem is your certificate file ssl://gateway.sandbox.push.apple.com:2195
		stream_context_set_option($ctx, 'ssl', 'local_cert', './public/WeCareStaffPem.pem');
		stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
		// Open a connection to the APNS server
		$fp = stream_socket_client(
			'ssl://gateway.sandbox.push.apple.com:2195',
			$err,
			$errstr,
			60,
			STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT,
			$ctx
		);

		if (!$fp) {
			//exit("Failed to connect: $err $errstr" . PHP_EOL);
			return 2;
		} else {
			// Create the payload body
			$body['aps'] = array(
				'alert' => array(
					'title' => 'Wecare App',
					'body' => 'Wecare App',
				),
				'sound' => 'default',
				'data' => $data
			);

			// Encode the payload as JSON
			$payload = json_encode($body);
			// Build the binary notification
			$msg = chr(0) . pack('n', 32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack('n', strlen($payload)) . $payload;  //
			//$msg = chr(0) . pack('n', 32) . pack('H*',str_replace(' ', '', sprintf('%u', CRC32($deviceToken)))) . pack('n', strlen($payload)) . $payload;  // 
			//str_replace(' ', '', sprintf('%u', CRC32($deviceToken)))
			//$msg = chr(0) . pack('n', 32) . pack('H*', str_replace(' ', '', sprintf('%u', CRC32($deviceToken)))) . pack('n', strlen($payload)) . $payload
			// Send it to the server
			$result = fwrite($fp, $msg, strlen($msg));
			// Close the connection to the server
			fclose($fp);
			if (!$result) {
				//return 'Message not delivered' . PHP_EOL;
				return 0;
			} else {
				//return  'Message successfully delivered' . PHP_EOL;
				return 1;
			}
		}
	}
	public function send_android_notification($registration_ids, $data)
	{
		$fields = array(
			'registration_ids' => array($registration_ids),
			'data' => $data,
		);
		$headers = array(
			'Authorization: key=AAAAAjykQAw:APA91bF2xwn1yqpfBkoxg_K_fTp5bOaI4M3zXL_yG63hmQpqvVFZlMiilFdf65DWdqAO5Xy3eBxJjFybwKMwDMnr16ls_YnMDpMAfwTbJUcBnpHK4supv42pZIoDEBHrdUwOFI9wmQYs', // FIREBASE_API_KEY_FOR_ANDROID_NOTIFICATION
			'Content-Type: application/json'
		);
		// Open connection
		$ch = curl_init();

		// Set the url, number of POST vars, POST data
		curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send');
		curl_setopt($ch, CURLOPT_POST, true);
		curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

		// Disabling SSL Certificate support temporarly
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));

		// Execute post
		$result = curl_exec($ch);
		if ($result === false) {
			//die('Curl failed:' .curl_errno($ch));
			return 0;
		}

		// Close connection
		curl_close($ch);
		return $result;
	}
	public function delete_job_details()
	{
		$job_id = $this->input->post('job_id');
		$this->mjob->delete_all_job_details($job_id);
		$response = array('error_code' => '0', 'message' => 'Job canceled successfully');
		echo json_encode($response);
	}

	///////////////////////update notification status ajax/////////////////////////
	public function update_status()
	{
		$id = $this->input->post('id');
		$condition['id'] = $id;
		$udata['is_read'] = 1;
		$this->mcommon->update('notification', $condition, $udata);
		echo 1;
		die;
	}

	public function update_status_job()
	{
		$id = $this->input->post('id');
		$condition['job_service_date_id'] = $id;
		$date = date('Y-m-d');
		$service_date_row = $this->mcommon->getRow('job_service_date_specific', $condition);
		if ($service_date_row['next_service_date'] == $date) {
			$udata['is_read_today'] = 1;
		}
		if ($service_date_row['next_service_date_reminder_before_seven'] == $date) {
			$udata['is_read_before7'] = 1;
		}
		if ($service_date_row['next_service_date_before_three'] == $date) {
			$udata['is_read_before3'] = 1;
		}

		$this->mcommon->update('job_service_date_specific', $condition, $udata);
		echo 1;
		die;
	}

	public function all_content_list_requested_job()
	{
		$list = $this->mjob->get_datatables_requested_job();
		$data = array();
		$no = $_POST['start'];
		$i = 1;
		foreach ($list as $person) {
			$row = array();
			$row[] = $i;

			$row[] = $person->car_no;
			$row[] = $person->service_date;
			$row[] = $person->service_name;
			$row[] = $person->created_ts;
			$row[] = $person->job_note;
			if ($person->status == 0) {
				$row[] = '<div class="dropdown">
								<span class="label label-primary dropdown-toggle" type="button" data-toggle="dropdown">Requested</span>
							</div>';
				$row[] = '<a href="' . base_url('admin/job/requested_job_edit/' . $person->booking_request_id) . '" title="Edit" class="btn btn-info"><span class="glyphicon glyphicon-pencil"></span></a></a>';
			} else if ($person->status == 1) {
				$row[] = '<div class="dropdown">
                            <span class="label label-success dropdown-toggle" type="button" data-toggle="dropdown">Job Assigned</span>
						</div>';
				$row[] = '<strong>N/A</strong>';
			}





			$data[] = $row;
			$i++;
		}

		$output = array(
			"draw" => $_POST['draw'],
			"recordsTotal" => $this->mjob->count_all_requested_job(),
			"recordsFiltered" => $this->mjob->count_filtered_requested_job(),
			"data" => $data,
		);
		echo json_encode($output);
	}

	public function requested_job_edit($booking_request_id)
	{
		$data['job_details'] = $this->mjob->get_details_requested_job($booking_request_id);
		if (empty($data['job_details'])) {
			$this->_load_requested_job_list_view();
		} else {
			$this->_requested_job_details_view($data);
		}
	}

	private function _requested_job_details_view($parms)
	{

		$service_condition = array("status" => 1);
		$data['services'] = $this->mjob->getRows('service', $service_condition);
		$data['service_date'] = $parms['job_details']['service_date'];

		$services_condition = array("booking_request_id" => $parms['job_details']['booking_request_id']);
		$data['selected_services'] = $this->mjob->getRows('booking_request_services', $services_condition);
		$data['booking_request_data'] = $this->mjob->getRows('booking_request', $services_condition);
		//print_r($data['booking_request_data']);die;
		$selected_service_arr = array();
		foreach ($data['selected_services'] as $selected_services) {
			$selected_service_arr[] = $selected_services['service_id'];
		}
		$data['selected_service_arr'] = $selected_service_arr;

		$selected_car_condition = array("car_id" => $parms['job_details']['car_id']);
		$data['selected_car'] = $this->mjob->get_cars('car', $selected_car_condition);

		$car_condition = array("status" => 1, "car_assign_status" => 0);
		$data['cars'] = $this->mjob->get_cars('car', $car_condition);

		// $mechanic_condition = array("role_id"=>14,"status"=>1);
		// $mechanics=$data['mechanics'] = $this->mjob->getRows('admins',$mechanic_condition);

		// $condition = array('available_date'=>$data['service_date']);
		// $off_mechanics = $this->mjob->getRows('user_roaster',$condition);
		// $new_off_mechanic = array();
		// foreach($off_mechanics as $off_mechanic){
		// 	$new_off_mechanic[] =  $off_mechanic['mechanic_id'];
		// }	
		// $new_mechanic = array();		
		// foreach($mechanics as $mechanic){
		// 	$new_mechanic[] = $mechanic['admin_id'];
		// }

		// $roasted_mechanic_list = array_diff($new_mechanic,$new_off_mechanic);

		// $result['new_mechanic_list'] = array();

		// foreach($roasted_mechanic_list	as $key_m=>$roasted_mechanic)
		// {
		// 	$reassign_mechanic_condition = array("admin_id"=>$roasted_mechanic);
		// 	$reassign_mechanic = $this->mjob->getRow('admins',$reassign_mechanic_condition);
		// 	$result['new_mechanic_list'][$key_m] = $reassign_mechanic;
		// }
		// $data['available_mechanic']=$result['new_mechanic_list'];

		$mechanic_condition = array("role_id" => 14, "status" => 1);
		$data['available_mechanic'] = $this->mjob->getRows('admins', $mechanic_condition);


		$data['job_details'] = $parms['job_details'];

		$data['content'] = 'admin/job/booking_request_edit';
		$this->load->view('admin/layouts/index', $data);
	}


	public function requested_job_update()
	{
		if ($this->input->post()) {
			$this->form_validation->set_rules('car', 'Car', 'required');
			$this->form_validation->set_rules('mechanic', 'Mechanic', 'required');
			$this->form_validation->set_rules('service_date', 'Service Date', 'required');
			$this->form_validation->set_rules('paid_or_unpaid', 'Paid or unpaid flag', 'required');

			if ($this->form_validation->run() == FALSE) {
				$booking_request_id = $this->input->post('booking_request_id');
				$data['job_details'] = $this->mjob->get_details_requested_job($booking_request_id);
				$this->_requested_job_details_view($data);
			} else {

				$services = $this->input->post('service');

				$udata['car_id'] = $this->input->post('car');
				$udata['booking_request_id'] = $this->input->post('booking_request_id');
				$udata['job_status'] = 0;
				$udata['created_by'] = $this->admin['admin_id'];
				$udata['date_of_creation'] = date('Y-m-d H:i:s');
				$udata['paid_or_unpaid'] = $this->input->post('paid_or_unpaid');

				$job_id = $this->mjob->add($udata);

				if ($job_id) {

					$s_date = $this->input->post('service_date');
					$s_date_array = explode('/', $s_date);
					$service_date = $s_date_array[2] . "-" . $s_date_array[1] . "-" . $s_date_array[0];

					$service_data = array();
					foreach ($services as $key => $service) {
						$service_data[$key]['service_id'] = $service;
						$service_data[$key]['job_id'] = $job_id;

						if ($service == 7 || $service == 8 || $service == 20) {


							/////////////////////////////////For specific job noti///////////////////////////////
							$service_noti_condition = array("service_id" => $service);
							$service_noti_arr = $this->mjob->getRow("service", $service_noti_condition);
							$next_days_noti = $service_noti_arr['notification_days'];
							$next_days_noti_before_seven = $next_days_noti - 7;
							$next_days_noti_before_three = $next_days_noti - 3;

							$job_service_data_specific['service_date'] = $service_date;
							//$service_date = $this->input->post('service_date');
							$next_date_specific = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti . ' days'));
							$next_date_remider_before_seven_specific = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti_before_seven . ' days'));
							$next_service_date_before_three_specific = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti_before_three . ' days'));
							$job_service_data_specific['next_service_date'] = $next_date_specific;
							$job_service_data_specific['next_service_date_reminder_before_seven'] = $next_date_remider_before_seven_specific;
							$job_service_data_specific['next_service_date_before_three'] = $next_service_date_before_three_specific;
							$job_service_data_specific['job_id'] = $job_id;
							$job_service_data_specific['car_id'] = $this->input->post('car');
							$job_service_data_specific['service_id'] = $service;

							$this->mjob->insert('job_service_date_specific', $job_service_data_specific);
							//echo $this->db->last_query(); die;
						}
					}

					$this->mjob->batch_insert('job_services', $service_data);
					$next_days_noti = 60;
					if (in_array("7", $services)) {
						$service_noti_condition = array("service_id" => 7);
						$service_noti_arr = $this->mjob->getRow("service", $service_noti_condition);
						$next_days_noti = $service_noti_arr['notification_days'];
					}
					$next_days_noti_before_seven = $next_days_noti - 7;
					$next_days_noti_before_three = $next_days_noti - 3;

					$job_service_data['service_date'] = $service_date;
					$next_date = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti . ' days'));
					$next_date_remider_before_seven = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti_before_seven . ' days'));
					$next_service_date_before_three = date('Y-m-d', strtotime($service_date . ' + ' . $next_days_noti_before_three . ' days'));
					$job_service_data['next_service_date'] = $next_date;
					$job_service_data['next_service_date_reminder_before_seven'] = $next_date_remider_before_seven;
					$job_service_data['next_service_date_before_three'] = $next_service_date_before_three;
					$job_service_data['job_id'] = $job_id;
					$job_service_data['car_id'] = $this->input->post('car');

					$this->mjob->insert('job_service_date', $job_service_data);


					$data['job_id'] = $job_id;
					$data['mechanic_id'] = $this->input->post('mechanic');
					$data['assign_status'] = "2";
					$data['remarks'] = "";
					$this->mjob->insert('assign_job', $data);



					$car_condition = array("car_id" => $this->input->post('car'));
					$car = $this->mjob->getRow("car", $car_condition);

					$service_condition = array("job_id" => $job_id);
					$job = $this->mjob->getRow("job", $service_condition);


					$device_condition = array("user_id" => $this->input->post('mechanic'));
					$device = $this->mjob->getRow("devices", $device_condition);

					$push['notification_type'] = "job";
					$push['car'] = $car['car_no'];
					$push['service'] = $job['service'];
					$push['service_date'] = $this->input->post('service_date');

					//echo $this->input->post('service_date');die();

					$bookingdate = $this->input->post('service_date');

					$this->send_android_notification($device['device_token'], $push);

					$condition = array("car_id" => $this->input->post('car'));
					//echo "<pre>";print_r($condition);die();
					$car_user = $this->mjob->getRow('car', $condition);
					$customer_data = $this->mjob->getRow('customer', array('customer_id' => $car_user['customer_id']));


					///////update car assign//////////////////////////////////////////////
					$car_update_data['car_assign_status'] = 1;
					$car_update_data['updated_by'] = $this->admin['admin_id'];
					$car_update_data['date_of_update'] = date('Y-m-d H:i:s');
					$this->mcommon->update("car", $car_condition, $car_update_data);

					///////insert roster//////////////////////////////////////////////
					$roaster_data = array();
					$roaster_data['mechanic_id'] = $this->input->post('mechanic');
					$roaster_data['available_date'] = $service_date;
					$roaster_data['date_of_creation'] = date('Y-m-d');
					$this->mcommon->insert("user_roaster", $roaster_data);

					//-------------------Update Requested Job Status---------------------------//
					$booking_request_data['status'] = 1;
					$this->mcommon->update("booking_request", array('booking_request_id' => $this->input->post('booking_request_id')), $booking_request_data);


					$mail_temp = file_get_contents('./global/mail/job_create.html');
					$mail_temp = str_replace("{shop_name}", "Punjab Motor Workshop", $mail_temp);
					$mail_temp = str_replace("{shop_logo}", LOGOURL, $mail_temp);
					$mail_temp = str_replace("{name}", $customer_data['first_name'] . ' ' . ($customer_data['middle_name']) ? $customer_data['middle_name'] . ' ' : '' . $customer_data['last_name'], $mail_temp);
					$mail_temp = str_replace("{carnumber}", $car_user['car_no'], $mail_temp);
					$mail_temp = str_replace("{bookingdate}", $bookingdate, $mail_temp);
					$regmail['name'] = 'Punjab Motor';
					$regmail['to'] = $customer_data['email'];
					$regmail['subject'] = 'Service List';
					$regmail['message'] = $mail_temp;
					//echo $mail_temp;exit;
					registration_mail($regmail);

					$this->session->set_flashdata('success_msg', 'Job assigned successfully');
					redirect('admin/job/requested_job');
				} else {
					$this->session->set_flashdata('error_msg', 'Something Went Wrong');
					redirect('admin/job/requested_job');
				}
			}
		} else {
			$this->_load_requested_job_list_view();
		}
	}
}