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 .= '';
$header = '| No. | Nama Barang | Qty | Satuan | Harga @ | Jumlah |
';
$_line = '| %s | %s | %s | %s | %s | %s |
';
$_sline = '| %s | %s |
';
$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 .= '
';
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 .= '';
$header = '| No. | Nama Barang | Qty | Satuan | Harga @ | Jumlah |
';
$_line = '| %s | %s | %s | %s | %s | %s |
';
$_sline = '| %s | %s |
';
$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 .= '
';
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 = '';
$header = '| No. | Nama Barang | Banyaknya | Harga @ | Diskon @ | Jumlah |
';
$_line = '| %s | %s | %s | %s | %s | %s | %s |
';
$_sline = '| %s | %s | %s |
';
$_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 .= '
';
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 .= '';
$header = '| No. | Nama Barang | Qty | Satuan |
';
$_line = '| %s | %s | %s | %s |
';
$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 .= '
';
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 .= '';
$header = '| No. | Nama Barang | Qty | Satuan | Harga @ | Jumlah |
';
$_line = '| %s | %s | %s | %s | %s | %s |
';
$_sline = '| %s | %s |
';
$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 .= '
';
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):"");
}
}