SCRIPT BRIDGING ANTRIAN JKN MOBILE MENGGUNAKAN CODEIGNITER

 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.

Untuk membuat model nya copy script berikut ini, dan sesuaikan dengan tabel pendaftaran rekan - rekan, atau bisa membuat tabel baru dan menyesuaikan query dibawah ini.

<?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:

Diberdayakan oleh Blogger.