first commit
This commit is contained in:
@@ -0,0 +1,499 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/iss/beli.php
|
||||
Desc. : PHP - Transaksi Pembelian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 22th, 2010.
|
||||
Last Modified : October 19th, 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;
|
||||
|
||||
function Beli_Data1($nomor="", $baru=false) {
|
||||
global $db;
|
||||
$aparam = ['No_Beli'=>$nomor];
|
||||
if (trim($nomor)=="") {
|
||||
if ($baru) $aparam['No_Beli'] = "BELI".$_SESSION['__WEB_APP']['SERVER_ID'].$_SESSION['__APP_INV']['CABANGID'].user_id(3)."#00";
|
||||
$aparam['Tgl_Beli'] = tgl_ymd();
|
||||
$aparam['Tgl_Faktur'] = tgl_ymd();
|
||||
$aparam['SupID'] = 0;
|
||||
$aparam['CabID'] = $_SESSION['__APP_INV']['CABANGID'];
|
||||
$aparam['Total_Beli'] = 0;
|
||||
$aparam['Total_Hutang']= 0;
|
||||
$aparam['Total_Bulat'] = 0;
|
||||
} else {
|
||||
$tabel_beli = (strpos($nomor,"BELI")===false) ? "inv_beli" : "inv_beli_pend";
|
||||
$db->Query("SELECT * FROM ".$tabel_beli." WHERE No_Beli='".$nomor."'");
|
||||
if ($db->Next()) $aparam = $db->AllRow();
|
||||
}
|
||||
return $aparam;
|
||||
}
|
||||
|
||||
function Beli_Pending_Nomor1() {
|
||||
global $db;
|
||||
$tno = "BELI".$_SESSION['__WEB_APP']['SERVER_ID'].$_SESSION['__APP_INV']['CABANGID'].user_id(3)."#";
|
||||
$ino = 0;
|
||||
$db->Query("SELECT MAX(RIGHT(No_Beli,2)) Nomor FROM inv_beli_pend WHERE LEFT(No_Beli,".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", "view");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_cab = Param::Get("CabID", $_SESSION['__APP_INV']['CABANGID']);
|
||||
$nomor = Param::Get("No_Beli", "");
|
||||
$is_pend = (strpos($nomor,"BELI")===false) ? false : true;
|
||||
|
||||
if ( $data == "master" ) {
|
||||
$ajson = ['error'=>"", 'html'=>""];
|
||||
$atabel = ['No_Beli'=>$nomor];
|
||||
|
||||
if ($mode == "pending-edit") {
|
||||
Pending_Edit($nomor);
|
||||
$atabel = Beli_Data1($nomor);
|
||||
$mode = "edit";
|
||||
} else if ($mode == "pending-save") {
|
||||
$b_baru = false;
|
||||
if (substr($nomor,-3)=="#00") {
|
||||
$b_baru = true;
|
||||
$no_lama = $nomor;
|
||||
$nomor = Beli_Pending_Nomor1();
|
||||
Pending_Save($no_lama, $nomor);
|
||||
}
|
||||
$apending = [];
|
||||
$db->Query("SELECT SUM(Qty*Harga_Beli) Beli,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_beli_pend");
|
||||
$sql->add_param("No_Beli", $nomor);
|
||||
$sql->add_param_date("Tgl_Beli");
|
||||
$sql->add_param_date("Tgl_Faktur");
|
||||
$sql->add_param("No_Faktur");
|
||||
$sql->add_param("CabID");
|
||||
$sql->add_param("SupID");
|
||||
$sql->add_param("Total_Beli", $apending['Beli']);
|
||||
$sql->add_param("Total_Diskon", $apending['Diskon']);
|
||||
$sql->add_param("Total_Bulat");
|
||||
$sql->add_param("Total_Hutang");
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("No_Beli", $nomor);
|
||||
if ($b_baru) $sql->InsertDB();
|
||||
else $sql->UpdateDB();
|
||||
$atabel = Beli_Data1();
|
||||
} else if ($mode == "pending-delete") {
|
||||
Pending_Delete($nomor);
|
||||
$db->Query("DELETE FROM inv_beli_pend WHERE No_Beli='".$nomor."'");
|
||||
$atabel = Beli_Data1();
|
||||
} else if ($mode == "add") {
|
||||
$atabel = Beli_Data1("", true);
|
||||
} else if ($mode == "edit") {
|
||||
Detail_Copy($nomor, true);
|
||||
$atabel = Beli_Data1($nomor);
|
||||
} else if ($mode == "save") {
|
||||
$no_lama = $nomor;
|
||||
if ($is_pend) {
|
||||
$nomor = Nomor_Baru("B", Param::Get("Tgl_Beli"), true);
|
||||
if (substr($no_lama,-3)!="#00") $db->Query("DELETE FROM inv_beli_pend WHERE No_Beli='".$no_lama."'");
|
||||
}
|
||||
Detail_Save($nomor, 3, $id_cab, Param::Get("Tgl_Beli"), $is_pend, $no_lama);
|
||||
|
||||
$abeli = [];
|
||||
$db->Query("SELECT SUM(Qty*Harga_Beli) Beli, SUM(Total_Diskon) Diskon FROM inv_detail WHERE No_Ref='".$nomor."'");
|
||||
if ($db->Next()) $abeli = $db->AllRow();
|
||||
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_beli");
|
||||
$sql->add_param_date("Tgl_Beli");
|
||||
$sql->add_param_date("Tgl_Faktur");
|
||||
$sql->add_param("No_Faktur");
|
||||
$sql->add_param("CabID");
|
||||
$sql->add_param("SupID");
|
||||
$sql->add_param("Total_Beli", $abeli['Beli']);
|
||||
$sql->add_param("Total_Diskon", $abeli['Diskon']);
|
||||
$sql->add_param("Total_Bulat");
|
||||
$sql->add_param("Total_Hutang");
|
||||
$sql->add_param("Data_Beli", 1);
|
||||
$sql->add_param_stamp();
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("No_Beli", $nomor);
|
||||
$sql->UpdateDB();
|
||||
|
||||
Produk_Update($nomor, Param::Get("SupID"));
|
||||
Update_Lunas_Sup(Param::Get("SupID"));
|
||||
$atabel = Beli_Data1($nomor);
|
||||
$mode = "view";
|
||||
|
||||
} else if ($mode == "cancel") {
|
||||
if (substr($nomor,-3)=="#00" || substr($nomor,0,4)!="BELI") Detail_Cancel($nomor);
|
||||
$atabel = Beli_Data1();
|
||||
} else {
|
||||
$atabel = Beli_Data1($nomor);
|
||||
}
|
||||
|
||||
$enable = in_array($mode, ["add","edit"]) ? true : false;
|
||||
$form = new Form($db);
|
||||
$tnota = $form->textbox("_", "No_Beli", $atabel['No_Beli'], !$enable, true, "text", "nomor transaksi");
|
||||
$tfaktur = $form->textbox("_", "No_Faktur", $atabel['No_Faktur'], $enable, true, "text", "nomor faktur");
|
||||
$ttglnota = $form->datebox("_", "Tgl_Beli", $atabel['Tgl_Beli'], $enable, true);
|
||||
$ttglfaktur = $form->datebox("_", "Tgl_Faktur", $atabel['Tgl_Faktur'], $enable, true);
|
||||
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY Nama_Cab", [0," "]);
|
||||
$tsup = $form->option_db("_", "SupID", $atabel['SupID'], $enable, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0," "]);
|
||||
$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_Beli">Nomor Transaksi</label>
|
||||
<div class="col"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="BeliJS.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_Beli">Tanggal Transaksi</label>
|
||||
<div class="col-sm-7 col-lg-5">'.$ttglnota.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Faktur">Tanggal Faktur</label>
|
||||
<div class="col-sm-7 col-lg-5">'.$ttglfaktur.'</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="SupID">Nama Supplier</label>
|
||||
<div class="col">'.$tsup.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Faktur">Nomor Faktur</label>
|
||||
<div class="col">'.$tfaktur.'</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
|
||||
<input type="hidden" id="Total_Beli" value="'.$atabel['Total_Beli'].'" >
|
||||
<input type="hidden" id="Total_Hutang" value="'.$atabel['Total_Hutang'].'" >
|
||||
<input type="hidden" id="Total_Bulat" value="'.$atabel['Total_Bulat'].'" >
|
||||
<input type="hidden" id="Lunas" value="'.$atabel['Lunas'].'" >
|
||||
<input type="hidden" id="mode" value="'.$mode.'" >
|
||||
';
|
||||
|
||||
} else if ( $data == "delete" ) {
|
||||
if ($is_pend == false) {
|
||||
$db->Query("DELETE FROM inv_beli WHERE No_Beli='".$nomor."'");
|
||||
$db->Query("DELETE FROM inv_detail WHERE No_Ref='".$nomor."'");
|
||||
} else {
|
||||
$db->Query("DELETE FROM inv_beli_pend WHERE No_Beli='".$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->Row("Qty", 1) * $iqty;
|
||||
|
||||
$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);
|
||||
$sql->add_param("Harga_Beli");
|
||||
$sql->add_param("Disk_Rupiah");
|
||||
$sql->add_param("Disk_Persen1");
|
||||
$sql->add_param("Disk_Persen2");
|
||||
$sql->add_param("Disk_Persen3");
|
||||
$sql->add_param("Disk_Persen4");
|
||||
$sql->add_param("Disk_Persen5");
|
||||
$sql->add_param("Total_Diskon", "(Harga_Beli-((Harga_Beli-Disk_Rupiah)*((100.0-Disk_Persen1)/100)*((100.0-Disk_Persen2)/100)*((100.0-Disk_Persen3)/100)*((100.0-Disk_Persen4)/100)*((100.0-Disk_Persen5)/100)))*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);
|
||||
if ( $mode_detail == "insert" ) {
|
||||
$sql->InsertDB();
|
||||
$_id = $sql->LastInsertID();
|
||||
} else if ( $mode_detail == "update" ) {
|
||||
$sql->UpdateDB();
|
||||
} else if ( $mode_detail == "delete" ) {
|
||||
$sql->DeleteDB();
|
||||
}
|
||||
}
|
||||
|
||||
$qview = ""; $qtabel = "inv_detail";
|
||||
if ($is_pend) $qtabel = "tmp_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_Lengkap,P.Nama_Satuan,P.Harga_Jual,(D.Qty*D.Harga_Beli)-D.Total_Diskon Total 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->set_query_footer("SELECT SUM((D.Qty*D.Harga_Beli)-D.Total_Diskon) Total,SUM(D.Total_Diskon) Total_Diskon FROM (SELECT * FROM ".$qtabel." WHERE No_Ref='".$nomor."' ".$qview.") D");
|
||||
$obj->add_field("ID", "No", "c");
|
||||
$obj->add_field("InvID", "InvID", "hid");
|
||||
$obj->add_field("SatuanID", "SatuanID", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
|
||||
$obj->add_field("Qty", "Qty", "r", "rupiah2");
|
||||
$obj->add_field("Harga_Beli", "Harga @", "r", "rupiah");
|
||||
$obj->add_field("Total_Diskon", "Diskon", "r", "rupiah", "rupiah");
|
||||
$obj->add_field("Total", "Jumlah", "r", "rupiah", "rupiah");
|
||||
$obj->set_field_order("ID", "A");
|
||||
if (in_array($mode, ["add","edit"])) {
|
||||
$obj->add_row_btn("clipboard", "Ubah", "BeliJS.detail_ubah");
|
||||
$obj->add_row_btn("trash", "Hapus", "BeliJS.detail_hapus", "Unix", user_unix());
|
||||
$obj->set_func_btn("BeliJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Produk');
|
||||
$obj->set_func_btn("BeliJS.produk_brow", '<i class="bi-table me-1"></i> Browse');
|
||||
}
|
||||
$obj->set_func_btn("BeliJS.total_show", "Total");
|
||||
$obj->set_func_navi("BeliJS.data_query('tabel-detail')");
|
||||
$ajson[] = $obj->json_table("divDetailTabel");
|
||||
|
||||
$ntotal = 0;
|
||||
$db->Query("SELECT SUM((D.Qty*D.Harga_Beli)-D.Total_Diskon) Jumlah FROM ".$qtabel." D WHERE D.No_Ref='".$nomor."' ".$qview);
|
||||
if ($db->Next()) $ntotal = floatval($db->Row("Jumlah", 0));
|
||||
$ajson[] = ['type'=>"form", 'id'=>"Total_Beli", 'value'=>$ntotal];
|
||||
|
||||
if (in_array($mode_detail, ["insert","update"])) {//WARNING: harga jual dibawah limit margin!!
|
||||
$hbeli = 0;
|
||||
$db->Query("SELECT CEIL((Harga_Beli-(Total_Diskon/Qty))/(Stok/Qty)) Pokok FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND ID='".$_id."'");
|
||||
if ($db->Next()) $hbeli = $db->Row("Pokok", 0);
|
||||
$db->Query("SELECT P.*,G.Margin FROM (SELECT Grup_InvID,Nama_Produk,CEIL(Harga_Jual/Qty) Harga_Jual FROM vi_inv_produk WHERE InvID='".Param::Get("InvID")."' AND Harga_Jual>0 ORDER BY Harga_Jual ASC LIMIT 1) P LEFT JOIN inv_produk_grup G ON (P.Grup_InvID=G.Grup_InvID)");
|
||||
if ($db->Next()) {
|
||||
if ($db->Row("Margin",0)>0) $hbeli += ($hbeli*($db->Row("Margin")/100));
|
||||
if ($hbeli > $db->Row("Harga_Jual",0)) $ajson[] = ['type'=>"msg", 'mode'=>"error", 'wait'=>3000, 'value'=>"Produk \"".$db->Row("Nama_Produk")."\" Harga Beli telah melewati Margin / Harga Jual!"];
|
||||
}
|
||||
}
|
||||
|
||||
} else if ( $data == "brow-tx" ) {
|
||||
$tcari = trim(Param::Get("Cari_TX"));
|
||||
$tsql = ($tcari=="") ? "" : " CONCAT(B.No_Beli,B.No_Faktur,S.Nama_Sup,DATE_FORMAT(B.Tgl_Faktur,'%d-%m-%Y')) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("(SELECT *,Total_Diskon+Total_Bulat Diskon FROM inv_beli WHERE Data_Beli=1) B LEFT JOIN para_supplier S ON (B.SupID=S.SupID)", "B.*,S.Nama_Sup", $tsql);
|
||||
$obj->add_field("No_Beli", "No. Trans", "c");
|
||||
$obj->add_field("Tgl_Faktur", "Tgl. Faktur", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
|
||||
$obj->add_field("Total_Beli", "Sub. Total", "r", "rupiah");
|
||||
$obj->add_field("Diskon", "Diskon", "r", "rupiah");
|
||||
$obj->add_field("Total_Hutang", "Jumlah", "r", "rupiah");
|
||||
$obj->set_field_order("No_Beli", "D");
|
||||
$obj->add_row_btn("save", "Detail", "BeliJS.tx_select");
|
||||
$obj->set_func_navi("BeliJS.data_query('brow-tx')");
|
||||
$ajson[] = $obj->db_table("divBrowTX");
|
||||
|
||||
} else if ( $data == "brow-pending" ) {
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT B.*,S.Nama_Sup FROM (SELECT *,Total_Diskon+Total_Bulat Diskon FROM inv_beli_pend WHERE UserID='".user_id()."') B LEFT JOIN para_supplier S ON (B.SupID=S.SupID)");
|
||||
$obj->add_field("No_Beli", "No. Trans", "c");
|
||||
$obj->add_field("Tgl_Beli", "Tgl. Pending", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
|
||||
$obj->add_field("Total_Beli", "Sub. Total", "r", "rupiah");
|
||||
$obj->add_field("Diskon", "Diskon", "r", "rupiah");
|
||||
$obj->add_field("Total_Hutang", "Jumlah", "r", "rupiah");
|
||||
$obj->set_field_order("No_Beli", "D");
|
||||
$obj->add_row_btn("save", "Pilih", "BeliJS.pending_select");
|
||||
if (user_level(1)) $obj->add_row_btn("trash", "Hapus", "BeliJS.pending_delete", "UserID", user_id());
|
||||
$obj->set_func_navi("BeliJS.data_query('brow-pending')");
|
||||
$ajson[] = $obj->json_table("divBrowPending");
|
||||
|
||||
} else if ( $data == "brow-produk" ) {
|
||||
$tcari = trim(Param::Get("Cari_Produk"));
|
||||
$tsql = ($tcari <> "") ? " AND P.Barcode_Nama LIKE '%".$tcari."%'": "";
|
||||
$tsql .= (Param::Get("Filter_Browse")=="all") ? "" : " AND S.SupID='".Param::Get("SupID")."'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("vi_inv_produk P LEFT JOIN inv_produk_sup S ON (P.InvID=S.InvID)", "P.*", "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("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", "BeliJS.produk_select");
|
||||
$obj->set_func_navi("BeliJS.data_query('brow-produk')");
|
||||
$ajson[] = $obj->db_table("divBrowProduk");
|
||||
|
||||
} else if ( $data == "auto-produk" ) {
|
||||
$tcari = Param::Get("Auto_Query");
|
||||
$ajson['autodata'] = [];
|
||||
$bcode = 0; $arec = [];
|
||||
// Cari by SKU
|
||||
$db->Query("SELECT K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',CONVERT(K.Harga_Jual 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 K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',CONVERT(K.Harga_Jual 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.*,K.Kode_SKU,K.Harga_Jual,S.Nama_Satuan,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',K.Harga_Jual) 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 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")), 'data'=>$db->Row("Data2"), 'bc'=>0];
|
||||
}
|
||||
}
|
||||
|
||||
} else if ($data == "detail-produk") {
|
||||
$id = Param::Get("ID", 0); $atabel = ['ID'=>$id, 'InvID'=>Param::Get("InvID",0), 'SatuanID'=>Param::Get("SatuanID",0)];
|
||||
if ($id > 0) {
|
||||
$db->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND ID='".$id."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = $db->AllRow();
|
||||
}
|
||||
if ($atabel['InvID']>0 && $atabel['SatuanID']>0) {
|
||||
$db->Query("SELECT 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 nama produk");
|
||||
$tqty = $form->textbox("_", "Qty", $atabel['Qty'], true, true, "double");
|
||||
$tbeli = $form->textbox("_", "Harga_Beli", $atabel['Harga_Beli'], true, true, "double");
|
||||
$tdisrp = $form->textbox("_", "Disk_Rupiah", $atabel['Disk_Rupiah'], true, true, "double");
|
||||
$tdis1 = $form->textbox("_", "Disk_Persen1", $atabel['Disk_Persen1'], true, true, "double");
|
||||
$tdis2 = $form->textbox("_", "Disk_Persen2", $atabel['Disk_Persen2'], true, true, "double");
|
||||
$tdis3 = $form->textbox("_", "Disk_Persen3", $atabel['Disk_Persen3'], true, true, "double");
|
||||
$tdis4 = $form->textbox("_", "Disk_Persen4", $atabel['Disk_Persen4'], true, true, "double");
|
||||
$tdis5 = $form->textbox("_", "Disk_Persen5", $atabel['Disk_Persen5'], true, true, "double");
|
||||
$ttot_dis = $form->textbox("_", "Total_Diskon", 0, false, false, "double");
|
||||
$tjual = $form->textbox("_", "Harga_Jual", 0, false, false, "double");
|
||||
$ttot = $form->textbox("_", "Jumlah", 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-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="Qty">Qty</label>
|
||||
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$tqty.$tsat.'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Harga_Beli">Harga (@)</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">Harga Jual @</span>'.$tjual.'</div></div>
|
||||
</div>
|
||||
<hr class="my-1">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Disk_Rupiah">Diskon Rupiah</label>
|
||||
<div class="col-sm-4 col-lg-5">'.$tdisrp.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Diskon Persen</label>
|
||||
<div class="col-sm-4 col-lg-3"><div class="input-group"><span class="input-group-text">1</span>'.$tdis1.'<span class="input-group-text">%</span></div></div>
|
||||
<div class="col-sm-4 col-lg-3"><div class="input-group"><span class="input-group-text">4</span>'.$tdis4.'<span class="input-group-text">%</span></div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label"> </label>
|
||||
<div class="col-sm-4 col-lg-3"><div class="input-group"><span class="input-group-text">2</span>'.$tdis2.'<span class="input-group-text">%</span></div></div>
|
||||
<div class="col-sm-4 col-lg-3"><div class="input-group"><span class="input-group-text">5</span>'.$tdis5.'<span class="input-group-text">%</span></div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label"> </label>
|
||||
<div class="col-sm-4 col-lg-3"><div class="input-group"><span class="input-group-text">3</span>'.$tdis3.'<span class="input-group-text">%</span></div></div>
|
||||
<div class="col-sm-4 col-lg-3">'.Form_Info("Silakan masukkan -10 pada Diskon 5, jika ada PPN.").'</div>
|
||||
|
||||
</div>
|
||||
<hr class="my-1">
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Diskon</label>
|
||||
<div class="col-sm-4 col-lg-5">'.$ttot_dis.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Total</label>
|
||||
<div class="col-sm-4 col-lg-5">'.$ttot.'</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="mode_detail" value="'.$mode_detail.'" >
|
||||
';
|
||||
|
||||
} else if ( $data == "detail-item" ) {
|
||||
$ajson['data'] = "kosong";
|
||||
$db->Query("SELECT D.* FROM inv_detail D LEFT JOIN inv_beli B ON (D.No_Ref=B.No_Beli) WHERE B.Data_Beli=1 AND D.InvID='".Param::Get("InvID")."' ORDER BY D.Tgl_Ref DESC LIMIT 1");
|
||||
if ($db->Next()) $ajson = $db->AllRow();
|
||||
if (Param::Get("SatuanID",0) <> $ajson['SatuanID']) {
|
||||
$_bagi = 1;
|
||||
$db->Query("SELECT A.Qty/B.Qty Bagi FROM (SELECT InvID,Qty FROM inv_produk_kemasan WHERE InvID=".Param::Get("InvID")." AND SatuanID=".$ajson['SatuanID']."' LIMIT 1) A LEFT JOIN (SELECT InvID,Qty FROM inv_produk_kemasan WHERE InvID=".Param::Get("InvID")." AND SatuanID='".Param::Get("SatuanID",0)."' LIMIT 1) B ON (A.InvID=B.InvID)");
|
||||
if ($db->Next()) $_bagi = $db->Row("Bagi", 1);
|
||||
$ajson['Harga_Beli'] /= $_bagi;
|
||||
$ajson['Disk_Rupiah'] /= $_bagi;
|
||||
}
|
||||
|
||||
} else if ($data == "detail-total") {
|
||||
$form = new Form($db);
|
||||
$tbulat = $form->textbox("_", "popTotal_Bulat", 0, true, false, "double");
|
||||
$thutang = $form->textbox("_", "popTotal_Hutang", 0, true, false, "double");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label" for="popTotal_Bulat">Diskon Akhir<br>Pembulatan (+/-)</label>
|
||||
<div class="col">'.$tbulat.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label" for="popTotal_Hutang">Total Hutang</label>
|
||||
<div class="col">'.$thutang.'</div>
|
||||
</div>
|
||||
';
|
||||
|
||||
} 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 Pembelian</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-info mb-1 ms-2" id="butPendingBrow" type="button"><i class="bi-cloud me-2"></i>Pending</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-warning mb-1 ms-2" id="butPendingSimpan" type="button"><i class="bi-cloud-upload me-2"></i>Simpan Pending</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"> </div>
|
||||
<div id="divDetailTabel"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,253 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/iss/beli_lunas.php
|
||||
Desc. : PHP - Transaksi Pembayaran Pembelian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : March 7th, 2011.
|
||||
Last Modified : October 8th, 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 = Param::Get("mode", "view");
|
||||
$mode_detail = Param::Get("mode_detail");
|
||||
$id_sup = Param::Get("SupID", 0);
|
||||
$nomor = Param::Get("No_Beli", "");
|
||||
|
||||
if ( $data == "master" ) {
|
||||
$ajson = ['error'=>"", 'html'=>""];
|
||||
$atabel = ['SupID'=>0, 'Nama_Sup'=>"", 'Alamat_Sup'=>""];
|
||||
|
||||
$form = new Form($db);
|
||||
$tsup = $form->textauto("_", "Nama_Sup", ['value'=>$atabel['SupID'],'text'=>$atabel['Nama_Sup']], true, false, "ketik nama supplier");
|
||||
$tsupal = $form->textbox("_", "Alamat_Sup", $atabel['Alamat_Sup'], false, false, "text");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Nama_Sup">Nama Supplier</label>
|
||||
<div class="col"><div class="input-group">'.$tsup.'<button id="butBrow" class="btn btn-info" type="button" onclick="BeliLunasJS.sup_brow();"><i class="bi-search"></i></button></div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Alamat Supplier</label>
|
||||
<div class="col">'.$tsupal.'</div>
|
||||
</div>
|
||||
<div class="row"><div class="col"><hr class="my-1"></div></div>
|
||||
<input type="hidden" id="SupID" value="0" >
|
||||
<input type="hidden" id="Mode_Tampil" value="0" >
|
||||
';
|
||||
|
||||
} else if ( $data == "tabel-nota" ) {
|
||||
$tsql = (Param::Get("Mode_Tampil", 0)==1) ? "" : " AND Lunas=0";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT *,Total_Hutang-Total_Bayar-Total_Potong Sisa_Bayar,IF(Data_Beli=1,'B','R') Tipe FROM inv_beli WHERE SupID='".$id_sup."'".$tsql);
|
||||
$obj->set_query_footer("SELECT SUM(Total_Hutang) Total_Hutang FROM inv_beli WHERE SupID='".$id_sup."'".$tsql);
|
||||
$obj->add_field("Tipe", "Tipe", "hid");
|
||||
$obj->add_field("No_Beli", "No. Trans", "c");
|
||||
$obj->add_field("No_Faktur", "No. Faktur", "l");
|
||||
$obj->add_field("Tgl_Faktur", "Tgl. Faktur", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Total_Hutang", "Jumlah Faktur", "r", "rupiah", "rupiah");
|
||||
$obj->add_field("Total_Bayar", "Bayar", "r", "rupiah");
|
||||
$obj->add_field("Sisa_Bayar", "Sisa", "r", "rupiah", "rupiah");
|
||||
if (Param::Get("Mode_Tampil", 0)==1) $obj->add_field("Lunas", "Lunas", "c", "checkbox");
|
||||
$obj->set_field_order("No_Beli", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "BeliLunasJS.nota_select");
|
||||
$obj->set_func_navi("BeliLunasJS.data_query('tabel-nota')");
|
||||
$ajson[] = $obj->json_table("divTXNota");
|
||||
|
||||
} else if ( $data == "tabel-bayar" ) {
|
||||
$lunas = Param::Get("Lunas", 0);
|
||||
|
||||
if (in_array($mode_detail, ["insert","delete"])) {
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_beli_lunas");
|
||||
$sql->add_param("No_Beli");
|
||||
$sql->add_param_date("Tgl_Bayar");
|
||||
$sql->add_param("Total_Bayar");
|
||||
$sql->add_param("Total_Potong");
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("ID");
|
||||
$sql->add_where("No_Beli", $nomor);
|
||||
|
||||
if ($mode_detail == "insert") {
|
||||
$abeli = ['CabID'=>0, 'SupID'=>0];
|
||||
$db->Query("SELECT CabID,SupID FROM inv_beli WHERE No_Beli='".$nomor."' LIMIT 1");
|
||||
if ($db->Next()) $abeli = $db->AllRow();
|
||||
$sql->add_param("CabID", $abeli['CabID']);
|
||||
$sql->add_param("SupID", $abeli['SupID']);
|
||||
$sql->InsertDB();
|
||||
} else if ($mode_detail == "delete") {
|
||||
$sql->DeleteDB();
|
||||
}
|
||||
|
||||
$anota = ['Bayar'=>0, 'Potong'=>0, 'Total_Sisa'=>0, 'Lunas'=>0];
|
||||
$db->Query("SELECT SUM(Total_Bayar) Bayar,SUM(Total_Potong) Potong FROM inv_beli_lunas WHERE No_Beli='".$nomor."'");
|
||||
if ($db->Next()) $anota = $db->AllRow();
|
||||
$db->Query("UPDATE inv_beli SET Total_Bayar='".$anota['Bayar']."',Total_Potong='".$anota['Potong']."',Lunas=IF(Total_Hutang-Total_Bayar-Total_Potong=0,1,0),Tgl_Lunas=IF(Lunas=1,'".tgl_sql2str(Param::Get("Tgl_Bayar"))."','0000-00-00') WHERE No_Beli='".$nomor."'");
|
||||
|
||||
$db->Query("SELECT Lunas,Total_Hutang-Total_Bayar-Total_Potong Total_Sisa FROM inv_beli WHERE No_Beli='".$nomor."'");
|
||||
if ($db->Next()) $anota = $db->AllRow();
|
||||
$lunas = $anota['Lunas'];
|
||||
$ajson[] = array('type'=>"form", 'id'=>"Total_Sisa", 'value'=>$anota['Total_Sisa']);
|
||||
$ajson[] = array('type'=>"form", 'id'=>"Lunas", 'value'=>$anota['Lunas']);
|
||||
}
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT * FROM inv_beli_lunas WHERE No_Beli='".$nomor."' ORDER BY ID");
|
||||
$obj->add_field("ID", "ID", "hid");
|
||||
$obj->add_field("Tgl_Bayar", "Tgl. Bayar", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Total_Bayar", "Jumlah Bayar", "r", "rupiah");
|
||||
$obj->add_field("Total_Potong", "Pemotongan", "r", "rupiah");
|
||||
$obj->set_field_order("Tgl_Bayar", "A");
|
||||
if ($_SESSION['__WEB_USER']['Level']==0 && ($lunas==0 || ($lunas==1 && Param::Get('Mode_Tampil',0)==1))) {
|
||||
$obj->add_row_btn("trash", "Hapus", "BeliLunasJS.bayar_hapus", "No_Beli", $nomor);
|
||||
}
|
||||
if ($lunas == 0) {
|
||||
$obj->set_func_btn("BeliLunasJS.bayar_show", '<i class="bi-wallet me-1"></i> Pembayaran');
|
||||
}
|
||||
$obj->set_func_navi("BeliLunasJS.data_query('tabel-bayar')");
|
||||
$ajson[] = $obj->json_table("divDetailBayar");
|
||||
|
||||
} else if ( $data == "brow-sup" ) {
|
||||
$tcari = trim(Param::Get("Cari_Sup"));
|
||||
$tsql = ($tcari=="") ? " LIMIT 100" : " AND CONCAT(Kode_Sup,Nama_Sup,Telp_Sup) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT * FROM para_supplier WHERE Aktif=1".$tsql);
|
||||
$obj->add_field("SupID", "ID", "hid");
|
||||
$obj->add_field("Kode_Sup", "Kode", "l");
|
||||
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
|
||||
$obj->add_field("Telp_Sup", "Telp", "l");
|
||||
$obj->add_field("Alamat_Sup", "Alamat", "hid");
|
||||
$obj->set_field_order("Kode_Sup", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "BeliLunasJS.sup_select");
|
||||
$obj->set_func_navi("BeliLunasJS.data_query('brow-sup')");
|
||||
$ajson[] = $obj->json_table("divBrowSup");
|
||||
|
||||
} else if ( $data == "auto-sup" ) {
|
||||
$tcari = Param::Get("Auto_Query");
|
||||
$ajson['autodata'] = [];
|
||||
if (is_string($tcari) && strlen($tcari) < 64) {
|
||||
$db->Query("SELECT * FROM para_supplier WHERE Aktif=1 AND CONCAT(Kode_Sup,Nama_Sup,Telp_Sup) LIKE '%".$tcari."%' ORDER BY Kode_Sup LIMIT 50");
|
||||
while ($db->Next()) {
|
||||
$ajson['autodata'][] = ['value'=>$db->Row("SupID"), 'text'=>$db->Row("Nama_Sup"), 'data'=>$db->Row("Alamat_Sup")];
|
||||
}
|
||||
}
|
||||
|
||||
} else if ($data == "detail-nota") {
|
||||
$atabel = ['No_Beli'=>$nomor]; $tipe = Param::Get("Tipe_Nota", "B");
|
||||
$db->Query("SELECT *,Total_Hutang-Total_Bayar-Total_Potong Sisa_Bayar FROM inv_beli WHERE No_Beli='".$nomor."'");
|
||||
if ($db->Next()) $atabel = $db->AllRow();
|
||||
|
||||
$form = new Form($db);
|
||||
$tnota = $form->textbox("_", "No_Beli", $atabel['No_Beli'], false, false, "text");
|
||||
$tfaktur = $form->textbox("_", "No_Faktur", $atabel['No_Faktur'], false, false, "text");
|
||||
$ttglnota = $form->datebox("_", "Tgl_Beli", $atabel['Tgl_Beli'], false, false);
|
||||
$ttglfaktur = $form->datebox("_", "Tgl_Faktur", $atabel['Tgl_Faktur'], false, false);
|
||||
$tjumlah = $form->textbox("_", "Total_Hutang", $atabel['Total_Hutang'], false, false, "double");
|
||||
$tbayar = $form->textbox("_", "Total_Bayar2", $atabel['Total_Bayar'], false, false, "double");
|
||||
$tsisa = $form->textbox("_", "Total_Sisa", $atabel['Sisa_Bayar'], false, false, "double");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<div class="col text-center fs-5 pb-1">Informasi Faktur / Retur</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">No. '.(($tipe=="B")?"Transaksi":"Retur").'</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tnota.'</div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Jumlah '.(($tipe=="B")?"Faktur":"Retur").'</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tjumlah.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">'.(($tipe=="B")?"No. Faktur":"Catatan").'</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tfaktur.'</div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Jumlah Bayar</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tbayar.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Tgl. '.(($tipe=="B")?"Transaksi":"Retur").'</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$ttglnota.'</div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Sisa Hutang</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tsisa.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Tgl. Faktur</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$ttglfaktur.'</div>
|
||||
</div>
|
||||
<div class="row"><div class="col"><hr class="my-1"></div></div>
|
||||
<input type="hidden" id="Total_Sisa" value="'.$atabel['Sisa_Bayar'].'" >
|
||||
<input type="hidden" id="Lunas" value="'.$atabel['Lunas'].'" >
|
||||
<input type="hidden" id="Tipe_Nota" value="'.$tipe.'" >
|
||||
';
|
||||
|
||||
} else if ($data == "detail-bayar") {
|
||||
$form = new Form($db);
|
||||
$ttglbyr = $form->datebox("_", "Tgl_Bayar", tgl_ymd(), true, false);
|
||||
$ttotal = $form->textbox("_", "Temp_Total", Param::Get("Total_Sisa",0), false, false, "double");
|
||||
$tsisa = $form->textbox("_", "Temp_Sisa", 0, false, false, "double");
|
||||
$tbayar = $form->textbox("_", "Total_Bayar", Param::Get("Total_Sisa",0), true, false, "double", null, null, null, "BeliLunasJS.Hitung_Detail();");
|
||||
$tpotong = $form->textbox("_", "Total_Potong", 0, true, false, "double", null, null, null, "BeliLunasJS.Hitung_Detail();");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label" for="Tgl_Bayar">Tanggal Bayar</label>
|
||||
<div class="col-sm-8 col-lg-6">'.$ttglbyr.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">Total Faktur</label>
|
||||
<div class="col">'.$ttotal.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label" for="Total_Bayar">Jumlah Bayar</label>
|
||||
<div class="col">'.$tbayar.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label" for="Total_Potong">Potongan</label>
|
||||
<div class="col">'.$tpotong.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">Sisa Tagihan</label>
|
||||
<div class="col">'.$tsisa.'</div>
|
||||
</div>
|
||||
';
|
||||
|
||||
} 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 Pembayaran Hutang</button>
|
||||
</li>
|
||||
<li class="nav-item ms-auto">
|
||||
<button class="btn btn-secondary mb-1 ms-2" id="butMode" type="button"><i class="bi-list me-2"></i>Normal</button>
|
||||
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</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"> </div>
|
||||
<div id="divTXNota"> </div>
|
||||
<div id="divDetailNota" class="d-none"> </div>
|
||||
<div id="divDetailBayar" class="d-none"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,208 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/iss/beli_lunas_sup.php
|
||||
Desc. : PHP - Transaksi Pelunasan Pembelian / Supplier
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : March 7th, 2011.
|
||||
Last Modified : December 11th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\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_sup = Param::Get("SupID", 0);
|
||||
|
||||
if ( $data == "master" ) {
|
||||
if ($mode == "cancel") {
|
||||
$db->Query("DELETE FROM tmp_inv_beli_lunas WHERE UserID='".user_id()."'");
|
||||
}
|
||||
$ajson = ['error'=>"", 'html'=>""];
|
||||
$form = new Form($db);
|
||||
$tsup = $form->textauto("_", "Nama_Sup", ['value'=>0,'text'=>""], true, false, "ketik nama supplier");
|
||||
$tsupal = $form->textbox("_", "Alamat_Sup", "", false, false, "text");
|
||||
$ttglbyr = $form->datebox("_", "Tgl_Bayar", tgl_ymd(), true, false);
|
||||
$tdisp = $form->textbox("_", "Disp_Bayar", 0, false, false, "double");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Nama_Sup">Nama Supplier</label>
|
||||
<div class="col-sm-8 col-lg-4"><div class="input-group">'.$tsup.'<button id="butBrow" class="btn btn-info" type="button" onclick="BeliLunasSupJS.sup_brow();"><i class="bi-search"></i></button></div></div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Tgl_Bayar">Tanggal Bayar</label>
|
||||
<div class="col-sm-4 col-lg-2">'.$ttglbyr.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Alamat Supplier</label>
|
||||
<div class="col">'.$tsupal.'</div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Total Pembayaran</label>
|
||||
<div class="col">'.$tdisp.'</div>
|
||||
</div>
|
||||
<div class="row"><div class="col"><hr class="my-1"></div></div>
|
||||
<input type="hidden" id="SupID" value="0" >';
|
||||
|
||||
} else if ( $data == "tabel-nota" ) {
|
||||
if ($mode_detail == "update") {
|
||||
$no_beli = Param::Get("No_Beli");
|
||||
$bayar = Param::Get("Jumlah_Bayar", 0);
|
||||
$potong = Param::Get("Jumlah_Potong", 0);
|
||||
$abeli = ['CabID'=>0, 'SupID'=>$id_sup];
|
||||
$db->Query("SELECT * FROM inv_beli WHERE No_Beli='".$no_beli."' LIMIT 1");
|
||||
if ($db->Next()) $abeli = $db->AllRow();
|
||||
|
||||
$db->Query("REPLACE INTO tmp_inv_beli_lunas (No_Beli,CabID,SupID,Jumlah_Bayar,Jumlah_Potong,UserID,Unix) VALUES ('".$no_beli."','".$abeli['CabID']."','".$abeli['SupID']."','".$bayar."','".$potong."','".user_id()."','".user_unix()."')");
|
||||
}
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT B.*,L.Bayar,L.Potong,B.Sisa_Faktur-IF(ISNULL(L.Bayar2),0,L.Bayar2) Jumlah_Sisa FROM (SELECT *,Total_Bayar+Total_Potong Total_Bayar2,Total_Hutang-Total_Bayar-Total_Potong Sisa_Faktur FROM inv_beli WHERE SupID='".$id_sup."' AND Lunas=0) B LEFT JOIN (SELECT No_Beli,Jumlah_Potong Potong,Jumlah_Bayar Bayar,(Jumlah_Bayar+Jumlah_Potong) Bayar2 FROM tmp_inv_beli_lunas WHERE UserID='".user_id()."' AND Unix='".user_unix()."') L ON (B.No_Beli=L.No_Beli)");
|
||||
$obj->set_query_footer("SELECT SUM(B.Sisa_Faktur) Sisa_Faktur,SUM(L.Bayar) Bayar,SUM(L.Potong) Potong,SUM(B.Sisa_Faktur-IF(ISNULL(L.Bayar2),0,L.Bayar2)) Jumlah_Sisa FROM (SELECT No_Beli,Total_Hutang-Total_Bayar-Total_Potong Sisa_Faktur FROM inv_beli WHERE SupID='".$id_sup."' AND Lunas=0) B LEFT JOIN (SELECT No_Beli,Jumlah_Bayar Bayar,Jumlah_Potong Potong,(Jumlah_Bayar+Jumlah_Potong) Bayar2 FROM tmp_inv_beli_lunas WHERE UserID='".user_id()."' AND Unix='".user_unix()."') L ON (B.No_Beli=L.No_Beli)");
|
||||
$obj->add_field("No_Beli", "No. Trans", "c");
|
||||
$obj->add_field("No_Faktur", "No. Faktur", "l");
|
||||
$obj->add_field("Tgl_Faktur", "Tgl. Faktur", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Total_Hutang", "Hutang", "hid", "rupiah");
|
||||
$obj->add_field("Total_Bayar2", "Bayar", "hid", "rupiah");
|
||||
$obj->add_field("Sisa_Faktur", "Sub. Total", "r", "rupiah", "rupiah");
|
||||
$obj->add_field("Bayar", "Pembayaran", "r", "rupiah", "rupiah");
|
||||
$obj->add_field("Potong", "Pemotongan", "r", "rupiah", "rupiah");
|
||||
$obj->add_field("Jumlah_Sisa", "Sisa Hutang", "r", "rupiah", "rupiah");
|
||||
$obj->set_field_order("No_Beli", "A");
|
||||
$obj->add_row_btn("wallet", "Bayar", "BeliLunasSupJS.bayar_tampil");
|
||||
$obj->set_func_navi("BeliLunasSupJS.data_query('tabel-nota')");
|
||||
$ajson[] = $obj->json_table("divTXNota");
|
||||
|
||||
$tot_bayar = 0;
|
||||
$db->Query("SELECT SUM(Jumlah_Bayar) Bayar FROM tmp_inv_beli_lunas WHERE UserID='".user_id()."' AND Unix='".user_unix()."' AND No_Beli IN (SELECT No_Beli FROM inv_beli WHERE SupID='".$id_sup."' AND Lunas=0)");
|
||||
if ($db->Next()) $tot_bayar = $db->Row("Bayar", 0);
|
||||
$ajson[] = ['type'=>"form", 'id'=>"Disp_Bayar", 'value'=>rupiah($tot_bayar)];
|
||||
|
||||
} else if ( $data == "brow-sup" ) {
|
||||
$tcari = trim(Param::Get("Cari_Sup"));
|
||||
$tsql = ($tcari=="") ? " LIMIT 100" : " AND CONCAT(Kode_Sup,Nama_Sup,Telp_Sup) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT * FROM para_supplier WHERE Lunas>0".$tsql);
|
||||
$obj->add_field("SupID", "ID", "hid");
|
||||
$obj->add_field("Kode_Sup", "Kode", "l");
|
||||
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
|
||||
$obj->add_field("Telp_Sup", "Telp", "l");
|
||||
$obj->add_field("Alamat_Sup", "Alamat", "hid");
|
||||
$obj->set_field_order("Kode_Sup", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "BeliLunasSupJS.sup_select");
|
||||
$obj->set_func_navi("BeliLunasSupJS.data_query('brow-sup')");
|
||||
$ajson[] = $obj->json_table("divBrowSup");
|
||||
|
||||
} else if ( $data == "auto-sup" ) {
|
||||
$tcari = Param::Get("Auto_Query");
|
||||
$ajson['autodata'] = [];
|
||||
if (is_string($tcari) && strlen($tcari) < 64) {
|
||||
$db->Query("SELECT * FROM para_supplier WHERE Lunas>0 AND CONCAT(Kode_Sup,Nama_Sup,Telp_Sup) LIKE '%".$tcari."%' ORDER BY Kode_Sup LIMIT 50");
|
||||
while ($db->Next()) {
|
||||
$ajson['autodata'][] = ['value'=>$db->Row("SupID"), 'text'=>$db->Row("Nama_Sup"), 'data'=>$db->Row("Alamat_Sup")];
|
||||
}
|
||||
}
|
||||
|
||||
} else if ($data == "detail-bayar") {
|
||||
$form = new Form($db);
|
||||
$tnota = $form->textbox("_", "No_Beli", "", false, false, "text");
|
||||
$tfaktur = $form->textbox("_", "No_Faktur", "", false, false, "text");
|
||||
$ttglfaktur = $form->datebox("_", "Tgl_Faktur", "", false, false);
|
||||
$tsbayar = $form->textbox("_", "SBayar", 0, false, false, "double");
|
||||
$tjfaktur = $form->textbox("_", "Jumlah_Faktur", 0, false, false, "double");
|
||||
$tjbayar = $form->textbox("_", "Jumlah_Bayar", 0, true, false, "double");
|
||||
$tjpotong = $form->textbox("_", "Jumlah_Potong", 0, true, false, "double");
|
||||
$tsisa = $form->textbox("_", "Sisa_Bayar", 0, false, false, "double");
|
||||
$tsfaktur = $form->textbox("_", "Faktur", 0, false, false, "double");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">No. Transaksi</label>
|
||||
<div class="col">'.$tnota.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">No. Faktur</label>
|
||||
<div class="col">'.$tfaktur.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">Tanggal Faktur</label>
|
||||
<div class="col-sm-8 col-lg-6">'.$ttglfaktur.'</div>
|
||||
</div>
|
||||
<div class="row"><div class="col"><hr class="my-1"></div></div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">Nilai Faktur</label>
|
||||
<div class="col">'.$tsfaktur.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">Pembayaran Sebelumnya</label>
|
||||
<div class="col">'.$tsbayar.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">Sub. Total</label>
|
||||
<div class="col">'.$tjfaktur.'</div>
|
||||
</div>
|
||||
<div class="row"><div class="col"><hr class="my-1"></div></div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label" for="Jumlah_Bayar">Pembayaran Sekarang</label>
|
||||
<div class="col">'.$tjbayar.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label" for="Jumlah_Potong">Pemotongan Sekarang</label>
|
||||
<div class="col">'.$tjpotong.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-6 col-lg-4 col-form-label">Sisa Faktur</label>
|
||||
<div class="col">'.$tsisa.'</div>
|
||||
</div>
|
||||
<input type="hidden" id="mode_detail" value="update" >';
|
||||
|
||||
} else if ( $data == "proses-bayar" ) {
|
||||
$tgl_bayar = tgl_sql2str(Param::Get("Tgl_Bayar"));
|
||||
|
||||
$alist = [];
|
||||
$db->Query("SELECT No_Beli,CabID,SupID,Jumlah_Bayar,Jumlah_Potong FROM tmp_inv_beli_lunas WHERE UserID='".user_id()."' AND Unix='".user_unix()."' AND No_Beli IN (SELECT No_Beli FROM inv_beli WHERE SupID='".$id_sup."' AND Lunas=0)");
|
||||
while ($db->Next()) $alist[] = $db->AllRow();
|
||||
|
||||
foreach ($alist as $_key => $_val) {
|
||||
$db->Query("INSERT INTO inv_beli_lunas SET No_Beli='".$_val['No_Beli']."',CabID='".$_val['CabID']."',SupID='".$_val['SupID']."',Tgl_Bayar='".$tgl_bayar."',Total_Bayar='".$_val['Jumlah_Bayar']."',Total_Potong='".$_val['Jumlah_Potong']."',UserID='".user_id()."'");
|
||||
$db->Query("UPDATE inv_beli B,(SELECT No_Beli,MAX(Tgl_Bayar) Tgl_Lunas,SUM(Total_Bayar) Total_Bayar,SUM(Total_Potong) Total_Potong FROM inv_beli_lunas WHERE No_Beli='".$_val['No_Beli']."') L SET B.Total_Bayar=L.Total_Bayar,B.Total_Potong=L.Total_Potong,B.Lunas=IF(B.Total_Hutang-B.Total_Bayar-B.Total_Potong=0,1,0),B.Tgl_Lunas=IF(B.Lunas=1,L.Tgl_Lunas,'0000-00-00') WHERE B.No_Beli=L.No_Beli AND B.No_Beli='".$_val['No_Beli']."'");
|
||||
$db->Query("DELETE FROM tmp_inv_beli_lunas WHERE No_Beli='".$_val['No_Beli']."'");
|
||||
}
|
||||
Update_Lunas_Sup($id_sup);
|
||||
|
||||
} 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 Pembayaran Hutang / Supplier</button>
|
||||
</li>
|
||||
<li class="nav-item ms-auto">
|
||||
<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"> </div>
|
||||
<div id="divTXNota"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,316 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/iss/beli_retur.php
|
||||
Desc. : PHP - Transaksi Retur Pembelian
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 22th, 2010.
|
||||
Last Modified : October 10th, 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_Beli", "");
|
||||
|
||||
if ( $data == "master" ) {
|
||||
$ajson = ['error'=>"", 'html'=>""];
|
||||
$atabel = ['No_Beli'=>$nomor, 'CabID'=>$id_cab];
|
||||
|
||||
if ($mode == "add") {
|
||||
$atabel['No_Beli'] = "TR-BARU#".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
|
||||
$atabel['Tgl_Beli'] = 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("R", Param::Get("Tgl_Beli"), true);
|
||||
Detail_Save($nomor, 4, $id_cab, Param::Get("Tgl_Beli"), $b_baru, $no_lama);
|
||||
|
||||
$tot_retur = 0;
|
||||
$db->Query("SELECT SUM(Qty*Harga_Beli) Retur_Beli FROM inv_detail WHERE No_Ref='".$nomor."'");
|
||||
if ($db->Next()) $tot_retur = $db->RowFloat("Retur_Beli", 0);
|
||||
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_beli");
|
||||
$sql->add_param_date("Tgl_Beli");
|
||||
$sql->add_param("CabID");
|
||||
$sql->add_param("SupID");
|
||||
$sql->add_param("Total_Beli", $tot_retur);
|
||||
$sql->add_param("Total_Hutang", $tot_retur);
|
||||
$sql->add_param("No_Faktur");
|
||||
$sql->add_param("Tgl_Faktur", "Tgl_Beli", true);
|
||||
$sql->add_param("Data_Beli", 0);
|
||||
$sql->add_param_stamp();
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("No_Beli", $nomor);
|
||||
$sql->UpdateDB();
|
||||
|
||||
Update_Lunas_Sup(Param::Get("SupID"));
|
||||
$mode = "view";
|
||||
|
||||
} else if ($mode == "cancel") {
|
||||
Detail_Cancel($nomor);
|
||||
$mode = "view";
|
||||
$nomor = ""; $atabel['No_Beli'] = "";
|
||||
}
|
||||
|
||||
if ($nomor <> "" && $mode <> "cancel") {
|
||||
$db->Query("SELECT * FROM inv_beli WHERE Data_Beli=0 AND No_Beli='".$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_Beli", $atabel['No_Beli'], !$enable, false, "text", "nomor transaksi");
|
||||
$ttgl = $form->datebox("_", "Tgl_Beli", $atabel['Tgl_Beli'], $enable, false);
|
||||
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0," "]);
|
||||
$tsup = $form->option_db("_", "SupID", $atabel['SupID'], $enable, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0," "]);
|
||||
$tcatat = $form->textbox("_", "No_Faktur", $atabel['No_Faktur'], $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_Beli">Nomor Transaksi</label>
|
||||
<div class="col"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="BeliReturJS.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_Beli">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="SupID">Nama Supplier</label>
|
||||
<div class="col">'.$tsup.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Faktur">Catatan</label>
|
||||
<div class="col">'.$tcatat.'</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="my-1">
|
||||
<input type="hidden" id="Lunas" value="'.$atabel['Lunas'].'" >
|
||||
<input type="hidden" id="mode" value="'.$mode.'" >';
|
||||
|
||||
} else if ( $data == "delete" ) {
|
||||
$db->Query("DELETE FROM inv_beli WHERE No_Beli='".$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)) * -1; $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 *,-Qty Qty2,(-Qty*Harga_Beli) Total 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->set_query_footer("SELECT SUM(D.Total) Total FROM (SELECT (-Qty*Harga_Beli) Total FROM ".$qtabel." WHERE No_Ref='".$nomor."'".$qview.") D");
|
||||
$obj->add_field("ID", "ID", "hid");
|
||||
$obj->add_field("InvID", "InvID", "hid");
|
||||
$obj->add_field("SatuanID", "SatuanID", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Produk", "Nama Barang", "awr");
|
||||
$obj->add_field("Qty2", "Qty", "r", "rupiah2");
|
||||
$obj->add_field("Harga_Beli", "Harga @", "r", "rupiah2");
|
||||
$obj->add_field("Total", "Jumlah", "r", "rupiah2", "rupiah2");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
if (in_array($mode, ["add","edit"])) {
|
||||
$obj->add_row_btn("clipboard", "Ubah", "BeliReturJS.detail_ubah");
|
||||
$obj->add_row_btn("trash", "Hapus", "BeliReturJS.detail_hapus", "Unix", user_unix());
|
||||
$obj->set_func_btn("BeliReturJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Barang');
|
||||
$obj->set_func_btn("BeliReturJS.produk_brow", '<i class="bi-table me-1"></i> Browse');
|
||||
}
|
||||
$obj->set_func_navi("BeliReturJS.data_query('tabel-detail')");
|
||||
$ajson[] = $obj->json_table("divDetailTabel");
|
||||
|
||||
} else if ( $data == "brow-tx" ) {
|
||||
$tcari = trim(Param::Get("Cari_TX"));
|
||||
$tsql = ($tcari=="") ? " LIMIT 100" : " WHERE CONCAT(B.No_Beli,S.Nama_Sup,DATE_FORMAT(B.Tgl_Beli,'%d-%m-%Y')) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_query("SELECT B.*,S.Nama_Sup FROM (SELECT * FROM inv_beli WHERE Data_Beli=0) B LEFT JOIN para_supplier S ON (B.SupID=S.SupID)".$tsql);
|
||||
$obj->add_field("No_Beli", "No. Transaksi", "c");
|
||||
$obj->add_field("Tgl_Beli", "Tgl. Transaksi", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
|
||||
$obj->add_field("Total_Hutang", "Total", "r", "rupiah2");
|
||||
$obj->set_field_order("No_Beli", "D");
|
||||
$obj->add_row_btn("save", "Pilih", "BeliReturJS.tx_select");
|
||||
$obj->set_func_navi("BeliReturJS.data_query('brow-tx')");
|
||||
$ajson[] = $obj->json_table("divBrowTX");
|
||||
|
||||
} else if ( $data == "brow-produk" ) {
|
||||
$tcari = trim(Param::Get("Cari_Produk"));
|
||||
$tsql = ($tcari <> "") ? " AND P.Barcode_Nama LIKE '%".$tcari."%'": "";
|
||||
$tsql .= (Param::Get("Filter_Browse")=="all") ? "" : " AND S.SupID='".Param::Get("SupID")."'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("vi_inv_produk P LEFT JOIN inv_produk_sup S ON (P.InvID=S.InvID)", "P.*", "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("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", "BeliReturJS.produk_select");
|
||||
$obj->set_func_navi("BeliReturJS.data_query('brow-produk')");
|
||||
$ajson[] = $obj->db_table("divBrowProduk");
|
||||
|
||||
} else if ( $data == "auto-produk" ) {
|
||||
$tcari = Param::Get("Auto_Query");
|
||||
$ajson['autodata'] = [];
|
||||
$bcode = 0; $arec = [];
|
||||
// Cari by SKU
|
||||
$db->Query("SELECT K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',CONVERT(K.Harga_Jual 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 K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',CONVERT(K.Harga_Jual 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.*,K.Kode_SKU,K.Harga_Jual,S.Nama_Satuan,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',K.Harga_Jual) 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 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")), '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")];
|
||||
if ($id > 0) {
|
||||
$db->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND ID='".$id."' LIMIT 1");
|
||||
if ($db->Next()) $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");
|
||||
$tbeli = $form->textbox("_", "Harga_Beli", $atabel['Harga_Beli'], true, true, "double");
|
||||
$tsat = $form->textbox("_", "Nama_Satuan", $atabel['Nama_Satuan'], false, false, "text");
|
||||
$ttot = $form->textbox("_", "Jumlah", 0, false, false, "double");
|
||||
$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" for="Qty">Qty</label>
|
||||
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$tqty.$tsat.'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label" for="Harga_Beli">Harga (@)</label>
|
||||
<div class="col-sm-4 col-lg-5">'.$tbeli.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label">Total</label>
|
||||
<div class="col-sm-4 col-lg-5">'.$ttot.'</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="mode_detail" value="'.$mode_detail.'" >';
|
||||
|
||||
} 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 Retur Pembelian</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"> </div>
|
||||
<div id="divDetailTabel"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -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);
|
||||
?>
|
||||
@@ -0,0 +1,307 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/iss/mutasi.php
|
||||
Desc. : PHP - Transaksi Mutasi Stok Cabang
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : February 28th, 2011.
|
||||
Last Modified : December 10th, 2025.
|
||||
|
||||
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
|
||||
|
||||
*******************************************************************/
|
||||
|
||||
require_once(__DIR__."/../../../../../vendor/autoload.php");
|
||||
require_once(__DIR__."/../func.iss.php");
|
||||
|
||||
use siaupheng\fonia3\DB\MySQL;
|
||||
use siaupheng\fonia3\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_dari = Param::Get("Dari_CabID", 0);
|
||||
$id_cab_ke = Param::Get("Ke_CabID", 0);
|
||||
$nomor = Param::Get("No_Mutasi", "");
|
||||
|
||||
if ( $data == "master" ) {
|
||||
$ajson = ['error'=>"", 'html'=>""];
|
||||
$atabel = ['No_Mutasi'=>$nomor];
|
||||
|
||||
if ($mode == "add") {
|
||||
$atabel['No_Mutasi'] = "MU-BARU#".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
|
||||
$atabel['Tgl_Mutasi'] = tgl_ymd();
|
||||
$atabel['Dari_CabID'] = $_SESSION['__APP_INV']['CABANGID'];
|
||||
$atabel['Ke_CabID'] = 0;
|
||||
$nomor = "";
|
||||
|
||||
} else if ($mode == "edit") {
|
||||
Detail_Copy($nomor, false, true);
|
||||
|
||||
} else if ($mode == "save") {
|
||||
$no_lama = $nomor;
|
||||
$b_baru = (strpos($no_lama,"BARU")===false) ? false : true;
|
||||
if ($b_baru) $nomor = Nomor_Baru("M", Param::Get("Tgl_Mutasi"), true);
|
||||
Detail_Save($nomor, 2, $id_cab_ke, Param::Get("Tgl_Mutasi"), $b_baru, $no_lama, true, $id_cab_dari);
|
||||
|
||||
$tot_mutasi = 0;
|
||||
$db->Query("SELECT SUM(Qty*Harga_Beli) Beli FROM inv_detail WHERE No_Ref='".$nomor."' AND Qty>0");
|
||||
if ($db->Next()) $tot_mutasi = $db->RowFloat("Beli", 0);
|
||||
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_mutasi");
|
||||
$sql->add_param_date("Tgl_Mutasi");
|
||||
$sql->add_param("Dari_CabID");
|
||||
$sql->add_param("Ke_CabID");
|
||||
$sql->add_param("Total_Mutasi", $tot_mutasi);
|
||||
$sql->add_param("Catatan");
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("No_Mutasi", $nomor);
|
||||
$sql->UpdateDB();
|
||||
$mode = "view";
|
||||
|
||||
} else if ($mode == "cancel") {
|
||||
Detail_Cancel($nomor);
|
||||
$mode = "view";
|
||||
$nomor = ""; $atabel['No_Mutasi'] = "";
|
||||
}
|
||||
|
||||
if ($nomor <> "" && $mode <> "cancel") {
|
||||
$db->Query("SELECT * FROM inv_mutasi WHERE No_Mutasi='".$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_Mutasi", $atabel['No_Mutasi'], !$enable, false, "text", "nomor transaksi");
|
||||
$ttgl = $form->datebox("_", "Tgl_Mutasi", $atabel['Tgl_Mutasi'], $enable, false);
|
||||
$tcab1 = $form->option_db("_", "Dari_CabID", $atabel['Dari_CabID'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0," "]);
|
||||
$tcab2 = $form->option_db("_", "Ke_CabID", $atabel['Ke_CabID'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0," "]);
|
||||
$tcatat = $form->textbox("_", "Catatan", $atabel['Catatan'], $enable, false, "text");
|
||||
$ajson['html'] = '
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="No_Mutasi">Nomor Transaksi</label>
|
||||
<div class="col-sm-8 col-lg-4"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="MutasiJS.tx_brow();"><i class="bi-search"></i></button></div></div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Dari_CabID">Dari Cabang</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tcab1.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Tgl_Mutasi">Tanggal Transaksi</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$ttgl.'</div>
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Ke_CabID">Ke Cabang</label>
|
||||
<div class="col-sm-8 col-lg-4">'.$tcab2.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Catatan">Catatan</label>
|
||||
<div class="col">'.$tcatat.'</div>
|
||||
</div>
|
||||
<hr class="my-1">
|
||||
<input type="hidden" id="mode" value="'.$mode.'" >';
|
||||
|
||||
} else if ( $data == "delete" ) {
|
||||
$db->Query("DELETE FROM inv_mutasi WHERE No_Mutasi='".$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;
|
||||
$harga_beli = Param::Get("Harga_Beli", 0);
|
||||
|
||||
$sql = new SQL($db); // cabang tujuan + qty positip
|
||||
$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", $harga_beli);
|
||||
$sql->add_param("Harga_Jual", $harga_beli);
|
||||
$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 = "AND Qty>0"; $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,P.StokID,(D.Qty*D.Harga_Beli) Total 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->set_query_footer("SELECT COUNT(*) Harga_Beli,SUM(Qty*Harga_Beli) Total FROM ".$qtabel." WHERE No_Ref='".$nomor."' ".$qview);
|
||||
$obj->add_field("ID", "ID", "hid");
|
||||
$obj->add_field("InvID", "InvID", "hid");
|
||||
$obj->add_field("StokID", "StokID", "hid");
|
||||
$obj->add_field("Harga_Beli", "HPP", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Produk", "Nama Barang", "awr");
|
||||
$obj->add_field("Nama_Satuan", "Satuan", "l");
|
||||
$obj->add_field("Qty", "Qty", "r", "rupiah2");
|
||||
$obj->add_field("Harga_Beli", "Harga @", "r", "rupiah", "items");
|
||||
$obj->add_field("Total", "Jumlah", "r", "rupiah", "rupiah");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
if (in_array($mode, ["add","edit"])) {
|
||||
$obj->add_row_btn("clipboard", "Ubah", "MutasiJS.detail_ubah");
|
||||
$obj->add_row_btn("trash", "Hapus", "MutasiJS.detail_hapus", "Unix", user_unix());
|
||||
$obj->set_func_btn("MutasiJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Barang');
|
||||
$obj->set_func_btn("MutasiJS.produk_brow", '<i class="bi-table me-1"></i> Browse');
|
||||
}
|
||||
$obj->set_func_navi("MutasiJS.data_query('tabel-detail')");
|
||||
$ajson[] = $obj->json_table("divDetailTabel");
|
||||
|
||||
} else if ( $data == "brow-tx" ) {
|
||||
$tcari = trim(Param::Get("Cari_TX"));
|
||||
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(No_Mutasi,DATE_FORMAT(Tgl_Mutasi,'%d-%m-%Y')) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("(SELECT * FROM inv_mutasi".$tsql.") M LEFT JOIN para_cabang C1 ON (C1.CabID=M.Dari_CabID) LEFT JOIN para_cabang C2 ON (C2.CabID=M.Ke_CabID)", "M.*,C1.Nama_Cab Cab1,C2.Nama_Cab Cab2", "");
|
||||
$obj->add_field("No_Mutasi", "No. Transaksi", "c");
|
||||
$obj->add_field("Tgl_Mutasi", "Tgl. Transaksi", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Cab1", "Dari Cab", "c");
|
||||
$obj->add_field("Cab2", "Ke Cab", "c");
|
||||
$obj->add_field("Total_Mutasi", "Total", "r", "rupiah");
|
||||
$obj->set_field_order("No_Mutasi", "D");
|
||||
$obj->add_row_btn("save", "Pilih", "MutasiJS.tx_select");
|
||||
$obj->set_func_navi("MutasiJS.data_query('brow-tx')");
|
||||
$ajson[] = $obj->db_table("divBrowTX");
|
||||
|
||||
} else if ( $data == "brow-produk" ) {
|
||||
$tcari = trim(Param::Get("Cari_Produk"));
|
||||
$tsql = ($tcari=="") ? "" : " AND CONCAT(P.Kode_Barcode,P.Nama_Produk) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("(SELECT InvID,SatuanID,SUM(Stok) Stok FROM inv_detail WHERE CabID='".$id_cab_dari."' 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", "MutasiJS.produk_select");
|
||||
$obj->set_func_navi("MutasiJS.data_query('brow-produk')");
|
||||
$ajson[] = $obj->db_table("divBrowProduk");
|
||||
|
||||
} else if ( $data == "auto-produk" ) {
|
||||
$tcari = Param::Get("Auto_Query");
|
||||
$ajson['autodata'] = [];
|
||||
$bcode = 0; $arec = [];
|
||||
// Cari by SKU
|
||||
$db->Query("SELECT P.*,CONCAT(K.Kode_SKU,' / ',K.Kode_Barcode,':',P.Nama_Produk,':',S.Nama_Satuan,':',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 CabID='".$id_cab_dari."' 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, false, "double");
|
||||
$tharga = $form->textbox("_", "Harga_Beli", $atabel['HPP'], false, false, "double");
|
||||
$tjumlah = $form->textbox("_", "Jumlah", 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" for="Qty">Qty</label>
|
||||
<div class="col-sm-5 col-lg-4">'.$tqty.'</div>
|
||||
<div class="col">'.$tsat.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label">Harga @</label>
|
||||
<div class="col-sm-8 col-lg-6">'.$tharga.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-3 col-form-label">Total</label>
|
||||
<div class="col-sm-8 col-lg-6">'.$tjumlah.'</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="mode_detail" value="'.$mode_detail.'" >';
|
||||
|
||||
} 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 Mutasi Stok Cabang</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"> </div>
|
||||
<div id="divDetailTabel"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -0,0 +1,304 @@
|
||||
<?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'=>0];
|
||||
|
||||
if ($mode == "add") {
|
||||
$atabel['No_Opname'] = "TO-BARU#".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
|
||||
$atabel['Tgl_Opname'] = tgl_ymd();
|
||||
$atabel['CabID'] = $id_cab;
|
||||
$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'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0," "]);
|
||||
$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=="") ? "" : " WHERE CONCAT(No_Opname,DATE_FORMAT(Tgl_Opname,'%d-%m-%Y')) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("(SELECT * FROM inv_opname".$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"> </div>
|
||||
<div id="divDetailTabel"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -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);
|
||||
?>
|
||||
@@ -0,0 +1,339 @@
|
||||
<?php
|
||||
|
||||
/*******************************************************************
|
||||
|
||||
App. Name : INVENTORY AND SALES SYSTEMS
|
||||
Module : /apps/php/iss/po.php
|
||||
Desc. : PHP - Transaksi Pembuatan Purchase Order
|
||||
Created By : Siau Pheng ([email protected]).
|
||||
Created Date : May 22th, 2010.
|
||||
Last Modified : October 19th, 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;
|
||||
|
||||
function PO_Data1($nomor="", $baru=false) {
|
||||
global $db;
|
||||
$aparam = ['No_PO'=>$nomor];
|
||||
if (trim($nomor)=="") {
|
||||
if ($baru) $aparam['No_PO'] = "PO".$_SESSION['__WEB_APP']['SERVER_ID'].$_SESSION['__APP_INV']['CABANGID'].user_id(3)."#00";
|
||||
$aparam['Tgl_PO'] = tgl_ymd();
|
||||
$aparam['SupID'] = 0;
|
||||
$aparam['CabID'] = $_SESSION['__APP_INV']['CABANGID'];
|
||||
$aparam['Total_Beli'] = 0;
|
||||
} else {
|
||||
$db->Query("SELECT * FROM inv_po WHERE No_PO='".$nomor."'");
|
||||
if ($db->Next()) $aparam = $db->AllRow();
|
||||
}
|
||||
return $aparam;
|
||||
}
|
||||
|
||||
$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']);
|
||||
$id_sup = Param::Get("SupID", 0);
|
||||
$nomor = Param::Get("No_PO", "");
|
||||
|
||||
if ( $data == "master" ) {
|
||||
$ajson = ['error'=>"", 'html'=>""];
|
||||
$atabel = ['No_PO'=>$nomor];
|
||||
|
||||
if ($mode == "add") {
|
||||
$atabel = PO_Data1("", true);
|
||||
} else if ($mode == "edit") {
|
||||
PO_Detail_Copy($nomor, true);
|
||||
$atabel = PO_Data1($nomor);
|
||||
} else if ($mode == "save") {
|
||||
$no_lama = $nomor;
|
||||
$b_baru = (strpos($no_lama,"PO")===false) ? false : true;
|
||||
if ($b_baru) {
|
||||
$nomor = Nomor_Baru("P", Param::Get("Tgl_PO"), true);
|
||||
}
|
||||
PO_Detail_Save($nomor, $b_baru, $no_lama);
|
||||
|
||||
$apo = [];
|
||||
$db->Query("SELECT SUM(Qty*Harga_Beli) Beli FROM inv_po_detail WHERE No_PO='".$nomor."'");
|
||||
if ($db->Next()) $apo = $db->AllRow();
|
||||
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("inv_po");
|
||||
$sql->add_param_date("Tgl_PO");
|
||||
$sql->add_param("CabID");
|
||||
$sql->add_param("SupID");
|
||||
$sql->add_param("Total_Beli", $apo['Beli']);
|
||||
$sql->add_param("Total_Tagihan", $apo['Diskon']);
|
||||
$sql->add_param_stamp();
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("No_PO", $nomor);
|
||||
$sql->UpdateDB();
|
||||
//PO_Update($nomor);
|
||||
|
||||
$atabel = PO_Data1($nomor);
|
||||
$mode = "view";//todo: print jika langsung cetak
|
||||
|
||||
} else if ($mode == "cancel") {
|
||||
PO_Detail_Cancel($nomor);
|
||||
$atabel = PO_Data1();
|
||||
} else {
|
||||
$atabel = PO_Data1($nomor);
|
||||
}
|
||||
|
||||
$enable = in_array($mode, ["add","edit"]) ? true : false;
|
||||
$form = new Form($db);
|
||||
$tnota = $form->textbox("_", "No_PO", $atabel['No_PO'], !$enable, true, "text", "nomor transaksi");
|
||||
$ttglnota = $form->datebox("_", "Tgl_PO", $atabel['Tgl_PO'], $enable, true);
|
||||
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY Nama_Cab", [0," "]);
|
||||
$tsup = $form->option_db("_", "SupID", $atabel['SupID'], $enable, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0," "], null, "POJS.oc_SupID(this);");
|
||||
$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_PO">Nomor Transaksi</label>
|
||||
<div class="col"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="POJS.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_PO">Tanggal Transaksi</label>
|
||||
<div class="col-sm-7 col-lg-5">'.$ttglnota.'</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="SupID">Nama Supplier</label>
|
||||
<div class="col">'.$tsup.'</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
|
||||
<input type="hidden" id="Total_Beli" value="'.$atabel['Total_Beli'].'" >
|
||||
<input type="hidden" id="mode" value="'.$mode.'" >
|
||||
';
|
||||
|
||||
} else if ( $data == "delete" ) {
|
||||
$db->Query("DELETE FROM inv_po WHERE No_PO='".$nomor."'");
|
||||
$db->Query("DELETE FROM inv_po_detail WHERE No_PO='".$nomor."'");
|
||||
$ajson['status'] = true;
|
||||
|
||||
} else if ( $data == "tabel-detail" ) {
|
||||
if (in_array($mode_detail, ["insert","update","delete"])) {
|
||||
$sql = new SQL($db);
|
||||
$sql->set_table("tmp_inv_po_detail");
|
||||
$sql->add_param("No_PO", $nomor);
|
||||
$sql->add_param("InvID");
|
||||
$sql->add_param("SatuanID");
|
||||
$sql->add_param("Qty");
|
||||
$sql->add_param("Harga_Beli");
|
||||
$sql->add_param("Harga_HPP");
|
||||
$sql->add_param_unix();
|
||||
$sql->add_param_stamp();
|
||||
$sql->add_param_userid();
|
||||
$sql->add_where("ID");
|
||||
$sql->add_where("No_PO", $nomor);
|
||||
|
||||
if ( $mode_detail == "insert" ) {
|
||||
$sql->InsertDB();
|
||||
} else if ( $mode_detail == "update" ) {
|
||||
$sql->UpdateDB();
|
||||
} else if ( $mode_detail == "delete" ) {
|
||||
$sql->DeleteDB();
|
||||
}
|
||||
} else if ($mode_detail == "sup-baru") {
|
||||
$tot_qty = 0;
|
||||
$db->Query("SELECT SUM(Qty) Qty FROM tmp_inv_po_detail WHERE No_PO='".$nomor."'");
|
||||
if ($db->Next()) $tot_qty = $db->Row("Qty", 0);
|
||||
if ($tot_qty > 0) {
|
||||
$ajson[] = array('type'=>"msg", 'wait'=>1500, 'mode'=>"error", 'value'=>"Sudah ada Qty Barang yang telah memiliki Nilai !");
|
||||
} else {
|
||||
$db->Query("DELETE FROM tmp_inv_po_detail WHERE No_PO='".$nomor."'");
|
||||
$db->Query("INSERT INTO tmp_inv_po_detail (No_PO,InvID,SatuanID,Qty,Harga_Beli,Harga_HPP,Invoice,DateStamp,UserID,Unix) SELECT '".$nomor."',P.InvID,K.SatuanID,0,P.Harga_Pokok*K.Qty,P.Harga_Pokok*K.Qty,0,NOW(),'".user_id()."','".user_unix()."' FROM (SELECT * FROM inv_produk_kemasan WHERE InvID IN (SELECT InvID FROM inv_produk_sup WHERE Aktif=1 AND SupID='".$id_sup."')) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) WHERE P.Aktif=1");
|
||||
}
|
||||
}
|
||||
|
||||
$qview = ""; $qtabel = "inv_po_detail";
|
||||
if (in_array($mode, ["add","edit"])) {
|
||||
if ($mode=="add") $qview = " AND Unix=".user_unix();
|
||||
$qtabel = "tmp_inv_po_detail";
|
||||
}
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("(SELECT * FROM ".$qtabel." WHERE No_PO='".$nomor."' ".$qview.") D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID) LEFT JOIN (SELECT InvID,SUM(Stok) Stok FROM inv_detail WHERE InvID IN (SELECT InvID FROM ".$qtabel." WHERE No_PO='".$nomor."') GROUP BY InvID) S ON (S.InvID=D.InvID)", "D.*,P.Kode_SKU,P.Nama_Lengkap,P.Nama_Satuan,P.Harga_Pokok,(D.Qty*D.Harga_Beli) Total,S.Stok,IF(IFNULL(S.Stok,0)>0,1,0) KOSONG", "");
|
||||
$obj->set_query_footer("SELECT SUM(D.Qty*D.Harga_Beli) Total FROM (SELECT * FROM ".$qtabel." WHERE No_PO='".$nomor."' ".$qview.") D");
|
||||
$obj->add_field("ID", "No", "c");
|
||||
$obj->add_field("InvID", "InvID", "hid");
|
||||
$obj->add_field("SatuanID", "SatuanID", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
|
||||
$obj->add_field("Stok", "Stok", "r", "rupiah2");
|
||||
$obj->add_field("Qty", "PO", "r", "rupiah2");
|
||||
$obj->add_field("Harga_Beli", "Harga @", "r", "rupiah");
|
||||
$obj->add_field("Total", "Jumlah", "r", "rupiah", "rupiah");
|
||||
$obj->set_row_color("KOSONG", "0", "ryellow");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
if (in_array($mode, ["add","edit"])) {
|
||||
$obj->add_row_btn("clipboard", "Ubah", "POJS.detail_ubah");
|
||||
$obj->add_row_btn("trash", "Hapus", "POJS.detail_hapus", "Unix", user_unix());
|
||||
$obj->set_func_btn("POJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Produk');
|
||||
$obj->set_func_btn("POJS.produk_brow", '<i class="bi-table me-1"></i> Browse');
|
||||
}
|
||||
$obj->set_func_navi("POJS.data_query('tabel-detail')");
|
||||
$ajson[] = $obj->db_table("divDetailTabel");
|
||||
|
||||
$ntotal = 0;
|
||||
$db->Query("SELECT SUM(D.Qty*D.Harga_Beli) Jumlah FROM ".$qtabel." D WHERE D.No_PO='".$nomor."' ".$qview);
|
||||
if ($db->Next()) $ntotal = floatval($db->Row("Jumlah", 0));
|
||||
$ajson[] = ['type'=>"form", 'id'=>"Total_Beli", 'value'=>$ntotal];
|
||||
|
||||
} else if ( $data == "brow-tx" ) {
|
||||
$tcari = trim(Param::Get("Cari_TX"));
|
||||
$tsql = ($tcari=="") ? "" : "CONCAT(P.No_PO,S.Nama_Sup,DATE_FORMAT(P.Tgl_PO,'%d-%m-%Y')) LIKE '%".$tcari."%'";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("(SELECT * FROM inv_po) P LEFT JOIN para_supplier S ON (P.SupID=S.SupID)", "P.*,S.Nama_Sup", $tsql);
|
||||
$obj->add_field("No_PO", "No. Trans", "c");
|
||||
$obj->add_field("Tgl_PO", "Tgl. Trans", "c", "sqltgl", null, "val-tgl");
|
||||
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
|
||||
$obj->add_field("Total_Beli", "Jumlah PO", "r", "rupiah");
|
||||
$obj->set_field_order("No_PO", "D");
|
||||
$obj->add_row_btn("save", "Pilih", "POJS.tx_select");
|
||||
$obj->set_func_navi("POJS.data_query('brow-tx')");
|
||||
$ajson[] = $obj->db_table("divBrowTX");
|
||||
|
||||
} else if ( $data == "brow-produk" ) {
|
||||
$tcari = trim(Param::Get("Cari_Produk"));
|
||||
$tsql = ($tcari <> "") ? " AND P.Barcode_Nama LIKE '%".$tcari."%'": "";
|
||||
$tsql .= (Param::Get("Filter_Browse")=="all") ? "" : " AND P.InvID IN (SELECT InvID FROM inv_produk_sup WHERE SupID='".Param::Get("SupID")."')";
|
||||
|
||||
$obj = new Table($db);
|
||||
$obj->set_table("vi_inv_produk P", "P.*", "P.Aktif=1 AND InvID NOT IN (SELECT InvID FROM tmp_inv_po_detail WHERE No_PO='".$nomor."')".$tsql);
|
||||
$obj->add_field("InvID", "ID", "hid");
|
||||
$obj->add_field("SatuanID", "ID", "hid");
|
||||
$obj->add_field("Kode_SKU", "SKU", "c");
|
||||
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
|
||||
$obj->add_field("Harga_Pokok", "Harga Pokok", "r", "rupiah");
|
||||
$obj->set_field_order("Kode_SKU", "A");
|
||||
$obj->add_row_btn("save", "Pilih", "POJS.produk_select");
|
||||
$obj->set_func_navi("POJS.data_query('brow-produk')");
|
||||
$ajson[] = $obj->db_table("divBrowProduk");
|
||||
|
||||
} else if ( $data == "auto-produk" ) {
|
||||
$tcari = Param::Get("Auto_Query");
|
||||
$ajson['autodata'] = [];
|
||||
$bcode = 0; $arec = [];
|
||||
// Cari by SKU
|
||||
$db->Query("SELECT K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',CONVERT(P.Harga_Pokok*K.Qty 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 K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',CONVERT(P.Harga_Pokok*K.Qty 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.*,K.Kode_SKU,K.Harga_Jual,S.Nama_Satuan,CONCAT(K.SatuanID,':',S.Nama_Satuan,':',P.Nama_Produk,' ',S.Nama_Satuan,':',P.Harga_Pokok*K.Qty) 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 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")), 'data'=>$db->Row("Data2"), 'bc'=>0];
|
||||
}
|
||||
}
|
||||
|
||||
} else if ($data == "detail-produk") {
|
||||
$id = Param::Get("ID", 0); $atabel = ['ID'=>$id, 'InvID'=>Param::Get("InvID",0), 'SatuanID'=>Param::Get("SatuanID",0)];
|
||||
if ($id > 0) {
|
||||
$db->Query("SELECT * FROM tmp_inv_po_detail WHERE No_PO='".$nomor."' AND ID='".$id."' LIMIT 1");
|
||||
if ($db->Next()) $atabel = $db->AllRow();
|
||||
}
|
||||
if ($atabel['InvID']>0 && $atabel['SatuanID']>0) {
|
||||
$db->Query("SELECT 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 nama produk");
|
||||
$tqty = $form->textbox("_", "Qty", $atabel['Qty'], true, true, "double");
|
||||
$tstok = $form->textbox("_", "Stok", $atabel['Stok'], false, false, "double");
|
||||
$tbeli = $form->textbox("_", "Harga_Beli", $atabel['Harga_Beli'], true, true, "double");
|
||||
$ttot = $form->textbox("_", "Jumlah", 0, false, false, "double");
|
||||
$tsat1 = $form->textbox("_", "Nama_Satuan1", $atabel['Nama_Satuan'], false, false, "text");
|
||||
$tsat2 = $form->textbox("_", "Nama_Satuan2", $atabel['Nama_Satuan'], false, false, "text");
|
||||
$ajson['html'] = '
|
||||
<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="Qty">Qty</label>
|
||||
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$tqty.$tsat1.'</div></div>
|
||||
<div class="col-sm-4 col-lg-5"><div class="input-group float-end"><span class="input-group-text">Stok</span>'.$tstok.$tsat2.'</div></div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label" for="Harga_Beli">Harga (@)</label>
|
||||
<div class="col-sm-4 col-lg-5">'.$tbeli.'</div>
|
||||
</div>
|
||||
<div class="row mb-1">
|
||||
<label class="col-sm-4 col-lg-2 col-form-label">Total</label>
|
||||
<div class="col-sm-4 col-lg-5">'.$ttot.'</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_HPP" value="'.$atabel['Harga_HPP'].'" >
|
||||
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >
|
||||
';
|
||||
|
||||
} else if ( $data == "detail-item" ) {
|
||||
$ajson['data'] = "kosong";
|
||||
$db->Query("SELECT InvID,SUM(Stok) Stok FROM inv_detail WHERE InvID='".Param::Get("InvID")."'");
|
||||
if ($db->Next()) $ajson = $db->AllRow();
|
||||
|
||||
} 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 Pembuatan Purchase Order</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-light border mb-1 ms-2" id="butShare" type="button"><i class="bi-share me-2"></i>Share</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"> </div>
|
||||
<div id="divDetailTabel"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
?>
|
||||
@@ -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 px-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," "]);
|
||||
$tsat = $form->option_db("_", "StokID", 0, true, false, "para_satuan", ["SatuanID","Nama_Satuan"], "Aktif=1 ORDER BY Nama_Satuan", [0," "]);
|
||||
$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">≈</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"> </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"> </div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-3 col-lg-2 border-start">
|
||||
<div id="divPOS2"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div></div>';
|
||||
}
|
||||
|
||||
send_json($ajson);
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user