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
+171
View File
@@ -0,0 +1,171 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/iss/opname_barang.php
Desc. : PHP - Transaksi Penyesuaian Stok Per Barang
Created By : Siau Pheng ([email protected]).
Created Date : October 22nd, 2014.
Last Modified : September 21st, 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\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");
$id_cab = $_SESSION['__APP_INV']['CABANGID'];
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 == "scan-produk") {
$tcari = Param::Get("Cari_Produk");
$ahasil = [];
$bcode = 0;
// Cari by SKU
$db->Query("SELECT P.InvID,K.Kode_SKU,K.Kode_Barcode,P.Nama_Produk,S.Nama_Satuan 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;
$ahasil = $db->AllRow();
}
// Cari by Barcode
if ($bcode == 0) {
$db->Query("SELECT P.InvID,K.Kode_SKU,K.Kode_Barcode,P.Nama_Produk,S.Nama_Satuan 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()) {
$ahasil = $db->AllRow();
}
}
if (count($ahasil) > 0) {
$db->Query("SELECT SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".tgl_ymd()."' AND CabID='".$id_cab."' AND InvID='".$ahasil['InvID']."'");
if ($db->Next()) $ahasil['Stok_Sistem'] = $db->RowFloat("Stok", 2);
}
$ajson['InvID'] = $ahasil['InvID'];
$ajson['Kode_Barang'] = $ahasil['Kode_SKU']." / ".$ahasil['Kode_Barcode'];
$ajson['Nama_Barang'] = $ahasil['Nama_Produk'];
$ajson['Nama_Satuan'] = $ahasil['Nama_Satuan'];
$ajson['Stok_Sistem'] = $ahasil['Stok_Sistem'];
} 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", "OpnameBarangJS.produk_select");
$obj->set_func_navi("OpnameBarangJS.data_query('brow-produk')");
$ajson[] = $obj->db_table("divBrowProduk");
} else if ( $data == "cek_stok") {
$id_inv = Param::Get("InvID", 0);
$stok = 0;
$db->Query("SELECT SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".tgl_ymd()."' AND CabID='".$id_cab."' AND InvID='".$id_inv."'");
if ($db->Next()) $stok = $db->RowFloat("Stok", 2);
$ajson[] = ['type'=>"form", 'id'=>"Stok_Sistem", 'value'=>rupiah2($stok)];
} else if ( $data == "simpan-opname") {
$nomor = ""; $id_inv = Param::Get("InvID", 0); $stok = Param::Get("Stok_Fisik", 0) * 1;
$db->Query("SELECT * FROM inv_opname WHERE Tgl_Opname=CURDATE() AND CabID='".$id_cab."' AND UserID='".user_id()."' ORDER BY No_Opname DESC LIMIT 1");
if ($db->Next()) $nomor = $db->Row("No_Opname");
if ($nomor == "") {
$nomor = Nomor_Baru("O", tgl_dmy(), true);
$db->Query("UPDATE inv_opname SET Tgl_Opname=CURDATE(), CabID='".$id_cab."', Catatan='OPNAME USER : ".user_id()." - ".user_nama()."', UserID='".user_id()."' WHERE No_Opname='".$nomor."' LIMIT 1");
}
$aproduk = [];
$db->Query("SELECT * FROM inv_produk WHERE InvID='".$id_inv."' LIMIT 1");
if($db->Next()) $aproduk = $db->AllRow();
$db->Query("SELECT SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".tgl_ymd()."' AND CabID='".$id_cab."' AND InvID='".$id_inv."'");
if ($db->Next()) $stok -= $db->RowFloat("Stok", 0);
$sql = new SQL($db);
$sql->set_table("inv_detail");
$sql->add_param("No_Ref", $nomor);
$sql->add_param("Tgl_Ref", "CURDATE()", true);
$sql->add_param("NotaID", 1);
$sql->add_param("CabID", $id_cab);
$sql->add_param("InvID", $aproduk['InvID']);
$sql->add_param("SatuanID", $aproduk['StokID']);
$sql->add_param("Qty", $stok);
$sql->add_param("Stok", $stok);
$sql->add_param("Harga_Beli", $aproduk['Harga_Pokok']);
$sql->add_param("Harga_Jual", $aproduk['Harga_Pokok']);
$sql->add_param_userid();
$sql->InsertDB();
$ajson['Status'] = true;
} else if ( $data == "default") {
$form = new Form($db);
$tbrg = $form->textauto("_", "Nama_Produk", null, true, true, "Scan Barcode / Ketik Nama Barang");
$tkode = $form->textbox("_", "Kode_Barang", "KODE_SKU / KODE_BARCODE", false, false, "text");
$tnama = $form->textbox("_", "Nama_Barang", "NAMA_BARANG", false, false, "text");
$tsat = $form->textbox("_", "Nama_Satuan", "SATUAN", false, false, "text");
$tssis = $form->textbox("_", "Stok_Sistem", "0", false, false, "double");
$tsfis = $form->textbox("_", "Stok_Fisik", "0", true, false, "double");
if (isMobile()) {
echo '
<div class="row mb-1"><div class="col"><div id="qr-reader"></div></div></div>
<hr class="my-2">
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Kode SKU / Barcode</div><div class="col"><div class="input-group">'.$tkode.'<button class="btn btn-info shadow-none" type="button" id="butBrow"><i class="bi-search"></i></button></div></div></div>
';
} else {
echo '
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Kunci Pencarian</div><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>
<hr class="my-2">
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Kode SKU / Barcode</div><div class="col">'.$tkode.'</div></div>
';
}
echo '
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Nama Barang</div><div class="col">'.$tnama.'</div></div>
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Satuan</div><div class="col">'.$tsat.'</div></div>
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Stok Sistem</div><div class="col-sm-8 col-lg-6">'.$tssis.'</div></div>
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Stok Fisik</div><div class="col-sm-8 col-lg-6">'.$tsfis.'</div></div>
<input type="hidden" id="InvID" value="0" />';
}
send_json($ajson);
?>