From cb4b2fbaa6df5c249d6f5f14a2f8add2df96609e Mon Sep 17 00:00:00 2001 From: kicap1992 Date: Thu, 8 Apr 2021 06:57:30 +0800 Subject: [PATCH] api for user, login admin and server side tables --- application/controllers/Api.php | 142 ++++++++++++---- application/controllers/Home.php | 261 +++++++++++++++++++++++------- application/models/M_tabel_ss.php | 109 +++++++++++++ application/models/Model.php | 125 ++++++++++---- composer.json | 2 +- readme.rst | 4 +- 6 files changed, 526 insertions(+), 117 deletions(-) create mode 100644 application/models/M_tabel_ss.php diff --git a/application/controllers/Api.php b/application/controllers/Api.php index cf3400f..bae6008 100644 --- a/application/controllers/Api.php +++ b/application/controllers/Api.php @@ -14,8 +14,9 @@ class Api extends RestController function __construct() { parent::__construct(); - // $this->load->model('model');; + $this->load->model('model');; // $this->db->query("SET sql_mode = '' "); + date_default_timezone_set("Asia/Kuala_Lumpur"); } public function index_get() @@ -25,44 +26,121 @@ class Api extends RestController } // ----------------------------------------------------------------------------------------------------------- - public function login_post() + + public function admin_get() { + $where = $this->get('where'); + - // if ($this->post("proses") == "login") { - // $data = $this->model->serialize($this->post('data')); - - // $username = $this->post("username"); - // $password = $this->post("password"); - // // // print_r($data); - // // $result = $this->model->tampil_data_where('tb_login',$data)->result(); - // $result = $this->model->tampil_data_where('tb_login',array("username" => $username, "password" => $password))->result(); - // print_r($result[0]->nik); + $cek_data = $this->model->tampil_data_where('tb_admin',$where)->result(); - // if (count($result) > 0) { - // $this->session->set_userdata('login', array("level" => "admin" , "nik" => $result[0]->nik)); - $this->session->set_userdata('login', array("level" => "admin" )); - // // print_r("data ada"); - // $this->response(['res' => "ok"], 200); - // }else{ - // $this->response(['res'=> "ko"],404); - // } + if (count($cek_data) > 0 ){ + $this->response(['res' => 'ok','data' => $cek_data], 200); + }else{ + $this->response(['res' => 'ko'], 200); + } + + + // redirect(base_url()); - $this->response(['res' => "ok"], 200); - - - // }else{ - // $this->response(['res' => "ko"], 400); - // } } - - // public function login_delete() - // { - // $nim = $this->get('nim'); - // print_r($this->get('nim')); - // print_r($this->post('proses')); - // } + + + + public function login_get() + { + $where = $this->get('where'); + + $level = $where['level'] ?? null; + if($level != null){ + $cek_data = $this->model->tampil_data_where('tb_login',[ ($level == 'admin') ? 'nik_admin' : 'nik_user' => $where['nik'] , 'level' => $level])->result(); + } + else{ + $cek_data = $this->model->tampil_data_where('tb_login',$where)->result(); + } + + + + if (count($cek_data) > 0 ){ + $this->response(['res' => 'ok','url' => $cek_data[0]->level, 'level' => $cek_data[0]->level, 'nik' => ($cek_data[0]->level == 'user') ? $cek_data[0]->nik_user : $cek_data[0]->nik_admin ,'data' => $cek_data], 200); + }else{ + $this->response(['res' => 'ko'], 200); + } + + // $this->response(['res' => 'ok', 'cek_data' => $cek_data], 200); + + // redirect(base_url()); + + } + + public function user_post(){ + $data = $this->post('data'); + // $data = $this->model->serialize($data); + + $cek_data = $this->model->tampil_data_where('tb_user',['nik_user' => $data['nik_user']])->result(); + if(count($cek_data) > 0){ + $this->response(['message' => 'ko'], 400); + }else{ + $data = array_merge($data,array('tanggal_pendaftaran' => date('Y-m-d H:m:s'))); + $this->model->insert('tb_user',$data); + $this->model->insert('tb_login',['username' => $data['nik_user'] , 'password' => $data['nik_user'],'nik_user' => $data['nik_user'], 'level' => 'user']); + $this->response(['message' => 'ok','data' => $data], 200); + } + + } + + public function user_put(){ + $detail = $this->put('detail'); + $where = $this->put('where'); + // $data = $this->model->serialize($data); + + $cek_data = $this->model->tampil_data_where('tb_user',$where)->result(); + if(count($cek_data) > 0){ + // $this->response(['message' => 'ko'], 400); + $simpanan_wajib = $detail['simpanan_wajib'] ?? null; + $simpanan_sukarela = $detail['simpanan_sukarela'] ?? null; + if ($simpanan_wajib != null){ + $array_simpanan_wajib = json_decode($cek_data[0]->simpanan_wajib) ?? null; + if($array_simpanan_wajib == null){ + $detail = ['simpanan_wajib' => json_encode($detail['simpanan_wajib'])]; + }else{ + $array_simpanan_wajib = array_merge($array_simpanan_wajib,$detail['simpanan_wajib']); + $detail = ['simpanan_wajib' => json_encode($array_simpanan_wajib)]; + } + } + + if ($simpanan_sukarela != null){ + $array_simpanan_sukarela = json_decode($cek_data[0]->simpanan_sukarela) ?? null; + if($array_simpanan_sukarela == null){ + $detail = ['simpanan_sukarela' => json_encode($detail['simpanan_sukarela'])]; + }else{ + $array_simpanan_sukarela = array_merge($array_simpanan_sukarela,$detail['simpanan_sukarela']); + $detail = ['simpanan_sukarela' => json_encode($array_simpanan_sukarela)]; + } + } + + $this->model->update('tb_user',$where,$detail); + $this->response(['message' => 'ok'], 200); + }else{ + $this->response(['message' => 'ko'], 400); + } + + + + } + + public function user_get() + { + $where = $this->get('where'); + + + + $cek_data = $this->model->tampil_data_where('tb_user',$where)->result(); + + $this->response(['res' => 'ok','data' => $cek_data], 200); + } } diff --git a/application/controllers/Home.php b/application/controllers/Home.php index eacde53..752c97b 100644 --- a/application/controllers/Home.php +++ b/application/controllers/Home.php @@ -7,80 +7,233 @@ class Home extends CI_Controller { { parent::__construct(); $this->load->model('model'); + $this->load->model('m_tabel_ss'); } - function index() - { - // $this->load->view('home/login'); - // print_r('sini login'); - if ($this->input->post('proses') == 'login') { - // print_r('sini login asdasd'); - $username = $this->input->post('username'); - $password = $this->input->post('password'); + function index(){ + if ($this->input->post('proses') == "table_user") { + $list = $this->m_tabel_ss->get_datatables(array('nik_user','nama','tanggal_daftar','status'),array(null, 'nik_user','nama','tanggal_daftar','simpanan_pokok','status',null),array('status' => 'desc'),"tb_user",null,null,"*"); + $data = array(); + $no = $_POST['start']; + foreach ($list as $field) { - $cek_data =$this->model->tampil_data_where('tb_login',['username' =>$username , 'password' =>$password ])->result(); - // print_r($cek_data[0]->level); + $no++; + $row = array(); + $row[] = $no; + $row[] = $field->nik_user; + $row[] = $field->nama; + $row[] = $field->tanggal_pendaftaran; + $row[] = 'Rp. ' . number_format($field->simpanan_pokok); + $row[] = $field->status; + $row[] = '
'; + $data[] = $row; + } - if (count($cek_data) > 0) { - switch ($cek_data[0]->level) { - case 'admin': - $this->output->set_status_header(200)->set_content_type('application/json')->set_output(json_encode(array("res" => "ok" , 'level' => $cek_data[0]->level, 'nik' => $cek_data[0]->nik_admin))); - break; - - case 'user': - $this->output->set_status_header(200)->set_content_type('application/json')->set_output(json_encode(array("res" => "ok" , 'level' => $cek_data[0]->level, 'nik' => $cek_data[0]->nik_user))); - break; - } + $output = array( + "draw" => $_POST['draw'], + "recordsTotal" => $this->m_tabel_ss->count_all("tb_user",null,null,"*"), + "recordsFiltered" => $this->m_tabel_ss->count_filtered(array('nik_user','nama','tanggal_daftar','status'),array(null, 'nik_user','nama','tanggal_daftar','simpanan_pokok','status',null),array('status' => 'desc'),"tb_user",null,null,"*"), + "data" => $data, + ); + //output dalam format JSON + echo json_encode($output); + } + + if ($this->input->post('proses') == "table_simpanan_pokok") { + $list = $this->m_tabel_ss->get_datatables(array('nik_user','nama','tanggal_daftar','status','simpanan_pokok'),array(null, 'nik_user','nama','tanggal_daftar','simpanan_pokok','status'),array('status' => 'desc'),"tb_user",null,null,"*"); + $data = array(); + $no = $_POST['start']; + foreach ($list as $field) { + + $no++; + $row = array(); + $row[] = $no; + $row[] = $field->nik_user; + $row[] = $field->nama; + $row[] = $field->tanggal_pendaftaran; + $row[] = 'Rp. ' . number_format($field->simpanan_pokok); + $row[] = $field->status; + $row[] = '
'; + $data[] = $row; + } + + $output = array( + "draw" => $_POST['draw'], + "recordsTotal" => $this->m_tabel_ss->count_all("tb_user",null,null,"*"), + "recordsFiltered" => $this->m_tabel_ss->count_filtered(array('nik_user','nama','tanggal_daftar','status','simpanan_pokok'),array(null, 'nik_user','nama','tanggal_daftar','simpanan_pokok','status'),array('status' => 'desc'),"tb_user",null,null,"*"), + "data" => $data, + ); + //output dalam format JSON + echo json_encode($output); + } + + if ($this->input->post('proses') == "table_list_guru_simpanan_wajib") { + $list = $this->m_tabel_ss->get_datatables(array('nik_user','nama'),array(null, 'nik_user','nama',null,null,null),array('tanggaL-daftar' => 'desc'),"tb_user",null,['status' => 'aktif'],"*"); + $data = array(); + $no = $_POST['start']; + foreach ($list as $field) { + + $simpanan_wajib = json_decode($field->simpanan_wajib,true) ?? null; + if($simpanan_wajib != null){ + + function date_simpanan($a,$b) + { + return strcmp($a['tanggal_simpanan'],$b['tanggal_simpanan']); + } + /// atur kembali array berdasarkan tanggal + usort($simpanan_wajib , 'date_simpanan'); + end($simpanan_wajib); + $key = key($simpanan_wajib); + $simpanan_wajib = $simpanan_wajib[$key]; + ////pilih array yg terakhir dari key + + } + + $no++; + $row = array(); + $row[] = $no; + $row[] = $field->nik_user; + $row[] = $field->nama; + $row[] = $simpanan_wajib['tanggal_simpanan'] ?? 'Belum Pernah Melakukan Simpanan Wajib '; + $row[] = ($simpanan_wajib) ? 'Rp. '.number_format( $simpanan_wajib['simpanan']) : '-'; + $row[] = '
'; + $data[] = $row; + } + + $output = array( + "draw" => $_POST['draw'], + "recordsTotal" => $this->m_tabel_ss->count_all("tb_user",null,['status' => 'aktif'],"*"), + "recordsFiltered" => $this->m_tabel_ss->count_filtered(array('nik_user','nama'),array(null, 'nik_user','nama',null,null,null),array('tanggaL-daftar' => 'desc'),"tb_user",null,['status' => 'aktif'],"*"), + "data" => $data, + ); + //output dalam format JSON + echo json_encode($output); + } + + if ($this->input->post('proses') == "table_list_guru_simpanan_sukarela") { + $list = $this->m_tabel_ss->get_datatables(array('nik_user','nama'),array(null, 'nik_user','nama',null,null,null),array('tanggaL-daftar' => 'desc'),"tb_user",null,['status' => 'aktif'],"*"); + $data = array(); + $no = $_POST['start']; + foreach ($list as $field) { + + + $simpanan_sukarela = json_decode($field->simpanan_sukarela,true) ?? null; + if($simpanan_sukarela != null){ + + function date_simpanan($a,$b) + { + return strcmp($a['tanggal_simpanan'],$b['tanggal_simpanan']); + } + /// atur kembali array berdasarkan tanggal + usort($simpanan_sukarela , 'date_simpanan'); + end($simpanan_sukarela); + $key = key($simpanan_sukarela); + $simpanan_sukarela = $simpanan_sukarela[$key]; + ////pilih array yg terakhir dari key + + } + + $no++; + $row = array(); + $row[] = $no; + $row[] = $field->nik_user; + $row[] = $field->nama; + $row[] = $simpanan_sukarela['tanggal_simpanan'] ?? 'Belum Pernah Melakukan Simpanan Sukarela '; + $row[] = ($simpanan_sukarela) ? 'Rp. '.number_format( $simpanan_sukarela['simpanan']) : '-'; + $row[] = '
'; + $data[] = $row; + } + + $output = array( + "draw" => $_POST['draw'], + "recordsTotal" => $this->m_tabel_ss->count_all("tb_user",null,['status' => 'aktif'],"*"), + "recordsFiltered" => $this->m_tabel_ss->count_filtered(array('nik_user','nama'),array(null, 'nik_user','nama',null,null,null),array('tanggaL-daftar' => 'desc'),"tb_user",null,['status' => 'aktif'],"*"), + "data" => $data, + ); + //output dalam format JSON + echo json_encode($output); + } + + if ($this->input->post('proses') == 'cari_usernya') { + $search = $this->input->post('searchTerm'); + $fetchData = $this->model->tampil_data_where('tb_user',"status = 'Aktif' and (nik_user like '%".$search."%' or nama like '%".$search."%' ) limit 5")->result(); + $data = array(); + + // while ($row = mysqli_fetch_array($fetchData)) { + // $data[] = array("id"=>$row['id'], "text"=>$row['name']); + // } + foreach ($fetchData as $key => $value) { + $data[] = array("id" => $value->nik_user, "text" => $value->nik_user.' | '.$value->nama); + } + + echo json_encode($data); + } + + + if ($this->input->post('proses') == 'table_simpanan_user_wajib') { + $i = 1; + $cek_data = $this->model->tampil_data_where('tb_user',array('nik_user' => $this->input->post('nik_user')))->result(); + + if(count($cek_data) > 0){ + $ket = json_decode($cek_data[0]->simpanan_wajib,true); + function date_simpanan($a,$b) + { + return strcmp($a['tanggal_simpanan'],$b['tanggal_simpanan']); + } + /// atur kembali array berdasarkan tanggal + usort($ket , 'date_simpanan'); + foreach ($ket as $key => $value) { + // $data[$i]['no'] = $i; + $data[$i]['waktu'] = $value['tanggal_simpanan']; + $data[$i]['ket'] = 'Rp. '. number_format($value['simpanan']); + // $data[$i]['foto'] = $value['foto']; + + $i++; + + } + $out = array_values($data); + echo json_encode($out); } else { - $this->output->set_status_header(400)->set_content_type('application/json')->set_output(json_encode(array("res" => "ko" ))); + echo json_encode(array()); } - } - else if ($this->input->post('proses') == 'cek_data') { - // print_r('cek data'); - $nik = $this->input->post('nik'); - $level = $this->input->post('level'); - // print_r($level); - $cek_data =$this->model->tampil_data_where('tb_login',['nik_'.$level =>$nik ])->result(); + if ($this->input->post('proses') == 'table_simpanan_user_sukarela') { + $i = 1; + $cek_data = $this->model->tampil_data_where('tb_user',array('nik_user' => $this->input->post('nik_user')))->result(); + + if(count($cek_data) > 0){ + $ket = json_decode($cek_data[0]->simpanan_sukarela,true); + function date_simpanan($a,$b) + { + return strcmp($a['tanggal_simpanan'],$b['tanggal_simpanan']); + } + /// atur kembali array berdasarkan tanggal + usort($ket , 'date_simpanan'); + foreach ($ket as $key => $value) { + // $data[$i]['no'] = $i; + $data[$i]['waktu'] = $value['tanggal_simpanan']; + $data[$i]['ket'] = 'Rp. '. number_format($value['simpanan']); + // $data[$i]['foto'] = $value['foto']; - // print_r(count($cek_data)); - if (count($cek_data) > 0) { - print_r(json_encode(['res' => 'ok' , 'url' => $level.'/'])); + $i++; + + } + $out = array_values($data); + echo json_encode($out); } else { - print_r(json_encode(['res' => 'ko' ])); + echo json_encode(array()); } } - else if ($this->input->post('proses') == 'cek_data_detail') { - // print_r('cek data'); - $nik = $this->input->post('nik'); - $level = $this->input->post('level'); - // print_r($level); - $cek_data =$this->model->tampil_data_where('tb_'.$level,['nik_'.$level =>$nik ])->result(); - - // print_r(count($cek_data)); - if (count($cek_data) > 0) { - print_r(json_encode(['res' => 'ok' , 'nama' => $cek_data[0]->nama])); - } - else - { - print_r(json_encode(['res' => 'ko' ])); - } - } } - - - - - - + } ?> \ No newline at end of file diff --git a/application/models/M_tabel_ss.php b/application/models/M_tabel_ss.php new file mode 100644 index 0000000..77173f1 --- /dev/null +++ b/application/models/M_tabel_ss.php @@ -0,0 +1,109 @@ +load->database(); + } + + private function _get_datatables_query($column_search,$column_order,$order,$table,$table_join,$where,$as) + { + + + + $column_search = $column_search; + $column_order = $column_order; + $order = $order; + $this->db->select($as); + $this->db->from($table); + + if ($where != null) { + $this->db->where($where); + } + + if ($table_join != null) { + // $this->db->where($where); + foreach ($table_join as $key => $value) { + $this->db->join($value['table'],$value['join']); + } + } + + + $i = 0; + + + // foreach ($this->column_search as $item) // looping awal + foreach ($column_search as $item) // looping awal + { + if($_POST['search']['value']) // jika datatable mengirimkan pencarian dengan metode POST + { + + if($i===0) // looping awal + { + $this->db->group_start(); + $this->db->like($item, $_POST['search']['value']); + } + else + { + $this->db->or_like($item, $_POST['search']['value']); + } + + // if(count($this->column_search) - 1 == $i) + if(count($column_search) - 1 == $i) + $this->db->group_end(); + } + $i++; + } + + if(isset($_POST['order'])) + { + $this->db->order_by($column_order[$_POST['order']['0']['column']], $_POST['order']['0']['dir']); + // $this->db->order_by($this->column_order[$_POST['order']['0']['column']], $_POST['order']['0']['dir']); + } + else if(isset($this->order)) + { + $order = $this->order; + $this->db->order_by(key($order), $order[key($order)]); + } + } + + function get_datatables($column_search,$column_order,$order,$table,$table_join,$where,$as) + { + $this->_get_datatables_query($column_search,$column_order,$order,$table,$table_join,$where,$as); + if($_POST['length'] != -1) + $this->db->limit($_POST['length'], $_POST['start']); + $query = $this->db->get(); + return $query->result(); + } + + function count_filtered($column_search,$column_order,$order,$table,$table_join,$where,$as) + { + $this->_get_datatables_query($column_search,$column_order,$order,$table,$table_join,$where,$as); + $query = $this->db->get(); + return $query->num_rows(); + } + + public function count_all($table,$table_join,$where,$as) + { + + $this->db->select($as); + $this->db->from($table); + + if ($where != null) { + $this->db->where($where); + } + + if ($table_join != null) { + // $this->db->where($where); + foreach ($table_join as $key => $value) { + $this->db->join($value['table'],$value['join']); + } + } + + return $this->db->count_all_results(); + } + +} \ No newline at end of file diff --git a/application/models/Model.php b/application/models/Model.php index 682f1e2..402f883 100644 --- a/application/models/Model.php +++ b/application/models/Model.php @@ -32,6 +32,16 @@ class Model extends CI_Model { return $query; } + function tampil_data_where1($namatabel,$array,$bintang) //gunakan ini untuk menampilkan tabel yg lebih spesifik 'where' + { + $this->db->select($bintang); + $this->db->from($namatabel); + $this->db->where($array); + // $this->db->limit(1); + $query = $this->db->get(); + return $query; + } + function tampil_data_keseluruhan_order_by($namatabel,$order_by,$order) //gunakan ini untuk menampilkan tabel yg lebih spesifik 'where' { $this->db->select("*"); @@ -142,6 +152,34 @@ class Model extends CI_Model { } } + function upload_foto($value,$key,$cek_no,$kategori) { + + $data = $value; + $data = substr($data, 0, -2); + // $data = 'data:image/'.$data; + // print_r($data); + // define('UPLOAD_DIR', 'images/'); + $image_parts = explode(";base64,", $data); + $image_type_aux = explode("image/", $image_parts[0]); + $image_type = $image_type_aux[1]; + $image_base64 = base64_decode($image_parts[1]); + // if ($e == 1) { + // $edit = '_edit'; + // $file = 'images/'.$cek_no. '/foto'.$edit.$key.'.png'; + // } + // else + // { + // $edit = ''; + if ($kategori == 'berita') { + $file = 'assets/admin_assets/images/berita/'.$cek_no. '/foto'.$key.'.png'; + } + if ($kategori == 'iklan') { + $file = 'assets/admin_assets/images/iklan/'.$cek_no. '/foto'.$key.'.png'; + } + file_put_contents($file, $image_base64); + + } + function bulan($bulan) { @@ -203,37 +241,68 @@ class Model extends CI_Model { return $bulannya; } - function qrcode_buku($kode){ - include "phpqrcode/qrlib.php"; - $kode = $kode; - - // $PNG_TEMP_DIR = 'images/'.$kategori; - - $PNG_WEB_DIR = 'images/buku/'; - - if (!file_exists($PNG_WEB_DIR)) - mkdir($PNG_WEB_DIR); - - $errorCorrectionLevel = 'H'; - - $matrixPointSize = 10; - - $filename =$PNG_WEB_DIR.md5($kode).'.png'; - QRcode::png($kode, $filename, $errorCorrectionLevel, $matrixPointSize, 2); - - if (file_exists($PNG_WEB_DIR.md5($kode).'.png') > 0) { - return "ada"; - }else{ - return "tiada"; + function hari($hari) + { + // $ini = '' + switch ($hari) { + case 'Sunday': + $ini = 'Ahad'; + break; + case 'Monday': + $ini = 'Senin'; + break; + case 'Tuesday': + $ini = 'Selasa'; + break; + case 'Wednesday': + $ini = 'Rabu'; + break; + case 'Thursday': + $ini = 'Kamis'; + break; + case 'Friday': + $ini = 'Jumat'; + break; + case 'Saturday': + $ini = 'Sabtu'; + break; + } + + return $ini; } - function cek_last_ai(){ - return $this->db->query("SELECT `AUTO_INCREMENT` as no - FROM INFORMATION_SCHEMA.TABLES - WHERE TABLE_SCHEMA = '".$this->db->database."' - AND TABLE_NAME = 'tb_map_perpustakaan'"); + // function qrcode_buku($kode){ + // include "phpqrcode/qrlib.php"; + // $kode = $kode; + + // // $PNG_TEMP_DIR = 'images/'.$kategori; + + // $PNG_WEB_DIR = 'images/buku/'; - } + // if (!file_exists($PNG_WEB_DIR)) + // mkdir($PNG_WEB_DIR); + + // $errorCorrectionLevel = 'H'; + + // $matrixPointSize = 10; + + // $filename =$PNG_WEB_DIR.md5($kode).'.png'; + // QRcode::png($kode, $filename, $errorCorrectionLevel, $matrixPointSize, 2); + + // if (file_exists($PNG_WEB_DIR.md5($kode).'.png') > 0) { + // return "ada"; + // }else{ + // return "tiada"; + // } + // } + + function cek_last_ai($tables){ + return $this->db->query("SELECT `AUTO_INCREMENT` as no + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = '".$this->db->database."' + AND TABLE_NAME = '".$tables."'")->result()[0]->no; + + } } \ No newline at end of file diff --git a/composer.json b/composer.json index b95f6cb..78b81df 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ "paragonie/random_compat": "Provides better randomness in PHP 5.x" }, "require-dev": { - "mikey179/vfsStream": "1.1.*", + "mikey179/vfsstream": "1.1.*", "phpunit/phpunit": "4.* || 5.*" } } diff --git a/readme.rst b/readme.rst index 36264b3..9399e9f 100644 --- a/readme.rst +++ b/readme.rst @@ -2,7 +2,7 @@ Kicap Karan - Koperasi Server ################### -Back of Koperasi Project +Backend of Koperasi Project ******************* Release Information @@ -15,5 +15,5 @@ License Created By Kicap Karan Facebook https://www.facebook.com/kicap.karan -Website https://kicap-karan.com +Website https://kicap-karan.com/index.html