first commit

This commit is contained in:
2026-01-22 13:38:42 +07:00
commit ab311c5c95
91 changed files with 8064 additions and 0 deletions
+140
View File
@@ -0,0 +1,140 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/iss/cekharga.php
Desc. : PHP - Informasi Barang & Harga Jual
Created By : Siau Pheng ([email protected]).
Created Date : October 22nd, 2014.
Last Modified : January 4th, 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");
$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,CONVERT(FORMAT(K.Harga_Jual,0) USING UTF8) Harga_Jual 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,CONVERT(FORMAT(K.Harga_Jual,0) USING UTF8) Harga_Jual 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();
}
}
$ahasil['Nama_Supplier'] = "BELUM ADA";
if (count($ahasil) > 0) {
$db->Query("SELECT S.Nama_Sup Nama FROM para_supplier S WHERE S.SupID=(SELECT SupID FROM inv_produk_sup WHERE InvID='".$ahasil['InvID']."' LIMIT 1)");
if ($db->Next()) $ahasil['Nama_Supplier'] = $db->Row("Nama");
}
$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['Harga_Jual'] = $ahasil['Harga_Jual'];
$ajson['Nama_Supplier'] = $ahasil['Nama_Supplier'];
} 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", "CekHargaJS.produk_select");
$obj->set_func_navi("CekHargaJS.data_query('brow-produk')");
$ajson[] = $obj->db_table("divBrowProduk");
} else if ( $data == "cek_supplier") {
$n_sup = "BELUM ADA";
$db->Query("SELECT S.Nama_Sup Nama FROM para_supplier S WHERE S.SupID=(SELECT SupID FROM inv_produk_sup WHERE InvID='".Param::Get("InvID",0)."' LIMIT 1)");
if ($db->Next()) $n_sup = $db->Row("Nama");
$ajson[] = ['type'=>"form", 'id'=>"Nama_Supplier", 'value'=>$n_sup];
} 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");
$tharga = $form->textbox("_", "Harga_Jual", "", false, false, "text");
$tsup = $form->textbox("_", "Nama_Supplier", "", false, false, "text");
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">Harga Jual @</div><div class="col">'.$tharga.'</div></div>
<div class="row mb-1"><div class="col-sm-3 col-lg-3 col-form-label">Supplier</div><div class="col">'.$tsup.'</div></div>
<input type="hidden" id="InvID" value="0" />';
}
send_json($ajson);
?>
+303
View File
@@ -0,0 +1,303 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/iss/opname.php
Desc. : PHP - Transaksi Opname Stok Barang
Created By : Siau Pheng ([email protected]).
Created Date : May 24th, 2010.
Last Modified : September 29th, 2025.
(c) 2010 - 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 = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$id_cab = Param::Get("CabID", $_SESSION['__APP_INV']['CABANGID']);
$nomor = Param::Get("No_Opname", "");
if ( $data == "master" ) {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['No_Opname'=>$nomor, 'CabID'=>$id_cab];
if ($mode == "add") {
$atabel['No_Opname'] = "TO-BARU#".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
$atabel['Tgl_Opname'] = tgl_ymd();
$nomor = "";
} else if ($mode == "edit") {
Detail_Copy($nomor);
} else if ($mode == "save") {
$no_lama = $nomor;
$b_baru = (strpos($no_lama,"BARU")===false) ? false : true;
if ($b_baru) $nomor = Nomor_Baru("O", Param::Get("Tgl_Opname"), true);
Detail_Save($nomor, 1, $id_cab, Param::Get("Tgl_Opname"), $b_baru, $no_lama);
$sql = new SQL($db);
$sql->set_table("inv_opname");
$sql->add_param_date("Tgl_Opname");
$sql->add_param("CabID");
$sql->add_param("Catatan");
$sql->add_param_userid();
$sql->add_where("No_Opname", $nomor);
$sql->UpdateDB();
$mode = "view";
} else if ($mode == "cancel") {
Detail_Cancel($nomor);
$mode = "view";
$nomor = ""; $atabel['No_Opname'] = "";
}
if ($nomor <> "" && $mode <> "cancel") {
$db->Query("SELECT * FROM inv_opname WHERE No_Opname='".$nomor."'");
if (!$db->Next()) {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
} else $atabel = array_merge($atabel, $db->AllRow());
}
$enable = in_array($mode, ["add","edit"]) ? true : false;
$form = new Form($db);
$tnota = $form->textbox("_", "No_Opname", $atabel['No_Opname'], !$enable, false, "text", "nomor transaksi");
$ttgl = $form->datebox("_", "Tgl_Opname", $atabel['Tgl_Opname'], $enable, false);
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], false, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"&nbsp;"]);
$tcatat = $form->textbox("_", "Catatan", $atabel['Catatan'], $enable, false, "text");
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Opname">Nomor Transaksi</label>
<div class="col"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="OpnameJS.tx_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Opname">Tanggal Transaksi</label>
<div class="col-sm-7 col-lg-5">'.$ttgl.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 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-5 col-lg-3 col-form-label" for="Catatan">Catatan</label>
<div class="col">'.$tcatat.'</div>
</div>
</div>
</div>
<hr class="my-1">
<input type="hidden" id="mode" value="'.$mode.'" >';
} else if ( $data == "delete" ) {
$db->Query("DELETE FROM inv_opname WHERE No_Opname='".$nomor."'");
$db->Query("DELETE FROM inv_detail WHERE No_Ref='".$nomor."'");
$ajson['status'] = true;
} else if ( $data == "tabel-detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
$iqty = doubleval(Param::Get("Qty", 0)); $istok = $iqty;
$db->Query("SELECT Qty FROM inv_produk_kemasan WHERE InvID='".Param::Get("InvID")."' AND SatuanID='".Param::Get("SatuanID")."'");
if ($db->Next()) $istok = $db->RowFloat("Qty", 1) * $iqty;
$sql = new SQL($db);
$sql->set_table("tmp_inv_detail");
$sql->add_param("InvID");
$sql->add_param("SatuanID");
$sql->add_param("Qty", $iqty);
$sql->add_param("Stok", $istok);
$sql->add_param("Harga_Beli");
$sql->add_param("Harga_Jual", Param::Get("Harga_Beli", 0));
$sql->add_param_unix();
$sql->add_param_userid();
$sql->add_where("ID");
$sql->add_where("No_Ref", $nomor);
if ( $mode_detail == "insert" ) {
$sql->add_param("No_Ref", $nomor);
$sql->InsertDB();
} else if ( $mode_detail == "update" ) {
$sql->UpdateDB();
} else if ( $mode_detail == "delete" ) {
$sql->DeleteDB();
}
}
$qview = ""; $qtabel = "inv_detail";
if (in_array($mode, ["add","edit"])) {
if ($mode=="add") $qview = " AND Unix=".user_unix();
$qtabel = "tmp_inv_detail";
}
$obj = new Table($db);
$obj->set_query("SELECT D.*,P.Kode_SKU,P.Nama_Produk,P.Nama_Satuan FROM (SELECT * FROM ".$qtabel." WHERE No_Ref='".$nomor."'".$qview.") D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID)");
$obj->add_field("ID", "ID", "hid");
$obj->add_field("Kode_SKU", "SKU", "c");
$obj->add_field("Nama_Produk", "Nama Barang", "awr");
$obj->add_field("Qty", "Qty", "r", "rupiah2");
$obj->add_field("Nama_Satuan", "Satuan", "l");
$obj->set_field_order("Kode_SKU", "A");
if (in_array($mode, ["add","edit"])) {
$obj->add_row_btn("clipboard", "Ubah", "OpnameJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "OpnameJS.detail_hapus", "Unix", user_unix());
$obj->set_func_btn("OpnameJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Barang');
$obj->set_func_btn("OpnameJS.produk_brow", '<i class="bi-table me-1"></i> Browse');
}
$obj->set_func_navi("OpnameJS.data_query('tabel-detail')");
$ajson[] = $obj->json_table("divDetailTabel");
} else if ( $data == "brow-tx" ) {
$tcari = trim(Param::Get("Cari_TX"));
$tsql = ($tcari=="") ? "" : " AND CONCAT(No_Opname,DATE_FORMAT(Tgl_Opname,'%d-%m-%Y')) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("(SELECT * FROM inv_opname WHERE CabID='".$id_cab."'".$tsql.") O LEFT JOIN para_cabang C ON (C.CabID=O.CabID)", "O.*,C.Kode_Cab", "");
$obj->add_field("No_Opname", "No. Transaksi", "c");
$obj->add_field("Tgl_Opname", "Tgl. Transaksi", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Kode_Cab", "Cab", "c");
$obj->add_field("Catatan", "Catatan", "awr");
$obj->set_field_order("No_Opname", "D");
$obj->add_row_btn("save", "Pilih", "OpnameJS.tx_select");
$obj->set_func_navi("OpnameJS.data_query('brow-tx')");
$ajson[] = $obj->db_table("divBrowTX");
} else if ( $data == "brow-produk" ) {
$tcari = trim(Param::Get("Cari_Produk"));
$ttgl = Param::Get("Tgl_Opname");
$tsql = ($tcari=="") ? "" : " AND CONCAT(P.Kode_Barcode,P.Nama_Produk) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("(SELECT InvID,SatuanID,SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".$ttgl."' AND CabID='".$id_cab."' GROUP BY InvID) D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID)", "D.InvID,P.StokID,D.Stok,P.Kode_SKU,P.Nama_Produk,P.Harga_Pokok", "P.Aktif=1".$tsql);
$obj->add_field("InvID", "InvID", "hid");
$obj->add_field("StokID", "StokID", "hid");
$obj->add_field("Harga_Pokok", "HPP", "hid");
$obj->add_field("Kode_SKU", "SKU", "c");
$obj->add_field("Nama_Produk", "Nama Barang", "l");
$obj->add_field("Stok", "Stok", "r");
$obj->set_field_order("Kode_SKU", "A");
$obj->add_row_btn("save", "Pilih", "OpnameJS.produk_select");
$obj->set_func_navi("OpnameJS.data_query('brow-produk')");
$ajson[] = $obj->db_table("divBrowProduk");
} else if ( $data == "auto-produk" ) {
$tcari = Param::Get("Auto_Query");
$ttgl = Param::Get("Tgl_Opname");
$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,':',K.SatuanID,':',CONVERT(FORMAT(P.Harga_Pokok/K.Qty,2) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE 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,':',K.SatuanID,':',CONVERT(FORMAT(P.Harga_Pokok/K.Qty,2) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE 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,S.Nama_Satuan,CONCAT(K.Kode_SKU,' / ',K.Kode_Barcode,':',P.Nama_Produk,':',S.Nama_Satuan,':',K.SatuanID,':',CONVERT(FORMAT(P.Harga_Pokok/K.Qty,2) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE 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 (SELECT InvID,SUM(Stok) Stok FROM inv_detail WHERE Tgl_Ref<='".tgl_sql2str($ttgl)."' AND CabID='".$id_cab."' GROUP BY InvID) X ON (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").' <span class="text-danger">('.$db->Row("Sisa_Stok").')</span>', 'data'=>$db->Row("Data2"), 'bc'=>0];
}
}
} else if ($data == "detail-produk") {
$id = Param::Get("ID", 0); $atabel = ['ID'=>$id, 'InvID'=>Param::Get("InvID"), 'SatuanID'=>Param::Get("SatuanID"), 'HPP'=>Param::Get("HPP")];
if ($id > 0) {
$db->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND ID='".$id."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
}
if ($atabel['InvID']>0 && $atabel['SatuanID']>0) {
$db->Query("SELECT Kode_SKU,Kode_Barcode,Nama_Produk,Nama_Satuan FROM vi_inv_produk WHERE InvID='".$atabel['InvID']."' AND SatuanID='".$atabel['SatuanID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
}
$form = new Form($db);
$tnama = $form->textauto("_", "Nama_Produk", ['value'=>$atabel['InvID'],'text'=>$atabel['Nama_Produk']], true, true, "ketik sku / barcode / nama barang");
$tkode = $form->textbox("_", "Kode_Barang", $atabel['Kode_SKU']." / ".$atabel['Kode_Barcode'], false, false, "text");
$tqty = $form->textbox("_", "Qty", $atabel['Qty'], true, true, "double");
$tstok = $form->textbox("_", "Stok_Sistem", 0, false, false, "double");
$tsat = $form->textbox("_", "Nama_Satuan", $atabel['Nama_Satuan'], false, false, "text");
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label">Kode SKU / Barcode</label>
<div class="col">'.$tkode.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 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-3 col-form-label">Satuan</label>
<div class="col">'.$tsat.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label">Stok Sistem</label>
<div class="col-sm-8 col-lg-6">'.$tstok.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Qty">Qty Koreksi (+/-)</label>
<div class="col-sm-8 col-lg-6">'.$tqty.'</div>
</div>
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'" >
<input type="hidden" id="SatuanID" value="'.$atabel['SatuanID'].'" >
<input type="hidden" id="Harga_Beli" value="'.$atabel['HPP'].'" >
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
} 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_sql2str(Param::Get("Tgl_Opname"))."' 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 == "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-database me-2"></i>Transaksi Penyesuaian Stok</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
<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-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-save me-2"></i>Simpan</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="divTXMaster">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+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);
?>
+552
View File
@@ -0,0 +1,552 @@
<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/pos/pos.php
Desc. : PHP - Transaksi Penjualan / Kasir POS
Created By : Siau Pheng ([email protected]).
Created Date : August 5th, 2012.
Last Modified : January 21st, 2026.
(c) 2012 - 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 master_show($tmode = "", $apara = []) {
global $db;
$form = new Form($db);
$tno_jual = $form->textbox("_", "No_Jual", $apara['No_Jual'], false);
$tinfo = '<div class="card bg-light"><img class="img-fluid p-1" src="'.$_SESSION['__WEB_APP']['WEB_PATH'].'assets/images/logo60.png" style="opacity:.75;"></div>';
echo '
<div class="row mb-3">
<div class="col"><div class="border border-success rounded pe-2 display-6 text-end" id="Total_Disp">'.$apara['Kembali'].'</div></div>
</div>
<div class="row mb-1"><div class="col">'.$tinfo.'</div></div>
<div class="row mb-1">
<div class="col">
<div class="input-group">'.$tno_jual.'
<button class="btn btn-info shadow-none" type="button" id="posPEND"><i class="bi-search"></i></button>
</div>
</div>
</div>
<div class="row mb-1 mt-4"><div class="col d-grid gap-2">
<button type="button" class="btn btn-success" id="posSIMPAN"><i class="bi-cart-plus me-1"></i>Bayar</button>
<button type="button" class="btn btn-danger" id="posBATAL"><i class="bi-x-lg me-1"></i>Batal</button>
</div></div>
<div class="row mb-1 mt-4"><div class="col d-grid gap-2">
<button type="button" class="btn btn-outline-info" id="posNOTA"><i class="bi-list me-1"></i>Daftar Transaksi</button>
<button type="button" class="btn btn-outline-info" id="posBARANG"><i class="bi-search me-1"></i>Cari Barang</button>
<button type="button" class="btn btn-outline-info" id="posTAMBAH"><i class="bi-save me-1"></i>Tambah Barang</button>
</div></div>
<input type="hidden" id="No_Cetak" value="'.$apara['No_Cetak'].'" />
<input type="hidden" id="Total_Tunai" value="'.$apara['Total_Tunai'].'" />
<input type="hidden" id="Total_Kartu" value="'.$apara['Total_Kartu'].'" />
<input type="hidden" id="Total_Bayar" value="'.$apara['Total_Bayar'].'" />
<input type="hidden" id="Total_Nota" value="'.$apara['Total_Nota'].'" />
<input type="hidden" id="Total_Item" value="'.$apara['Total_Item'].'" />
<input type="hidden" id="Tgl_Jual" value="'.tgl_sql2str($apara['Tgl_Jual']).'" />
<input type="hidden" id="KartuID" value="'.$apara['KartuID'].'" />
<input type="hidden" id="No_Kartu" value="'.$apara['No_Kartu'].'" />
<input type="hidden" id="Nama_Kartu" value="'.$apara['Nama_Kartu'].'" />
<input type="hidden" id="mode" value="'.$tmode.'" />';
}
function Data_Jual1($nomor="") {
global $db;
$aparam = [];
if (trim($nomor)=="") {
$aparam['No_Jual'] = "POS".$_SESSION['__WEB_APP']['SERVER_ID'].$_SESSION['__APP_INV']['CABANGID'].user_id(3)."#00";
$aparam['Tgl_Jual'] = tgl_ymd();
$aparam['Total_Nota'] = 0;
$aparam['Total_Item'] = 0;
$aparam['Total_Tunai'] = 0;
$aparam['Total_Kartu'] = 0;
$aparam['Total_Bayar'] = 0;
$aparam['KartuID'] = 0;
$aparam['No_Kartu'] = "";
$aparam['Nama_Kartu'] = "";
$aparam['Kembali'] = 0;
$aparam['No_Cetak'] = "";
} else {
$tabel_jual = (strpos($nomor,"POS")===false) ? "inv_jual" : "inv_jual_pend";
$db->Query("SELECT * FROM ".$tabel_jual." WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."' AND No_Jual='".$nomor."'");
if ($db->Next()) $aparam = $db->AllRow();
}
return $aparam;
}
function Nomor_Pending1() {
global $db;
$tno = "POS".$_SESSION['__WEB_APP']['SERVER_ID'].$_SESSION['__APP_INV']['CABANGID'].user_id(3)."#";
$ino = 0;
$db->Query("SELECT MAX(RIGHT(No_Jual,2)) Nomor FROM inv_jual_pend WHERE LEFT(No_Jual,".strlen($tno).")='".$tno."'");
if ($db->Next()) $ino = intval($db->Row("Nomor", 0));
$tno .= isi_nol(++$ino, 2);
return $tno;
}
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode");
$mode_detail = Param::Get("mode_detail");
$id_cab = $_SESSION['__APP_INV']['CABANGID'];
$id_other = $_SESSION['__APP_INV']['OTHERINVID'];
$nomor = Param::Get("No_Jual");
$no_cetak = Param::Get("No_Cetak");
if ( $data == "master" ) {
$aparam = [];
if ($mode == "pending-edit") {
Pending_Edit($nomor);
$aparam = Data_Jual1($nomor);
} else if ($mode == "pending-save") {
$b_baru = false;
if (substr($nomor,-3)=="#00") {
$b_baru = true;
$no_lama = $nomor;
$nomor = Nomor_Pending1();
Pending_Save($no_lama, $nomor);
}
$apending = [];
$db->Query("SELECT SUM(-Qty*Harga_Jual) Jual,SUM(Total_Diskon) Diskon FROM tmp_inv_detail WHERE No_Ref='".$nomor."'");
if ($db->Next()) $apending = $db->AllRow();
$sql = new SQL($db);
$sql->set_table("inv_jual_pend");
$sql->add_param("No_Jual", $nomor);
$sql->add_param_date("Tgl_Jual");
$sql->add_param("CabID", $id_cab);
$sql->add_param("Total_Jual", $apending['Jual']);
$sql->add_param("Total_Diskon", $apending['Diskon']);
$sql->add_param_userid();
$sql->add_where("No_Jual", $nomor);
if ($b_baru) $sql->InsertDB();
else $sql->UpdateDB();
$aparam = Data_Jual1();
} else if ($mode == "pending-delete") {
Pending_Delete($nomor);
$db->Query("DELETE FROM inv_jual_pend WHERE No_Jual='".$nomor."'");
$aparam = Data_Jual1();
} else if ($mode == "edit") {
Detail_Copy($nomor, true);
$db->Query("INSERT INTO tmp_inv_detail_lain SELECT No_Ref,ID,Ket,UserID,'".user_unix()."' FROM inv_detail_lain WHERE No_Ref='".$nomor."'");
$aparam = Data_Jual1($nomor);
} else if ($mode == "save") {
$no_lama = $nomor;
$b_baru = (strpos($no_lama,"POS")===false) ? false : true;
if ($b_baru) {
$nomor = Nomor_POS_Baru("", true);
if (substr($no_lama,-3)!="#00") $db->Query("DELETE FROM inv_jual_pend WHERE No_Jual='".$no_lama."'");
}
Promo_Barang($no_lama, tgl_dmy());//PROMO BARANG
$tot_potong = Promo_Total($no_lama, tgl_dmy());//PROMO TOTAL
Detail_Save($nomor, 5, $id_cab, tgl_dmy(), $b_baru, $no_lama);
$db->Query("DELETE FROM inv_detail_lain WHERE No_Ref='".$nomor."'");
$db->Query("INSERT INTO inv_detail_lain SELECT '".$nomor."',ID,Ket,UserID FROM tmp_inv_detail_lain WHERE No_Ref='".$no_lama."'");
$db->Query("DELETE FROM tmp_inv_detail_lain WHERE No_Ref='".$no_lama."'");
$ajual = [];
$db->Query("SELECT SUM(-Qty*Harga_Jual) Jual,SUM(Total_Diskon) Diskon,SUM(-Qty*Harga_Beli) HPP FROM inv_detail WHERE No_Ref='".$nomor."'");
if ($db->Next()) $ajual = $db->AllRow();
$id_kartu = Param::Get("KartuID", 0);
$no_kartu = ""; $nama_kartu = "";
if ($id_kartu > 0) {
$no_kartu = Param::Get("No_Kartu", "");
$nama_kartu = Param::Get("Nama_Kartu", "");
}
$sql = new SQL($db);
$sql->set_table("inv_jual");
$sql->add_param("Tgl_Jual", tgl_ymd());
$sql->add_param("Tgl_Lunas", tgl_ymd());
$sql->add_param("Total_Jual", $ajual['Jual']);
$sql->add_param("Total_Diskon", $ajual['Diskon']);
$sql->add_param("Total_Potong", $tot_potong);
$sql->add_param("Total_HPP", $ajual['HPP']);
$sql->add_param("Total_Bayar");
$sql->add_param("Total_Kartu");
$sql->add_param("KartuID", $id_kartu);
$sql->add_param("No_Kartu", $no_kartu);
$sql->add_param("Nama_Kartu", $nama_kartu);
$sql->add_param("CabID", $id_cab);
$sql->add_param_stamp();
$sql->add_param_userid();
$sql->add_where("No_Jual", $nomor);
$sql->UpdateDB();
Promo_Nota_Proses($nomor, tgl_dmy());//PROMO NOTA
if ($_SESSION['__APP_INV']['PRINT_AUTO']==1) {
$mode = "print";
} else {
$mode = ($_SESSION['__APP_INV']['PRINT_OPENCD']==1) ? "opencd" : "saveonly";
}
$aparam = Data_Jual1();
$aparam['No_Cetak'] = $nomor;
$aparam['Kembali'] = "0";
$db->Query("SELECT (Total_Jual-Total_Diskon-Total_Potong-Total_Bayar) Sisa FROM inv_jual WHERE No_Jual='".$nomor."'");
if ($db->Next()) $aparam['Kembali'] = '<span style="color:red;">'.rupiah($db->RowFloat("Sisa", 0)).'</span>';
//MONITOR DISPLAY
if ($_SESSION['__APP_INV']['MON_ENABLE']) {
$db->Query("UPDATE disp_login SET No_Cetak='".$nomor."' WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."' AND UserID='".user_id()."' AND Unix='".user_unix()."'");
}
} else if ($mode == "delete") {
// PROSES UPDATE PROMO
$tgl_jual = tgl_ymd();
$db->Query("SELECT Tgl_Jual FROM inv_jual WHERE No_Jual='".$nomor."'");
if ($db->Next()) $tgl_jual = $db->Row("Tgl_Jual");
Promo_Hapus($nomor, tgl_sql2str($tgl_jual));
Promo_Nota_Hapus($nomor);
$db->Query("DELETE FROM inv_jual WHERE No_Jual='".$nomor."'");
$db->Query("DELETE FROM inv_detail WHERE No_Ref='".$nomor."'");
$db->Query("DELETE FROM inv_detail_lain WHERE No_Ref='".$nomor."'");
$aparam = Data_Jual1();
} else if ($mode == "cancel") {
if (substr($nomor,-3)=="#00" || substr($nomor,0,3)!="POS") Detail_Cancel($nomor);
$aparam = Data_Jual1();
} else {
$aparam = Data_Jual1();
}
//MONITOR DISPLAY
if ($_SESSION['__APP_INV']['MON_ENABLE']) {
$db->Query("UPDATE disp_login SET No_Pos='".$aparam['No_Jual']."' WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."' AND UserID='".user_id()."' AND Unix='".user_unix()."'");
}
master_show($mode, $aparam);
} else if ( $data == "detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
$id_inv = Param::Get("InvID", 0);
$id_sat = Param::Get("SatuanID", 0);
$iqty = Param::Get("Qty", 0) * -1;
$dhargaD = Param::Get("Harga_Diskon", 0);
$ddiskP = Param::Get("Persen_Diskon", 0);
$istok = 1;
$db->Query("SELECT Qty FROM inv_produk_kemasan WHERE InvID='".$id_inv."' AND SatuanID='".$id_sat."'");
if ($db->Next()) $istok = $db->Row("Qty", 1);
if ($ddiskP > 0) $dhargaD = Param::Get("Harga_Jual",0) * $ddiskP * 0.01;
$sql = new SQL($db);
$sql->set_table("tmp_inv_detail");
$sql->add_param("No_Ref", $nomor);
$sql->add_param("InvID");
$sql->add_param("SatuanID");
$sql->add_param("Qty", $iqty);
$sql->add_param("Stok", ($istok*$iqty));
$sql->add_param("Harga_Beli");
$sql->add_param("Harga_Jual");
$sql->add_param("Disk_Rupiah", $dhargaD);
$sql->add_param("Total_Diskon", "Disk_Rupiah*-Qty", true);
$sql->add_param_unix();
$sql->add_param_userid();
$sql->add_where("ID");
$sql->add_where("No_Ref", $nomor);
$_id = Param::Get("ID", 0);
$_ket = strtoupper(Param::Get("Ket"));
if ( $mode_detail == "insert" ) {
$sql->InsertDB();
if ($id_inv == $id_other) {
$_id = $sql->LastInsertID();
$db->Query("INSERT INTO tmp_inv_detail_lain (No_Ref,ID,Ket,UserID,Unix) VALUES ('".$nomor."','".$_id."','".$_ket."','".user_id()."','".user_unix()."')");
}
} else if ( $mode_detail == "update" ) {
$sql->UpdateDB();
if ($id_inv == $id_other) $db->Query("UPDATE tmp_inv_detail_lain SET Ket='".$_ket."' WHERE No_Ref='".$nomor."' AND ID='".$_id."' AND UserID='".user_id()."' AND Unix='".user_unix()."'");
} else if ( $mode_detail == "delete" ) {
$db->Query("UPDATE tmp_inv_detail SET Qty=0,Stok=0,Total_Diskon=0 WHERE No_Ref='".$nomor."' AND ID='".$_id."'");
}
}
$obj = new Table($db);
$obj->set_css("tabel-pos");
$obj->set_query("SELECT D.*,-D.Qty Qty2,IF(ISNULL(O.Ket),P.Nama_Lengkap,O.Ket) Nama_Lengkap,(-D.Qty*(D.Harga_Jual-D.Disk_Rupiah)) Total,P.Kode_SKU,IF(D.InvID='".$id_other."',1,0) ISO,IF(D.Qty=0,0,1) IDEL FROM (SELECT * FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND Unix='".user_unix()."' AND Promo<2) D LEFT JOIN (SELECT * FROM tmp_inv_detail_lain WHERE No_Ref='".$nomor."' AND Unix='".user_unix()."') 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)");
$obj->set_query_footer("SELECT CONCAT('Qty: ',FORMAT(SUM(-D.Qty),2),' / Item: ',FORMAT(COUNT(DISTINCT InvID),0)) Nama_Lengkap,SUM(-D.Qty*D.Disk_Rupiah) Disk_Rupiah,SUM(-D.Qty*(D.Harga_Jual-D.Disk_Rupiah)) Total FROM tmp_inv_detail D WHERE D.No_Ref='".$nomor."' AND D.Unix='".user_unix()."' AND D.Promo<2");
$obj->add_field("ID", "ID", "hid");
$obj->add_field("InvID", "InvID", "hid");
$obj->add_field("SatuanID", "SatuanID", "hid");
$obj->add_field("ISO", "IS OTHER", "hid");
$obj->add_field("Kode_SKU", "SKU", "c");
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
$obj->add_field("Qty2", "Qty", "r", "koma30");
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah");
$obj->add_field("Disk_Rupiah", "Diskon @", "r", "rupiah", "rupiah");
$obj->add_field("Total", "Jumlah", "r", "rupiah", "rupiah");
$obj->set_field_order("ID", "D");
$obj->add_row_btn("clipboard", "Ubah", "POSJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "POSJS.detail_hapus", "IDEL", 1);
$obj->set_row_color("IDEL", 0, "rcoret");
$obj->set_func_navi("POSJS.data_query('detail')");
$ajson[] = $obj->json_table("divPOS1", 8);
$ainfo = ['Total'=>0, 'Item'=>0];
$db->Query("SELECT SUM(-Qty*(Harga_Jual-Disk_Rupiah)) Total,COUNT(*) Item FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND Unix='".user_unix()."'");
if ($db->Next()) $ainfo = $db->AllRow();
$ajson[] = array('type'=>"form", 'id'=>"Total_Nota", 'value'=>$ainfo['Total']);
$ajson[] = array('type'=>"form", 'id'=>"Total_Item", 'value'=>$ainfo['Item']);
if ($db->RowFloat("Item")>0) $ajson[] = array('type'=>"html", 'id'=>"Total_Disp", 'value'=>rupiah($ainfo['Total']));
} else if ( $data == "auto-produk" ) {
$nomor = urldecode($nomor);
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
$bcode = 0; $arec = [];
// Cari by SKU
$db->Query("SELECT K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',CONVERT(P.Harga_Pokok*K.Qty USING UTF8),':',CONVERT(K.Harga_Jual 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) WHERE P.Aktif=1");
if ($db->Next()) {
$bcode = 1;
$arec = $db->AllRow();
}
// Cari by Barcode
if ($bcode == 0) {
$db->Query("SELECT K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',CONVERT(P.Harga_Pokok*K.Qty USING UTF8),':',CONVERT(K.Harga_Jual 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) WHERE P.Aktif=1");
if ($db->Next()) {
$bcode = 1;
$arec = $db->AllRow();
}
}
if ($bcode == 1) {
$db->Query("SELECT * FROM vi_inv_stok WHERE CabID='".$id_cab."' AND InvID='".$arec['InvID']."' LIMIT 1");
$arec['Stok'] = ($db->Next()) ? $db->RowFloat("Stok",0) : 0;
$ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Produk'], 'data'=>$arec['Data2'].":".$arec['Stok'], '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.SatuanID,':',CONVERT(P.Harga_Pokok*K.Qty USING UTF8),':',CONVERT(K.Harga_Jual USING UTF8),':',CONVERT(IFNULL(X.Stok,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("SatuanID", "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->set_field_order("Kode_SKU", "A");
$obj->add_row_btn("save", "Pilih", "POSJS.produk_select");
$obj->set_func_navi("POSJS.data_query('brow-produk')");
$ajson[] = $obj->db_table("divBrowProduk");
} else if ($data == "info_produk") {
$form = new Form($db);
$tbcode = $form->textbox("_", "Kode_Barcode", "", true);
$tnama = $form->textbox("_", "Nama_Barang", "", true);
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"&nbsp;"]);
$tsat = $form->option_db("_", "StokID", 0, true, false, "para_satuan", ["SatuanID","Nama_Satuan"], "Aktif=1 ORDER BY Nama_Satuan", [0,"&nbsp;"]);
$thjual = $form->textbox("_", "Harga_Jual", 0, true, false, "double");
echo '
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Kode Barcode</div><div class="col-sm-7 col-lg-6">'.$tbcode.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Nama Barang</div><div class="col-sm-8 col-lg-9">'.$tnama.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Grup Barang</div><div class="col-sm-8 col-lg-9">'.$tgrup.'</div></div>
<hr class="my-2">
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Satuan Kemasan</div><div class="col-sm-7 col-lg-6">'.$tsat.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Harga Jual @</div><div class="col-sm-7 col-lg-6">'.$thjual.'</div></div>';
} else if ($data == "simpan_produk") {
$k_barcode = Param::Get("Kode_Barcode", "");
$n_produk = Param::Get("Nama_Barang", "");
$i_grup = Param::Get("Grup_InvID", 0);
$i_stok = Param::Get("StokID", 0);
$n_harga = Param::Get("Harga_Jual", 0);
$db->Query("INSERT INTO inv_produk (Grup_InvID,Nama_Produk,StokID,NormalID,UserID) VALUES ('".$i_grup."','".$n_produk."','".$i_stok."','".$i_stok."','".user_id()."')");
$id_inv = $db->LastInsertID();
$db->Query("INSERT INTO inv_produk_kemasan SET InvID='".$id_inv."',SatuanID='".$i_stok."',Kode_SKU='".SKU_Baru($i_grup)."',Kode_Barcode='".$k_barcode."',Qty=1,Harga_Jual='".$n_harga."',UserID='".user_id()."'");
$ajson['msg'] = "Pembuatan Item Barang baru telah selesai.";
} else if ($data == "detail_produk") {
$_id = Param::Get("ID", 0);
$_id_inv = Param::Get("InvID", 0);
$_id_sat = Param::Get("SatuanID", 0);
$adetail = ['ID'=>0,'Qty'=>1,'Harga_Diskon'=>0];
$db->Query("SELECT InvID,SatuanID,Kode_SKU,Kode_Barcode,Nama_Lengkap,Nama_Satuan,Harga_Jual,Harga_Pokok Harga_Beli FROM vi_inv_produk WHERE InvID='".$_id_inv."' AND SatuanID='".$_id_sat."' LIMIT 1");
if ($db->Next()) $adetail = array_merge($adetail, $db->AllRow());
if ($mode_detail == "insert") {
} else {
$db->Query("SELECT ID,-Qty Qty,Harga_Beli,Harga_Jual,Disk_Rupiah Harga_Diskon FROM tmp_inv_detail WHERE Unix='".user_unix()."' AND No_Ref='".$nomor."' AND ID='".$_id."' LIMIT 1");
if ($db->Next()) $adetail = array_merge($adetail, $db->AllRow());
}
$form = new Form($db);
$tsku = $form->textbox("_", "Kode_SKU", $adetail['Kode_SKU']. " / " .$adetail['Kode_Barcode'], false);
$tnama = $form->textbox("_", "Nama_Lengkap", $adetail['Nama_Lengkap'], false);
$tsat = $form->textbox("_", "Nama_Satuan", $adetail['Nama_Satuan'], false);
$tqty = $form->textbox("_", "Qty", abs($adetail['Qty']), true, true, "number");
$thjual = $form->textbox("_", "Harga_Jual", $adetail['Harga_Jual'], false, false, "double");
$thdisk = $form->textbox("_", "Harga_Diskon", $adetail['Harga_Diskon'], true, false, "double");
$tpdisk = $form->textbox("_", "Persen_Diskon", 0, true, false, "double");
$tjuml = $form->textbox("_", "Jumlah", 0, false, false, "double");
echo '
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Kode SKU / Barcode</div><div class="col-sm-8 col-lg-9">'.$tsku.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Nama Barang</div><div class="col-sm-8 col-lg-9">'.$tnama.'</div></div>
<hr class="my-2">
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Qty</div><div class="col-sm-5 col-lg-4">'.$tqty.'</div><div class="col-sm-3 col-lg-5">'.$tsat.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Harga @</div><div class="col-sm-7 col-lg-6">'.$thjual.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Diskon @</div><div class="col-sm-5 col-lg-6">'.$thdisk.'</div><div class="col-sm-3 col-lg-3"><div class="input-group"><div class="input-group-text">&thickapprox;</div>'.$tpdisk.'<div class="input-group-text">%</div></div></div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Sub Total</div><div class="col-sm-7 col-lg-6">'.$tjuml.'</div></div>
<input type="hidden" id="ID" value="'.$adetail['ID'].'" />
<input type="hidden" id="InvID" value="'.$adetail['InvID'].'" />
<input type="hidden" id="SatuanID" value="'.$adetail['SatuanID'].'" />
<input type="hidden" id="Harga_Beli" value="'.$adetail['Harga_Beli'].'" />
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" />';
} else if ($data == "detail_lain") {
$_id = Param::Get("ID", 0);
$alain = ['ID'=>0,'Qty'=>1,'Harga_Beli'=>0,'Harga_Jual'=>0,'Ket'=>""];
$db->Query("SELECT InvID,SatuanID,Kode_SKU,Nama_Satuan FROM vi_inv_produk WHERE InvID='".$_SESSION['__APP_INV']['OTHERINVID']."' LIMIT 1");
if ($db->Next()) $alain = array_merge($alain, $db->AllRow());
if ($mode_detail == "insert") {
} else {
$db->Query("SELECT ID,-Qty Qty,Harga_Beli,Harga_Jual FROM tmp_inv_detail WHERE Unix='".user_unix()."' AND No_Ref='".$nomor."' AND ID='".$_id."' LIMIT 1");
if ($db->Next()) $alain = array_merge($alain, $db->AllRow());
$db->Query("SELECT Ket FROM tmp_inv_detail_lain WHERE Unix='".user_unix()."' AND No_Ref='".$nomor."' AND ID='".$_id."' LIMIT 1");
if ($db->Next()) $alain = array_merge($alain, $db->AllRow());
}
$form = new Form($db);
$tsku = $form->textbox("_", "Kode_SKU", $alain['Kode_SKU'], false);
$tket = $form->textbox("_", "Ket", $alain['Ket'], true);
$tsat = $form->textbox("_", "Nama_Satuan", $alain['Nama_Satuan'], false);
$tqty = $form->textbox("_", "Qty", abs($alain['Qty']), true, true, "number");
$thjual = $form->textbox("_", "Harga_Jual", $alain['Harga_Jual'], true, true, "double");
$tjuml = $form->textbox("_", "Jumlah", 0, false, false, "double");
echo '
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Kode SKU / Barcode</div><div class="col-sm-8 col-lg-9">'.$tsku.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Nama Barang</div><div class="col-sm-8 col-lg-9">'.$tket.'</div></div>
<hr class="my-2">
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Qty</div><div class="col-sm-5 col-lg-4">'.$tqty.'</div><div class="col-sm-3 col-lg-5">'.$tsat.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Harga @</div><div class="col-sm-7 col-lg-6">'.$thjual.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Sub Total</div><div class="col-sm-7 col-lg-6">'.$tjuml.'</div></div>
<input type="hidden" id="ID" value="'.$alain['ID'].'" />
<input type="hidden" id="InvID" value="'.$alain['InvID'].'" />
<input type="hidden" id="SatuanID" value="'.$alain['SatuanID'].'" />
<input type="hidden" id="Harga_Diskon" value="0" />
<input type="hidden" id="Persen_Diskon" value="0" />
<input type="hidden" id="Harga_Beli" value="'.$alain['Harga_Beli'].'" />
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" />';
} else if ($data == "info_kasir") {
$tot_jual = Param::Get("Total_Nota", 0);
$tot_jual -= Promo_Hitung($nomor, tgl_dmy());
$form = new Form($db);
$tjual = $form->textbox("_", "popTotal_Jual", uang($tot_jual), false, false, "double");
$ttunai = $form->textbox("_", "popTotal_Tunai", 0, true, false, "double");
$tkartu = $form->textbox("_", "popTotal_Kartu", 0, true, false, "double");
$tsisa = $form->textbox("_", "popTotal_Sisa", 0, false, false, "double");
$okartu = $form->option_db("_", "popKartuID", 0, true, false, "para_rek_pos", ["KartuID","Kode_Kartu"], "Aktif=1", [0,"Pilihan Non Tunai"]);
$tnokartu = $form->textbox("_", "popNo_Kartu", "", true, false, "text");
$tnamakartu = $form->textbox("_", "popNama_Kartu", "", true, false, "text");
$ajson['html'] = '
<div class="row mb-1"><div class="col-sm-6 col-lg-5 col-form-label">Total Nota Rp.</div><div class="col-sm-6 col-lg-7">'.$tjual.'</div></div>
<div class="row mb-1"><div class="col-sm-6 col-lg-5 col-form-label">Tunai Rp.</div><div class="col-sm-6 col-lg-7">'.$ttunai.'</div></div>
<div class="row mb-1"><div class="col-sm-6 col-lg-5">'.$okartu.'</div><div class="col-sm-6 col-lg-7">'.$tkartu.'</div></div>
<div class="row mb-1"><div class="col-sm-6 col-lg-5 col-form-label">Kembali Rp.</div><div class="col-sm-6 col-lg-7">'.$tsisa.'</div></div>
<hr class="my-2 ckartu d-none">
<div class="row mb-1 ckartu d-none"><div class="col-sm-6 col-lg-5 col-form-label">Nomor Kartu</div><div class="col-sm-6 col-lg-7">'.$tnokartu.'</div></div>
<div class="row mb-1 ckartu d-none"><div class="col-sm-6 col-lg-5 col-form-label">Nama Pemilik</div><div class="col-sm-6 col-lg-7">'.$tnamakartu.'</div></div>
<hr class="my-2">
<div class="row mt-1">
<div class="col-3 d-grid"><button type="button" class="btn btn-primary" id="butKPend">Pending</button></div>
<div class="col-3">&nbsp;</div>
<div class="col-3 d-grid"><button type="button" class="btn btn-danger" id="butKBatal" data-bs-dismiss="modal">Batal</button></div>
<div class="col-3 d-grid"><button type="button" class="btn btn-success" id="butKBayar">Bayar</button></div>
</div>
<input type="hidden" id="popTotal_Bayar" value="0" />';
$ajson['Total_Disp'] = rupiah($tot_jual);
} else if ( $data == "brow-nota" ) {
$tcari = trim(Param::Get("Cari_Nota"));
$tsql = ($tcari=="") ? " AND UserID='".user_id()."' AND Tgl_Jual='".tgl_ymd()."'" : " AND CONCAT(No_Jual,DATE_FORMAT(Tgl_Jual,'%d-%m-%Y')) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("(SELECT * FROM inv_jual WHERE CabID='".$id_cab."'".$tsql.") J LEFT JOIN para_rek_pos P ON (J.KartuID=P.KartuID)", "J.*,DATE_FORMAT(J.DateStamp,'%H:%i:%s') Tgl_Jual2,J.Total_Jual-J.Total_Diskon Total,J.Total_Jual-J.Total_Diskon-J.Total_Bayar Kembali,J.UserID,IF(ISNULL(P.Kode_Kartu),'Tunai',P.Kode_Kartu) Kartu", "");
$obj->set_query_footer("SELECT SUM(Total_Jual-Total_Diskon) Total,SUM(Total_Jual-Total_Diskon-Total_Bayar) Kembali FROM inv_jual WHERE CabID='".$id_cab."'".$tsql);
$obj->add_field("No_Jual", "No. Nota", "c");
$obj->add_field("Tgl_Jual", "Tanggal", "c", "sqltgl");
$obj->add_field("Tgl_Jual2", "Jam", "c");
$obj->add_field("Total", "Jumlah", "r", "rupiah", "rupiah");
$obj->add_field("Total_Bayar", "Bayar", "r", "rupiah", "rupiah");
$obj->add_field("Kembali", "Kembali", "r", "rupiah", "rupiah");
$obj->add_field("Kartu", "C / D", "left");
if ($tcari<>"") {
$obj->set_field_order("Tgl_Jual", "D");
$obj->set_limit(100);
} else {
$obj->set_field_order("Tgl_Jual2", "D");
}
$obj->add_row_btn("printer", "Cetak", "POSJS.nota_print");
$obj->add_row_btn("clipboard", "Ubah", "POSJS.nota_select");
if (user_level(1)) $obj->add_row_btn("trash", "Hapus", "POSJS.nota_delete", "CabID", $id_cab);
else $obj->add_row_btn("trash", "Hapus", "POSJS.nota_delete", "UserID", user_id());
$obj->set_func_navi("POSJS.data_query('brow-nota')");
$ajson[] = $obj->db_table("divBrowNota");
} else if ( $data == "brow-pending" ) {
$obj = new Table($db);
$obj->set_query("SELECT J.*,J.Total_Jual-J.Total_Diskon Total,J.UserID FROM inv_jual_pend J WHERE J.CabID='".$id_cab."' AND J.UserID='".user_id()."'");
$obj->add_field("No_Jual", "No. Nota", "c");
$obj->add_field("Total_Jual", "Sub. Total", "r", "rupiah");
$obj->add_field("Total_Diskon", "Diskon", "r", "rupiah");
$obj->add_field("Total", "Total", "r", "rupiah");
$obj->set_field_order("No_Jual", "D");
$obj->add_row_btn("save", "Pilih", "POSJS.pending_select");
if (user_level(1)) $obj->add_row_btn("trash", "Hapus", "POSJS.pending_delete", "UserID", user_id());
$obj->set_func_navi("POSJS.data_query('brow-pending')");
$ajson[] = $obj->json_table("divBrowPending");
} else if ( $data == "pole-config") {
$ajson['pole'] = []; $apole = [];
$db->Query("SELECT * FROM disp_config WHERE REG_ID='".$_SESSION['__WEB_APP']['APP_CODE']."' LIMIT 1");
if ($db->Next()) $apole = $db->AllRow();
foreach ($apole as $_key => $_val) {
if (strpos($_key, "POLE") !== false) {
if (strpos($_key, "ENABLE") !== false) $_val = intval($_val);
$ajson['pole'][str_replace("POLE_","",$_key)] = $_val;
}
}
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<div class="row flex-column-reverse flex-md-row">
<div class="col-sm-12 col-md-9 col-lg-10 mt-3 mt-md-0">
<div class="row mb-1">
<div class="col-sm-9 col-lg-10">
<input type="search" class="form-control fs-5" id="Nama_Produk" value="" placeholder="Scan SKU / Barcode / Ketik Nama Barang" autocomplete="off" />
</div>
<div class="col-sm-3 col-lg-2">
<input type="double" class="form-control double fs-5" id="POS_Qty" value="1.00" maxlength="10" onblur="POSJS.onblur_Qty();" />
</div>
</div>
<div id="divPOS1">&nbsp;</div>
</div>
<div class="col-sm-12 col-md-3 col-lg-2 border-start">
<div id="divPOS2">&nbsp;</div>
</div>
</div>
</div></div></div>';
}
send_json($ajson);
?>