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
+107
View File
@@ -0,0 +1,107 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/tab/karyawan.php
Desc. : PHP - Tabel Master Karyawan
Created By : Siau Pheng ([email protected]).
Created Date : July 7th, 2015.
Last Modified : October 8th, 2025.
(c) 2015 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
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_tm = Param::Get("KaryaID", 0);
if ( $data == "karya-detail" ) {
$atabel = ['KaryaID'=>0,'Aktif'=>1];
if ($id_tm > 0) {
$db->Query("SELECT * FROM para_karyawan WHERE KaryaID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$tnama = $form->textbox("_", "Nama_Karya", $atabel['Nama_Karya'], true, true, "text", "nama karyawan");
$tmasuk = $form->datebox("_", "Tgl_Masuk", $atabel['Tgl_Masuk'], true, false);
$tkeluar = $form->datebox("_", "Tgl_Keluar", $atabel['Tgl_Keluar'], true, false);
$taktif = $form->switch("_", "Aktif", $atabel['Aktif'], true, false, ["1","0"]);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Karya">Nama Karyawan</label>
<div class="col">'.$tnama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_Masuk">Tanggal Masuk</label>
<div class="col-sm-6 col-lg-5">'.$tmasuk.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Tgl_Keluar">Tanggal Keluar</label>
<div class="col-sm-6 col-lg-5">'.$tkeluar.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Aktif">Status Aktif ?</label>
<div class="col-sm-6 col-lg-5 col-form-label">'.$taktif.'</div>
</div>
<input type="hidden" id="KaryaID" value="'.$atabel['KaryaID'].'" >
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
} else if ( $data == "detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
$sql = new SQL($db);
$sql->set_table("para_karyawan");
$sql->add_param("Nama_Karya");
$sql->add_param_date("Tgl_Masuk");
$sql->add_param_date("Tgl_Keluar");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("KaryaID");
if ($mode_detail=="insert") {
$sql->InsertDB();
} else if ($mode_detail=="update") {
$sql->UpdateDB();
} else if ($mode_detail=="delete") {
$sql->DeleteDB();
}
}
$tcari = trim(Param::Get("Cari_TX"));
$tsql = ($tcari=="") ? "" : " WHERE Nama_Karya LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM para_karyawan".$tsql);
$obj->add_field("KaryaID", "ID", "hid");
$obj->add_field("Nama_Karya", "Nama Karyawan", "awr");
$obj->add_field("Tgl_Masuk", "Tgl. Masuk", "c", "sqltgl");
$obj->add_field("Tgl_Keluar", "Tgl. Keluar", "c", "sqltgl");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Nama_Karya", "A");
$obj->add_row_btn("clipboard", "Ubah", "KaryawanJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "KaryawanJS.detail_hapus");
$obj->set_func_navi("KaryawanJS.data_query('detail')");
$obj->set_func_btn("KaryawanJS.detail_tambah", "+ Karyawan");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Karyawan</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Karya" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+100
View File
@@ -0,0 +1,100 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/tab/merek.php
Desc. : PHP - Tabel Master Merek Barang
Created By : Siau Pheng ([email protected]).
Created Date : May 19th, 2010.
Last Modified : October 18th, 2025.
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
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_tm = Param::Get("MerekID", 0);
if ( $data == "merek-detail" ) {
$atabel = ['MerekID'=>0,'Aktif'=>1];
if ($id_tm > 0) {
$db->Query("SELECT * FROM para_merek WHERE MerekID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$tkode = $form->textbox("_", "Kode_Merek", $atabel['Kode_Merek'], true, true, "text", "kode merek barang");
$tnama = $form->textbox("_", "Nama_Merek", $atabel['Nama_Merek'], true, true, "text", "nama merek barang");
$taktif = $form->switch("_", "Aktif", $atabel['Aktif'], true, false, ["1","0"]);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Kode_Merek">Kode Merek</label>
<div class="col-sm-6 col-lg-5">'.$tkode.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Merek">Nama Merek</label>
<div class="col">'.$tnama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Aktif">Status Aktif ?</label>
<div class="col-sm-6 col-lg-5 col-form-label">'.$taktif.'</div>
</div>
<input type="hidden" id="MerekID" value="'.$atabel['MerekID'].'" >
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
} else if ( $data == "detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
$sql = new SQL($db);
$sql->set_table("para_merek");
$sql->add_param("Kode_Merek");
$sql->add_param("Nama_Merek");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("MerekID");
if ($mode_detail=="insert") {
$sql->InsertDB();
} else if ($mode_detail=="update") {
$sql->UpdateDB();
} else if ($mode_detail=="delete") {
$sql->DeleteDB();
}
}
$tcari = trim(Param::Get("Cari_Merek"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(Kode_Merek,Nama_Merek) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM para_merek".$tsql);
$obj->add_field("MerekID", "ID", "hid");
$obj->add_field("Kode_Merek", "Kode", "l");
$obj->add_field("Nama_Merek", "Nama Merek", "awr");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Kode_Merek", "A");
$obj->add_row_btn("clipboard", "Ubah", "MerekJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "MerekJS.detail_hapus");
$obj->set_func_navi("MerekJS.data_query('detail')");
$obj->set_func_btn("MerekJS.detail_tambah", "+ Merek");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Merek Barang</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Merek" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+474
View File
@@ -0,0 +1,474 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/tab/produk.php
Desc. : PHP - Tabel Master Barang
Created By : Siau Pheng ([email protected]).
Created Date : May 19th, 2010.
Last Modified : January 10th, 2026.
(c) 2010 - 2026, 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\DB\SQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Table;
use siaupheng\fonia3\Web\Form;
function Produk_Baru($autosave = false) {
global $db;
$ino = 1;
$db->Query("SELECT MAX(InvID)+1 Nomor FROM inv_produk");
if ($db->Next()) $ino = (int)$db->Row("Nomor", 1);
if ($autosave) $db->Query("INSERT INTO inv_produk (InvID) VALUES ('".$ino."')");
return $ino;
}
function Produk_Save($id_inv = 0, $id_grup = 0) {
global $db;
if ($id_inv == 0) return;
$akemas = [];
$db->Query("SELECT InvKemasanID FROM inv_produk_kemasan WHERE InvID='".$id_inv."' AND Kode_SKU=''");
while ($db->Next()) {
$akemas[] = $db->Row("InvKemasanID");
}
if (count($akemas) > 0) {
foreach($akemas as $_key => $val) {
$sku_baru = SKU_Baru($id_grup);
$db->Query("UPDATE inv_produk_kemasan SET Kode_SKU='".$sku_baru."' WHERE InvKemasanID='".$val."' LIMIT 1");
}
}
}
function Produk_Backup($id_inv = 0) {
global $db;
if ($id_inv == 0) return;
$db->Query("INSERT IGNORE INTO inv_produk_backup (InvID,UserID,Produk,Kemasan,MD5Key) SELECT A.InvID,A.UserID,A.Produk,IFNULL(B.Kemasan,'[]'),UPPER(MD5(CONCAT(A.Produk,IFNULL(B.Kemasan,'[]')))) FROM (SELECT InvID,UserID,JSON_ARRAYAGG(JSON_OBJECT('InvID',InvID,'Grup_InvID',Grup_InvID,'MerekID',MerekID,'Nama_Produk',Nama_Produk,'StokID',StokID,'NormalID',NormalID,'Harga_Beli',Harga_Beli,'Harga_Tambah',Harga_Tambah,'Harga_Pokok',Harga_Pokok,'Stok_Min',Stok_Min,'Stok_Max',Stok_Max,'Aktif',Aktif,'UserID',UserID)) Produk FROM inv_produk WHERE InvID='".$id_inv."') A LEFT JOIN (SELECT InvID,JSON_ARRAYAGG(JSON_OBJECT('InvKemasanID', InvKemasanID, 'InvID', InvID, 'SatuanID', SatuanID, 'Kode_SKU', Kode_SKU, 'Kode_Barcode', Kode_Barcode, 'Qty', Qty, 'Harga_Jual', Harga_Jual)) Kemasan FROM inv_produk_kemasan WHERE InvID='".$id_inv."') B ON (A.InvID=B.InvID)");
}
function Produk_Restore($id_inv = 0, $md5_key = "") {
global $db;
if ($id_inv == 0) return;
$_json_produk = []; $_json_kemasan = []; $_userid = 0;
$tsql = ($md5_key == "") ? "ORDER BY Tanggal DESC" : "AND MD5Key='".$md5_key."'";
$db->Query("SELECT * FROM inv_produk_backup WHERE InvID='".$id_inv."' ".$tsql." LIMIT 1");
if ($db->Next()) {
$_json_produk = json_decode($db->Row("Produk", "[]"), true);
$_json_kemasan = json_decode($db->Row("Kemasan", "[]"), true);
$_userid = $db->Row("UserID", 0);
}
if (isset($_json_produk[0]['InvID'])) {
$db->Query("DELETE FROM inv_produk_kemasan WHERE InvID='".$id_inv."'");
foreach($_json_produk as $_key => $val) {
$db->Query("REPLACE INTO inv_produk (InvID,Grup_InvID,MerekID,Nama_Produk,StokID,NormalID,Harga_Beli,Harga_Tambah,Harga_Pokok,Stok_Min,Stok_Max,Aktif,UserID) VALUES ('".$val['InvID']."','".$val['Grup_InvID']."','".$val['MerekID']."','".$val['Nama_Produk']."','".$val['StokID']."','".$val['NormalID']."','".$val['Harga_Beli']."','".$val['Harga_Tambah']."','".$val['Harga_Pokok']."','".$val['Stok_Min']."','".$val['Stok_Max']."','".$val['Aktif']."','".$_userid."') LIMIT 1");
}
foreach($_json_kemasan as $_key => $val) {
$db->Query("REPLACE INTO inv_produk_kemasan (InvKemasanID,InvID,SatuanID,Kode_SKU,Kode_Barcode,Qty,Harga_Jual,UserID) VALUES ('".$val['InvKemasanID']."','".$val['InvID']."','".$val['SatuanID']."','".$val['Kode_SKU']."','".$val['Kode_Barcode']."','".$val['Qty']."','".$val['Harga_Jual']."','".$_userid."') LIMIT 1");
}
}
}
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode");
$mode_detail = Param::Get("mode_detail");
$id_inv = Param::Get("InvID", 0);
$id_kemasan = Param::Get("InvKemasanID", 0);
$md5_key = Param::Get("MD5Key", "");
$i_filt = Param::Get("Filter_Produk", 0);
if ( $data == "detail-produk" ) {
$atabel = ['InvID'=>0,'Grup_InvID'=>0,'StokID'=>$_SESSION['__APP_INV']['DEF_SATUANID'],'NormalID'=>$_SESSION['__APP_INV']['DEF_SATUANID'],'Aktif'=>1];
if ($id_inv > 0) {
$db->Query("SELECT * FROM inv_produk WHERE InvID='".$id_inv."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
Produk_Backup($id_inv);
} else {
$atabel['InvID'] = Produk_Baru(true);
}
$form = new Form($db);
$tnama = $form->textbox("_", "Nama_Produk", $atabel['Nama_Produk'], true, true, "text", "nama barang");
$tgrup = $form->option_db("_", "Grup_InvID", $atabel['Grup_InvID'], true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"&nbsp;"]);
$tmerek = $form->option_db("_", "MerekID", $atabel['MerekID'], true, false, "para_merek", ["MerekID","Nama_Merek"], "Aktif=1 ORDER BY Nama_Merek", [0,"&nbsp;"]);
$tstok = $form->option_db("_", "StokID", $atabel['StokID'], true, false, "para_satuan", ["SatuanID","Nama_Satuan"], "Aktif=1 ORDER BY Nama_Satuan", [0,"&nbsp;"]);
$tnormal = $form->option_db("_", "NormalID", $atabel['NormalID'], true, false, "para_satuan", ["SatuanID","Nama_Satuan"], "Aktif=1 ORDER BY Nama_Satuan", [0,"&nbsp;"]);
$tbeli = $form->textbox("_", "Harga_Beli", $atabel['Harga_Beli'], true, true, "double", "harga beli", null, null, "ProdukJS.hitung_HPP();");
$ttambah = $form->textbox("_", "Harga_Tambah", $atabel['Harga_Tambah'], true, true, "double", "tambahan biaya", null, null, "ProdukJS.hitung_HPP();");
$thpp = $form->textbox("_", "Harga_Pokok", $atabel['Harga_Pokok'], true, true, "double", "harga pokok");
$tsmin = $form->textbox("_", "Stok_Min", $atabel['Stok_Min'], true, true, "double", "stok minimal");
$tsmax = $form->textbox("_", "Stok_Max", $atabel['Stok_Max'], true, true, "double", "stok maximal");
$taktif = $form->radio("_", "Aktif", $atabel['Aktif'], true, true, ['1'=>"Ya",'0'=>"Tidak"]);
$ajson['html'] = '
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="produk-tab" data-bs-toggle="tab" data-bs-target="#produk" type="button" role="tab" aria-controls="produk" aria-selected="true">Informasi Barang</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="kemasan-tab" data-bs-toggle="tab" data-bs-target="#kemasan" type="button" role="tab" aria-controls="kemasan" aria-selected="false">Kemasan / SKU / Harga Jual</button>
</li>
<li class="nav-item ms-auto">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">'.$atabel['Nama_Produk'].'</a>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="produk" role="tabpanel" aria-labelledby="produk-tab">
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="Grup_InvID">Grup Barang</label>
<div class="col-sm-4 col-lg-5">'.$tgrup.'</div>
<div class="col-sm-4 col-lg-5 text-end"><label class="form-label me-3">Barang Aktif ?</label>'.$taktif.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="MerekID">Merek Barang</label>
<div class="col-sm-4 col-lg-5">'.$tmerek.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="Nama_Produk">Nama Barang</label>
<div class="col">'.$tnama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="StokID">Satuan Stok / Normal</label>
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$tstok.Form_Info("Ukuran satuan terkecil produk.").'</div></div>
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$tnormal.Form_Info("Ukuran satuan yang dipergunakan dalam transaksi normal dan laporan.").'</div></div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="Harga_Beli">Harga Beli</label>
<div class="col-sm-4 col-lg-5">'.$tbeli.'</div>
<div class="col-sm-4 col-lg-5"><div class="input-group"><span class="input-group-text" style="min-width:30%;">Stok Minimum</span>'.$tsmin.'</div></div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="Harga_Tambah">+ Biaya</label>
<div class="col-sm-4 col-lg-5">'.$ttambah.'</div>
<div class="col-sm-4 col-lg-5"><div class="input-group"><span class="input-group-text" style="min-width:30%;">Stok Maximum</span>'.$tsmax.'</div></div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="Harga_Pokok">Harga Pokok</label>
<div class="col-sm-4 col-lg-5">'.$thpp.'</div>
</div>
</div>
<div class="tab-pane fade" id="kemasan" role="tabpanel" aria-labelledby="kemasan-tab">
<div class="row"><div class="col" id="divKemasan"></div></div>
</div>
</div>
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'" />
<input type="hidden" id="mode" value="'.$mode.'" />
';
} else if ( $data == "save" ) {
if ($mode == "cancel") {
if (Param::Get("mode_before")=="add") {
$db->Query("DELETE FROM inv_produk_kemasan WHERE InvID='".$id_inv."'");
$db->Query("DELETE FROM inv_produk WHERE InvID='".$id_inv."'");
} else {
Produk_Restore($id_inv);
}
} else {
$sql = new SQL($db);
$sql->set_table("inv_produk");
$sql->add_param("Grup_InvID");
$sql->add_param("MerekID");
$sql->add_param("Nama_Produk");
$sql->add_param("StokID");
$sql->add_param("NormalID");
$sql->add_param("Harga_Beli");
$sql->add_param("Harga_Tambah");
$sql->add_param("Harga_Pokok", "Harga_Beli+Harga_Tambah", true);
$sql->add_param("Stok_Min");
$sql->add_param("Stok_Max");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("InvID");
if (in_array($mode, ["add","edit"])) {
$sql->UpdateDB();
} else if ($mode=="del") {
$sql->DeleteDB();
$db->Query("DELETE FROM inv_produk_kemasan WHERE InvID='".$id_inv."'");
}
if ($mode <> "del") {
Produk_Save($id_inv, Param::Get("Grup_InvID"));
Produk_Backup($id_inv);
}
}
$ajson['status'] = true;
} else if ( $data == "tabel-produk" ) {
$tcari = trim(Param::Get("Cari_Produk"));
$tsql = "";
if ($tcari <> "") {
$tsql = " AND Nama_Produk LIKE '%".$tcari."%'";
if (is_numeric($tcari)) {
$tsql .= " OR InvID IN (SELECT InvID FROM inv_produk_kemasan WHERE CONCAT(Kode_SKU,Kode_Barcode) LIKE '%".$tcari."%')";
}
} else {
$tsql .= ($i_filt==0) ? "" : " AND Grup_InvID='".$i_filt."'";
}
if (strlen($tsql)>0) $tsql = " WHERE".substr($tsql, 4);
$obj = new Table($db);
$obj->set_table("(SELECT * FROM inv_produk".$tsql.") P LEFT JOIN inv_produk_kemasan K ON (K.InvID=P.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=P.StokID)", "P.InvID,P.Nama_Produk,S.Nama_Satuan,Round(P.Harga_Pokok*K.Qty,2) Harga_Pokok,(((K.Harga_Jual-(P.Harga_Pokok*K.Qty))*100)/K.Harga_Jual) Margin,K.Harga_Jual,P.Stok_Min", "");
$obj->add_field("InvID", "ID", "hid");
$obj->add_field("Nama_Produk", "Nama Barang", "awr");
$obj->add_field("Nama_Satuan", "Satuan Stok");
if (user_level(2)) {
$obj->add_field("Harga_Pokok", "Harga Pokok", "r", "rupiah");
$obj->add_field("Harga_Jual", "Harga Jual", "r", "rupiah");
$obj->add_field("Margin", "%", "r", "rupiah2");
} else {
$obj->add_field("Harga_Jual", "Harga Jual", "r", "rupiah");
}
$obj->add_field("Stok_Min", "Stok Min", "r", "rupiah");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("InvID", "D");
$obj->add_row_btn("clipboard", "Ubah", "ProdukJS.produk_ubah");
if (user_level(2)) $obj->add_row_btn("arrow-counterclockwise", "Restore", "ProdukJS.produk_restore");
$obj->add_row_btn("trash", "Hapus", "ProdukJS.produk_hapus");
$obj->set_func_navi("ProdukJS.data_query('tabel-produk')");
$obj->set_func_btn("ProdukJS.produk_tambah", "+ Produk");
$ajson[] = $obj->db_table("divDetail");
} else if ( $data == "tabel-kemasan" ) {
if (in_array($mode_detail, ["update","delete"])) {
$sql = new SQL($db);
$sql->set_table("inv_produk_kemasan");
$sql->add_param("SatuanID");
$sql->add_param("Kode_Barcode");
$sql->add_param("Qty");
$sql->add_param("Harga_Jual");
$sql->add_param_userid();
$sql->add_where("InvKemasanID", $id_kemasan);
if ($mode_detail=="update") {
if ($id_kemasan == 0) {
$sql->add_param("InvID");
$sql->InsertDB();
} else {
$sql->UpdateDB();
}
} else if ($mode_detail=="delete") {
$sql->DeleteDB();
}
}
$obj = new Table($db);
$obj->set_query("SELECT K.*,S.Nama_Satuan,(K.Qty*P.Harga_Pokok) Harga_Modal,IF(K.Harga_Jual=0,0,K.Harga_Jual-(K.Qty*P.Harga_Pokok)) Margin_Rup, IF(K.Harga_Jual=0,0,((K.Harga_Jual-(K.Qty*P.Harga_Pokok))*100)/K.Harga_Jual) Margin_Per FROM (SELECT * FROM inv_produk_kemasan WHERE InvID='".$id_inv."') K LEFT JOIN (SELECT * FROM inv_produk WHERE InvID='".$id_inv."') P ON (K.InvID=P.InvID) LEFT JOIN para_satuan S ON (K.SatuanID=S.SatuanID)");
$obj->add_field("InvKemasanID", "ID", "hid");
$obj->add_field("Nama_Satuan", "Nama Kemasan", "l");
$obj->add_field("Kode_SKU", "SKU", "c");
$obj->add_field("Kode_Barcode", "Barcode", "l");
$obj->add_field("Qty", "Qty", "r", "rupiah");
$obj->add_field("Harga_Jual", "Harga Jual", "r", "rupiah");
if (user_level(2)) {
$obj->add_field("Harga_Modal", "Harga Modal", "r", "rupiah");
$obj->add_field("Margin_Rup", "Margin (Rp.)", "r", "rupiah");
$obj->add_field("Margin_Per", "Margin (%)", "r", "rupiah2");
}
$obj->set_row_color("Harga_Jual", 0, "rred");
$obj->set_field_order("Qty", "D");
$obj->add_row_form("pencil-square", "Detail", "ProdukJS.kemasan_form");
$obj->add_row_btn("trash", "Hapus", "ProdukJS.kemasan_del");
$obj->set_func_btn("ProdukJS.kemasan_add", "+ Kemasan");
$ajson[] = $obj->json_table("divKemasan");
} else if ( $data == "detail-kemasan" ) {
$arec = ['InvKemasanID'=>0,'SatuanID'=>0,'Qty'=>0,'Kode_SKU'=>"SKU_BARU"];
if ($id_kemasan > 0) {
$db->Query("SELECT * FROM inv_produk_kemasan WHERE InvKemasanID='".$id_kemasan."' LIMIT 1");
if ($db->Next()) $arec = $db->AllRow();
}
$form = new Form($db);
$tsatuan = $form->option_db("_", "SatuanID", $arec['SatuanID'], true, false, "para_satuan", ["SatuanID","Nama_Satuan"], "Aktif=1 ORDER BY Nama_Satuan");
$tqty = $form->textbox("_", "Qty", $arec['Qty'], true, true, "number", "qty", null, null, "ProdukJS.calc_Modal();");
$tsku = $form->textbox("_", "Kode_SKU", $arec['Kode_SKU'], false, false, "text");
$tbcode = $form->textbox("_", "Kode_Barcode", $arec['Kode_Barcode'], true, false, "text");
$tmodal = $form->textbox("_", "Harga_Modal", $arec['Harga_Modal'], false, false, "double");
$tharga = $form->textbox("_", "Harga_Jual", $arec['Harga_Jual'], true, false, "double", "harga jual", null, null, "ProdukJS.calc_Harga(1);");
$tpersen = $form->textbox("_", "Persen_Jual", $arec['Persen_Jual'], true, false, "double", "persen jual", null, null, "ProdukJS.calc_Harga(2);");
$ajson['html'] = '
<div class="card"><div class="card-body">
<div class="row mb-1">
<label class="col-sm-6 col-lg-2 col-form-label" for="SatuanID">Nama Kemasan</label>
<div class="col-sm-6 col-lg-4">'.$tsatuan.'</div>
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="min-width:30%;">Kode SKU</span>'.$tsku.'</div></div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-2 col-form-label" for="Qty">Qty / Kemasan</label>
<div class="col-sm-6 col-lg-4"><div class="input-group">'.$tqty.'<span class="input-group-text">'.Param::Get("Nama_Satuan","Satuan").'</span></div></div>
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="min-width:30%;">Kode Barcode</span>'.$tbcode.'</div></div>
</div>
<div class="row mb-1"><hr class="my-1"></div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-2 col-form-label" for="Harga_Jual">Harga Jual</label>
<div class="col-sm-6 col-lg-4">'.$tharga.'</div>
<div class="col-sm-6 col-lg-2"><div class="input-group"><div class="input-group-text">&thickapprox;</div>'.$tpersen.'<div class="input-group-text">%</div></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label">Harga Modal</label>
<div class="col-sm-6 col-lg-4">'.$tmodal.'</div>
<div class="col-sm-12 col-lg-6 text-end">
<button type="button" class="btn btn-warning shadow-none me-2" id="butBatalKemasan">Batal</button><button type="button" class="btn btn-success shadow-none" id="butSimpanKemasan">Simpan</button>
</div>
</div>
<input type="hidden" id="InvKemasanID" value="'.$arec['InvKemasanID'].'">
<input type="hidden" id="SatuanLamaID" value="'.$arec['SatuanID'].'">
</div></div>
';
} else if ( $data == "check-kemasan") {
$ajson['ada'] = false;
$db->Query("SELECT COUNT(*) Jumlah FROM inv_produk_kemasan WHERE InvID='".$id_inv."' AND SatuanID='".Param::Get("SatuanID")."'");
if ($db->Next() && $db->Row("Jumlah",0)>0) $ajson['ada'] = true;
} else if ($data == "detail-filter") {
$form = new Form($db);
$tfilter = $form->option_db("_", "Fi_Produk", Param::Get("Filter_Produk",0), true, true, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"SEMUA GRUP BARANG"]);
echo '
<div class="row mb-1"><div class="col text-center">Tampilan Berdasarkan :</div></div>
<div class="row mb-1"><div class="col">'.$tfilter.'</div></div>
';
} else if ( $data == "restore-detail" ) {
$atabel = ['InvID'=>$id_inv];
if ($id_inv > 0) {
$db->Query("SELECT * FROM inv_produk WHERE InvID='".$id_inv."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$tnama = $form->textbox("_", "Nama_Produk", $atabel['Nama_Produk'], false, false, "text");
$ajson['html'] = '
<div class="row mb-1"><div class="col">'.$tnama.'</div></div>
<div id="divBrowBackup">&nbsp;</div>
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'">
</div></div>';
} else if ( $data == "restore-tabel" ) {
$obj = new Table($db);
$obj->set_table("inv_produk_backup", "Tanggal,MD5Key,UserID", "InvID='".$id_inv."'");
$obj->add_field("Tanggal", "Waktu Backup", "c nwr", "sqljam", "", "val-tgljam");
$obj->add_field("MD5Key", "Kode Backup", "l");
$obj->set_field_order("Tanggal", "A");
$obj->add_row_form("list", "Detail", "ProdukJS.produk_restore_form");
$obj->add_row_btn("arrow-counterclockwise", "Restore", "ProdukJS.produk_restore_select");
$obj->set_func_navi("ProdukJS.data_query('restore-tabel')");
$ajson[] = $obj->db_table("divBrowBackup");
} else if ($data == "restore-proses") {
Produk_Restore($id_inv, $md5_key);
$ajson['status'] = true;
} else if ( $data == "restore-form" ) {
$atabel = ['InvID'=>$id_inv, 'Nama_Grup'=>"", 'Nama_Merek'=>"", 'Nama_Stok'=>"", 'Nama_Normal'=>""];
$akemasan = [];
if ($md5_key <> "") {
$db->Query("SELECT * FROM inv_produk_backup WHERE MD5Key='".$md5_key."' LIMIT 1");
if ($db->Next()) {
$atabel = array_merge($atabel, json_decode($db->Row("Produk", "[]"), true)[0]);
$akemasan = json_decode($db->Row("Kemasan", "[]"), true);
}
$db->Query("SELECT Nama_Grup FROM inv_produk_grup WHERE Grup_InvID='".$atabel['Grup_InvID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
$db->Query("SELECT Nama_Merek FROM para_merek WHERE MerekID='".$atabel['MerekID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
$db->Query("SELECT Nama_Satuan Nama_Stok FROM para_satuan WHERE SatuanID='".$atabel['StokID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
$db->Query("SELECT Nama_Satuan Nama_Normal FROM para_satuan WHERE SatuanID='".$atabel['NormalID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
$atabel['Status_Aktif'] = ($atabel['Aktif']==1) ? "Aktif" : "Tidak Aktif";
}
$tnama = '<input type="text" class="form-control" value="'.$atabel['Nama_Produk'].'" readonly="">';
$tgrup = '<input type="text" class="form-control" value="'.$atabel['Nama_Grup'].'" readonly="">';
$tmerek = '<input type="text" class="form-control" value="'.$atabel['Nama_Merek'].'" readonly="">';
$tstok = '<input type="text" class="form-control" value="'.$atabel['Nama_Stok'].'" readonly="">';
$tnormal = '<input type="text" class="form-control" value="'.$atabel['Nama_Normal'].'" readonly="">';
$tbeli = '<input type="text" class="form-control text-end" value="'.rupiah($atabel['Harga_Beli']).'" readonly="">';
$ttambah = '<input type="text" class="form-control text-end" value="'.rupiah($atabel['Harga_Tambah']).'" readonly="">';
$thpp = '<input type="text" class="form-control text-end" value="'.rupiah($atabel['Harga_Pokok']).'" readonly="">';
$tsmin = '<input type="text" class="form-control text-end" value="'.rupiah($atabel['Stok_Min']).'" readonly="">';
$tsmax = '<input type="text" class="form-control text-end" value="'.rupiah($atabel['Stok_Max']).'" readonly="">';
$taktif = '<input type="text" class="form-control" value="'.$atabel['Status_Aktif'].'" readonly="">';
$ajson['html'] = '
<div class="card"><div class="card-body">
<div class="accordion" id="accorProduk">
<!-- start produk -->
<div class="accordion-item">
<h2 class="accordion-header" id="flush-one"><button class="accordion-button bg-info bg-gradient" style="--bs-bg-opacity: .5;" type="button" data-bs-toggle="collapse" data-bs-target="#flush-coll-one" aria-controls="flush-coll-one" aria-expanded="true">Informasi Barang</button></h2>
<div id="flush-coll-one" class="accordion-collapse collapse show" aria-labelledby="flush-head-one" data-bs-parent="#accorProduk">
<div class="accordion-body">
<div class="row mb-1">
<div class="col-sm-12 col-lg-12"><div class="input-group"><span class="input-group-text" style="width:160px;">Nama Barang</span>'.$tnama.'</div></div>
</div>
<div class="row mb-1">
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Grup Barang</span>'.$tgrup.'</div></div>
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Merek Barang</span>'.$tmerek.'</div></div>
</div>
<div class="row mb-1">
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Satuan Stok</span>'.$tstok.'</div></div>
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Satuan Normal</span>'.$tnormal.'</div></div>
</div>
<div class="row mb-1">
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Harga Beli</span>'.$tbeli.'</div></div>
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Status Barang</span>'.$taktif.'</div></div>
</div>
<div class="row mb-1">
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">+ Biaya</span>'.$ttambah.'</div></div>
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Stok Minimum</span>'.$tsmin.'</div></div>
</div>
<div class="row mb-1">
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Harga Pokok</span>'.$thpp.'</div></div>
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Stok Maximum</span>'.$tsmax.'</div></div>
</div>
</div></div></div>
<!-- end produk -->
<!-- start kemasan -->
<div class="accordion-item">
<h2 class="accordion-header" id="flush-two"><button class="accordion-button bg-warning bg-gradient collapsed" style="--bs-bg-opacity: .5;" type="button" data-bs-toggle="collapse" data-bs-target="#flush-coll-two" aria-controls="flush-coll-two" aria-expanded="false">Kemasan / SKU / Harga Jual</button></h2>
<div id="flush-coll-two" class="accordion-collapse collapse" aria-labelledby="flush-head-two" data-bs-parent="#accorProduk">
<div class="accordion-body">
<div class="row mb-1">
<div class="col">
<table class="table table-striped table-bordered table-hover dataTable no-footer dtr-inline">
<thead><tr><th class="l">Nama Kemasan</th><th class="c">SKU</th><th class="l">Barcode</th><th class="r">Qty</th><th class="r">Harga Jual</th></tr></thead>
<tbody>';
if (count($akemasan) == 0) {
$ajson['html'] .= '<tr><td class="c" colspan="5">belum ada data</td></tr>';
}
foreach($akemasan as $_key => $val) {
$db->Query("SELECT * FROM para_satuan WHERE SatuanID='".$val['SatuanID']."' LIMIT 1");
if ($db->Next()) $val = array_merge($val, $db->AllRow());
$ajson['html'] .= sprintf('<tr><td class="l">%s</td><td class="c">%s</td><td class="l">%s</td><td class="r">%s</td><td class="r">%s</td></tr>', $val['Nama_Satuan'], $val['Kode_SKU'], $val['Kode_Barcode'], rupiah($val['Qty']), rupiah($val['Harga_Jual']));
}
$ajson['html'] .= '
</tbody>
</table>
</div>
</div>
</div></div></div>
<!-- end kemasan -->
</div>
</div></div>';
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Barang</div><div class="card-body"><div class="row mb-1"><div class="col d-flex justify-content-between"><div class="input-group me-3"><input class="form-control" id="Cari_Produk" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div><button class="btn btn-secondary shadow-none" type="button" id="butFilter">Filter</button><input type="hidden" id="Filter_Produk" value="0" /></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+116
View File
@@ -0,0 +1,116 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/tab/produk_grup.php
Desc. : PHP - Tabel Master Grup Barang
Created By : Siau Pheng ([email protected]).
Created Date : February 8th, 2011.
Last Modified : October 5th, 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\DB\SQL;
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_tm = Param::Get("Grup_InvID", 0);
if ( $data == "grup-detail" ) {
$atabel = ['Grup_InvID'=>0,'Margin'=>0,'Aktif'=>1];
if ($id_tm > 0) {
$db->Query("SELECT * FROM inv_produk_grup WHERE Grup_InvID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$tkode = $form->textbox("_", "Kode_Grup", $atabel['Kode_Grup'], true, true, "text", "kode grup produk");
$tnama = $form->textbox("_", "Nama_Grup", $atabel['Nama_Grup'], true, true, "text", "nama grup produk");
$tmargin = $form->textbox("_", "Margin", $atabel['Margin'], true, true, "double", "margin minimum");
$taktif = $form->switch("_", "Aktif", $atabel['Aktif'], true, false, ["1","0"]);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Kode_Grup">Kode Grup Barang</label>
<div class="col-sm-6 col-lg-5"><div class="input-group">'.$tkode.Form_Info("Merupakan 2 (dua) digit kode awal SKU. Contoh : 00.").'</div></div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Grup">Nama Grup Barang</label>
<div class="col">'.$tnama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Margin">Margin Minimal (%)</label>
<div class="col-sm-6 col-lg-5">'.$tmargin.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Aktif">Status Aktif ?</label>
<div class="col-sm-6 col-lg-5 col-form-label">'.$taktif.'</div>
</div>
<input type="hidden" id="Grup_InvID" value="'.$atabel['Grup_InvID'].'" >
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
} else if ( $data == "detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
$sql = new SQL($db);
$sql->set_table("inv_produk_grup");
$sql->add_param("Kode_Grup", isi_nol(Param::Get("Kode_Grup"),2));
$sql->add_param("Nama_Grup");
$sql->add_param("Margin");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("Grup_InvID");
if ($mode_detail=="insert") {
$sql->InsertDB();
} else if ($mode_detail=="update") {
$sql->UpdateDB();
} else if ($mode_detail=="delete") {
$sql->DeleteDB();
}
}
$tcari = trim(Param::Get("Cari_Grup"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(Kode_Grup,Nama_Grup) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM inv_produk_grup".$tsql);
$obj->add_field("Grup_InvID", "ID", "hid");
$obj->add_field("Kode_Grup", "Kode Grup", "c");
$obj->add_field("Nama_Grup", "Nama Grup Barang", "awr");
$obj->add_field("Margin", "Margin (%)", "r");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Kode_Grup", "A");
$obj->add_row_btn("clipboard", "Ubah", "ProdukGrupJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "ProdukGrupJS.detail_hapus");
$obj->set_func_navi("ProdukGrupJS.data_query('detail')");
$obj->set_func_btn("ProdukGrupJS.detail_tambah", "+ Grup Produk");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "kode-check") {
$ajson['ada'] = false;
$db->Query("SELECT COUNT(*) Item FROM inv_produk_grup WHERE Grup_InvID<>'".$id_tm."' AND Kode_Grup='".Param::Get("Kode_Grup")."'");
if ($db->Next()) {
if ($db->Row("Item", 0) > 0) $ajson['ada'] = true;
}
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Grup Barang</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Grup" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+100
View File
@@ -0,0 +1,100 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/tab/rek_pos.php
Desc. : PHP - Tabel Master Jenis Pembayaran POS
Created By : Siau Pheng ([email protected]).
Created Date : September 9th, 2014.
Last Modified : October 8th, 2025.
(c) 2014 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
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_tm = Param::Get("KartuID", 0);
if ( $data == "kartu-detail" ) {
$atabel = ['KartuID'=>0,'Aktif'=>1];
if ($id_tm > 0) {
$db->Query("SELECT * FROM para_rek_pos WHERE KartuID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$tkode = $form->textbox("_", "Kode_Kartu", $atabel['Kode_Kartu'], true, true, "text", "kode jenis pembayaran");
$tnama = $form->textbox("_", "Nama_Kartu", $atabel['Nama_Kartu'], true, true, "text", "nama jenis pembayaran");
$taktif = $form->switch("_", "Aktif", $atabel['Aktif'], true, false, ["1","0"]);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Kode_Kartu">Kode Jenis Pembayaran</label>
<div class="col-sm-6 col-lg-5">'.$tkode.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Kartu">Nama Jenis Pembayaran</label>
<div class="col">'.$tnama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Aktif">Status Aktif ?</label>
<div class="col-sm-6 col-lg-5 col-form-label">'.$taktif.'</div>
</div>
<input type="hidden" id="KartuID" value="'.$atabel['KartuID'].'" >
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
} else if ( $data == "detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
$sql = new SQL($db);
$sql->set_table("para_rek_pos");
$sql->add_param("Kode_Kartu");
$sql->add_param("Nama_Kartu");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("KartuID");
if ($mode_detail=="insert") {
$sql->InsertDB();
} else if ($mode_detail=="update") {
$sql->UpdateDB();
} else if ($mode_detail=="delete") {
$sql->DeleteDB();
}
}
$tcari = trim(Param::Get("Cari_Kartu"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(Kode_Kartu,Nama_Kartu) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM para_rek_pos".$tsql);
$obj->add_field("KartuID", "ID", "hid");
$obj->add_field("Kode_Kartu", "Kode");
$obj->add_field("Nama_Kartu", "Nama Jenis Pembayaran", "awr");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Kode_Kartu", "A");
$obj->add_row_btn("clipboard", "Ubah", "RekPOSJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "RekPOSJS.detail_hapus");
$obj->set_func_navi("RekPOSJS.data_query('detail')");
$obj->set_func_btn("RekPOSJS.detail_tambah", "+ Jenis Pembayaran");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Jenis Pembayaran POS</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Kartu" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+100
View File
@@ -0,0 +1,100 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/tab/satuan.php
Desc. : PHP - Tabel Master Satuan Barang
Created By : Siau Pheng ([email protected]).
Created Date : May 19th, 2010.
Last Modified : October 5th, 2025.
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
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_tm = Param::Get("SatuanID", 0);
if ( $data == "satuan-detail" ) {
$atabel = ['SatuanID'=>0,'Aktif'=>1];
if ($id_tm > 0) {
$db->Query("SELECT * FROM para_satuan WHERE SatuanID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$tkode = $form->textbox("_", "Kode_Satuan", $atabel['Kode_Satuan'], true, true, "text", "kode satuan barang");
$tnama = $form->textbox("_", "Nama_Satuan", $atabel['Nama_Satuan'], true, true, "text", "nama satuan barang");
$taktif = $form->switch("_", "Aktif", $atabel['Aktif'], true, false, ["1","0"]);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Kode_Satuan">Kode Satuan</label>
<div class="col-sm-6 col-lg-5">'.$tkode.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Satuan">Nama Satuan</label>
<div class="col">'.$tnama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Aktif">Status Aktif ?</label>
<div class="col-sm-6 col-lg-5 col-form-label">'.$taktif.'</div>
</div>
<input type="hidden" id="SatuanID" value="'.$atabel['SatuanID'].'" >
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
} else if ( $data == "detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
$sql = new SQL($db);
$sql->set_table("para_satuan");
$sql->add_param("Kode_Satuan");
$sql->add_param("Nama_Satuan");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("SatuanID");
if ($mode_detail=="insert") {
$sql->InsertDB();
} else if ($mode_detail=="update") {
$sql->UpdateDB();
} else if ($mode_detail=="delete") {
$sql->DeleteDB();
}
}
$tcari = trim(Param::Get("Cari_Satuan"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(Kode_Satuan,Nama_Satuan) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM para_satuan".$tsql);
$obj->add_field("SatuanID", "ID", "hid");
$obj->add_field("Kode_Satuan", "Kode");
$obj->add_field("Nama_Satuan", "Nama Satuan", "awr");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Kode_Satuan", "A");
$obj->add_row_btn("clipboard", "Ubah", "SatuanJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "SatuanJS.detail_hapus");
$obj->set_func_navi("SatuanJS.data_query('detail')");
$obj->set_func_btn("SatuanJS.detail_tambah", "+ Satuan");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Satuan Barang</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Satuan" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+103
View File
@@ -0,0 +1,103 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/tab/supplier.php
Desc. : PHP - Tabel Master Supplier
Created By : Siau Pheng ([email protected]).
Created Date : December 7th, 2010.
Last Modified : October 7th, 2025.
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
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 = Param::Get("mode");
$id_tm = Param::Get("SupID", 0);
if ( $data == "sup-detail" ) {
$atabel = ['SupID'=>0,'Aktif'=>1];
if ($id_tm > 0) {
$db->Query("SELECT * FROM para_supplier WHERE SupID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$form->textbox("Kode Supplier", "Kode_Sup", $atabel['Kode_Sup'], true, true, "text", "kode supplier");
$form->textbox("Nama Supplier", "Nama_Sup", $atabel['Nama_Sup'], true, true, "text", "nama supplier");
$form->textarea("Alamat Supplier", "Alamat_Sup", $atabel['Alamat_Sup'], true, true, 3, "alamat supplier");
$form->textbox("Kota Supplier", "Kota_Sup", $atabel['Kota_Sup'], true, true, "text", "kota supplier");
$form->textbox("Telp Supplier", "Telp_Sup", $atabel['Telp_Sup'], true, true, "text", "telp supplier");
$form->textbox("Email Supplier", "Email_Sup", $atabel['Email_Sup'], true, true, "text", "email supplier");
$form->textbox("Kontak Supplier", "Kontak_Sup", $atabel['Kontak_Sup'], true, true, "text", "kontak supplier");
$form->textbox("NPWP Supplier", "No_NPWP", $atabel['No_NPWP'], true, true, "text", "0000000000000000", 16);
$form->textbox("NITKU Supplier", "No_NITKU", $atabel['No_NITKU'], true, true, "text", "000000", 6);
$form->switch("Status Aktif", "Aktif", $atabel['Aktif'], true, false, ["1","0"]);
$form->hidden("SupID", $atabel['SupID']);
$form->hidden("mode", $mode);
$form->show(' _Kode_Sup_ _Nama_Sup_ _Alamat_Sup_ _Kota_Sup_ _Telp_Sup_ _Email_Sup_ _Kontak_Sup_ _No_NPWP_ _No_NITKU_ _Aktif_ _mode_ _SupID_ ');
} else if ( $data == "save" ) {
$sql = new SQL($db);
$sql->set_table("para_supplier");
$sql->add_param("Kode_Sup");
$sql->add_param("Nama_Sup");
$sql->add_param("Alamat_Sup");
$sql->add_param("Kota_Sup");
$sql->add_param("Telp_Sup");
$sql->add_param("Email_Sup");
$sql->add_param("Kontak_Sup");
$sql->add_param("No_NPWP");
$sql->add_param("No_NITKU");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("SupID");
if ($mode=="add") {
$sql->InsertDB();
} else if ($mode=="edit") {
$sql->UpdateDB();
} else if ($mode=="del") {
$sql->DeleteDB();
}
$ajson['status'] = true;
} else if ( $data == "detail" ) {
$tcari = trim(Param::Get("Cari_Sup"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(Kode_Sup,Nama_Sup,Telp_Sup) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM para_supplier".$tsql);
$obj->add_field("SupID", "ID", "hid");
$obj->add_field("Kode_Sup", "Kode Supplier");
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
$obj->add_field("Telp_Sup", "No. Telp", "l");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Kode_Sup", "A");
$obj->add_row_btn("clipboard", "Ubah", "SupplierJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "SupplierJS.detail_hapus");
$obj->set_func_navi("SupplierJS.data_query('detail')");
$obj->set_func_btn("SupplierJS.detail_tambah", "+ Supplier");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Supplier</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Sup" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+109
View File
@@ -0,0 +1,109 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/tab/tx_kas.php
Desc. : PHP - Tabel Master Jenis Transaksi Kas
Created By : Siau Pheng ([email protected]).
Created Date : July 7th, 2015.
Last Modified : October 8th, 2025.
(c) 2015 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
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_tm = Param::Get("TXID", 0);
if ( $data == "tx-detail" ) {
$atabel = ['TXID'=>0,'Aktif'=>1];
if ($id_tm > 0) {
$db->Query("SELECT * FROM para_tx_kas WHERE TXID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$tgrup = $form->option("_", "Grup_TX", $atabel['Grup_TX'], true, false, ['I'=>"Kas Masuk",'O'=>"Kas Keluar"]);
$tkode = $form->textbox("_", "Kode_TX", $atabel['Kode_TX'], true, false, "text", "kode jenis kas");
$tnama = $form->textbox("_", "Nama_TX", $atabel['Nama_TX'], true, false, "text", "nama jenis transaksi kas");
$taktif = $form->switch("_", "Aktif", $atabel['Aktif'], true, false, ["1","0"]);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Grup_TX">Grup Transaksi</label>
<div class="col">'.$tgrup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Kode_TX">Kode Jenis Kas</label>
<div class="col-sm-6 col-lg-5">'.$tkode.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_TX">Nama Jenis Transaksi Kas</label>
<div class="col">'.$tnama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Aktif">Status Aktif ?</label>
<div class="col-sm-6 col-lg-5 col-form-label">'.$taktif.'</div>
</div>
<input type="hidden" id="TXID" value="'.$atabel['TXID'].'" >
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
} else if ( $data == "detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
$sql = new SQL($db);
$sql->set_table("para_tx_kas");
$sql->add_param("Grup_TX");
$sql->add_param("Kode_TX");
$sql->add_param("Nama_TX");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("TXID");
if ($mode_detail=="insert") {
$sql->InsertDB();
} else if ($mode_detail=="update") {
$sql->UpdateDB();
} else if ($mode_detail=="delete") {
$sql->DeleteDB();
}
}
$tcari = trim(Param::Get("Cari_TX"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(Kode_TX,Nama_TX) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM para_tx_kas".$tsql);
$obj->add_field("TXID", "ID", "hid");
$obj->add_field("Grup_TX", "Grup Transaksi", "l", ['I'=>"Kas Masuk",'O'=>"Kas Keluar"]);
$obj->add_field("Kode_TX", "Kode", "l");
$obj->add_field("Nama_TX", "Nama Jenis Transaksi Kas", "awr");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_row_color("Grup_TX", "I", "rgreen");
$obj->set_row_color("Grup_TX", "O", "ryellow");
$obj->set_field_order("Kode_TX", "A");
$obj->add_row_btn("clipboard", "Ubah", "TXKasJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "TXKasJS.detail_hapus");
$obj->set_func_navi("TXKasJS.data_query('detail')");
$obj->set_func_btn("TXKasJS.detail_tambah", "+ Jenis Transaksi Kas");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Jenis Transaksi Kas</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_TX" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>