app = $app; $this->db = $db; $this->web_app = (array) $session->get('WEB_APP'); $this->app_inv = (array) $session->get('APP_INV'); $this->no_cetak = Param::Get("Nomor_Cetak", ""); $this->op_cash = Param::Int("Open_Cash", 0); } public function pos(): void { if (empty($this->no_cetak)) return; $ncetak = 1; $is_orig = ($this->op_cash > 0) ? true : false; $apromo = []; $ainfo = $this->db->fetchRow("SELECT J.*,UCASE(O.Nama) Nama_User,UCASE(LEFT(B.Nama_Kartu,23)) Kode_Kartu2,UCASE(J.Nama_Kartu) Nama_Kartu2,RIGHT(J.No_Kartu,4) No_Kartu2 FROM (SELECT *,DATE_FORMAT(Tgl_Jual,'%d-%m-%Y') Tgl_Jual2,DATE_FORMAT(DateStamp,'%H:%i:%s') Jam_Jual,(Total_Bayar-Total_Kartu) Total_Tunai,(Total_Bayar-Total_Jual+Total_Diskon+Total_Potong) Total_Sisa FROM inv_jual WHERE No_Jual=?) J LEFT JOIN app_operator O ON (J.UserID=O.UserID) LEFT JOIN para_rek_pos B ON (J.KartuID=B.KartuID)", [$this->no_cetak]); if ($ainfo) $ainfo = $ainfo->getData(); if ($ainfo['KartuID'] > 0) $ncetak++; $is_member = !in_array($ainfo['MemberID'], [0,36,103,90,146]); if ($is_member) { $_member = $this->db->fetchRow("SELECT IM,Kode_Member,Nama_Member FROM para_member WHERE MemberID=?", [$ainfo['MemberID']]); $_member = ($_member) ? $_member->getData() : ['IM'=>0, 'Kode_Member'=>"", 'Nama_Member'=>""]; $ainfo = array_merge($ainfo, $_member); } $aitem = $this->db->fetchAll("SELECT D.*,P.Kode_SKU,P.Nama_Produk_Varian,P.Nama_Lengkap,P.Nama_Satuan FROM (SELECT No_Ref,ID,InvID,SatuanID,VarianID,Harga_Jual,Disk_Rupiah,SUM(-Qty) Qty,SUM(-Qty*Harga_Jual) Jual,SUM(-Qty*Disk_Rupiah) Diskon,Total_Diskon,Promo FROM inv_detail WHERE No_Ref=? AND Qty<>0 GROUP BY InvID,SatuanID,VarianID,Harga_Jual,Promo) D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID AND D.VarianID=P.VarianID) ORDER BY P.Nama_Produk_Varian", [$this->no_cetak]); if (count($aitem) === 0) return; $pre = new PrintPOS($this->app); $pre->set_fontsize(2);//thermal $pre->set_header_logo("logo-nota.png");//thermal if ($this->app_inv['PRINT_OPENCD'] === 1 && $this->op_cash === 1) $pre->set_opendrawer(); if ($this->app_inv['PRINT_AUTOCUT'] === 1) $pre->set_cutpaper(); if (!empty($this->app_inv['TITLE_BEGIN'])) { $_ahead = explode("[br]", stripslashes($this->app_inv['TITLE_BEGIN'])); foreach($_ahead as $val) $pre->addc($val); } if ($is_member) { $pre->add([$ainfo['No_Jual'],14], [$ainfo['Nama_User'],26,"R"]); $pre->add([$ainfo['Kode_Member'] ?? "00000000",28], [$ainfo['Tgl_Jual2'],12,"R"]); $pre->add([$ainfo['Nama_Member'],30], [$ainfo['Jam_Jual'],10,"R"]); } else { $pre->add([$ainfo['No_Jual'],20], [$ainfo['Tgl_Jual2'],20,"R"]); $pre->add([$ainfo['Nama_User'],20], [$ainfo['Jam_Jual'],20,"R"]); } $pre->add_line(); $items = 0; $qty = 0; foreach ($aitem as $item) { if ($item['Promo'] > 1) { $apromo[] = rupiah($item['Qty'])." ".$item['Nama_Satuan']." ".$item['Nama_Produk_Varian']; continue; } if ($is_member) { $pre->add($item['Nama_Produk_Varian']); $pre->add([rupiah($item['Qty']),8,"R"], [" ".$item['Nama_Satuan'],7], [" @",2], [rupiah($item['Harga_Jual']),10,"R"], [rupiah($item['Jual']),13,"R"]); } else { $pre->add($item['Nama_Lengkap']); $pre->add([$item['Kode_SKU'],8], [rupiah($item['Qty']),8,"R"], [" @",2], [rupiah($item['Harga_Jual']),9,"R"], [rupiah($item['Jual']),13,"R"]); } if ($item['Disk_Rupiah'] > 0) { if ($item['Promo'] === 1) { $pre->add([" DISKON PROMO",27], [rupiah($item['Total_Diskon']*-1),13,"R"]); } else { if ($is_member) { $pre->add([rupiah($item['Qty']),8,"R"], [" ".$item['Nama_Satuan'],7], [" @",2], [rupiah($item['Disk_Rupiah']*-1),10,"R"], [" DISC",5], [rupiah($item['Diskon']*-1),8,"R"]); } else { $pre->add([" DISC",8], [rupiah($item['Qty']),8,"R"], [" @",2], [rupiah($item['Disk_Rupiah']*-1),9,"R"], [rupiah($item['Diskon']*-1),13,"R"]); } } } $qty += (int) $item['Qty']; $items++; } $pre->add_line(); if ($ainfo['POS'] === 1) { $pre->add([(string) $items."I/".(string) $qty."Q",14], ["JUMLAH Rp.",13,"R"], [rupiah($ainfo['Total_Jual']-$ainfo['Total_Diskon']),13,"R"]); if ($ainfo['Total_Tunai'] > 0) $pre->add(["TUNAI Rp.",27,"R"], [rupiah($ainfo['Total_Tunai']),13,"R"]); if ($ainfo['Total_Kartu'] > 0) $pre->add(["NON TUNAI Rp.",27,"R"], [rupiah($ainfo['Total_Kartu']),13,"R"]); } else { $pre->add($pre->set_align((string) $items."I/".(string) $qty."Q",14,"L") . $pre->set_align("JUMLAH",9,"R") ."_BOLD_ Rp.". $pre->set_align(rupiah($ainfo['Total_Jual']-$ainfo['Total_Diskon']),13,"R") ."_NORM_", "X"); } if ($ainfo['Total_Potong'] > 0) { $pre->add([" ",14], ["PROMO Rp.",13,"R"], [rupiah($ainfo['Total_Potong']),13,"R"]); $apromo[] = "Potongan Promo Rp. ".rupiah($ainfo['Total_Potong']); } if ($ainfo['POS'] === 1) { if ($ainfo['KartuID'] === 0) { $pre->add(["KEMBALI Rp.",27,"R"], [rupiah($ainfo['Total_Sisa']),13,"R"]); } else { $pre->add_empty(); $pre->add("* ".$ainfo['Kode_Kartu2']." - ".($ainfo['No_Kartu2'] ?? "XXXX")); if (!empty($ainfo['Nama_Kartu2'])) $pre->add(" ".$ainfo['Nama_Kartu2']); } } // CETAK POINT if ($is_member) { $apoint = $this->db->fetchAll("SELECT P.*,T.Nilai_Point,IF(S.Sisa_Point-T.Nilai_Point<0,0,S.Sisa_Point) Sisa_Point FROM inv_point_tipe P LEFT JOIN (SELECT * FROM inv_point_tx WHERE No_TX=?) T ON (P.Point_TipeID=T.Point_TipeID) LEFT JOIN (SELECT Point_TipeID,SUM(Nilai_Point) Sisa_Point FROM inv_point_tx WHERE MemberID=? GROUP BY Point_TipeID ORDER BY Point_TipeID) S ON (S.Point_TipeID=P.Point_TipeID) WHERE P.Aktif=1 ORDER BY P.Point_TipeID", [$ainfo['No_Jual'], $ainfo['MemberID']]); if (count($apoint) > 0) $pre->add_line(); $is_2line = false; foreach ($apoint as $point) { if ($point['Point_TipeID'] === 1 && $ainfo['IM'] === 0) continue; if ($point['Point_TipeID'] > 1 && $ainfo['IM'] === 0 && empty($ainfo['Kode_Member'])) continue; if ($is_2line === true) $pre->add_empty(); if ($point['Nilai_Point'] > 0) $pre->addc(str_replace('[POINT]', rupiah($point['Nilai_Point']), $point['Txt_Struk2'])); if ($point['Sisa_Point'] > 0) $pre->addc(str_replace('[TOT_POINT]', rupiah($point['Sisa_Point']), $point['Txt_Struk1'])); $is_2line = true; } } if (count($apromo) > 0) { $pre->add_line(); $pre->add("HADIAH PROMO :"); foreach ($apromo as $promo) $pre->add($promo); } $pre->add_empty(); if (!empty($this->app_inv['TITLE_END'])) { $_afoo = explode("[br]", stripslashes($this->app_inv['TITLE_END'])); foreach($_afoo as $val) $pre->addc($val); } if ($is_orig === false) $pre->addc("-- SALINAN / COPY --"); $pre->add_stamp(1, false); $pre->add_empty($this->app_inv['PRINT_ROW']); $pre->show($ncetak); } public function beli(): void { if (empty($this->no_cetak)) return; $ainfo = $this->db->fetchRow("SELECT B.*,DATE_FORMAT(B.Tgl_Beli,'%d-%m-%Y') Tgl_Beli2,DATE_FORMAT(B.Tgl_Faktur,'%d-%m-%Y') Tgl_Faktur2,S.Kode_Sup,S.Nama_Sup,S.Alamat_Sup,B.Total_Beli-B.Total_Diskon Jumlah FROM (SELECT * FROM inv_beli WHERE No_Beli=?) B LEFT JOIN para_supplier S ON (S.SupID=B.SupID)", [$this->no_cetak]); $ainfo['Alamat_Sup'] = str_replace("\n", "
", $ainfo['Alamat_Sup']); $aitem = $this->db->fetchAll("SELECT D.*,P.Nama_Produk_Varian,P.Nama_Satuan FROM (SELECT InvID,SatuanID,VarianID,Harga_Beli,SUM(Total_Diskon) Total_Diskon,SUM(Qty) Qty,SUM(Qty*Harga_Beli) Jumlah FROM inv_detail WHERE No_Ref=? GROUP BY InvID,SatuanID,VarianID,Harga_Beli) D LEFT JOIN vi_inv_produk P ON (P.InvID=D.InvID AND P.SatuanID=D.SatuanID AND P.VarianID=D.VarianID) ORDER BY P.Nama_Produk_Varian", [$this->no_cetak]); if (count($aitem) === 0) return; // menampilkan judul dibagian atas laporan $kop = '
'.$this->web_app['REG_NAME'].'
FAKTUR PEMBELIAN
'; $kop .= ''; $kop .= ''; $kop .= ''; $kop .= ''; $kop .= ''; $kop .= '
Nomor Transaksi'.$ainfo['No_Beli'].'Tanggal Transaksi'.$ainfo['Tgl_Beli2'].'
Nomor Faktur'.$ainfo['No_Faktur'].'Tanggal Faktur'.$ainfo['Tgl_Faktur2'].'
Nama Supplier'.$ainfo['Nama_Sup'].(($ainfo['Kode_Sup'])?" [".$ainfo['Kode_Sup']."]":"").'
Alamat Supplier'.$ainfo['Alamat_Sup'].'
'; $header = ''; $_line = ''; $_sline = ''; $body = $kop.$header; $no_urut = 1; foreach ($aitem as $item) { $body .= sprintf($_line, $no_urut++, $item['Nama_Produk_Varian'], rupiah2($item['Qty']), $item['Nama_Satuan'], rupiah2($item['Harga_Beli']), rupiah2($item['Jumlah'])); } $body .= sprintf($_sline, "Sub. Total Rp.", rupiah2($ainfo['Total_Beli'])); $body .= sprintf($_sline, "Diskon Rp.", rupiah2($ainfo['Total_Diskon'])); $body .= sprintf($_sline, "Total Rp.", rupiah2($ainfo['Jumlah'])); $t_catat = empty($ainfo['Catatan']) ? ' ' : 'Catatan : '.$ainfo['Catatan'].'.'; $body .= '
No.Nama BarangQtySatuanHarga @Jumlah
%s%s%s%s%s%s
%s%s
'.$t_catat.'
 '.$this->Report_Stamp(1,true).'
'; echo '
' . $body . '
'; } public function beli_retur(): void { if (empty($this->no_cetak)) return; $ainfo = $this->db->fetchRow("SELECT B.*,DATE_FORMAT(B.Tgl_Beli,'%d-%m-%Y') Tgl_Beli2,S.Kode_Sup,S.Nama_Sup,S.Alamat_Sup,-B.Total_Beli Jumlah FROM (SELECT * FROM inv_beli WHERE No_Beli=?) B LEFT JOIN para_supplier S ON (S.SupID=B.SupID)", [$this->no_cetak]); $ainfo['Alamat_Sup'] = str_replace("\n", "
", $ainfo['Alamat_Sup']); $aitem = $this->db->fetchAll("SELECT D.*,P.Nama_Produk,P.Nama_Satuan_Varian FROM (SELECT InvID,SatuanID,VarianID,Harga_Beli,SUM(-Qty) Qty,SUM(-Qty*Harga_Beli) Jumlah FROM inv_detail WHERE No_Ref=? GROUP BY InvID,SatuanID,VarianID,Harga_Beli) D LEFT JOIN vi_inv_produk P ON (P.InvID=D.InvID AND P.SatuanID=D.SatuanID AND P.VarianID=D.VarianID) ORDER BY P.Nama_Produk", [$this->no_cetak]); if (count($aitem) === 0) return; // menampilkan judul dibagian atas laporan $kop = '
'.$this->web_app['REG_NAME'].'
RETUR PEMBELIAN
'; $kop .= ''; $kop .= ''; $kop .= ''; $kop .= ''; $kop .= '
Nomor Transaksi'.$ainfo['No_Beli'].'Tanggal Transaksi'.$ainfo['Tgl_Beli2'].'
Nama Supplier'.$ainfo['Nama_Sup'].(($ainfo['Kode_Sup'])?" [".$ainfo['Kode_Sup']."]":"").'
Alamat Supplier'.$ainfo['Alamat_Sup'].'
'; $header = ''; $_line = ''; $_sline = ''; $body = $kop.$header; $no_urut = 1; foreach ($aitem as $item) { $body .= sprintf($_line, $no_urut++, $item['Nama_Produk'], rupiah2($item['Qty']), $item['Nama_Satuan'], rupiah2($item['Harga_Beli']), rupiah2($item['Jumlah'])); } $body .= sprintf($_sline, "Total (Rp.)", rupiah2($ainfo['Jumlah'])); $t_catat = empty($ainfo['No_Faktur']) ? ' ' : 'Catatan : '.$ainfo['No_Faktur'].'.'; $body .= '
No.Nama BarangQtySatuanHarga @Jumlah
%s%s%s%s%s%s
%s%s
'.$t_catat.'
 '.$this->Report_Stamp(1,true).'
'; echo '
' . $body . '
'; } public function jual(): void { if (empty($this->no_cetak)) return; $ainfo = $this->db->fetchRow("SELECT J.*,DATE_FORMAT(J.Tgl_Jual,'%d-%m-%Y') Tgl_Jual2,B.Kode_Member,B.Nama_Member,B.Alamat_Member,J.Total_Jual-J.Total_Diskon Jumlah FROM inv_jual J LEFT JOIN para_member B ON (J.MemberID=B.MemberID) WHERE J.No_Jual=?", [$this->no_cetak]); $ainfo['Alamat_Member'] = str_replace("\n", "
", $ainfo['Alamat_Member']); $aitem = $this->db->fetchAll("SELECT D.*,P.Nama_Produk_Varian,P.Nama_Satuan FROM (SELECT InvID,SatuanID,VarianID,Harga_Jual,Disk_Rupiah,SUM(-Qty) Qty,SUM(-Qty*Harga_Jual)-SUM(Total_Diskon) Jumlah FROM inv_detail WHERE No_Ref=? GROUP BY InvID,SatuanID,VarianID,Harga_Jual,Disk_Rupiah) D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID AND D.VarianID=P.VarianID) ORDER BY P.Nama_Produk_Varian", [$this->no_cetak]); if (count($aitem) === 0) return; // menampilkan judul dibagian atas laporan $kop = ''; $kop .= ''; $kop .= ''; $kop .= ''; $kop .= ''; $kop .= '
'.$this->web_app['REG_NAME'].'Kepada Yth.,
'.$this->web_app['REG_CITY'].''.$ainfo['Nama_Member'].''.(($ainfo['Kode_Member'])?" [".$ainfo['Kode_Member']."]":"").'
'.$this->web_app['REG_PHONE'].''.$ainfo['Alamat_Member'].'
No. Faktur : '.$ainfo['No_Jual'].'Tanggal : '.$ainfo['Tgl_Jual2'].'
'; $header = ''; $_line = ''; $_sline = ''; $_empt = ''; $body = $kop.$header; $no_urut = 0; foreach ($aitem as $item) { $body .= sprintf($_line, ++$no_urut, $item['Nama_Produk_Varian'], rupiah2($item['Qty']), $item['Nama_Satuan'], rupiah2($item['Harga_Jual']), rupiah2($item['Disk_Rupiah']), rupiah2($item['Jumlah'])); } if ($no_urut < 8) { $body .= str_repeat($_empt, 8-$no_urut); } $body .= sprintf($_sline, "Total (Rp.)", rupiah2($ainfo['Total_Diskon']), rupiah2($ainfo['Jumlah'])); $body .= '
No.Nama BarangBanyaknyaHarga @Diskon @Jumlah
%s%s%s%s%s%s%s
%s%s%s
 
Penerima,Hormat Kami,
 '.$this->Report_Stamp(1,true).'
'; echo '
' . $body . '
'; } function opname(): void { if (empty($this->no_cetak)) return; $ainfo = $this->db->fetchRow("SELECT *,DATE_FORMAT(Tgl_Opname,'%d-%m-%Y') Tgl_Opname2 FROM inv_opname WHERE No_Opname=?", [$this->no_cetak]); $ainfo['Catatan'] = str_replace("\n", "
", $ainfo['Catatan']); $aitem = $this->db->fetchAll("SELECT D.*,P.Nama_Produk_Varian,P.Nama_Satuan FROM (SELECT InvID,SatuanID,VarianID,SUM(Qty) Qty FROM inv_detail WHERE No_Ref=? GROUP BY InvID,SatuanID,VarianID,Harga_Beli) D LEFT JOIN vi_inv_produk P ON (P.InvID=D.InvID AND P.SatuanID=D.SatuanID AND P.VarianID=D.VarianID) ORDER BY P.Nama_Produk_Varian", [$this->no_cetak]); if (count($aitem) === 0) return; // menampilkan judul dibagian atas laporan $kop = '
'.$this->web_app['REG_NAME'].'
STOK OPNAME
'; $kop .= ''; $kop .= ''; $kop .= ''; $kop .= '
No. Opname'.$ainfo['No_Opname'].'  
Tanggal Opname'.$ainfo['Tgl_Opname2'].'  
'; $header = ''; $_line = ''; $body = $kop.$header; $no_urut = 1; foreach ($aitem as $item) { $body .= sprintf($_line, $no_urut++, $item['Nama_Produk_Varian'], rupiah2($item['Qty']), $item['Nama_Satuan']); } $t_catat = empty($ainfo['Catatan']) ? ' ' : 'Catatan : '.$ainfo['Catatan'].'.'; $body .= '
No.Nama BarangQtySatuan
%s%s%s%s
'.$t_catat.'
 '.$this->Report_Stamp(1,true).'
'; echo '
' . $body . '
'; } function mutasi(): void { if (empty($this->no_cetak)) return; $ainfo = $this->db->fetchRow("SELECT M.*,C1.Nama_Cab Cabang1,C2.Nama_Cab Cabang2 FROM (SELECT * FROM inv_mutasi WHERE No_Mutasi=?) M LEFT JOIN para_cabang C1 ON (C1.CabID=M.Dari_CabID) LEFT JOIN para_cabang C2 ON (C2.CabID=M.Ke_CabID)", [$this->no_cetak]); $ainfo['Catatan'] = str_replace("\n", "
", $ainfo['Catatan']); $aitem = $this->db->fetchAll("SELECT D.*,P.Nama_Produk_Varian,P.Nama_Satuan FROM (SELECT InvID,SatuanID,VarianID,Harga_Beli,SUM(Qty) Qty,SUM(Qty*Harga_Beli) Jumlah FROM inv_detail WHERE No_Ref=? AND Qty>0 GROUP BY InvID,SatuanID,VarianID,Harga_Beli) D LEFT JOIN vi_inv_produk P ON (P.InvID=D.InvID AND P.SatuanID=D.SatuanID AND P.VarianID=D.VarianID) ORDER BY P.Nama_Produk_Varian", [$this->no_cetak]); if (count($aitem) === 0) return; // menampilkan judul dibagian atas laporan $kop = '
'.$this->web_app['REG_NAME'].'
MUTASI STOK
'; $kop .= ''; $kop .= ''; $kop .= ''; $kop .= '
No. Mutasi'.$ainfo['No_Mutasi'].'Dari Cabang'.$ainfo['Cabang1'].'
Tanggal Mutasi'.tgl_sql2str($ainfo['Tgl_Mutasi']).'Ke Cabang'.$ainfo['Cabang2'].'
'; $header = ''; $_line = ''; $_sline = ''; $body = $kop.$header; $no_urut = 1; foreach ($aitem as $item) { $body .= sprintf($_line, $no_urut++, $item['Nama_Produk_Varian'], rupiah2($item['Qty']), $item['Nama_Satuan'], rupiah2($item['Harga_Beli']), rupiah2($item['Jumlah'])); } $body .= sprintf($_sline, "Total (Rp.)", rupiah2($ainfo['Total_Mutasi'])); $t_catat = empty($ainfo['Catatan']) ? ' ' : 'Catatan : '.$ainfo['Catatan'].'.'; $body .= '
No.Nama BarangQtySatuanHarga @Jumlah
%s%s%s%s%s%s
%s%s
'.$t_catat.'
 '.$this->Report_Stamp(1,true).'
'; echo '
' . $body . '
'; } public function mutasi_pos() { if (empty($this->no_cetak)) return; $ainfo = $this->db->fetchRow("SELECT M.*,C1.Nama_Cab Cabang1,C2.Nama_Cab Cabang2 FROM (SELECT * FROM inv_mutasi WHERE No_Mutasi=?) M LEFT JOIN para_cabang C1 ON (C1.CabID=M.Dari_CabID) LEFT JOIN para_cabang C2 ON (C2.CabID=M.Ke_CabID)", [$this->no_cetak]); $ainfo['Catatan'] = str_replace("\n", "
", $ainfo['Catatan']); $aitem = $this->db->fetchAll("SELECT D.*,P.Nama_Produk_Varian,P.Nama_Satuan FROM (SELECT InvID,SatuanID,VarianID,Harga_Beli,SUM(Qty) Qty,SUM(Qty*Harga_Beli) Jumlah FROM inv_detail WHERE No_Ref=? AND Qty>0 GROUP BY InvID,SatuanID,VarianID,Harga_Beli) D LEFT JOIN vi_inv_produk P ON (P.InvID=D.InvID AND P.SatuanID=D.SatuanID AND P.VarianID=D.VarianID) ORDER BY P.Nama_Produk_Varian", [$this->no_cetak]); if (count($aitem) === 0) return; $pre = new PrintPOS($this->app); $pre->set_fontsize(2); $pre->set_header_logo("logo-nota.png"); if ($this->app_inv['PRINT_AUTOCUT'] === 1) $pre->set_cutpaper(); $pre->add([$ainfo['No_Mutasi'],20,"L"], [tgl_sql2str($ainfo['Tgl_Mutasi']),20,"R"]); $pre->add(["Dari Cabang : ",14,"L"], [$ainfo['Cabang1'],36,"L"]); $pre->add(["Ke Cabang : ",14,"L"], [$ainfo['Cabang2'],36,"L"]); $pre->add_line("-"); foreach ($aitem as $item) { $pre->add([$item['Nama_Produk_Varian'],29,"L"], [rupiah2($item['Qty']),7,"R"], [$item['Nama_Satuan'],4,"L"]); } $pre->add_line("-"); $pre->add_stamp(1, false); $pre->add_empty($this->app_inv['PRINT_ROW']); $pre->show(); } public function tukarpoint_pos() { if (empty($this->no_cetak)) return; $ainfo = $this->db->fetchRow("SELECT T.*,DATE_FORMAT(T.Tgl_TX,'%d-%m-%Y') Tgl_TX2,DATE_FORMAT(T.DateStamp,'%H:%i:%s') Jam_TX,UCASE(O.Nama) Nama_User,M.Kode_Member,M.Nama_Member,M.IM,B.Nama_Barang,UPPER(P.Nama_Tipe) Nama_Tipe FROM (SELECT * FROM inv_point_tx WHERE No_TX=?) T LEFT JOIN app_operator O ON (T.UserID=O.UserID) LEFT JOIN para_member M ON (M.MemberID=T.MemberID) LEFT JOIN inv_point_barang B ON (T.InvPID=B.InvPID) LEFT JOIN inv_point_tipe P ON (P.Point_TipeID=T.Point_TipeID)", [$this->no_cetak]); $pre = new PrintPOS($this->app); $pre->set_fontsize(2); $pre->set_header_logo("logo-nota.png"); if ($this->app_inv['PRINT_AUTOCUT'] === 1) $pre->set_cutpaper(); if (!empty($this->app_inv['TITLE_BEGIN'])) { $_ahead = explode("[br]", stripslashes($this->app_inv['TITLE_BEGIN'])); foreach($_ahead as $val) $pre->addc($val); } $pre->add([$ainfo['No_TX'],20,"L"], [$ainfo['Tgl_TX2'],20,"R"]); $pre->add([$ainfo['Nama_User'],20,"L"], [$ainfo['Jam_TX'],20,"R"]); $pre->add_line("-"); $pre->add("Kode Member : ".$ainfo['Kode_Member']); $pre->add("Nama Member : ".$ainfo['Nama_Member']); $pre->add_empty(); $pre->addc("PENUKARAN POINT MEMBER ".$ainfo['Nama_Tipe']); $pre->add(rupiah($ainfo['Qty'])." ".$ainfo['Nama_Barang']." @ ".rupiah($ainfo['Point']*-1)); $pre->add("Sejumlah ".rupiah($ainfo['Nilai_Point']*-1)." Point"); $apoint = $this->db->fetchAll("SELECT P.*,S.Sisa_Point FROM inv_point_tipe P LEFT JOIN (SELECT Point_TipeID,SUM(Nilai_Point) Sisa_Point FROM inv_point_tx WHERE MemberID=? GROUP BY Point_TipeID ORDER BY Point_TipeID) S ON (S.Point_TipeID=P.Point_TipeID) WHERE P.Aktif=1 ORDER BY P.Point_TipeID", [$ainfo['MemberID']]); if (count($apoint) > 0) $pre->add_line(); foreach ($apoint as $point) { if ($point['Point_TipeID'] === 1 && $ainfo['IM'] === 0) continue; if ($point['Point_TipeID'] > 1 && $ainfo['IM'] === 0 && empty($ainfo['Kode_Member'])) continue; $pre->addc(str_replace('[TOT_POINT]', rupiah($point['Sisa_Point']), $point['Txt_Struk1'])); } $pre->add_empty(); if (!empty($this->app_inv['TITLE_END'])) { $_afoo = explode("[br]", stripslashes($this->app_inv['TITLE_END'])); foreach($_afoo as $val) $pre->addc($val); } $pre->add_stamp(1, false); $pre->add_empty($this->app_inv['PRINT_ROW']); $pre->show(); } public function gaji(): void { $list_id = Param::Get("List_CB_ID", "0"); if (empty($this->no_cetak) && $list_id === "0") return; $abulan = bulan_array(); $pre = new PrintPOS($this->app); $pre->set_fontsize(2); $pre->set_header_logo("logo-nota.png"); if ($this->app_inv['PRINT_AUTOCUT'] === 1) $pre->set_cutpaper(); $_info = $this->db->fetchRow("SELECT DATE_FORMAT(Tgl_Gaji,'%d-%m-%Y') Tgl_Gaji,Tgl_Gaji Tgl_Gaji2,Minggu,Bulan,Tahun,Kode_Jurnal,Catatan Catatan1,UserID FROM gel_gaji WHERE No_Gaji=?", [$this->no_cetak]); $ainfo = ($_info) ? $_info->getData() : []; if ($ainfo['UserID']) { $ainfo['Nama_OP'] = $this->db->fetchField("SELECT CONCAT(LPAD(UserID,3,'0'),'/',Nama) FROM app_operator WHERE UserID=?", [$ainfo['UserID']]) ?? ''; } $aitem = $this->db->fetchAll("SELECT D.*,K.Nama_Karya,P.Sisa_Pinjam FROM (SELECT * FROM gel_gaji_detail WHERE No_Gaji=? AND ID IN (?)) D LEFT JOIN para_karyawan K ON (K.KaryaID=D.KaryaID) LEFT JOIN (SELECT KaryaID,SUM(Total_Pinjam-Total_Bayar) Sisa_Pinjam FROM gel_karyawan WHERE Tgl_Trans<=? GROUP BY KaryaID) P ON (P.KaryaID=D.KaryaID)", [$this->no_cetak, explode(',', $list_id), $ainfo['Tgl_Gaji2']]); if (count($aitem) === 0) return; foreach ($aitem as $item) { $ainfo = array_merge($ainfo, $item); $acatat = []; if (!empty($ainfo['Catatan1'])) { $acatat = str_split(ucfirst(trim($ainfo['Catatan1'])), 40); } if (!empty($ainfo['Catatan'])) { $acatat = array_merge($acatat, str_split(ucfirst(trim($ainfo['Catatan'])), 40)); } $txt_qty_hari = ($ainfo['Qty_Harian'] === round($ainfo['Qty_Harian'])) ? rupiah($ainfo['Qty_Harian']) : rupiah($ainfo['Qty_Harian'],1); $pre->add(["SLIP GAJI",20,"L"], [$ainfo['Tgl_Gaji'],20,"R"]); $pre->add("Minggu ".$ainfo['Minggu']." / Bulan ".$abulan[$ainfo['Bulan']]." ".$ainfo['Tahun']); $pre->add_empty(); $pre->add("Nama Karyawan : ".$ainfo['Nama_Karya']); if ($ainfo['Sisa_Pinjam'] !== 0 ) $pre->add([($ainfo['Sisa_Pinjam']>0?"Sisa Pinjaman ":"Saldo Tabungan")." : Rp.",20], [rupiah(abs($ainfo['Sisa_Pinjam'])),20,"R"]); $pre->add("Hari Kerja : ".$txt_qty_hari." Hari"); $pre->add(["Gaji Mingguan : Rp.",20], [rupiah($ainfo['Total_Gaji']),20,"R"]); if ($ainfo['Total_Lembur'] > 0) $pre->add(["Lembur Harian : Rp.",20], [rupiah($ainfo['Total_Lembur']),20,"R"]); if ($ainfo['Total_BonusM'] > 0) $pre->add(["Bonus Mingguan : Rp.",20], [rupiah($ainfo['Total_BonusM']),20,"R"]); if ($ainfo['Total_BonusB'] > 0) $pre->add(["Bonus Bulanan : Rp.",20], [rupiah($ainfo['Total_BonusB']),20,"R"]); if ($ainfo['Total_Potong'] > 0) $pre->add(["Potongan : Rp.",20], [rupiah($ainfo['Total_Potong']*-1),20,"R"]); $pre->add_line("-"); $pre->add(["GAJI BERSIH : RP.",20], [rupiah($ainfo['Total_Semua']),20,"R"]); $pre->add_line("="); $pre->add([date("YmdHis")."=",15], [$ainfo['Nama_OP'],25,"R"]); if (count($acatat) > 0) { $pre->add_empty(1); $pre->add("INFORMASI :"); foreach ($acatat as $val) $pre->add($val); } $pre->add_empty($this->app_inv['PRINT_ROW']); $pre->add_sheet(); } $pre->show(); } public function ppob(): void { if (empty($this->no_cetak)) return; $ncetak = 1; $is_orig = ($this->op_cash > 0) ? true : false; $is_token = 0; $ainfo = $this->db->fetchRow("SELECT P.*,UCASE(O.Nama) Nama_User,UCASE(LEFT(B.Nama_Kartu,23)) Kode_Kartu2,UCASE(P.Nama_Kartu) Nama_Kartu2,RIGHT(P.No_Kartu,4) No_Kartu2,U.Nama_Produk,U.KateID FROM (SELECT *,DATE_FORMAT(Tgl_TX,'%d-%m-%Y') Tgl_TX2,DATE_FORMAT(DateStamp,'%H:%i:%s') Jam_Jual,(Total_Bayar-Harga_Jual) Total_Sisa FROM ppob_tx WHERE No_TX=?) P LEFT JOIN app_operator O ON (P.UserID=O.UserID) LEFT JOIN para_rek_pos B ON (P.KartuID=B.KartuID) LEFT JOIN ppob_produk U ON (P.ProdukID=U.ProdukID)", [$this->no_cetak]); if ((int) $ainfo['KartuID'] > 0) $ncetak++; if ((int) $ainfo['KateID'] === 5) $is_token = 1; $pre = new PrintPOS($this->app); $pre->set_fontsize(2); $pre->set_header_logo("logo-nota.png"); if ($this->app_inv['PRINT_OPENCD'] === 1 && $this->op_cash === 1) $pre->set_opendrawer(); if ($this->app_inv['PRINT_AUTOCUT'] === 1) $pre->set_cutpaper(); if (!empty($this->app_inv['TITLE_BEGIN'])) { $_ahead = explode("[br]", stripslashes($this->app_inv['TITLE_BEGIN'])); foreach($_ahead as $val) $pre->addc($val); } $pre->add([$ainfo['No_TX'],20], [$ainfo['Tgl_TX2'],20,"R"]); $pre->add([$ainfo['Nama_User'],20], [$ainfo['Jam_Jual'],20,"R"]); $pre->add_line("-"); $pre->add(["Nomor Tujuan",14], [": ".$ainfo['Tujuan'],27,"L"]); $pre->add(["Isi Ulang",14], [": ".$ainfo['Nama_Produk'],27,"L"]); if ($is_token === 1) { $atoken = PPOBClient::SN_PLN($ainfo['SN']); $pre->add(["Nama Pelanggan",14], [": ".$atoken['Nama'],27,"L"]); $pre->add(["Tarif / Daya",14], [": ".$atoken['Daya'],27,"L"]); $pre->add(["Nilai Token",14], [": ".$atoken['Kwh'],27,"L"]); $pre->add(["Kode Token",14], [": ",27,"L"]); $pre->add("_SBOLD_".$atoken['Token']."_NORM_", "X"); } $pre->add_line("-"); $pre->add(["JUMLAH Rp.",25,"R"], [rupiah($ainfo['Harga_Jual']),15,"R"]); if ((float) $ainfo['Total_Tunai'] > 0) $pre->add(["TUNAI Rp.",25,"R"], [rupiah($ainfo['Total_Tunai']),15,"R"]); if ((float) $ainfo['Total_Kartu'] > 0) $pre->add(["NON TUNAI Rp.",25,"R"], [rupiah($ainfo['Total_Kartu']),15,"R"]); if ((int) $ainfo['KartuID'] === 0) { $pre->add(["KEMBALI Rp.",25,"R"], [rupiah($ainfo['Total_Sisa']),15,"R"]); } else { $pre->add_empty(); $pre->add("* ".$ainfo['Kode_Kartu2']." - ".($ainfo['No_Kartu2'] ?: "XXXX")); if (!empty($ainfo['Nama_Kartu2'])) $pre->add(" ".$ainfo['Nama_Kartu2']); } $pre->add_empty(); if (!empty($this->app_inv['TITLE_END'])) { $_afoo = explode("[br]", stripslashes($this->app_inv['TITLE_END'])); foreach($_afoo as $val) $pre->addc($val); } if ($is_orig === false) $pre->addc("-- SALINAN / COPY --"); $pre->add_stamp(1, false); $pre->add_empty($this->app_inv['PRINT_ROW']); $pre->show($ncetak); } public function open_cash(): void { $pre = new PrintPOS($this->app); if ($this->app_inv['PRINT_OPENCD'] === 1) $pre->set_opendrawer(); $pre->show(); } private function Report_Stamp(int $ctk_ke=1, bool $bnama=false): string { return $this->web_app['APP_NAME']."v".$this->web_app['APP_VER'].date("\@ymd.His")."-".$this->app->user()->id(3).(($bnama==true)?"/".strtoupper($this->app->user()->username()):"").(($ctk_ke>0)?"#".isi_nol($ctk_ke,2):""); } }