app = $app; $this->db = $db; $this->web_app = (array) $session->get('WEB_APP'); $this->id_cab = Param::Int("CabID", (int) $session->get('APP_INV')['CABANGID']); $this->mode = Param::Get("mode", ""); $this->mode_detail = Param::Get("mode_detail", ""); $this->no_tx = Param::Get("No_TX", ""); $this->id_kate = Param::Int("KateID", 0); $this->id_ope = Param::Int("OpeID", 0); $this->id_produk = Param::Int("ProdukID", 0); $this->tujuan = Param::Get("Tujuan", ""); $this->no_hp = Param::Get("No_HP", ""); $this->ppob = new PPOBClient($app); } public function table_tx() { if (in_array($this->mode_detail, ["reproc","delete"])) { $adetail = $this->db->fetchRow("SELECT * FROM ppob_tx WHERE No_TX=?", [$this->no_tx]); $proses = (int) $adetail['Proses'] ?? 0; if ($this->mode_detail === "delete") { if ($proses === 0) { $this->db->delete("ppob_tx", "No_TX=?", [$this->no_tx]); $ajson[] = ['type'=>"msg", 'mode'=>"info", 'wait'=>2000, 'value'=>"Transaksi sukses dihapus !"]; } else { $ajson[] = ['type'=>"msg", 'mode'=>"error", 'wait'=>2000, 'value'=>"Ada masalah dalam proses transaksi !"]; } } else if ($this->mode_detail === "reproc") { if ($proses === 0) { // PROSES API TRIFONIA PULSA $appob = $this->ppob->TopUp($adetail['Kode'], $adetail['Tujuan'], $adetail['No_TX'], $adetail['No_HP']); if (count($appob) > 0) { $ajson[] = ['type'=>"msg", 'mode'=>"info", 'wait'=>2000, 'value'=>$appob['Message']]; } } else { $ajson[] = ['type'=>"msg", 'mode'=>"error", 'wait'=>2000, 'value'=>"Ada masalah dalam Proses !"]; } } } $tcari = Param::Get("Cari_PPOB", ""); $tsql = 'CabID=?'; $asql = [$this->id_cab]; if (empty($tcari)) { $tsql .= " AND UserID=? AND Tgl_TX=?"; array_push($asql, $this->app->user()->id(), tgl_ymd()); } else { $tsql .= " AND CONCAT(No_TX,Tujuan,No_HP,DATE_FORMAT(Tgl_TX,'%d-%m-%Y')) LIKE ?"; $asql[] = '%' . $tcari . '%'; } $obj = new Table($this->app); $obj->set_table("(SELECT *,CONCAT(DATE_FORMAT(DateStamp,'%d-%m-%Y %H:%i:%s'),' - ',Kode,'
',Tujuan,'',IF(No_HP='','',CONCAT('
HP : ',No_HP,''))) Info_TX FROM ppob_tx WHERE ".$tsql.") T LEFT JOIN (SELECT ProdukID,KateID FROM ppob_produk) P ON (P.ProdukID=T.ProdukID)", "T.*,IFNULL(P.KateID,0) KateID", "", $asql); $obj->set_footer("SUM(Harga_Jual) Harga_Jual"); $obj->add_field("No_TX", "No. TX", "c"); $obj->add_field("KateID", "Kate", "c", "App\Utils\PPOBClient::Icon_Kate"); $obj->add_field("Info_TX", "Informasi Transaksi", "l"); $obj->add_field("Harga_Jual", "Harga", "r", "rupiah", "rupiah"); $obj->add_field("Proses", "P", "c", "checkbox"); $obj->add_field("Status", "Status", "c", "App\Utils\PPOBClient::Badge_Status"); $obj->set_field_order("No_TX", "D"); $obj->add_row_btn("printer", "Cetak Nota", "PrabayarJS.nota_print", "Status", 4); $obj->add_row_btn("arrow-left-right", "Proses Ulang", "PrabayarJS.nota_reproc", "Proses", 0); $obj->add_row_btn("clipboard", "Detail", "PrabayarJS.nota_detail", "Proses", 1); if ($this->app->user()->is_level(1)) $obj->add_row_btn("trash", "Hapus", "PrabayarJS.nota_delete", "Status", 0); $this->app->json([ $obj->json_table("divPOS1", 5) ]); } public function form_master() { $tkembali = "0"; if ($this->mode === "save") { $this->no_tx = $this->ppob->Nomor_Baru("P", tgl_dmy()); $no_seq = $this->db->fetchField("SELECT COALESCE(MAX(Counter),0)+1 Seq_TX FROM ppob_tx WHERE Tgl_TX=? AND ProdukID=? AND Tujuan=?", [tgl_ymd(), $this->id_produk, $this->tujuan]) ?? 1; $id_kartu = Param::Int("KartuID", 0); $no_kartu = ""; $nama_kartu = ""; if ($id_kartu > 0) { $no_kartu = Param::Get("No_Kartu", ""); $nama_kartu = Param::Get("Nama_Kartu", ""); } $apul = $this->db->fetchRow("SELECT * FROM ppob_produk WHERE ProdukID=?", [$this->id_produk]); $sql = new SQL($this->app); $sql->set_table("ppob_tx"); $sql->add_param("No_TX", $this->no_tx); $sql->add_param_date("Tgl_TX", tgl_dmy()); $sql->add_param("CabID", $this->id_cab); $sql->add_param("ProdukID"); $sql->add_param("Kode", $apul['Kode']); $sql->add_param("Tujuan"); $sql->add_param("No_HP"); $sql->add_param("Counter", $no_seq); $sql->add_param("Harga_Beli", $apul['Harga_Pokok']); $sql->add_param("Harga_Jual", $apul['Harga_Jual']); $sql->add_param("Total_Bayar"); $sql->add_param("KartuID", $id_kartu); $sql->add_param("No_Kartu", $no_kartu); $sql->add_param("Nama_Kartu", $nama_kartu); $sql->add_param_userid(); $sql->InsertDB(); $this->mode = "reproc"; $tkembali = ''.rupiah($apul['Harga_Jual']-Param::Get("Total_Bayar",0)).''; //jika token pln if (($apul['KateID'] ?? 0) === 5) { $this->db->runQuery("INSERT IGNORE INTO ppob_pend (No_TX,CabID,UserID) VALUES (?, ?, ?)", [$this->no_tx, $this->id_cab, $this->app->user()->id()]); } } $form = new Form($this->app); $tkate = $form->option_que("_", "KateID", $this->id_kate, true, false, "SELECT * FROM ppob_kategori WHERE KateID IN (SELECT KateID FROM ppob_produk WHERE Status=1 AND Harga_Jual>0)", ["KateID","N_Kate"], null, null, "PrabayarJS.oc_KateID"); $tope = $form->option("_", "OpeID", 0, true, false, [0=>""], null, "PrabayarJS.oc_OpeID"); $tproduk = $form->option("_", "ProdukID", 0, true, false, [0=>""], null, "PrabayarJS.oc_ProdukID"); $ttujuan = $form->textbox("_", "Tujuan", "", true, true, "phone", "Ketik Nomor Tujuan"); $tno_hp = $form->textbox("_", "No_HP", "", true, true, "phone", "no hp untuk pengiriman kode token"); $ajson['html'] = '
'.$tkembali.'
'.$tkate.'
'.$ttujuan.'
'.$tno_hp.'
'.$tope.'
'.$tproduk.'
'; $this->app->json($ajson); } public function form_tx() { $ainfo = $this->db->fetchRow("SELECT T.*,DATE_FORMAT(T.DateStamp,'%d-%m-%Y %H:%i:%s') Tgl_TX1,IFNULL(P.KateID,0) KateID,P.Nama_Produk FROM (SELECT * FROM ppob_tx WHERE No_TX=? LIMIT 1) T LEFT JOIN ppob_produk P ON (P.ProdukID=T.ProdukID)", [$this->no_tx]) ?? ['No_TX'=>$this->no_tx, 'Tgl_TX1'=>tgl_dmy(true), 'Tujuan'=>"", 'No_HP'=>"", 'Nama_Produk'=>"", 'Harga_Jual'=>0, 'Status'=>0, 'KateID'=>0]; $atoken = $this->ppob->SN_PLN($ainfo['SN']); $ajson['html'] = '
'; if ((int) $ainfo['KateID'] === 5 && (int) $ainfo['Status'] === 4) { $ajson['html'] .= '

'; } $this->app->json($ajson); } public function form_kasir() { $tot_jual = Param::Float("Harga_Jual", 0); $form = new Form($this->app); $tjual = $form->textbox("_", "popTotal_Jual", uang($tot_jual), false, false, "double"); $ttunai = $form->textbox("_", "popTotal_Tunai", 0, true, false, "double"); $tkartu = $form->textbox("_", "popTotal_Kartu", 0, true, false, "double"); $tsisa = $form->textbox("_", "popTotal_Sisa", 0, false, false, "double"); $okartu = $form->option_db("_", "popKartuID", 0, true, false, "para_rek_pos", ["KartuID","Kode_Kartu"], "Aktif=1", [0,"Pilihan Non Tunai"]); $tnokartu = $form->textbox("_", "popNo_Kartu", "", true, false, "text"); $tnamakartu = $form->textbox("_", "popNama_Kartu", "", true, false, "text"); $ajson['html'] = '
Total PPOB Rp.
'.$tjual.'
Tunai Rp.
'.$ttunai.'
'.$okartu.'
'.$tkartu.'
Kembali Rp.
'.$tsisa.'

Nomor Kartu
'.$tnokartu.'
Nama Pemilik
'.$tnamakartu.'

 
'; $ajson['Total_Disp'] = rupiah($tot_jual); $this->app->json($ajson); } public function option_operator() { $aoption = ['type' => "option", 'id' => "OpeID", 'value' => 0, 'avalue' => []]; if ($this->id_kate === 5) {//token $aoption['avalue'][] = ['value'=>10, 'html'=>"PLN Prabayar"]; } else if ($this->id_kate === 6) {//emoney & ojek //todo: di update database, sesuaikan dg pola baru ! $aoption['avalue'][] = ['value'=>11, 'html'=>"OVO"]; $aoption['avalue'][] = ['value'=>12, 'html'=>"GoPay"]; $aoption['avalue'][] = ['value'=>13, 'html'=>"Gojek Driver"]; $aoption['avalue'][] = ['value'=>14, 'html'=>"Grab"]; $aoption['avalue'][] = ['value'=>15, 'html'=>"Dana"]; } else if ($this->id_kate === 8) {//voucher $aoption['avalue'][] = ['value'=>0, 'html'=>""]; } else {//pulsa, data, sms, transfer $tsql = (strlen($this->tujuan) >= 4) ? " AND Prefix_Ope LIKE '%".substr($this->tujuan,0,4)."%'" : ""; $aope = $this->db->fetchAll("SELECT * FROM ppob_operator WHERE OpeID IN (SELECT OpeID FROM ppob_produk WHERE Status=1 AND Harga_Jual>0 AND KateID<5)".$tsql); if (count($aope) > 1) $aoption['avalue'][] = ['value'=>0, 'html'=>""]; foreach ($aope as $ope) { if (count($aope) === 1) $aoption['value'] = $ope['OpeID']; $aoption['avalue'][] = ['value'=>$ope['OpeID'], 'html'=>$ope['N_Ope']]; } } $this->app->json([ $aoption ]); } public function option_produk() { $aoption = ['type' => "option", 'id' => "ProdukID", 'value' => 0, 'avalue' => [['value'=>0, 'label'=>0, 'html'=>""]]]; $aproduk = $this->db->fetchAll("SELECT * FROM ppob_produk WHERE Status=1 AND KateID=? AND OpeID=? AND Harga_Jual>0 ORDER BY Harga_Jual", [$this->id_kate, $this->id_ope]); foreach ($aproduk as $produk) { $aoption['avalue'][] = ['value'=>$produk['ProdukID'], 'label'=>$produk['Harga_Jual'], 'html'=>$produk['Nama_Produk'].' - Rp. '.rupiah($produk['Harga_Jual'])]; } $this->app->json([ $aoption ]); } public function config_pole() { $ajson['pole'] = []; $apole = $this->db->fetchRow("SELECT * FROM disp_config WHERE REG_ID=?", [$this->web_app['APP_CODE']]); foreach ($apole as $_key => $_val) { if (str_contains($_key, "POLE")) { if (str_contains($_key, "ENABLE")) $_val = (int) $_val; $ajson['pole'][str_replace("POLE_","",$_key)] = $_val; } } $this->app->json($ajson); } public function index() { $this->app->json(['html' => '
 
 
' ]); } }