first commit

This commit is contained in:
2026-01-22 11:06:19 +07:00
commit c877faf5a0
168 changed files with 19843 additions and 0 deletions
+277
View File
@@ -0,0 +1,277 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/nota.php
Desc. : PHP - Cetak Struk / Nota POS
Created By : Siau Pheng ([email protected]).
Created Date : April 12th, 2011.
Last Modified : December 11th, 2025.
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func.iss.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Printer\PrintPOS;
function nota_pos($db, $nota="", $op_cash=1) {
if (trim($nota)=="") return;
$ncetak = 1; $is_orig = ($op_cash > 0) ? true : false;
$ainfo = []; $apromo = []; $anotapromo = [];
$db->Query("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='".$nota."') J LEFT JOIN app_operator O ON (J.UserID=O.UserID) LEFT JOIN para_rek_pos B ON (J.KartuID=B.KartuID)");
if ($db->Next()) $ainfo = $db->AllRow();
if ($ainfo['KartuID'] > 0) $ncetak++;
if ($ainfo['PromoNotaID'] > 0) {
$db->Query("SELECT * FROM inv_promo_nota WHERE PromoNotaID='".$ainfo['PromoNotaID']."' LIMIT 1");
if ($db->Next()) {
$anotapromo = explode("\n", wordwrap("".$db->Row("Promo_Iklan"), 38, "\n"));
}
}
$db->Query("SELECT D.*,P.Kode_SKU,IF(ISNULL(O.Ket),P.Nama_Produk,O.Ket) Nama_Produk,P.Nama_Satuan FROM (SELECT No_Ref,ID,InvID,SatuanID,Harga_Jual,Disk_Rupiah Harga_Diskon,SUM(-Qty) Qty,SUM(-Qty*Harga_Jual) Jumlah,SUM(-Qty*Disk_Rupiah) JumlahD,Promo,Total_Diskon FROM inv_detail WHERE No_Ref='".$nota."' AND Qty<>0 GROUP BY InvID,SatuanID,Harga_Jual,Promo) D LEFT JOIN (SELECT * FROM inv_detail_lain WHERE No_Ref='".$nota."') O ON (D.No_Ref=O.No_Ref AND D.ID=O.ID) LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID) ORDER BY P.Nama_Produk");
if ($db->RecordCount()==0) return;
$pre = new PrintPOS();
$pre->set_fontsize(2);
$pre->set_header_logo("logo-nota.png");
if ($_SESSION['__APP_INV']['PRINT_OPENCD']==1 && $op_cash==1) $pre->set_opendrawer();
if ($_SESSION['__APP_INV']['PRINT_AUTOCUT']==1) $pre->set_cutpaper();
$pre->add(array($ainfo['No_Jual'],20), array($ainfo['Tgl_Jual2'],20,"R"));
$pre->add(array($ainfo['Nama_User'],20), array($ainfo['Jam_Jual'],20,"R"));
$pre->add_line();
$items = 0; $qty = 0;
while ($db->Next()) {
if ($db->Row("Promo",0)>1) {
$apromo[] = rupiah($db->Row("Qty"))." ".$db->Row("Nama_Satuan")." ".$db->Row("Nama_Produk");
continue;
}
$pre->add($db->Row("Nama_Produk"));
$pre->add(array($db->Row("Kode_SKU"),8), array(rupiah2($db->Row("Qty")),8,"R"), array(" @",2), array(rupiah($db->Row("Harga_Jual")),9,"R"), array(rupiah($db->Row("Jumlah")),13,"R"));
if ($db->Row("Harga_Diskon") > 0) {
if ($db->Row("Promo") == 1) {
$pre->add(array(" DISKON PROMO",27), array(rupiah($db->Row("Total_Diskon")*-1),13,"R"));
} else {
$pre->add(array(" DISC",8), array(rupiah2($db->Row("Qty")),8,"R"), array(" @",2), array(rupiah($db->Row("Harga_Diskon")*-1),9,"R"), array(rupiah($db->Row("JumlahD")*-1),13,"R"));
}
}
$qty += $db->RowFloat("Qty");
$items++;
}
$pre->add_line();
$pre->add(array($items."I/".$qty."Q",14), array("JUMLAH Rp.",13,"R"), array(rupiah($ainfo['Total_Jual']-$ainfo['Total_Diskon']),13,"R"));
if ($ainfo['Total_Tunai']>0) $pre->add(array("TUNAI Rp.",27,"R"), array(rupiah($ainfo['Total_Tunai']),13,"R"));
if ($ainfo['Total_Kartu']>0) $pre->add(array("NON TUNAI Rp.",27,"R"), array(rupiah($ainfo['Total_Kartu']),13,"R"));
if ($ainfo['Total_Potong']>0) {
$pre->add(array(" ",14), array("PROMO Rp.",13,"R"), array(rupiah($ainfo['Total_Potong']),13,"R"));
$apromo[] = "Potongan Promo Rp. ".rupiah($ainfo['Total_Potong']);
}
if ($ainfo['KartuID']==0) {
$pre->add(array("KEMBALI Rp.",27,"R"), array(rupiah($ainfo['Total_Sisa']),13,"R"));
} else {
$pre->add_empty();
$pre->add("* ".$ainfo['Kode_Kartu2']." - ".($ainfo['No_Kartu2'] ?: "XXXX"));
if ($ainfo['Nama_Kartu2']<>"") $pre->add(" ".$ainfo['Nama_Kartu2']);
}
if (count($apromo)>0) {
$pre->add_line();
$pre->add("HADIAH PROMO :");
for ($i=0; $i<count($apromo); $i++) {
$pre->add($apromo[$i]);
}
}
$pre->add_empty();
$_afoo = explode("[br]", stripslashes($_SESSION['__APP_INV']['TITLE_END']));
foreach($_afoo as $_key => $val) {
$pre->addc($val);
}
if ($is_orig==false) $pre->addc("-- SALINAN / COPY --");
// promo nota
if (count($anotapromo)>0) {
$pre->add_line();
foreach($anotapromo as $_key => $val) {
$pre->add($val);
}
}
$pre->add_empty($_SESSION['__APP_INV']['PRINT_ROW']);
$pre->show($ncetak);
}
function nota_beli($db, $nota="") {
if (trim($nota)=="") return;
$ainfo = [];
$db->Query("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_Diskon+B.Total_Bulat Diskon FROM (SELECT * FROM inv_beli WHERE No_Beli='".$nota."') B LEFT JOIN para_supplier S ON (S.SupID=B.SupID)");
if ($db->Next()) $ainfo = $db->AllRow();
$ainfo['Alamat_Sup'] = str_replace("\n", "<br>", $ainfo['Alamat_Sup']);
$db->Query("SELECT D.*,P.Nama_Produk,P.Nama_Satuan FROM (SELECT InvID,SatuanID,Harga_Beli,SUM(Total_Diskon) Total_Diskon,SUM(Qty) Qty,SUM(Qty*Harga_Beli) Jumlah FROM inv_detail WHERE No_Ref='".$nota."' GROUP BY InvID, Harga_Beli) D LEFT JOIN vi_inv_produk P ON (P.InvID=D.InvID AND P.SatuanID=D.SatuanID) ORDER BY P.Nama_Produk");
// menampilkan judul dibagian atas laporan
$kop = '<div class="text-center"><span class="fs-6 fw-bold">'.$_SESSION['__WEB_APP']['REG_NAME'].'</span><br>FAKTUR PEMBELIAN</div>';
$kop .= '<table class="notaHeader"><tbody>';
$kop .= '<tr><td width="15%">Nomor Transaksi</td><td width="35%" class="ttkdua">'.$ainfo['No_Beli'].'</td><td width="15%">Tanggal Transaksi</td><td width="35%" class="ttkdua">'.$ainfo['Tgl_Beli2'].'</td></tr>';
$kop .= '<tr><td>Nomor Faktur</td><td class="ttkdua">'.$ainfo['No_Faktur'].'</td><td>Tanggal Faktur</td><td class="ttkdua">'.$ainfo['Tgl_Faktur2'].'</td></tr>';
$kop .= '<tr><td>Nama Supplier</td><td class="ttkdua" colspan="3">'.$ainfo['Nama_Sup'].(($ainfo['Kode_Sup'])?" [".$ainfo['Kode_Sup']."]":"").'</td></tr>';
$kop .= '<tr><td>Alamat Supplier</td><td class="ttkdua" colspan="3">'.$ainfo['Alamat_Sup'].'</td></tr>';
$kop .= '</tbody></table>';
$header = '<table class="garis"><thead><tr><th style="width:1cm">No.</th><th>Nama Barang</th><th style="width:2.2cm">Qty</th><th>Satuan</th><th>Harga @</th><th>Jumlah</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td class="r">%s</td><td>%s</td><td class="r">%s</td><td class="r">%s</td></tr>';
$_sline = '<tr><td class="r b" colspan="4">%s</td><td class="r b" colspan="2">%s</td></tr>';
$body = $kop.$header; $no_urut = 1;
while ($db->Next()) {
$body .= sprintf($_line, $no_urut++, $db->Row("Nama_Produk"), rupiah2($db->Row("Qty")), $db->Row("Nama_Satuan"), rupiah2($db->Row("Harga_Beli")), rupiah2($db->Row("Jumlah")));
}
$body .= sprintf($_sline, "Sub. Total Rp.", rupiah2($ainfo['Total_Beli']));
$body .= sprintf($_sline, "Diskon Rp.", rupiah2($ainfo['Diskon']));
$body .= sprintf($_sline, "Total Rp.", rupiah2($ainfo['Total_Hutang']));
$t_catat = ($ainfo['Catatan']<>"") ? 'Catatan : <i>'.$ainfo['Catatan'].'</i>.' : '&nbsp;';
$body .= '</tbody></table><table class="notaFooter"><tr><td colspan="2">'.$t_catat.'</td></tr><tr><td width="50%" class="stamp">&nbsp;</td><td class="r stamp">'.Report_Stamp(1,true).'</td></tr></table>';
echo '<div>' . $body . '</div>';
}
function nota_beli_retur($db, $nota="") {
if (trim($nota)=="") return;
$ainfo = [];
$db->Query("SELECT B.*,DATE_FORMAT(B.Tgl_Beli,'%d-%m-%Y') Tgl_Beli2,S.Kode_Sup,S.Nama_Sup,S.Alamat_Sup,-B.Total_Hutang Jumlah FROM (SELECT * FROM inv_beli WHERE No_Beli='".$nota."') B LEFT JOIN para_supplier S ON (S.SupID=B.SupID)");
if ($db->Next()) $ainfo = $db->AllRow();
$ainfo['Alamat_Sup'] = str_replace("\n", "<br>", $ainfo['Alamat_Sup']);
$db->Query("SELECT D.*,P.Nama_Produk,P.Nama_Satuan FROM (SELECT InvID,SatuanID,Harga_Beli,SUM(-Qty) Qty,SUM(-Qty*Harga_Beli) Jumlah FROM inv_detail WHERE No_Ref='".$nota."' GROUP BY InvID, Harga_Beli) D LEFT JOIN vi_inv_produk P ON (P.InvID=D.InvID AND P.SatuanID=D.SatuanID) ORDER BY P.Nama_Produk");
// menampilkan judul dibagian atas laporan
$kop = '<div class="text-center"><span class="fs-6 fw-bold">'.$_SESSION['__WEB_APP']['REG_NAME'].'</span><br>RETUR PEMBELIAN</div>';
$kop .= '<table class="notaHeader"><tbody>';
$kop .= '<tr><td width="15%">Nomor Transaksi</td><td width="35%" class="ttkdua">'.$ainfo['No_Beli'].'</td><td width="15%">Tanggal Transaksi</td><td width="35%" class="ttkdua">'.$ainfo['Tgl_Beli2'].'</td></tr>';
$kop .= '<tr><td>Nama Supplier</td><td class="ttkdua" colspan="3">'.$ainfo['Nama_Sup'].(($ainfo['Kode_Sup'])?" [".$ainfo['Kode_Sup']."]":"").'</td></tr>';
$kop .= '<tr><td>Alamat Supplier</td><td class="ttkdua" colspan="3">'.$ainfo['Alamat_Sup'].'</td></tr>';
$kop .= '</tbody></table>';
$header = '<table class="garis"><thead><tr><th style="width:1cm">No.</th><th>Nama Barang</th><th style="width:2.2cm">Qty</th><th>Satuan</th><th>Harga @</th><th>Jumlah</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td class="r">%s</td><td>%s</td><td class="r">%s</td><td class="r">%s</td></tr>';
$_sline = '<tr><td class="r b" colspan="4">%s</td><td class="r b" colspan="2">%s</td></tr>';
$body = $kop.$header; $no_urut = 1;
while ($db->Next()) {
$body .= sprintf($_line, $no_urut++, $db->Row("Nama_Produk"), rupiah2($db->Row("Qty")), $db->Row("Nama_Satuan"), rupiah2($db->Row("Harga_Beli")), rupiah2($db->Row("Jumlah")));
}
$body .= sprintf($_sline, "Total (Rp.)", rupiah2($ainfo['Jumlah']));
$t_catat = ($ainfo['No_Faktur']<>"") ? 'Catatan : <i>'.$ainfo['No_Faktur'].'</i>.' : '&nbsp;';
$body .= '</tbody></table><table class="notaFooter"><tr><td colspan="2">'.$t_catat.'</td></tr><tr><td width="50%" class="stamp">&nbsp;</td><td class="r stamp">'.Report_Stamp(1,true).'</td></tr></table>';
echo '<div>' . $body . '</div>';
}
function nota_opname($db, $nota="") {
if (trim($nota)=="") return;
$ainfo = [];
$db->Query("SELECT *,DATE_FORMAT(Tgl_Opname,'%d-%m-%Y') Tgl_Opname2 FROM inv_opname WHERE No_Opname='".$nota."' LIMIT 1");
if ($db->Next()) $ainfo = $db->AllRow();
$ainfo['Catatan'] = str_replace("\n", "<br>", $ainfo['Catatan']);
$db->Query("SELECT D.*,P.Nama_Produk,P.Nama_Satuan FROM (SELECT InvID,SatuanID,SUM(Qty) Qty FROM inv_detail WHERE No_Ref='".$nota."' GROUP BY InvID,SatuanID,Harga_Beli) D LEFT JOIN vi_inv_produk P ON (P.InvID=D.InvID AND P.SatuanID=D.SatuanID) ORDER BY P.Nama_Produk");
// menampilkan judul dibagian atas laporan
$kop = '<div class="text-center"><span class="fs-6 fw-bold">'.$_SESSION['__WEB_APP']['REG_NAME'].'</span><br>STOK OPNAME</div>';
$kop .= '<table class="notaHeader"><tbody>';
$kop .= '<tr><td width="15%">No. Opname</td><td width="35%" class="ttkdua">'.$ainfo['No_Opname'].'</td><td width="15%">&nbsp;</td><td width="35%" class="">&nbsp;</td></tr>';
$kop .= '<tr><td>Tanggal Opname</td><td class="ttkdua">'.$ainfo['Tgl_Opname2'].'</td><td>&nbsp;</td><td class="">&nbsp;</td></tr>';
$kop .= '</tbody></table>';
$header = '<table class="garis"><thead><tr><th style="width:1cm">No.</th><th>Nama Barang</th><th style="width:2.2cm">Qty</th><th>Satuan</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td class="r">%s</td><td>%s</td></tr>';
$body = $kop.$header; $no_urut = 1;
while ($db->Next()) {
$body .= sprintf($_line, $no_urut++, $db->Row("Nama_Produk"), rupiah2($db->Row("Qty")), $db->Row("Nama_Satuan"));
}
$t_catat = ($ainfo['Catatan']<>"") ? 'Catatan : <i>'.$ainfo['Catatan'].'</i>.' : '&nbsp;';
$body .= '</tbody></table><table class="notaFooter"><tr><td colspan="2">'.$t_catat.'</td></tr><tr><td width="50%" class="stamp">&nbsp;</td><td class="r stamp">'.Report_Stamp(1,true).'</td></tr></table>';
echo '<div>' . $body . '</div>';
}
function nota_mutasi($db, $nota="") {
if (trim($nota)=="") return;
$ainfo = [];
$db->Query("SELECT M.*,C1.Nama_Cab Cabang1,C2.Nama_Cab Cabang2 FROM (SELECT * FROM inv_mutasi WHERE No_Mutasi='".$nota."' LIMIT 1) M LEFT JOIN para_cabang C1 ON (C1.CabID=M.Dari_CabID) LEFT JOIN para_cabang C2 ON (C2.CabID=M.Ke_CabID)");
if ($db->Next()) $ainfo = $db->AllRow();
$ainfo['Catatan'] = str_replace("\n", "<br>", $ainfo['Catatan']);
$db->Query("SELECT D.*,P.Nama_Produk,P.Nama_Satuan FROM (SELECT InvID,SatuanID,Harga_Beli,SUM(Qty) Qty,SUM(Qty*Harga_Beli) Jumlah FROM inv_detail WHERE No_Ref='".$nota."' AND Qty>0 GROUP BY InvID,SatuanID,Harga_Beli) D LEFT JOIN vi_inv_produk P ON (P.InvID=D.InvID AND P.SatuanID=D.SatuanID) ORDER BY P.Nama_Produk");
// menampilkan judul dibagian atas laporan
$kop = '<div class="text-center"><span class="fs-6 fw-bold">'.$_SESSION['__WEB_APP']['REG_NAME'].'</span><br>MUTASI STOK</div>';
$kop .= '<table class="notaHeader"><tbody>';
$kop .= '<tr><td width="15%">No. Mutasi</td><td width="35%" class="ttkdua">'.$ainfo['No_Mutasi'].'</td><td width="15%">Dari Cabang</td><td width="35%" class="ttkdua">'.$ainfo['Cabang1'].'</td></tr>';
$kop .= '<tr><td>Tanggal Mutasi</td><td class="ttkdua">'.tgl_sql2str($ainfo['Tgl_Mutasi']).'</td><td>Ke Cabang</td><td class="ttkdua">'.$ainfo['Cabang2'].'</td></tr>';
$kop .= '</tbody></table>';
$header = '<table class="garis"><thead><tr><th style="width:1cm">No.</th><th>Nama Barang</th><th style="width:2.2cm">Qty</th><th>Satuan</th><th>Harga @</th><th>Jumlah</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td class="r">%s</td><td>%s</td><td class="r">%s</td><td class="r">%s</td></tr>';
$_sline = '<tr><td class="r b" colspan="4">%s</td><td class="r b" colspan="2">%s</td></tr>';
$body = $kop.$header; $no_urut = 1;
while ($db->Next()) {
$body .= sprintf($_line, $no_urut++, $db->Row("Nama_Produk"), rupiah2($db->Row("Qty")), $db->Row("Nama_Satuan"), rupiah2($db->Row("Harga_Beli")), rupiah2($db->Row("Jumlah")));
}
$body .= sprintf($_sline, "Total (Rp.)", rupiah2($ainfo['Total_Mutasi']));
$t_catat = ($ainfo['Catatan']<>"") ? 'Catatan : <i>'.$ainfo['Catatan'].'</i>.' : '&nbsp;';
$body .= '</tbody></table><table class="notaFooter"><tr><td colspan="2">'.$t_catat.'</td></tr><tr><td width="50%" class="stamp">&nbsp;</td><td class="r stamp">'.Report_Stamp(1,true).'</td></tr></table>';
echo '<div>' . $body . '</div>';
}
function open_cash() {
$pre = new PrintPOS();
if ($_SESSION['__APP_INV']['PRINT_OPENCD']==1) $pre->set_opendrawer();
$pre->show();
}
$db = (is_resource($db)) ? $db : new MySQL();
$data = Param::Get("data");
$nomor = Param::Get("Nomor_Cetak");
if ( $data == "opencash" ) {
open_cash();
} else if ( $data == "nota-pos" ) {
$op_cash = Param::Get("Open_Cash", 0);
nota_pos($db, $nomor, $op_cash);
} else if ( $data == "nota-beli" ) {
nota_beli($db, $nomor);
} else if ( $data == "nota-beli-retur" ) {
nota_beli_retur($db, $nomor);
} else if ( $data == "nota-opname" ) {
nota_opname($db, $nomor);
} else if ( $data == "nota-mutasi" ) {
nota_mutasi($db, $nomor);
} else if ( $data == "default") {}
?>