opname stok: koreksi sisa stok per satuan; laporan stok akhir: tampil sisa stok dg nama satuan

This commit is contained in:
2026-04-10 08:48:12 +07:00
parent 62e58e7d97
commit e4955c0c20
7 changed files with 32 additions and 32 deletions
+11 -10
View File
@@ -5,9 +5,9 @@
Desc. : JS - Transaksi Opname Stok Barang Desc. : JS - Transaksi Opname Stok Barang
Created By : Siau Pheng ([email protected]). Created By : Siau Pheng ([email protected]).
Created Date : May 24th, 2010. Created Date : May 24th, 2010.
Last Modified : September 29th, 2025. Last Modified : April 10th, 2026.
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM. (c) 2010 - 2026, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/ *******************************************************************/
@@ -146,23 +146,23 @@ var OpnameJS = {
new Request.JSON({ new Request.JSON({
url: this.PHP, url: this.PHP,
sendParam: ['data=detail-produk','mode','mode_detail='+mode,'No_Opname','ID='+ID,'InvID='+InvID,'SatuanID='+SatuanID,'HPP='+HPP], sendParam: ['data=detail-produk','mode','mode_detail='+mode,'No_Opname','ID='+ID,'InvID='+InvID,'SatuanID='+SatuanID,'HPP='+HPP],
onSuccess: function(a){ onSuccess: (a) => {
this.winDetail = FoniaJS.showWindow('Detail', 'Detail Barang', a.html, 600, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], function(){ this.winDetail = FoniaJS.showWindow('Detail', 'Detail Barang', a.html, 600, [{},{i:'butTutup'},{i:'butWSimpan',v:'Simpan',c:'success'}], () => {
FoniaJS.AutoComplete('#Nama_Produk', this.PHP, ['data=auto-produk','No_Opname','Tgl_Opname','CabID'], {'selectFunc': OpnameJS.Produk_Comp}); FoniaJS.AutoComplete('#Nama_Produk', this.PHP, ['data=auto-produk','No_Opname','Tgl_Opname','CabID'], {'selectFunc': OpnameJS.Produk_Comp});
$('#winDetail') $('#winDetail')
.find('#butWSimpan').click(function(){this.detail_simpan();}.bind(this)).end() .find('#butWSimpan').click(() => this.detail_simpan()).end()
.find('#Qty').keyup(function(e){ .find('#Qty').keyup((e) => {
if (parseFloat(e.target.value) == 0) return false; if (parseFloat(e.target.value) == 0) return false;
if (-1!==$.inArray(e.which, [13,9])) this.detail_simpan(); if (-1!==$.inArray(e.which, [13,9])) this.detail_simpan();
}.bind(this)); });
if (mode == 'insert' && InvID == 0) { if (mode == 'insert' && InvID == 0) {
FoniaJS.setFocus('#Nama_Produk'); FoniaJS.setFocus('#Nama_Produk');
} else { } else {
FoniaJS.setFocus('#Qty'); FoniaJS.setFocus('#Qty');
} }
this.update_stok(); this.update_stok();
}.bind(this), null, false); }, null, false);
}.bind(this) }
}).send(); }).send();
}, },
@@ -175,7 +175,7 @@ var OpnameJS = {
}, },
detail_ubah: function(acell){ detail_ubah: function(acell){
this.detail_produk('update', acell[0], acell[1], acell[2], acell[3]); this.detail_produk('update', acell[0], 0, 0, 0);
}, },
detail_hapus: function(acell){ detail_hapus: function(acell){
@@ -272,6 +272,7 @@ var OpnameJS = {
$('#Kode_Barang').val(adata[0]); $('#Kode_Barang').val(adata[0]);
$('#Nama_Satuan').val(adata[2]); $('#Nama_Satuan').val(adata[2]);
$('#Harga_Beli').val(adata[4]); $('#Harga_Beli').val(adata[4]);
$('#Kali').val(adata[5]);
OpnameJS.update_stok(); OpnameJS.update_stok();
FoniaJS.setFocus('#Qty'); FoniaJS.setFocus('#Qty');
}, },
+1 -1
View File
@@ -463,7 +463,7 @@ var POSJS = {
sendParam: ['data=brow-pending'] sendParam: ['data=brow-pending']
}).send(); }).send();
} else if (tipe=='pole-config'){ } else if (tipe=='pole-config'){
new Request.JSONF({ new Request.JSON({
url: this.PHP, url: this.PHP,
sendParam: ['data=pole-config'], sendParam: ['data=pole-config'],
onSuccess: (acfg) => { onSuccess: (acfg) => {
+1 -1
View File
@@ -56,7 +56,7 @@ var AboutJS = {
update_run: function(){ update_run: function(){
new Request.JSON({ new Request.JSON({
url: this.PHP, url: this.PHP,
sendParam: ['data=proses_update','new_sha1','new_date'], sendParam: ['data=proses_update'],
onSuccess: (adata) => { onSuccess: (adata) => {
if (adata.success==true) { if (adata.success==true) {
$('#spanStatus').html(adata.message); $('#spanStatus').html(adata.message);
+12 -10
View File
@@ -7,9 +7,9 @@
Desc. : PHP - Transaksi Opname Stok Barang Desc. : PHP - Transaksi Opname Stok Barang
Created By : Siau Pheng ([email protected]). Created By : Siau Pheng ([email protected]).
Created Date : May 24th, 2010. Created Date : May 24th, 2010.
Last Modified : September 29th, 2025. Last Modified : April 10th, 2026.
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM. (c) 2010 - 2026, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/ *******************************************************************/
@@ -182,12 +182,12 @@ if ( $data == "master" ) {
$tsql = ($tcari=="") ? "" : " AND CONCAT(P.Kode_Barcode,P.Nama_Produk) LIKE '%".$tcari."%'"; $tsql = ($tcari=="") ? "" : " AND CONCAT(P.Kode_Barcode,P.Nama_Produk) LIKE '%".$tcari."%'";
$obj = new Table($db); $obj = new Table($db);
$obj->set_table("(SELECT * FROM inv_stok WHERE CabID='".$id_cab."') D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID)", "D.InvID,P.StokID,(D.Stok/P.Qty) Stok,P.Kode_SKU,P.Nama_Produk,P.Harga_Pokok", "P.Aktif=1".$tsql); $obj->set_table("(SELECT * FROM inv_stok WHERE CabID='".$id_cab."') D LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID)", "D.InvID,P.StokID,(D.Stok/P.Qty) Stok,P.Kode_SKU,P.Nama_Lengkap,P.Harga_Pokok", "P.Aktif=1".$tsql);
$obj->add_field("InvID", "InvID", "hid"); $obj->add_field("InvID", "InvID", "hid");
$obj->add_field("StokID", "StokID", "hid"); $obj->add_field("StokID", "StokID", "hid");
$obj->add_field("Harga_Pokok", "HPP", "hid"); $obj->add_field("Harga_Pokok", "HPP", "hid");
$obj->add_field("Kode_SKU", "SKU", "c"); $obj->add_field("Kode_SKU", "SKU", "c");
$obj->add_field("Nama_Produk", "Nama Barang", "l"); $obj->add_field("Nama_Lengkap", "Nama Barang", "l");
$obj->add_field("Stok", "Stok", "r", "rupiah2"); $obj->add_field("Stok", "Stok", "r", "rupiah2");
$obj->set_field_order("Kode_SKU", "A"); $obj->set_field_order("Kode_SKU", "A");
$obj->add_row_btn("save", "Pilih", "OpnameJS.produk_select"); $obj->add_row_btn("save", "Pilih", "OpnameJS.produk_select");
@@ -200,14 +200,14 @@ if ( $data == "master" ) {
$ajson['autodata'] = []; $ajson['autodata'] = [];
$bcode = 0; $arec = []; $bcode = 0; $arec = [];
// Cari by SKU // 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"); $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),':',K.Qty) 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()) { if ($db->Next()) {
$bcode = 1; $bcode = 1;
$arec = $db->AllRow(); $arec = $db->AllRow();
} }
// Cari by Barcode // Cari by Barcode
if ($bcode == 0) { 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"); $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),':',K.Qty) 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()) { if ($db->Next()) {
$bcode = 1; $bcode = 1;
$arec = $db->AllRow(); $arec = $db->AllRow();
@@ -216,20 +216,20 @@ if ( $data == "master" ) {
if ($bcode == 1) { if ($bcode == 1) {
$ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Produk'], 'data'=>$arec['Data2'], 'bc'=>1]; $ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Produk'], 'data'=>$arec['Data2'], 'bc'=>1];
} else { } else {
$db->Query("SELECT P.*,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 para_satuan S ON (S.SatuanID=K.SatuanID) ORDER BY P.Nama_Produk,K.Qty DESC LIMIT 50"); $db->Query("SELECT P.*,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),':',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 para_satuan S ON (S.SatuanID=K.SatuanID) ORDER BY P.Nama_Produk,K.Qty DESC LIMIT 50");
while ($db->Next()) { 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"), 'data'=>$db->Row("Data2"), 'bc'=>0]; $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"), 'data'=>$db->Row("Data2"), 'bc'=>0];
} }
} }
} else if ($data == "detail-produk") { } 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")]; $id = Param::Get("ID", 0); $atabel = ['ID'=>$id, 'InvID'=>Param::Get("InvID"), 'SatuanID'=>Param::Get("SatuanID"), 'HPP'=>Param::Get("HPP"), 'Kali'=>1];
if ($id > 0) { if ($id > 0) {
$db->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND ID='".$id."' LIMIT 1"); $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 ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
} }
if ($atabel['InvID']>0 && $atabel['SatuanID']>0) { 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"); $db->Query("SELECT Kode_SKU,Kode_Barcode,Nama_Produk,Nama_Satuan,Qty Kali FROM vi_inv_produk WHERE InvID='".$atabel['InvID']."' AND SatuanID='".$atabel['SatuanID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow()); if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
} }
@@ -264,13 +264,15 @@ if ( $data == "master" ) {
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'" > <input type="hidden" id="InvID" value="'.$atabel['InvID'].'" >
<input type="hidden" id="SatuanID" value="'.$atabel['SatuanID'].'" > <input type="hidden" id="SatuanID" value="'.$atabel['SatuanID'].'" >
<input type="hidden" id="Harga_Beli" value="'.$atabel['HPP'].'" > <input type="hidden" id="Harga_Beli" value="'.$atabel['HPP'].'" >
<input type="hidden" id="Kali" value="'.$atabel['Kali'].'" >
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >'; <input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
} else if ( $data == "cek_stok") { } else if ( $data == "cek_stok") {
$id_inv = Param::Get("InvID", 0); $id_inv = Param::Get("InvID", 0);
$qty_kali = Param::Get("Kali", 1);
$stok = 0; $stok = 0;
$db->Query("SELECT * FROM inv_stok WHERE CabID='".$id_cab."' AND InvID='".$id_inv."' LIMIT 1"); $db->Query("SELECT * FROM inv_stok WHERE CabID='".$id_cab."' AND InvID='".$id_inv."' LIMIT 1");
if ($db->Next()) $stok = $db->RowFloat("Stok", 0); if ($db->Next()) $stok = $db->RowFloat("Stok", 0) * $qty_kali;
$ajson[] = ['type'=>"form", 'id'=>"Stok_Sistem", 'value'=>rupiah2($stok)]; $ajson[] = ['type'=>"form", 'id'=>"Stok_Sistem", 'value'=>rupiah2($stok)];
} else if ( $data == "default") { } else if ( $data == "default") {
+1 -2
View File
@@ -26,12 +26,11 @@ function master_show($tmode = "", $apara = []) {
global $db; global $db;
$form = new Form($db); $form = new Form($db);
$tno_jual = $form->textbox("_", "No_Jual", $apara['No_Jual'], false); $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 ' echo '
<div class="row mb-3"> <div class="row mb-3">
<div class="col"><div class="border border-success rounded pe-2 display-6 text-end" id="Total_Disp">'.$apara['Kembali'].'</div></div> <div class="col"><div class="border border-success rounded pe-2 display-6 text-end" id="Total_Disp">'.$apara['Kembali'].'</div></div>
</div> </div>
<div class="row mb-1"><div class="col">'.$tinfo.'</div></div> <div class="row mb-1"><div class="col"><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></div></div>
<div class="row mb-1"> <div class="row mb-1">
<div class="col"> <div class="col">
<div class="input-group">'.$tno_jual.' <div class="input-group">'.$tno_jual.'
+4 -4
View File
@@ -7,9 +7,9 @@
Desc. : PHP - Laporan Stok Akhir Barang Desc. : PHP - Laporan Stok Akhir Barang
Created By : Siau Pheng (siaupheng@3fonia.com). Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : January 24th, 2011. Created Date : January 24th, 2011.
Last Modified : October 1st, 2025. Last Modified : April 10th, 2026.
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM. (c) 2011 - 2026, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/ *******************************************************************/
@@ -66,7 +66,7 @@ if ( $data == "print" ) {
$pre->add_field("No.",10,"C"); $pre->add_field("No.",10,"C");
$pre->add_field("Nama Barang",150,"L"); $pre->add_field("Nama Barang",150,"L");
$pre->add_field("Stok",80,"R","rupiah"); $pre->add_field("Stok",80,"R");
$nkol = 3; $nkol = 3;
if ($is_harga=="Y") { if ($is_harga=="Y") {
$pre->add_field("Harga",50,"R","rupiah"); $pre->add_field("Harga",50,"R","rupiah");
@@ -100,7 +100,7 @@ if ( $data == "print" ) {
$xls->add_field("No.", 10, "C"); $xls->add_field("No.", 10, "C");
$xls->add_field("Nama Barang", 60, "L"); $xls->add_field("Nama Barang", 60, "L");
$xls->add_field("Stok", 20, "R,N"); $xls->add_field("Stok", 20, "R");
$nkol = 3; $nkol = 3;
if ($is_harga=="Y") { if ($is_harga=="Y") {
$xls->add_field("Harga", 20, "R,N"); $xls->add_field("Harga", 20, "R,N");
+2 -4
View File
@@ -54,12 +54,10 @@ if ( $data == "check_update") {
<div class="col"> <div class="col">
<span class="form-control text-'.($ainfo['svr_status']==1?'success border-primary':'warning border-danger').'" id="spanStatus">'.$ainfo['svr_message'].'</span> <span class="form-control text-'.($ainfo['svr_status']==1?'success border-primary':'warning border-danger').'" id="spanStatus">'.$ainfo['svr_message'].'</span>
</div> </div>
</div> </div>';
<input type="hidden" id="new_date" value="'.$ainfo['new_date'].'" >
<input type="hidden" id="new_sha1" value="'.$ainfo['new_sha1'].'" >';
} else if ( $data == "proses_update") { } else if ( $data == "proses_update") {
$ajson = $cpd->go_update(Param::Get("new_sha1"), Param::Get("new_date")); $ajson = $cpd->go_update();
} else if ( $data == "check_db") { } else if ( $data == "check_db") {
$form = new Form($db); $form = new Form($db);