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
+159
View File
@@ -0,0 +1,159 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/barcode.php
Desc. : PHP - Cetak Barcode Label
Created By : Siau Pheng ([email protected]).
Created Date : October 28th, 2013.
Last Modified : October 2nd, 2025.
(c) 2013 - 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\Web\Table;
use siaupheng\fonia3\Web\Form;
function gen_bc_ppla($lbarc="", $lnama="", $lharga="", $lkdsup="") {
$lbc1 = substr($lbarc, 0, 4);
$lbc2 = substr($lbarc, 4, 4);
return [
chr(2).'K1503', // gap 3mm
chr(2).'e', // gap sensor edge
chr(2).'f326', // feed 1" = 320 & auto backfeed
chr(2).'L',
'D11',
'191100200020027'.$lharga,
'1d5202800130027'.$lbarc,
'121100100460027'.$lnama,
'291100200410100'.$lbc2,
'291100200410110'.$lbc1,
'291100100410127'.$lkdsup,
'421100100050022'.$_SESSION['__WEB_APP']['REG_NAME'],
'191100200020165'.$lharga,
'1d5202800130165'.$lbarc,
'121100100460165'.$lnama,
'291100200410238'.$lbc2,
'291100200410248'.$lbc1,
'291100100410265'.$lkdsup,
'421100100050160'.$_SESSION['__WEB_APP']['REG_NAME'],
'191100200020302'.$lharga,
'1d5202800130302'.$lbarc,
'121100100460302'.$lnama,
'291100200410375'.$lbc2,
'291100200410385'.$lbc1,
'291100100410402'.$lkdsup,
'421100100050297'.$_SESSION['__WEB_APP']['REG_NAME'],
'E'];
}
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_inv = Param::Get("InvID");
$id_sat = Param::Get("SatuanID");
if ( $data == "print-barcode" ) {
$qty = Param::Get("Qty", 3);
$ksup = Param::Get("Kode_Sup", "");
$nbaris = ceil($qty / 3);
$db->Query("SELECT P.*,LEFT(P.Nama_Lengkap,20) Nama2 FROM vi_inv_produk P WHERE P.InvID='".$id_inv."' AND P.SatuanID='".$id_sat."' ORDER BY P.Harga_Jual DESC LIMIT 1");
if ($db->Next()) {
$ajson = ['type' => "epl", 'config' => ['times' => $nbaris], 'content' => gen_bc_ppla($db->Row("Kode_SKU"), $db->Row("Nama2"), "Rp.".rupiah($db->Row("Harga_Jual")), $ksup)];
}
} else if ($data == "auto-produk") {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
$bcode = 0; $arec= [];
// Cari by SKU
$db->Query("SELECT P.*,CONCAT(K.Kode_SKU,':',K.SatuanID) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_SKU='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
if ($db->Next()) {
$bcode = 1;
$arec = $db->AllRow();
}
// Cari by Barcode
if ($bcode == 0) {
$db->Query("SELECT P.*,CONCAT(K.Kode_SKU,':',K.SatuanID) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_Barcode='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
if ($db->Next()) {
$bcode = 1;
$arec = $db->AllRow();
}
}
if ($bcode == 1) {
$ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Produk'], 'data'=>$arec['Data2'], 'bc'=>1];
} else {
$db->Query("SELECT P.*,K.Kode_SKU,K.Harga_Jual,S.Nama_Satuan,CONCAT(K.Kode_SKU,':',K.SatuanID) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND InvID IN (SELECT InvID FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) ORDER BY InvID) K LEFT JOIN (SELECT * FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) P ON (K.InvID=P.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) ORDER BY P.Nama_Produk,K.Qty DESC LIMIT 50");
while ($db->Next()) {
$ajson['autodata'][] = ['value'=>$db->Row("InvID"), 'text'=>$db->Row("Nama_Produk"), 'html'=>'<span class="text-primary">'.$db->Row("Kode_SKU").'</span> '.$db->Row("Nama_Produk")." ".$db->Row("Nama_Satuan").' - Rp. '.rupiah($db->Row("Harga_Jual")), 'data'=>$db->Row("Data2"), 'bc'=>0];
}
}
} else if ( $data == "brow-produk" ) {
$tcari = trim(Param::Get("Cari_Produk"));
$tsql = ($tcari=="") ? "" : " AND P.Barcode_Nama LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("vi_inv_produk P", "P.*", "P.Harga_Jual>0 AND P.Aktif=1".$tsql);
$obj->add_field("InvID", "ID", "hid");
$obj->add_field("SatuanID", "Satuan", "hid");
$obj->add_field("Kode_SKU", "SKU", "c");
$obj->add_field("Kode_Barcode", "Kode Barcode", "c");
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
$obj->set_field_order("Kode_SKU", "A");
$obj->add_row_btn("save", "Pilih", "RepoBarcodeJS.produk_select");
$obj->set_func_navi("RepoBarcodeJS.data_query('brow-produk')");
$ajson[] = $obj->db_table("divBrowProduk");
} else if ( $data == "opt-sup" ) {
$avalue = [['value'=>"", 'html'=>"Tanpa Kode"]];
$db->Query("SELECT Kode_Sup,Nama_Sup FROM para_supplier WHERE SupID IN (SELECT SupID FROM inv_produk_sup WHERE InvID='".$id_inv."') ORDER BY Aktif DESC,Nama_Sup");
while ($db->Next()) {
$avalue[] = ['value'=>$db->Row("Kode_Sup"), 'html'=>$db->Row("Nama_Sup")];
}
$ajson[] = ['type'=>"option", 'id'=>"Kode_Sup", 'avalue'=>$avalue];
} else if ( $data == "load-printer" ) {
$aprint = explode("|", Param::Get("Printer")); $avalue = [['value'=>"", 'html'=>"Pilih Printer"]];
$tdefp = Param::Get("DefPrint", "");
$db->Query("DELETE FROM app_printer WHERE IP='".$_SERVER['REMOTE_ADDR']."' AND CabID='".$_SESSION['__APP_INV']['CABANGID']."'");
foreach ($aprint as $_key => $_val) {
if ($_val<>"") {
$_def = ($tdefp==$_val) ? 1 : 0;
$db->Query("INSERT IGNORE INTO app_printer SET IP='".$_SERVER['REMOTE_ADDR']."',CabID='".$_SESSION['__APP_INV']['CABANGID']."',N_Printer='".$_val."',Defa=".$_def);
}
}
$db->Query("SELECT * FROM app_printer WHERE IP='".$_SERVER['REMOTE_ADDR']."' AND CabID='".$_SESSION['__APP_INV']['CABANGID']."'");
while ($db->Next()) {
$avalue[] = ['value'=>$db->Row("N_Printer"), 'html'=>$db->Row("N_Printer")];
}
$ajson[] = ['type'=>"option", 'id'=>"Printer", 'avalue'=>$avalue];
} else if ( $data == "default") {
$form = new Form($db);
$tsku = $form->textbox("_", "Kode_SKU", null, false, false);
$tbrg = $form->textauto("_", "Nama_Produk", null, true, true, "Nama Barang");
$tsup = $form->option("_", "Kode_Sup", "", true, false, [0=>"Tanpa Kode"]);
$tprt = $form->option_db("_", "Printer", "", true, false, "app_printer", ["N_Printer","N_Printer"], "IP='".$_SERVER['REMOTE_ADDR']."' AND CabID='".$_SESSION['__APP_INV']['CABANGID']."'", [0,"Pilih Printer"]);
$tqty = $form->textbox("_", "Qty", 3, true, false, "number");
echo '
<div class="row mb-1"><label class="col-sm-3 col-lg-3 col-form-label">Kode SKU</label><div class="col-sm-8 col-lg-5">'.$tsku.'</div></div>
<div class="row mb-1"><label class="col-sm-3 col-lg-3 col-form-label" for="Nama_Produk">Nama Barang</label><div class="col"><div class="input-group">'.$tbrg.'<button class="btn btn-info shadow-none" type="button" id="butBrow"><i class="bi-search"></i></button></div></div></div>
<div class="row mb-1"><label class="col-sm-3 col-lg-3 col-form-label" for="Kode_Sup">Kode Supplier</label><div class="col-sm-8 col-lg-5">'.$tsup.'</div></div>
<div class="row mb-1"><div class="col"><hr class="my-2"></div></div>
<div class="row mb-1"><label class="col-sm-3 col-lg-3 col-form-label" for="Printer">Nama Printer</label><div class="col"><div class="input-group">'.$tprt.'<button class="btn btn-secondary shadow-none" type="button" id="butPL"><i class="bi-arrow-repeat"></i></button></div></div></div>
<div class="row mb-1"><label class="col-sm-3 col-lg-3 col-form-label" for="Qty">Jumlah Stiker</label><div class="col-sm-5 col-lg-3"><div class="input-group">'.$tqty.Form_Info("Untuk menghemat stiker, bisa gunakan jumlah cetak dalam kelipatan 3.").'</div></div></div>
<input type="hidden" id="InvID" value="0" /><input type="hidden" id="SatuanID" value="0" />';
}
send_json($ajson);
?>
+205
View File
@@ -0,0 +1,205 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/beli.php
Desc. : PHP - Laporan Pembelian
Created By : Siau Pheng ([email protected]).
Created Date : April 12th, 2011.
Last Modified : October 10th, 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$tipe = Param::Get("Tipe", "R"); // R or D
$id_sup = Param::Get("SupID", 0);
$id_grup = Param::Get("Grup_InvID", 0);
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$nama_sup = ""; $nama_grup = "";
if ($id_sup > 0) {
$db->Query("SELECT CONCAT(Nama_Sup,' (',Kode_Sup,')') Nama FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
if ($db->Next()) $nama_sup = $db->Row("Nama");
}
if ($id_grup > 0) {
$db->Query("SELECT Nama_Grup Nama FROM inv_produk_grup WHERE Grup_InvID='".$id_grup."' LIMIT 1");
if ($db->Next()) $nama_grup = $db->Row("Nama");
}
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
$tsql .= ($id_sup==0) ? "" : " AND SupID='".$id_sup."'";
//id_grup ?
if ($tipe=="R") {
$db->Query("SELECT S.Nama_Sup,SUM(B.Total_Hutang+B.Total_Diskon+B.Total_Bulat) Total_Beli,SUM(B.Total_Diskon+B.Total_Bulat) Total_Diskon,SUM(B.Total_Hutang) Total FROM (SELECT * FROM inv_beli WHERE Data_Beli=1 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) GROUP BY B.SupID ORDER BY S.Nama_Sup");
} else {
$db->Query("SELECT B.*,DATE_FORMAT(B.Tgl_Beli,'%d-%m-%Y') Tgl_Beli2,S.Nama_Sup,B.Total_Beli-B.Total_Diskon Total FROM (SELECT * FROM inv_beli WHERE Data_Beli=1 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) ORDER BY B.No_Beli");
}
}
if ( $data == "print" ) {
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." PEMBELIAN", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
if ($tipe=="R") {
$pre->add_field("No.",10,"C");
$pre->add_field("Nama Supplier",50,"L");
$pre->add_field("Sub. Total",20,"R","rupiah");
$pre->add_field("Diskon",20,"R","rupiah");
$pre->add_field("Total",20,"R","rupiah");
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,5,"L,B"));
if ($id_grup>0) $pre->add_span(array("Grup Barang : ".$nama_grup,5,"L,B"));
$tot_beli = 0; $tot_diskon = 0; $nomor = 0;
while ($db->Next()) {
//if ($db->RowFloat("Total", 0) == 0) continue;
$tot_beli += $db->Row("Total_Beli");
$tot_diskon += $db->Row("Total_Diskon");
$pre->add_value(++$nomor, $db->Row("Nama_Sup"), $db->Row("Total_Beli"), $db->Row("Total_Diskon"), $db->Row("Total"));
}
$pre->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_beli,1,"R,B","rupiah"),array($tot_diskon,1,"R,B","rupiah"),array($tot_beli-$tot_diskon,1,"R,B","rupiah"));
} else {
$pre->add_field("No. Nota",30,"C");
$pre->add_field("Tgl. Nota",30,"C", "tgl_sql2str");
$pre->add_field("No. Faktur",30,"L");
$pre->add_field("Nama Supplier",50,"L");
$pre->add_field("Sub. Total",20,"R","rupiah");
$pre->add_field("Diskon",20,"R","rupiah");
$pre->add_field("Total",30,"R","rupiah");
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,7,"L,B"));
if ($id_grup>0) $pre->add_span(array("Grup Barang : ".$nama_grup,7,"L,B"));
$tot_beli = 0; $tot_diskon = 0;
while ($db->Next()) {
//if ($db->RowFloat("Total", 0) == 0) continue;
$tot_beli += $db->Row("Total_Beli");
$tot_diskon += $db->Row("Total_Diskon");
$pre->add_value($db->Row("No_Beli"), $db->Row("Tgl_Beli"), $db->Row("No_Faktur"), $db->Row("Nama_Sup"), $db->Row("Total_Beli"), $db->Row("Total_Diskon"), $db->Row("Total"));
}
$pre->add_span(array("GRAND TOTAL",4,"R,B"),array($tot_beli,1,"R,B","rupiah"),array($tot_diskon,1,"R,B","rupiah"),array($tot_beli-$tot_diskon,1,"R,B","rupiah"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Pembelian",
'desc'=>"Export Data Pembelian"
]);
if ($tipe=="R") {
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA REKAP PEMBELIAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No.", 5, "C");
$xls->add_field("Nama Supplier", 25, "L");
$xls->add_field("Sub. Total", 15, "R,N");
$xls->add_field("Diskon", 15, "R,N");
$xls->add_field("Total", 15, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,5,"L,B"));
if ($id_grup>0) $xls->add_span(array("Grup Barang : ".$nama_grup,5,"L,B"));
$tot_beli = 0; $tot_diskon = 0; $nomor = 0;
while ($db->Next()) {
if ($db->RowFloat("Total", 0) == 0) continue;
$tot_beli += $db->Row("Total_Beli");
$tot_diskon += $db->Row("Total_Diskon");
$xls->add_value(++$nomor, $db->Row("Nama_Sup"), $db->Row("Total_Beli"), $db->Row("Total_Diskon"), $db->Row("Total"));
}
$xls->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_beli,1,"R,B,N"),array($tot_diskon,1,"R,B,N"),array($tot_beli-$tot_diskon,1,"R,B,N"));
} else {
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA DETAIL PEMBELIAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No. Nota", 15, "C");
$xls->add_field("Tgl. Nota", 12, "C", "tgl_sql2str");
$xls->add_field("No. Faktur", 15, "L");
$xls->add_field("Nama Supplier", 20, "L");
$xls->add_field("Sub. Total", 15, "R,N");
$xls->add_field("Diskon", 15, "R,N");
$xls->add_field("Total", 15, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,7,"L,B"));
if ($id_grup>0) $xls->add_span(array("Grup Barang : ".$nama_grup,7,"L,B"));
$tot_beli = 0; $tot_diskon = 0;
while ($db->Next()) {
if ($db->RowFloat("Total", 0) == 0) continue;
$tot_beli += $db->Row("Total_Beli");
$tot_diskon += $db->Row("Total_Diskon");
$xls->add_value($db->Row("No_Beli"), $db->Row("Tgl_Beli"), $db->Row("No_Faktur"), $db->Row("Nama_Sup"), $db->Row("Total_Beli"), $db->Row("Total_Diskon"), $db->Row("Total"));
}
$xls->add_span(array("GRAND TOTAL",4,"R,B"),array($tot_beli,1,"R,B,N"),array($tot_diskon,1,"R,B,N"),array($tot_beli-$tot_diskon,1,"R,B,N"));
}
$xls->add_stamp(1, true);
$xls->send("Data Pembelian ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"SEMUA GRUP"]);
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col col-form-label">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
<div class="col">'.$tsup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Grup_InvID">Grup Barang</label>
<div class="col">'.$tgrup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+231
View File
@@ -0,0 +1,231 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/beli_analisa.php
Desc. : PHP - Laporan Analisa Pembelian
Created By : Siau Pheng ([email protected]).
Created Date : August 4th, 2013.
Last Modified : December 12th, 2025.
(c) 2013 - 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$tipe = Param::Get("Tipe", "V"); // V or R
$id_sup = Param::Get("SupID", 0);
$id_grup = Param::Get("Grup_InvID", 0);
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$jum_hari = tgl_range_hari($tglfrom, $tglto, true);
$nama_sup = ""; $nama_grup = "";
if ($id_sup > 0) {
$db->Query("SELECT CONCAT(Nama_Sup,' (',Kode_Sup,')') Nama FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
if ($db->Next()) $nama_sup = $db->Row("Nama");
}
if ($id_grup > 0) {
$db->Query("SELECT Nama_Grup Nama FROM inv_produk_grup WHERE Grup_InvID='".$id_grup."' LIMIT 1");
if ($db->Next()) $nama_grup = $db->Row("Nama");
}
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql1 = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
$tsql1 .= ($id_sup==0) ? "" : " AND No_Ref IN (SELECT No_Beli FROM inv_beli WHERE SupID='".$id_cab."' AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."'))";
$tsql2 = ($id_grup==0) ? "" : " WHERE P.Grup_InvID='".$id_grup."'";
if ($tipe=="V") {
$db->Query("SELECT P.*,D.Volume FROM (SELECT InvID,SUM(Stok) Volume FROM inv_detail WHERE Stok>0 AND NotaID IN (3,4) AND (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql1." GROUP BY InvID) D LEFT JOIN vi_inv_produk2 P ON (D.InvID=P.InvID)".$tsql2." ORDER BY P.Nama_Produk");
} else if ($tipe=="R") {
$db->Query("SELECT P.*,D.Rupiah FROM (SELECT InvID,SUM(Qty*Harga_Beli) Rupiah FROM inv_detail WHERE Stok>0 AND NotaID IN (3,4) AND (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql1." GROUP BY InvID) D LEFT JOIN inv_produk P ON (D.InvID=P.InvID)".$tsql2." ORDER BY P.Nama_Produk");
}
}
if ( $data == "print" ) {
Report_Header("REKAP ".($tipe=="V"?"VOLUME":"RUPIAH")." PEMBELIAN", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
if ($tipe=="V") {
$pre->add_field("No.",10,"C");
$pre->add_field("Nama Barang",50,"L");
$pre->add_field("Jumlah",20,"R");
$pre->add_field("Mingguan",20,"R");
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,4,"L,B"));
if ($id_grup>0) $pre->add_span(array("Grup Barang : ".$nama_grup,4,"L,B"));
$nomor = 0;
while ($db->Next()) {
$total = $db->Row("Volume",0);
$mg_total = $total / ($jum_hari/7);
$kali = $db->Row("Qty",0);
if ($kali > 0) {
$norm = floor($total / $kali);
$sisa = $total - ($norm * $kali);
$mg_norm = floor($mg_total / $kali);
$mg_sisa = $mg_total - ($mg_norm * $kali);
} else {
$norm = 0;
$sisa = $total;
$mg_norm = 0;
$mg_sisa = $mg_total;
}
$stok = rupiah($norm,0)." ".$db->Row("Satuan_Normal");
$mg_stok = rupiah($mg_norm,0)." ".$db->Row("Satuan_Normal");
if ($db->Row("Satuan_Normal")<>$db->Row("Satuan_Stok")) {
$stok .= ", ".rupiah($sisa,0)." ".$db->Row("Satuan_Stok");
$mg_stok .= ", ".rupiah($mg_sisa,0)." ".$db->Row("Satuan_Stok");
}
$pre->add_value(++$nomor, $db->Row("Nama_Produk"), $stok, $mg_stok);
}
} else {
$pre->add_field("No.",10,"C");
$pre->add_field("Nama Barang",50,"L");
$pre->add_field("Jumlah",20,"R","rupiah");
$pre->add_field("Mingguan",20,"R","rupiah");
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,4,"L,B"));
if ($id_grup>0) $pre->add_span(array("Grup Barang : ".$nama_grup,4,"L,B"));
$nomor = 0; $tot_rup = 0; $tot_mg = 0;
while ($db->Next()) {
$mg_avg = ($db->Row("Rupiah",0)>0) ? $db->Row("Rupiah",0) / ($jum_hari/7) : 0;
$tot_rup += $db->Row("Rupiah");
$tot_mg += $mg_avg;
$pre->add_value(++$nomor, $db->Row("Nama_Produk"), $db->Row("Rupiah"), $mg_avg);
}
$pre->add_span(array("TOTAL",2,"R,B"),array(rupiah($tot_rup),1,"R,B"),array(rupiah($tot_mg),1,"R,B"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Analisa Pembelian",
'desc'=>"Export Data Analisa Pembelian"
]);
if ($tipe=="V") {
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA REKAP VOLUME PEMBELIAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No.", 5, "C");
$xls->add_field("Nama Barang", 25, "L");
$xls->add_field("Jumlah", 15, "R");
$xls->add_field("Mingguan", 15, "R");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,4,"L,B"));
if ($id_grup>0) $xls->add_span(array("Grup Barang : ".$nama_grup,4,"L,B"));
$nomor = 0;
while ($db->Next()) {
$total = $db->Row("Volume",0);
$mg_total = $total / ($jum_hari/7);
$kali = $db->Row("Qty",0);
if ($kali > 0) {
$norm = floor($total / $kali);
$sisa = $total - ($norm * $kali);
$mg_norm = floor($mg_total / $kali);
$mg_sisa = $mg_total - ($mg_norm * $kali);
} else {
$norm = 0;
$sisa = $total;
$mg_norm = 0;
$mg_sisa = $mg_total;
}
$stok = rupiah($norm,0)." ".$db->Row("Satuan_Normal");
$mg_stok = rupiah($mg_norm,0)." ".$db->Row("Satuan_Normal");
if ($db->Row("Satuan_Normal")<>$db->Row("Satuan_Stok")) {
$stok .= ", ".rupiah($sisa,0)." ".$db->Row("Satuan_Stok");
$mg_stok .= ", ".rupiah($mg_sisa,0)." ".$db->Row("Satuan_Stok");
}
$xls->add_value(++$nomor, $db->Row("Nama_Produk"), $stok, $mg_stok);
}
} else {
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA REKAP RUPIAH PEMBELIAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No.", 5, "C");
$xls->add_field("Nama Barang", 25, "L");
$xls->add_field("Jumlah", 15, "R,N");
$xls->add_field("Mingguan", 15, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,4,"L,B"));
if ($id_grup>0) $xls->add_span(array("Grup Barang : ".$nama_grup,4,"L,B"));
$nomor = 0; $tot_rup = 0; $tot_mg = 0;
while ($db->Next()) {
$mg_avg = ($db->Row("Rupiah",0)>0) ? $db->Row("Rupiah",0) / ($jum_hari/7) : 0;
$tot_rup += $db->Row("Rupiah");
$tot_mg += $mg_avg;
$xls->add_value(++$nomor, $db->Row("Nama_Produk"), $db->Row("Rupiah"), $mg_avg);
}
$xls->add_span(array("TOTAL",2,"R,B"),array($tot_rup,1,"R,B,N"),array($tot_mg,1,"R,B,N"));
}
$xls->add_stamp(1, true);
$xls->send("Data Analisa Pembelian ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "V", true, false, ["V"=>"Volume","R"=>"Rupiah"]);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"SEMUA GRUP"]);
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col col-form-label">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
<div class="col">'.$tsup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Grup_InvID">Grup Barang</label>
<div class="col">'.$tgrup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+137
View File
@@ -0,0 +1,137 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/beli_mutasi.php
Desc. : PHP - Laporan Mutasi Pembelian
Created By : Siau Pheng ([email protected]).
Created Date : April 3rd, 2013.
Last Modified : December 12th, 2025.
(c) 2013 - 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$id_sup = Param::Get("SupID", 0);
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$nama_sup = "";
if ($id_sup > 0) {
$db->Query("SELECT CONCAT(Nama_Sup,' (',Kode_Sup,')') Nama FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
if ($db->Next()) $nama_sup = $db->Row("Nama");
}
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
$tsql .= ($id_sup==0) ? "" : " AND SupID='".$id_cab."'";
$n_saldo = 0;
$db->Query("SELECT SUM(Total_Hutang) Total FROM inv_beli WHERE Data_Beli=1 AND Tgl_Beli<'".$tglfrom."'".$tsql);
if ($db->Next()) $n_saldo = $db->RowFloat("Total", 0);
$db->Query("SELECT SUM(Total_Bayar+Total_Potong) Bayar FROM inv_beli_lunas WHERE No_Beli IN (SELECT No_Beli FROM inv_beli WHERE Data_Beli=1".$tsql.") AND Tgl_Bayar<'".$tglfrom."'");
if ($db->Next()) $b_saldo -= $db->RowFloat("Bayar", 0);
$db->Query("(SELECT Tgl_Beli,SUM(Total_Hutang) Total,0 Bayar FROM inv_beli WHERE Data_Beli=1 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY Tgl_Beli) UNION ALL (SELECT Tgl_Bayar Tgl_Beli,0 Total,SUM(Total_Bayar+Total_Potong) Bayar FROM inv_beli_lunas WHERE No_Beli IN (SELECT No_Beli FROM inv_beli WHERE Data_Beli=1".$tsql.") AND (Tgl_Bayar BETWEEN '".$tglfrom."' AND '".$tglto."') GROUP BY Tgl_Bayar) ORDER BY Tgl_Beli,Total DESC");
}
if ( $data == "print" ) {
Report_Header("MUTASI PEMBELIAN", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
$pre->add_field("Tanggal",10,"C","tgl_sql2str");
$pre->add_field("Nota / Bon",20,"R","rupiah");
$pre->add_field("Bayar",20,"R","rupiah");
$pre->add_field("Sisa",20,"R","rupiah");
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,4,"L,B"));
$tot_sub = 0; $tot_bayar = 0;
$pre->add_span(["SALDO AWAL",1,"R,B"],["",1,"L"],["",1,"L"],[$n_saldo,1,"R,B","rupiah"]);
while ($db->Next()) {
$tot_sub += $db->Row("Total");
$tot_bayar += $db->Row("Bayar");
$n_saldo += $db->Row("Total") - $db->Row("Bayar");
$pre->add_value($db->Row("Tgl_Beli"), $db->Row("Total"), $db->Row("Bayar"), $n_saldo);
}
$pre->add_span(["SALDO AKHIR",1,"R,B"],[$tot_sub,1,"R,B","rupiah"],[$tot_bayar,1,"R,B","rupiah"],[$n_saldo,1,"R,B","rupiah"]);
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Mutasi Pembelian",
'desc'=>"Export Data Mutasi Pembelian"
]);
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA MUTASI PEMBELIAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("Tanggal", 10, "C");
$xls->add_field("Nota / Bon", 15, "R,N");
$xls->add_field("Bayar", 15, "R,N");
$xls->add_field("Sisa", 15, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,4,"L,B"));
$tot_sub = 0; $tot_bayar = 0;
$xls->add_span(["SALDO AWAL",1,"R,B"],["",1,"L"],["",1,"L"],[$n_saldo,1,"R,B","rupiah"]);
while ($db->Next()) {
$tot_sub += $db->Row("Total");
$tot_bayar += $db->Row("Bayar");
$n_saldo += $db->Row("Total") - $db->Row("Bayar");
$xls->add_value($db->Row("Tgl_Beli"), $db->Row("Total"), $db->Row("Bayar"), $n_saldo);
}
$xls->add_span(["SALDO AKHIR",1,"R,B"],[$tot_sub,1,"R,B","rupiah"],[$tot_bayar,1,"R,B","rupiah"],[$n_saldo,1,"R,B","rupiah"]);
$xls->add_stamp(1, true);
$xls->send("Data Mutasi Pembelian ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
<div class="col">'.$tsup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+174
View File
@@ -0,0 +1,174 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/beli_retur.php
Desc. : PHP - Laporan Retur Pembelian
Created By : Siau Pheng ([email protected]).
Created Date : April 12th, 2011.
Last Modified : December 12th, 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$tipe = Param::Get("Tipe", "R"); // R or D
$id_sup = Param::Get("SupID", 0);
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$nama_sup = "";
if ($id_sup > 0) {
$db->Query("SELECT CONCAT(Nama_Sup,' (',Kode_Sup,')') Nama FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
if ($db->Next()) $nama_sup = $db->Row("Nama");
}
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
$tsql .= ($id_sup==0) ? "" : " AND SupID='".$id_cab."'";
if ($tipe=="R") {
$db->Query("SELECT B.*,S.Nama_Sup FROM (SELECT SupID,SUM(-Total_Hutang) Total_Retur FROM inv_beli WHERE Data_Beli=0 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY SupID) B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) ORDER BY S.Nama_Sup");
} else {
$db->Query("SELECT B.*,S.Nama_Sup,-B.Total_Hutang Retur FROM (SELECT * FROM inv_beli WHERE Data_Beli=0 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) ORDER BY B.No_Beli");
}
}
if ( $data == "print" ) {
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." RETUR PEMBELIAN", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
if ($tipe=="R") {
$pre->add_field("No.",10,"C");
$pre->add_field("Nama Supplier",50,"L");
$pre->add_field("Total",20,"R","rupiah");
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,3,"L,B"));
$tot_retur = 0; $nomor = 0;
while ($db->Next()) {
$tot_retur += $db->Row("Total_Retur");
$pre->add_value(++$nomor, $db->Row("Nama_Sup"), $db->Row("Total_Retur"));
}
$pre->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_retur,1,"R,B","rupiah"));
} else {
$pre->add_field("No. Nota",30,"C");
$pre->add_field("Tgl. Nota",30,"C", "tgl_sql2str");
$pre->add_field("Nama Supplier",50,"L");
$pre->add_field("Total",30,"R","rupiah");
$pre->add_field("Catatan",50,"L");
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,5,"L,B"));
$tot_retur = 0;
while ($db->Next()) {
$tot_retur += $db->Row("Retur");
$pre->add_value($db->Row("No_Beli"), $db->Row("Tgl_Beli"), $db->Row("Nama_Sup"), $db->Row("Retur"), $db->Row("No_Faktur"));
}
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($tot_retur,1,"R,B","rupiah"),["&nbsp;",1,"L"]);
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Retur Pembelian",
'desc'=>"Export Data Retur Pembelian"
]);
if ($tipe=="R") {
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA REKAP RETUR PEMBELIAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No.", 5, "C");
$xls->add_field("Nama Supplier", 25, "L");
$xls->add_field("Total", 15, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,3,"L,B"));
$tot_retur = 0; $nomor = 0;
while ($db->Next()) {
$tot_retur += $db->Row("Total_Retur");
$xls->add_value(++$nomor, $db->Row("Nama_Sup"), $db->Row("Total_Retur"));
}
$xls->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_retur,1,"R,B,N"));
} else {
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA DETAIL RETUR PEMBELIAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No. Nota", 15, "C");
$xls->add_field("Tgl. Nota", 12, "C", "tgl_sql2str");
$xls->add_field("Nama Supplier", 20, "L");
$xls->add_field("Total", 15, "R,N");
$xls->add_field("Catatan", 25, "L");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,5,"L,B"));
$tot_retur = 0;
while ($db->Next()) {
$tot_retur += $db->Row("Retur");
$xls->add_value($db->Row("No_Beli"), $db->Row("Tgl_Beli"), $db->Row("Nama_Sup"), $db->Row("Retur"), $db->Row("No_Faktur"));
}
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($tot_retur,1,"R,B,N"),["&nbsp;",1,"L"]);
}
$xls->add_stamp(1, true);
$xls->send("Data Retur Pembelian ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col col-form-label">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
<div class="col">'.$tsup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+229
View File
@@ -0,0 +1,229 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/dana_pos.php
Desc. : PHP - Laporan Penerimaan Kasir / POS
Created By : Siau Pheng ([email protected]).
Created Date : March 2nd, 2014.
Last Modified : September 30th, 2025.
(c) 2012 - 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","print-pos","export"])) {
$tipe = Param::Get("Tipe", "R"); // R or D
$id_kasir = Param::Get("KasirID", 0);
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
$tsql .= ($id_kasir==0) ? "" : " AND UserID='".$id_kasir."'";
if ($data=="print-pos") {
$tsql = " AND UserID='".$id_kasir."'";
$tsql .= ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
$db->Query("SELECT O.Username,O.Nama Nama_User FROM app_operator O WHERE O.UserID='".$id_kasir."'");
if ($db->Next()) $ainfo = $db->AllRow();
$db->Query("SELECT J.KartuID,IF(J.KartuID=0,'Cash / Uang Tunai',K.Nama_Kartu) Kartu,SUM(IF(J.Kode='J',J.Total_Jual-J.Total_Diskon-J.Total_Potong,0)) Total_Jual,SUM(IF(J.Kode='P',J.Total_Jual,0)) Total_Pulsa,SUM(J.Total_Diskon) Total_Diskon,SUM(J.Total_Potong) Total_Potong,SUM(J.Total_Cash) Total_Cash,SUM(J.Total_Kartu) Total_Kartu FROM (SELECT 'J' Kode,KartuID,SUM(Total_Jual) Total_Jual,SUM(Total_Jual-Total_Kartu-Total_Diskon-Total_Potong) Total_Cash,SUM(Total_Kartu) Total_Kartu,SUM(Total_Diskon) Total_Diskon,SUM(Total_Potong) Total_Potong FROM inv_jual WHERE (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY KartuID ORDER BY KartuID) J LEFT JOIN para_rek_pos K ON (J.KartuID=K.KartuID) GROUP BY J.KartuID ORDER BY J.KartuID");
} else {
if ($tipe=="R") {
$db->Query("SELECT O.UserID,O.Nama Nama_User,SUM(IF(J.Kode='J',J.Total_Jual,0)) Total_Jual,SUM(IF(J.Kode='P',J.Total_Jual,0)) Total_Pulsa,SUM(J.Total_Jual-J.Total_Kartu-J.Total_Potong) Total_Cash,SUM(J.Total_Kartu) Total_Kartu,SUM(J.Total_Potong) Total_Potong FROM (SELECT 'J' Kode,UserID,KartuID,SUM(Total_Jual-Total_Diskon) Total_Jual,SUM(Total_Kartu) Total_Kartu,SUM(Total_Potong) Total_Potong FROM inv_jual WHERE (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY UserID,KartuID ORDER BY UserID,KartuID) J LEFT JOIN app_operator O ON (J.UserID=O.UserID) GROUP BY J.UserID");
} else {
$db->Query("SELECT J.*,O.Nama Nama_User FROM (SELECT *,DATE_FORMAT(Tgl_Jual,'%d-%m-%Y') Tgl_Jual2,Total_Jual-Total_Diskon Total_Jual2,Total_Jual-Total_Kartu-Total_Diskon-Total_Potong Total_Cash FROM inv_jual WHERE (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." ORDER BY No_Jual) J LEFT JOIN app_operator O ON (J.UserID=O.UserID) ORDER BY J.No_Jual");
}
}
}
if ( $data == "print-pos" ) {
$tot_jual = 0; $tot_pulsa = 0; $tot_potong = 0; $tot_diskon = 0; $tot_dana = 0;
$adana = [[0=>"Cash / Uang Tunai",1=>0]];
while ($db->Next()) {
$adana[0][1] += $db->Row("Total_Cash");
if ($db->Row("KartuID") > 0) {
$adana[$db->Row("KartuID")] = [$db->Row("Kartu"), $db->Row("Total_Kartu")];
}
$tot_jual += $db->Row("Total_Jual");
$tot_pulsa += $db->Row("Total_Pulsa");
$tot_potong += $db->Row("Total_Potong");
$tot_diskon += $db->Row("Total_Diskon");
}
$tot_dana = $tot_jual + $tot_pulsa - $tot_potong - $tot_diskon;
$pre = new \siaupheng\fonia3\Printer\PrintPOS();
$pre->set_fontsize(2);
$pre->set_header_logo("logo-nota.png");
//$pre->add_header($_SESSION['__WEB_APP']['REG_ADDRESS'], $_SESSION['__WEB_APP']['REG_CITY']);
if ($_SESSION['__APP_INV']['PRINT_OPENCD']==1) $pre->set_opendrawer();
if ($_SESSION['__APP_INV']['PRINT_AUTOCUT']==1) $pre->set_cutpaper();
$pre->add_empty();
$pre->addc("REKAP PENERIMAAN KASIR / POS");
$pre->addc("Periode : ".$tglheader);
$pre->add_empty();
$pre->add("Operator : ".$ainfo['Username']);
$pre->add("Nama : ".$ainfo['Nama_User']);
$pre->add_empty();
$pre->add(array("Jumlah Penjualan Rp.",24), array(rupiah($tot_jual-$tot_diskon),16,"R"));
//$pre->add(array("Jumlah Pulsa & PPOB Rp.",24), array(rupiah($tot_pulsa),16,"R"));
$pre->add(array("Jumlah Diskon Rp.",24), array(rupiah($tot_diskon),16,"R"));
if ($tot_potong>0) $pre->add(array("Jumlah Promo Rp.",24), array(rupiah($tot_potong),16,"R"));
$pre->add_line("-");
if (count($adana)>1) {
foreach($adana as $_key => $_val) {
$pre->add(array($_val[0],21,"L"), array("Rp.",3), array(rupiah($_val[1]),16,"R"));
}
$pre->add_line("-");
}
$pre->add(array("TOTAL PENERIMAAN Rp.",24), array(rupiah($tot_dana),16,"R"));
$pre->add_line("=");
$pre->add_stamp(1, true);
$pre->add_empty($_SESSION['__APP_INV']['PRINT_ROW']);
$pre->show();
} else if ( $data == "print" ) {
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." PENERIMAAN KASIR / POS", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
if ($tipe=="R") {
$pre->add_field("No.",10,"C");
$pre->add_field("Nama Operator",30,"L");
$pre->add_field("Penjualan",20,"R","rupiah");
//$pre->add_field("Pulsa & PPOB",20,"R","rupiah");
$pre->add_field("Tunai",20,"R","rupiah");
$pre->add_field("Non Tunai",20,"R","rupiah");
$tot_jual = 0; $tot_pulsa = 0; $tot_cash = 0; $tot_deb = 0; $nomor = 0;
while ($db->Next()) {
$tot_jual += $db->Row("Total_Jual");
$tot_pulsa += $db->Row("Total_Pulsa");
$tot_cash += $db->Row("Total_Cash");
$tot_deb += $db->Row("Total_Kartu");
$pre->add_value(++$nomor, $db->Row("Nama_User"), $db->Row("Total_Jual"), $db->Row("Total_Cash"), $db->Row("Total_Kartu"));
}
$pre->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_jual,1,"R,B","rupiah"),array($tot_cash,1,"R,B","rupiah"),array($tot_deb,1,"R,B","rupiah"));
} else {
$pre->add_field("No. Nota",30,"C");
$pre->add_field("Tanggal",30,"C");
$pre->add_field("Penjualan",20,"R","rupiah");
$pre->add_field("Tunai",20,"R","rupiah");
$pre->add_field("Non Tunai",20,"R","rupiah");
$pre->add_field("Operator",30,"L");
$tot_jual = 0; $tot_cash = 0; $tot_deb = 0;
while ($db->Next()) {
$tot_jual += $db->Row("Total_Jual2");
$tot_cash += $db->Row("Total_Cash");
$tot_deb += $db->Row("Total_Kartu");
$pre->add_value($db->Row("No_Jual"), $db->Row("Tgl_Jual2"), $db->Row("Total_Jual2"), $db->Row("Total_Cash"), $db->Row("Total_Kartu"), $db->Row("Nama_User"));
}
$pre->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_jual,1,"R,B","rupiah"),array($tot_cash,1,"R,B","rupiah"),array($tot_deb,1,"R,B","rupiah"),array());
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Penerimaan POS",
'desc'=>"Export Data Penerimaan POS"
]);
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA ".($tipe=="R"?"REKAP":"DETAIL")." PENERIMAAN KASIR / POS</b>");
$xls->add_header("Periode : ".$tglheader);
if ($tipe=="R") {
$xls->add_field("No.", 5, "C");
$xls->add_field("Nama Operator", 50, "L");
$xls->add_field("Penjualan", 15, "R,N");
//$xls->add_field("Pulsa & PPOB", 15, "R,N");
$xls->add_field("Tunai", 15, "R,N");
$xls->add_field("Non Tunai", 15, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$tot_jual = 0; $tot_pulsa = 0; $tot_cash = 0; $tot_deb = 0; $nomor = 0;
while ($db->Next()) {
$tot_jual += $db->Row("Total_Jual");
$tot_pulsa += $db->Row("Total_Pulsa");
$tot_cash += $db->Row("Total_Cash");
$tot_deb += $db->Row("Total_Kartu");
$xls->add_value(++$nomor, $db->Row("Nama_User"), $db->Row("Total_Jual"), $db->Row("Total_Cash"), $db->Row("Total_Kartu"));
}
$xls->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_jual,1,"R,N,B"),array($tot_cash,1,"R,N,B"),array($tot_deb,1,"R,N,B"));
} else {
$xls->add_field("No. Nota", 15, "C");
$xls->add_field("Tanggal", 12, "C", "tgl_sql2str");
$xls->add_field("Penjualan", 15, "R,N");
$xls->add_field("Tunai", 15, "R,N");
$xls->add_field("Non Tunai", 15, "R,N");
$xls->add_field("Operator", 30, "L");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$tot_jual = 0; $tot_cash = 0; $tot_deb = 0;
while ($db->Next()) {
$tot_jual += $db->Row("Total_Jual2");
$tot_cash += $db->Row("Total_Cash");
$tot_deb += $db->Row("Total_Kartu");
$xls->add_value($db->Row("No_Jual"), $db->Row("Tgl_Jual2"), $db->Row("Total_Jual2"), $db->Row("Total_Cash"), $db->Row("Total_Kartu"), $db->Row("Nama_User"));
}
$xls->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_jual,1,"R,N,B"),array($tot_cash,1,"R,N,B"),array($tot_deb,1,"R,N,B"),array("",1,"L,B"));
}
$xls->add_stamp(1, true);
$xls->send("Data Penerimaan POS ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$ikasir = ($_SESSION['__WEB_USER']['Level']<9) ? 0 : user_id();
$tsql = ($_SESSION['__WEB_USER']['Level']<9) ? " AND Level>=".$_SESSION['__WEB_USER']['Level'] : " AND UserID='".user_id()."'";
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tkasir = $form->option_db("_", "KasirID", $ikasir, true, false, "app_operator", ["UserID","Nama"], "Aktif=1 ".((user_id()==1)?"":"AND UserID>1").$tsql, (($ikasir==0)?[0,"SEMUA OPERATOR"]:null));
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col col-form-label">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="KasirID">Nama Operator</label>
<div class="col">'.$tkasir.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-8 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tgl</label>
<div class="col-sm-8 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+183
View File
@@ -0,0 +1,183 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/hutang.php
Desc. : PHP - Laporan Hutang Supplier
Created By : Siau Pheng ([email protected]).
Created Date : July 17th, 2011.
Last Modified : October 16th, 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$tipe = Param::Get("Tipe", "R"); // R or D
$id_sup = Param::Get("SupID", 0);
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$nama_sup = "";
if ($id_sup>0) {
$db->Query("SELECT Nama_Sup Nama FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
if ($db->Next()) $nama_sup = $db->Row("Nama");
}
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_sup>0) ? " AND SupID='".$id_sup."'" : "";
// query data laporan
if ($tipe=="R") {
$db->Query("SELECT B.*,S.Nama_Sup FROM (SELECT SupID,SUM(Total_Hutang) Total_Hutang,SUM(Total_Bayar+Total_Potong) Total_Bayar FROM inv_beli WHERE Lunas=0 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY SupID) B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) ORDER BY S.Nama_Sup");
} else {
$db->Query("SELECT B.*,CONCAT(S.Nama_Sup,IF(B.Data_Beli=1,'',' <i>(Retur)</i>')) Nama_Sup,B.Total_Hutang Total_Hutang,B.Total_Bayar+B.Total_Potong Total_Bayar FROM (SELECT * FROM inv_beli WHERE Lunas=0 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) ORDER BY B.No_Beli");
}
}
if ( $data == "print" ) {
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." HUTANG SUPPLIER", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
if ($tipe=="R") {
$pre->add_field("No.",10,"C");
$pre->add_field("Nama Supplier",120,"L");
$pre->add_field("Jumlah Faktur",50,"R","rupiah2");
$pre->add_field("Jumlah Bayar",50,"R","rupiah2");
$pre->add_field("Sisa Hutang",50,"R","rupiah2");
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,5,"L,B"));
$tot_hut = 0; $tot_bayar = 0; $nomor = 0;
while ($db->Next()) {
$tot_hut += $db->Row("Total_Hutang");
$tot_bayar += $db->Row("Total_Bayar");
$pre->add_value(++$nomor, $db->Row("Nama_Sup"), $db->Row("Total_Hutang"), $db->Row("Total_Bayar"), $db->Row("Total_Hutang")-$db->Row("Total_Bayar"));
}
$pre->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_hut,1,"R,B","rupiah2"),array($tot_bayar,1,"R,B","rupiah2"),array($tot_hut-$tot_bayar,1,"R,B","rupiah2"));
} else {
$pre->add_field("No. Nota",10,"C");
$pre->add_field("Tgl. Nota",10,"C","sqltgl");
$pre->add_field("Nama Supplier",120,"L");
$pre->add_field("Jumlah",50,"R","rupiah2");
$pre->add_field("Bayar",50,"R","rupiah2");
$pre->add_field("Sisa Hutang",50,"R","rupiah2");
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,6,"L,B"));
$tot_hut = 0; $tot_bayar = 0;
while ($db->Next()) {
$tot_hut += $db->Row("Total_Hutang");
$tot_bayar += $db->Row("Total_Bayar");
$pre->add_value($db->Row("No_Beli"), $db->Row("Tgl_Beli"), $db->Row("Nama_Sup"), $db->Row("Total_Hutang"), $db->Row("Total_Bayar"), $db->Row("Total_Hutang")-$db->Row("Total_Bayar"));
}
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($tot_hut,1,"R,B","rupiah2"),array($tot_bayar,1,"R,B","rupiah2"),array($tot_hut-$tot_bayar,1,"R,B","rupiah2"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Hutang Supplier",
'desc'=>"Export Data Hutang Supplier"
]);
if ($tipe=="R") {
$xls->add_header($_SESSION['__WEB_APP']['REG_NAME']);
$xls->add_header("DATA REKAP HUTANG SUPPLIER");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No.", 10, "C");
$xls->add_field("Nama Supplier", 80, "L");
$xls->add_field("Jumlah Faktur", 20, "R,N");
$xls->add_field("Jumlah Bayar", 20, "R,N");
$xls->add_field("Sisa Hutang", 20, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
if ($id_sup>0) $xls->add_span(["Nama Supplier : ".$nama_sup,5,"L"]);
$tot_hut = 0; $tot_bayar = 0; $nomor = 0;
while ($db->Next()) {
$tot_hut += $db->Row("Total_Hutang");
$tot_bayar += $db->Row("Total_Bayar");
$xls->add_value(++$nomor, $db->Row("Nama_Sup"), $db->Row("Total_Hutang"), $db->Row("Total_Bayar"), $db->Row("Total_Hutang")-$db->Row("Total_Bayar"));
}
$xls->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_hut,1,"R,B,N"),array($tot_bayar,1,"R,B,N"),array($tot_hut-$tot_bayar,1,"R,B,N"));
} else {
$xls->add_header($_SESSION['__WEB_APP']['REG_NAME']);
$xls->add_header("DATA DETAIL HUTANG SUPPLIER");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No. Nota", 10, "C");
$xls->add_field("Tgl. Nota", 10, "C", "sqltgl");
$xls->add_field("Nama Supplier", 80, "L");
$xls->add_field("Jumlah", 20, "R,N");
$xls->add_field("Bayar", 20, "R,N");
$xls->add_field("Sisa Hutang", 20, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
if ($id_sup>0) $xls->add_span(["Nama Supplier : ".$nama_sup,6,"L"]);
$tot_hut = 0; $tot_bayar = 0;
while ($db->Next()) {
$tot_hut += $db->Row("Total_Hutang");
$tot_bayar += $db->Row("Total_Bayar");
$xls->add_value($db->Row("No_Beli"), $db->Row("Tgl_Beli"), $db->Row("Nama_Sup"), $db->Row("Total_Hutang"), $db->Row("Total_Bayar"), $db->Row("Total_Hutang")-$db->Row("Total_Bayar"));
}
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($tot_hut,1,"R,B,N"),array($tot_bayar,1,"R,B,N"),array($tot_hut-$tot_bayar,1,"R,B,N"));
}
$xls->add_stamp(1, true);
$xls->send("Data Hutang Supplier ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col col-form-label">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
<div class="col">'.$tsup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+156
View File
@@ -0,0 +1,156 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/hutang_bayar.php
Desc. : PHP - Laporan Pembayaran Hutang
Created By : Siau Pheng ([email protected]).
Created Date : May 18th, 2012.
Last Modified : October 19th, 2025.
(c) 2012 - 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$tipe = Param::Get("Tipe", "R"); // R or D
$id_sup = Param::Get("SupID", 0);
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
$tsql .= ($id_sup==0) ? "" : " AND SupID='".$id_sup."'";
if ($tipe=="R") {
$db->Query("SELECT Tgl_Bayar,SUM(Total_Bayar) Total_Bayar FROM inv_beli_lunas WHERE (Tgl_Bayar BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY Tgl_Bayar ORDER BY Tgl_Bayar");
} else {
$db->Query("SELECT L.*,S.Nama_Sup FROM (SELECT * FROM inv_beli_lunas WHERE (Tgl_Bayar BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") L LEFT JOIN para_supplier S ON (S.SupID=L.SupID) ORDER BY L.Tgl_Bayar");
}
}
if ( $data == "print" ) {
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." PEMBAYARAN SUPPLIER", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
if ($tipe=="R") {
$pre->add_field("No.",10,"C");
$pre->add_field("Tanggal",30,"C","sqltgl");
$pre->add_field("Keterangan",80,"L");
$pre->add_field("Jumlah",20,"R","rupiah");
$sub_tot = 0; $nomor = 0;
while ($db->Next()) {
$sub_tot += $db->Row("Total_Bayar");
$pre->add_value(++$nomor, $db->Row("Tgl_Bayar"), "Pembayaran Hutang Supplier", $db->Row("Total_Bayar"));
}
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B","rupiah"));
} else {
$pre->add_field("Tanggal",30,"C","sqltgl");
$pre->add_field("No. Transaksi",20,"L");
$pre->add_field("Nama Supplier",150,"L");
$pre->add_field("Jumlah",30,"R","rupiah");
$sub_tot = 0;
while ($db->Next()) {
$sub_tot += $db->Row("Total_Bayar");
$pre->add_value($db->Row("Tgl_Bayar"), $db->Row("No_Beli"), $db->Row("Nama_Sup"), $db->Row("Total_Bayar"));
}
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B","rupiah"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Pembayaran Supplier",
'desc'=>"Export Data Pembayaran Supplier"
]);
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA ".($tipe=="R"?"REKAP":"DETAIL")." PEMBAYARAN SUPPLIER</b>");
$xls->add_header("Periode : ".$tglheader);
if ($tipe=="R") {
$xls->add_field("No.", 5, "C");
$xls->add_field("Tanggal", 12, "C", "tgl_sql2str");
$xls->add_field("Keterangan", 50, "L");
$xls->add_field("Jumlah", 15, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$sub_tot = 0; $nomor = 0;
while ($db->Next()) {
$sub_tot += $db->Row("Total_Bayar");
$xls->add_value(++$nomor, $db->Row("Tgl_Bayar"), "Pembayaran Hutang Supplier", $db->Row("Total_Bayar"));
}
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B,N"));
} else {
$xls->add_field("Tanggal", 12, "C", "tgl_sql2str");
$xls->add_field("No. Transaksi", 15, "L");
$xls->add_field("Nama Supplier", 50, "L");
$xls->add_field("Jumlah", 15, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$sub_tot = 0;
while ($db->Next()) {
$sub_tot += $db->Row("Total_Bayar");
$xls->add_value($db->Row("Tgl_Bayar"), $db->Row("No_Beli"), $db->Row("Nama_Sup"), $db->Row("Total_Bayar"));
}
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B,N"));
}
$xls->add_stamp(1, true);
$xls->send("Data Pembayaran Supplier ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col col-form-label">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
<div class="col">'.$tsup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-8 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tgl</label>
<div class="col-sm-8 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+167
View File
@@ -0,0 +1,167 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/jual.php
Desc. : PHP - Laporan Penjualan
Created By : Siau Pheng ([email protected]).
Created Date : April 12th, 2011.
Last Modified : September 30th, 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$tipe = Param::Get("Tipe", "R"); // R or D
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
if ($tipe=="R") {
$db->Query("SELECT J.Tgl_Jual,SUM(J.Total_Jual) Total_Jual,SUM(J.Total_Diskon) Total_Diskon,SUM(J.Total_Jual-J.Total_Diskon) Total FROM (SELECT * FROM inv_jual WHERE (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") J GROUP BY Tgl_Jual ORDER BY J.Tgl_Jual");
} else {
$db->Query("SELECT D.*,DATE_FORMAT(D.Tgl_Ref,'%d-%m-%Y') Tgl_Jual,IFNULL(O.Nama,'KASIR POS') Nama_User FROM (SELECT No_Ref No_Jual,Tgl_Ref,SUM(-Qty*Harga_Jual) Total_Jual,SUM(Total_Diskon) Total_Diskon,SUM((-Qty*Harga_Jual)-Total_Diskon) Total,UserID FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." AND NotaID=5 GROUP BY No_Ref) D LEFT JOIN app_operator O ON (D.UserID=O.UserID) ORDER BY D.No_Jual");
}
}
if ( $data == "print" ) {
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." PENJUALAN", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
if ($tipe=="R") {
$pre->add_field("No.",10,"C");
$pre->add_field("Tanggal",30,"C","sqltgl");
$pre->add_field("Sub. Total",20,"R","rupiah");
$pre->add_field("Diskon",20,"R","rupiah");
$pre->add_field("Total",20,"R","rupiah");
$tot_jual = 0; $tot_diskon = 0; $nomor = 0;
while ($db->Next()) {
if ($db->RowFloat("Total", 0) == 0) continue;
$tot_jual += $db->Row("Total_Jual");
$tot_diskon += $db->Row("Total_Diskon");
$pre->add_value(++$nomor, $db->Row("Tgl_Jual"), $db->Row("Total_Jual"), $db->Row("Total_Diskon"), $db->Row("Total"));
}
$pre->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_jual,1,"R,B","rupiah"),array($tot_diskon,1,"R,B","rupiah"),array($tot_jual-$tot_diskon,1,"R,B","rupiah"));
} else {
$pre->add_field("No. Nota",30,"C");
$pre->add_field("Tgl. Nota",30,"C");
$pre->add_field("Nama Kasir",20,"L");
$pre->add_field("Sub. Total",20,"R","rupiah");
$pre->add_field("Diskon",20,"R","rupiah");
$pre->add_field("Total",30,"R","rupiah");
$tot_jual = 0; $tot_diskon = 0;
while ($db->Next()) {
if ($db->RowFloat("Total", 0) == 0) continue;
$tot_jual += $db->Row("Total_Jual");
$tot_diskon += $db->Row("Total_Diskon");
$pre->add_value($db->Row("No_Jual"), $db->Row("Tgl_Jual"), $db->Row("Nama_User"), $db->Row("Total_Jual"), $db->Row("Total_Diskon"), $db->Row("Total"));
}
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($tot_jual,1,"R,B","rupiah"),array($tot_diskon,1,"R,B","rupiah"),array($tot_jual-$tot_diskon,1,"R,B","rupiah"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Penjualan",
'desc'=>"Export Data Penjualan"
]);
if ($tipe=="R") {
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA REKAP PENJUALAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No.", 5, "C");
$xls->add_field("Tanggal", 12, "C", "sqltgl");
$xls->add_field("Sub. Total", 15, "R,N");
$xls->add_field("Diskon", 15, "R,N");
$xls->add_field("Total", 15, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$tot_jual = 0; $tot_diskon = 0; $nomor = 0;
while ($db->Next()) {
if ($db->RowFloat("Total", 0) == 0) continue;
$tot_jual += $db->Row("Total_Jual");
$tot_diskon += $db->Row("Total_Diskon");
$xls->add_value(++$nomor, $db->Row("Tgl_Jual"), $db->Row("Total_Jual"), $db->Row("Total_Diskon"), $db->Row("Total"));
}
$xls->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_jual,1,"R,B,N"),array($tot_diskon,1,"R,B,N"),array($tot_jual-$tot_diskon,1,"R,B,N"));
} else {
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA DETAIL PENJUALAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No. Nota", 15, "C");
$xls->add_field("Tgl. Nota", 12, "C", "tgl_sql2str");
$xls->add_field("Nama Kasir", 20, "L");
$xls->add_field("Sub. Total", 15, "R,N");
$xls->add_field("Diskon", 15, "R,N");
$xls->add_field("Total", 15, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$tot_jual = 0; $tot_diskon = 0;
while ($db->Next()) {
if ($db->RowFloat("Total", 0) == 0) continue;
$tot_jual += $db->Row("Total_Jual");
$tot_diskon += $db->Row("Total_Diskon");
$xls->add_value($db->Row("No_Jual"), $db->Row("Tgl_Jual"), $db->Row("Nama_User"), $db->Row("Total_Jual"), $db->Row("Total_Diskon"), $db->Row("Total"));
}
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($tot_jual,1,"R,B,N"),array($tot_diskon,1,"R,B,N"),array($tot_jual-$tot_diskon,1,"R,B,N"));
}
$xls->add_stamp(1, true);
$xls->send("Data Penjualan ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col col-form-label">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+269
View File
@@ -0,0 +1,269 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/jual_analisa.php
Desc. : PHP - Laporan Analisa Penjualan
Created By : Siau Pheng ([email protected]).
Created Date : May 9th, 2013.
Last Modified : October 4th, 2025.
(c) 2013 - 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$tipe = Param::Get("Tipe", "V"); // V or R or M
$id_sup = Param::Get("SupID", 0);
$id_grup = Param::Get("Grup_InvID", 0);
$m_urut = Param::Get("Urut", "B");
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$jum_hari = tgl_range_hari($tglfrom, $tglto, true);
$nama_sup = ""; $nama_grup = "";
if ($id_sup>0) {
$db->Query("SELECT Nama_Sup Nama FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
if ($db->Next()) $nama_sup = $db->Row("Nama");
}
if ($id_grup>0 && $id_sup==0) {
$db->Query("SELECT Nama_Grup Nama FROM inv_produk_grup WHERE Grup_InvID='".$id_grup."' LIMIT 1");
if ($db->Next()) $nama_grup = $db->Row("Nama");
}
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tjoin = "";
$tsql = " D.Jumlah <> 0";
$tsql .= ($id_grup>0 && $id_sup==0) ? " AND P.Grup_InvID=".$id_grup : "";
if ($id_sup>0) {
$tsql .= " AND U.SupID='".$id_sup."'";
$tjoin .= " LEFT JOIN inv_produk_sup U ON (U.InvID=D.InvID AND U.SupID='".$id_sup."')";
}
$tsql2 = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
$torder = ($m_urut=="B") ? " P.Nama_Produk" : " D.Jumlah";
if ($tipe=="V") {
$db->Query("SELECT P.Nama_Produk,P.Satuan_Normal,P.Satuan_Stok,D.Jumlah,S.Stok,P.Qty Kali FROM (SELECT InvID,SUM(-Stok) Jumlah FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND NotaID IN (5,6)".$tsql2." GROUP BY InvID) D LEFT JOIN (SELECT InvID,SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".$tglto."'".$tsql2." GROUP BY InvID) S ON (D.InvID=S.InvID) LEFT JOIN vi_inv_produk2 P ON (D.InvID=P.InvID)".$tjoin." WHERE ".$tsql." ORDER BY".$torder);
} else if ($tipe=="R") {
$db->Query("SELECT P.Nama_Produk,P.Satuan_Normal,P.Satuan_Stok,D.Jumlah,S.Stok,P.Qty Kali FROM (SELECT InvID,SUM(-Qty*Harga_Jual) Jumlah FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND NotaID IN (5,6)".$tsql2." GROUP BY InvID) D LEFT JOIN (SELECT InvID,SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".$tglto."'".$tsql2." GROUP BY InvID) S ON (D.InvID=S.InvID) LEFT JOIN vi_inv_produk2 P ON (D.InvID=P.InvID)".$tjoin." WHERE ".$tsql." ORDER BY".$torder);
} else if ($tipe=="M") {
$torder = ($m_urut=="M") ? " Margin" : $torder;
$db->Query("SELECT P.Nama_Produk,P.Satuan_Normal,P.Satuan_Stok,D.Margin,D.Jumlah,S.Stok,P.Qty Kali FROM (SELECT InvID,((SUM(-Qty*(Harga_Jual-Harga_Beli))*100)/SUM(-Qty*Harga_Jual)) Margin,SUM(-Qty*(Harga_Jual-Harga_Beli)) Jumlah FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND NotaID IN (5,6)".$tsql2." GROUP BY InvID) D LEFT JOIN (SELECT InvID,SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".$tglto."'".$tsql2." GROUP BY InvID) S ON (D.InvID=S.InvID) LEFT JOIN vi_inv_produk2 P ON (D.InvID=P.InvID)".$tjoin." WHERE ".$tsql." ORDER BY".$torder);
}
}
if ( $data == "print" ) {
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
if ($tipe=="V") {
Report_Header("REKAP VOLUME PENJUALAN", "Periode : ".$tglheader);
$pre->add_field("No.",5,"C");
$pre->add_field("Nama Barang",120);
$pre->add_field("Jumlah",80,"R");
$pre->add_field("Mingguan",80,"R");
$pre->add_field("Sisa Stok",80,"R");
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,5,"L,NB"));
if ($id_grup>0 && $id_sup==0) $pre->add_span(array("Grup Barang : ".$nama_grup,5,"L,NB"));
$nomor = 0;
while ($db->Next()) {
$total = $db->Row("Jumlah",0);
$mg_total = $total / ($jum_hari/7);
$kali = $db->Row("Kali",0);
$stok = Format_Stok($total, $kali, $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
$mg_stok = Format_Stok($mg_total, $kali, $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
$ss_stok = Format_Stok($db->Row("Stok"), $kali, $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
$pre->add_value(++$nomor, $db->Row("Nama_Produk"), $stok, $mg_stok, $ss_stok);
}
} else if ($tipe=="R") {
Report_Header("REKAP RUPIAH PENJUALAN", "Periode : ".$tglheader);
$pre->add_field("No.",5,"C");
$pre->add_field("Nama Barang",80);
$pre->add_field("Jumlah",20,"R","rupiah");
$pre->add_field("Mingguan",20,"R","rupiah");
$pre->add_field("Sisa Stok",80,"R");
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,5,"L,NB"));
if ($id_grup>0 && $id_sup==0) $pre->add_span(array("Grup Barang : ".$nama_grup,5,"L,NB"));
$nomor = 0; $tot_rup = 0; $tot_mg = 0;
while ($db->Next()) {
$mg_avg = ($db->Row("Jumlah",0)>0) ? $db->Row("Jumlah",0) / ($jum_hari/7) : 0;
$tot_rup += $db->Row("Jumlah");
$tot_mg += $mg_avg;
$ss_stok = Format_Stok($db->Row("Stok"), $db->Row("Kali",0), $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
$pre->add_value(++$nomor, $db->Row("Nama_Produk"), $db->Row("Jumlah"), $mg_avg. $ss_stok);
}
$pre->add_span(array("TOTAL",2,"R,B"),array(rupiah($tot_rup),1,"R,B"),array(rupiah($tot_mg),1,"R,B"),array("",1,"B"));
} else if ($tipe=="M") {
Report_Header("REKAP MARGIN PENJUALAN", "Periode : ".$tglheader);
$pre->add_field("No.",5,"C");
$pre->add_field("Nama Barang",80);
$pre->add_field("Jumlah",20,"R","rupiah");
$pre->add_field("Margin (%)",10,"R","rupiah2");
$pre->add_field("Mingguan",20,"R","rupiah");
$pre->add_field("Sisa Stok",80,"R");
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,6,"L,NB"));
if ($id_grup>0 && $id_sup==0) $pre->add_span(array("Grup Barang : ".$nama_grup,6,"L,NB"));
$nomor = 0; $tot_rup = 0; $tot_mar = 0; $tot_mg = 0;
while ($db->Next()) {
$mg_avg = ($db->Row("Jumlah",0)>0) ? $db->Row("Jumlah",0) / ($jum_hari/7) : 0;
$tot_rup += $db->Row("Jumlah");
$tot_mar += $db->Row("Margin");
$tot_mg += $mg_avg;
$ss_stok = Format_Stok($db->Row("Stok"), $db->Row("Kali",0), $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
$pre->add_value(++$nomor, $db->Row("Nama_Produk"), $db->Row("Jumlah"), $db->Row("Margin"), $mg_avg, $ss_stok);
}
$pre->add_span(array("TOTAL",2,"R,B"),array(rupiah($tot_rup),1,"R,B"),array(rupiah2($tot_mar),1,"R,B"),array(rupiah($tot_mg),1,"R,B"),array("",1,"B"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Analisa Penjualan",
'desc'=>"Export Data Analisa Penjualan"
]);
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
if ($tipe=="V") {
$xls->add_header("<b>DATA REKAP VOLUME PENJUALAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No.", 5, "C");
$xls->add_field("Nama Barang", 80, "L");
$xls->add_field("Jumlah", 20, "R,N");
$xls->add_field("Mingguan", 20, "R,N");
$xls->add_field("Sisa Stok", 20, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,5,"L,B"));
if ($id_grup>0 && $id_sup==0) $xls->add_span(array("Grup Barang : ".$nama_grup,5,"L,B"));
$nomor = 0;
while ($db->Next()) {
$total = $db->Row("Jumlah",0);
$mg_total = $total / ($jum_hari/7);
$kali = $db->Row("Kali",0);
$stok = Format_Stok($total, $kali, $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
$mg_stok = Format_Stok($mg_total, $kali, $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
$ss_stok = Format_Stok($db->Row("Stok"), $kali, $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
$xls->add_value(++$nomor, $db->Row("Nama_Produk"), $stok, $mg_stok, $ss_stok);
}
} else if ($tipe=="R") {
$xls->add_header("<b>DATA REKAP RUPIAH PENJUALAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No.", 5, "C");
$xls->add_field("Nama Barang", 80, "L");
$xls->add_field("Jumlah", 20, "R,N");
$xls->add_field("Mingguan", 20, "R,N");
$xls->add_field("Sisa Stok", 20, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,5,"L,B"));
if ($id_grup>0 && $id_sup==0) $xls->add_span(array("Grup Barang : ".$nama_grup,5,"L,B"));
$nomor = 0; $tot_rup = 0; $tot_mg = 0;
while ($db->Next()) {
$mg_avg = ($db->Row("Jumlah",0)>0) ? $db->Row("Jumlah",0) / ($jum_hari/7) : 0;
$tot_rup += $db->Row("Jumlah");
$tot_mg += $mg_avg;
$ss_stok = Format_Stok($db->Row("Stok"), $db->Row("Kali",0), $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
$xls->add_value(++$nomor, $db->Row("Nama_Produk"), $db->Row("Jumlah"), $mg_avg, $ss_stok);
}
$xls->add_span(array("TOTAL",2,"R,B"),array($tot_rup,1,"R,N,B"),array($tot_mg,1,"R,N,B"),array("",1,"B"));
} else if ($tipe=="M") {
$xls->add_header("<b>DATA REKAP MARGIN PENJUALAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No.", 5, "C");
$xls->add_field("Nama Barang", 80, "L");
$xls->add_field("Jumlah", 20, "R,N");
$xls->add_field("Margin (%)", 10, "R,N");
$xls->add_field("Mingguan", 20, "R,N");
$xls->add_field("Sisa Stok", 20, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
if ($id_sup>0) $xls->add_span(array("Nama Supplier : ".$nama_sup,6,"L,B"));
if ($id_grup>0 && $id_sup==0) $xls->add_span(array("Grup Barang : ".$nama_grup,6,"L,B"));
$nomor = 0; $tot_rup = 0; $tot_mar = 0; $tot_mg = 0;
while ($db->Next()) {
$mg_avg = ($db->Row("Jumlah",0)>0) ? $db->Row("Jumlah",0) / ($jum_hari/7) : 0;
$tot_rup += $db->Row("Jumlah");
$tot_mar += $db->Row("Margin");
$tot_mg += $mg_avg;
$ss_stok = Format_Stok($db->Row("Stok"), $db->Row("Kali",0), $db->Row("Satuan_Normal"), $db->Row("Satuan_Stok"));
$xls->add_value(++$nomor, $db->Row("Nama_Produk"), $db->Row("Jumlah"), $db->Row("Margin"), $mg_avg, $ss_stok);
}
$xls->add_span(array("TOTAL",2,"R,B"),array($tot_rup,1,"R,N,B"),array($tot_mar,1,"R,N,B"),array($tot_mg,1,"R,N,B"),array("",1,"B"));
}
$xls->add_stamp(1, true);
$xls->send("Data Analisa Penjualan ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "V", true, false, ["V"=>"Volume","R"=>"Rupiah","M"=>"Margin"]);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"SEMUA GRUP"]);
$turut = $form->radio("_", "Urut", "B", true, false, ['B'=>"Nama Barang",'J'=>"Jumlah / Nilai",'M'=>"Margin"]);
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col col-form-label">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
<div class="col"><div class="input-group">'.$tsup.Form_Info("Jika Nama Supplier dipilih, Filter Grup Barang akan diabaikan.").'</div></div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Grup_InvID">Grup Barang</label>
<div class="col">'.$tgrup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Urut">Urut Berdasarkan</label>
<div class="col col-form-label">'.$turut.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+215
View File
@@ -0,0 +1,215 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/jual_margin.php
Desc. : PHP - Laporan Margin Penjualan
Created By : Siau Pheng ([email protected]).
Created Date : October 12nd, 2012.
Last Modified : December 12th, 2025.
(c) 2012 - 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$tipe = Param::Get("Tipe", "R"); // R or D or I
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
if ($tipe=="R") {
$db->Query("SELECT D.*,IFNULL(O.Nama,'KASIR POS') Nama_User FROM (SELECT UserID,SUM(-Qty*Harga_Beli) Total_Modal,SUM((-Qty*Harga_Jual)-Total_Diskon) Total_Jual FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND NotaID IN (5,6)".$tsql." GROUP BY UserID) D LEFT JOIN app_operator O ON (D.UserID=O.UserID) ORDER BY O.Nama");
} else if ($tipe=="D") {
$db->Query("SELECT D.*,IFNULL(O.Nama,'KASIR POS') Nama_User FROM (SELECT UserID,No_Ref,Tgl_Ref,SUM(-Qty*Harga_Beli) Total_Modal,SUM((-Qty*Harga_Jual)-Total_Diskon) Total_Jual FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND NotaID IN (5,6)".$tsql." GROUP BY UserID,No_Ref) D LEFT JOIN app_operator O ON (D.UserID=O.UserID) ORDER BY D.Tgl_Ref,O.Nama");
} else {
$db->Query("SELECT D.*,IFNULL(O.Nama,'KASIR POS') Nama_User,P.Nama_Lengkap FROM (SELECT UserID,InvID,SatuanID,No_Ref,Tgl_Ref,(-Qty*Harga_Beli) Total_Modal,((-Qty*Harga_Jual)-Total_Diskon) Total_Jual FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND NotaID IN (5,6)".$tsql.") D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID) LEFT JOIN app_operator O ON (D.UserID=O.UserID) ORDER BY D.Tgl_Ref,O.Nama,D.No_Ref");
}
$ahead = array('R'=>"REKAP",'D'=>"DETAIL",'I'=>"RINCIAN");
}
if ( $data == "print" ) {
Report_Header($ahead[$tipe]." MARGIN PENJUALAN", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
if ($tipe=="R") {
$pre->add_field("No.",10,"C");
$pre->add_field("Nama Kasir",30,"L");
$pre->add_field("Harga Modal",20,"R","rupiah");
$pre->add_field("Harga Jual",20,"R","rupiah");
$pre->add_field("Margin",20,"R","rupiah");
$pre->add_field("%",10,"R","rupiah2");
$tot_modal = 0; $tot_jual = 0; $nomor = 0;
while ($db->Next()) {
$tot_modal += $db->Row("Total_Modal");
$tot_jual += $db->Row("Total_Jual");
$pre->add_value(++$nomor, $db->Row("Nama_User"), $db->Row("Total_Modal"), $db->Row("Total_Jual"), ($db->Row("Total_Jual")-$db->Row("Total_Modal")), (($db->Row("Total_Jual")-$db->Row("Total_Modal"))*100)/$db->Row("Total_Jual"));
}
$pre->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_modal,1,"R,B","rupiah"),array($tot_jual,1,"R,B","rupiah"),array($tot_jual-$tot_modal,1,"R,B","rupiah"),array((($tot_jual-$tot_modal)*100)/$tot_jual,1,"R,B","rupiah2"));
} else if ($tipe=="D") {
$pre->add_field("No. Nota",20,"C");
$pre->add_field("Tgl. Nota",20,"C","sqltgl");
$pre->add_field("Nama Kasir",30,"L");
$pre->add_field("Harga Modal",20,"R","rupiah");
$pre->add_field("Harga Jual",20,"R","rupiah");
$pre->add_field("Margin",20,"R","rupiah");
$pre->add_field("%",10,"R","rupiah2");
$tot_modal = 0; $tot_jual = 0;
while ($db->Next()) {
$tot_modal += $db->Row("Total_Modal");
$tot_jual += $db->Row("Total_Jual");
$pre->add_value($db->Row("No_Ref"), $db->Row("Tgl_Ref"), $db->Row("Nama_User"), $db->Row("Total_Modal"), $db->Row("Total_Jual"), ($db->Row("Total_Jual")-$db->Row("Total_Modal")), (($db->Row("Total_Jual")-$db->Row("Total_Modal"))*100)/$db->Row("Total_Jual"));
}
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($tot_modal,1,"R,B","rupiah"),array($tot_jual,1,"R,B","rupiah"),array($tot_jual-$tot_modal,1,"R,B","rupiah"),array((($tot_jual-$tot_modal)*100)/$tot_jual,1,"R,B","rupiah2"));
} else {
$pre->add_field("No. Nota",20,"C");
$pre->add_field("Tgl. Nota",20,"C","sqltgl");
$pre->add_field("Nama Kasir",20,"L");
$pre->add_field("Nama Barang",20,"L");
$pre->add_field("Harga Modal",20,"R","rupiah");
$pre->add_field("Harga Jual",20,"R","rupiah");
$pre->add_field("Margin",20,"R","rupiah");
$pre->add_field("%",10,"R","rupiah2");
$tot_modal = 0; $tot_jual = 0; $psn_margin = 0;
while ($db->Next()) {
if ($db->RowFloat("Total_Jual", 0) == 0) continue;
$tot_modal += $db->Row("Total_Modal");
$tot_jual += $db->Row("Total_Jual");
$psn_margin = ($db->Row("Total_Jual")==0) ? 0 : (($db->Row("Total_Jual")-$db->Row("Total_Modal"))*100)/$db->Row("Total_Jual");
$pre->add_value($db->Row("No_Ref"), $db->Row("Tgl_Ref"), $db->Row("Nama_User"), $db->Row("Nama_Lengkap"), $db->Row("Total_Modal"), $db->Row("Total_Jual"), ($db->Row("Total_Jual")-$db->Row("Total_Modal")), $psn_margin);
}
$pre->add_span(array("GRAND TOTAL",4,"R,B"),array($tot_modal,1,"R,B","rupiah"),array($tot_jual,1,"R,B","rupiah"),array($tot_jual-$tot_modal,1,"R,B","rupiah"),array((($tot_jual-$tot_modal)*100)/$tot_jual,1,"R,B","rupiah2"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Margin Penjualan",
'desc'=>"Export Data Margin Penjualan"
]);
if ($tipe=="R") {
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA REKAP MARGIN PENJUALAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No.", 5, "C");
$xls->add_field("Nama Kasir", 20, "L");
$xls->add_field("Harga Modal", 15, "R,N");
$xls->add_field("Harga Jual", 15, "R,N");
$xls->add_field("Margin", 15, "R,N");
$xls->add_field("%", 8, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$tot_modal = 0; $tot_jual = 0; $nomor = 0;
while ($db->Next()) {
$tot_modal += $db->Row("Total_Modal");
$tot_jual += $db->Row("Total_Jual");
$xls->add_value(++$nomor, $db->Row("Nama_User"), $db->Row("Total_Modal"), $db->Row("Total_Jual"), ($db->Row("Total_Jual")-$db->Row("Total_Modal")), (($db->Row("Total_Jual")-$db->Row("Total_Modal"))*100)/$db->Row("Total_Jual"));
}
$xls->add_span(array("GRAND TOTAL",2,"R,B"),array($tot_modal,1,"R,B,N"),array($tot_jual,1,"R,B,N"),array($tot_jual-$tot_modal,1,"R,B,N"),array((($tot_jual-$tot_modal)*100)/$tot_jual,1,"R,B,N"));
} else if ($tipe=="D") {
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA DETAIL MARGIN PENJUALAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No. Nota", 15, "C");
$xls->add_field("Tgl. Nota", 12, "C", "tgl_sql2str");
$xls->add_field("Nama Kasir", 20, "L");
$xls->add_field("Harga Modal", 15, "R,N");
$xls->add_field("Harga Jual", 15, "R,N");
$xls->add_field("Margin", 15, "R,N");
$xls->add_field("%", 8, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$tot_modal = 0; $tot_jual = 0;
while ($db->Next()) {
$tot_modal += $db->Row("Total_Modal");
$tot_jual += $db->Row("Total_Jual");
$xls->add_value($db->Row("No_Ref"), $db->Row("Tgl_Ref"), $db->Row("Nama_User"), $db->Row("Total_Modal"), $db->Row("Total_Jual"), ($db->Row("Total_Jual")-$db->Row("Total_Modal")), (($db->Row("Total_Jual")-$db->Row("Total_Modal"))*100)/$db->Row("Total_Jual"));
}
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($tot_modal,1,"R,B,N"),array($tot_jual,1,"R,B,N"),array($tot_jual-$tot_modal,1,"R,B,N"),array((($tot_jual-$tot_modal)*100)/$tot_jual,1,"R,B,N"));
} else {
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA RINCIAN MARGIN PENJUALAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No. Nota", 15, "C");
$xls->add_field("Tgl. Nota", 12, "C", "tgl_sql2str");
$xls->add_field("Nama Kasir", 20, "L");
$xls->add_field("Nama Barang", 20, "L");
$xls->add_field("Harga Modal", 15, "R,N");
$xls->add_field("Harga Jual", 15, "R,N");
$xls->add_field("Margin", 15, "R,N");
$xls->add_field("%", 8, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$tot_modal = 0; $tot_jual = 0; $psn_margin = 0;
while ($db->Next()) {
if ($db->RowFloat("Total_Jual", 0) == 0) continue;
$tot_modal += $db->Row("Total_Modal");
$tot_jual += $db->Row("Total_Jual");
$psn_margin = ($db->Row("Total_Jual")==0) ? 0 : (($db->Row("Total_Jual")-$db->Row("Total_Modal"))*100)/$db->Row("Total_Jual");
$xls->add_value($db->Row("No_Ref"), $db->Row("Tgl_Ref"), $db->Row("Nama_User"), $db->Row("Nama_Lengkap"), $db->Row("Total_Modal"), $db->Row("Total_Jual"), ($db->Row("Total_Jual")-$db->Row("Total_Modal")), $psn_margin);
}
$xls->add_span(array("GRAND TOTAL",4,"R,B"),array($tot_modal,1,"R,B,N"),array($tot_jual,1,"R,B,N"),array($tot_jual-$tot_modal,1,"R,B,N"),array((($tot_jual-$tot_modal)*100)/$tot_jual,1,"R,B,N"));
}
$xls->add_stamp(1, true);
$xls->send("Data Margin Penjualan ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail",'I'=>"Rincian"]);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col col-form-label">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+143
View File
@@ -0,0 +1,143 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/jual_rekap.php
Desc. : PHP - Laporan Rekap Penjualan
Created By : Siau Pheng ([email protected]).
Created Date : May 9th, 2013.
Last Modified : October 4th, 2025.
(c) 2013 - 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$id_sup = Param::Get("SupID", 0);
$id_grup = Param::Get("Grup_InvID", 0);
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$nama_sup = ""; $nama_grup = "";
if ($id_sup>0) {
$db->Query("SELECT Nama_Sup Nama FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
if ($db->Next()) $nama_sup = $db->Row("Nama");
}
if ($id_grup>0 && $id_sup==0) {
$db->Query("SELECT Nama_Grup Nama FROM inv_produk_grup WHERE Grup_InvID='".$id_grup."' LIMIT 1");
if ($db->Next()) $nama_grup = $db->Row("Nama");
}
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tjoin = "";
$tsql = " D.Jumlah<>0";
$tsql .= ($id_grup>0 && $id_sup==0) ? " AND P.Grup_InvID=".$id_grup : "";
if ($id_sup>0) {
$tsql .= " AND U.SupID='".$id_sup."'";
$tjoin .= " LEFT JOIN inv_produk_sup U ON (U.InvID=D.InvID AND U.SupID='".$id_sup."')";
}
$tsql2 = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
// query data laporan
$db->Query("SELECT P.Kode_SKU,P.Nama_Produk,P.Nama_Satuan,D.Qty,D.Jumlah FROM (SELECT InvID,SatuanID,SUM(-Qty) Qty,SUM(-Qty*Harga_Jual) Jumlah FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND NotaID IN (5,6)".$tsql2." GROUP BY InvID, SatuanID) D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID)".$tjoin." WHERE ".$tsql." ORDER BY P.Kode_SKU");
}
if ( $data == "print" ) {
Report_Header("REKAP PENJUALAN", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
$pre->add_field("No.",10,"C");
$pre->add_field("Kode SKU",20,"C");
$pre->add_field("Nama Barang",120,"L");
$pre->add_field("Qty",80,"R","rupiah2");
$pre->add_field("Jumlah",50,"R","rupiah2");
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,5,"L,B"));
if ($id_grup>0 && $id_sup==0) $pre->add_span(array("Grup Barang : ".$nama_grup,5,"L,B"));
$nomor = 0;
while ($db->Next()) {
$pre->add_value(++$nomor, $db->Row("Kode_SKU"), $db->Row("Nama_Produk"), $db->Row("Qty"), $db->Row("Jumlah"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Rekap Penjualan",
'desc'=>"Export Data Rekap Penjualan"
]);
$xls->add_header($_SESSION['__WEB_APP']['REG_NAME']);
$xls->add_header("DATA REKAP PENJUALAN");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No.", 10, "C");
$xls->add_field("Kode SKU", 12, "L");
$xls->add_field("Nama Barang", 80, "L");
$xls->add_field("Qty", 20, "R,N");
$xls->add_field("Jumlah", 20, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
if ($id_sup>0) $xls->add_span(["Nama Supplier : ".$nama_sup,5,"L"]);
if ($id_grup>0 && $id_sup==0) $xls->add_span(["Grup Barang : ".$nama_grup,5,"L"]);
$nomor = 0;
while ($db->Next()) {
$xls->add_value(++$nomor, $db->Row("Kode_SKU"), $db->Row("Nama_Produk"), $db->Row("Qty"), $db->Row("Jumlah"));
}
$xls->add_stamp(1, true);
$xls->send("Data Rekap Penjualan ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"SEMUA GRUP"]);
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
<div class="col"><div class="input-group">'.$tsup.Form_Info("Jika Nama Supplier dipilih, Filter Grup Barang akan diabaikan.").'</div></div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Grup_InvID">Grup Barang</label>
<div class="col">'.$tgrup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+149
View File
@@ -0,0 +1,149 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/kas_keluar.php
Desc. : PHP - Laporan Pengeluaran Kas
Created By : Siau Pheng ([email protected]).
Created Date : May 18th, 2012.
Last Modified : October 18th, 2025.
(c) 2012 - 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$tipe = Param::Get("Tipe", "R"); // R or D
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
if ($tipe=="R") {
$db->Query("SELECT * FROM ((SELECT Tgl_Kas,'Pengeluaran Kas' Ket,SUM(Jumlah) Jumlah FROM gel_kas WHERE Tipe_Kas='O' AND (Tgl_Kas BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY Tgl_Kas) UNION ALL (SELECT Tgl_Bayar Tgl_Kas,'Pembayaran Supplier' Ket,SUM(Total_Bayar) Jumlah FROM inv_beli_lunas WHERE (Tgl_Bayar BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY Tgl_Bayar)) A ORDER BY A.Tgl_Kas");
} else {
$db->Query("SELECT * FROM ((SELECT No_Kas,Tgl_Kas,Ket,Jumlah FROM gel_kas WHERE Tipe_Kas='O' AND (Tgl_Kas BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") UNION ALL (SELECT L.No_Beli No_Kas,L.Tgl_bayar Tgl_Kas,S.Nama_Sup Ket,L.Total_Bayar Jumlah FROM (SELECT * FROM inv_beli_lunas WHERE (Tgl_Bayar BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") L LEFT JOIN para_supplier S ON (S.SupID=L.SupID))) A ORDER BY A.No_Kas");
}
}
if ( $data == "print" ) {
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." PENGELUARAN KAS", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
if ($tipe=="R") {
$pre->add_field("No.",10,"C");
$pre->add_field("Tanggal",30,"C","sqltgl");
$pre->add_field("Keterangan",80,"L");
$pre->add_field("Jumlah",20,"R","rupiah");
$sub_tot = 0; $nomor = 0;
while ($db->Next()) {
$sub_tot += $db->Row("Jumlah");
$pre->add_value(++$nomor, $db->Row("Tgl_Kas"), $db->Row("Ket"), $db->Row("Jumlah"));
}
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B","rupiah"));
} else {
$pre->add_field("No. TX",30,"C");
$pre->add_field("Tanggal",30,"C","sqltgl");
$pre->add_field("Keterangan",150,"L");
$pre->add_field("Jumlah",30,"R","rupiah");
$sub_tot = 0;
while ($db->Next()) {
$sub_tot += $db->Row("Jumlah");
$pre->add_value($db->Row("No_Kas"), $db->Row("Tgl_Kas"), $db->Row("Ket"), $db->Row("Jumlah"));
}
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B","rupiah"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Pengeluaran Kas",
'desc'=>"Export Data Pengeluaran Kas"
]);
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA ".($tipe=="R"?"REKAP":"DETAIL")." PENGELUARAN KAS</b>");
$xls->add_header("Periode : ".$tglheader);
if ($tipe=="R") {
$xls->add_field("No.", 5, "C");
$xls->add_field("Tanggal", 12, "C", "tgl_sql2str");
$xls->add_field("Keterangan", 50, "L");
$xls->add_field("Jumlah", 15, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$sub_tot = 0; $nomor = 0;
while ($db->Next()) {
$sub_tot += $db->Row("Jumlah");
$xls->add_value(++$nomor, $db->Row("Tgl_Kas"), $db->Row("Ket"), $db->Row("Jumlah"));
}
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B,N"));
} else {
$xls->add_field("No. TX", 15, "C");
$xls->add_field("Tanggal", 12, "C", "tgl_sql2str");
$xls->add_field("Keterangan", 50, "L");
$xls->add_field("Jumlah", 15, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$sub_tot = 0;
while ($db->Next()) {
$sub_tot += $db->Row("Jumlah");
$xls->add_value($db->Row("No_Kas"), $db->Row("Tgl_Kas"), $db->Row("Ket"), $db->Row("Jumlah"));
}
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B,N"));
}
$xls->add_stamp(1, true);
$xls->send("Data Pengeluaran Kas ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col col-form-label">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-8 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tgl</label>
<div class="col-sm-8 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+149
View File
@@ -0,0 +1,149 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/kas_terima.php
Desc. : PHP - Laporan Penerimaan Kas
Created By : Siau Pheng ([email protected]).
Created Date : May 18th, 2012.
Last Modified : October 19th, 2025.
(c) 2012 - 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$tipe = Param::Get("Tipe", "R"); // R or D
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
if ($tipe=="R") {
$db->Query("SELECT Tgl_Kas,'Penerimaan Kas' Ket,SUM(Jumlah) Jumlah FROM gel_kas WHERE Tipe_Kas='I' AND (Tgl_Kas BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY Tgl_Kas ORDER BY Tgl_Kas");
} else {
$db->Query("SELECT * FROM gel_kas WHERE Tipe_Kas='I' AND (Tgl_Kas BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." ORDER BY No_Kas");
}
}
if ( $data == "print" ) {
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." PENERIMAAN KAS", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
if ($tipe=="R") {
$pre->add_field("No.",10,"C");
$pre->add_field("Tanggal",30,"C","sqltgl");
$pre->add_field("Keterangan",80,"L");
$pre->add_field("Jumlah",20,"R","rupiah");
$sub_tot = 0; $nomor = 0;
while ($db->Next()) {
$sub_tot += $db->Row("Jumlah");
$pre->add_value(++$nomor, $db->Row("Tgl_Kas"), $db->Row("Ket"), $db->Row("Jumlah"));
}
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B","rupiah"));
} else {
$pre->add_field("No. TX",30,"C");
$pre->add_field("Tanggal",30,"C","sqltgl");
$pre->add_field("Keterangan",150,"L");
$pre->add_field("Jumlah",30,"R","rupiah");
$sub_tot = 0;
while ($db->Next()) {
$sub_tot += $db->Row("Jumlah");
$pre->add_value($db->Row("No_Kas"), $db->Row("Tgl_Kas"), $db->Row("Ket"), $db->Row("Jumlah"));
}
$pre->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B","rupiah"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Penerimaan Kas",
'desc'=>"Export Data Penerimaan Kas"
]);
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA ".($tipe=="R"?"REKAP":"DETAIL")." PENERIMAAN KAS</b>");
$xls->add_header("Periode : ".$tglheader);
if ($tipe=="R") {
$xls->add_field("No.", 5, "C");
$xls->add_field("Tanggal", 12, "C", "tgl_sql2str");
$xls->add_field("Keterangan", 50, "L");
$xls->add_field("Jumlah", 15, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$sub_tot = 0; $nomor = 0;
while ($db->Next()) {
$sub_tot += $db->Row("Jumlah");
$xls->add_value(++$nomor, $db->Row("Tgl_Kas"), $db->Row("Ket"), $db->Row("Jumlah"));
}
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B,N"));
} else {
$xls->add_field("No. TX", 15, "C");
$xls->add_field("Tanggal", 12, "C", "tgl_sql2str");
$xls->add_field("Keterangan", 50, "L");
$xls->add_field("Jumlah", 15, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$sub_tot = 0;
while ($db->Next()) {
$sub_tot += $db->Row("Jumlah");
$xls->add_value($db->Row("No_Kas"), $db->Row("Tgl_Kas"), $db->Row("Ket"), $db->Row("Jumlah"));
}
$xls->add_span(array("GRAND TOTAL",3,"R,B"),array($sub_tot,1,"R,B,N"));
}
$xls->add_stamp(1, true);
$xls->send("Data Penerimaan Kas ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col col-form-label">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-8 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tgl</label>
<div class="col-sm-8 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+170
View File
@@ -0,0 +1,170 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/label.php
Desc. : PHP - Cetak Label Harga Barang
Created By : Siau Pheng ([email protected]).
Created Date : September 13th, 2014.
Last Modified : October 5th, 2025.
(c) 2014 - 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\Web\Table;
use siaupheng\fonia3\Web\Form;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode_detail = Param::Get("mode_detail");
$id_cab = Param::Get("CabID", 0);
$id_grup = Param::Get("Grup_InvID", 0);
if ( $data == "master" ) {
} else if ( $data == "tabel-detail" ) {
if ($mode_detail == "empty") {
$db->Query("TRUNCATE rep_label");
} else if ($mode_detail == "update") {
$db->Query("UPDATE rep_label SET Nama_Produk='".$db->SafeSQL(Param::Get("Nama_Produk"))."' WHERE ID='".Param::Get("ID",0)."'");
} else if ($mode_detail == "delete") {
$db->Query("DELETE FROM rep_label WHERE ID='".Param::Get("ID",0)."'");
} else if ($mode_detail == "simpan-produk") {
$alist = Param::Get_ArrayCBOX();
foreach ($alist as $_key => $_val) {
if ($_val=="Y") {
$_adata = explode(":", $_key); $arec = [];
$db->Query("SELECT LEFT(P.Nama_Produk,25) Nama_Produk,P.Harga_Jual FROM vi_inv_produk P WHERE P.InvID='".$_adata[0]."' AND P.SatuanID='".$_adata[1]."'");
if ($db->Next()) $arec = $db->AllRow();
if (count($arec) > 0) {
$db->Query("INSERT INTO rep_label SET Nama_Produk='".$db->SafeSQL($arec['Nama_Produk'])."',Harga_Jual='".$arec['Harga_Jual']."',UserID='".user_id()."'");
}
}
}
} else if ($mode_detail == "simpan-grup") {
if ($id_grup > 0) {
$db->Query("INSERT INTO rep_label SELECT NULL,LEFT(P.Nama_Produk,25),P.Harga_Jual,'".user_id()."' FROM vi_inv_produk P WHERE P.Aktif=1 AND P.Grup_InvID='".$id_grup."' AND P.Harga_Jual>0");
}
}
$obj = new Table($db);
$obj->set_query("SELECT * FROM rep_label");
$obj->add_field("ID", "ID", "hid");
$obj->add_field("Nama_Produk", "Nama Barang", "awr");
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah");
$obj->set_field_order("ID", "A");
$obj->add_row_btn("clipboard", "Ubah", "RepoLabelJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "RepoLabelJS.detail_hapus", "UserID", user_id());
$obj->set_func_btn("RepoLabelJS.produk_brow", '<i class="bi-plus-lg me-1"></i> Item');
$obj->set_func_btn("RepoLabelJS.grup_brow", '<i class="bi-table me-1"></i> Grup');
$obj->set_func_navi("RepoLabelJS.data_query('tabel-detail')");
$ajson[] = $obj->json_table("divDetailTabel");
} else if ( $data == "brow-produk" ) {
$tcari = trim(Param::Get("Cari_Produk"));
$tsql = ($tcari=="") ? "" : " AND CONCAT(P.Kode_Barcode,P.Nama_Produk) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("vi_inv_produk P", "P.*,CONCAT(P.InvID,':',P.SatuanID) ID2", "P.Harga_Jual>0 AND P.Aktif=1".$tsql);
$obj->add_field("ID2", "ID", "hid");
$obj->add_field("Kode_SKU", "SKU", "c");
$obj->add_field("Nama_Produk", "Nama Barang", "awr");
$obj->add_field("Nama_Satuan", "Satuan", "l");
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah");
$obj->set_field_order("Kode_SKU", "A");
$obj->add_row_checkbox("ID2", "Pilih", ["Y","N"]);
$obj->set_func_navi("RepoLabelJS.data_query('brow-produk')");
$ajson[] = $obj->db_table("divBrowProduk", 8);
} else if ( $data == "brow-grup" ) {
$tcari = trim(Param::Get("Cari_Grup"));
$tsql = ($tcari=="") ? "" : " AND CONCAT(P.Kode_Grup,P.Nama_Grup) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("inv_produk_grup P", "P.*", "P.Aktif=1".$tsql);
$obj->add_field("Grup_InvID", "ID", "hid");
$obj->add_field("Kode_Grup", "Kode", "c");
$obj->add_field("Nama_Grup", "Nama Grup Barang", "awr");
$obj->set_field_order("Kode_Grup", "A");
$obj->add_row_btn("save", "Pilih", "RepoLabelJS.grup_select");
$obj->set_func_navi("RepoLabelJS.data_query('brow-grup')");
$ajson[] = $obj->db_table("divBrowGrup");
} else if ($data == "detail-tx") {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['ID'=>Param::Get("ID",0), 'Nama_Produk'=>""];
$db->Query("SELECT * FROM rep_label WHERE ID='".$atabel['ID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
$form = new Form($db);
$tproduk = $form->textbox("_", "Nama_Produk", $atabel['Nama_Produk'], true, false, "text");
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Nama_Produk">Nama Barang</label>
<div class="col">'.$tproduk.'</div>
</div>
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >';
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-printer me-2"></i>Cetak Label Harga</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
<button class="btn btn-secondary mb-1 ms-2" id="butPrint" type="button"><i class="bi-printer me-2"></i>Cetak</button>
<button class="btn btn-secondary mb-1 ms-2" id="butPreview" type="button"><i class="bi-display me-2"></i>Pratinjau</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
if ( $data == "print" ) {
$db->Query("SELECT * FROM rep_label ORDER BY ID");
if ($db->RecordCount()==0) return false;
$_head = '<table width="100%"><tr>';
$_line = '<td class="center" style="font-size:16pt;height:100px;width:65mm;padding:10px;border: dashed 1px #000;font-family:verdana;"><div style="font-size:18pt;height:50px;padding-bottom:10px;">%s</div>%s</td>';
$ni = $nb = 1; $cont = "";
while ($db->Next()) {
if ($ni == 4) {
if ($nb == 8) {
$cont .= '</tr></table><p id="linebreak">................ page break ................</p><p id="pagebreak">&nbsp;</p>' . $_head;
$nb = 0;
} else {
$cont .= '</tr><tr>';
}
$ni = 1;
$nb++;
}
$cont .= sprintf($_line, $db->Row("Nama_Produk"), "Rp. ".rupiah($db->Row("Harga_Jual")));
$ni++;
}
if ($ni < 4) {
while ($ni < 4) {
$cont .= sprintf($_line, "", "");
$ni++;
}
}
echo '<p id="autopage">&nbsp;</p>' . $_head . $cont . "</tr></table>";
}
send_json($ajson);
?>
+147
View File
@@ -0,0 +1,147 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/mutasi_cabang.php
Desc. : PHP - Laporan Mutasi Stok Cabang
Created By : Siau Pheng ([email protected]).
Created Date : July 16th, 2011.
Last Modified : December 13th, 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab1 = Param::Get("Cab1ID", $_SESSION['__APP_INV']['CABANGID']);
$id_cab2 = Param::Get("Cab2ID", $_SESSION['__APP_INV']['CABANGID']);
if (in_array($data, ["print","export"])) {
$tipe = Param::Get("Tipe", "R"); // R or D
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$nama_cab1 = "Semua Cabang"; $nama_cab2 = "Semua Cabang";
if ($id_cab1>0) {
$db->Query("SELECT Nama_Cab FROM para_cabang WHERE CabID='".$id_cab1."' LIMIT 1");
if ($db->Next()) $nama_cab1 = $db->Row("Nama_Cab");
}
if ($id_cab2>0) {
$db->Query("SELECT Nama_Cab FROM para_cabang WHERE CabID='".$id_cab2."' LIMIT 1");
if ($db->Next()) $nama_cab2 = $db->Row("Nama_Cab");
}
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_cab1==0) ? "" : " AND Dari_CabID='".$id_cab1."'";
$tsql .= ($id_cab2==0) ? "" : " AND Ke_CabID='".$id_cab2."'";
if ($tipe=="R") {
$db->Query("SELECT M.*,C1.Nama_Cab Nama1,C2.Nama_Cab Nama2 FROM (SELECT * FROM inv_mutasi WHERE (Tgl_Mutasi BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") M LEFT JOIN para_cabang C1 ON (M.Dari_CabID=C1.CabID) LEFT JOIN para_cabang C2 ON (M.Ke_CabID=C2.CabID) ORDER BY M.Tgl_Mutasi,M.No_Mutasi");
} else {
}
}
if ( $data == "print" ) {
Report_Header(($tipe=="R"?"REKAP":"DETAIL")." MUTASI STOK CABANG", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
if ($tipe=="R") {
$pre->add_field("Tgl. Mutasi",30,"C","sqltgl");
$pre->add_field("No. Mutasi",30,"C");
$pre->add_field("Dari Cabang",20,"L");
$pre->add_field("Ke Cabang",20,"L");
$pre->add_field("Total",20,"R","rupiah");
$pre->add_field("Catatan",50,"L");
if ($id_cab1>0) $pre->add_span(array("Dari Cabang : ".$nama_cab1,6,"L,B"));
if ($id_cab2>0) $pre->add_span(array("Ke Cabang : ".$nama_cab2,6,"L,B"));
$tot_mutasi = 0;
while ($db->Next()) {
$tot_mutasi += $db->Row("Total_Mutasi");
$pre->add_value($db->Row("Tgl_Mutasi"), $db->Row("No_Mutasi"), $db->Row("Nama1"), $db->Row("Nama2"), $db->Row("Total_Mutasi"), $db->Row("Catatan"));
}
$pre->add_span(array("GRAND TOTAL",4,"R,B"),array($tot_mutasi,1,"R,B","rupiah"),["",1,"L,B"]);
} else {
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Mutasi Stok Cabang",
'desc'=>"Export Data Mutasi Stok Cabang"
]);
if ($tipe=="R") {
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA REKAP MUTASI STOK CABANG</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("Tgl. Mutasi", 12, "C", "sqltgl");
$xls->add_field("No. Mutasi", 15, "C");
$xls->add_field("Dari Cabang", 20, "L");
$xls->add_field("Ke Cabang", 20, "L");
$xls->add_field("Total", 15, "R,N");
$xls->add_field("Catatan", 25, "L");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$tot_mutasi = 0;
while ($db->Next()) {
$tot_mutasi += $db->Row("Total_Mutasi");
$xls->add_value($db->Row("Tgl_Mutasi"), $db->Row("No_Mutasi"), $db->Row("Nama1"), $db->Row("Nama2"), $db->Row("Total_Mutasi"), $db->Row("Catatan"));
}
$xls->add_span(array("GRAND TOTAL",4,"R,B"),array($tot_mutasi,1,"R,B,N"),["",1,"L,B"]);
} else {
}
$xls->add_stamp(1, true);
$xls->send("Data Mutasi Stok Cabang ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$tcab1 = $form->option_db("_", "Cab1ID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tcab2 = $form->option_db("_", "Cab2ID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Cab1ID">Dari Cabang</label>
<div class="col">'.$tcab1.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Cab2ID">Ke Cabang</label>
<div class="col">'.$tcab2.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col-sm-6 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+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") {}
?>
+113
View File
@@ -0,0 +1,113 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/opname.php
Desc. : PHP - Laporan Opname Stok Barang
Created By : Siau Pheng ([email protected]).
Created Date : March 2nd, 2014.
Last Modified : October 4th, 2025.
(c) 2012 - 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$id_kasir = Param::Get("KasirID", 0);
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
$tsql .= ($id_kasir==0) ? "" : " AND UserID='".$id_kasir."'";
$db->Query("SELECT D.*,P.Nama_Produk,P.Nama_Satuan,O.Nama Nama_Kasir FROM (SELECT InvID,SatuanID,-Qty Qty,UserID FROM inv_detail WHERE NotaID=1 AND (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") D LEFT JOIN vi_inv_produk P ON (P.InvID=D.InvID AND P.SatuanID=D.SatuanID) LEFT JOIN app_operator O ON (D.UserID=O.UserID) ORDER BY P.Nama_Produk");
}
if ( $data == "print" ) {
Report_Header("OPNAME STOK BARANG", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
$pre->add_field("No.",10,"C");
$pre->add_field("Nama Barang",80,"L");
$pre->add_field("Qty",20,"R");
$pre->add_field("Satuan",30,"L");
$pre->add_field("Operator",30,"L");
$nomor = 0;
while ($db->Next()) {
$pre->add_value(++$nomor, $db->Row("Nama_Produk"), ($db->Row("Qty")>0?"+":"").rupiah2($db->Row("Qty")), $db->Row("Nama_Satuan"), $db->Row("Nama_Kasir"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Opname Stok Barang",
'desc'=>"Export Data Opname Stok Barang"
]);
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA OPNAME STOK BARANG</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No.", 5, "C");
$xls->add_field("Nama Barang", 50, "L");
$xls->add_field("Qty", 15, "R,N");
$xls->add_field("Satuan", 10, "L");
$xls->add_field("Nama Operator", 20, "L");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$nomor = 0;
while ($db->Next()) {
$pre->add_value(++$nomor, $db->Row("Nama_Produk"), $db->Row("Qty"), $db->Row("Nama_Satuan"), $db->Row("Nama_Kasir"));
}
$xls->add_stamp(1, true);
$xls->send("Data Opname Stok Barang ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tkasir = $form->option_db("_", "KasirID", $id_kasir, true, false, "app_operator", ["UserID","Nama"], "Aktif=1 ".((user_id()==1)?"":"AND UserID>1"), [0,"SEMUA OPERATOR"]);
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="KasirID">Nama Operator</label>
<div class="col">'.$tkasir.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-8 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tgl</label>
<div class="col-sm-8 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+163
View File
@@ -0,0 +1,163 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/rekap_harian.php
Desc. : PHP - Laporan Rekap Total Harian
Created By : Siau Pheng ([email protected]).
Created Date : December 25th, 2013.
Last Modified : December 14th, 2025.
(c) 2013 - 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
if ($tglfrom > tgl_dmy()) return false;
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
$db->Query("DELETE FROM rep_rekap_harian WHERE UserID=".user_id());
// insert jual dan masuk pos
$db->Query("INSERT INTO rep_rekap_harian (Tanggal,Jual,Masuk,UserID) SELECT Tgl_Jual,SUM(Total_Jual-Total_Diskon) Jual, SUM(Total_Jual-Total_Diskon) Masuk,".user_id()." FROM inv_jual WHERE (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY Tgl_Jual");
// insert tgl sesuai range
$dtgl = tgl_sql2str($tglfrom);
while ($dtgl<=tgl_sql2str($tglto)) {
fastInsert("rep_rekap_harian", ['Tanggal'=>tgl_sql2str($dtgl), 'UserID'=>user_id()]);
$stok = fastQuery("SELECT SUM(D.Stok*P.Harga_Pokok) Stok FROM (SELECT * FROM inv_detail WHERE Tgl_Ref<='".tgl_sql2str($dtgl)."'".$tsql.") D LEFT JOIN inv_produk P ON (P.InvID=D.InvID)", 0);
fastUpdate("rep_rekap_harian", ['Stok'=>$stok,'Tanggal'=>tgl_sql2str($dtgl),'UserID'=>user_id()], ["Tanggal","UserID"]);
$dtgl = tgl_operasi($dtgl, 1);
}
// insert beli
$db->Query("SELECT Tgl_Beli, SUM(Total_Hutang) Beli FROM inv_beli WHERE (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY Tgl_Beli");
while ($db->Next()) {
fastUpdate("rep_rekap_harian", ['Beli'=>$db->Row("Beli"),'Tanggal'=>$db->Row("Tgl_Beli"),'UserID'=>user_id()], ["Tanggal","UserID"]);
}
// insert keluar / lunas beli
$db->Query("SELECT Tgl_Bayar, SUM(Total_Bayar-Total_Potong) Keluar FROM inv_beli_lunas WHERE (Tgl_Bayar BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY Tgl_Bayar");
while ($db->Next()) {
fastUpdate("rep_rekap_harian", ['Keluar'=>$db->Row("Keluar"),'Tanggal'=>$db->Row("Tgl_Bayar"),'UserID'=>user_id()], ["Tanggal","UserID"]);
}
// insert modal
$db->Query("SELECT Tgl_Ref, SUM(-Qty*Harga_Beli) Modal FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND NotaID IN (5,6)".$tsql." GROUP BY Tgl_Ref");
while ($db->Next()) {
fastUpdate("rep_rekap_harian", ['Modal'=>$db->Row("Modal"),'Tanggal'=>$db->Row("Tgl_Ref"),'UserID'=>user_id()], ["Tanggal","UserID"]);
}
// update margin dan laba
$db->Query("UPDATE rep_rekap_harian SET Margin=Jual-Modal,Laba=Margin-Biaya WHERE UserID=".user_id());
$db->Query("SELECT * FROM rep_rekap_harian WHERE UserID=".user_id()." ORDER BY Tanggal ASC");
}
if ( $data == "print" ) {
Report_Header("REKAP TOTAL HARIAN", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
$pre->add_field("Tanggal",30,"C","sqltgl");
$pre->add_field("Stok Barang",20,"R","rupiah");
$pre->add_field("Penerimaan",20,"R","rupiah");
$pre->add_field("Penjualan",20,"R","rupiah");
$pre->add_field("Modal Penjualan",20,"R","rupiah");
$pre->add_field("Pembelian",20,"R","rupiah");
$pre->add_field("Pembayaran",20,"R","rupiah");
$pre->add_field("Margin",20,"R","rupiah");
$pre->add_field("Pengeluaran Biaya",20,"R","rupiah");
$pre->add_field("Laba Bersih",20,"R","rupiah");
$t_masuk = 0; $t_jual = 0; $t_modal = 0; $t_beli = 0; $t_keluar = 0; $t_margin = 0; $t_biaya = 0; $t_laba = 0;
while ($db->Next()) {
$t_masuk += $db->Row("Masuk");
$t_jual += $db->Row("Jual");
$t_modal += $db->Row("Modal");
$t_beli += $db->Row("Beli");
$t_keluar += $db->Row("Keluar");
$t_margin += $db->Row("Margin");
$t_biaya += $db->Row("Biaya");
$t_laba += $db->Row("Laba");
$pre->add_value($db->Row("Tanggal"), $db->Row("Stok"), $db->Row("Masuk"), $db->Row("Jual"), $db->Row("Modal"), $db->Row("Beli"), $db->Row("Keluar"), $db->Row("Margin"), $db->Row("Biaya"), $db->Row("Laba"));
}
$pre->add_span(array("TOTAL",2,"R,B"),array($t_masuk,1,"R,B","rupiah"),array($t_jual,1,"R,B","rupiah"),array($t_modal,1,"R,B","rupiah"),array($t_beli,1,"R,B","rupiah"),array($t_keluar,1,"R,B","rupiah"),array($t_margin,1,"R,B","rupiah"),array($t_biaya,1,"R,B","rupiah"),array($t_laba,1,"R,B","rupiah"));
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Rekap Total Harian",
'desc'=>"Export Data Rekap Total Harian"
]);
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA REKAP TOTAL HARIAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("Tanggal", 12, "C", "sqltgl");
$xls->add_field("Stok Barang", 15, "R,N");
$xls->add_field("Penerimaan", 15, "R,N");
$xls->add_field("Penjualan", 15, "R,N");
$xls->add_field("Modal Penjualan", 15, "R,N");
$xls->add_field("Pembelian", 15, "R,N");
$xls->add_field("Pembayaran", 15, "R,N");
$xls->add_field("Margin", 15, "R,N");
$xls->add_field("Pengeluaran Biaya", 15, "R,N");
$xls->add_field("Laba Bersih", 15, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$t_masuk = 0; $t_jual = 0; $t_modal = 0; $t_beli = 0; $t_keluar = 0; $t_margin = 0; $t_biaya = 0; $t_laba = 0;
while ($db->Next()) {
$t_masuk += $db->Row("Masuk");
$t_jual += $db->Row("Jual");
$t_modal += $db->Row("Modal");
$t_beli += $db->Row("Beli");
$t_keluar += $db->Row("Keluar");
$t_margin += $db->Row("Margin");
$t_biaya += $db->Row("Biaya");
$t_laba += $db->Row("Laba");
$xls->add_value($db->Row("Tanggal"), $db->Row("Stok"), $db->Row("Masuk"), $db->Row("Jual"), $db->Row("Modal"), $db->Row("Beli"), $db->Row("Keluar"), $db->Row("Margin"), $db->Row("Biaya"), $db->Row("Laba"));
}
$xls->add_span(array("TOTAL",2,"R,B"),array($t_masuk,1,"R,B,N"),array($t_jual,1,"R,B,N"),array($t_modal,1,"R,B,N"),array($t_beli,1,"R,B,N"),array($t_keluar,1,"R,B,N"),array($t_margin,1,"R,B,N"),array($t_biaya,1,"R,B,N"),array($t_laba,1,"R,B,N"));
$xls->add_stamp(1, true);
$xls->send("Data Rekap Total Harian ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-8 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tgl</label>
<div class="col-sm-8 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+159
View File
@@ -0,0 +1,159 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/rekap_margin.php
Desc. : PHP - Laporan Rekap Margin
Created By : Siau Pheng ([email protected]).
Created Date : January 5th, 2013.
Last Modified : December 14th, 2025.
(c) 2013 - 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
if ($tglfrom > tgl_dmy()) return false;
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
$db->Query("DELETE FROM rep_rekap_margin WHERE UserID=".user_id());
// insert jual dan terima pos
$db->Query("INSERT INTO rep_rekap_margin (Tanggal,Jual,Masuk,UserID) SELECT Tgl_Jual,SUM(Total_Jual-Total_Diskon) Jual, SUM(Total_Jual-Total_Diskon) Masuk,".user_id()." FROM inv_jual WHERE (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY Tgl_Jual");
// insert tgl sesuai range
$dtgl = tgl_sql2str($tglfrom);
while ($dtgl<>tgl_sql2str($tglto)) {
$db->Query("INSERT IGNORE INTO rep_rekap_margin SET Tanggal='".tgl_sql2str($dtgl)."',UserID=".user_id());
$dtgl = tgl_operasi($dtgl, 1);
}
// insert beli
$db->Query("SELECT Tgl_Beli, SUM(Total_Hutang) Beli FROM inv_beli WHERE (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY Tgl_Beli");
while ($db->Next()) {
fastUpdate("rep_rekap_margin", ['Beli'=>$db->Row("Beli"),'Tanggal'=>$db->Row("Tgl_Beli"),'UserID'=>user_id()], ["Tanggal",'UserID']);
}
// insert keluar / lunas beli
$db->Query("SELECT Tgl_Bayar, SUM(Total_Bayar-Total_Potong) Keluar FROM inv_beli_lunas WHERE (Tgl_Bayar BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY Tgl_Bayar");
while ($db->Next()) {
fastUpdate("rep_rekap_margin", ['Keluar'=>$db->Row("Keluar"),'Tanggal'=>$db->Row("Tgl_Bayar"),'UserID'=>user_id()], ["Tanggal","UserID"]);
}
// insert modal
$db->Query("SELECT Tgl_Ref, SUM(-Qty*Harga_Beli) Modal FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND NotaID IN (5,6)".$tsql." GROUP BY Tgl_Ref");
while ($db->Next()) {
fastUpdate("rep_rekap_margin", ['Modal'=>$db->Row("Modal"),'Tanggal'=>$db->Row("Tgl_Ref"),'UserID'=>user_id()], ["Tanggal","UserID"]);
}
// update margin dan persen
$db->Query("UPDATE rep_rekap_margin SET Margin=Jual-Modal,Persen=(Margin/Jual)*100 WHERE UserID=".user_id());
$db->Query("SELECT * FROM rep_rekap_margin WHERE UserID=".user_id()." ORDER BY Tanggal ASC");
}
if ( $data == "print" ) {
Report_Header("REKAP MARGIN HARIAN", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
$pre->add_field("Hari",10,"L");
$pre->add_field("Tanggal",30,"C","sqltgl");
$pre->add_field("Penjualan",20,"R","rupiah");
$pre->add_field("Pembelian",20,"R","rupiah");
$pre->add_field("Modal",20,"R","rupiah");
$pre->add_field("Penerimaan",20,"R","rupiah");
$pre->add_field("Pengeluaran",20,"R","rupiah");
$pre->add_field("Margin",20,"R","rupiah");
$pre->add_field("%",10,"R","rupiah2");
$item = 0; $tot_j = 0; $tot_b = 0; $tot_p = 0; $tot_t = 0; $tot_k = 0; $tot_mar = 0; $tot_psn = 0;
while ($db->Next()) {
$item++;
$tot_j += $db->Row("Jual");
$tot_b += $db->Row("Beli");
$tot_m += $db->Row("Masuk");
$tot_k += $db->Row("Keluar");
$tot_p += $db->Row("Modal");
$tot_mar += $db->Row("Margin");
$pre->add_value(tgl_hari(tgl_sql2str($db->Row("Tanggal"))), $db->Row("Tanggal"), $db->Row("Jual"), $db->Row("Beli"), $db->Row("Modal"), $db->Row("Masuk"), $db->Row("Keluar"), $db->Row("Margin"), $db->Row("Persen"));
}
$pre->add_span(array("JUMLAH",2,"R,B"),array($tot_j,1,"R,B","rupiah"),array($tot_b,1,"R,B","rupiah"),array($tot_p,1,"R,B","rupiah"),array($tot_m,1,"R,B","rupiah"),array($tot_k,1,"R,B","rupiah"),array($tot_mar,1,"R,B","rupiah"),array(($tot_mar/$tot_j)*100,1,"R,B","rupiah2"));
$pre->add_span(array("RATA-RATA",2,"R,B"),array($tot_j/$item,1,"R,B","rupiah"),array($tot_b/$item,1,"R,B","rupiah"),array($tot_p/$item,1,"R,B","rupiah"),array($tot_m/$item,1,"R,B","rupiah"),array($tot_k/$item,1,"R,B","rupiah"),array($tot_mar/$item,1,"R,B","rupiah"),array(($tot_mar/$tot_j)*100/$item,1,"R,B","rupiah2"));
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Rekap Margin Harian",
'desc'=>"Export Data Rekap Margin Harian"
]);
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA REKAP MARGIN HARIAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("Hari", 10, "L");
$xls->add_field("Tanggal", 12, "C", "sqltgl");
$xls->add_field("Penjualan", 15, "R,N");
$xls->add_field("Pembelian", 15, "R,N");
$xls->add_field("Modal", 15, "R,N");
$xls->add_field("Penerimaan", 15, "R,N");
$xls->add_field("Pengeluaran", 15, "R,N");
$xls->add_field("Margin", 15, "R,N");
$xls->add_field("%", 8, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$item = 0; $tot_j = 0; $tot_b = 0; $tot_p = 0; $tot_t = 0; $tot_k = 0; $tot_mar = 0; $tot_psn = 0;
while ($db->Next()) {
$item++;
$tot_j += $db->Row("Jual");
$tot_b += $db->Row("Beli");
$tot_m += $db->Row("Masuk");
$tot_k += $db->Row("Keluar");
$tot_p += $db->Row("Modal");
$tot_mar += $db->Row("Margin");
$xls->add_value(tgl_hari(tgl_sql2str($db->Row("Tanggal"))), $db->Row("Tanggal"), $db->Row("Jual"), $db->Row("Beli"), $db->Row("Modal"), $db->Row("Masuk"), $db->Row("Keluar"), $db->Row("Margin"), $db->Row("Persen"));
}
$xls->add_span(array("JUMLAH",2,"R,B"),array($tot_j,1,"R,B,N"),array($tot_b,1,"R,B,N"),array($tot_p,1,"R,B,N"),array($tot_m,1,"R,B,N"),array($tot_k,1,"R,B,N"),array($tot_mar,1,"R,B,N"),array(($tot_mar/$tot_j)*100,1,"R,B,N"));
$xls->add_span(array("RATA-RATA",2,"R,B"),array($tot_j/$item,1,"R,B,N"),array($tot_b/$item,1,"R,B,N"),array($tot_p/$item,1,"R,B,N"),array($tot_m/$item,1,"R,B,N"),array($tot_k/$item,1,"R,B,N"),array($tot_mar/$item,1,"R,B,N"),array(($tot_mar/$tot_j)*100/$item,1,"R,B,N"));
$xls->add_stamp(1, true);
$xls->send("Data Rekap Margin Harian ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-8 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tgl</label>
<div class="col-sm-8 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+124
View File
@@ -0,0 +1,124 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/rekap_modal.php
Desc. : PHP - Laporan Rekap Modal
Created By : Siau Pheng ([email protected]).
Created Date : January 19th, 2013.
Last Modified : December 13th, 2025.
(c) 2013 - 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
if ($tglfrom > tgl_dmy()) return false;
// generate report header
$tglheader = $tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
$db->Query("DELETE FROM rep_rekap_modal WHERE UserID='".user_id()."'");
$saldo = 0;
// insert tgl sesuai range
$dtgl = tgl_sql2str($tglfrom);
while ($dtgl<=tgl_sql2str($tglto)) {
$stok = 0; $piut = 0; $huta = 0;
$db->Query("SELECT SUM(D.Stok*P.Harga_Pokok) Stok FROM (SELECT * FROM inv_detail WHERE Tgl_Ref<='".tgl_sql2str($dtgl)."'".$tsql.") D LEFT JOIN inv_produk P ON (P.InvID=D.InvID)");
if ($db->Next()) $stok = $db->RowFloat("Stok", 0);
$db->Query("SELECT SUM(Total_Jual-Total_Diskon-Total_Bayar-Total_Potong) Piutang FROM inv_jual WHERE Tgl_Jual<='".tgl_sql2str($dtgl)."' AND Tgl_Lunas>'".tgl_sql2str($dtgl)."'".$tsql);
if ($db->Next()) $piut = $db->RowFloat("Piutang", 0);
$db->Query("SELECT SUM(Total_Hutang) Hutang FROM inv_beli WHERE Tgl_Beli<='".tgl_sql2str($dtgl)."' AND (Lunas=0 OR (Lunas=1 AND Tgl_Lunas>'".tgl_sql2str($dtgl)."'))".$tsql);
if ($db->Next()) $huta = $db->RowFloat("Hutang", 0);
$db->Query("INSERT IGNORE INTO rep_rekap_modal SET Tanggal='".tgl_sql2str($dtgl)."',Stok='".$stok."',Piutang=".$piut.",Hutang=".$huta.",Jumlah=Stok+Piutang-Hutang,UserID=".user_id());
$dtgl = tgl_operasi($dtgl, 1);
}
$db->Query("SELECT * FROM rep_rekap_modal WHERE UserID=".user_id()." ORDER BY Tanggal ASC");
}
if ( $data == "print" ) {
Report_Header("REKAP MODAL HARIAN", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
$pre->add_field("Hari",10,"L");
$pre->add_field("Tanggal",30,"C","sqltgl");
$pre->add_field("Stok Barang",20,"R","rupiah");
$pre->add_field("Piutang",20,"R","rupiah");
$pre->add_field("Hutang",20,"R","rupiah");
$pre->add_field("Jumlah",20,"R","rupiah");
while ($db->Next()) {
$pre->add_value(tgl_hari(tgl_sql2str($db->Row("Tanggal"))), $db->Row("Tanggal"), $db->Row("Stok"), $db->Row("Piutang"), $db->Row("Hutang"), $db->Row("Jumlah"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Rekap Modal Harian",
'desc'=>"Export Data Rekap Modal Harian"
]);
$xls->add_header("<b>".$_SESSION['__WEB_APP']['REG_NAME']."</b>");
$xls->add_header("<b>DATA REKAP MODAL HARIAN</b>");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("Hari", 10, "L");
$xls->add_field("Tanggal", 12, "C", "sqltgl");
$xls->add_field("Stok Barang", 15, "R,N");
$xls->add_field("Piutang", 15, "R,N");
$xls->add_field("Hutang", 15, "R,N");
$xls->add_field("Jumlah", 15, "R,N");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
while ($db->Next()) {
$xls->add_value(tgl_hari(tgl_sql2str($db->Row("Tanggal"))), $db->Row("Tanggal"), $db->Row("Stok"), $db->Row("Piutang"), $db->Row("Hutang"), $db->Row("Jumlah"));
}
$xls->add_stamp(1, true);
$xls->send("Data Rekap Modal Harian ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col-sm-8 col-lg-5">'.$tfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_To">Sampai Tgl</label>
<div class="col-sm-8 col-lg-5">'.$tto.'</div>
</div>';
}
?>
+170
View File
@@ -0,0 +1,170 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/stok_akhir.php
Desc. : PHP - Laporan Stok Akhir Barang
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : January 24th, 2011.
Last Modified : October 1st, 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\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$id_sup = Param::Get("SupID", 0);
$id_grup = Param::Get("Grup_InvID", 0);
$tgl = Param::Get("Tanggal");
$m_urut = Param::Get("Urut", "B");
$is_harga = Param::Get("Harga", "Y");
$is_min = Param::Get("Min_Stok", "N");
$min_qty = Param::Get("Min_Qty", 0);
$nama_sup = ""; $nama_grup = "";
if ($id_sup > 0) {
$db->Query("SELECT CONCAT(Nama_Sup,' (',Kode_Sup,')') Nama FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
if ($db->Next()) $nama_sup = $db->Row("Nama");
}
if ($id_grup > 0) {
$db->Query("SELECT Nama_Grup Nama FROM inv_produk_grup WHERE Grup_InvID='".$id_grup."' LIMIT 1");
if ($db->Next()) $nama_grup = $db->Row("Nama");
}
// generate report header
$tglheader = $tgl;
$tgl = tgl_sql2str($tgl);
$tsql1 = ($id_sup==0) ? "" : " LEFT JOIN inv_produk_sup S ON (D.InvID=S.InvID)";
$tsql2 = ($id_sup==0) ? "" : " AND S.SupID='".$id_sup."'";
$tsql2 .= ($id_grup==0) ? "" : " AND P.Grup_InvID='".$id_grup."'";
$tsql2 .= ($is_min=="N") ? "" : " AND D.Stok<='".$min_qty."'";
$tsql3 = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
$torder = ($m_urut=="B") ? " P.Nama_Produk" : " Total";
// query data laporan
$db->Query("SELECT P.Nama_Produk,P.Satuan_Normal,P.Satuan_Stok,D.Stok Jumlah,P.Harga_Pokok,D.Stok*P.Harga_Pokok Total,P.Qty Kali FROM (SELECT InvID,SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".$tgl."'".$tsql3." GROUP BY InvID) D LEFT JOIN vi_inv_produk2 P ON (P.InvID=D.InvID) ".$tsql1." WHERE (NOT (D.Stok=0 AND P.Aktif=0)) AND (P.InvID IS NOT NULL)".$tsql2." ORDER BY".$torder);
}
if ( $data == "print" ) {
Report_Header("STOK AKHIR BARANG", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
$pre->add_field("No.",10,"C");
$pre->add_field("Nama Barang",150,"L");
$pre->add_field("Stok",80,"R","rupiah");
$nkol = 3;
if ($is_harga=="Y") {
$pre->add_field("Harga",50,"R","rupiah");
$pre->add_field("Total",50,"R","rupiah");
$nkol = 5;
}
if ($id_sup>0) $pre->add_span(array("Nama Supplier : ".$nama_sup,$nkol,"L,B"));
if ($id_grup>0) $pre->add_span(array("Grup Barang : ".$nama_grup,$nkol,"L,B"));
$tot_stok = 0; $nomor = 0;
while ($db->Next()) {
$tot_stok += $db->Row("Total");
$_row = array(++$nomor, $db->Row("Nama_Produk"), Format_Stok($db->Row("Jumlah",0),$db->Row("Kali",0),$db->Row("Satuan_Normal"),$db->Row("Satuan_Stok")));
if ($is_harga=="Y") $_row[] = $db->Row("Harga_Pokok"); $_row[] = $db->Row("Total");
$pre->add_value($_row);
}
if ($is_harga=="Y") $pre->add_span(array("TOTAL",4,"R,B"),array($tot_stok,1,"R,B","rupiah"));
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Stok Akhir Barang",
'desc'=>"Export Data Stok Akhir Barang"
]);
$xls->add_header($_SESSION['__WEB_APP']['REG_NAME']);
$xls->add_header("DATA STOK AKHIR BARANG");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("No.", 10, "C");
$xls->add_field("Nama Barang", 60, "L");
$xls->add_field("Stok", 20, "R,N");
$nkol = 3;
if ($is_harga=="Y") {
$xls->add_field("Harga", 20, "R,N");
$xls->add_field("Total", 20, "R,N");
$nkol = 5;
}
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
if ($id_sup>0) $xls->add_span(["Nama Supplier : ".$nama_sup,$nkol,"L"]);
if ($id_grup>0) $xls->add_span(["Grup Barang : ".$nama_grup,$nkol,"L"]);
$tot_stok = 0; $nomor = 0;
while ($db->Next()) {
$tot_stok += $db->Row("Total");
$_row = array(++$nomor, $db->Row("Nama_Produk"), Format_Stok($db->Row("Jumlah",0),$db->Row("Kali",0),$db->Row("Satuan_Normal"),$db->Row("Satuan_Stok")));
if ($is_harga=="Y") $_row[] = $db->Row("Harga_Pokok"); $_row[] = $db->Row("Total");
$xls->add_value($_row);
}
if ($is_harga=="Y") $xls->add_span(array("TOTAL",4,"R,B"),array($tot_stok,1,"R,N,B"));
$xls->add_stamp(1, true);
$xls->send("Data Stok Akhir Barang ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"SEMUA GRUP"]);
$ttgl = $form->datebox("_", "Tanggal", tgl_ymd(), true, false);
$turut = $form->radio("_", "Urut", "B", true, false, ["B"=>"Nama Barang","J"=>"Jumlah / Nilai"]);
$tharga = $form->radio("_", "Harga", "Y", true, false, ["Y"=>"Ya","N"=>"Tidak"]);
$tstok = $form->radio("_", "Min_Stok", "N", true, false, ["Y"=>"Ya","N"=>"Tidak"], null, "RepoStokAkhirJS.oc_MinStok();");
$tqty = $form->textbox("_", "Min_Qty", 0, false, false, "double");
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
<div class="col">'.$tsup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Grup_InvID">Grup Barang</label>
<div class="col">'.$tgrup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tanggal">Tanggal Stok</label>
<div class="col-sm-6 col-lg-5">'.$ttgl.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Urut">Urut Berdasarkan</label>
<div class="col col-form-label">'.$turut.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Harga">Cetak Harga ?</label>
<div class="col col-form-label">'.$tharga.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Min_Stok">Batas Maximum ?</label>
<div class="col-sm-4 col-lg-3 col-form-label">'.$tstok.'</div>
<div class="col-sm-4 col-lg-3">'.$tqty.'</div>
</div>';
}
?>
+189
View File
@@ -0,0 +1,189 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/repo/stok_mutasi.php
Desc. : PHP - Laporan Mutasi Stok Barang
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : July 16th, 2011.
Last Modified : October 2nd, 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\Web\Table;
use siaupheng\fonia3\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_cab = Param::Get("CabID", 0);
if (in_array($data, ["print","export"])) {
$id_inv = Param::Get("InvID", 0);
$tgl_from = Param::Get("Tgl_From");
$tgl_to = Param::Get("Tgl_To");
$nama_produk = "";
if ($id_inv > 0) {
$db->Query("SELECT Nama_Produk Nama FROM inv_produk WHERE InvID='".$id_inv."' LIMIT 1");
if ($db->Next()) $nama_produk = $db->Row("Nama");
}
// generate report header
$tglheader = $tgl_from;
if ($tgl_from!==$tgl_to) $tglheader .= " S/D ".$tgl_to;
$tgl_from = tgl_sql2str($tgl_from);
$tgl_to = tgl_sql2str($tgl_to);
// query ukuran normal produk & stok awal
$kali = 0; $sat_stok = ""; $sat_norm = "";
$db->Query("SELECT * FROM vi_inv_produk2 WHERE InvID='".$id_inv."' LIMIT 1");
if ($db->Next()) {
$kali = $db->Row("Qty", 0);
$sat_stok = $db->Row("Satuan_Stok");
$sat_norm = $db->Row("Satuan_Normal");
}
$stok = 0;
$tsql = ($id_cab==0) ? "" : " AND CabID='".$id_cab."'";
$db->Query("SELECT SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<'".$tgl_from."' AND InvID='".$id_inv."'".$tsql);
if ($db->Next()) $stok = $db->RowFloat("Stok", 0);
// query data laporan
$db->Query("SELECT DATE_FORMAT(D.Tgl_Ref,'%d-%m-%Y') Tgl_Ref2,D.No_Ref,SUM(IF((D.Stok<0 OR D.NotaID=5 OR D.NotaID=6) AND D.NotaID<>3,-D.Stok,0)) Keluar,SUM(IF((D.Stok>0 OR D.NotaID=3) AND (D.NotaID<>5 AND D.NotaID<>6),D.Stok,0)) Masuk, IF(ISNULL(S.Nama_Sup),IF(D.NotaID=6,Q.Nama,''),CONCAT(S.Nama_Sup,IF(B.Data_Beli=1,'',' <i>(Retur)</i>'))) Nama FROM (SELECT No_Ref,Tgl_Ref,NotaID,SUM(Stok) Stok FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tgl_from."' AND '".$tgl_to."') AND InvID=".$id_inv." AND Stok<>0".$tsql." GROUP BY No_Ref) D LEFT JOIN inv_beli B ON (B.No_Beli=D.No_Ref) LEFT JOIN inv_jual J ON (J.No_Jual=D.No_Ref) LEFT JOIN inv_opname O ON (O.No_Opname=D.No_Ref) LEFT JOIN para_supplier S ON (S.SupID=B.SupID) LEFT JOIN app_operator Q ON (Q.UserID=J.UserID) LEFT JOIN inv_nota N ON (D.NotaID=N.NotaID) GROUP BY D.No_Ref ORDER BY D.Tgl_Ref,N.Urut,D.No_Ref");
}
if ( $data == "print" ) {
Report_Header("MUTASI STOK BARANG", "Periode : ".$tglheader);
$pre = new \siaupheng\fonia3\Printer\PrintHTML();
$pre->add_field("Tanggal",20,"C");
$pre->add_field("No. Nota",20,"L");
$pre->add_field("Nama Supplier / Kasir",150,"L");
$pre->add_field("Masuk",80,"R","rupiah");
$pre->add_field("Keluar",50,"R","rupiah");
$pre->add_field("Stok",50,"R","rupiah");
$pre->add_span(array("Nama Barang : ".$nama_produk,6,"L,B"));
$tot_m = 0; $tot_k = 0;
$pre->add_span(array("Stok Awal",3,"R"),array("",1,"R"),array("",1,"R"),array(format_stok($stok,$kali,$sat_norm,$sat_stok),1,"R"));
while ($db->Next()) {
//if ($db->RowFloat("Stok", 0) == 0) continue;
$msk = $db->Row("Masuk");
$klr = $db->Row("Keluar");
$stok += $msk - $klr;
$tot_m += $msk;
$tot_k += $klr;
$pre->add_value($db->Row("Tgl_Ref2"), $db->Row("No_Ref"), $db->Row("Nama"), (($msk<>0)?format_stok($msk,$kali,$sat_norm,$sat_stok):""), (($klr<>0)?format_stok($klr,$kali,$sat_norm,$sat_stok):""), format_stok($stok,$kali,$sat_norm,$sat_stok));
}
$pre->add_span(array("Stok Akhir",3,"R"),array(format_stok($tot_m,$kali,$sat_norm,$sat_stok),1,"R"),array(format_stok($tot_k,$kali,$sat_norm,$sat_stok),1,"R"),array(format_stok($stok,$kali,$sat_norm,$sat_stok),1,"R"));
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Data Mutasi Stok Barang",
'desc'=>"Export Data Mutasi Stok Barang"
]);
$xls->add_header($_SESSION['__WEB_APP']['REG_NAME']);
$xls->add_header("DATA MUTASI STOK BARANG");
$xls->add_header("Periode : ".$tglheader);
$xls->add_field("Tanggal",15,"C");
$xls->add_field("No. Nota",20,"L");
$xls->add_field("Nama Supplier / Kasir",50,"L");
$xls->add_field("Masuk",20,"R");
$xls->add_field("Keluar",20,"R");
$xls->add_field("Stok",20,"R");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
$xls->add_span(array("Nama Barang : ".$nama_produk,6,"L,B"));
$tot_m = 0; $tot_k = 0;
$xls->add_span(array("Stok Awal",3,"R"),array("",1,"R"),array("",1,"R"),array(format_stok($stok,$kali,$sat_norm,$sat_stok),1,"R"));
while ($db->Next()) {
//if ($db->RowFloat("Stok", 0) == 0) continue;
$msk = $db->Row("Masuk");
$klr = $db->Row("Keluar");
$stok += $msk - $klr;
$tot_m += $msk;
$tot_k += $klr;
$xls->add_value($db->Row("Tgl_Ref2"), $db->Row("No_Ref"), $db->Row("Nama"), (($msk<>0)?format_stok($msk,$kali,$sat_norm,$sat_stok):""), (($klr<>0)?format_stok($klr,$kali,$sat_norm,$sat_stok):""), format_stok($stok,$kali,$sat_norm,$sat_stok));
}
$xls->add_span(array("Stok Akhir",3,"R"),array(format_stok($tot_m,$kali,$sat_norm,$sat_stok),1,"R"),array(format_stok($tot_k,$kali,$sat_norm,$sat_stok),1,"R"),array(format_stok($stok,$kali,$sat_norm,$sat_stok),1,"R"));
$xls->add_stamp(1, true);
$xls->send("Data Stok Akhir Barang ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ($data == "auto-produk") {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
$bcode = 0; $arec = [];
// Cari by SKU
$db->Query("SELECT P.*,CONCAT(K.Kode_SKU,' / ',K.Kode_Barcode,':',P.Nama_Produk,':',S.Nama_Satuan,':',CONVERT(FORMAT(K.Harga_Jual,0) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_SKU='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
if ($db->Next()) {
$bcode = 1;
$arec = $db->AllRow();
}
// Cari by Barcode
if ($bcode == 0) {
$db->Query("SELECT P.*,CONCAT(K.Kode_SKU,' / ',K.Kode_Barcode,':',P.Nama_Produk,':',S.Nama_Satuan,':',CONVERT(FORMAT(K.Harga_Jual,0) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_Barcode='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) WHERE P.Aktif=1");
if ($db->Next()) {
$bcode = 1;
$arec = $db->AllRow();
}
}
if ($bcode == 1) {
$ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Produk'], 'data'=>$arec['Data2'], 'bc'=>1];
} else {
$db->Query("SELECT P.*,IF(IFNULL(X.Stok,0)=0,'KOSONG',ROUND(X.Stok/K.Qty,2)) Sisa_Stok,K.Kode_SKU,K.Harga_Jual,S.Nama_Satuan,CONCAT(K.Kode_SKU,' / ',K.Kode_Barcode,':',P.Nama_Produk,':',S.Nama_Satuan,':',CONVERT(FORMAT(K.Harga_Jual,0) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND InvID IN (SELECT InvID FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) ORDER BY InvID) K LEFT JOIN (SELECT * FROM inv_produk WHERE Aktif=1 AND Nama_Produk LIKE '%".$tcari."%' ORDER BY InvID) P ON (K.InvID=P.InvID) LEFT JOIN vi_inv_stok X ON (X.CabID='".$id_cab."' AND K.InvID=X.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=K.SatuanID) ORDER BY P.Nama_Produk,K.Qty DESC LIMIT 50");
while ($db->Next()) {
$ajson['autodata'][] = ['value'=>$db->Row("InvID"), 'text'=>$db->Row("Nama_Produk"), 'html'=>'<span class="text-primary">'.$db->Row("Kode_SKU").'</span> '.$db->Row("Nama_Produk")." ".$db->Row("Nama_Satuan").' - Rp. '.rupiah($db->Row("Harga_Jual")).' <span class="text-danger">('.$db->Row("Sisa_Stok").')</span>', 'data'=>$db->Row("Data2"), 'bc'=>0];
}
}
} else if ( $data == "brow-produk" ) {
$tcari = trim(Param::Get("Cari_Produk"));
$tsql = ($tcari=="") ? "" : " AND P.Barcode_Nama LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("vi_inv_produk P", "P.*", "P.Harga_Jual>0 AND P.Aktif=1".$tsql);
$obj->add_field("InvID", "ID", "hid");
$obj->add_field("Kode_SKU", "SKU", "c");
$obj->add_field("Kode_Barcode", "Kode Barcode", "c");
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah");
$obj->add_field("Nama_Produk", "Produk", "hid");
$obj->add_field("Nama_Satuan", "Satuan", "hid");
$obj->set_field_order("Kode_SKU", "A");
$obj->add_row_btn("save", "Pilih", "RepoStokMutasiJS.produk_select");
$obj->set_func_navi("RepoStokMutasiJS.data_query('brow-produk')");
$ajson[] = $obj->db_table("divBrowProduk");
} else if ( $data == "default") {
$form = new Form($db);
$tbrg = $form->textauto("_", "Nama_Produk", null, true, true, "Nama Barang");
$tcab = $form->option_db("_", "CabID", $id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]);
$ttgl1 = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$ttgl2 = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1"><label class="col-sm-3 col-lg-3 col-form-label" for="Nama_Produk">Nama Barang</label><div class="col"><div class="input-group">'.$tbrg.'<button class="btn btn-info shadow-none" type="button" id="butBrow"><i class="bi-search"></i></button></div></div></div>
<div class="row mb-1"><label class="col-sm-3 col-lg-3 col-form-label" for="CabID">Nama Cabang</label><div class="col">'.$tcab.'</div></div>
<div class="row mb-1"><label class="col-sm-3 col-lg-3 col-form-label" for="Tgl_From">Mulai Tanggal</label><div class="col-sm-8 col-lg-5">'.$ttgl1.'</div></div>
<div class="row mb-1"><label class="col-sm-3 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label><div class="col-sm-8 col-lg-5">'.$ttgl2.'</div></div>
<input type="hidden" id="InvID" value="0" />';
}
send_json($ajson);
?>