-
-
+ $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 {
+
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();
}