db->select('count(id) as count'); $this->db->from('pelanggan'); return $this->db->get(); } public function check_phone_number($number) { $cek = $this->db->query("SELECT id FROM pelanggan where phone='$number'"); if ($cek->num_rows() == 1) { return true; } else { return false; } } public function check_exist($email, $phone) { $cek = $this->db->query("SELECT id FROM pelanggan where email = '$email' AND no_telepon='$phone'"); if ($cek->num_rows() == 1) { return true; } else { return false; } } public function check_exist_phone($phone) { $cek = $this->db->query("SELECT id FROM pelanggan where no_telepon='$phone'"); if ($cek->num_rows() == 1) { return true; } else { return false; } } public function check_exist_phone_edit($id, $phone) { $cek = $this->db->query("SELECT no_telepon FROM pelanggan where no_telepon='$phone' AND id!='$id'"); if ($cek->num_rows() == 1) { return true; } else { return false; } } public function check_exist_email($email) { $cek = $this->db->query("SELECT id FROM pelanggan where email='$email'"); if ($cek->num_rows() == 1) { return true; } else { return false; } } public function check_exist_email_edit($id, $email) { $cek = $this->db->query("SELECT id FROM pelanggan where email='$email' AND id!='$id'"); if ($cek->num_rows() == 1) { return true; } else { return false; } } public function check_banned($phone) { $stat = $this->db->query("SELECT id FROM pelanggan WHERE status='3' AND no_telepon='$phone'"); if ($stat->num_rows() == 1) { return true; } else { return false; } } public function get_data_pelanggan($condition) { $this->db->select('pelanggan.*, saldo.saldo'); $this->db->from('pelanggan'); $this->db->join('saldo', 'pelanggan.id = saldo.id_user'); $this->db->where($condition); return $this->db->get(); } public function signup($data_signup) { $signup = $this->db->insert('pelanggan', $data_signup); $dataIns = array( 'id_user' => $data_signup['id'], 'saldo' => 0 ); $insSaldo = $this->db->insert('saldo', $dataIns); return $signup; } public function edit_profile($data, $email) { $this->db->where('no_telepon', $email); $this->db->update('pelanggan', $data); return true; } public function check_password($condition) { $this->db->select('id'); $this->db->from('pelanggan'); $this->db->where($condition); $cek = $this->db->get(); if ($cek->num_rows() > 0) { return true; } else { return false; } } function emailsend($subject, $emailuser, $content, $host, $port, $username, $password, $from, $appname, $secure) { require APPPATH . '/libraries/class.phpmailer.php'; $mail = new PHPMailer; $mail->IsSMTP(); $mail->SMTPSecure = $secure; $mail->Host = $host; //host masing2 provider email $mail->SMTPDebug = 0; $mail->Port = $port; $mail->SMTPAuth = true; $mail->Username = $username; //user email $mail->Password = $password; //password email $mail->SetFrom($from, $appname); //set email pengirim $mail->Subject = $subject; //subyek email $mail->AddAddress($emailuser, "User"); //tujuan email $mail->MsgHTML($content); //pesan dapat berupa html $mail->Send(); return true; } public function get_settings() { $this->db->select('*'); $this->db->from('app_settings'); $this->db->where('id', '1'); return $this->db->get()->result_array(); } public function dataforgot($forgotpass) { $forgot = $this->db->insert('forgot_password', $forgotpass); return $forgot; } public function sliderhome() { $this->db->select('*'); $this->db->from('promosi'); $this->db->join('fitur', 'promosi.fitur_promosi = fitur.id_fitur', 'left'); $this->db->where('is_show', '1'); $this->db->where('tanggal_berakhir>', date("Y-m-d")); return $this->db->get()->result_array(); } public function fiturhome() { $this->db->select('*'); $this->db->from('fitur'); $this->db->where('active', '1'); $this->db->order_by('id_fitur ASC'); $this->db->limit('7'); return $this->db->get()->result_array(); } public function fiturhomeall() { $this->db->select('*'); $this->db->from('fitur'); $this->db->where('active', '1'); $this->db->order_by('id_fitur ASC'); return $this->db->get()->result_array(); } public function beritahome() { $this->db->select('*'); $this->db->from('berita'); $this->db->join('kategori_news', 'berita.id_kategori = kategori_news.id_kategori_news', 'left'); $this->db->order_by('id_berita DESC'); $this->db->limit('4'); $this->db->where('status_berita', 1); return $this->db->get()->result_array(); } public function allberita() { $this->db->select('*'); $this->db->from('berita'); $this->db->join('kategori_news', 'berita.id_kategori = kategori_news.id_kategori_news', 'left'); $this->db->order_by('id_berita DESC'); $this->db->where('status_berita', 1); return $this->db->get()->result_array(); } public function beritadetail($id) { $this->db->select('*'); $this->db->from('berita'); $this->db->join('kategori_news', 'berita.id_kategori = kategori_news.id_kategori_news', 'left'); $this->db->where('id_berita', $id); $this->db->order_by('id_berita DESC'); return $this->db->get(); } public function ratinghome() { $this->db->select('rating_driver.*, pelanggan.*'); $this->db->from('rating_driver'); $this->db->where('rating_driver.rating != 0'); $this->db->where('rating_driver.rating != 1'); $this->db->where('rating_driver.rating != 2'); $this->db->where('rating_driver.rating != 3'); $this->db->join('pelanggan', 'rating_driver.id_pelanggan = pelanggan.id', 'left'); $this->db->order_by('rating_driver.nomor DESC'); $this->db->limit('3'); return $this->db->get()->result_array(); } public function saldouser($id) { $this->db->select('saldo'); $this->db->from('saldo'); $this->db->where('id_user', $id); $saldo = $this->db->get(); return $saldo; } public function getwallet($id) { $this->db->select('*'); $this->db->from('wallet'); $this->db->where('id_user', $id); $this->db->order_by('id', 'DESC'); return $this->db->get(); } public function tambahsaldo($id, $data) { $this->db->where('id_user', $id); $this->db->update('saldo', $data); return true; } public function insertwallet($data_withdraw) { $verify = $this->db->insert('wallet', $data_withdraw); return true; } /** * Get nearby drivers for ride: purely by GPS distance, no region/wilayah. * Uses config_driver (driver's real-time lat/long from app) and user (lat, lng). * Optional $radius_km (1–100): when set, used as search radius; else fitur.jarak_minimum with min 10 km. * Optimized: bounding-box pre-filter + Haversine + LIMIT 50. */ public function get_driver_ride($lat, $lng, $fitur, $radius_km = null) { $url_foto = base_url() . 'images/fotodriver/'; $lat = (float) $lat; $lng = (float) $lng; $fitur = (int) $fitur; if ($radius_km !== null && $radius_km > 0) { $radius_km = max(1, min(100, (float) $radius_km)); } $box_km = isset($radius_km) ? $radius_km : 50; $delta_lat = $box_km / 111.0; $cos_lat = max(0.01, cos(deg2rad($lat))); $delta_lng = $box_km / (111.0 * $cos_lat); $lat_min = $lat - $delta_lat; $lat_max = $lat + $delta_lat; $lng_min = $lng - $delta_lng; $lng_max = $lng + $delta_lng; $having_radius = isset($radius_km) ? (float) $radius_km : 'GREATEST(COALESCE(f.jarak_minimum, 10), 10)'; $result = $this->db->query(" SELECT f.jarak_minimum, f.wallet_minimum, d.id as id, d.nama_driver, ld.latitude, ld.longitude, ld.bearing, ld.update_at, k.merek, k.nomor_kendaraan, k.warna, k.tipe, s.saldo, d.no_telepon, CONCAT('$url_foto', d.foto, '') as foto, d.reg_id, dj.driver_job, (6371 * acos(cos(radians($lat)) * cos(radians(ld.latitude)) * cos(radians(ld.longitude) - radians($lng)) + sin(radians($lat)) * sin(radians(ld.latitude)))) AS distance FROM config_driver ld, driver d, driver_job dj, kendaraan k, saldo s, fitur f WHERE ld.id_driver = d.id AND f.id_fitur = $fitur AND ld.status = '1' AND dj.id = d.job AND d.job = f.driver_job AND d.status = '1' AND k.id_k = d.kendaraan AND s.id_user = d.id AND s.saldo > f.wallet_minimum AND ld.latitude BETWEEN $lat_min AND $lat_max AND ld.longitude BETWEEN $lng_min AND $lng_max HAVING distance <= $having_radius ORDER BY distance ASC LIMIT 50"); $count = $result->num_rows(); log_message('debug', 'get_driver_ride: fitur=' . $fitur . ' lat=' . $lat . ' lng=' . $lng . ' drivers_found=' . $count); if ($count === 0) { $this->log_driver_diagnostic('ride', $lat, $lng, $fitur, $lat_min, $lat_max, $lng_min, $lng_max, $radius_km); } return $result; } /** * Diagnostic logging when 0 drivers found: counts online drivers, in-box, by job, etc. */ private function log_driver_diagnostic($type, $lat, $lng, $fitur, $lat_min, $lat_max, $lng_min, $lng_max, $radius_km) { $r_online = $this->db->query("SELECT COUNT(*) as c FROM config_driver WHERE status='1'")->row(); $cnt_online = $r_online ? (int) $r_online->c : 0; $r_box = $this->db->query("SELECT COUNT(*) as c FROM config_driver ld JOIN driver d ON ld.id_driver=d.id WHERE ld.status='1' AND d.status='1' AND ld.latitude BETWEEN " . (float)$lat_min . " AND " . (float)$lat_max . " AND ld.longitude BETWEEN " . (float)$lng_min . " AND " . (float)$lng_max)->row(); $cnt_in_box = $r_box ? (int) $r_box->c : 0; $fitur_row = $this->db->query("SELECT driver_job, jarak_minimum, wallet_minimum FROM fitur WHERE id_fitur=" . (int)$fitur)->row(); $driver_job = $fitur_row ? $fitur_row->driver_job : null; $cnt_job = 0; if ($driver_job !== null) { $r_job = $this->db->query("SELECT COUNT(*) as c FROM driver WHERE status='1' AND job=" . (int)$driver_job)->row(); $cnt_job = $r_job ? (int) $r_job->c : 0; } $fitur_exists = $fitur_row ? 'yes' : 'NO_FITUR_NOT_FOUND'; log_message('debug', 'get_driver_' . $type . '_diagnostic: fitur=' . $fitur . ' fitur_exists=' . $fitur_exists . ' driver_job=' . ($driver_job !== null ? $driver_job : 'n/a') . ' radius_km=' . ($radius_km !== null ? $radius_km : 'default') . ' online_drivers=' . $cnt_online . ' in_box=' . $cnt_in_box . ' with_job=' . $cnt_job); } /** * Get nearby drivers for car: purely by GPS distance, no region/wilayah. * Optional $radius_km (1–100); else 10 km. Optimized: bounding-box + LIMIT 50. */ public function get_driver_car($lat, $lng, $fitur, $radius_km = null) { $url_foto = base_url() . 'images/fotodriver/'; $lat = (float) $lat; $lng = (float) $lng; $fitur = (int) $fitur; $range = ($radius_km !== null && $radius_km > 0) ? max(1, min(100, (float) $radius_km)) : 10; $delta_lat = $range / 111.0; $cos_lat = max(0.01, cos(deg2rad($lat))); $delta_lng = $range / (111.0 * $cos_lat); $lat_min = $lat - $delta_lat; $lat_max = $lat + $delta_lat; $lng_min = $lng - $delta_lng; $lng_max = $lng + $delta_lng; $result = $this->db->query(" SELECT f.jarak_minimum, f.wallet_minimum, d.id as id, d.nama_driver, ld.latitude, ld.longitude, ld.bearing, ld.update_at, k.merek, k.nomor_kendaraan, k.warna, k.tipe, s.saldo, d.no_telepon, CONCAT('$url_foto', d.foto, '') as foto, d.reg_id, dj.driver_job, (6371 * acos(cos(radians($lat)) * cos(radians(ld.latitude)) * cos(radians(ld.longitude) - radians($lng)) + sin(radians($lat)) * sin(radians(ld.latitude)))) AS distance FROM config_driver ld, driver d, driver_job dj, kendaraan k, saldo s, fitur f WHERE ld.id_driver = d.id AND f.id_fitur = $fitur AND ld.status = '1' AND dj.id = d.job AND d.job = f.driver_job AND d.status = '1' AND k.id_k = d.kendaraan AND s.id_user = d.id AND s.saldo > GREATEST(COALESCE(f.wallet_minimum, 0), 500) AND ld.latitude BETWEEN $lat_min AND $lat_max AND ld.longitude BETWEEN $lng_min AND $lng_max HAVING distance <= $range ORDER BY distance ASC LIMIT 50"); $count = $result->num_rows(); log_message('debug', 'get_driver_car: fitur=' . $fitur . ' lat=' . $lat . ' lng=' . $lng . ' drivers_found=' . $count); if ($count === 0) { $this->log_driver_diagnostic('car', $lat, $lng, $fitur, $lat_min, $lat_max, $lng_min, $lng_max, $radius_km); } return $result; } function get_biaya() { $tempBiaya = array(); $this->db->select('fitur.*,voucher.nilai, driver_job.icon as icon_driver'); $this->db->from('fitur'); $this->db->join('voucher', 'fitur.id_fitur = voucher.untuk_fitur', 'left'); $this->db->join('driver_job', 'fitur.driver_job = driver_job.id', 'left'); $biaya = $this->db->get()->result_array(); foreach ($biaya as $row) { $tempBiaya[] = array( 'id_fitur' => $row['id_fitur'], 'fitur' => $row['fitur'], 'biaya' => $row['biaya'], 'icon' => $row['icon'], 'home' => $row['home'], 'maks_distance' => $row['maks_distance'], 'icon_driver' => $row['icon_driver'], 'biaya_minimum' => $row['biaya_minimum'], 'keterangan_biaya' => $row['keterangan_biaya'], 'keterangan' => $row['keterangan'], 'diskon' => $row['nilai'] . "%", 'biaya_akhir' => $row['nilai'] / 100 ); } return $tempBiaya; } public function insert_transaksi($data_req) { $ha = 0; $kreditamuont = explode(".", $data_req['kredit_promo']); $ha = $data_req['harga'] - $kreditamuont[0]; if ($ha <= 0) { $ha = 0; } $data_req['kredit_promo'] = $kreditamuont[0]; $data_req['biaya_akhir'] = $ha; $this->db->insert('transaksi', $data_req); $reqid = $this->db->insert_id(); if ($this->db->affected_rows() == 1) { $get_data = $this->get_data_transaksi($data_req); $data_hist = array( 'id_transaksi' => $reqid, 'id_driver' => 'D0', 'status' => '1' ); $this->db->insert('history_transaksi', $data_hist); return array( 'status' => true, 'data' => $get_data->result() ); } else { return array( 'status' => false, 'data' => [] ); } } public function insert_transaksi_send($data_req, $dataDetail) { $ha = 0; $kreditamuont = explode(".", $data_req['kredit_promo']); $ha = $data_req['harga'] - $kreditamuont[0]; if ($ha <= 0) { $ha = 0; } $data_req['kredit_promo'] = $kreditamuont[0]; $data_req['biaya_akhir'] = $ha; $ins_trans = $this->db->insert('transaksi', $data_req); $reqid = $this->db->insert_id(); if ($this->db->affected_rows() == 1) { $data_hist = array( 'id_transaksi' => $reqid, 'id_driver' => 'D0', 'status' => '1' ); $this->db->insert('history_transaksi', $data_hist); $dataDetail['id_transaksi'] = $reqid; $this->db->insert('transaksi_detail_send', $dataDetail); $get_data_msend = $this->get_data_transaksi_send($data_req); return array( 'status' => true, 'data' => $get_data_msend ); } else { return array( 'status' => false, 'data' => [] ); } } function get_data_transaksi_send($data_cond) { $this->db->select('*'); $this->db->from('transaksi'); $this->db->join('transaksi_detail_send', 'transaksi.id = transaksi_detail_send.id_transaksi', 'left'); $this->db->where($data_cond); $cek = $this->db->get(); return $cek; } function get_data_transaksi($cond) { $this->db->select('*'); $this->db->from('transaksi'); $this->db->join('transaksi_detail_send', 'transaksi.id = transaksi_detail_send.id_transaksi', 'left'); $this->db->where($cond); $cek = $this->db->get(); return $cek; } function get_data_transaksi_merchant($cond) { $this->db->select('transaksi.*,transaksi_detail_merchant.id_trans_merchant, merchant.token_merchant'); $this->db->from('transaksi'); $this->db->join('transaksi_detail_merchant', 'transaksi.id = transaksi_detail_merchant.id_transaksi', 'left'); $this->db->join('merchant', 'transaksi_detail_merchant.id_merchant = merchant.id_merchant', 'left'); $this->db->where($cond); $cek = $this->db->get(); return $cek; } function check_status($dataTrans) { $this->db->select('' . 'status_transaksi.id as status,' . 'status_transaksi.status_transaksi as keterangan'); $this->db->from('history_transaksi'); $this->db->join('status_transaksi', 'history_transaksi.status = status_transaksi.id'); $this->db->where($dataTrans); $cek = $this->db->get(); $stat = TRUE; if ($cek->row('status') == 1) { $this->delete_transaksi($dataTrans['id_transaksi']); $stat = FALSE; } log_message('debug', 'check_status: id_transaksi=' . $dataTrans['id_transaksi'] . ' raw_status=' . $cek->row('status') . ' stat=' . ($stat ? 'TRUE' : 'FALSE')); $dataCheck = array( 'message' => 'check status', 'status' => $stat, 'data' => $cek->result(), 'list_driver' => $this->get_data_driver_histroy($dataTrans['id_transaksi'])->result() ); return $dataCheck; } function check_banned_user($email) { $this->db->select('*'); $this->db->from('pelanggan'); $this->db->where('email', $email); $this->db->where("(status = '2' OR status = '3')", NULL, FALSE); // $this->db->where('status', '3'); $cek = $this->db->get(); if ($cek->num_rows() > 0) { return TRUE; } else { return FALSE; } } function listbank() { $this->db->select('*'); $this->db->from('list_bank'); $this->db->where('status_bank', "1"); return $this->db->get(); } function get_data_driver_histroy($id_transaksi) { $url_foto = base_url() . 'images/fotodriver/'; $this->db->select('' . 'driver.id,' . 'nama_driver,' . 'no_telepon,' . 'cd.latitude,' . 'cd.longitude,' . 'cd.update_at,' . "CONCAT('$url_foto', driver.foto, '') as foto," . 'reg_id,' . '"0" as distance,' . 'k.id_k as id_kendaraan,' . 'k.merek,' . 'k.tipe,' . 'k.jenis,' . 'k.nomor_kendaraan,' . 'k.warna'); $this->db->from('driver'); $this->db->join('history_transaksi', 'driver.id = history_transaksi.id_driver'); $this->db->join('config_driver cd', 'driver.id = cd.id_driver'); $this->db->join('kendaraan k', 'driver.kendaraan = k.id_k'); $this->db->where('history_transaksi.id_transaksi', $id_transaksi); $getD = $this->db->get(); return $getD; } function delete_chat($otherid, $userid) { $headers = array( "Accept: application/json", "Content-Type: application/json" ); $data3 = array(); $url3 = firebaseDb . '/chat/' . $otherid . '-' . $userid . '/.json'; $ch3 = curl_init($url3); curl_setopt($ch3, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch3, CURLOPT_CUSTOMREQUEST, 'DELETE'); curl_setopt($ch3, CURLOPT_POSTFIELDS, json_encode($data3)); curl_setopt($ch3, CURLOPT_HTTPHEADER, $headers); $return3 = curl_exec($ch3); $json_data3 = json_decode($return3, true); $data2 = array(); $url2 = firebaseDb . '/chat/' . $userid . '-' . $otherid . '/.json'; $ch2 = curl_init($url2); curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch2, CURLOPT_CUSTOMREQUEST, 'DELETE'); curl_setopt($ch2, CURLOPT_POSTFIELDS, json_encode($data2)); curl_setopt($ch2, CURLOPT_HTTPHEADER, $headers); $return2 = curl_exec($ch2); $json_data2 = json_decode($return2, true); $data1 = array(); $url1 = firebaseDb . '/Inbox/' . $userid . '/' . $otherid . '/.json'; $ch1 = curl_init($url1); curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch1, CURLOPT_CUSTOMREQUEST, 'DELETE'); curl_setopt($ch1, CURLOPT_POSTFIELDS, json_encode($data1)); curl_setopt($ch1, CURLOPT_HTTPHEADER, $headers); $return1 = curl_exec($ch1); $json_data1 = json_decode($return1, true); $data = array(); $url = firebaseDb . '/Inbox/' . $otherid . '/' . $userid . '/.json'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $return = curl_exec($ch); $json_data = json_decode($return, true); } public function get_trans_merchant($idtransaksi) { $this->db->select('mitra.*,transaksi_detail_merchant.id_merchant,transaksi_detail_merchant.total_biaya'); $this->db->from('transaksi_detail_merchant'); $this->db->join('mitra', 'transaksi_detail_merchant.id_merchant = mitra.id_merchant'); $this->db->where('id_transaksi', $idtransaksi); return $this->db->get(); } public function user_cancel_request($cond) { $this->db->select('' . 'id_driver,' . 'status'); $this->db->from('history_transaksi'); $this->db->where('id_transaksi', $cond['id_transaksi']); $id = $this->db->get(); $this->db->select('transaksi.*, fitur.home'); $this->db->from('transaksi'); $this->db->join('fitur', 'transaksi.order_fitur = fitur.id_fitur', 'left'); $this->db->where('id', $cond['id_transaksi']); $id2 = $this->db->get(); if ($id->row('status') == 1 || $id->row('status') == 2) { $data = array( 'status' => '5' ); if ($id2->row('home') == 4) { $get_mitra = $this->get_trans_merchant($cond['id_transaksi']); $this->delete_chat($get_mitra->row('id_merchant'), $id2->row('id_pelanggan')); $this->delete_chat($get_mitra->row('id_merchant'), $id2->row('id_driver')); }; $this->db->where($cond); $edit = $this->db->update('history_transaksi', $data); $data = array( 'status' => '1' ); $this->db->where('id_driver', $id->row('id_driver')); $edit = $this->db->update('config_driver', $data); return array( 'status' => true, 'data' => [], 'iddriver' => $id->row('id_driver'), 'idpelanggan' => $id2->row('id_pelanggan') ); } else { return array( 'status' => false, 'data' => [] ); } } public function user_expired_request($cond) { $this->db->select('' . 'id_driver, ' . 'status'); $this->db->from('history_transaksi'); $this->db->where('id_transaksi', $cond['id_transaksi']); $id = $this->db->get(); if ($id->row('status') == 1 || $id->row('status') == 2) { $data = array( 'status' => '0' ); $this->db->where($cond); $edit = $this->db->update('history_transaksi', $data); $data = array( 'status' => '1' ); $this->db->where('id_driver', $id->row('id_driver')); $edit = $this->db->update('config_driver', $data); return array( 'status' => true, 'data' => [], 'iddriver' => $id->row('id_driver'), 'idpelanggan' => $id->row('id_pelanggan') ); } else { return array( 'status' => false, 'data' => [] ); } } function detail_transaksi($idtrans) { $this->db->select('*'); $this->db->from('transaksi'); $this->db->where('id', $idtrans); $loc = $this->db->get(); return $loc; } function detail_driver($iddriver) { $this->db->select('*'); $this->db->from('driver'); $this->db->join('kendaraan', 'driver.kendaraan = kendaraan.id_k', 'left'); $this->db->where('id', $iddriver); $loc = $this->db->get(); return $loc; } function get_driver_location($idDriver) { $this->db->select('' . 'id_driver,' . 'latitude,' . 'longitude'); $this->db->from('config_driver'); $this->db->where('id_driver', $idDriver); $loc = $this->db->get(); return $loc; } function get_driver_location_admin() { $threshold = date('Y-m-d H:i:s', strtotime('-3 days')); $this->db->select('' . 'config_driver.id_driver,' . 'config_driver.latitude,' . 'config_driver.longitude,' . 'config_driver.status,' . 'config_driver.update_at as last_location_update,' . 'driver.nama_driver,' . 'MAX(history_transaksi.waktu) as last_order_time'); $this->db->from('config_driver'); $this->db->join('driver', 'config_driver.id_driver = driver.id', 'left'); $this->db->join('history_transaksi', 'history_transaksi.id_driver = driver.id', 'left'); $this->db->where('driver.status != 0'); $this->db->where('driver.status != 3'); $this->db->group_by('config_driver.id_driver'); $escapedThreshold = $this->db->escape($threshold); $this->db->having("(config_driver.update_at >= $escapedThreshold OR MAX(history_transaksi.waktu) >= $escapedThreshold)", null, false); $loc = $this->db->get(); return $loc; } function rate_driver($data) { $ins_rate = $this->db->insert('rating_driver', $data); if ($this->db->affected_rows() == 1) { $get_rating = $this->count_rate_driver($data['id_driver']); $this->db->where('id', $data['id_transaksi']); $upd_trans = $this->db->update('transaksi', array('rate' => $data['rating'])); $this->db->where('id', $data['id_driver']); $upd_driver = $this->db->update('driver', array('rating' => $get_rating)); return true; } else { return false; } } function count_rate_driver($id) { $this->db->select('rating'); $this->db->from('rating_driver'); $this->db->where('id_driver', $id); $cek = $this->db->get(); $rate = 0; $hasil = 0; if ($cek->num_rows() > 0) { foreach ($cek->result() as $row) { $rate += $row->rating; } $hasil = $rate / $cek->num_rows(); } return $hasil; } function diskon_wallet() { $this->db->select('*'); $this->db->from('voucher'); $this->db->where("voucher LIKE 'DISKON%'"); $this->db->order_by('id', 'asc'); $disk = $this->db->get(); $arrDisk = array(); foreach ($disk->result() as $row) { $diskmpay = array( 'fitur' => $row->untuk_fitur, 'diskon' => $row->nilai . "%", 'biaya_akhir' => (100 - $row->nilai) / 100 ); array_push($arrDisk, $diskmpay); } return $disk; } function promo_code() { $this->db->select('*'); $this->db->from('kodepromo'); $this->db->where("status", 1); $this->db->where('expired >', date("Y-m-d")); $this->db->order_by('id_promo', 'DESC'); return $this->db->get(); } function promo_code_use($code, $fitur) { $this->db->select('*'); $this->db->from('kodepromo'); $this->db->where('kode_promo', $code); $this->db->where("fitur", $fitur); $this->db->where("status", 1); $this->db->where('expired >', date("Y-m-d")); $diskon = $this->db->get(); if ($diskon->num_rows() > 0) { $out = [ 'nominal' => $diskon->row('nominal_promo'), 'type' => $diskon->row('type_promo') ]; return $out; } else { return false; } } function transaksi($idtran) { $this->db->select('*'); $this->db->from('transaksi'); $this->db->join('transaksi_detail_merchant', 'transaksi.id = transaksi_detail_merchant.id_transaksi', 'left'); $this->db->join('fitur', 'transaksi.order_fitur = fitur.id_fitur', 'left'); $this->db->join('merchant', 'transaksi_detail_merchant.id_merchant = merchant.id_merchant', 'left'); $this->db->join('history_transaksi', 'transaksi.id = history_transaksi.id_transaksi', 'left'); $this->db->join('transaksi_detail_send', 'transaksi.id = transaksi_detail_send.id_transaksi', 'left'); $this->db->where('transaksi.id', $idtran); $trans = $this->db->get(); return $trans; } function all_transaksi($iduser) { $this->db->select('*'); $this->db->from('transaksi'); $this->db->join('history_transaksi', 'transaksi.id = history_transaksi.id_transaksi', 'left'); $this->db->join('status_transaksi', 'history_transaksi.status = status_transaksi.id', 'left'); $this->db->join('fitur', 'transaksi.order_fitur = fitur.id_fitur', 'left'); $this->db->where('transaksi.id_pelanggan', $iduser); $this->db->where('history_transaksi.status != 1'); $this->db->where('history_transaksi.status != 0'); $this->db->order_by('transaksi.id', 'DESC'); $trans = $this->db->get(); return $trans; } public function getAlltransaksipickup() { $this->db->select('transaksi.*,' . 'driver.nama_driver,' . 'pelanggan.fullnama,' . 'history_transaksi.*,' . 'status_transaksi.*,' . 'fitur.icon,' . 'fitur.fitur'); $this->db->from('transaksi'); $this->db->join('history_transaksi', 'transaksi.id = history_transaksi.id_transaksi', 'left'); $this->db->join('status_transaksi', 'history_transaksi.status = status_transaksi.id', 'left'); $this->db->join('driver', 'transaksi.id_driver = driver.id', 'left'); $this->db->join('pelanggan', 'transaksi.id_pelanggan = pelanggan.id', 'left'); $this->db->join('fitur', 'transaksi.order_fitur = fitur.id_fitur', 'left'); $this->db->where('history_transaksi.status = 2'); $this->db->order_by('transaksi.id', 'DESC'); $this->db->limit('10'); return $this->db->get(); } public function getAlltransaksidestination() { $this->db->select('transaksi.*,' . 'driver.nama_driver,' . 'pelanggan.fullnama,' . 'history_transaksi.*,' . 'status_transaksi.*,' . 'fitur.icon,' . 'fitur.fitur'); $this->db->from('transaksi'); $this->db->join('history_transaksi', 'transaksi.id = history_transaksi.id_transaksi', 'left'); $this->db->join('status_transaksi', 'history_transaksi.status = status_transaksi.id', 'left'); $this->db->join('driver', 'transaksi.id_driver = driver.id', 'left'); $this->db->join('pelanggan', 'transaksi.id_pelanggan = pelanggan.id', 'left'); $this->db->join('fitur', 'transaksi.order_fitur = fitur.id_fitur', 'left'); $this->db->where('history_transaksi.status = 3'); $this->db->order_by('transaksi.id', 'DESC'); $this->db->limit('10'); return $this->db->get(); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////// function template1($subject, $text1, $text2, $web, $appname, $linkbtn, $linkgoogle, $address) { $msg = '
|
' . $subject . '
' . $text1 . ' ' . $text2 . ' . |