app = $app; $this->db = $db; $this->web_app = (array) $session->get('WEB_APP'); $this->app_gel = (array) $session->get('APP_GEL'); $this->app_inv = (array) $session->get('APP_INV'); $this->id_cab = $session->get('APP_INV')['CABANGID']; $this->id_member_def = $session->get('APP_INV')['MEMBERID']; $this->id_member = Param::Int("MemberID", $this->id_member_def); $this->id_grup_member = Param::Int("Grup_MemberID", $session->get('APP_INV')['ECERANID']); $this->mode = Param::Get("mode", ""); $this->mode_detail = Param::Get("mode_detail", ""); $this->no_jual = Param::Get("No_Jual", ""); $this->is_pend = str_contains($this->no_jual, "POS") === true; $this->id_inv = Param::Int("InvID", 0); $this->id_satuan = Param::Int("SatuanID", 0); $this->id_varian = Param::Int("VarianID", 0); $this->inv = new Inv($app); $this->gel = new Gel($app); } public function table_detail() { if ( in_array($this->mode_detail, ["insert","update"]) ) { $iqty = Param::Float("Qty", 0) * -1; $disk_rp = Param::Float("Disk_Rupiah", 0); $disk_psn = Param::Float("Disk_Persen", 0); if ($disk_psn > 0) $disk_rp = Param::Float("Harga_Jual", 0) * $disk_psn * 0.01; $sql = new SQL($this->app); $sql->set_table("tmp_inv_detail"); $sql->add_param("No_Ref", $this->no_jual); $sql->add_param("InvID"); $sql->add_param("SatuanID"); $sql->add_param("VarianID"); $sql->add_param("Qty", $iqty); $sql->add_param("Harga_Beli"); $sql->add_param("Harga_Jual"); $sql->add_param("Disk_Rupiah", $disk_rp); $sql->add_param("Total_Diskon", "Disk_Rupiah*-Qty", true); $sql->add_param_unix(); $sql->add_param_userid(); $sql->add_where("ID"); $sql->add_where("No_Ref", $this->no_jual); if ( $this->mode_detail === "insert" ) { $sql->InsertDB(); } else if ( $this->mode_detail === "update" ) { $sql->UpdateDB(); } } else if ( $this->mode_detail === "delete" ) { $this->db->runQuery("UPDATE tmp_inv_detail SET Qty=0,Stok=0,Disk_Rupiah=0,Total_Diskon=0 WHERE No_Ref=? AND ID=?", [$this->no_jual, Param::Int("ID", 0)]); } $asql = [$this->no_jual, $this->app->user()->unix()]; $obj = new Table($this->app); $obj->set_css("tabel-pos"); $obj->set_table("(SELECT * FROM tmp_inv_detail WHERE No_Ref=? AND Unix=? AND Promo<2) D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID AND D.VarianID=P.VarianID)", "D.*,-D.Qty Qty2,P.Kode_SKU,P.Nama_Lengkap,-D.Qty*(D.Harga_Jual-D.Disk_Rupiah) Total,IF(D.Qty=0,0,1) IDEL", "", $asql); $obj->set_footer("CONCAT('Q: ',FORMAT(SUM(-D.Qty),2),' / I: ',FORMAT(COUNT(DISTINCT D.InvID),0)) Harga_Jual,SUM(-D.Qty*D.Disk_Rupiah) Disk_Rupiah,SUM(-D.Qty*(D.Harga_Jual-D.Disk_Rupiah)) Total"); $obj->add_field("ID", "No", "c"); $obj->add_field("InvID", "InvID", "hid"); $obj->add_field("SatuanID", "SatuanID", "hid"); $obj->add_field("VarianID", "VarianID", "hid"); $obj->add_field("Kode_SKU", "SKU", "c"); $obj->add_field("Nama_Lengkap", "Nama Barang", "awr"); $obj->add_field("Qty2", "Qty", "r", "rupiah2"); $obj->add_field("Harga_Jual", "Harga @", "r", "rupiah"); $obj->add_field("Disk_Rupiah", "Diskon @", "r", "rupiah", "rupiah"); $obj->add_field("Total", "Jumlah", "r", "rupiah", "rupiah"); $obj->add_field("Promo", "S", "c", [0=>"N",1=>"T",2=>"D",3=>"P",4=>"H"]); $obj->set_field_order("ID", "D"); $obj->set_row_color("IDEL", "0", "rcoret"); $obj->add_row_btn("clipboard", "Ubah", "POSJS.detail_ubah"); $obj->add_row_btn("trash", "Hapus", "POSJS.detail_hapus", "IDEL", "1"); $ajson[] = $obj->json_table("divPOS1", 8); $ainfo = ['Total'=>0, 'Item'=>0]; $_info = $this->db->fetchRow("SELECT SUM(-Qty*(Harga_Jual-Disk_Rupiah)) Total,COUNT(*) Item FROM tmp_inv_detail WHERE No_Ref=? AND Unix=? AND Promo<2", $asql); if ($_info) $ainfo = $_info->getData(); $ajson[] = ['type'=>"form", 'id'=>"Total_Nota", 'value'=>$ainfo['Total']]; $ajson[] = ['type'=>"form", 'id'=>"Total_Item", 'value'=>$ainfo['Item']]; if ($ainfo['Item'] > 0) $ajson[] = ['type'=>"html", 'id'=>"Total_Disp", 'value'=>rupiah($ainfo['Total'])]; $this->app->json($ajson); } public function brow_nota() { $tcari = Param::Get("Cari_Nota"); $tsql = ''; $asql = [$this->id_cab]; if (empty($tcari)) { $tsql .= " AND UserID=? AND Tgl_Jual=?"; array_push($asql, $this->app->user()->id(), tgl_ymd()); } else { $tsql .= " AND CONCAT(No_Jual,DATE_FORMAT(Tgl_Jual,'%d-%m-%Y')) LIKE ?"; array_push($asql, '%' . $tcari . '%'); } $obj = new Table($this->app); $obj->set_table("(SELECT * FROM inv_jual WHERE POS=1 AND CabID=?".$tsql.") J LEFT JOIN para_rek_pos P ON (J.KartuID=P.KartuID) LEFT JOIN para_member M ON (J.MemberID=M.MemberID)", "J.*,DATE_FORMAT(J.DateStamp,'%H:%i:%s') Tgl_Jual2,J.Total_Jual-J.Total_Diskon Total,IFNULL(M.Nama_Member,'') Nama_Member,IF(ISNULL(P.Kode_Kartu),'Tunai',P.Kode_Kartu) Kartu", "", $asql); $obj->set_footer("SUM(Total_Jual) Total_Jual,SUM(Total_Diskon) Total_Diskon,SUM(Total_Jual-Total_Diskon) Total"); $obj->add_field("No_Jual", "No. Nota", "c"); $obj->add_field("Tgl_Jual", "Tanggal", "c", "sqltgl", "", "val-tgl"); $obj->add_field("Tgl_Jual2", "Jam", "c"); $obj->add_field("Nama_Member", "Member", "awr"); $obj->add_field("Total_Jual", "Sub. Total", "r", "rupiah2", "rupiah2"); $obj->add_field("Total_Diskon", "Diskon", "r", "rupiah2", "rupiah2"); $obj->add_field("Total", "Jumlah", "r", "rupiah2", "rupiah2"); $obj->add_field("Kartu", "C / D", "l"); if (empty($tcari)) { $obj->set_field_order("Tgl_Jual2", "D"); } else { $obj->set_field_order("Tgl_Jual", "D"); } $obj->add_row_btn("printer", "Cetak", "POSJS.nota_print"); $obj->add_row_btn("clipboard", "Ubah", "POSJS.nota_select"); if ($this->app->user()->is_level(1)) $obj->add_row_btn("trash", "Hapus", "POSJS.nota_delete", "CabID", $this->id_cab); else $obj->add_row_btn("trash", "Hapus", "POSJS.nota_delete", "UserID", $this->app->user()->id()); $this->app->json([ $obj->db_table("divBrowNota") ]); } public function brow_pending() { $obj = new Table($this->app); $obj->set_table("(SELECT *,Total_Jual-Total_Diskon Jumlah FROM inv_jual_pend WHERE POS=1 AND CabID=? AND UserID=?) J LEFT JOIN para_member B ON (J.MemberID=B.MemberID)", "J.*,B.Nama_Member", "", [$this->id_cab, $this->app->user()->id()]); $obj->add_field("No_Jual", "No. Nota", "c"); $obj->add_field("Tgl_Jual", "Tgl. Pending", "c", "sqltgl", "", "val-tgl"); $obj->add_field("Nama_Member", "Nama Member", "awr"); $obj->add_field("Total_Jual", "Sub. Total", "r", "rupiah2"); $obj->add_field("Total_Diskon", "Diskon", "r", "rupiah2"); $obj->add_field("Jumlah", "Jumlah", "r", "rupiah2"); $obj->set_field_order("No_Jual", "D"); $obj->add_row_btn("save", "Pilih", "POSJS.pending_select"); if ($this->app->user()->is_level(1)) $obj->add_row_btn("trash", "Hapus", "POSJS.pending_delete", "UserID", $this->app->user()->id()); $this->app->json([ $obj->db_table("divBrowPending") ]); } public function brow_member() { $tcari = Param::Get("Cari_Member"); $tsql = ''; $asql = [1]; if (!empty($tcari)) { $tsql .= " AND CONCAT_WS(Kode_Member,Nama_Member,Alamat_Member,Telp_Member) LIKE ?"; $asql[] = '%' . $tcari . '%'; } $obj = new Table($this->app); $obj->set_table("para_member", "*,TRIM(CONCAT(Kode_Member,'\n',Kota_Member)) Info_Member", "Aktif=?".$tsql, $asql); $obj->add_field("MemberID", "ID", "hid"); $obj->add_field("Grup_MemberID", "Grup ID", "hid"); $obj->add_field("Kode_Member", "Kode", "c"); $obj->add_field("Nama_Member", "Nama Member", "awr"); $obj->add_field("Alamat_Member", "Alamat", "awr"); $obj->add_field("Telp_Member", "Telp.", "awr"); $obj->add_field("Info_Member", "Info", "hid"); $obj->set_field_order("Nama_Member", "A"); $obj->set_func_select("POSJS.member_select"); $this->app->json([ $obj->db_table("divBrowMember") ]); } public function brow_produk() { $tcari = Param::Get("Cari_Produk"); $tsql = ''; $asql = [1, $this->id_grup_member]; if (!empty($tcari)) { $tsql .= " AND Barcode_Nama LIKE ?"; $asql[] = '%' . $tcari . '%'; } $obj = new Table($this->app); $obj->set_table("inv_produk_join", "*", "Aktif=? AND Grup_MemberID=? AND Harga_Jual>0".$tsql, $asql); $obj->add_field("InvID", "ID", "hid"); $obj->add_field("SatuanID", "ID", "hid"); $obj->add_field("VarianID", "ID", "hid"); $obj->add_field("Kode_SKU", "SKU", "c"); $obj->add_field("Kode_Barcode", "Barcode", "c"); $obj->add_field("Nama_Lengkap", "Nama Barang", "awr"); $obj->add_field("Harga_Jual", "Harga Jual", "r", "rupiah"); $obj->set_field_order("Kode_SKU", "A"); $obj->set_func_select("POSJS.produk_select"); $this->app->json([ $obj->db_table("divBrowProduk") ]); } public function auto_member() { $tcari = Param::Get("Auto_Query", ""); $ajson['autodata'] = []; $stat = $this->db->runQuery("SELECT MemberID,Grup_MemberID,Kode_Member,Nama_Member,TRIM(CONCAT(Kode_Member,'\n',Kota_Member)) Info_Member FROM para_member WHERE Aktif=1 AND CONCAT(Kode_Member,Nama_Member,Alamat_Member,Telp_Member) LIKE ? ORDER BY Nama_Member LIMIT 50", ['%'.$tcari.'%']); while ($row = $stat->fetch(SimplePdo::FETCH_ASSOC)) { $ajson['autodata'][] = ['value'=>$row['MemberID'], 'text'=>$row['Nama_Member'], 'html'=>''.$row['Kode_Member'].' '.$row['Nama_Member'], 'data'=>$row['Grup_MemberID'].':'.$row['Info_Member'], 'bc'=>0]; } $this->app->json($ajson); } public function auto_produk() { $tcari = Param::Get("Auto_Query", ""); $ajson['autodata'] = []; $bcode = 0; $arec = []; if (is_numeric($tcari) && strlen($tcari) === 8) { // Cari by Member // M : Grup_Member : Info_Member $_row = $this->db->fetchRow("SELECT MemberID InvID,Nama_Member Nama_Lengkap,CONCAT('M:',Grup_MemberID,':',TRIM(CONCAT(Kode_Member,'\n',Kota_Member))) Data2 FROM para_member WHERE Aktif=1 AND Kode_Member=?", [$tcari]); if ($_row) { $bcode = 1; $arec = $_row->getData(); } } // Cari by SKU + Barcode // P : Satuan : Varian : Harga_Pokok : Harga_Jual : Stok if ($bcode === 0) { $_row = $this->db->fetchRow("SELECT P.InvID,P.Nama_Lengkap,CONCAT('P:',P.SatuanID,':',P.VarianID,':',CONVERT(P.Harga_Pokok USING UTF8),':',CONVERT(P.Harga_Jual USING UTF8),':',CONVERT(IFNULL(X.Stok,0) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_join WHERE Aktif=1 AND Harga_Jual>0 AND Grup_MemberID=? AND (Kode_SKU=? OR Kode_Barcode=?)) P LEFT JOIN inv_stok X ON (X.CabID=? AND X.InvID=P.InvID)", [$this->id_grup_member, $tcari, $tcari, $this->id_cab]); if ($_row) { $bcode = 1; $arec = $_row->getData(); } } if ($bcode === 1) { $ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Lengkap'], 'data'=>$arec['Data2'], 'bc'=>1]; } else { $stat = $this->db->runQuery("SELECT P.InvID,P.Nama_Lengkap,P.Kode_SKU,IF(IFNULL(X.Stok,0)=0,'KOSONG',ROUND(X.Stok/P.Qty,2)) Sisa_Stok,P.Harga_Jual,CONCAT('P:',P.SatuanID,':',P.VarianID,':',CONVERT(P.Harga_Pokok USING UTF8),':',CONVERT(P.Harga_Jual USING UTF8),':',CONVERT(IFNULL(X.Stok,0) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_join WHERE Barcode_Nama LIKE ? AND Aktif=1 AND Harga_Jual>0 AND Grup_MemberID=?) P LEFT JOIN inv_stok X ON (X.CabID=? AND X.InvID=P.InvID) ORDER BY P.Nama_Produk,P.Qty LIMIT 50", ['%'.$tcari.'%', $this->id_grup_member, $this->id_cab]); while ($row = $stat->fetch(SimplePdo::FETCH_ASSOC)) { $ajson['autodata'][] = ['value'=>$row['InvID'], 'text'=>$row['Nama_Lengkap'], 'html'=>''.$row['Kode_SKU'].' '.$row['Nama_Lengkap'].' - Rp'.rupiah($row['Harga_Jual']).' ('.(string) $row['Sisa_Stok'].')', 'data'=>$row['Data2'], 'bc'=>0]; } } $this->app->json($ajson); } public function form_master() { $ajson = [ 'error'=>"", 'html'=>"" ]; $atabel = []; if ($this->mode === "pending-edit") { $this->inv->Pending_Edit($this->no_jual); $atabel = $this->Data_Jual($this->no_jual); $this->mode = "edit"; } else if ($this->mode === "pending-save") { $b_baru = false; if (str_ends_with($this->no_jual, "#00")) { $b_baru = true; $no_lama = $this->no_jual; $this->no_jual = $this->Pending_Nomor(); $this->inv->Pending_Save($no_lama, $this->no_jual); } $apending = $this->db->fetchRow("SELECT SUM(-Qty*Harga_Jual) Jual,SUM(-Qty*Disk_Rupiah) Diskon FROM tmp_inv_detail WHERE No_Ref=?", [$this->no_jual]) ?? ['Jual'=>0, 'Diskon'=>0]; $sql = new SQL($this->app); $sql->set_table("inv_jual_pend"); $sql->add_param("No_Jual", $this->no_jual); $sql->add_param_date("Tgl_Jual"); $sql->add_param("CabID", $this->id_cab); $sql->add_param("MemberID"); $sql->add_param("Total_Jual", $apending['Jual']); $sql->add_param("Total_Diskon", $apending['Diskon']); $sql->add_param_userid(); $sql->add_where("No_Jual", $this->no_jual); if ($b_baru) $sql->InsertDB(); else $sql->UpdateDB(); $atabel = $this->Data_Jual(); } else if ($this->mode === "pending-delete") { $this->inv->Pending_Delete($this->no_jual); $this->db->delete("inv_jual_pend", "No_Jual=?", [$this->no_jual]); $atabel = $this->Data_Jual(); } else if ($this->mode === "edit") { $this->inv->Detail_Copy($this->no_jual, true); $atabel = $this->Data_Jual($this->no_jual); } else if ($this->mode === "save") { $no_lama = $this->no_jual; if ($this->is_pend) { $this->no_jual = $this->inv->Nomor_POS("", tgl_dmy(), true); if (!str_ends_with($no_lama, "#00")) $this->db->delete("inv_jual_pend", "No_Jual=?", [$no_lama]); } // PROSES PROMO $this->inv->Promo_Barang($no_lama, tgl_dmy(), $this->id_grup_member); $tot_potong = $this->inv->Promo_Total($no_lama, tgl_dmy(), $this->id_grup_member); $this->inv->Detail_Save($this->no_jual, 6, $this->id_cab, tgl_dmy(), $this->is_pend, $no_lama); $ajual = $this->db->fetchRow("SELECT SUM(-Qty*Harga_Jual) Jual, SUM(-Qty*Disk_Rupiah) Diskon, SUM(-Qty*Harga_Beli) HPP FROM inv_detail WHERE No_Ref=?", [$this->no_jual]) ?? ['Jual'=>0, 'Diskon'=>0, 'HPP'=>0]; $id_kartu = Param::Int("KartuID", 0); $no_kartu = ""; $nama_kartu = ""; $rek_debit = $this->app_gel['KAS_TUNAI']; if ($id_kartu > 0) { $no_kartu = Param::Get("No_Kartu", ""); $nama_kartu = Param::Get("Nama_Kartu", ""); $rek_debit = $this->db->fetchField("SELECT Kode_Rek FROM para_rek_pos WHERE KartuID=?", [$id_kartu]) ?? $rek_debit; } $sql = new SQL($this->app); $sql->set_table("inv_jual"); $sql->add_param("Tgl_Jual", tgl_ymd()); $sql->add_param("Tgl_Lunas", tgl_ymd()); $sql->add_param("CabID", $this->id_cab); $sql->add_param("MemberID"); $sql->add_param("Total_Jual", $ajual['Jual']); $sql->add_param("Total_Diskon", $ajual['Diskon']); $sql->add_param("Total_Potong", $tot_potong); $sql->add_param("Total_HPP", $ajual['HPP']); $sql->add_param("Total_Bayar"); $sql->add_param("Total_Kartu"); $sql->add_param("KartuID", $id_kartu); $sql->add_param("No_Kartu", $no_kartu); $sql->add_param("Nama_Kartu", $nama_kartu); $sql->add_param("Lunas", 1); $sql->add_param_stamp(); $sql->add_param_userid(); $sql->add_where("No_Jual", $this->no_jual); $sql->UpdateDB(); // PROSES MEMBER POINT if ($this->id_member > 0) { $apoint = $this->db->fetchColumn("SELECT Point_TipeID FROM inv_point_tipe WHERE Aktif=1 ORDER BY Point_TipeID") ?? []; if (count($apoint) > 0) { $amember = $this->db->fetchRow("SELECT Grup_MemberID,IM,Kode_Member FROM para_member WHERE MemberID=?", [$this->id_member]); if ($amember && ($amember['IM'] === 1 || ($amember['IM'] === 0 && !empty($amember['Kode_Member'])))) { $this->db->runQuery("DELETE FROM inv_point_tx WHERE No_TX=?", [$this->no_jual]); foreach ($apoint as $id_tipe) { if ($amember['IM'] === 0 && $id_tipe === 1) continue; $tot_point = $this->inv->Point_Hitung($this->no_jual, tgl_dmy(), $amember['Grup_MemberID'], $id_kartu, $id_tipe); if ($tot_point > 0) $this->db->runQuery("INSERT INTO inv_point_tx (No_TX,Tgl_TX,Point_TipeID,CabID,MemberID,Point,Nilai_Point,DateStamp,UserID) VALUES (?, ?, ?, ?, ?, ?, ?, NOW(), ?)", [$this->no_jual, tgl_ymd(), $id_tipe, $this->id_cab, $this->id_member, $tot_point, $tot_point, $this->app->user()->id()]); } } } } // PROSES POSTING GL $ainfo = $this->db->fetchRow("SELECT J.*,B.Nama_Member,(J.Total_Jual-J.Total_Diskon) Tagihan FROM (SELECT * FROM inv_jual WHERE No_Jual=?) J LEFT JOIN para_member B ON (B.MemberID=J.MemberID)", [$this->no_jual]); if (count($ainfo) > 0) { $ajurnal = [ 'Kode_Jurnal' => $ainfo['No_Jual'], 'TipeID' => 7, 'CabID' => $ainfo['CabID'], 'Tanggal' => tgl_sql2str($ainfo['Tgl_Jual']), 'Kode_Ref' => $ainfo['No_Jual'], 'Catatan' => "Penjualan POS : ".$ainfo['No_Jual']." | ".$ainfo['Nama_Member']." | ".$this->app->user()->username() ]; $_rek_d = "D"; $_rek_k = "K"; if ($ainfo['Tagihan'] < 0) { $_rek_d = "K"; $_rek_k = "D"; } $adetail = [ [ 'Kode_Rek' => $this->app_gel['HPP'], 'DK' => $_rek_d, 'Jumlah' => $ainfo['Total_HPP'] ], [ 'Kode_Rek' => $this->app_gel['STOK'], 'DK' => $_rek_k, 'Jumlah' => $ainfo['Total_HPP'] ], [ 'Kode_Rek' => $rek_debit, 'DK' => $_rek_d, 'Jumlah' => $ainfo['Tagihan'] ], [ 'Kode_Rek' => $this->app_gel['JUAL'], 'DK' => $_rek_k, 'Jumlah' => $ainfo['Tagihan']+$ainfo['Total_Potong'] ] ]; if ($ainfo['Total_Potong'] > 0) array_push($adetail, [ 'Kode_Rek' => $this->app_gel['POT_JUAL'], 'DK' => "D", 'Jumlah' => $ainfo['Total_Potong'] ]); $this->gel->Jurnal_Post($ajurnal, $adetail); } $atabel = $this->Data_Jual(); $atabel['No_Cetak'] = $this->no_jual; $_kembali = (float) $this->db->fetchField("SELECT (Total_Jual-Total_Diskon-Total_Potong-Total_Bayar) Sisa FROM inv_jual WHERE No_Jual=?", [$this->no_jual]) ?? 0; if ($_kembali !== 0) $atabel['Kembali'] = ''.rupiah($_kembali).''; //MONITOR DISPLAY if ($this->app_inv['MON_ENABLE']) { $this->db->runQuery("UPDATE disp_login SET No_Cetak=? WHERE CabID=? AND UserID=? AND Unix=?", [$this->no_jual, $this->id_cab, $this->app->user()->id(), $this->app->user()->unix()]); } if ($this->app_inv['PRINT_AUTO'] === 1) { $this->mode = "print"; } else { $this->mode = ($this->app_inv['PRINT_OPENCD'] === 1) ? "opencd" : "saveonly"; } } else if ($this->mode === "delete") { // PROSES UPDATE PROMO $ajual = $this->db->fetchRow("SELECT J.*,M.Grup_MemberID FROM (SELECT MemberID,Tgl_Jual FROM inv_jual WHERE No_Jual=?) J LEFT JOIN para_member M ON (M.MemberID=J.MemberID)", [$this->no_jual]); if ($ajual) $this->inv->Promo_Hapus($this->no_jual, tgl_sql2str($ajual['Tgl_Jual']), $ajual['Grup_MemberID']); // PROSES MEMBER POINT if ($ajual['MemberID'] > 0) $this->db->runQuery("DELETE FROM inv_point_tx WHERE No_TX=?", [$this->no_jual]); // PROSES POSTING GL $this->db->runQuery("DELETE FROM gel_jurnal WHERE Kode_Jurnal=?", [$this->no_jual]); $this->db->runQuery("DELETE FROM gel_jurnal_detail WHERE Kode_Jurnal=?", [$this->no_jual]); $this->db->runQuery("DELETE FROM inv_jual WHERE No_Jual=?", [$this->no_jual]); $this->db->runQuery("DELETE FROM inv_detail WHERE No_Ref=?", [$this->no_jual]); $atabel = $this->Data_Jual(); } else if ($this->mode === "cancel") { if (str_ends_with($this->no_jual, "#00") || !$this->is_pend) $this->inv->Detail_Cancel($this->no_jual); $atabel = $this->Data_Jual(); } else { $atabel = $this->Data_Jual(); } //MONITOR DISPLAY if ($this->app_inv['MON_ENABLE']) { $this->db->runQuery("UPDATE disp_login SET No_Pos=? WHERE CabID=? AND UserID=? AND Unix=?", [$atabel['No_Jual'], $this->id_cab, $this->app->user()->id(), $this->app->user()->unix()]); } $form = new Form($this->app); $tno_jual = $form->textbox("_", "No_Jual", $atabel['No_Jual'], false); $tn_member = $form->textauto("_", "Nama_Member", ['value'=>$atabel['MemberID'],'text'=>$atabel['Nama_Member']], true, true, "cari member"); $ti_member = $form->textarea("_", "Info_Member", $atabel['Info_Member'], false); $tinfo = '
'; $ajson['html'] = '
'.$atabel['Kembali'].'
'.$tinfo.'
'.$tno_jual.'
'.$tn_member.'
'.$ti_member.'
'; $this->app->json($ajson); } public function form_produk() { $id = (int) Param::Get("ID", 0); $atabel = [ 'ID'=>$id, 'InvID'=>$this->id_inv, 'SatuanID'=>$this->id_satuan, 'VarianID'=>$this->id_varian, 'Kode_SKU'=>"", 'Kode_Barcode'=>"", 'Nama_Lengkap'=>"", 'Satuan_Kemasan'=>"", 'Qty'=>0, 'Harga_Beli'=>0, 'Harga_Jual'=>0, 'Disk_Rupiah'=>0 ]; if ($id > 0) { $_row = $this->db->fetchRow("SELECT ID,-Qty Qty,Harga_Beli,Harga_Jual,Disk_Rupiah FROM tmp_inv_detail WHERE No_Ref=? AND ID=?", [$this->no_jual, $id]); if ($_row) $atabel = array_merge($atabel, $_row->getData()); } if ($this->id_inv > 0 && $this->id_satuan > 0) { $_row = $this->db->fetchRow("SELECT Kode_SKU,Kode_Barcode,Nama_Lengkap,Satuan_Kemasan,Harga_Pokok Harga_Beli,Harga_Jual FROM inv_produk_join WHERE InvID=? AND SatuanID=? AND VarianID=? AND Grup_MemberID=?", [$this->id_inv, $this->id_satuan, $this->id_varian, $this->id_grup_member]); if ($_row) $atabel = array_merge($atabel, $_row->getData()); } $form = new Form($this->app); $tsku = $form->textbox("_", "Kode_SKU", $atabel['Kode_SKU']. " / " .$atabel['Kode_Barcode'], false); $tnama = $form->textbox("_", "Nama_Lengkap", $atabel['Nama_Lengkap'], false); $tqty = $form->textbox("_", "Qty", $atabel['Qty'], true, true, "double"); $tjual = $form->textbox("_", "Harga_Jual", $atabel['Harga_Jual'], false, false, "double"); $tdisrp = $form->textbox("_", "Disk_Rupiah", $atabel['Disk_Rupiah'], true, false, "double"); $tdispn = $form->textbox("_", "Disk_Persen", 0, true, false, "double"); $ttot = $form->textbox("_", "Jumlah", 0, false, false, "double"); $tsat = $form->textbox("_", "Nama_Satuan", $atabel['Satuan_Kemasan'], false); $ajson['html'] = '
'.$tsku.'
'.$tnama.'

'.$tqty.$tsat.'
'.$tjual.'
'.$tdisrp.'
≈
'.$tdispn.'
%
'.$ttot.'
'; $this->app->json($ajson); } public function form_kasir() { $tot_jual = Param::Float("Total_Nota", 0); $tot_jual -= $this->inv->Promo_Hitung($this->no_jual, tgl_dmy(), $this->id_grup_member); $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 Nota 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 config_pole() { $apole = []; $_pole = $this->db->fetchRow("SELECT * FROM disp_config WHERE REG_ID=?", [$this->web_app['APP_CODE']]); if ($_pole) { foreach ($_pole->getData() as $_key => $_val) { if (str_contains($_key, "POLE")) { if (str_contains($_key, "ENABLE")) $_val = (int) $_val; $apole[str_replace("POLE_","",$_key)] = $_val; } } } $this->app->json([ 'pole'=> $apole ]); } public function index() { $this->app->json(['html' => '
 
 
' ]); } private function Data_Jual(string $nomor=""): array { $aparam = [ 'No_Jual' => "POS".$this->web_app['SERVER_ID'].(string) $this->id_cab.$this->app->user()->id(3)."#00", 'No_Cetak' => "", 'Tgl_Jual' => tgl_ymd(), 'MemberID' => $this->id_member, 'Grup_MemberID' => $this->id_grup_member, 'Nama_Member' => "", 'Info_Member' => "", 'Total_Nota' => 0, 'Total_Item' => 0, 'Total_Tunai' => 0, 'Total_Kartu' => 0, 'Total_Bayar' => 0, 'KartuID' => 0, 'No_Kartu' => "", 'Nama_Kartu' => "", 'Kembali' => "0" ]; if (empty($nomor)) { $aparam['MemberID'] = $this->id_member_def; } else { $tabel_jual = (str_contains($nomor, "POS") === false) ? "inv_jual" : "inv_jual_pend"; $row = $this->db->fetchRow("SELECT * FROM ".$tabel_jual." WHERE CabID=? AND No_Jual=?", [$this->id_cab, $nomor]); if ($row) $aparam = array_merge($aparam, $row->getData()); } if ($aparam['MemberID'] > 0) { $row = $this->db->fetchRow("SELECT Grup_MemberID,Nama_Member,TRIM(CONCAT(Kode_Member,'\n',Kota_Member)) Info_Member FROM para_member WHERE MemberID=?", [$aparam['MemberID']]); if ($row) $aparam = array_merge($aparam, $row->getData()); } return $aparam; } private function Pending_Nomor(): string { $tno = "POS".$this->web_app['SERVER_ID'].(string) $this->id_cab.$this->app->user()->id(3)."#"; $ino = (int) $this->db->fetchField("SELECT MAX(RIGHT(No_Jual,2)) FROM inv_jual_pend WHERE No_Jual LIKE ?", [$tno.'%']) ?? 0; $tno .= isi_nol(++$ino, 2); return $tno; } }