Files
robinson/apps/php/iss/pos.php
T

555 lines
32 KiB
PHP

<?php
/*******************************************************************
App. Name : INVENTORY AND SALES SYSTEMS
Module : /apps/php/pos/pos.php
Desc. : PHP - Transaksi Penjualan / Kasir POS
Created By : Siau Pheng ([email protected]).
Created Date : August 5th, 2012.
Last Modified : March 3rd, 2026.
(c) 2012 - 2026, 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;
function master_show($tmode = "", $apara = []) {
global $db;
$form = new Form($db);
$tno_jual = $form->textbox("_", "No_Jual", $apara['No_Jual'], false);
echo '
<div class="row mb-3">
<div class="col"><div class="border border-success rounded px-2 display-6 text-end" id="Total_Disp">'.$apara['Kembali'].'</div></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="col">
<div class="input-group">'.$tno_jual.'
<button class="btn btn-info shadow-none" type="button" id="posPEND"><i class="bi-search"></i></button>
</div>
</div>
</div>
<div class="row mb-1 mt-4"><div class="col d-grid gap-2">
<button type="button" class="btn btn-success" id="posSIMPAN"><i class="bi-cart-plus me-1"></i>Bayar</button>
<button type="button" class="btn btn-danger" id="posBATAL"><i class="bi-x-lg me-1"></i>Batal</button>
</div></div>
<div class="row mb-1 mt-4"><div class="col d-grid gap-2">
<button type="button" class="btn btn-outline-info" id="posNOTA"><i class="bi-list me-1"></i>Daftar Transaksi</button>
<button type="button" class="btn btn-outline-info" id="posBARANG"><i class="bi-search me-1"></i>Cari Barang</button>
<button type="button" class="btn btn-outline-info" id="posTAMBAH"><i class="bi-save me-1"></i>Tambah Barang</button>
</div></div>
<input type="hidden" id="No_Cetak" value="'.$apara['No_Cetak'].'" />
<input type="hidden" id="Total_Tunai" value="'.$apara['Total_Tunai'].'" />
<input type="hidden" id="Total_Kartu" value="'.$apara['Total_Kartu'].'" />
<input type="hidden" id="Total_Bayar" value="'.$apara['Total_Bayar'].'" />
<input type="hidden" id="Total_Nota" value="'.$apara['Total_Nota'].'" />
<input type="hidden" id="Total_Item" value="'.$apara['Total_Item'].'" />
<input type="hidden" id="Tgl_Jual" value="'.tgl_sql2str($apara['Tgl_Jual']).'" />
<input type="hidden" id="KartuID" value="'.$apara['KartuID'].'" />
<input type="hidden" id="No_Kartu" value="'.$apara['No_Kartu'].'" />
<input type="hidden" id="Nama_Kartu" value="'.$apara['Nama_Kartu'].'" />
<input type="hidden" id="mode" value="'.$tmode.'" />';
}
function Data_Jual1($nomor="") {
global $db;
$aparam = [];
if (trim($nomor)=="") {
$aparam['No_Jual'] = "POS".$_SESSION['__WEB_APP']['SERVER_ID'].$_SESSION['__APP_INV']['CABANGID'].user_id(3)."#00";
$aparam['Tgl_Jual'] = tgl_ymd();
$aparam['Total_Nota'] = 0;
$aparam['Total_Item'] = 0;
$aparam['Total_Tunai'] = 0;
$aparam['Total_Kartu'] = 0;
$aparam['Total_Bayar'] = 0;
$aparam['KartuID'] = 0;
$aparam['No_Kartu'] = "";
$aparam['Nama_Kartu'] = "";
$aparam['Kembali'] = 0;
$aparam['No_Cetak'] = "";
} else {
$tabel_jual = (strpos($nomor,"POS")===false) ? "inv_jual" : "inv_jual_pend";
$db->Query("SELECT * FROM ".$tabel_jual." WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."' AND No_Jual='".$nomor."'");
if ($db->Next()) $aparam = $db->AllRow();
}
return $aparam;
}
function Nomor_Pending1() {
global $db;
$tno = "POS".$_SESSION['__WEB_APP']['SERVER_ID'].$_SESSION['__APP_INV']['CABANGID'].user_id(3)."#";
$ino = 0;
$db->Query("SELECT MAX(RIGHT(No_Jual,2)) Nomor FROM inv_jual_pend WHERE LEFT(No_Jual,".strlen($tno).")='".$tno."'");
if ($db->Next()) $ino = intval($db->Row("Nomor", 0));
$tno .= isi_nol(++$ino, 2);
return $tno;
}
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode");
$mode_detail = Param::Get("mode_detail");
$id_cab = $_SESSION['__APP_INV']['CABANGID'];
$id_other = $_SESSION['__APP_INV']['OTHERINVID'];
$nomor = Param::Get("No_Jual");
$no_cetak = Param::Get("No_Cetak");
if ( $data == "master" ) {
$aparam = [];
if ($mode == "pending-edit") {
Pending_Edit($nomor);
$aparam = Data_Jual1($nomor);
} else if ($mode == "pending-save") {
$b_baru = false;
if (substr($nomor,-3)=="#00") {
$b_baru = true;
$no_lama = $nomor;
$nomor = Nomor_Pending1();
Pending_Save($no_lama, $nomor);
}
$apending = [];
$db->Query("SELECT SUM(-Qty*Harga_Jual) Jual,SUM(Total_Diskon) Diskon FROM tmp_inv_detail WHERE No_Ref='".$nomor."'");
if ($db->Next()) $apending = $db->AllRow();
$sql = new SQL($db);
$sql->set_table("inv_jual_pend");
$sql->add_param("No_Jual", $nomor);
$sql->add_param_date("Tgl_Jual");
$sql->add_param("CabID", $id_cab);
$sql->add_param("Total_Jual", $apending['Jual']);
$sql->add_param("Total_Diskon", $apending['Diskon']);
$sql->add_param_userid();
$sql->add_where("No_Jual", $nomor);
if ($b_baru) $sql->InsertDB();
else $sql->UpdateDB();
$aparam = Data_Jual1();
} else if ($mode == "pending-delete") {
Pending_Delete($nomor);
$db->Query("DELETE FROM inv_jual_pend WHERE No_Jual='".$nomor."'");
$aparam = Data_Jual1();
} else if ($mode == "edit") {
Detail_Copy($nomor, true);
$db->Query("INSERT INTO tmp_inv_detail_lain SELECT No_Ref,ID,Ket,UserID,'".user_unix()."' FROM inv_detail_lain WHERE No_Ref='".$nomor."'");
$aparam = Data_Jual1($nomor);
} else if ($mode == "save") {
$no_lama = $nomor;
$b_baru = (strpos($no_lama,"POS")===false) ? false : true;
if ($b_baru) {
$nomor = Nomor_POS_Baru("", true);
if (substr($no_lama,-3)!="#00") $db->Query("DELETE FROM inv_jual_pend WHERE No_Jual='".$no_lama."'");
}
Promo_Barang($no_lama, tgl_dmy());//PROMO BARANG
$tot_potong = Promo_Total($no_lama, tgl_dmy());//PROMO TOTAL
Detail_Save($nomor, 5, $id_cab, tgl_dmy(), $b_baru, $no_lama);
$db->Query("DELETE FROM inv_detail_lain WHERE No_Ref='".$nomor."'");
$db->Query("INSERT INTO inv_detail_lain SELECT '".$nomor."',ID,Ket,UserID FROM tmp_inv_detail_lain WHERE No_Ref='".$no_lama."'");
$db->Query("DELETE FROM tmp_inv_detail_lain WHERE No_Ref='".$no_lama."'");
$ajual = [];
$db->Query("SELECT SUM(-Qty*Harga_Jual) Jual,SUM(Total_Diskon) Diskon,SUM(-Qty*Harga_Beli) HPP FROM inv_detail WHERE No_Ref='".$nomor."'");
if ($db->Next()) $ajual = $db->AllRow();
$id_kartu = Param::Get("KartuID", 0);
$no_kartu = ""; $nama_kartu = "";
if ($id_kartu > 0) {
$no_kartu = Param::Get("No_Kartu", "");
$nama_kartu = Param::Get("Nama_Kartu", "");
}
$sql = new SQL($db);
$sql->set_table("inv_jual");
$sql->add_param("Tgl_Jual", tgl_ymd());
$sql->add_param("Tgl_Lunas", tgl_ymd());
$sql->add_param("Total_Jual", $ajual['Jual']);
$sql->add_param("Total_Diskon", $ajual['Diskon']);
$sql->add_param("Total_Potong", $tot_potong);
$sql->add_param("Total_HPP", $ajual['HPP']);
$sql->add_param("Total_Bayar");
$sql->add_param("Total_Kartu");
$sql->add_param("KartuID", $id_kartu);
$sql->add_param("No_Kartu", $no_kartu);
$sql->add_param("Nama_Kartu", $nama_kartu);
$sql->add_param("CabID", $id_cab);
$sql->add_param_stamp();
$sql->add_param_userid();
$sql->add_where("No_Jual", $nomor);
$sql->UpdateDB();
Promo_Nota_Proses($nomor, tgl_dmy());//PROMO NOTA
if ($_SESSION['__APP_INV']['PRINT_AUTO']==1) {
$mode = "print";
} else {
$mode = ($_SESSION['__APP_INV']['PRINT_OPENCD']==1) ? "opencd" : "saveonly";
}
$aparam = Data_Jual1();
$aparam['No_Cetak'] = $nomor;
$aparam['Kembali'] = "0";
$db->Query("SELECT (Total_Jual-Total_Diskon-Total_Potong-Total_Bayar) Sisa FROM inv_jual WHERE No_Jual='".$nomor."'");
if ($db->Next()) $aparam['Kembali'] = '<span style="color:red;">'.rupiah($db->RowFloat("Sisa", 0)).'</span>';
//MONITOR DISPLAY
if ($_SESSION['__APP_INV']['MON_ENABLE']) {
$db->Query("UPDATE disp_login SET No_Cetak='".$nomor."' WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."' AND UserID='".user_id()."' AND Unix='".user_unix()."'");
}
} else if ($mode == "delete") {
// PROSES UPDATE PROMO
$tgl_jual = tgl_ymd();
$db->Query("SELECT Tgl_Jual FROM inv_jual WHERE No_Jual='".$nomor."'");
if ($db->Next()) $tgl_jual = $db->Row("Tgl_Jual");
Promo_Hapus($nomor, tgl_sql2str($tgl_jual));
Promo_Nota_Hapus($nomor);
$db->Query("DELETE FROM inv_jual WHERE No_Jual='".$nomor."'");
$db->Query("DELETE FROM inv_detail WHERE No_Ref='".$nomor."'");
$db->Query("DELETE FROM inv_detail_lain WHERE No_Ref='".$nomor."'");
$aparam = Data_Jual1();
} else if ($mode == "cancel") {
if (substr($nomor,-3)=="#00" || substr($nomor,0,3)!="POS") Detail_Cancel($nomor);
$aparam = Data_Jual1();
} else {
$aparam = Data_Jual1();
}
//MONITOR DISPLAY
if ($_SESSION['__APP_INV']['MON_ENABLE']) {
$db->Query("UPDATE disp_login SET No_Pos='".$aparam['No_Jual']."' WHERE CabID='".$_SESSION['__APP_INV']['CABANGID']."' AND UserID='".user_id()."' AND Unix='".user_unix()."'");
}
master_show($mode, $aparam);
} else if ( $data == "detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
$id_inv = Param::Get("InvID", 0);
$id_sat = Param::Get("SatuanID", 0);
$iqty = Param::Get("Qty", 0) * -1;
$dhargaD = Param::Get("Harga_Diskon", 0);
$ddiskP = Param::Get("Persen_Diskon", 0);
$istok = 1;
$db->Query("SELECT Qty FROM inv_produk_kemasan WHERE InvID='".$id_inv."' AND SatuanID='".$id_sat."'");
if ($db->Next()) $istok = $db->Row("Qty", 1);
if ($ddiskP > 0) $dhargaD = Param::Get("Harga_Jual",0) * $ddiskP * 0.01;
$sql = new SQL($db);
$sql->set_table("tmp_inv_detail");
$sql->add_param("No_Ref", $nomor);
$sql->add_param("InvID");
$sql->add_param("SatuanID");
$sql->add_param("Qty", $iqty);
$sql->add_param("Stok", ($istok*$iqty));
$sql->add_param("Harga_Beli");
$sql->add_param("Harga_Jual");
$sql->add_param("Disk_Rupiah", $dhargaD);
$sql->add_param("Total_Diskon", "Disk_Rupiah*-Qty", true);
$sql->add_param_unix();
$sql->add_param_userid();
$sql->add_where("ID");
$sql->add_where("No_Ref", $nomor);
$_id = Param::Get("ID", 0);
$_ket = strtoupper(Param::Get("Ket"));
if ( $mode_detail == "insert" ) {
$sql->InsertDB();
if ($id_inv == $id_other) {
$_id = $sql->LastInsertID();
$db->Query("INSERT INTO tmp_inv_detail_lain (No_Ref,ID,Ket,UserID,Unix) VALUES ('".$nomor."','".$_id."','".$_ket."','".user_id()."','".user_unix()."')");
}
} else if ( $mode_detail == "update" ) {
$sql->UpdateDB();
if ($id_inv == $id_other) $db->Query("UPDATE tmp_inv_detail_lain SET Ket='".$_ket."' WHERE No_Ref='".$nomor."' AND ID='".$_id."' AND UserID='".user_id()."' AND Unix='".user_unix()."'");
} else if ( $mode_detail == "delete" ) {
$db->Query("UPDATE tmp_inv_detail SET Qty=0,Stok=0,Total_Diskon=0 WHERE No_Ref='".$nomor."' AND ID='".$_id."'");
}
}
$obj = new Table($db);
$obj->set_css("tabel-pos");
$obj->set_query("SELECT D.*,-D.Qty Qty2,IF(ISNULL(O.Ket),P.Nama_Lengkap,O.Ket) Nama_Lengkap,(-D.Qty*(D.Harga_Jual-D.Disk_Rupiah)) Total,P.Kode_SKU,IF(D.InvID='".$id_other."',1,0) ISO,IF(D.Qty=0,0,1) IDEL FROM (SELECT * FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND Unix='".user_unix()."' AND Promo<2) D LEFT JOIN (SELECT * FROM tmp_inv_detail_lain WHERE No_Ref='".$nomor."' AND Unix='".user_unix()."') O ON (D.No_Ref=O.No_Ref AND D.ID=O.ID) LEFT JOIN vi_inv_produk P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID)");
$obj->set_query_footer("SELECT CONCAT('Qty: ',FORMAT(SUM(-D.Qty),2),' / Item: ',FORMAT(COUNT(DISTINCT InvID),0)) Nama_Lengkap,SUM(-D.Qty*D.Disk_Rupiah) Disk_Rupiah,SUM(-D.Qty*(D.Harga_Jual-D.Disk_Rupiah)) Total FROM tmp_inv_detail D WHERE D.No_Ref='".$nomor."' AND D.Unix='".user_unix()."' AND D.Promo<2");
$obj->add_field("ID", "ID", "hid");
$obj->add_field("InvID", "InvID", "hid");
$obj->add_field("SatuanID", "SatuanID", "hid");
$obj->add_field("ISO", "IS OTHER", "hid");
$obj->add_field("Kode_SKU", "SKU", "c");
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
$obj->add_field("Qty2", "Qty", "r", "koma30");
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah");
$obj->add_field("Disk_Rupiah", "Diskon @", "r", "rupiah", "rupiah");
$obj->add_field("Total", "Jumlah", "r", "rupiah", "rupiah");
$obj->set_field_order("ID", "D");
$obj->add_row_btn("clipboard", "Ubah", "POSJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "POSJS.detail_hapus", "IDEL", 1);
$obj->set_row_color("IDEL", 0, "rcoret");
$obj->set_func_navi("POSJS.data_query('detail')");
$ajson[] = $obj->json_table("divPOS1", 8);
$ainfo = ['Total'=>0, 'Item'=>0];
$db->Query("SELECT SUM(-Qty*(Harga_Jual-Disk_Rupiah)) Total,COUNT(*) Item FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND Unix='".user_unix()."'");
if ($db->Next()) $ainfo = $db->AllRow();
$ajson[] = array('type'=>"form", 'id'=>"Total_Nota", 'value'=>$ainfo['Total']);
$ajson[] = array('type'=>"form", 'id'=>"Total_Item", 'value'=>$ainfo['Item']);
if ($db->RowFloat("Item")>0) $ajson[] = array('type'=>"html", 'id'=>"Total_Disp", 'value'=>rupiah($ainfo['Total']));
} else if ( $data == "auto-produk" ) {
$nomor = urldecode($nomor);
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
$bcode = 0; $arec = [];
// Cari by SKU
$db->Query("SELECT K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',CONVERT(P.Harga_Pokok*K.Qty USING UTF8),':',CONVERT(K.Harga_Jual USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_SKU='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) WHERE P.Aktif=1");
if ($db->Next()) {
$bcode = 1;
$arec = $db->AllRow();
}
// Cari by Barcode
if ($bcode == 0) {
$db->Query("SELECT K.InvID,P.Nama_Produk,CONCAT(K.SatuanID,':',CONVERT(P.Harga_Pokok*K.Qty USING UTF8),':',CONVERT(K.Harga_Jual USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND Kode_Barcode='".$tcari."' LIMIT 1) K LEFT JOIN inv_produk P ON (P.InvID=K.InvID) WHERE P.Aktif=1");
if ($db->Next()) {
$bcode = 1;
$arec = $db->AllRow();
}
}
if ($bcode == 1) {
$db->Query("SELECT * FROM inv_stok WHERE CabID='".$id_cab."' AND InvID='".$arec['InvID']."' LIMIT 1");
$arec['Stok'] = ($db->Next()) ? $db->RowFloat("Stok",0) : 0;
$ajson['autodata'][] = ['value'=>$arec['InvID'], 'text'=>$arec['Nama_Produk'], 'data'=>$arec['Data2'].":".$arec['Stok'], '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,K.Harga_Jual,S.Nama_Satuan,CONCAT(K.SatuanID,':',CONVERT(P.Harga_Pokok*K.Qty USING UTF8),':',CONVERT(K.Harga_Jual USING UTF8),':',CONVERT(IFNULL(X.Stok,0) USING UTF8)) Data2 FROM (SELECT * FROM inv_produk_kemasan WHERE Harga_Jual>0 AND 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 inv_stok X ON (X.CabID='".$id_cab."' AND 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").' - Rp. '.rupiah($db->Row("Harga_Jual")).' <span class="text-danger">('.$db->Row("Sisa_Stok").')</span>', 'data'=>$db->Row("Data2"), 'bc'=>0];
}
}
} else if ( $data == "brow-produk" ) {
$tcari = trim(Param::Get("Cari_Produk"));
$tsql = ($tcari=="") ? "" : " AND P.Barcode_Nama LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("vi_inv_produk P LEFT JOIN inv_stok X ON (X.CabID='".$id_cab."' AND P.InvID=X.InvID)", "P.*,IF(ISNULL(X.Stok),0,ROUND(X.Stok/P.Qty,2)) Sisa_Stok,IF(IFNULL(X.Stok,0)=0,1,0) Coret", "P.Harga_Jual>0 AND P.Aktif=1".$tsql);
$obj->add_field("InvID", "ID", "hid");
$obj->add_field("SatuanID", "ID", "hid");
$obj->add_field("Coret", "Kosong", "hid");
$obj->add_field("Kode_SKU", "SKU", "c");
$obj->add_field("Kode_Barcode", "Kode Barcode", "c");
$obj->add_field("Nama_Lengkap", "Nama Barang", "awr");
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah");
$obj->add_field("Sisa_Stok", "Stok", "r", "rupiah");
$obj->set_field_order("Kode_SKU", "A");
$obj->set_row_color("Coret", 1, "rcoret");
$obj->add_row_btn("save", "Pilih", "POSJS.produk_select");
$obj->set_func_navi("POSJS.data_query('brow-produk')");
$ajson[] = $obj->db_table("divBrowProduk");
} else if ($data == "info_produk") {
$form = new Form($db);
$tbcode = $form->textbox("_", "Kode_Barcode", "", true);
$tnama = $form->textbox("_", "Nama_Barang", "", true);
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"&nbsp;"]);
$tsat = $form->option_db("_", "StokID", 0, true, false, "para_satuan", ["SatuanID","Nama_Satuan"], "Aktif=1 ORDER BY Nama_Satuan", [0,"&nbsp;"]);
$thjual = $form->textbox("_", "Harga_Jual", 0, true, false, "double");
echo '
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Kode Barcode</div><div class="col-sm-7 col-lg-6">'.$tbcode.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Nama Barang</div><div class="col-sm-8 col-lg-9">'.$tnama.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Grup Barang</div><div class="col-sm-8 col-lg-9">'.$tgrup.'</div></div>
<hr class="my-2">
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Satuan Kemasan</div><div class="col-sm-7 col-lg-6">'.$tsat.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Harga Jual @</div><div class="col-sm-7 col-lg-6">'.$thjual.'</div></div>';
} else if ($data == "simpan_produk") {
$k_barcode = Param::Get("Kode_Barcode", "");
$n_produk = Param::Get("Nama_Barang", "");
$i_grup = Param::Get("Grup_InvID", 0);
$i_stok = Param::Get("StokID", 0);
$n_harga = Param::Get("Harga_Jual", 0);
$db->Query("INSERT INTO inv_produk (Grup_InvID,Nama_Produk,StokID,NormalID,UserID) VALUES ('".$i_grup."','".$n_produk."','".$i_stok."','".$i_stok."','".user_id()."')");
$id_inv = $db->LastInsertID();
$db->Query("INSERT INTO inv_produk_kemasan SET InvID='".$id_inv."',SatuanID='".$i_stok."',Kode_SKU='".SKU_Baru($i_grup)."',Kode_Barcode='".$k_barcode."',Qty=1,Harga_Jual='".$n_harga."',UserID='".user_id()."'");
$ajson['msg'] = "Pembuatan Item Barang baru telah selesai.";
} else if ($data == "detail_produk") {
$_id = Param::Get("ID", 0);
$_id_inv = Param::Get("InvID", 0);
$_id_sat = Param::Get("SatuanID", 0);
$adetail = ['ID'=>0,'Qty'=>1,'Harga_Diskon'=>0];
$db->Query("SELECT InvID,SatuanID,Kode_SKU,Kode_Barcode,Nama_Lengkap,Nama_Satuan,Harga_Jual,Harga_Pokok Harga_Beli FROM vi_inv_produk WHERE InvID='".$_id_inv."' AND SatuanID='".$_id_sat."' LIMIT 1");
if ($db->Next()) $adetail = array_merge($adetail, $db->AllRow());
if ($mode_detail == "insert") {
} else {
$db->Query("SELECT ID,-Qty Qty,Harga_Beli,Harga_Jual,Disk_Rupiah Harga_Diskon FROM tmp_inv_detail WHERE Unix='".user_unix()."' AND No_Ref='".$nomor."' AND ID='".$_id."' LIMIT 1");
if ($db->Next()) $adetail = array_merge($adetail, $db->AllRow());
}
$form = new Form($db);
$tsku = $form->textbox("_", "Kode_SKU", $adetail['Kode_SKU']. " / " .$adetail['Kode_Barcode'], false);
$tnama = $form->textbox("_", "Nama_Lengkap", $adetail['Nama_Lengkap'], false);
$tsat = $form->textbox("_", "Nama_Satuan", $adetail['Nama_Satuan'], false);
$tqty = $form->textbox("_", "Qty", abs($adetail['Qty']), true, true, "number");
$thjual = $form->textbox("_", "Harga_Jual", $adetail['Harga_Jual'], false, false, "double");
$thdisk = $form->textbox("_", "Harga_Diskon", $adetail['Harga_Diskon'], true, false, "double");
$tpdisk = $form->textbox("_", "Persen_Diskon", 0, true, false, "double");
$tjuml = $form->textbox("_", "Jumlah", 0, false, false, "double");
echo '
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Kode SKU / Barcode</div><div class="col-sm-8 col-lg-9">'.$tsku.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Nama Barang</div><div class="col-sm-8 col-lg-9">'.$tnama.'</div></div>
<hr class="my-2">
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Qty</div><div class="col-sm-5 col-lg-4">'.$tqty.'</div><div class="col-sm-3 col-lg-5">'.$tsat.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Harga @</div><div class="col-sm-7 col-lg-6">'.$thjual.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Diskon @</div><div class="col-sm-5 col-lg-6">'.$thdisk.'</div><div class="col-sm-3 col-lg-3"><div class="input-group"><div class="input-group-text">&thickapprox;</div>'.$tpdisk.'<div class="input-group-text">%</div></div></div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Sub Total</div><div class="col-sm-7 col-lg-6">'.$tjuml.'</div></div>
<input type="hidden" id="ID" value="'.$adetail['ID'].'" />
<input type="hidden" id="InvID" value="'.$adetail['InvID'].'" />
<input type="hidden" id="SatuanID" value="'.$adetail['SatuanID'].'" />
<input type="hidden" id="Harga_Beli" value="'.$adetail['Harga_Beli'].'" />
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" />';
} else if ($data == "detail_lain") {
$_id = Param::Get("ID", 0);
$alain = ['ID'=>0,'Qty'=>1,'Harga_Beli'=>0,'Harga_Jual'=>0,'Ket'=>""];
$db->Query("SELECT InvID,SatuanID,Kode_SKU,Nama_Satuan FROM vi_inv_produk WHERE InvID='".$_SESSION['__APP_INV']['OTHERINVID']."' LIMIT 1");
if ($db->Next()) $alain = array_merge($alain, $db->AllRow());
if ($mode_detail == "insert") {
} else {
$db->Query("SELECT ID,-Qty Qty,Harga_Beli,Harga_Jual FROM tmp_inv_detail WHERE Unix='".user_unix()."' AND No_Ref='".$nomor."' AND ID='".$_id."' LIMIT 1");
if ($db->Next()) $alain = array_merge($alain, $db->AllRow());
$db->Query("SELECT Ket FROM tmp_inv_detail_lain WHERE Unix='".user_unix()."' AND No_Ref='".$nomor."' AND ID='".$_id."' LIMIT 1");
if ($db->Next()) $alain = array_merge($alain, $db->AllRow());
}
$form = new Form($db);
$tsku = $form->textbox("_", "Kode_SKU", $alain['Kode_SKU'], false);
$tket = $form->textbox("_", "Ket", $alain['Ket'], true);
$tsat = $form->textbox("_", "Nama_Satuan", $alain['Nama_Satuan'], false);
$tqty = $form->textbox("_", "Qty", abs($alain['Qty']), true, true, "number");
$thjual = $form->textbox("_", "Harga_Jual", $alain['Harga_Jual'], true, true, "double");
$tjuml = $form->textbox("_", "Jumlah", 0, false, false, "double");
echo '
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Kode SKU / Barcode</div><div class="col-sm-8 col-lg-9">'.$tsku.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Nama Barang</div><div class="col-sm-8 col-lg-9">'.$tket.'</div></div>
<hr class="my-2">
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Qty</div><div class="col-sm-5 col-lg-4">'.$tqty.'</div><div class="col-sm-3 col-lg-5">'.$tsat.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Harga @</div><div class="col-sm-7 col-lg-6">'.$thjual.'</div></div>
<div class="row mb-1"><div class="col-sm-4 col-lg-3 col-form-label">Sub Total</div><div class="col-sm-7 col-lg-6">'.$tjuml.'</div></div>
<input type="hidden" id="ID" value="'.$alain['ID'].'" />
<input type="hidden" id="InvID" value="'.$alain['InvID'].'" />
<input type="hidden" id="SatuanID" value="'.$alain['SatuanID'].'" />
<input type="hidden" id="Harga_Diskon" value="0" />
<input type="hidden" id="Persen_Diskon" value="0" />
<input type="hidden" id="Harga_Beli" value="'.$alain['Harga_Beli'].'" />
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" />';
} else if ($data == "info_kasir") {
$tot_jual = Param::Get("Total_Nota", 0);
$tot_jual -= Promo_Hitung($nomor, tgl_dmy());
$form = new Form($db);
$tjual = $form->textbox("_", "popTotal_Jual", uang($tot_jual), false, false, "double");
$ttunai = $form->textbox("_", "popTotal_Tunai", 0, true, false, "double");
$tkartu = $form->textbox("_", "popTotal_Kartu", 0, true, false, "double");
$tsisa = $form->textbox("_", "popTotal_Sisa", 0, false, false, "double");
$okartu = $form->option_db("_", "popKartuID", 0, true, false, "para_rek_pos", ["KartuID","Kode_Kartu"], "Aktif=1", [0,"Pilihan Non Tunai"]);
$tnokartu = $form->textbox("_", "popNo_Kartu", "", true, false, "text");
$tnamakartu = $form->textbox("_", "popNama_Kartu", "", true, false, "text");
$ajson['html'] = '
<div class="row mb-1"><div class="col-sm-6 col-lg-5 col-form-label">Total Nota Rp.</div><div class="col-sm-6 col-lg-7">'.$tjual.'</div></div>
<div class="row mb-1"><div class="col-sm-6 col-lg-5 col-form-label">Tunai Rp.</div><div class="col-sm-6 col-lg-7">'.$ttunai.'</div></div>
<div class="row mb-1"><div class="col-sm-6 col-lg-5">'.$okartu.'</div><div class="col-sm-6 col-lg-7">'.$tkartu.'</div></div>
<div class="row mb-1"><div class="col-sm-6 col-lg-5 col-form-label">Kembali Rp.</div><div class="col-sm-6 col-lg-7">'.$tsisa.'</div></div>
<hr class="my-2 ckartu d-none">
<div class="row mb-1 ckartu d-none"><div class="col-sm-6 col-lg-5 col-form-label">Nomor Kartu</div><div class="col-sm-6 col-lg-7">'.$tnokartu.'</div></div>
<div class="row mb-1 ckartu d-none"><div class="col-sm-6 col-lg-5 col-form-label">Nama Pemilik</div><div class="col-sm-6 col-lg-7">'.$tnamakartu.'</div></div>
<hr class="my-2">
<div class="row mt-1">
<div class="col-3 d-grid"><button type="button" class="btn btn-primary" id="butKPend">Pending</button></div>
<div class="col-3">&nbsp;</div>
<div class="col-3 d-grid"><button type="button" class="btn btn-danger" id="butKBatal" data-bs-dismiss="modal">Batal</button></div>
<div class="col-3 d-grid"><button type="button" class="btn btn-success" id="butKBayar">Bayar</button></div>
</div>
<input type="hidden" id="popTotal_Bayar" value="0" />';
$ajson['Total_Disp'] = rupiah($tot_jual);
} else if ( $data == "brow-nota" ) {
$tcari = trim(Param::Get("Cari_Nota"));
$tsql = ($tcari=="") ? " AND UserID='".user_id()."' AND Tgl_Jual='".tgl_ymd()."'" : " AND CONCAT(No_Jual,DATE_FORMAT(Tgl_Jual,'%d-%m-%Y')) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("(SELECT * FROM inv_jual WHERE CabID='".$id_cab."'".$tsql.") J LEFT JOIN para_rek_pos P ON (J.KartuID=P.KartuID)", "J.*,DATE_FORMAT(J.DateStamp,'%H:%i:%s') Tgl_Jual2,J.Total_Jual-J.Total_Diskon Total,J.Total_Jual-J.Total_Diskon-J.Total_Bayar Kembali,J.UserID,IF(ISNULL(P.Kode_Kartu),'Tunai',P.Kode_Kartu) Kartu", "");
$obj->set_query_footer("SELECT SUM(Total_Jual-Total_Diskon) Total,SUM(Total_Jual-Total_Diskon-Total_Bayar) Kembali FROM inv_jual WHERE CabID='".$id_cab."'".$tsql);
$obj->add_field("No_Jual", "No. Nota", "c");
$obj->add_field("Tgl_Jual", "Tanggal", "c", "sqltgl");
$obj->add_field("Tgl_Jual2", "Jam", "c");
$obj->add_field("Total", "Jumlah", "r", "rupiah", "rupiah");
$obj->add_field("Total_Bayar", "Bayar", "r", "rupiah", "rupiah");
$obj->add_field("Kembali", "Kembali", "r", "rupiah", "rupiah");
$obj->add_field("Kartu", "C / D", "left");
if ($tcari<>"") {
$obj->set_field_order("Tgl_Jual", "D");
$obj->set_limit(100);
} else {
$obj->set_field_order("Tgl_Jual2", "D");
}
$obj->add_row_btn("printer", "Cetak", "POSJS.nota_print");
$obj->add_row_btn("clipboard", "Ubah", "POSJS.nota_select");
if (user_level(1)) $obj->add_row_btn("trash", "Hapus", "POSJS.nota_delete", "CabID", $id_cab);
else $obj->add_row_btn("trash", "Hapus", "POSJS.nota_delete", "UserID", user_id());
$obj->set_func_navi("POSJS.data_query('brow-nota')");
$ajson[] = $obj->db_table("divBrowNota");
} else if ( $data == "brow-pending" ) {
$obj = new Table($db);
$obj->set_query("SELECT J.*,J.Total_Jual-J.Total_Diskon Total,J.UserID FROM inv_jual_pend J WHERE J.CabID='".$id_cab."' AND J.UserID='".user_id()."'");
$obj->add_field("No_Jual", "No. Nota", "c");
$obj->add_field("Total_Jual", "Sub. Total", "r", "rupiah");
$obj->add_field("Total_Diskon", "Diskon", "r", "rupiah");
$obj->add_field("Total", "Total", "r", "rupiah");
$obj->set_field_order("No_Jual", "D");
$obj->add_row_btn("save", "Pilih", "POSJS.pending_select");
if (user_level(1)) $obj->add_row_btn("trash", "Hapus", "POSJS.pending_delete", "UserID", user_id());
$obj->set_func_navi("POSJS.data_query('brow-pending')");
$ajson[] = $obj->json_table("divBrowPending");
} else if ( $data == "pole-config") {
$ajson['pole'] = []; $apole = [];
$db->Query("SELECT * FROM disp_config WHERE REG_ID='".$_SESSION['__WEB_APP']['APP_CODE']."' LIMIT 1");
if ($db->Next()) $apole = $db->AllRow();
foreach ($apole as $_key => $_val) {
if (strpos($_key, "POLE") !== false) {
if (strpos($_key, "ENABLE") !== false) $_val = intval($_val);
$ajson['pole'][str_replace("POLE_","",$_key)] = $_val;
}
}
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<div class="row flex-column-reverse flex-md-row">
<div class="col-sm-12 col-md-9 col-lg-10 mt-3 mt-md-0">
<div class="row mb-1">
<div class="col-sm-9 col-lg-10">
<input type="search" class="form-control fs-5" id="Nama_Produk" value="" placeholder="Scan SKU / Barcode / Ketik Nama Barang" autocomplete="off" />
</div>
<div class="col-sm-3 col-lg-2">
<input type="double" class="form-control double fs-5" id="POS_Qty" value="1.00" maxlength="10" onblur="POSJS.onblur_Qty();" />
</div>
</div>
<div id="divPOS1">&nbsp;</div>
</div>
<div class="col-sm-12 col-md-3 col-lg-2 border-start">
<div id="divPOS2">&nbsp;</div>
</div>
</div>
</div></div></div>';
}
send_json($ajson);
?>