Membuat Antrian Pendaftaran JKN Mobile Menggunakan Codeigniter.
Kesempatan kali ini saya ingin melanjutkan postingan saya sebelumnya membuat bridging antrian JKN Mobile. Agar dapat mengikuti ini tentunya rekan - rekan semua harus mengawali dari postingan sebelumnya yaitu generate token jkn mobile. Bagi rekan - rekan yang belum membacanya <klik disini>.
Sekarang kita akan mulai membuat antrian pendaftarannya dengan tahapan sebagai berikut :
1. Pelajari katalog nya terlebih dahulu.
- Parameter yang kita butuhkan yaitu nomorkartu
- Respon yang akan kita berikan sebagai berikut
- Request Header Token.
2. Buatlah tabel didatabase SIM RS rekan - rekan untuk membuat mapping poli. Mengapa kita harus membuat mapping poli?, tentunya kodepoli dan nama poli di rumah sakit berbeda dengan parameter poli yang ditentukan oleh JKN. Rekan - rekan bisa download katalog nya melalui halaman download blog ini atau request email akan saya kirim.
3.Membuat Script Controllers Antrian Pendaftaran.
buatlah controller file php dan masukkan script beriku ini :
<?php
error_reporting(0);
use Restserver\Libraries\REST_Controller;
defined('BASEPATH') OR exit('No direct script access allowed');
require APPPATH . 'libraries/REST_Controller.php';
require APPPATH . 'libraries/Format.php';
class Antrian extends REST_Controller {
function __construct()
{
parent::__construct();
$this->load->model('Antrian_model', 'anp');
}
// post data
public function index_post() {
$header = $this->input->request_headers();
$gettoken = $header['x-token'];
if($gettoken === null || $gettoken == ''){
$this->response(['metadata' =>[
'message' => 'Invalid Request Header',
'code' => '431'
],
],
REST_Controller::HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE);
}else{
$request = array(
'nomorkartu' => $this->post('nomorkartu'),
'nik' => $this->post('nik'),
'notelp' => $this->post('notelp'),
'tanggalperiksa'=> $this->post('tanggalperiksa'),
'kodepoli' => $this->post('kodepoli'),
'nomorreferensi'=> $this->post('nomorreferensi'),
'jenisreferensi'=> $this->post('jenisreferensi'),
'jenisrequest' => $this->post('jenisrequest'),
'polieksekutif' => $this->post('polieksekutif')
);
date_default_timezone_set('Asia/Jakarta');
$nomorkartu = $request['nomorkartu'];
$nik = $request['nik'];
$notelp = $request['notelp'];
$tanggaldaftar = $request['tanggalperiksa'];
$kodepoli = $request['kodepoli'];
$nomorreferensi = $request['nomorreferensi'];
$jenisreferensi = $request['jenisreferensi'];
$jenisrequest = $request['jenisrequest'];
$polieksekutif = $request['polieksekutif'];
$tanggal = date('Y-m-d');
$arr = explode('-',$tanggaldaftar);
$tahun = $arr[0];
$bulan = $arr[1];
$hari = $arr[2];
$h_minsatu = $hari-1;
$bulanskr = date('m');
$hariskr = date('d');
$tahunskr = date('Y');
$jumlahhari = jumlah_hari($tahunskr,$bulanskr);
$tanggalskr = date('Y-m-d');
$formattanggal = $tahun.'-'.$bulan.'-'.$hari;
$sesudah = date('Y-m-d', strtotime('+3 days'));
$sebelum = date('Y-m-d', strtotime('-3 days'));
if ($nomorkartu === null || $nomorkartu == '') {
$this->response(['metadata' =>[
'message' => 'Nomor Kartu Kosong!',
'code' => 400
],
], REST_Controller::HTTP_BAD_REQUEST);
}
if(strlen($nomorkartu) < 13){
$this->response(['metadata' =>[
'message' => 'Nomor Kartu Tidak Lengkap',
'code' => 400
],
], REST_Controller::HTTP_BAD_REQUEST);
}
if ($nik === null || $nik ==='' || strlen($nik) < 16) {
$this->response(['metadata' =>[
'message' => 'NIK Tidak Lengkap',
'code' => 400
],
], REST_Controller::HTTP_BAD_REQUEST);
}
if ($notelp === null || $notelp ==='') {
$this->response(['metadata' =>[
'message' => 'Lengkapi Nomor Telepon!',
'code' => 400
],
], REST_Controller::HTTP_BAD_REQUEST);
}
if(strlen($tahun < 4)){
$this->response(['metadata' =>[
'message' => 'Format Tanggal Salah!',
'code' => 400
],
], REST_Controller::HTTP_BAD_REQUEST);
}
if($bulan > 12){
$this->response(['metadata' =>[
'message' => 'Format Tanggal Salah!',
'code' => 400
],
], REST_Controller::HTTP_BAD_REQUEST);
}
if($hari > $jumlahhari){
$this->response(['metadata' =>[
'message' => 'Format Tanggal Salah!',
'code' => 400
],
], REST_Controller::HTTP_BAD_REQUEST);
}
if($formattanggal < $tanggalskr || $formattanggal > $sesudah){
$this->response(['metadata' =>[
'message' => 'Harap Mengambil Antrian 1 - 3 hari sebelum pemeriksaan!',
'code' => 400
],
], REST_Controller::HTTP_BAD_REQUEST);
}else{
$tanggalperiksa = $formattanggal;
}
if($kodepoli != null || $kodepoli !=''){
$cekpoli = $this->anp->getpoli($kodepoli);
if($cekpoli == "0"){
$this->response(
['metadata' =>
[
'message' => 'Layanan Poli Tidak Tersedia!',
'code' => '302'
],
], REST_Controller::HTTP_NOT_FOUND);
}
}
$getdata = $this->anp->generateAntrian($nomorkartu,$nik,$notelp,$tanggalperiksa,$kodepoli,$nomorreferensi,$jenisreferensi,$jenisrequest,$polieksekutif);
if($getdata == "A") {
$this->response(
['metadata' =>
[
'message' => 'Nomor Antrian Sudah Ada!',
'code' => '505'
],
], REST_Controller::HTTP_NOT_FOUND);
}elseif($getdata){
$this->response(['response' => $getdata,
'metadata' =>[
'message' => 'OK',
'code' => '200'
],
],REST_Controller::HTTP_OK); // NOT_FOUND (404) being the HTTP response code
} else {
$this->response(
['metadata' =>
[
'message' => 'Gagal Menyimpan data',
'code' => '505'
],
], REST_Controller::HTTP_NOT_FOUND);
}
}
}
}
?>
Sesuaikan dengan tabel pendaftaran sim rs rekan -rekan. Setelah itu simpan file tersebut ke dalam controllers/api dengan nama Antrian.php.
4.Membuat Script Model Antrian Pendaftaran.
<?php
class Antrian_model extends CI_model {
function __construct()
{
parent:: __construct();
}
public function getRekapantrian($tanggalperiksa,$kodepoli,$polieksekutif) {
$query = $this->db->query("SELECT mode1.namapoli,
mode1.totalantrean,
mode2.jumlahterlayani,
mode3.lastupdate,
mode3.lastupdatetanggal
FROM(
SELECT ref_poli.`kdpoli`,
ref_poli.`nmpoli` AS namapoli,
COUNT(COALESCE(antrianjkn.`id_reg`,0)) AS totalantrean
FROM antrianjkn
LEFT JOIN ref_poli
ON ref_poli.`kdpoli` = antrianjkn.`kodepoli`
WHERE antrianjkn.`tanggalperiksa` = '$tanggalperiksa'
AND antrianjkn.`kodepoli` = '$kodepoli'
AND antrianjkn.`polieksekutif`='$polieksekutif'
GROUP BY antrianjkn.`kodepoli`) AS mode1
LEFT OUTER JOIN(
SELECT ref_poli.`kdpoli`,
COUNT(COALESCE(antrianjkn.`terlayani`,0)) AS jumlahterlayani
FROM antrianjkn
LEFT JOIN ref_poli
ON ref_poli.`kdpoli` = antrianjkn.`kodepoli`
WHERE antrianjkn.`tanggalperiksa` = '$tanggalperiksa'
AND antrianjkn.`kodepoli` = '$kodepoli'
AND antrianjkn.`terlayani`= '1'
AND antrianjkn.`polieksekutif`='$polieksekutif'
GROUP BY antrianjkn.`kodepoli`) AS mode2
ON mode2.kdpoli = mode1.kdpoli
LEFT JOIN (
SELECT ref_poli.`kdpoli`,
antrianjkn.`estimasiwaktu` AS lastupdate,
antrianjkn.`waktu` AS lastupdatetanggal
FROM antrianjkn
LEFT JOIN ref_poli
ON ref_poli.`kdpoli` = antrianjkn.`kodepoli`
WHERE antrianjkn.`tanggalperiksa` = '$tanggalperiksa'
AND antrianjkn.`kodepoli` = '$kodepoli'
AND antrianjkn.`polieksekutif`='$polieksekutif'
GROUP BY antrianjkn.`kodepoli`
ORDER BY antrianjkn.`id_reg` DESC) AS mode3
ON mode3.kdpoli = mode1.kdpoli
ORDER BY mode1.namapoli");
return $query->result_array();
}
public function generateAntrian($nomorkartu,$nik,$notelp,$tanggalperiksa,$kodepoli,$nomorreferensi,$jenisreferensi,$jenisrequest,$polieksekutif)
{
//mendapatkan estimasi waktu pelayanan
$cekjam = $this->db->query("SELECT waktu FROM antrianjkn WHERE kodepoli = '$kodepoli' AND tanggalperiksa='$tanggalperiksa'ORDER BY id_reg DESC LIMIT 1");
$valwaktu = $cekjam->row_array();
$waktu = $valwaktu['waktu'];
date_default_timezone_set('UTC');
$getwaktu = date($waktu,time()+(60*60));
$sekarang = date('Y-m-d H:i:s');
$waktusekarang = date($sekarang,time()+(60*60));
if($waktu === null || $waktu =='' || $waktu = 0){
$estimasiwaktu = strtotime($waktusekarang);
}else{
$estimasiwaktu = strtotime($getwaktu);
}
//cek nomorantrian yang sudah ada untuk ditambahkan
$geturut = $this->db->query("SELECT MAX(nomorantrean) AS urut
FROM antrianjkn
WHERE kodepoli='$kodepoli'
AND tanggalperiksa = '$tanggalperiksa'");
$getnik = $geturut->row_array();
$norm = $getnik['urut'];
$urut = $norm+1;
$ceksudahdaftar = $this->db->query("SELECT id_reg,nomorkartu,nik
FROM antrianjkn
WHERE nomorkartu='$nomorkartu'
AND nik='$nik'
AND tanggalperiksa='$tanggalperiksa'");
if($ceksudahdaftar->num_rows()>0){
return "A";
}else{
$input = $this->db->query("INSERT INTO antrianjkn(nomorantrean,nomorkartu,nik,notelp,tanggalperiksa,kodepoli,nomorreferensi,jenisreferensi,jenisrequest,polieksekutif,estimasiwaktu)VALUES('$urut','$nomorkartu','$nik','$notelp','$tanggalperiksa','$kodepoli','$nomorreferensi','$jenisreferensi','$jenisrequest','$polieksekutif','$estimasiwaktu')");
if($input){
$dtantri = $this->db->query("SELECT antrianjkn.nomorantrean,
antrianjkn.id_reg AS kodebooking,
antrianjkn.jenisantrean,
antrianjkn.estimasiwaktu AS estimasidilayani,
ref_poli.nmpoli AS namapoli
FROM antrianjkn
LEFT JOIN ref_poli
ON antrianjkn.kodepoli = ref_poli.kdpoli
WHERE antrianjkn.nomorkartu='$nomorkartu'
AND antrianjkn.tanggalperiksa = '$tanggalperiksa'");
return $dtantri->result_array();
}else{
return false;
}
}
}
function getpoli($kodepoli){
$query = $this->db->query("SELECT id FROM ref_poli WHERE kdpoli = '$kodepoli'");
if($query->num_rows()>0){
return true;
}else{
return "0";
}
}
}
?>
Dan setelah itu simpan dengan nama file Antrian_model.php di folder model pada aplikasi.
5. Menguji Di Postman Setelah selesai membuat model, kita akan lanjutkan pengujian di postman dengan cara seperi berikut ini.
- 1. Pilih Metode POST
- 2. Pilih Header
- 3. Pada Kolom Key Ketikkan X-Token sebagai request security
- 4. Masukkan URL
- 5. Pada Kolom Value {{token}}
Kemudian Kita lanjutkan seperti gambar dibawah :
- 1. Pilih Bagian Body
- 2. Pilih Raw
- 3. Pilih Json
- 4. Ketikkan paramater
- 5. Tekan Tombol SEND
Jika berhasil maka akan merespon seperti gambar dibawah ini:
Baiklah rekan - rekan semua, kita sudah berhasil membuat script antrian pendaftaran jkn mobile. Semoga bermanfaat bagi kalian semua. Jika ada pertanyaan boleh langsung kontak email ke saya. Terima kasih





Tidak ada komentar: