Files
2026-10-29 13:34:31 +07:00

202 lines
8.9 KiB
PHP

<?php
/*******************************************************************
PHP Class : /Controller/Report/Inv/BarcodeController
Description : Laporan Barcode Barang
Created By : Siau Pheng ([email protected]).
Created Date : October 28th, 2013.
Last Modified : October 14th, 2026.
(c) 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
declare(strict_types=1);
namespace App\Controller\Report\Inv;
use App\Utils\Invesa;
use flight\Engine;
use flight\database\SimplePdo;
use flight\Session;
use Webapp\Web\Form;
use Webapp\Web\Param;
use Webapp\Web\Table;
class BarcodeController {
private string $ip_addr;
private int $id_cab;
private int $id_grup;
protected Engine $app;
protected SimplePdo $db;
public function __construct(Engine $app, SimplePdo $db, Session $session) {
$this->app = $app;
$this->db = $db;
$this->ip_addr = $app->request()->ip;
$this->id_cab = $session->get('APP_INV')['CABANGID'] ?? 0;
$this->id_grup = $session->get('APP_INV')['ECERANID'] ?? 0;
}
public function brow_produk() {
$tcari = Param::Get("Cari_Produk");
$tsql = ''; $asql = [$this->id_grup, 1];
if (!empty($tcari)) {
$tsql .= " AND Barcode_Nama LIKE ?";
$asql[] = '%' . $tcari . '%';
}
$obj = new Table($this->app);
$obj->set_table("inv_produk_join", "*", "Grup_MemberID=? AND Aktif=?".$tsql, $asql);
$obj->add_field("InvID", "ID", "hid");
$obj->add_field("SatuanID", "ID", "hid");
$obj->add_field("VarianID", "ID", "hid");
$obj->add_field("Kode_SKU", "SKU", "c");
$obj->add_field("Kode_Barcode", "Barcode", "c");
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
$obj->set_field_order("Kode_SKU", "A");
$obj->set_func_select("RepoInvBarcodeJS.produk_select");
$this->app->json([ $obj->db_table("divBrowProduk") ]);
}
public function auto_produk() {
$tcari = Param::Get("Auto_Query", "");
$ajson['autodata'] = [];
$bcode = 0; $arec = [];
// Cari by SKU + Barcode
$_row = $this->db->fetchRow("SELECT P.InvID,P.Nama_Lengkap,CONCAT(P.SatuanID,':',P.VarianID,':',P.Kode_SKU) Data2 FROM (SELECT * FROM inv_produk_join WHERE Grup_MemberID=? AND Aktif=1 AND (Kode_SKU=? OR Kode_Barcode=?)) P", [$this->id_grup, $tcari, $tcari]);
if ($_row) {
$bcode = 1;
$arec = $_row->getData();
}
if ($bcode === 1) {
$ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Lengkap'], 'data'=>$arec['Data2'], 'bc'=>1];
} else {
$stat = $this->db->runQuery("SELECT P.InvID,P.Nama_Lengkap,P.Kode_SKU,CONCAT(P.SatuanID,':',P.VarianID,':',P.Kode_SKU) Data2 FROM (SELECT * FROM inv_produk_join WHERE Barcode_Nama LIKE ? AND Grup_MemberID=? AND Aktif=1) P ORDER BY P.Nama_Produk,P.Qty LIMIT 50", ['%'.$tcari.'%', $this->id_grup]);
while ($row = $stat->fetch(SimplePdo::FETCH_ASSOC)) {
$ajson['autodata'][] = ['value'=>$row['InvID'], 'text'=>$row['Nama_Lengkap'], 'html'=>'<span class="text-primary">'.$row['Kode_SKU'].'</span> '.$row['Nama_Lengkap'], 'data'=>$row['Data2'], 'bc'=>0];
}
}
$this->app->json($ajson);
}
public function barcode() {
$id_inv = Param::Int("InvID", 0);
$id_sat = Param::Int("SatuanID", 0);
$id_var = Param::Int("VarianID", 0);
$qty = Param::Int("Qty", 3);
$nkolom = (str_contains(Param::Get("Printer"), "XP")) ? 2 : 3;
$nbaris = (int) ceil($qty / $nkolom);
$ajson = [];
$barang = $this->db->fetchRow("SELECT Kode_SKU,Harga_Jual,LEFT(Nama_Lengkap,20) Nama FROM inv_produk_join WHERE InvID=? AND SatuanID=? AND VarianID=? AND Grup_MemberID=? ORDER BY Harga_Jual DESC LIMIT 1", [$id_inv, $id_sat, $id_var, $this->id_grup]);
if ($barang) {
$ajson = ['type' => "epl", 'config' => ['times' => 1], 'content' => $this->gen_bc_epl("Rp.".rupiah($barang->Harga_Jual), $barang->Nama, $barang->Kode_SKU, $nbaris, $nkolom)];
}
$this->app->json($ajson);
}
public function load_printer() {
$aprint = json_decode(stripslashes(Param::Get("Printer", "[]")), true);
$avalue = [['value'=>"", 'html'=>"Pilih Printer"]];
$tdefp = Param::Get("DefPrint", "");
$this->db->runQuery("DELETE FROM app_printer WHERE IP=? AND CabID=?", [$this->ip_addr, $this->id_cab]);
foreach ($aprint as $_val) {
if (!empty($_val)) {
$this->db->runQuery("INSERT IGNORE INTO app_printer SET IP=?,CabID=?,N_Printer=?,Defa=?", [$this->ip_addr, $this->id_cab, $_val, ($tdefp === $_val) ? 1 : 0]);
}
}
$aprinter = $this->db->fetchAll("SELECT * FROM app_printer WHERE IP=? AND CabID=?", [$this->ip_addr, $this->id_cab]);
foreach ($aprinter as $row) $avalue[] = ['value'=>$row['N_Printer'], 'html'=>$row['N_Printer']];
$ajson[] = ['type'=>"option", 'id'=>"Printer", 'avalue'=>$avalue];
$this->app->json($ajson);
}
public function index() {
$form = new Form($this->app);
$tsku = $form->textbox("_", "Kode_SKU", null, false, false);
$tproduk = $form->textauto("_", "Nama_Produk", ['value'=>0,'text'=>""], true, true, "nama barang");
$tprt = $form->option_db("_", "Printer", "", true, false, "app_printer", ["N_Printer","N_Printer"], "IP='".$this->ip_addr."' AND CabID='".(string) $this->id_cab."'", [0,"Pilih Printer"]);
$tqty = $form->textbox("_", "Qty", 3, true, false, "number");
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label">Kode SKU</label>
<div class="col-sm-6 col-lg-5">'.$tsku.'</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"><div class="input-group">'.$tproduk.'<button id="butBrowProduk" class="btn btn-info" type="button"><i class="bi-bag"></i></button></div></div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-2"></div></div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Printer">Nama Printer</label>
<div class="col"><div class="input-group">'.$tprt.'<button id="butLoadPrinter" class="btn btn-warning" type="button"><i class="bi-printer"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Qty">Jumlah Stiker</label>
<div class="col-sm-5 col-lg-3"><div class="input-group">'.$tqty.Invesa::Form_Info("Untuk menghemat stiker, bisa gunakan jumlah cetak dalam kelipatan 3.").'</div></div>
</div>
<input type="hidden" id="InvID" value="0" >
<input type="hidden" id="SatuanID" value="0" >
<input type="hidden" id="VarianID" value="0" >';
$this->app->json($ajson);
}
private function gen_bc_epl(string $harga="", string $nama="", string $barc="", int $baris=1, int $kolom=3): array {
if ($kolom == 2) {
//q582
$hasil = ['N',
'Q120,24',
'A6,99,3,3,1,1,N,"Cahaya"',
'A26,83,3,3,1,1,N,"Masa"',
'A14,1,0,2,1,1,N,"'.$nama.'"',
'B54,22,0,1,2,5,60,N,"'.$barc.'"',
'A64,75,0,4,1,1,N,"'.$harga.'"',
'A238,22,1,3,1,1,N,"HSmart"',
'A258,30,1,3,1,1,N,"RYN\'S"',
'A293,99,3,3,1,1,N,"Cahaya"',
'A313,83,3,3,1,1,N,"Masa"',
'A301,1,0,2,1,1,N,"'.$nama.'"',
'B341,22,0,1,2,5,60,N,"'.$barc.'"',
'A351,72,0,4,1,1,N,"'.$harga.'"',
'A525,22,1,3,1,1,N,"HSmart"',
'A545,30,1,3,1,1,N,"RYN\'S"',
'P'.$baris,
''];
} else {
//q960
$hasil = ['N',
'Q120,24',
'A4,98,3,3,1,1,N,"Cahaya"',
'A24,82,3,3,1,1,N,"Masa"',
'A12,0,0,2,1,1,N,"'.$nama.'"',
'B52,21,0,1,2,5,60,N,"'.$barc.'"',
'A62,74,0,4,1,1,N,"'.$harga.'"',
'A236,21,1,3,1,1,N,"HSmart"',
'A256,29,1,3,1,1,N,"RYN\'S"',
'A284,98,3,3,1,1,N,"Cahaya"',
'A304,82,3,3,1,1,N,"Masa"',
'A292,0,0,2,1,1,N,"'.$nama.'"',
'B332,21,0,1,2,5,60,N,"'.$barc.'"',
'A342,71,0,4,1,1,N,"'.$harga.'"',
'A516,21,1,3,1,1,N,"HSmart"',
'A536,29,1,3,1,1,N,"RYN\'S"',
'A564,98,3,3,1,1,N,"Cahaya"',
'A584,82,3,3,1,1,N,"Masa"',
'A572,0,0,2,1,1,N,"'.$nama.'"',
'B612,21,0,1,2,5,60,N,"'.$barc.'"',
'A622,71,0,4,1,1,N,"'.$harga.'"',
'A796,21,1,3,1,1,N,"HSmart"',
'A816,29,1,3,1,1,N,"RYN\'S"',
'P'.$baris,
''];
}
return $hasil;
}
}