Commit d86d3a50 by Tobin

Merge branch 'master' into 'dev_production'

Master See merge request !40
parents 4cca8d61 7916ea95
......@@ -40,6 +40,7 @@ class Bookings extends CI_Controller {
empty($mechanic_id))?'':$mechanic_id;
$template['mechanic_data'] = $mechanic_data;
$template['bookingData'] = $this->Booking_model->getMechBookings($mechanic_id,'','0,1,3,4');
//pr($template['bookingData']);
$this->load->view('template',$template);
}
......
......@@ -38,6 +38,8 @@
if (isset(apache_request_headers()['Auth'])) {
$auth = apache_request_headers()['Auth'];
}
define("PAYSTACK_SECRET_KEY", "sk_test_36658e3260b1d1668b563e6d8268e46ad6da3273");
}
// customer_login
......@@ -285,7 +287,7 @@
header('Content-type: application/json');
$postData = $_POST;
$optionalData = array('optionlaDescription'=>'','optionalImages'=>array(),'optionalVideos'=>array());
$optionalData=array('optionlaDescription'=>'','optionalImages'=>array(),'optionalVideos'=>array());
$respArr = array('status'=>'0','message'=>'Something went wrong.');
if(empty($postData) || empty($postData = json_decode($postData['data'],true)) ||
......@@ -322,6 +324,7 @@
$postData['optionalData'] = $optionalData;
$status = $this->Booking_model->scheduleBooking($postData);
if($status){
$respArr['status'] = '1';
$respArr['message'] = 'Success';
......@@ -472,7 +475,7 @@
echo json_encode($respArr);exit;
}
$status=$this->Booking_model->changeBookStatus($postData['customer_id'],$postData['booking_id'],'3');
$status=$this->Booking_model->changeBookStatus($postData['customer_id'],$postData['booking_id'],'4');
if($status){
$respArr['status'] = 1;
......@@ -1343,6 +1346,116 @@
$result = $this->Webservice_model->rate_mechanic($postData);
echo json_encode($result);exit;
}
public function acceptMechanicQuote(){
header('Content-type:application/json');
$headers = apache_request_headers();
$post = file_get_contents("php://input");
$postData = json_decode($post,true);
$result = $this->Webservice_model->acceptMechanicQuote($postData);
echo json_encode($result);exit;
}
public function payNow($transId) {
$result = array();
$mech_data = $this->Webservice_model->getMechAmount($transId);
$amount = $mech_data['data']['amount'] * 100;
$callback_url = base_url().'Webservices/verify_payment/'.$transId;
$postdata = array('email' => $mech_data['emailId'], 'amount' => $amount,"reference" => $transId, "callback_url" => $callback_url);
$url = "https://api.paystack.co/transaction/initialize";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,json_encode($postdata)); //Post Fields
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$headers = [
'Authorization: Bearer '.PAYSTACK_SECRET_KEY,
'Content-Type: application/json',
];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$request = curl_exec ($ch);
curl_close ($ch);
if ($request) {
$result = json_decode($request, true);
}
$redir = $result['data']['authorization_url'];
header("Location: ".$redir);
}
public function verify_payment($ref) {
$result = array();
$url = 'https://api.paystack.co/transaction/verify/'.$ref;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt(
$ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer '.PAYSTACK_SECRET_KEY]
);
$request = curl_exec($ch);
curl_close($ch);
if ($request) {
$result = json_decode($request, true);
$status = $this->Webservice_model->transactionResp($ref,$result);
if($status){
if($result){
if($result['data']){
if($result['data']['status'] == 'success'){
header("Location: ".base_url().'Webservices/success/'.$ref);
}else{
header("Location: ".base_url().'Webservices/fail/'.$ref);
}
}
else{
header("Location: ".base_url().'Webservices/fail/'.$ref);
}
}else{
header("Location: ".base_url().'Webservices/fail/'.$ref);
}
}
}else{
header("Location: ".base_url().'Webservices/fail/'.$ref);
}
}
public function fail($ref = ''){
header("Location: http://localhost:4200/dashboard?status=failure&tab=appointment&ref=".$ref);
}
public function success($ref = ''){
$this->db->select('customer_vehicle.car_name,bookings.scheduled_date,bookings.scheduled_time,customers.email,bookings.cost');
$this->db->from('transaction');
$this->db->join('bookings','transaction.booking_id = bookings.booking_id');
$this->db->join('customer_vehicle','customer_vehicle.customer_veh_id = bookings.customer_veh_id');
$this->db->join('customers','customers.customer_id = bookings.customer_id');
$this->db->where('transaction.id',$ref);
$bookData = $this->db->get()->row();
$subject = "DcarFixxers, Payment Successfull";
$email_id = $bookData->email;
$message = "<html>
<body>
Hi,\n\r Welcome to DcarFixxers. \r\n Your Payment for the vehicle ".$bookData->car_name." on date ".$bookData->scheduled_date." at ".$bookData->scheduled_time." for amount ".$bookData->cost." is Success
</body>
</html>";
$template = getNotifTemplate();
if(isset($template['success_booking']) && !empty($template['success_booking'])){
$message = str_replace(array('{:car_name}','{:book_date}','{:amount}'),array($bookData->car_name,$bookData->scheduled_date,$bookData->cost),$template['success_booking']);
}
send_mail($subject,$email_id,$message);
header("Location: http://localhost:4200/dashboard?status=success&tab=appointment&ref=".$ref);
}
}
?>
......@@ -95,4 +95,35 @@
$unique = md5(uniqid(time().mt_rand(), true));
return $unique;
}
function getNotifTemplate(){
$CI = & get_instance();
$settings = $CI->db->get('notification_templates');
return (!empty($settings))?$settings->row_array():'';
}
function send_mail($subject,$email,$message,$attach=null) {
$ci =& get_instance();
$ci->load->library('email');
$ci->email->initialize(array(
'protocol' => 'smtp',
'smtp_host' => 'smtp.sendgrid.net',
'smtp_user' => '[email protected]',
'smtp_pass' => 'Golden_123',
'smtp_port' => 587,
'crlf' => "\r\n",
'newline' => "\r\n"
));
$ci->email->from('[email protected]', 'DcarFixxers');
$ci->email->to($email);
$ci->email->cc('[email protected]');
$ci->email->subject($subject);
$ci->email->message($message);
$ci->email->set_mailtype('html');
if($attach != null) {
$ci->email->attach($attach);
}
return $ci->email->send();
}
?>
\ No newline at end of file
......@@ -17,17 +17,31 @@ class Booking_model extends CI_Model {
$vehData = $postData['vechile_info'];
$car_name = $vehData['modelYear'].' '.$vehData['maker'].' '.$vehData['modelName'];
$vehJson = array('vehicle' => $car_name,'attributes' =>
array('Year' => $vehData['modelYear'],
$vehJson = array('vehicle' => $car_name,
'attributes' => array(
'Year' => $vehData['modelYear'],
'Make' => $vehData['maker'],
'Trim' => $vehData['trim'],
'Model' => $vehData['modelName'],
'Engine' => $vehData['emgine']));
'Engine' => $vehData['emgine']
)
);
$last_date ='';
if(isset($vehData['lastMaintanceDate']) && !empty($vehData['lastMaintanceDate'])){
$last_date = $vehData['lastMaintanceDate'];
}else{
$last_date ='';
}
$last_maintanence_date ='';
if(isset($vehData['maintanenceInterval']) && !empty($vehData['maintanenceInterval'])){
$last_maintanence_date = $vehData['maintanenceInterval'];
}
$last_id = '';
if(isset($postData['customer_vehicle_id']) && !empty($postData['customer_vehicle_id'])){
$last_id = $postData['customer_vehicle_id'];
$this->db->update('customer_vehicle',array('last_maintenance_date'=>$last_date,'maintanence_interval'=>$last_maintanence_date),array('customer_veh_id'=>$postData['customer_vehicle_id']));
}
$insert_array = array('customer_id' => $postData['customer_id'],
'car_name' => $car_name,
'car_model' => $vehData['modelName'],
......@@ -36,8 +50,9 @@ class Booking_model extends CI_Model {
'car_loc_lng' => $postData['pickup_data']['pickup_lng'],
'car_location' => $postData['pickup_data']['pickup_loc'],
'vehicle_data' => json_encode($vehJson),
'car_model_year'=> $vehData['modelYear'],
'last_maintenance_date'=>$last_date,
'car_model_year' => $vehData['modelYear'],
'last_maintenance_date'=> $last_date,
'maintanence_interval' => (int)$last_maintanence_date,
'status' => '3');
$selected_issues = array();
......@@ -47,52 +62,103 @@ class Booking_model extends CI_Model {
'sub_issue_id' => $selIssue['sub_issue_id'],
'issue_category' => $selIssue['issue_category']);
}
if($this->db->insert('customer_vehicle',$insert_array)){
if(empty($last_id)){
$this->db->insert('customer_vehicle',$insert_array);
$last_id = $this->db->insert_id();
}
$book_data = array('cost' => $postData['cost'],
'mileage' => $vehData['milage'],
'customer_id' => $postData['customer_id'],
'mechanic_id' => $postData['mechanic_id'],
//'mechanic_id' => $postData['mechanic_id'],
'scheduled_date' => $postData['schedule_date']['date'],
'scheduled_time' => $postData['schedule_date']['time'],
'issues_selected' => json_encode($selected_issues),
'customer_veh_id' => $last_id,
'custom_issue_data'=> json_encode($postData['optionalData']),
'car_loc_lat' => $postData['pickup_data']['pickup_lat'],
'car_loc_lng' => $postData['pickup_data']['pickup_lng'],
'car_location' => $postData['pickup_data']['pickup_loc'],
'is_multiple' => (isset($postData['multiple']))?$postData['multiple']:0,
'status' => '0');
if($this->db->insert('bookings',$book_data)){
return 1;
$insertBookMech = array();
$book_id = $this->db->insert_id();
$mechanic_id = explode(',',$postData['mechanic_id']);
foreach ($mechanic_id AS $mech_id) {
$mech_amt = explode(':',$mech_id);
$insertBookMech[] = array('booking_id'=>$book_id,'mechanic_id'=>$mech_amt[0],'amount'=>$mech_amt[1],'status'=>'0');
}
if(!empty($insertBookMech)){
$this->db->insert_batch('mechanic_booking',$insertBookMech);
}
return 1;
}
return 0;
}
function getCustBookDetails($postData = array(), $status = ''){
$cond = array();
$where_cond = array();
if(empty($postData) || !isset($postData['customer_id']) || empty($postData['customer_id'])){
return 0;
}
$cond = "BK.customer_id='".$postData['customer_id']."' ";
$cond .= (!empty($status))?"AND BK.status IN (".$status.") ":'';
$sql = "SELECT BK.booking_id,BK.customer_id,BK.mechanic_id,BK.customer_veh_id,BK.scheduled_date,
BK.scheduled_time,BK.cost,BK.status,MECH.first_name,MECH.last_name,VEH.car_name,
BK.status
$sql = "SELECT BK.booking_id,BK.customer_id,BK.customer_veh_id,BK.scheduled_date,
BK.scheduled_time,BK.cost,BK.is_multiple,BK.status,VEH.car_name,VEH.car_maker,
VEH.car_model,VEH.car_model_year,BK.status
FROM bookings AS BK
INNER JOIN mechanic AS MECH ON (MECH.mechanic_id = BK.mechanic_id)
INNER JOIN customer_vehicle AS VEH ON (VEH.customer_veh_id = BK.customer_veh_id)
WHERE $cond
GROUP BY BK.booking_id";
$bookData = $this->db->query($sql);
if(empty($bookData)){
return 0;
}
if(!empty($bookData)){
return $bookData->result();
$bookDetails = array();
$bookData = $bookData->result();
foreach($bookData AS $book) {
$bookMechData=$this->db->query("SELECT * FROM mechanic_booking
WHERE booking_id='$book->booking_id' AND status!='2'");
if(!empty($bookMechData)){
$bookMechData = $bookMechData->result();
foreach ($bookMechData AS $mech_value) {
$mechanic_data = $this->db->query("
SELECT ROUND(AVG(MR.rate),2) AS rating,MCH.mechanic_id,MCH.first_name,
MCH.last_name,MCH.phone,CQ.custom_service_quote,MCH.location,
MCH.email_id,CQ.custom_amount,BK.status,BK.amount as mechanic_amount
FROM mechanic_booking AS BK
INNER JOIN mechanic MCH ON BK.mechanic_id=MCH.mechanic_id
INNER JOIN admin_users AU ON AU.id=MCH.mechanic_id
LEFT JOIN custom_quote CQ ON
CQ.mechanic_id=BK.mechanic_id AND
CQ.booking_id=BK.booking_id AND CQ.status='1'
LEFT JOIN mechanic_rating MR ON
MR.mechanic_id=BK.mechanic_id AND MR.status='1'
WHERE AU.status='1' AND BK.mechanic_id='$mech_value->mechanic_id' AND
BK.booking_id='$book->booking_id'");
if(!empty($mechanic_data)){
$mechData = $mechanic_data->row();
$mechData->custom_service_quote = json_decode($mechData->custom_service_quote);
$book->mechanic_data[] = $mechData;
$sTime = strtotime($book->scheduled_date.' '.$book->scheduled_time);
$cTime = strtotime('+1 hour');
if($cTime >= $sTime){
$book->status = '4';
}
return 0;
}
}
}
$bookDetails[] = $book;
}
return $bookDetails;
}
function changeBookStatus($customer_id = '', $booking_id = '', $status = ''){
......@@ -104,6 +170,27 @@ class Booking_model extends CI_Model {
array('status'=>$status),
array('customer_id'=>$customer_id,'booking_id'=>$booking_id));
$this->db->select('customer_vehicle.car_name,bookings.scheduled_date,bookings.scheduled_time,customers.email');
$this->db->from('bookings');
$this->db->join('customer_vehicle','customer_vehicle.customer_veh_id = bookings.customer_veh_id');
$this->db->join('customers','customers.customer_id = bookings.customer_id');
$this->db->where('bookings.booking_id',$booking_id);
$bookData = $this->db->get()->row();
$subject = "DcarFixxers, Cancel Booking";
$email_id = $bookData->email;
$message = "<html>
<body>
Hi,\n\r Welcome to DcarFixxers. \r\n Your booking for the vehicle ".$bookData->car_name." on date ".$bookData->scheduled_date." at ".$bookData->scheduled_time." is Cancelled.
</body>
</html>";
$template = getNotifTemplate();
if(isset($template['cancel_booking']) && !empty($template['cancel_booking'])){
$message = str_replace(array('{:car_name}','{:book_date}'),array($bookData->car_name,$bookData->scheduled_date),$template['cancel_booking']);
}
send_mail($subject,$email_id,$message);
return $status;
}
......@@ -114,27 +201,62 @@ class Booking_model extends CI_Model {
$cond = " BK.status IN (".$status.") ";
$cond .= (!empty($booking_id))?" AND BK.booking_id='".$booking_id."' ":"";
$cond .= (!empty($mechanic_id))?" AND BK.mechanic_id='".$mechanic_id."' ":"";
$sql = "SELECT BK.booking_id,BK.customer_id,BK.mechanic_id,BK.customer_veh_id,BK.scheduled_date,
BK.scheduled_time,BK.cost,BK.status,BK.mileage,BK.issues_selected,VEH.car_name,
BK.custom_issue_data,MECH.first_name AS mechFirstName,VEH.car_model,
MECH.last_name AS mechLastName,VEH.car_maker,VEH.car_model_year,VEH.car_vin,
VEH.vehicle_data,VEH.car_location,VEH.car_loc_lat,VEH.car_loc_lng,
CUST.first_name AS custFirstName,CUST.last_name AS custLastName,CUST.phone,
CUST.email,CUST.address,CUST.profile_image,CUST.date_of_birth,CUSQTE.custom_id
$cond .= (!empty($mechanic_id))?" AND MBK.mechanic_id='".$mechanic_id."' ":"";
$sql = "SELECT GROUP_CONCAT(DISTINCT(MBK.mechanic_id)) AS mechanic_ids,BK.booking_id,BK.customer_id,
BK.customer_veh_id,BK.scheduled_date,BK.scheduled_time,BK.cost,BK.status,BK.mileage,
BK.issues_selected,VEH.car_name,BK.custom_issue_data,VEH.car_model,VEH.car_maker,
VEH.car_model_year,VEH.car_vin,VEH.vehicle_data,BK.car_location,BK.car_loc_lat,
BK.car_loc_lng,CUST.first_name AS custFirstName,CUST.last_name AS custLastName,CUST.phone,
CUST.email,CUST.address,CUST.profile_image,CUST.date_of_birth,CUSQTE.custom_id,
MBK.status AS mech_status
FROM bookings AS BK
INNER JOIN mechanic AS MECH ON (MECH.mechanic_id=BK.mechanic_id)
INNER JOIN mechanic_booking AS MBK ON (MBK.booking_id=BK.booking_id)
INNER JOIN customers AS CUST ON (CUST.customer_id=BK.customer_id)
INNER JOIN admin_users AS ADM ON (ADM.id=BK.mechanic_id)
INNER JOIN admin_users AS ADM ON (ADM.id=MBK.mechanic_id)
INNER JOIN customer_vehicle AS VEH ON (VEH.customer_veh_id=BK.customer_veh_id)
LEFT JOIN custom_quote AS CUSQTE on (CUSQTE.booking_id = BK.booking_id)
LEFT JOIN custom_quote AS CUSQTE on (CUSQTE.booking_id = BK.booking_id
AND CUSQTE.mechanic_id=MBK.mechanic_id)
WHERE $cond AND ADM.status='1' AND CUST.status='1'
GROUP BY BK.booking_id";
$bookData = $this->db->query($sql);
if(!empty($bookData)){
$bookData = (!empty($booking_id))?$bookData->row():$bookData->result();
if(empty($booking_id)){
return $bookData->result();
}
$bookedMechanics = array();
$bookData = $bookData->row();
if(!empty($bookData->mechanic_ids)){
$mechanics = explode(',',$bookData->mechanic_ids);
foreach ($mechanics AS $mech_id) {
$mechanic_data = $this->db->query("
SELECT ROUND(AVG(MR.rate),2) AS rating,MCH.mechanic_id,MCH.first_name,
MCH.last_name,MCH.phone,CQ.custom_service_quote,MCH.location,
MCH.email_id,CQ.custom_amount,
CASE
WHEN BK.status = '0' THEN 'Pending'
WHEN BK.status = '1' THEN 'Accept'
ELSE 'Reject' END as status
FROM mechanic_booking AS BK
INNER JOIN mechanic MCH ON BK.mechanic_id=MCH.mechanic_id
INNER JOIN admin_users AU ON AU.id=MCH.mechanic_id
LEFT JOIN custom_quote CQ ON
CQ.mechanic_id=BK.mechanic_id AND
CQ.booking_id=BK.booking_id AND CQ.status='1'
LEFT JOIN mechanic_rating MR ON
MR.mechanic_id=BK.mechanic_id AND MR.status='1'
WHERE AU.status='1' AND BK.mechanic_id='$mech_id' AND BK.booking_id='$booking_id'");
if(!empty($mechanic_data)){
$mechData = $mechanic_data->row();
$mechData->custom_service_quote = json_decode($mechData->custom_service_quote);
$bookedMechanics[] = $mechData;
}
}
$bookData->mechanic_data = $bookedMechanics;
}
// pr($bookData);
return $bookData;
}
return 0;
......@@ -144,17 +266,47 @@ class Booking_model extends CI_Model {
if(empty($booking_id)){
return 0;
}
$status=$this->db->update('bookings',array('status'=>$status),array('booking_id'=>$booking_id));
if($this->session->userdata('user_type')==1){
if($status == '1'){
$status=$this->db->update('bookings',array('status'=>'0'),array('booking_id'=>$booking_id));
}
else if($status == '4'){
$status=$this->db->update('bookings',array('status'=>'4'),array('booking_id'=>$booking_id));
}
else if($status == '2'){
$this->db->update('bookings',array('status'=>'2'),array('booking_id'=>$booking_id));
}
}else{
$id = $this->session->userdata('id');
if($status == '4'){
$this->db->update('mechanic_booking',
array('status'=>'2'),
array('booking_id'=>$booking_id,'mechanic_id'=> $id));
}
else if($status == '1'){
$this->db->update('mechanic_booking',
array('status'=>'1'),
array('booking_id'=>$booking_id,'mechanic_id'=> $id));
}
else if($status == '2'){
$this->db->update('mechanic_booking',
array('status'=>'2'),
array('booking_id'=>$booking_id,'mechanic_id'=> $id));
}
}
return $status;
}
function insertCustomQuote($data){
$custData = array();$total=0;
$book_id = decode_param($data['booking_id']);
$mechanic_id = ($this->session->userdata('user_type')==2)?$this->session->userdata('id'):'';
unset($data['booking_id']);
for($i=0 ; $i < count($data['description']);$i++){
$custData[$i]['issue_id']=$data['issue_id'][$i];
$custData[$i]['sub_issue_id']=$data['sub_issue_id'][$i];
$custData[$i]['issue_category']=$data['issue_category'][$i];
$custData[$i]['description']=$data['description'][$i];
$custData[$i]['amount']=$data['amount'][$i];
$total += $data['amount'][$i];
......@@ -162,10 +314,10 @@ class Booking_model extends CI_Model {
$book_data = $this->db->get_where('custom_quote',array('booking_id'=>$book_id));
if(!empty($book_data) && $book_data->num_rows() > 0){
$this->db->update('custom_quote',array('custom_service_quote'=>json_encode($custData),'custom_amount'=>$total),array('booking_id'=>$book_id));
$this->db->update('custom_quote',array('custom_service_quote'=>json_encode($custData),'mechanic_id'=>$mechanic_id,'custom_amount'=>$total),array('booking_id'=>$book_id));
$res = array('status'=>'success');
}else{
if($this->db->insert('custom_quote',array('booking_id'=>$book_id,'custom_service_quote'=>json_encode($custData),'custom_amount'=>$total))){
if($this->db->insert('custom_quote',array('booking_id'=>$book_id,'mechanic_id'=>$mechanic_id,'custom_service_quote'=>json_encode($custData),'custom_amount'=>$total))){
$last_id = $this->db->insert_id();
$res = array('status'=>'success','data'=>encode_param($last_id));
}
......
......@@ -50,6 +50,23 @@ class Customer_model extends CI_Model {
$this->db->query("UPDATE customer_vehicle SET status='1',customer_id='$cust_id'
WHERE customer_veh_id IN ($saved_vehicles)");
}
$subject = "DcarFixxers,Activation Mail";
$email_id = $customer_data['email'];
//$reset_link = 'https://projects.nuvento.com/admin/Api/verifyMail/'.$unique_id;
$message = "<html>
<body>
Hi,\n\r Welcome to DcarFixxers. \r\n Your account for the Username ".$email_id." is now Activated.
</body>
</html>";
$template = getNotifTemplate();
if(isset($template['customer_registration_mail']) && !empty($template['customer_registration_mail'])){
$message = str_replace(array('{:email}'),array($email_id),$template['customer_registration_mail']);
}
send_mail($subject,$email_id,$message);
$res = array('status'=>1,'data'=>'');
return ($status)?1:0;;
}
......
......@@ -130,8 +130,26 @@ class Mechanic_model extends CI_Model {
if(empty($mechanic_id)){
return 0;
}
$status = $this->db->update('admin_users',array('status'=>$status),array('id'=>$mechanic_id));
return $status;
$resp = $this->db->update('admin_users',array('status'=>$status),array('id'=>$mechanic_id));
if($status == '1'){
$mechData = $this->db->get_where('mechanic',array(' mechanic_id'=>$mechanic_id))->row();
$subject = "DcarFixxers, Activation Mail";
$email_id = $mechData->email_id;
$message = "<html>
<body>
Hi,\n\r Welcome to DcarFixxers. \r\n Your account for the Username ".$email_id." is now Activated.
</body>
</html>";
$template = getNotifTemplate();
if(isset($template['mechanic_activation_mail']) && !empty($template['mechanic_activation_mail'])){
$message = str_replace(array('{:user_name}'),array($email_id),$template['mechanic_activation_mail']);
}
send_mail($subject,$email_id,$message);
$res = array('status'=>1,'data'=>'');
}
return $resp;
}
function getNearByMechanics($location_data = array(),$sub_issues = array()){
......@@ -150,9 +168,9 @@ class Mechanic_model extends CI_Model {
POWER(SIN(($current_lng-ME.location_lng)*pi()/180/2),2) )) AS distance
FROM mechanic AS ME
INNER JOIN admin_users AS AU ON (AU.id=ME.mechanic_id)
LEFT JOIN mechanic_rating AS MR ON (MR.mechanic_id=ME.mechanic_id)
LEFT JOIN mechanic_shop AS MS ON (MS.shop_id=ME.shop_id AND MS.status='1')
WHERE AU.status='1'
-- GROUP BY ME.mechanic_id
-- HAVING distance<30";
$mechData = $this->db->query($sql);
......
......@@ -513,6 +513,7 @@ class Webservice_model extends CI_Model {
$respArr['message'] = 'Sorry, You are already Rated for this mechanic';
return $respArr;
}
$postData['status'] = '1';
if($this->db->insert('mechanic_rating',$postData)){
$respArr['status'] = 'success';
$respArr['message'] = 'success';
......@@ -520,5 +521,66 @@ class Webservice_model extends CI_Model {
return $respArr;
}
public function acceptMechanicQuote($postData){
$respArr = array('status'=>'error','message'=>'Something went Wrong.. Try Again');
if(empty($postData['bookingId'])){
$respArr['message'] = 'Booking Id is Required';
return $respArr;
}
if(empty($postData['mechanicId'])){
$respArr['message'] = 'Mechanic Id is Required';
return $respArr;
}
if(empty($postData['amount'])){
$respArr['message'] = 'Amount is Required';
return $respArr;
}
if($this->db->update('mechanic_booking',array('status'=>'1'),array('booking_id'=>$postData['bookingId'],'mechanic_id'=>$postData['mechanicId']))){
$this->db->update('mechanic_booking',array('status'=>'2'),array('booking_id'=>$postData['bookingId'],'mechanic_id !='=>$postData['mechanicId']));
$this->db->update('bookings',array('status'=>'5','cost'=>$postData['amount']),array('booking_id'=>$postData['bookingId']));
}
$book_data = $this->db->get_where('bookings',array('booking_id'=>$postData['bookingId']))->row();
$transaction_array = array(
'customer_id'=>$book_data->customer_id,
'booking_id'=>$postData['bookingId'],
'datetime'=>date('Y-m-d h:i:s'),
'amount'=>$postData['amount']
);
$this->db->insert('transaction',$transaction_array);
$respArr['data'] = $this->db->insert_id();
$respArr['status'] = 'success';
$respArr['message'] = 'Updated Successfully';
return $respArr;
}
public function getMechAmount($transId){
$respArr = array('status'=>'error');
if(empty($transId)){
return $respArr;
}
$result = $this->db->get_where('transaction',array('id'=>$transId));
if(!empty($result) && $result->num_rows() > 0){
$result = $result->row_array();
$respArr['status'] = 'success';
$respArr['data'] = $result;
}
$custData = $this->db->get_where('customers',array('customer_id'=>$result['customer_id']))->row();
$respArr['emailId'] = $custData->email;
return $respArr;
}
public function transactionResp($transId,$result){
$status = 0;
if($result['data']['status'] == 'success'){
$status = 1;
}
$this->db->update('transaction',array('transaction_response'=>json_encode($result),'transaction_reference'=>$result['data']['id'],'status'=>$status),array('id'=>$transId));
$bookData = $this->db->get_where('transaction',array('id'=>$transId))->row();
$this->db->update('bookings',array('status'=>'1'),array('booking_id'=>$bookData->booking_id));
return 1;
}
}
?>
......@@ -69,7 +69,7 @@
<tr>
<th class="hidden">ID</th>
<th width="18%;">Car Name</th>
<th width="12%;">Mechanic</th>
<!-- <th width="12%;">Mechanic</th> -->
<th width="12%;">Customer</th>
<th width="15%;">Scheduled Date</th>
<th width="11%;">Service Fee</th>
......@@ -84,7 +84,6 @@
<tr>
<th class="hidden"><?= $bookData->booking_id ?></th>
<th class="center"><?= $bookData->car_name ?></th>
<th class="center"><?= $bookData->mechFirstName.' '.$bookData->mechLastName ?></th>
<th class="center"><?= $bookData->custFirstName.' '.$bookData->custLastName ?></th>
<th class="center">
<?= $bookData->scheduled_date.' '.$bookData->scheduled_time ?>
......@@ -92,40 +91,61 @@
<th class="center"><?= $bookData->cost ?></th>
<th class="center">
<?php
if($this->session->userdata['user_type'] == 1 ){
switch($bookData->status){
case 0: echo 'Pending'; break;
case 1: echo 'Accepted'; break;
case 3: echo 'Completed'; break;
case 4: echo 'Cancelled'; break;
}
} else {
switch($bookData->mech_status){
case 0: echo 'Pending'; break;
case 1: echo 'Accepted'; break;
case 2: echo 'Rejected'; break;
}
}
?>
</th>
<td class="center float-right">
<td class="center">
<button class="btn btn-sm btn-primary" booking_id="<?= encode_param($bookData->booking_id) ?>" id="showBookinDetails">
<i class="fa fa-fw fa-edit"></i>View Quote
</button>
<?php if($bookData->status == 1){ ?>
<?php if($this->session->userdata['user_type'] == 1){
if($bookData->status == 0 || $bookData->status == 1){ ?>
<a class="btn btn-sm btn-success" style="background-color:#ac2925" href="<?= base_url("Bookings/changeBookingStatus/".encode_param($bookData->booking_id)."/4/".encode_param($mechanic_id)) ?>">
<i class="fa fa-cog"></i> Cancel
</a>
<?php } ?>
<?php if($bookData->status == 0 || $bookData->status == 4){ ?>
<?php } if($bookData->status == 4 ){ ?>
<a class="btn btn-sm btn-success" href="<?= base_url("Bookings/changeBookingStatus/".encode_param($bookData->booking_id)."/1/".encode_param($mechanic_id)) ?>">
<i class="fa fa-cog"></i> Accept
</a>
<?php } ?>
<?php }
} else {
if($bookData->mech_status == 0 || $bookData->mech_status == 1){ ?>
<a class="btn btn-sm btn-success" style="background-color:#ac2925" href="<?= base_url("Bookings/changeBookingStatus/".encode_param($bookData->booking_id)."/4/".encode_param($mechanic_id)) ?>">
<i class="fa fa-cog"></i> Cancel
</a>
<?php } if($bookData->mech_status == 2 || $bookData->mech_status == 0){ ?>
<a class="btn btn-sm btn-success" href="<?= base_url("Bookings/changeBookingStatus/".encode_param($bookData->booking_id)."/1/".encode_param($mechanic_id)) ?>">
<i class="fa fa-cog"></i> Accept
</a>
<?php }
} ?>
<a class="btn btn-sm btn-danger"
href="<?= base_url("Bookings/changeBookingStatus/".encode_param($bookData->booking_id)."/2/".encode_param($mechanic_id))?>"
onClick="return doconfirm()">
<i class="fa fa-fw fa-trash"></i>Delete
</a>
<?php if($bookData->custom_id == ''){
if($this->session->userdata['user_type'] != 1 ){
?>
if($this->session->userdata['user_type'] != 1 ){ ?>
<button class="btn btn-sm btn-primary" style="margin-top:3px;" booking_id="<?= encode_param($bookData->booking_id) ?>" id="customQuote" view="0">
<i class="fa fa-fw fa-edit"></i><span>Generate Custom Quote</span>
</button>
<?php } } else{ ?>
<?php } ?>
<?php } else { ?>
<button class="btn btn-sm btn-primary" style="margin-top:3px;" booking_id="<?= encode_param($bookData->custom_id) ?>" id="customQuote" view="1">
<i class="fa fa-fw fa-edit"></i><span>View Custom Quote</span>
</button>
......
......@@ -16,13 +16,22 @@
<script src="<?= base_url('assets/js/app.min.js') ?>"></script>
<script src="<?= base_url('assets/js/custom-script.js') ?>"></script>
<script src="<?= base_url('assets/js/parsley.min.js') ?>"></script>
<script src="<?= base_url('assets/js/ckeditor.js') ?>"></script>
<script src="https://cdn.ckeditor.com/4.5.7/standard/ckeditor.js"></script>
<script src="<?= base_url('assets/js/bootstrap-datepicker.js') ?>"></script>
<script src="<?= base_url('assets/js/clockpicker.js') ?>" type="text/javascript"></script>
<script>
jQuery('.clockpicker').clockpicker();
jQuery( document ).ready(function() {
if(jQuery('#rich_editor').length==1){ CKEDITOR.replace('rich_editor'); }
if(jQuery('#rich_editor1').length==1){CKEDITOR.replace('rich_editor1'); }
if(jQuery('#rich_editor_2').length==1){CKEDITOR.replace('rich_editor_2');}
if(jQuery('#rich_editor_3').length==1){CKEDITOR.replace('rich_editor_3');}
if(jQuery('#rich_editor_4').length==1){CKEDITOR.replace('rich_editor_4');}
if(jQuery('#rich_editor_5').length==1){CKEDITOR.replace('rich_editor_5');}
});
function doconfirm(){
action = confirm("Are you sure to delete permanently?");
if(action != true) return false;
......@@ -52,7 +61,7 @@
jQuery(function () {
jQuery('.datatable').DataTable({
"ordering" : jQuery(this).data("ordering"),
"order": [[ 0, "asc" ]]
"order": [[ 0, "desc" ]]
});
});
<?php //} ?>
......
......@@ -23,5 +23,5 @@
<div class="pull-right hidden-xs">
<b>Version</b> 1.0
</div>
<strong>Copyright &copy; 2015-2016 <a href="#">Techware Solution</a>.</strong> All rights reserved.
<strong>Copyright &copy; <?= date('Y')?> - <?= date('Y')+1?> <a href="#">CarFixxers</a>.</strong> All rights reserved.
</footer>
\ No newline at end of file
......@@ -43,7 +43,7 @@
<li class="treeview">
<a href="#">
<i class="fa fa-bars" aria-hidden="true"></i>
<span>Issue Management</span>
<span>Service Orders</span>
<i class="fa fa-angle-left pull-right"></i>
</a>
<ul class="treeview-menu">
......@@ -118,11 +118,58 @@
</li>
</ul>
</li>
<li>
<a href="<?= base_url('Mailtemplate') ?>"><i class="fa fa-book" aria-hidden="true">
</i><span>Mail Template</span></a>
</li>
<?php } ?>
<li>
<a href="<?= base_url('Bookings/listBookings') ?>"><i class="fa fa-book" aria-hidden="true">
</i><span>Request Management</span></a>
</li>
<li class="treeview">
<a href="#">
<i class="fa fa-bars" aria-hidden="true"></i>
<span>Product Management</span>
<i class="fa fa-angle-left pull-right"></i>
</a>
<ul class="treeview-menu">
<li>
<a href="<?= base_url('Product/addProduct') ?>">
<i class="fa fa-circle-o text-aqua"></i>
Add New Product
</a>
</li>
<li>
<a href="<?= base_url('Product/viewProduct') ?>">
<i class="fa fa-circle-o text-aqua"></i>
View All Product
</a>
</li>
</ul>
</li>
<li class="treeview">
<a href="#">
<i class="fa fa-bars" aria-hidden="true"></i>
<span>Brand Management</span>
<i class="fa fa-angle-left pull-right"></i>
</a>
<ul class="treeview-menu">
<li>
<a href="<?= base_url('Brand/addBrand') ?>">
<i class="fa fa-circle-o text-aqua"></i>
Add New Brand
</a>
</li>
<li>
<a href="<?= base_url('Brand/viewBrand') ?>">
<i class="fa fa-circle-o text-aqua"></i>
View All Brand
</a>
</li>
</ul>
</li>
<?php if($this->session->userdata['user_type'] == 1){ ?>
<li><a href="<?= base_url('Settings') ?>">
<i class="fa fa-wrench" aria-hidden="true">
......
......@@ -500,6 +500,70 @@
border: 1px solid red !important;
}
.dropZoneContainer{
position: relative;
display: inline-block;
}
.close_custom{
position: absolute;
width: 17px;
height: 17px;
text-align: center;
background: #000;
font-size: 13px;
top: -5px;
right: -1px;
color: #fff;
border-radius: 50%;
z-index: 99;
}
.dropZoneOverlay, .FileUpload {
width: 250px;
height: 250px;
}
.multiDropZoneOverlay, .multiFileUpload {
width: 50px;
height: 50px;
}
.dropZoneOverlay {
border: dotted 1px;
font-family: cursive;
color: #040404;
text-align: center;
position: absolute;
top:0px;
left:0px;
right:0px;
}
.multiDropZoneOverlay {
border: dotted 1px;
font-family: cursive;
color: #040404;
text-align: center;
position: absolute;
top:0px;
left:0px;
right:0px;
}
.FileUpload {
opacity: 0;
position: relative;
z-index: 1;
}
.multiFileUpload {
opacity: 0;
position: relative;
z-index: 1;
}
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
-webkit-appearance: none;
......@@ -507,3 +571,7 @@
appearance: none;
margin: 0;
}
.errorBorder {
border: 1px solid #ff0000 !important;
}
......@@ -13,6 +13,28 @@ function setImg(input,id) {
}
}
function setMultiImg(input,thisObj){
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
var count = thisObj.attr('count');
thisObj.attr('count',count+1);
jQuery('[id="multipleImageInputCntr"]').append(jQuery('[id="multipleImageInput"]').html().replace(/{:count}/g,count+1));
thisObj.addClass('prevent-click');
jQuery('[id="multiImageClose_'+count+'"]').removeClass('hide');
jQuery('[id="multiImageImg_'+count+'"]').attr('src', e.target.result);
jQuery('[id^="multiImageImg_"]').removeClass('errorBorder');
};
reader.readAsDataURL(input.files[0]);
}
}
function removeImage(count){
jQuery('[id="multiImageCntr_'+count+'"]').remove();
}
function setModal(header_msg,body_msg){
jQuery('[id="modal_body_msg"]').html(body_msg);
jQuery('[id="modal_header_msg"]').html(header_msg);
......@@ -830,7 +852,8 @@ function customQuote(thisObj){
'</div>'+
'<input type="hidden" name="issue_id[]" value="'+value['issue_id']+'">'+
'<input type="hidden" name="sub_issue_id[]" value="'+value['sub_issue_id']+'">'+
'</div>';
'</div>'+
'<input type="hidden" name="issue_category[]" value="'+value['issue_category']+'">';
});
issueHtml += '<input type="hidden" id="array_count" name="count" value="'+issues_selected.length+'">'+
'</div>'+
......@@ -1113,11 +1136,6 @@ jQuery('[id="showBookinDetails"]').on('click',function() {
'<div class="col-md-6"><label>'+booking_data['custFirstName']+' '+booking_data['custLastName']+'</label></div>'+
'</div> '+
'<div class="row">'+
'<div class="col-md-4">Mechanic</div>'+
'<div class="col-md-1">:</div>'+
'<div class="col-md-6"><label>'+booking_data['mechFirstName']+' '+booking_data['mechLastName']+'</label></div>'+
'</div> '+
'<div class="row">'+
'<div class="col-md-4">Current Milage</div>'+
'<div class="col-md-1">:</div>'+
'<div class="col-md-6"><label>'+booking_data['mileage']+'</label></div>'+
......@@ -1165,7 +1183,26 @@ jQuery('[id="showBookinDetails"]').on('click',function() {
'<div class="col-md-1">:</div>'+
'<div class="col-md-6"><label>'+booking_data['car_location']+'</label></div>'+
'</div> '+
'</div> '+issueHtml+optionalHtml+
'</div> '+issueHtml+
'<div class="col-md-12"> '+
'<div class="row"><label>Mechanic Details</label></div>'+
'<div class="col-md-3"><div class="row"><label>Mechanic Name</label></div></div>'+
'<div class="col-md-3"><div class="row"><label>Amount</label></div></div>'+
'<div class="col-md-2"><div class="row"><label>status</label></div></div>'+
'<div class="row">';
jQuery.each(booking_data['mechanic_data'], function (index1, value1) {
if(value1['custom_amount'] == '' || value1['custom_amount'] == null || value1['custom_amount'] == undefined || value1['custom_amount'] == 'null' || value1['custom_amount'] == 'undefined'){
value1['custom_amount'] = booking_data['cost'];
}
html+= '<div class="col-md-12">'+
'<div class="col-md-3">'+value1['first_name']+' '+value1['last_name']+'</div>'+
'<div class="col-md-3">'+value1['custom_amount']+'</div>'+
'<div class="col-md-2">'+value1['status']+'</div>'+
'</div>';
});
html+= '</div>'+
'</div>'+
optionalHtml+
'</div>';
remModalLoader();
......@@ -1185,3 +1222,19 @@ jQuery('[id="showBookinDetails"]').on('click',function() {
}
});
});
jQuery('[id="addProductButton"]').on('click',function(event) {
event.preventDefault();
var validation = jQuery('[name="productAddForm"]').parsley().validate();
var error = 0;
var count = jQuery('[id="multipleImageInputCntr"]').children().first().attr('count');
if(jQuery('[id="product_image_'+count+'"]').val() == ''){
error = 1;
jQuery('[id="multiImageImg_'+count+'"]').addClass('errorBorder');
}
if(validation && error == 0){
jQuery('[name="productAddForm"]').submit();
}
});
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment