From eab5acde174dad458fec495c2491dd8489fa0aad Mon Sep 17 00:00:00 2001 From: Siau Pheng Date: Wed, 4 Nov 2026 11:14:12 +0700 Subject: [PATCH] Update various controllers and scripts; modify last modified dates, enhance JSON responses, and adjust PPN handling for improved functionality --- app/Controller/IndexController.php | 33 ++++++++++--------- app/Controller/Inv/BeliController.php | 4 +-- app/Controller/Inv/OpnamebarangController.php | 6 ++-- .../Report/Jual/MarginController.php | 4 +-- .../Report/Stok/AkhirController.php | 8 ++--- .../Report/Stok/MutasiController.php | 20 +++++++++-- app/Controller/Table/ProdukController.php | 4 +-- app/Scripts/inv/opname_barang.js | 3 +- app/Scripts/report/stok/mutasi.js | 24 ++++++++++++-- app/Utils/Invesa.php | 10 ++++-- app/config/routes.php | 9 +++-- 11 files changed, 84 insertions(+), 41 deletions(-) diff --git a/app/Controller/IndexController.php b/app/Controller/IndexController.php index 2e5aad0..f6ddb5a 100644 --- a/app/Controller/IndexController.php +++ b/app/Controller/IndexController.php @@ -130,26 +130,27 @@ class IndexController { } public function index() { - $ajson['CabID'] = $this->id_cab ?? 0; - $ajson['html'] = ' -
-
-
-
-
- + $this->app->json([ + 'CabID' => $this->id_cab ?? 0, + 'html' => ' +
+
+
+
+
+ +
+
+ +
-
- +
+
-
-
-
-
-
'; - $this->app->json($ajson); +
' + ]); } public function get401() { diff --git a/app/Controller/Inv/BeliController.php b/app/Controller/Inv/BeliController.php index 5695223..6cb77d7 100644 --- a/app/Controller/Inv/BeliController.php +++ b/app/Controller/Inv/BeliController.php @@ -6,7 +6,7 @@ Description : Transaksi Pembelian Created By : Siau Pheng (siaupheng@3fonia.com). Created Date : May 22th, 2010. - Last Modified : September 20th, 2026. + Last Modified : November 4th, 2026. (c) 3FONIA Software; WWW.3FONIA.COM. @@ -553,7 +553,7 @@ class BeliController { } private function Data_Beli(string $nomor="", bool $baru=false): array { - $aparam = [ 'No_Beli'=>$nomor, 'PPN'=>0, 'Lunas'=>0 ]; + $aparam = [ 'No_Beli'=>$nomor, 'PPN'=>1, 'Lunas'=>0 ]; if (empty($nomor)) { if ($baru) $aparam['No_Beli'] = "BELI".$this->web_app['SERVER_ID'].(string) $this->id_cab.$this->app->user()->id(3)."#00"; $aparam['Tgl_Beli'] = tgl_ymd(); diff --git a/app/Controller/Inv/OpnamebarangController.php b/app/Controller/Inv/OpnamebarangController.php index 0417e41..36a5f6c 100644 --- a/app/Controller/Inv/OpnamebarangController.php +++ b/app/Controller/Inv/OpnamebarangController.php @@ -6,7 +6,7 @@ Description : Transaksi Penyesuaian Stok Per Barang Created By : Siau Pheng (siaupheng@3fonia.com). Created Date : October 22nd, 2014. - Last Modified : October 11th, 2026. + Last Modified : November 4th, 2026. (c) 3FONIA Software; WWW.3FONIA.COM. @@ -98,13 +98,13 @@ class OpnamebarangController { public function scan_produk() { $tcari = Param::Get("Cari_Produk", ""); - $scandata = ['Nama_Supplier'=>"BELUM ADA"]; + $scandata = [ 'InvID'=>0, 'SatuanID'=>0, 'VarianID'=>0, 'Kode_Barang'=>"KODE_SKU / KODE_BARCODE", 'Nama_Barang'=>"NAMA_BARANG", 'Nama_Satuan'=>"SATUAN", 'PPN'=>0, 'Harga_Beli'=>0, 'Stok_Sistem'=>0 ]; // Cari by SKU + Barcode // Satuan : Varian : SKU + Barcode : Harga_Pokok : Satuan : PPN : Stok $_row = $this->db->fetchRow("SELECT P.InvID,P.SatuanID,P.VarianID,P.Nama_Lengkap Nama_Barang,CONCAT(P.Kode_SKU,' / ',P.Kode_Barcode) Kode_Barang,P.Harga_Pokok Harga_Beli,P.Satuan_Kemasan Nama_Satuan,P.PPN,FORMAT(IFNULL(X.Stok,0),2) Stok_Sistem FROM (SELECT * FROM inv_produk_join WHERE Aktif=1 AND (Kode_SKU=? OR Kode_Barcode=?) GROUP BY InvID,SatuanID,VarianID) P LEFT JOIN inv_stok X ON (X.CabID=? AND X.InvID=P.InvID)", [$tcari, $tcari, $this->id_cab]); if ($_row) $scandata = array_merge($scandata, $_row->getData()); - $this->app->json([ $scandata ]); + $this->app->json( $scandata ); } public function proses_simpan() { diff --git a/app/Controller/Report/Jual/MarginController.php b/app/Controller/Report/Jual/MarginController.php index 6a92702..c46855d 100644 --- a/app/Controller/Report/Jual/MarginController.php +++ b/app/Controller/Report/Jual/MarginController.php @@ -6,7 +6,7 @@ Description : Laporan Margin Penjualan / Member Created By : Siau Pheng (siaupheng@3fonia.com). Created Date : October 12nd, 2012. - Last Modified : October 7th, 2026. + Last Modified : November 4th, 2026. (c) 3FONIA Software; WWW.3FONIA.COM. @@ -226,7 +226,7 @@ class MarginController { $ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]); $tcab = $form->option_db("_", "CabID", $this->id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]); $tmem = $form->textauto("_", "Nama_Member", ['value'=>0,'text'=>"SEMUA MEMBER"], true, true, "nama member"); - $turut = $form->radio("_", "Urut", "B", true, false, ['H'=>"Harga Jual",'M'=>"Margin"]); + $turut = $form->radio("_", "Urut", "M", true, false, ['H'=>"Harga Jual",'M'=>"Margin"]); $tfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false); $tto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false); $ajson['html'] = ' diff --git a/app/Controller/Report/Stok/AkhirController.php b/app/Controller/Report/Stok/AkhirController.php index 5287e90..3fdf1e4 100644 --- a/app/Controller/Report/Stok/AkhirController.php +++ b/app/Controller/Report/Stok/AkhirController.php @@ -6,7 +6,7 @@ Description : Laporan Stok Akhir Barang Created By : Siau Pheng (siaupheng@3fonia.com). Created Date : January 24th, 2011. - Last Modified : November 2nd, 2026. + Last Modified : November 4th, 2026. (c) 3FONIA Software; WWW.3FONIA.COM. @@ -46,7 +46,7 @@ class AkhirController { $apre = [ 'id_sup' => Param::Int("SupID", 0), 'id_grup_inv' => Param::Int("Grup_InvID", 0), - 'ppn' => Param::Int("PPN", 9), + 'ppn' => Param::Int("PPN", 0), 'tgl' => Param::Get("Tanggal"), 'urut' => Param::Get("Urut", "B"), 'min' => Param::Get("Min_Stok", "N"), @@ -75,7 +75,7 @@ class AkhirController { $tsql2 .= " AND P.Grup_InvID=?"; array_push($asql2, $apre['id_grup_inv']); } - if ($apre['ppn'] !== 9) { + if ($apre['ppn'] > 0) { $tsql2 .= " AND P.PPN=?"; array_push($asql2, $apre['ppn']); } @@ -191,7 +191,7 @@ class AkhirController { $tcab = $form->option_db("_", "CabID", $this->id_cab, true, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID", [0,"SEMUA CABANG"]); $tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]); $tgrup_inv = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"SEMUA GRUP"]); - $tppn = $form->option("_", "PPN", 9, true, false, [9 => "SEMUA STATUS"] + Invesa::PPN_Array()); + $tppn = $form->option("_", "PPN", 9, true, false, [0 => "SEMUA STATUS"] + Invesa::PPN_Array()); $ttgl = $form->datebox("_", "Tanggal", tgl_ymd(), false, false); $turut = $form->radio("_", "Urut", "B", true, false, ['B'=>"Nama Barang",'J'=>"Jumlah / Nilai"]); $tstok = $form->radio("_", "Min_Stok", "N", true, false, ["Y"=>"Ya","N"=>"Tidak"], null, "RepoStokAkhirJS.oc_MinStok"); diff --git a/app/Controller/Report/Stok/MutasiController.php b/app/Controller/Report/Stok/MutasiController.php index a94e18b..9d2fd02 100644 --- a/app/Controller/Report/Stok/MutasiController.php +++ b/app/Controller/Report/Stok/MutasiController.php @@ -6,7 +6,7 @@ Description : Laporan Mutasi Stok Barang Created By : Siau Pheng (siaupheng@3fonia.com). Created Date : July 16th, 2011. - Last Modified : October 12th, 2026. + Last Modified : November 4th, 2026. (c) 3FONIA Software; WWW.3FONIA.COM. @@ -83,6 +83,18 @@ class MutasiController { $this->app->json($ajson); } + public function scan_produk() { + $tcari = Param::Get("Cari_Produk", ""); + $scandata = [ 'InvID'=>0, 'Nama_Produk'=>"" ]; + + // Cari by SKU + Barcode + // InvID : Nama_Produk + $_row = $this->db->fetchRow("SELECT P.InvID,P.Nama_Lengkap Nama_Produk FROM (SELECT * FROM vi_inv_produk WHERE Aktif=1 AND Barcode_Nama LIKE ?) P", ['%'.$tcari.'%']); + if ($_row) $scandata = array_merge($scandata, $_row->getData()); + + $this->app->json( $scandata ); + } + private function prepare() { $apre = [ 'id_inv' => Param::Int("InvID", 0), @@ -198,7 +210,11 @@ class MutasiController {
'.$tcab.'
-
+
'; + if (isMobile()) { + $ajson['html'] .= '
'; + } + $ajson['html'] .= '
'.$tproduk.'
diff --git a/app/Controller/Table/ProdukController.php b/app/Controller/Table/ProdukController.php index 126eb6e..3a1be14 100644 --- a/app/Controller/Table/ProdukController.php +++ b/app/Controller/Table/ProdukController.php @@ -6,7 +6,7 @@ Description : Master Barang Created By : Siau Pheng (siaupheng@3fonia.com). Created Date : May 19th, 2010. - Last Modified : September 10th, 2026. + Last Modified : November 4th, 2026. (c) 3FONIA Software; WWW.3FONIA.COM. @@ -253,7 +253,7 @@ class ProdukController { } public function detail_produk() { - $atabel = ['InvID'=>0,'Nama_Produk'=>"",'Grup_InvID'=>0,'StokID'=>$this->def_satuan,'NormalID'=>$this->def_satuan,'Harga_Beli'=>0,'Harga_Tambah'=>0,'Harga_Pokok'=>0,'Stok_Min'=>0,'Stok_Max'=>0,'Aktif'=>1,'PPN'=>0]; + $atabel = ['InvID'=>0,'Nama_Produk'=>"",'Grup_InvID'=>0,'StokID'=>$this->def_satuan,'NormalID'=>$this->def_satuan,'Harga_Beli'=>0,'Harga_Tambah'=>0,'Harga_Pokok'=>0,'Stok_Min'=>0,'Stok_Max'=>0,'Aktif'=>1,'PPN'=>1]; if ($this->id_inv > 0) { $atabel = $this->db->fetchRow("SELECT * FROM inv_produk WHERE InvID=?", [$this->id_inv]); $this->Produk_Backup(); diff --git a/app/Scripts/inv/opname_barang.js b/app/Scripts/inv/opname_barang.js index 7ce8304..5d7c91d 100644 --- a/app/Scripts/inv/opname_barang.js +++ b/app/Scripts/inv/opname_barang.js @@ -19,7 +19,6 @@ var OpnameBarangJS = { $('#butSimpan').click(() => this.proses_save()); $('#butBrow').click(() => this.produk_brow()); if (FoniaJS.WEB_MOBILE){ - //html5QrcodeScanner = new Html5QrcodeScanner('qr-reader', { fps: 10, qrbox: 250, rememberLastUsedCamera: true, supportedScanTypes: [Html5QrcodeScanType.SCAN_TYPE_CAMERA] }); html5QrcodeScanner = new Html5Qrcode('qr-reader'); html5QrcodeScanner.start({ facingMode: 'environment' }, { fps: 10, qrbox: 250 }, OpnameBarangJS.ScanSukses); } else { @@ -39,7 +38,7 @@ var OpnameBarangJS = { onSuccess: (ajson) => { if (ajson.status === true){ FoniaJS.showInfo('Sukses simpan penyesuaian Stok !'); - $('#InvID, #SatuanID, #VarianID, #Harga_Beli #PPN').val(0); + $('#InvID, #SatuanID, #VarianID, #Harga_Beli, #PPN').val(0); $('#Nama_Produk, #Kode_Barang, #Nama_Barang, #Nama_Satuan').val(''); $('#Stok_Sistem, #Stok_Fisik').val('0.00'); if (FoniaJS.WEB_MOBILE){ diff --git a/app/Scripts/report/stok/mutasi.js b/app/Scripts/report/stok/mutasi.js index fdccc36..0fa8747 100644 --- a/app/Scripts/report/stok/mutasi.js +++ b/app/Scripts/report/stok/mutasi.js @@ -4,7 +4,7 @@ Description : Laporan Mutasi Stok Barang Created By : Siau Pheng (siaupheng@3fonia.com). Created Date : July 16th, 2011. - Last Modified : October 12th, 2026. + Last Modified : November 4th, 2026. (c) 3FONIA Software; WWW.3FONIA.COM. @@ -13,14 +13,20 @@ var RepoStokMutasiJS = { PHP: '', KODE: '', + html5QrcodeScanner: null, index() { $('#butCetak').click(() => this.proses_print(true)); $('#butPreview').click(() => this.proses_print()); $('#butExcel').click(() => this.proses_dload()); $('#butBrowProduk').click(() => this.produk_brow()); - FoniaJS.AutoComplete('#Nama_Produk', this.PHP + '/auto_produk', [], {'selectFunc':this.Produk_Comp}); - FoniaJS.setFocus('#Nama_Produk'); + if (FoniaJS.WEB_MOBILE){ + html5QrcodeScanner = new Html5Qrcode('qr-reader'); + html5QrcodeScanner.start({ facingMode: 'environment' }, { fps: 10, qrbox: 250 }, RepoStokMutasiJS.ScanSukses); + } else { + FoniaJS.AutoComplete('#Nama_Produk', this.PHP + '/auto_produk', [], {'selectFunc': this.Produk_Comp}); + FoniaJS.setFocus('#Nama_Produk'); + } }, proses_print(prt) { @@ -51,6 +57,18 @@ var RepoStokMutasiJS = { dload.download(); }, + ScanSukses(decodedText, decodedResult) { + new Request({ + url: RepoStokMutasiJS.PHP + '/scan_produk', + sendParam: ['Cari_Produk='+decodedText], + onSuccess: (ajson) => { + $('#InvID').val(ajson.InvID); + $('#Nama_Produk').val(ajson.Nama_Produk); + $('#Tgl_From').focus(); + } + }).send(); + }, + produk_brow() { var _isi = new String('
 
'); this.winBProduk = FoniaJS.showWindow('BProduk', 'Daftar Barang', _isi, 'xl', '', () => { diff --git a/app/Utils/Invesa.php b/app/Utils/Invesa.php index 32de7b7..4ecb574 100644 --- a/app/Utils/Invesa.php +++ b/app/Utils/Invesa.php @@ -6,7 +6,7 @@ Description : Class umum untuk Aplikasi Invesa Created By : Siau Pheng (siaupheng@3fonia.com). Created Date : February 10th, 2012. - Last Modified : October 31st, 2026. + Last Modified : November 4th, 2026. (c) 3FONIA Software; WWW.3FONIA.COM. @@ -18,7 +18,13 @@ namespace App\Utils; final class Invesa { - public const ppn = [ 0=>"Tanpa PPN", 1=>"PPN", 3=>"Spesial 1", 4=>"Spesial 2", 5=>"Spesial 3" ]; + public const ppn = [ + 1 => "PPN", + 2 => "Spesial 1", //Non PPN + 3 => "Spesial 2", //Sembako + 4 => "Spesial 3", //Rokok Legal + 5 => "Spesial 4", //Rokok Ilegal + ]; public const old_printer = [ "TM-U220" ]; public function __construct() { diff --git a/app/config/routes.php b/app/config/routes.php index c983b23..628fef8 100644 --- a/app/config/routes.php +++ b/app/config/routes.php @@ -5,7 +5,7 @@ Desc. : Loading Routing Setup Created By : Siau Pheng (siaupheng@3fonia.com). Created Date : November 23rd, 2019. - Last Modified : October 21st, 2026. + Last Modified : November 4th, 2026. (c) 3FONIA Software; WWW.3FONIA.COM. @@ -130,8 +130,11 @@ $router->group('', function(Router $router) use ($app, $session, $config) { $mimeType = 'application/octet-stream'; if (str_ends_with($filePath, '.js')) $mimeType = 'application/javascript'; if (str_ends_with($filePath, '.css')) $mimeType = 'text/css'; - $app->response()->header('Content-Type', $mimeType); - echo file_get_contents($filePath); + $app->response()->header('Content-Type', $mimeType.'; charset=utf-8'); + if (function_exists('gzencode') && str_contains($_SERVER['HTTP_ACCEPT_ENCODING'] ?? '', 'gzip')) { + $app->response()->header('Content-Encoding', 'gzip'); + echo gzencode(file_get_contents($filePath), 9); + } else echo file_get_contents($filePath); } else { $app->notFound(); }