first commit
This commit is contained in:
@@ -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);
|
||||
?>
|
||||
Reference in New Issue
Block a user