first commit

This commit is contained in:
2026-01-22 15:30:17 +07:00
commit a971b97d88
181 changed files with 22279 additions and 0 deletions
+110
View File
@@ -0,0 +1,110 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/csv/faktur_pajak.php
Desc. : PHP - Export Data Faktur Pajak
Created By : Siau Pheng ([email protected]).
Created Date : April 2rd, 2011.
Last Modified : August 13th, 2024.
(c) 2011 - 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
use siaupheng\fonia3\Data\CSV;
$db = (is_resource($db)) ? $db : new MySQL();
$db2 = $db2 ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$tgl_from = tgl_sql2str(Param::Get("Tgl_From"));
$tgl_to = tgl_sql2str(Param::Get("Tgl_To"));
$jenis_fp = Param::Get("Jenis_FP", 0);
if ( $data == "download" ) {
$aval = [];
$alist = Param::Get_ArrayCBOX();
foreach ($alist as $_key => $_val) {
if ($_val=="Y") array_push($aval, str_replace("_",".",$_key));
}
$tsql = (count($aval)==0) ? "FALSE" : "No_Pajak IN ('".implode("','",$aval)."')";
$pre = new CSV();
$pre->add_field("FK");
$pre->add_field("KD_JENIS_TRANSAKSI");
$pre->add_field("FG_PENGGANTI");
$pre->add_field("NOMOR_FAKTUR");
$pre->add_field("MASA_PAJAK");
$pre->add_field("TAHUN_PAJAK");
$pre->add_field("TANGGAL_FAKTUR");
$pre->add_field("NPWP");
$pre->add_field("NAMA");
$pre->add_field("ALAMAT_LENGKAP");
$pre->add_field("JUMLAH_DPP");
$pre->add_field("JUMLAH_PPN");
$pre->add_field("JUMLAH_PPNBM");
$pre->add_field("ID_KETERANGAN_TAMBAHAN");
$pre->add_field("FG_UANG_MUKA");
$pre->add_field("UANG_MUKA_DPP");
$pre->add_field("UANG_MUKA_PPN");
$pre->add_field("UANG_MUKA_PPNBM");
$pre->add_field("REFERENSI");
$pre->add_field("KODE_DOKUMEN_PENDUKUNG");
$pre->add_value("LT","NPWP","NAMA","JALAN","BLOK","NOMOR","RT","RW","KECAMATAN","KELURAHAN","KABUPATEN","PROPINSI","KODE_POS","NOMOR_TELEPON","","","","","","");
$pre->add_value("OF","KODE_OBJEK","NAMA","HARGA_SATUAN","JUMLAH_BARANG","HARGA_TOTAL","DISKON","DPP","PPN","TARIF_PPNBM","PPNBM","","","","","","","","","");
$db->Query("SELECT P.*,DATE_FORMAT(P.Tgl_Pajak,'%Y') Tahun_Pajak,DATE_FORMAT(P.Tgl_Pajak,'%c') Bulan_Pajak,DATE_FORMAT(P.Tgl_Pajak,'%d/%m/%Y') Tgl_Faktur,IF(P.OutletID=0,P.Alamat_NPWP,O.Alamat_NPWP) Alamat_NPWP2 FROM (SELECT * FROM inv_jual_pajak WHERE ".$tsql.") P LEFT JOIN para_outlet O ON (P.OutletID=O.OutletID) ORDER BY P.No_Pajak");
while ($db->Next()) {
$pre->add_value("FK", "01", $jenis_fp, rapi_fp($db->Row("No_Pajak")), $db->Row("Bulan_Pajak"), $db->Row("Tahun_Pajak"), $db->Row("Tgl_Faktur"), $db->Row("No_NPWP"), $db->Row("Nama_NPWP"), rapi_alamat($db->Row("Alamat_NPWP2")), $db->Row("Jumlah_DPP"), $db->Row("Jumlah_PPN"), 0, "", 0, 0, 0, 0, "", "");
$db2->Query("SELECT P.*,R.Nama_Rasa,D.Qty,D.Harga,D.Total_Jual,D.Total_Diskon,ROUND((D.Total_Jual-D.Total_Diskon)*D.PPN,4) Total_PPN FROM (SELECT InvID,RasaID,SUM(-Qty) Qty,ROUND(Harga_Jual/(1+PPN),2) Harga,SUM(-Qty*ROUND(Harga_Jual/(1+PPN),2)) Total_Jual,SUM(IF(Total_Diskon=(-Qty*Harga_Jual),-Qty*ROUND(Harga_Jual/(1+PPN),2),ROUND(Total_Diskon/(1+PPN),2))) Total_Diskon,PPN FROM inv_detail WHERE No_Ref IN (SELECT No_Jual FROM inv_jual WHERE No_Pajak='".$db->Row("No_Pajak")."') AND Qty<>0 GROUP BY InvID, RasaID, SatuanID ORDER BY InvID, RasaID, SatuanID) D LEFT JOIN inv_produk P ON (D.InvID=P.InvID) LEFT JOIN para_rasa R ON (D.RasaID=R.RasaID) WHERE P.Pajak=1 ORDER BY P.Nama_Produk");
while ($db2->Next()) {
$pre->add_value("OF", $db2->Row("Kode_Produk"), $db2->Row("Nama_Produk").data_rasafp($db2->Row("Nama_Rasa")), $db2->Row("Harga"), $db2->Row("Qty"), $db2->Row("Total_Jual"), $db2->Row("Total_Diskon"), $db2->Row("Total_Jual")-$db2->Row("Total_Diskon"), $db2->Row("Total_PPN"), "0", "0", "", "", "", "", "", "", "", "", "");
}
$db2->Query("UPDATE inv_jual_pajak SET XFP=XFP+1 WHERE No_Pajak='".$db->Row("No_Pajak")."' LIMIT 1");
}
$pre->download("FP-".Param::Get("Tgl_From").".csv");
} else if ( $data == "detail" ) {
$tcari = trim(Param::Get("Cari_FP"));
$tsql = ($tcari=="") ? "" : " AND CONCAT(No_Pajak,No_NPWP,Nama_NPWP,DATE_FORMAT(Tgl_Pajak,'%d-%m-%Y')) LIKE '%".$tcari."%'";
$tot_fp = 50;
$db->Query("SELECT COUNT(*) FP FROM inv_jual_pajak P WHERE P.Tgl_Pajak BETWEEN '".$tgl_from."' AND '".$tgl_to."'".$tsql);
if ($db->Next()) $tot_fp = $db->RowFloat("FP", 50);
$obj = new Table($db);
$obj->set_query("SELECT *,'N' Nota FROM inv_jual_pajak WHERE Tgl_Pajak BETWEEN '".$tgl_from."' AND '".$tgl_to."'".$tsql);
$obj->set_query_footer("SELECT SUM(Jumlah_DPP) Jumlah_DPP,SUM(Jumlah_PPN) Jumlah_PPN FROM inv_jual_pajak WHERE Tgl_Pajak BETWEEN '".$tgl_from."' AND '".$tgl_to."'".$tsql);
$obj->add_field("No_Pajak", "NSFP", "c");
$obj->add_field("Tgl_Pajak", "Tgl. FP", "c", "sqltgl");
$obj->add_field("No_NPWP", "NPWP", "l");
$obj->add_field("Nama_NPWP", "Nama NPWP", "awr");
$obj->add_field("Jumlah_DPP", "Jumlah DPP", "r", "rupiah", "rupiah");
$obj->add_field("Jumlah_PPN", "Jumlah PPN", "r", "rupiah", "rupiah");
$obj->add_field("XFP", "CSV", "c");
$obj->set_field_order("No_Pajak", "A");
$obj->add_row_checkbox("No_Pajak", "Nota", ["Y","N"]);
$obj->set_func_navi("CSVFPJS.data_query('detail')");
$ajson[] = $obj->json_table("divDetail", $tot_fp);
} else if ( $data == "default") {
$form = new Form($db);
$tdari = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tsamp = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="card"><div class="card-header custom-style">Export Data Faktur Pajak Penjualan</div><div class="card-body"><div class="row mb-1"><div class="col d-flex justify-content-between"><div class="d-flex">'.$tdari.'<div><input type="text" class="form-control-plaintext text-center px-2" value="S / D"></div>'.$tsamp.'</div><div class="ms-2 input-group"><input class="form-control" id="Cari_FP" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button></div><button class="btn btn-info shadow-none ms-2 dropdown-toggle" id="butCSV" type="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="bi-cloud-download me-2"></i>Export CSV</button><div class="dropdown-menu" aria-labelledby="butCSV"><a class="dropdown-item" href="#" id="csvNormal">Faktur Pajak Normal</a><a class="dropdown-item" href="#" id="csvPengganti">Faktur Pajak Pengganti</a></div></div></div><div id="divDetail">&nbsp;</div></div></div>';
}
send_json($ajson);
?>
+112
View File
@@ -0,0 +1,112 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/csv/faktur_pajak_biaya.php
Desc. : PHP - Export Data Faktur Pajak Biaya
Created By : Siau Pheng ([email protected]).
Created Date : February 11th, 2017.
Last Modified : August 13th, 2024.
(c) 2011 - 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
use siaupheng\fonia3\Data\CSV;
$db = (is_resource($db)) ? $db : new MySQL();
$db2 = $db2 ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$tgl_from = tgl_sql2str(Param::Get("Tgl_From"));
$tgl_to = tgl_sql2str(Param::Get("Tgl_To"));
$jenis_fp = Param::Get("Jenis_FP", 0);
if ( $data == "download" ) {
$aval = [];
$alist = Param::Get_ArrayCBOX();
foreach ($alist as $_key => $_val) {
if ($_val=="Y") array_push($aval, str_replace("_",".",$_key));
}
$tsql = (count($aval)==0) ? "FALSE" : "No_Pajak IN ('".implode("','",$aval)."')";
$db->Query("SELECT P.*,DATE_FORMAT(P.Tgl_Pajak,'%Y') Tahun_Pajak,DATE_FORMAT(P.Tgl_Pajak,'%c') Bulan_Pajak,DATE_FORMAT(P.Tgl_Pajak,'%d/%m/%Y') Tgl_Faktur,IF(P.SupID=0,P.Alamat_NPWP,CONCAT(S.Alamat_Sup,' ',S.Kota_Sup)) Alamat_NPWP2 FROM (SELECT * FROM biaya_pajak WHERE ".$tsql.") P LEFT JOIN para_supplier S ON (S.SupID=P.SupID) ORDER BY P.No_Pajak");
$pre = new CSV();
$pre->add_field("FK");
$pre->add_field("KD_JENIS_TRANSAKSI");
$pre->add_field("FG_PENGGANTI");
$pre->add_field("NOMOR_FAKTUR");
$pre->add_field("MASA_PAJAK");
$pre->add_field("TAHUN_PAJAK");
$pre->add_field("TANGGAL_FAKTUR");
$pre->add_field("NPWP");
$pre->add_field("NAMA");
$pre->add_field("ALAMAT_LENGKAP");
$pre->add_field("JUMLAH_DPP");
$pre->add_field("JUMLAH_PPN");
$pre->add_field("JUMLAH_PPNBM");
$pre->add_field("ID_KETERANGAN_TAMBAHAN");
$pre->add_field("FG_UANG_MUKA");
$pre->add_field("UANG_MUKA_DPP");
$pre->add_field("UANG_MUKA_PPN");
$pre->add_field("UANG_MUKA_PPNBM");
$pre->add_field("REFERENSI");
$pre->add_field("KODE_DOKUMEN_PENDUKUNG");
$pre->add_value("LT","NPWP","NAMA","JALAN","BLOK","NOMOR","RT","RW","KECAMATAN","KELURAHAN","KABUPATEN","PROPINSI","KODE_POS","NOMOR_TELEPON","","","","","","");
$pre->add_value("OF","KODE_OBJEK","NAMA","HARGA_SATUAN","JUMLAH_BARANG","HARGA_TOTAL","DISKON","DPP","PPN","TARIF_PPNBM","PPNBM","","","","","","","","","");
while ($db->Next()) {
$pre->add_value("FK", "01", $jenis_fp, rapi_fp($db->Row("No_Pajak")), $db->Row("Bulan_Pajak"), $db->Row("Tahun_Pajak"), $db->Row("Tgl_Faktur"), $db->Row("No_NPWP"), $db->Row("Nama_NPWP"), rapi_alamat($db->Row("Alamat_NPWP2")), $db->Row("Jumlah_DPP"), $db->Row("Jumlah_PPN"), 0, "", 0, 0, 0, 0, "", "");
$db2->Query("SELECT *,(Qty*Harga_Jual) Total_Jual,(Qty*Harga_Jual)*PPN Total_PPN FROM biaya_pajak_detail WHERE No_Biaya='".$db->Row("No_Biaya")."' ORDER BY ID");
while ($db2->Next()) {
$pre->add_value("OF", "", $db2->Row("Uraian_Biaya"), $db2->Row("Harga_Jual"), $db2->Row("Qty"), $db2->Row("Total_Jual"), 0, $db2->Row("Total_Jual"), $db2->Row("Total_PPN"), "0", "0", "", "", "", "", "", "", "", "", "");
}
$db2->Query("UPDATE biaya_pajak SET XFP=XFP+1 WHERE No_Pajak='".$db->Row("No_Pajak")."' LIMIT 1");
}
$pre->download("FP-".Param::Get("Tgl_From").".csv");
} else if ( $data == "detail" ) {
$tcari = trim(Param::Get("Cari_FP"));
$tsql = ($tcari=="") ? "" : " AND CONCAT(No_Pajak,No_NPWP,Nama_NPWP,DATE_FORMAT(Tgl_Pajak,'%d-%m-%Y')) LIKE '%".$tcari."%'";
$tot_fp = 50;
$db->Query("SELECT COUNT(*) FP FROM biaya_pajak WHERE Tgl_Pajak BETWEEN '".$tgl_from."' AND '".$tgl_to."'".$tsql);
if ($db->Next()) $tot_fp = $db->RowFloat("FP", 50);
$obj = new Table($db);
$obj->set_query("SELECT *,'N' Nota FROM biaya_pajak WHERE Tgl_Pajak BETWEEN '".$tgl_from."' AND '".$tgl_to."'".$tsql);
$obj->set_query_footer("SELECT SUM(Jumlah_DPP) Jumlah_DPP,SUM(Jumlah_PPN) Jumlah_PPN FROM biaya_pajak WHERE Tgl_Pajak BETWEEN '".$tgl_from."' AND '".$tgl_to."'".$tsql);
$obj->add_field("No_Pajak", "NSFP", "c");
$obj->add_field("Tgl_Pajak", "Tgl. FP", "c", "sqltgl");
$obj->add_field("No_NPWP", "NPWP", "l");
$obj->add_field("Nama_NPWP", "Nama NPWP", "awr");
$obj->add_field("Jumlah_DPP", "Jumlah DPP", "r", "rupiah", "rupiah");
$obj->add_field("Jumlah_PPN", "Jumlah PPN", "r", "rupiah", "rupiah");
$obj->add_field("XFP", "CSV", "c");
$obj->set_field_order("No_Pajak", "A");
$obj->add_row_checkbox("No_Pajak", "Nota", ["Y","N"]);
$obj->set_func_navi("CSVBiayaJS.data_query('detail')");
$ajson[] = $obj->json_table("divDetail", $tot_fp);
} else if ( $data == "default") {
$form = new Form($db);
$tdari = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tsamp = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="card"><div class="card-header custom-style">Export Data Faktur Pajak Biaya</div><div class="card-body"><div class="row mb-1"><div class="col d-flex justify-content-between"><div class="d-flex">'.$tdari.'<div><input type="text" class="form-control-plaintext text-center px-2" value="S / D"></div>'.$tsamp.'</div><div class="ms-2 input-group"><input class="form-control" id="Cari_FP" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button></div><button class="btn btn-info shadow-none ms-2 dropdown-toggle" id="butCSV" type="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="bi-cloud-download me-2"></i>Export CSV</button><div class="dropdown-menu" aria-labelledby="butCSV"><a class="dropdown-item" href="#" id="csvNormal">Faktur Pajak Normal</a><a class="dropdown-item" href="#" id="csvPengganti">Faktur Pajak Pengganti</a></div></div></div><div id="divDetail">&nbsp;</div></div></div>';
}
send_json($ajson);
?>
+48
View File
@@ -0,0 +1,48 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/func/biaya.php
Desc. : PHP - Fungsi - Fungsi Biaya
Created By : Siau Pheng ([email protected]).
Created Date : May 1st, 2012.
Last Modified : January 6th, 2025.
(c) 2012 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
$fdb = (is_resource($fdb)) ? $fdb : new MySQL();
function Biaya_Copy($no_bia = "") {
global $fdb;
if ($no_bia == "") return;
Biaya_Cancel($no_bia);
$fdb->Query("INSERT INTO tmp_biaya_detail (No_Biaya,ID,Uraian_Biaya,Qty,Harga_Jual,PPN,UserID) SELECT No_Biaya,ID,Uraian_Biaya,Qty,Harga_Jual,PPN,UserID FROM biaya_pajak_detail WHERE No_Biaya='".$no_bia."'");
}
function Biaya_Save($no_bia = "", $is_baru = false, $no_lama = "", $ppn = 0) {
global $fdb;
if ($no_bia == "") return;
$fdb->Query("DELETE FROM biaya_pajak_detail WHERE No_Biaya='".$no_bia."'");
if ($is_baru) {
Biaya_Cancel($no_bia);
$fdb->Query("UPDATE tmp_biaya_detail SET No_Biaya='".$no_bia."' WHERE No_Biaya='".$no_lama."'");
}
$fdb->Query("INSERT INTO biaya_pajak_detail (No_Biaya,ID,Uraian_Biaya,Qty,Harga_Jual,PPN,UserID) SELECT No_Biaya,ID,Uraian_Biaya,Qty,Harga_Jual,'".$ppn."',UserID FROM tmp_biaya_detail WHERE No_Biaya='".$no_bia."'");
Biaya_Cancel($no_bia);
}
function Biaya_Cancel($no_bia = "") {
global $fdb;
if ($no_bia == "") return;
$fdb->Query("DELETE FROM tmp_biaya_detail WHERE No_Biaya='".$no_bia."'");
}
?>
+58
View File
@@ -0,0 +1,58 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/func/dt.php
Desc. : PHP - Fungsi - Fungsi Daftar Tagihan
Created By : Siau Pheng ([email protected]).
Created Date : May 1st, 2012.
Last Modified : January 6th, 2025.
(c) 2012 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
$fdb = (is_resource($fdb)) ? $fdb : new MySQL();
function DT_Copy($no_tagih = "") {
global $fdb;
if ($no_tagih == "") return;
DT_Cancel($no_tagih);
$fdb->Query("INSERT INTO tmp_jual_dt_detail (No_Tagih,No_Jual,ID,UserID) SELECT No_Tagih,No_Jual,ID,UserID FROM inv_jual_tagih_detail WHERE No_Tagih='".$no_tagih."'");
}
function DT_Save($no_tagih = "", $is_baru = false, $no_lama = "") {
global $fdb;
if ($no_tagih == "") return;
if (!$is_baru) {
$fdb->Query("UPDATE inv_jual J,(SELECT No_Jual,GROUP_CONCAT(No_Tagih SEPARATOR ', ') No_Tagih FROM inv_jual_tagih_detail WHERE No_Jual IN (SELECT No_Jual FROM inv_jual_tagih_detail WHERE No_Tagih='".$no_tagih."') AND No_Tagih<>'".$no_tagih."' GROUP BY No_Jual) A SET J.No_Tagih=A.No_Tagih WHERE A.No_Jual=J.No_Jual AND A.No_Jual IN (SELECT No_Jual FROM inv_jual_tagih_detail WHERE No_Tagih='".$no_tagih."')");
$fdb->Query("DELETE FROM inv_jual_tagih_detail WHERE No_Tagih='".$no_tagih."'");
}
if ($is_baru) {
DT_Cancel($no_tagih);
$fdb->Query("UPDATE tmp_jual_dt_detail SET No_Tagih='".$no_tagih."' WHERE No_Tagih='".$no_lama."' AND Unix='".user_unix()."'");
}
$fdb->Query("INSERT INTO inv_jual_tagih_detail (No_Tagih,No_Jual,ID,UserID) SELECT No_Tagih,No_Jual,ID,UserID FROM tmp_jual_dt_detail WHERE No_Tagih='".$no_tagih."'");
$fdb->Query("UPDATE inv_jual J,(SELECT No_Jual,GROUP_CONCAT(No_Tagih SEPARATOR ', ') No_Tagih FROM inv_jual_tagih_detail WHERE No_Jual IN (SELECT No_Jual FROM tmp_jual_dt_detail WHERE No_Tagih='".$no_tagih."') GROUP BY No_Jual) A SET J.No_Tagih=A.No_Tagih WHERE A.No_Jual=J.No_Jual AND A.No_Jual IN (SELECT No_Jual FROM tmp_jual_dt_detail WHERE No_Tagih='".$no_tagih."')");
DT_Cancel($no_tagih);
}
function DT_Delete($no_tagih = "") {
global $fdb;
if ($no_tagih == "") return;
$fdb->Query("UPDATE inv_jual J,(SELECT No_Jual,GROUP_CONCAT(No_Tagih SEPARATOR ', ') No_Tagih FROM inv_jual_tagih_detail WHERE No_Jual IN (SELECT No_Jual FROM inv_jual_tagih_detail WHERE No_Tagih='".$no_tagih."') AND No_Tagih<>'".$no_tagih."' GROUP BY No_Jual) A SET J.No_Tagih=A.No_Tagih WHERE A.No_Jual=J.No_Jual AND A.No_Jual IN (SELECT No_Jual FROM inv_jual_tagih_detail WHERE No_Tagih='".$no_tagih."')");
}
function DT_Cancel($no_tagih = "") {
global $fdb;
if ($no_tagih == "") return;
$fdb->Query("DELETE FROM tmp_jual_dt_detail WHERE No_Tagih='".$no_tagih."'");
}
?>
+168
View File
@@ -0,0 +1,168 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/func/ias.php
Desc. : PHP - Fungsi - Fungsi IAS
Created By : Siau Pheng ([email protected]).
Created Date : May 1st, 2012.
Last Modified : January 6th, 2025.
(c) 2012 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
$fdb = (is_resource($fdb)) ? $fdb : new MySQL();
/************************* MASTER OUTLET *************************/
function Outlet_Baru() {
global $fdb;
$tno = "P-"; $ino = 0;
$fdb->Query("SELECT MAX(RIGHT(Kode_Outlet,5)) Nomor FROM para_outlet");
if ($fdb->Next()) $ino = intval($fdb->Row("Nomor", 0));
$tno .= isi_nol($ino+1, 5);
return $tno;
}
/************************* TRANSAKSI *************************/
function Nomor_Baru($tipe = "B", $tgl = "", $bsave = false) {
global $fdb;
//SCS = U G K M O
//IAS = B J C R D T F N P
$atipe = ['B'=>["No_Beli","inv_beli"],'J'=>["No_Jual","inv_jual"],'C'=>["No_Beli","inv_beli"],'R'=>["No_Jual","inv_jual"],'D'=>["No_DO","inv_jual_do"],'T'=>["No_Tagih","inv_jual_tagih"],'F'=>["No_Biaya","biaya_pajak"],'N'=>["No_MDO","manual_do"],'P'=>["No_Pajak","inv_jual_pajak"]];
if ($tgl == "") {
$tno = $tipe . date("y") . abjad(date("n"));
} else {
$tmp = explode("-", $tgl);
$tno = $tipe . substr($tmp[2],2,2) . abjad(intval($tmp[1]));
}
$tno .= user_id(2);
$ino = 0;
$fdb->Query("SELECT MAX(RIGHT(".$atipe[$tipe][0].",4)) Nomor FROM ".$atipe[$tipe][1]." WHERE LEFT(".$atipe[$tipe][0].",".strlen($tno).")='".$tno."' AND RIGHT(".$atipe[$tipe][0].",4)".(($_SESSION['__WEB_APP']['NOMOR_INC'] ?? 0)==0?"<5000":">".$_SESSION['__WEB_APP']['NOMOR_INC']));
if ($fdb->Next()) $ino = intval($fdb->Row("Nomor", 0));
if ($ino==0 && ($_SESSION['__WEB_APP']['NOMOR_INC'] ?? 0)>0) $ino += $_SESSION['__WEB_APP']['NOMOR_INC'];
$tno .= isi_nol($ino+1, 4);
if ($bsave==true) $fdb->Query("INSERT INTO ".$atipe[$tipe][1]." SET ".$atipe[$tipe][0]."='".$tno."'");
return $tno;
}
function Detail_Copy($no_ref = "") {
global $fdb;
if ($no_ref == "") return;
Detail_Cancel($no_ref);
$fdb->Query("INSERT INTO tmp_inv_detail (No_Ref,ID,Tgl_Ref,NotaID,GudangID,InvID,RasaID,SatuanID,Qty,Stok,Harga_Pokok,Harga_Jual,Total_Diskon,Promo,Pro_SQ,Pro_SD,Pro_ID,UserID) SELECT No_Ref,ID,Tgl_Ref,NotaID,GudangID,InvID,RasaID,SatuanID,Qty,Stok,Harga_Pokok,Harga_Jual,Total_Diskon,Promo,Pro_SQ,Pro_SD,Pro_ID,UserID FROM inv_detail WHERE No_Ref='".$no_ref."'");
}
function Detail_Save($no_ref = "", $stgl = "", $igudang = 0, $is_baru = false, $no_lama = "") {
global $fdb;
if ($no_ref == "") return;
if (!$is_baru) $fdb->Query("DELETE FROM inv_detail WHERE No_Ref='".$no_ref."'");
if ($is_baru) {
Detail_Cancel($no_ref);
$fdb->Query("UPDATE tmp_inv_detail SET No_Ref='".$no_ref."' WHERE No_Ref='".$no_lama."' AND Unix='".user_unix()."'");
}
$qtgl = ($stgl == "") ? "0000-00-00" : tgl_sql2str($stgl);
$fdb->Query("INSERT INTO inv_detail (No_Ref,ID,Tgl_Ref,NotaID,GudangID,InvID,RasaID,SatuanID,Qty,Stok,Harga_Pokok,Harga_Jual,Total_Diskon,Promo,Pro_SQ,Pro_SD,Pro_ID,UserID) SELECT No_Ref,ID,'".$qtgl."',NotaID,'".$igudang."',InvID,RasaID,SatuanID,Qty,Stok,Harga_Pokok,Harga_Jual,Total_Diskon,Promo,Pro_SQ,Pro_SD,Pro_ID,UserID FROM tmp_inv_detail WHERE No_Ref='".$no_ref."'");
Detail_Cancel($no_ref);
}
function Detail_Cancel($no_ref = "") {
global $fdb;
if ($no_ref == "") return;
$fdb->Query("DELETE FROM tmp_inv_detail WHERE No_Ref='".$no_ref."'");
}
function Param_Picker($tpicker = "0") {
if ($tpicker == "0") return "0";
$apicker = array_filter(explode(",", $tpicker));
return (count($apicker)==0 ? "0" : implode(",", $apicker));
}
/*************************** FUNGSI DATABASE SCS *****************************/
function scs_update_jual($nomor, $baru = false) {
global $fdb;
if ($baru == false) scs_delete_jual($nomor);
$fdb->Query("INSERT INTO scs_pms.inv_jual SELECT J.No_Jual,J.Tgl_Jual,J.GudangID,J.OutletID,J.No_Faktur,J.Data_Jual,J.UserID FROM inv_jual J WHERE J.No_Jual='".$nomor."'");
$fdb->Query("INSERT INTO scs_pms.inv_detail SELECT D.No_Ref,NULL,D.Tgl_Ref,D.NotaID,D.GudangID,D.InvID,D.SatuanID,SUM(D.Qty),SUM(D.Stok),D.UserID FROM inv_detail D WHERE D.No_Ref='".$nomor."' GROUP BY D.InvID,D.SatuanID");
}
function scs_delete_jual($nomor) {
global $fdb;
$fdb->Query("DELETE FROM scs_pms.inv_detail WHERE No_Ref='".$nomor."'");
$fdb->Query("DELETE FROM scs_pms.inv_jual WHERE No_Jual='".$nomor."'");
}
/*************************** FUNGSI FAKTUR PAJAK *****************************/
function FP_Baru() {
global $fdb;
$tno = $_SESSION['__APP_IAS']['NSFP_LAST']."."; $n_seri = 0;
$fdb->Query("SELECT MAX(RIGHT(No_Pajak,8)) Nomor FROM biaya_pajak WHERE LEFT(No_Pajak,".strlen($tno).")='".$tno."'");
if ($fdb->Next()) $n_seri = $fdb->RowFloat("Nomor", 0);
$fdb->Query("SELECT MAX(RIGHT(No_Pajak,8)) Nomor FROM inv_jual_pajak WHERE LEFT(No_Pajak,".strlen($tno).")='".$tno."'");
if ($fdb->Next()) $n_seri = max($n_seri , $fdb->RowFloat("Nomor", 0));
$tno .= isi_nol(++$n_seri, 8);
return $tno;
}
function FP_Update($nomor = "") {
global $fdb;
if (trim($nomor)=="") return;
$nsfp_last = format_nofp($nomor);
$nsfp_last = explode(".", $nsfp_last);
if ($nsfp_last[0] !== $_SESSION['__APP_IAS']['NSFP_LAST']) {
$_SESSION['__APP_IAS']['NSFP_LAST'] = $nsfp_last[0];
$fdb->Query("UPDATE ias_config SET NSFP_LAST='".$nsfp_last[0]."' WHERE REG_ID='".$_SESSION['__WEB_APP']['PARENT_CODE']."' LIMIT 1");
}
}
function rapi_fp($nilai) {
$hasil = str_replace([".","-"], "", $nilai);
if (strlen($hasil)>13) $hasil = substr($hasil, strlen($hasil)-13);
return $hasil;
}
function format_nofp($nilai) {
$nilai = rapi_fp($nilai);
return substr($nilai,0,3)."-".substr($nilai,3,2).".".substr($nilai,5);
}
function rapi_alamat($nilai) {
if (trim($nilai)=="") return "PONTIANAK";
$hasil = str_replace(["\n","\r"], "", $nilai);
return $hasil;
}
function data_rasafp($nilai) {
$hasil = trim($nilai);
if ($hasil<>"") $hasil = " (".$hasil.")";
return $hasil;
}
function Format_Stok($total=0, $kali=1, $sat_norm="", $sat_stok="") {
if ($kali > 0) {
$norm = floor($total / $kali);
$sisa = $total - ($norm * $kali);
} else {
$norm = 0;
$sisa = $total;
}
$stok = uang($norm,0)." ".$sat_norm;
if ($sat_norm<>$sat_stok) $stok .= ", ".uang($sisa,0)." ".$sat_stok;
return $stok;
}
function Form_Info($pesan="") {
return '<button class="btn btn-outline-secondary shadow-none text-info" title="'.$pesan.'"><i class="bi-lightbulb"></i></button>';
}
?>
+48
View File
@@ -0,0 +1,48 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/func/mdo.php
Desc. : PHP - Fungsi - Fungsi Manual DO
Created By : Siau Pheng ([email protected]).
Created Date : May 1st, 2012.
Last Modified : January 6th, 2025.
(c) 2012 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
$fdb = (is_resource($fdb)) ? $fdb : new MySQL();
function MDO_Copy($no_mdo = "") {
global $fdb;
if ($no_mdo == "") return;
MDO_Cancel($no_mdo);
$fdb->Query("INSERT INTO tmp_manual_do_detail (No_MDO,ID,InvID,RasaID,SatuanID,Qty,Muat,Kembali,UserID) SELECT No_MDO,ID,InvID,RasaID,SatuanID,Qty,Muat,Kembali,UserID FROM manual_do_detail WHERE No_MDO='".$no_mdo."'");
}
function MDO_Save($no_mdo = "", $is_baru = false, $no_lama = "") {
global $fdb;
if ($no_mdo == "") return;
if (!$is_baru) $fdb->Query("DELETE FROM manual_do_detail WHERE No_MDO='".$no_mdo."'");
if ($is_baru) {
MDO_Cancel($no_mdo);
$fdb->Query("UPDATE tmp_manual_do_detail SET No_MDO='".$no_mdo."' WHERE No_MDO='".$no_lama."' AND Unix='".user_unix()."'");
}
$fdb->Query("INSERT INTO manual_do_detail (No_MDO,ID,InvID,RasaID,SatuanID,Qty,Muat,Kembali,UserID) SELECT No_MDO,ID,InvID,RasaID,SatuanID,Qty,Muat,Kembali,UserID FROM tmp_manual_do_detail WHERE No_MDO='".$no_mdo."'");
MDO_Cancel($no_mdo);
}
function MDO_Cancel($no_mdo = "") {
global $fdb;
if ($no_mdo == "") return;
$fdb->Query("DELETE FROM tmp_manual_do_detail WHERE No_MDO='".$no_mdo."'");
}
?>
+35
View File
@@ -0,0 +1,35 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/func/report.php
Desc. : PHP - Fungsi - Fungsi Report
Created By : Siau Pheng ([email protected]).
Created Date : May 1st, 2012.
Last Modified : January 6th, 2025.
(c) 2012 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
$fdb = (is_resource($fdb)) ? $fdb : new MySQL();
function Report_Header($tlapor="", $tperiod="") {
$thasil = '<div class="text-center" style="font-size:1.1rem;"><b>'.strtoupper($_SESSION['__WEB_APP']['REG_NAME']);
$thasil .= (($tlapor=="") ? "" : '<br>'.$tlapor) . '</b>';
$thasil .= ($tperiod=="") ? "" : '<br><span style="font-size:1rem;">'.$tperiod.'</span>';
$thasil .= '</div><br>';
echo $thasil;
}
function Report_Stamp($ctk_ke=1, $bnama=false) {
return $_SESSION['__WEB_APP']['APP_NAME']."v".$_SESSION['__WEB_APP']['APP_VER'].date("\@ymd.His")."-".user_id(3).(($bnama==true)?"/".strtoupper(user_user()):"").(($ctk_ke>0)?"#".isi_nol($ctk_ke,2):"");
}
?>
+328
View File
@@ -0,0 +1,328 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/beli.php
Desc. : PHP - Transaksi Pembelian
Created By : Siau Pheng ([email protected]).
Created Date : May 22th, 2010.
Last Modified : March 24th, 2023.
(c) 2010 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$nomor = Param::Get("No_Beli", "");
if ( $data == "master" ) {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['No_Beli'=>$nomor];
if ($mode == "add") {
$atabel['No_Beli'] = "TB-BARU-".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
$atabel['Tgl_Beli'] = tgl_ymd();
$atabel['Tgl_JT'] = tgl_ymd();
$atabel['GudangID'] = 1;
$nomor = "";
} else if ($mode == "edit") {
Detail_Copy($nomor);
} else if ($mode == "save") {
$no_lama = $nomor;
$b_baru = (strpos($no_lama,"BARU")===false) ? false : true;
if ($b_baru) $nomor = Nomor_Baru("B", Param::Get("Tgl_Beli"), true);
Detail_Save($nomor, Param::Get("Tgl_Beli"), Param::Get("GudangID"), $b_baru, $no_lama);
$anota = ['Beli'=>0, 'Diskon'=>0];
$db->Query("SELECT SUM(Qty*Harga_Pokok) Beli, SUM(Total_Diskon) Diskon FROM inv_detail WHERE No_Ref='".$nomor."'");
if ($db->Next()) $anota = $db->AllRow();
$sql = new SQL($db);
$sql->set_table("inv_beli");
//$sql->add_param("No_Beli", $nomor);
$sql->add_param_date("Tgl_Beli");
$sql->add_param_date("Tgl_JT");
$sql->add_param("Termin", "IF(Tgl_JT='0000-00-00',0,DATEDIFF(Tgl_JT,Tgl_Beli))", true);
$sql->add_param("No_Faktur");
$sql->add_param("No_Pajak");
$sql->add_param("GudangID");
$sql->add_param("SupID");
$sql->add_param("Total_Beli", $anota['Beli']);
$sql->add_param("Total_Diskon", $anota['Diskon']);
$sql->add_param_userid();
$sql->add_where("No_Beli", $nomor);
$sql->UpdateDB();
$mode = "view";//todo: print jika langsung cetak
} else if ($mode == "cancel") {
Detail_Cancel($nomor);
$mode = "view";
$nomor = ""; $atabel['No_Beli'] = "";
}
if ($nomor <> "" && $mode <> "cancel") {
$db->Query("SELECT * FROM inv_beli WHERE Data_Beli=1 AND No_Beli='".$nomor."'");
if (!$db->Next()) {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
} else $atabel = array_merge($atabel, $db->AllRow());
if ($atabel['SupID']>0) {
$db->Query("SELECT Alamat_Sup FROM para_supplier WHERE SupID='".$atabel['SupID']."' LIMIT 1");
if ($db->Next()) $atabel['Alamat_Sup'] = $db->Row("Alamat_Sup");
}
}
$enable = in_array($mode, ["add","edit"]) ? true : false;
$form = new Form($db);
$tnota = $form->textbox("_", "No_Beli", $atabel['No_Beli'], !$enable, true, "text", "nomor transaksi");
$tfaktur = $form->textbox("_", "No_Faktur", $atabel['No_Faktur'], $enable, true, "text", "nomor faktur");
$tpajak = $form->textbox("_", "No_Pajak", $atabel['No_Pajak'], $enable, true, "text", "nomor faktur pajak");
$ttglnota = $form->datebox("_", "Tgl_Beli", $atabel['Tgl_Beli'], $enable, true);
$ttgljt = $form->datebox("_", "Tgl_JT", $atabel['Tgl_JT'], $enable, true);
$tgud = $form->option_db("_", "GudangID", $atabel['GudangID'], $enable, true, "vi_para_gudang", ["GudangID","Nama_Gudang2"], "Aktif=1 ORDER BY Nama_Gudang", [0,"&nbsp;"]);
$tsup = $form->option_db("_", "SupID", $atabel['SupID'], $enable, true, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"&nbsp;"], null, "BeliJS.oc_SupID(this);");
$tsupal = $form->textbox("_", "Alamat_Sup", $atabel['Alamat_Sup'], false, false, "text");
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Beli">Nomor Transaksi</label>
<div class="col"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="BeliJS.tx_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Beli">Tanggal Transaksi</label>
<div class="col-sm-7 col-lg-5">'.$ttglnota.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_JT">Jatuh Tempo</label>
<div class="col-sm-7 col-lg-5">'.$ttgljt.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="GudangID">Lokasi Gudang</label>
<div class="col">'.$tgud.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Faktur">Nomor Faktur</label>
<div class="col">'.$tfaktur.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Pajak">Nomor Faktur Pajak</label>
<div class="col">'.$tpajak.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
<div class="col">'.$tsup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Alamat Supplier</label>
<div class="col">'.$tsupal.'</div>
</div>
</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="Lunas" value="'.$atabel['Lunas'].'" >
<input type="hidden" id="mode" value="'.$mode.'" >
';
} else if ( $data == "delete" ) {
$db->Query("DELETE FROM inv_beli WHERE No_Beli='".$nomor."'");
$db->Query("DELETE FROM inv_detail WHERE No_Ref='".$nomor."'");
$ajson['status'] = true;
} else if ( $data == "tabel-detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
$iqty = doubleval(Param::Get("Qty", 0)); $istok = $iqty;
$db->Query("SELECT Qty FROM inv_produk_kemasan WHERE InvID='".Param::Get("InvID")."' AND SatuanID='".Param::Get("SatuanID")."'");
if ($db->Next()) $istok = $db->Row("Qty", 1) * $iqty;
$tot_diskon = ($iqty==0) ? 0 : Param::Get("Total_Diskon", 0);
$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);
$sql->add_param("Harga_Pokok");
$sql->add_param("Total_Diskon", $tot_diskon);
$sql->add_param_unix();
$sql->add_param_userid();
$sql->add_where("ID");
$sql->add_where("No_Ref", $nomor);
if ( $mode_detail == "insert" ) {
$sql->add_param("NotaID", 3);
$sql->InsertDB();
} else if ( $mode_detail == "update" ) {
$sql->UpdateDB();
} else if ( $mode_detail == "delete" ) {
$sql->DeleteDB();
}
}
$qview = ""; $qtabel = "inv_detail";
if (in_array($mode, ["add","edit"])) {
if ($mode=="add") $qview = " AND Unix=".user_unix();
$qtabel = "tmp_inv_detail";
}
$obj = new Table($db);
$obj->set_query("SELECT D.*,P.Nama_Lengkap2 Nama_Produk,(D.Qty*D.Harga_Pokok)-D.Total_Diskon Total FROM (SELECT * FROM ".$qtabel." WHERE No_Ref='".$nomor."'".$qview.") D LEFT JOIN vi_inv_produk2 P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID)");
$obj->set_query_footer("SELECT SUM(D.Total_Diskon) Total_Diskon,SUM((D.Qty*D.Harga_Pokok)-D.Total_Diskon) Total FROM (SELECT * FROM ".$qtabel." WHERE No_Ref='".$nomor."'".$qview.") D");
$obj->add_field("ID", "ID", "c");
$obj->add_field("Nama_Produk", "Nama Produk", "awr");
$obj->add_field("Qty", "Qty", "r", "rupiah2");
$obj->add_field("Harga_Pokok", "Harga @", "r", "rupiah");
$obj->add_field("Total_Diskon", "Diskon", "r", "rupiah", "rupiah");
$obj->add_field("Total", "TOTAL", "r", "rupiah", "rupiah");
$obj->set_field_order("ID", "A");
if (in_array($mode, ["add","edit"])) {
$obj->add_row_btn("clipboard", "Ubah", "BeliJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "BeliJS.detail_hapus", "Unix", user_unix());
$obj->set_func_btn("BeliJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Produk');
//$obj->set_func_btn("BeliJS.produk_brow", '<i class="bi-table me-1"></i> Browse');
}
$obj->set_func_navi("BeliJS.data_query('tabel-detail')");
$ajson[] = $obj->json_table("divDetailTabel");
} else if ( $data == "brow-tx" ) {
$tcari = trim(Param::Get("Cari_TX"));
$tsql = ($tcari=="") ? " LIMIT 100" : " AND CONCAT(No_Beli,No_Faktur) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT B.*,S.Nama_Sup FROM (SELECT *,Total_Beli-Total_Diskon Jumlah FROM inv_beli WHERE Data_Beli=1".$tsql.") B LEFT JOIN para_supplier S ON (B.SupID=S.SupID)");
$obj->add_field("No_Beli", "No. Trans", "c");
$obj->add_field("Tgl_Beli", "Tgl. Beli", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
$obj->add_field("Total_Beli", "Sub. Total", "r", "rupiah");
$obj->add_field("Total_Diskon", "Diskon", "r", "rupiah");
$obj->add_field("Jumlah", "TOTAL", "r", "rupiah");
$obj->set_field_order("No_Beli", "D");
$obj->add_row_btn("save", "Pilih", "BeliJS.tx_select");
$obj->set_func_navi("BeliJS.data_query('brow-tx')");
$ajson[] = $obj->json_table("divBrowTX");
} else if ( $data == "brow-produk" ) {//not yet
$tcari = trim(Param::Get("Cari_Produk"));
$tsql = ($tcari=="") ? "" : " AND CONCAT(Kode_Produk,Nama_Lengkap) LIKE '%".$tcari."%'";
$obj = new cGRIDTABLE();
$obj->set_query("SELECT * FROM vi_inv_produk2 WHERE Aktif=1".$tsql);
$obj->add_field("InvID", "InvID", "hidden");
$obj->add_field("SatuanID", "SatuanID", "hidden");
$obj->add_field("Kode_Produk", "Kode Produk", "center");
$obj->add_field("Nama_Lengkap2", "Nama Produk");
$obj->add_field("Nama_Satuan", "Nama Satuan", "hidden");
$obj->set_field_order("Nama_Lengkap", "A");
$obj->set_func_select("BeliJS.browse_produk_select", false);
$obj->set_func_navi("BeliJS.data_query('brow-produk')");
$ajson[] = $obj->json_table("divBrowProduk");
} else if ( $data == "auto-produk" ) {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
if (is_string($tcari) && strlen($tcari) < 64) {
$db->Query("SELECT P.InvID,P.Nama_Lengkap,CONCAT(P.SatuanID,':',P.Nama_Satuan) Data2 FROM vi_inv_produk2 P WHERE Aktif=1 AND CONCAT(Nama_Lengkap) LIKE '%".$tcari."%' ORDER BY Nama_Lengkap LIMIT 50");
while ($db->Next()) {
$ajson['autodata'][] = ['value'=>$db->Row("InvID"), 'text'=>$db->Row("Nama_Lengkap"), 'data'=>$db->Row("Data2")];
}
}
} else if ($data == "detail-produk") {
$id = Param::Get("ID", 0); $atabel = ['ID'=>$id];
if ($id > 0) {
$db->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND ID='".$id."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
if ($atabel['InvID']>0 && $atabel['SatuanID']>0) {
$db->Query("SELECT Nama_Lengkap2 Nama_Produk,Nama_Satuan FROM vi_inv_produk2 WHERE InvID='".$atabel['InvID']."' AND SatuanID='".$atabel['SatuanID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
}
$form = new Form($db);
$tnama = $form->textauto("_", "Nama_Produk", ['value'=>$atabel['InvID'],'text'=>$atabel['Nama_Produk']], true, true, "ketik nama produk");
$tqty = $form->textbox("_", "Qty", $atabel['Qty'], true, true, "double");
$thpp = $form->textbox("_", "Harga_Pokok", $atabel['Harga_Pokok'], true, true, "double");
$tdis = $form->textbox("_", "Total_Diskon", $atabel['Total_Diskon'], true, true, "double");
$ttot = $form->textbox("_", "Jumlah", 0, false, false, "double");
$tsat = $form->textbox("_", "Nama_Satuan", $adetail['Nama_Satuan'], false, false, "text");
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Produk">Nama Produk</label>
<div class="col">'.$tnama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Qty">Qty</label>
<div class="col-sm-4 col-lg-5">'.$tqty.'</div>
<div class="col-sm-4 col-lg-4">'.$tsat.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Harga_Pokok">Harga (@)</label>
<div class="col-sm-4 col-lg-5">'.$thpp.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Total_Diskon">Diskon</label>
<div class="col-sm-4 col-lg-5">'.$tdis.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label">Total</label>
<div class="col-sm-4 col-lg-5">'.$ttot.'</div>
</div>
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'" >
<input type="hidden" id="SatuanID" value="'.$atabel['SatuanID'].'" >
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >
';
} else if ( $data == "info-sup") {
$arec = [];
$db->Query("SELECT * FROM para_supplier WHERE SupID='".Param::Get("SupID", 0)."' LIMIT 1");
if ($db->Next()) $arec = $db->AllRow();
$ajson[] = array('type'=>"form", 'id'=>"Alamat_Sup", 'value'=>$arec['Alamat_Sup']);
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Pembelian</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
<button class="btn btn-secondary mb-1 ms-2" id="butPrint" type="button"><i class="bi-printer me-2"></i>Cetak</button>
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-floppy me-2"></i>Simpan</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divTXMaster">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+280
View File
@@ -0,0 +1,280 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/beli_lunas.php
Desc. : PHP - Transaksi Pelunasan Pembelian
Created By : Siau Pheng ([email protected]).
Created Date : March 7th, 2011.
Last Modified : May 19th, 2023.
(c) 2011 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$id_sup = Param::Get("SupID", 0);
$nomor = Param::Get("No_Beli", "");
if ( $data == "master" ) {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['SupID'=>0, 'Nama_Sup'=>"", 'Alamat_Sup'=>""];
$form = new Form($db);
$tsup = $form->textauto("_", "Nama_Sup", ['value'=>$atabel['SupID'],'text'=>$atabel['Nama_Sup']], true, false, "ketik nama supplier");
$tsupal = $form->textbox("_", "Alamat_Sup", $atabel['Alamat_Sup'], false, false, "text");
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="Nama_Sup">Nama Supplier</label>
<div class="col"><div class="input-group">'.$tsup.'<button id="butBrow" class="btn btn-info" type="button" onclick="BeliLunasJS.sup_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label">Alamat Supplier</label>
<div class="col">'.$tsupal.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="SupID" value="0" >
<input type="hidden" id="Mode_Tampil" value="0" >
';
} else if ( $data == "tabel-nota" ) {
$tsql = (Param::Get("Mode_Tampil", 0)==1) ? "" : " AND Lunas=0";
$obj = new Table($db);
$obj->set_query("SELECT *,Total_Beli-Total_Diskon Total,IF(Data_Beli=1,'B','R') Tipe FROM inv_beli WHERE SupID='".$id_sup."'".$tsql);
$obj->set_query_footer("SELECT SUM(Total_Beli-Total_Diskon) Total FROM inv_beli WHERE SupID='".$id_sup."'".$tsql);
$obj->add_field("Tipe", "Tipe", "hid");
$obj->add_field("No_Beli", "No. Trans", "c");
$obj->add_field("Tgl_Beli", "Tgl. Trans", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Tgl_JT", "Jatuh Tempo", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Total_Beli", "Sub. Total", "r", "rupiah");
$obj->add_field("Total_Diskon", "Diskon", "r", "rupiah");
$obj->add_field("Total", "TOTAL", "r", "rupiah", "rupiah");
if (Param::Get("Mode_Tampil", 0)==1) $obj->add_field("Lunas", "Lunas", "c", "checkbox");
$obj->set_field_order("No_Beli", "A");
$obj->add_row_btn("save", "Pilih", "BeliLunasJS.nota_select");
$obj->set_func_navi("BeliLunasJS.data_query('tabel-nota')");
$ajson[] = $obj->json_table("divTXNota");
} else if ( $data == "tabel-bayar" ) {
$lunas = Param::Get("Lunas", 0);
if (in_array($mode_detail, ["insert","delete"])) {
$sql = new SQL($db);
$sql->set_table("inv_beli_lunas");
$sql->add_param("No_Beli");
$sql->add_param_date("Tgl_Bayar");
if (Param::Get("Tipe", 0) == 2) $sql->add_param_date("Tgl_Cair");
$sql->add_param("Tipe");
$sql->add_param("Total_Bayar");
$sql->add_param("Total_Potong");
$sql->add_param_userid();
$sql->add_where("ID");
$sql->add_where("No_Beli", $nomor);
if ($mode_detail == "insert") {
$sql->InsertDB();
} else if ($mode_detail == "delete") {
$sql->DeleteDB();
}
$anota = ['Bayar'=>0, 'Potong'=>0, 'Total_Sisa'=>0, 'Lunas'=>0];
$db->Query("SELECT SUM(Total_Bayar) Bayar,SUM(Total_Potong) Potong FROM inv_beli_lunas WHERE No_Beli='".$nomor."'");
if ($db->Next()) $anota = $db->AllRow();
$db->Query("UPDATE inv_beli SET Total_Bayar='".$anota['Bayar']."',Total_Potong='".$anota['Potong']."',Lunas=IF(Total_Beli-Total_Diskon-Total_Bayar-Total_Potong=0,1,0),Tgl_Lunas=IF(Lunas=1,'".tgl_sql2str(Param::Get("Tgl_Bayar"))."','0000-00-00') WHERE No_Beli='".$nomor."'");
$db->Query("SELECT Lunas,Total_Beli-Total_Diskon-Total_Bayar-Total_Potong Total_Sisa FROM inv_beli WHERE No_Beli='".$nomor."'");
if ($db->Next()) $anota = $db->AllRow();
$lunas = $anota['Lunas'];
$ajson[] = array('type'=>"form", 'id'=>"Total_Sisa", 'value'=>$anota['Total_Sisa']);
$ajson[] = array('type'=>"form", 'id'=>"Lunas", 'value'=>$anota['Lunas']);
}
$obj = new Table($db);
$obj->set_query("SELECT * FROM inv_beli_lunas WHERE No_Beli='".$nomor."' ORDER BY ID");
$obj->add_field("ID", "ID", "hid");
$obj->add_field("Tgl_Bayar", "Tgl. Bayar", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Tipe", "Tipe", "l", [1=>"Cash",2=>"Giro"]);
$obj->add_field("Tgl_Cair", "Tgl. BG", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Total_Bayar", "Jumlah Bayar", "r", "rupiah");
$obj->add_field("Total_Potong", "Pemotongan", "r", "rupiah");
$obj->set_field_order("Tgl_Bayar", "A");
if ($_SESSION['__WEB_USER']['Level']==0 && ($lunas==0 || ($lunas==1 && Param::Get('Mode_Tampil',0)==1))) {
$obj->add_row_btn("trash", "Hapus", "BeliLunasJS.bayar_hapus", "No_Beli", $nomor);
}
if ($lunas == 0) {
$obj->set_func_btn("BeliLunasJS.bayar_show", '<i class="bi-wallet me-1"></i> Pembayaran');
}
$obj->set_func_navi("BeliLunasJS.data_query('tabel-bayar')");
$ajson[] = $obj->json_table("divDetailBayar");
} else if ( $data == "brow-sup" ) {
$tcari = trim(Param::Get("Cari_Sup"));
$tsql = ($tcari=="") ? " LIMIT 100" : " AND CONCAT(Kode_Sup,Nama_Sup,Telp_Sup) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM para_supplier WHERE Aktif=1".$tsql);
$obj->add_field("SupID", "ID", "hid");
$obj->add_field("Kode_Sup", "Kode", "l");
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
$obj->add_field("Telp_Sup", "Telp", "l");
$obj->add_field("Alamat_Sup", "Alamat", "hid");
$obj->set_field_order("Kode_Sup", "A");
$obj->add_row_btn("save", "Pilih", "BeliLunasJS.sup_select");
$obj->set_func_navi("BeliLunasJS.data_query('brow-sup')");
$ajson[] = $obj->json_table("divBrowSup");
} else if ( $data == "auto-sup" ) {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
if (is_string($tcari) && strlen($tcari) < 64) {
$db->Query("SELECT * FROM para_supplier WHERE Aktif=1 AND CONCAT(Kode_Sup,Nama_Sup,Telp_Sup) LIKE '%".$tcari."%' ORDER BY Kode_Sup LIMIT 50");
while ($db->Next()) {
$ajson['autodata'][] = ['value'=>$db->Row("SupID"), 'text'=>$db->Row("Nama_Sup"), 'data'=>$db->Row("Alamat_Sup")];
}
}
} else if ($data == "detail-nota") {
$atabel = ['No_Beli'=>$nomor]; $tipe = Param::Get("Tipe_Nota", "B");
$db->Query("SELECT *,Total_Beli-Total_Diskon Jumlah,Total_Beli-Total_Diskon-Total_Bayar-Total_Potong Sisa_Bayar FROM inv_beli WHERE No_Beli='".$nomor."'");
if ($db->Next()) $atabel = $db->AllRow();
$form = new Form($db);
$tnota = $form->textbox("_", "No_Beli", $atabel['No_Beli'], false, false, "text");
$tpajak= $form->textbox("_", "No_Pajak", $atabel['No_Pajak'], false, false, "text");
$tfaktur = $form->textbox("_", "No_Faktur", $atabel['No_Faktur'], false, false, "text");
$ttglnota = $form->datebox("_", "Tgl_Beli", $atabel['Tgl_Beli'], false, false);
$ttgljt = $form->datebox("_", "Tgl_JT", $atabel['Tgl_JT'], false, false);
$ttot_beli = $form->textbox("_", "Total_Beli", $atabel['Total_Beli'], false, false, "double");
$ttot_dis = $form->textbox("_", "Total_Diskon", $atabel['Total_Diskon'], false, false, "double");
$tjumlah = $form->textbox("_", "Jumlah", $atabel['Jumlah'], false, false, "double");
$ajson['html'] = '
<div class="row">
<div class="col text-center fs-5 pb-1">Informasi Faktur / Retur</div>
</div>
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">No. '.(($tipe=="B")?"Transaksi":"Retur").'</label>
<div class="col">'.$tnota.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">No. Seri FP</label>
<div class="col-sm-7 col-lg-5">'.$tpajak.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Tgl. '.(($tipe=="B")?"Transaksi":"Retur").'</label>
<div class="col-sm-7 col-lg-5">'.$ttglnota.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Jatuh Tempo</label>
<div class="col-sm-7 col-lg-5">'.$ttgljt.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">'.(($tipe=="B")?"No. Faktur":"Catatan").'</label>
<div class="col">'.$tfaktur.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Jumlah '.(($tipe=="B")?"Transaksi":"Retur").'</label>
<div class="col">'.$ttot_beli.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Jumlah Diskon</label>
<div class="col">'.$ttot_dis.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Total '.(($tipe=="B")?"Faktur":"Retur").'</label>
<div class="col">'.$tjumlah.'</div>
</div>
</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="Total_Sisa" value="'.$atabel['Sisa_Bayar'].'" >
<input type="hidden" id="Lunas" value="'.$atabel['Lunas'].'" >
<input type="hidden" id="Tipe_Nota" value="'.$tipe.'" >
';
} else if ($data == "detail-bayar") {
$form = new Form($db);
$ttglbyr = $form->datebox("_", "Tgl_Bayar", tgl_ymd(), true, false);
$ttglcair = $form->datebox("_", "Tgl_Cair", tgl_ymd(), true, false);
$ttipe = $form->radio("_", "Tipe", 1, true, false, [1=>"Cash",2=>"Giro"], null, "BeliLunasJS.oc_Tipe();");
$ttotal = $form->textbox("_", "Temp_Total", Param::Get("Total_Sisa",0), false, false, "double");
$tsisa = $form->textbox("_", "Temp_Sisa", 0, false, false, "double");
$tbayar = $form->textbox("_", "Total_Bayar", Param::Get("Total_Sisa",0), true, false, "double", null, null, null, "BeliLunasJS.Hitung_Detail();");
$tpotong = $form->textbox("_", "Total_Potong", 0, true, false, "double", null, null, null, "BeliLunasJS.Hitung_Detail();");
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Tipe">Tipe Bayar</label>
<div class="col">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Tgl_Bayar">Tanggal Bayar</label>
<div class="col">'.$ttglbyr.'</div>
</div>
<div class="row mb-1 d-none" id="divTglCair">
<label class="col-sm-6 col-lg-4 col-form-label" for="Tgl_Cair">Tanggal Giro</label>
<div class="col">'.$ttglcair.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label">Total Faktur</label>
<div class="col">'.$ttotal.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Total_Bayar">Jumlah Bayar</label>
<div class="col">'.$tbayar.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Total_Potong">Potongan</label>
<div class="col">'.$tpotong.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label">Sisa Tagihan</label>
<div class="col">'.$tsisa.'</div>
</div>
';
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Pelunasan Pembelian</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-secondary mb-1 ms-2" id="butMode" type="button"><i class="bi-list me-2"></i>Normal</button>
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divTXMaster">&nbsp;</div>
<div id="divTXNota">&nbsp;</div>
<div id="divDetailNota" class="d-none">&nbsp;</div>
<div id="divDetailBayar" class="d-none">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+243
View File
@@ -0,0 +1,243 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/beli_pajak.php
Desc. : PHP - Pembuatan Nota Retur Pajak
Created By : Siau Pheng ([email protected]).
Created Date : October 23rd, 2015.
Last Modified : December 27th, 2024.
(c) 2010 - 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$nomor = Param::Get("No_Pajak", "");
$no_temp = Param::Get("No_Temp", "");
if ( $data == "master" ) {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['No_Pajak'=>$nomor];
if ($mode == "add") {
$atabel['No_Pajak'] = "FP-BARU-".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
$atabel['Tgl_Pajak'] = tgl_ymd();
$atabel['Tgl_Retur'] = tgl_ymd();
$atabel['SupID'] = 0;
$nomor = "";
} else if ($mode == "save") {
$ppn = 0.11;
//$ppn = (tgl_sql2str(Param::Get("Tgl_Pajak",tgl_dmy())) >= $_SESSION['__APP_IAS']['PPN_TGL']) ? $_SESSION['__APP_IAS']['PPN'] : 0.11;
// UPDATE INV_BELI_PAJAK
$db->Query("UPDATE inv_detail A,(SELECT No_Beli FROM inv_beli WHERE Data_Beli=0 AND No_Pajak='".$no_temp."') B SET A.PPN='".$ppn."' WHERE A.No_Ref=B.No_Beli");
$tot_dpp = 0;
$db->Query("SELECT ROUND((-Qty*Harga_Pokok)/(1+PPN)) Total_DPP FROM inv_detail WHERE No_Ref IN (SELECT No_Beli FROM inv_beli WHERE Data_Beli=0 AND No_Pajak='".$no_temp."')");
while ($db->Next()) {
$tot_dpp += $db->RowFloat("Total_DPP", 0);
}
$sql = new SQL($db);
$sql->set_table("inv_beli_pajak");
$sql->add_param_date("Tgl_Pajak");
$sql->add_param_date("Tgl_Retur");
$sql->add_param("No_Retur");
$sql->add_param("No_NPWP");
$sql->add_param("Nama_NPWP");
$sql->add_param("PPN", $ppn);
$sql->add_param("Jumlah_DPP", $tot_dpp);
$sql->add_param("Jumlah_PPN", "CEIL(Jumlah_DPP*PPN)",true);
$sql->add_param("SupID");
$sql->add_param_userid();
$sql->add_where("No_Pajak", $nomor);
if ($mode_detail == "add") {
$sql->add_param("No_Pajak", $nomor);
$sql->InsertDB();
$db->Query("UPDATE inv_beli SET No_Pajak='".$nomor."' WHERE Data_Beli=0 AND No_Pajak='".$no_temp."'");
$mode = "view";
} elseif ($mode_detail == "edit") $sql->UpdateDB();
} else if ($mode == "cancel") {
$db->Query("UPDATE inv_beli SET No_Pajak='' WHERE Data_Beli=0 AND No_Pajak='".$no_temp."'");
$mode = "view";
$nomor = ""; $atabel['No_Pajak'] = "";
}
if ($nomor <> "" && $mode <> "cancel") {
$db->Query("SELECT * FROM inv_beli_pajak WHERE No_Pajak='".$nomor."'");
if (!$db->Next()) {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
} else $atabel = array_merge($atabel, $db->AllRow());
}
$enable = in_array($mode, ["add","edit"]) ? true : false;
$form = new Form($db);
$tpajak = $form->textbox("_", "No_Pajak", $atabel['No_Pajak'], ($mode=="edit"?false:true), true, "text", "nomor seri fp");
$tretur = $form->textbox("_", "No_Retur", $atabel['No_Retur'], $enable, true, "text", "nomor retur");
$ttglpajak = $form->datebox("_", "Tgl_Pajak", $atabel['Tgl_Pajak'], $enable, true);
$ttglretur = $form->datebox("_", "Tgl_Retur", $atabel['Tgl_Retur'], $enable, true);
$tsup = $form->option_db("_", "SupID", $atabel['SupID'], $enable, false, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"&nbsp;"], null, "BeliPajakJS.oc_SupID();");
$tnpwp = $form->textbox("_", "No_NPWP", $atabel['No_NPWP'], false, false, "text", "no npwp");
$tnamanpwp = $form->textbox("_", "Nama_NPWP", $atabel['Nama_NPWP'], false, false, "text", "nama npwp");
$tppn = $form->textbox("_", "Jumlah_PPN", $atabel['Jumlah_PPN'], false, false, "double");
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Pajak">Nomor Seri FP</label>
<div class="col"><div class="input-group">'.$tpajak.'<button id="butBrow" class="btn btn-info" type="button" onclick="BeliPajakJS.tx_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Pajak">Tanggal FP</label>
<div class="col-sm-7 col-lg-5">'.$ttglpajak.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Retur">Nomor Retur</label>
<div class="col">'.$tretur.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Retur">Tanggal Retur</label>
<div class="col-sm-7 col-lg-5">'.$ttglretur.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
<div class="col">'.$tsup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_NPWP">Nomor NPWP</label>
<div class="col">'.$tnpwp.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Nama_NPWP">Nama NPWP</label>
<div class="col">'.$tnamanpwp.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Jumlah_PPN">Total PPN</label>
<div class="col">'.$tppn.'</div>
</div>
</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="No_Temp" value="'.$atabel['No_Pajak'].'" >
<input type="hidden" id="mode" value="'.$mode.'" >
';
} else if ( $data == "delete" ) {
$db->Query("UPDATE inv_detail A,(SELECT No_Beli FROM inv_beli WHERE Data_Beli=0 AND No_Pajak='".$nomor."') B SET A.PPN=0 WHERE A.No_Ref=B.No_Beli");
$db->Query("UPDATE inv_beli SET No_Pajak='' WHERE Data_Beli=0 AND No_Pajak='".$nomor."'");
$db->Query("DELETE FROM inv_beli_pajak WHERE No_Pajak='".$nomor."'");
$ajson['status'] = true;
} else if ( $data == "tabel-detail" ) {
if (in_array($mode_detail, ["insert","delete"])) {
if ( $mode_detail == "insert" ) {
$alist = Param::Get_ArrayCBOX();
foreach ($alist as $_key => $_val) {
if ($_val=="Y") $db->Query("UPDATE inv_beli SET No_Pajak='".$no_temp."' WHERE Data_Beli=0 AND No_Beli='".$_key."'");
}
} else if ( $mode_detail == "delete" ) {
$db->Query("UPDATE inv_beli SET No_Pajak='' WHERE Data_Beli=0 AND No_Beli='".Param::Get("No_Beli")."'");
}
}
$obj = new Table($db);
$obj->set_query("SELECT B.*,S.Nama_Sup FROM (SELECT * FROM inv_beli WHERE Data_Beli=0 AND ".(trim($no_temp)==""?"FALSE":"No_Pajak='".$no_temp."'").") B LEFT JOIN para_supplier S ON (B.SupID=S.SupID)");
$obj->add_field("No_Beli", "No. Trans", "c");
$obj->add_field("Tgl_Beli", "Tgl. Trans", "c", "sqltgl");
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
$obj->add_field("Total_Beli", "TOTAL", "r", "rupiah");
$obj->set_field_order("No_Beli", "A");
if (in_array($mode, ["add","edit"])) {
$obj->add_row_btn("trash", "Hapus", "BeliPajakJS.detail_hapus", "No_Pajak", $no_temp);
$obj->set_func_btn("BeliPajakJS.beli_brow", '<i class="bi-table me-1"></i> Browse');
}
$obj->set_func_navi("BeliPajakJS.data_query('tabel-detail')");
$ajson[] = $obj->json_table("divDetailTabel");
} else if ( $data == "brow-tx" ) {
$tcari = trim(Param::Get("Cari_TX"));
$tsql = ($tcari=="") ? " LIMIT 100" : " WHERE CONCAT(No_Retur,No_Pajak,No_NPWP,DATE_FORMAT(Tgl_Pajak,'%d-%m-%Y')) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM inv_beli_pajak".$tsql);
$obj->add_field("No_Pajak", "No. Seri FP", "c");
$obj->add_field("Tgl_Pajak", "Tgl. FP", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Tgl_Retur", "Tgl. Retur", "c", "sqltgl", null, "val-tgl");
$obj->add_field("No_NPWP", "No. NPWP", "l");
$obj->add_field("Nama_NPWP", "Nama NPWP", "awr");
$obj->set_field_order("No_Pajak", "D");
$obj->add_row_btn("save", "Pilih", "BeliPajakJS.tx_select");
$obj->set_func_navi("BeliPajakJS.data_query('brow-tx')");
$ajson[] = $obj->json_table("divBrowTX");
} else if ( $data == "brow-beli" ) {
$tcari = trim(Param::Get("Cari_Beli"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(B.No_Beli,S.Nama_Sup) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT B.*,S.Nama_Sup,'N' Nota FROM (SELECT * FROM inv_beli WHERE Data_Beli=0 AND No_Pajak='') B LEFT JOIN para_supplier S ON (B.SupID=S.SupID)".$tsql);
$obj->add_field("No_Beli", "No. Trans", "c");
$obj->add_field("Tgl_Beli", "Tgl. Trans", "c", "sqltgl");
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
$obj->add_field("Total_Beli", "TOTAL", "r", "rupiah");
$obj->set_field_order("No_Beli", "A");
$obj->add_row_checkbox("No_Beli", "Nota", ["Y","N"]);
$obj->set_func_navi("BeliPajakJS.data_query('brow-beli')");
$ajson[] = $obj->json_table("divBrowBeli");
} else if ( $data == "info-npwp") {
$ainfo = ['No_NPWP'=>"000000000000",'Nama_NPWP'=>"Nama NPWP"];
$db->Query("SELECT Nama_Sup Nama_NPWP,No_NPWP FROM para_supplier WHERE SupID='".Param::Get("SupID")."' LIMIT 1");
if ($db->Next()) $ainfo = $db->AllRow();
$ajson[] = ['type'=>"form", 'id'=>"No_NPWP", 'value'=>$db->Row("No_NPWP")];
$ajson[] = ['type'=>"form", 'id'=>"Nama_NPWP", 'value'=>$db->Row("Nama_NPWP")];
} else if ( $data == "pdf") {
nota_retur_pajak(Param::Get("Nomor_Cetak"));
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Pembuatan Nota Retur Pajak</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
<button class="btn btn-secondary mb-1 ms-2" id="butPrint" type="button"><i class="bi-printer me-2"></i>Cetak</button>
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-floppy me-2"></i>Simpan</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divTXMaster">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+297
View File
@@ -0,0 +1,297 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/beli_retur.php
Desc. : PHP - Transaksi Retur Pembelian
Created By : Siau Pheng ([email protected]).
Created Date : March 25th, 2011.
Last Modified : May 15th, 2023.
(c) 2010 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$nomor = Param::Get("No_Beli", "");
if ( $data == "master" ) {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['No_Beli'=>$nomor];
if ($mode == "add") {
$atabel['No_Beli'] = "RB-BARU-".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
$atabel['Tgl_Beli'] = tgl_ymd();
$atabel['GudangID'] = 1;
$atabel['SupID'] = 0;
$nomor = "";
} else if ($mode == "edit") {
Detail_Copy($nomor);
} else if ($mode == "save") {
$no_lama = $nomor;
$b_baru = (strpos($no_lama,"BARU")===false) ? false : true;
if ($b_baru) $nomor = Nomor_Baru("C", Param::Get("Tgl_Beli"), true);
Detail_Save($nomor, Param::Get("Tgl_Beli"), Param::Get("GudangID"), $b_baru, $no_lama);
$anota = ['Beli'=>0];
$db->Query("SELECT SUM(-Qty*Harga_Pokok) Retur_Beli FROM inv_detail WHERE No_Ref='".$nomor."'");
if ($db->Next()) $anota = $db->AllRow();
$sql = new SQL($db);
$sql->set_table("inv_beli");
//$sql->add_param("No_Beli", $nomor);
$sql->add_param_date("Tgl_Beli");
$sql->add_param("No_Faktur", Param::Get("Catatan"));
$sql->add_param("No_Pajak");
$sql->add_param("GudangID");
$sql->add_param("SupID");
$sql->add_param("Total_Beli", $anota['Retur_Beli']);
$sql->add_param("Data_Beli", 0);
$sql->add_param_userid();
$sql->add_where("No_Beli", $nomor);
$sql->UpdateDB();
$mode = "view";//todo: print jika langsung cetak
} else if ($mode == "cancel") {
Detail_Cancel($nomor);
$mode = "view";
$nomor = ""; $atabel['No_Beli'] = "";
}
if ($nomor <> "" && $mode <> "cancel") {
$db->Query("SELECT * FROM inv_beli WHERE Data_Beli=0 AND No_Beli='".$nomor."'");
if (!$db->Next()) {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
} else $atabel = array_merge($atabel, $db->AllRow());
}
$enable = in_array($mode, ["add","edit"]) ? true : false;
$form = new Form($db);
$tnota = $form->textbox("_", "No_Beli", $atabel['No_Beli'], !$enable, true, "text", "nomor transaksi");
$tpajak = $form->textbox("_", "No_Pajak", $atabel['No_Pajak'], $enable, true, "text", "nomor faktur pajak");
$ttglnota = $form->datebox("_", "Tgl_Beli", $atabel['Tgl_Beli'], $enable, true);
$tgud = $form->option_db("_", "GudangID", $atabel['GudangID'], $enable, true, "vi_para_gudang", ["GudangID","Nama_Gudang2"], "Aktif=1 ORDER BY Nama_Gudang", [0,"&nbsp;"]);
$tsup = $form->option_db("_", "SupID", $atabel['SupID'], $enable, true, "para_supplier", ["SupID","Nama_Sup"], "Aktif=1 ORDER BY Nama_Sup", [0,"&nbsp;"]);
$tcatat = $form->textbox("_", "Catatan", $atabel['No_Faktur'], $enable, true, "text", "catatan transaksi");
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Beli">Nomor Transaksi</label>
<div class="col"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="BeliReturJS.tx_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Beli">Tanggal Transaksi</label>
<div class="col-sm-7 col-lg-5">'.$ttglnota.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="GudangID">Lokasi Gudang</label>
<div class="col">'.$tgud.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
<div class="col">'.$tsup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Pajak">Nomor Faktur Pajak</label>
<div class="col">'.$tpajak.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Faktur">Catatan</label>
<div class="col">'.$tcatat.'</div>
</div>
</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="Lunas" value="'.$atabel['Lunas'].'" >
<input type="hidden" id="mode" value="'.$mode.'" >
';
} else if ( $data == "delete" ) {
$db->Query("DELETE FROM inv_beli WHERE No_Beli='".$nomor."'");
$db->Query("DELETE FROM inv_detail WHERE No_Ref='".$nomor."'");
$ajson['status'] = true;
} else if ( $data == "tabel-detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
$iqty = doubleval(Param::Get("Qty", 0)) * -1; $istok = $iqty;
$db->Query("SELECT Qty FROM inv_produk_kemasan WHERE InvID='".Param::Get("InvID")."' AND SatuanID='".Param::Get("SatuanID")."'");
if ($db->Next()) $istok = $db->Row("Qty", 1) * $iqty;
$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);
$sql->add_param("Harga_Pokok");
$sql->add_param_unix();
$sql->add_param_userid();
$sql->add_where("ID");
$sql->add_where("No_Ref", $nomor);
if ( $mode_detail == "insert" ) {
$sql->add_param("NotaID", 4);
$sql->InsertDB();
} else if ( $mode_detail == "update" ) {
$sql->UpdateDB();
} else if ( $mode_detail == "delete" ) {
$sql->DeleteDB();
}
}
$qview = ""; $qtabel = "inv_detail";
if (in_array($mode, ["add","edit"])) {
if ($mode=="add") $qview = " AND Unix=".user_unix();
$qtabel = "tmp_inv_detail";
}
$obj = new Table($db);
$obj->set_query("SELECT D.*,P.Nama_Lengkap2 Nama_Produk,-D.Qty Qty2,(-D.Qty*D.Harga_Pokok) Total FROM (SELECT * FROM ".$qtabel." WHERE No_Ref='".$nomor."'".$qview.") D LEFT JOIN vi_inv_produk2 P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID)");
$obj->set_query_footer("SELECT SUM(-D.Qty*D.Harga_Pokok) Total FROM (SELECT * FROM ".$qtabel." WHERE No_Ref='".$nomor."'".$qview.") D");
$obj->add_field("ID", "ID", "c");
$obj->add_field("Nama_Produk", "Nama Produk", "awr");
$obj->add_field("Qty2", "Qty", "r", "rupiah2");
$obj->add_field("Harga_Pokok", "Harga @", "r", "rupiah");
$obj->add_field("Total", "TOTAL", "r", "rupiah", "rupiah");
$obj->set_field_order("ID", "A");
if (in_array($mode, ["add","edit"])) {
$obj->add_row_btn("clipboard", "Ubah", "BeliReturJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "BeliReturJS.detail_hapus", "Unix", user_unix());
$obj->set_func_btn("BeliReturJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Produk');
//$obj->set_func_btn("BeliReturJS.produk_brow", '<i class="bi-table me-1"></i> Browse');
}
$obj->set_func_navi("BeliReturJS.data_query('tabel-detail')");
$ajson[] = $obj->json_table("divDetailTabel");
} else if ( $data == "brow-tx" ) {
$tcari = trim(Param::Get("Cari_TX"));
$tsql = ($tcari=="") ? " LIMIT 100" : " AND CONCAT(No_Beli,No_Faktur) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT B.*,S.Nama_Sup FROM (SELECT * FROM inv_beli WHERE Data_Beli=0".$tsql.") B LEFT JOIN para_supplier S ON (B.SupID=S.SupID)");
$obj->add_field("No_Beli", "No. Trans", "c");
$obj->add_field("Tgl_Beli", "Tgl. Retur", "c", "sqltgl", null, "val-tgl");
$obj->add_field("No_Pajak", "Nota Pajak", "l");
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
$obj->add_field("Total_Beli", "Total Retur", "r", "rupiah");
$obj->set_field_order("No_Beli", "D");
$obj->add_row_btn("save", "Pilih", "BeliReturJS.tx_select");
$obj->set_func_navi("BeliReturJS.data_query('brow-tx')");
$ajson[] = $obj->json_table("divBrowTX");
} else if ( $data == "brow-produk" ) {//not yet
$tcari = trim(Param::Get("Cari_Produk"));
$tsql = ($tcari=="") ? "" : " AND CONCAT(Kode_Produk,Nama_Lengkap) LIKE '%".$tcari."%'";
$obj = new cGRIDTABLE();
$obj->set_query("SELECT * FROM vi_inv_produk2 WHERE Aktif=1".$tsql);
$obj->add_field("InvID", "InvID", "hidden");
$obj->add_field("SatuanID", "SatuanID", "hidden");
$obj->add_field("Kode_Produk", "Kode Produk", "center");
$obj->add_field("Nama_Lengkap2", "Nama Produk");
$obj->add_field("Nama_Satuan", "Nama Satuan", "hidden");
$obj->set_field_order("Nama_Lengkap", "A");
$obj->set_func_select("BeliReturJS.browse_produk_select", false);
$obj->set_func_navi("BeliReturJS.data_query('brow-produk')");
$ajson[] = $obj->json_table("divBrowProduk");
} else if ( $data == "auto-produk" ) {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
if (is_string($tcari) && strlen($tcari) < 64) {
$db->Query("SELECT P.InvID,P.Nama_Lengkap,CONCAT(P.SatuanID,':',P.Nama_Satuan) Data2 FROM vi_inv_produk2 P WHERE Aktif=1 AND CONCAT(Nama_Lengkap) LIKE '%".$tcari."%' ORDER BY Nama_Lengkap LIMIT 50");
while ($db->Next()) {
$ajson['autodata'][] = ['value'=>$db->Row("InvID"), 'text'=>$db->Row("Nama_Lengkap"), 'data'=>$db->Row("Data2")];
}
}
} else if ($data == "detail-produk") {
$id = Param::Get("ID", 0); $atabel = ['ID'=>$id];
if ($id > 0) {
$db->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND ID='".$id."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
if ($atabel['InvID']>0 && $atabel['SatuanID']>0) {
$db->Query("SELECT Nama_Lengkap2 Nama_Produk,Nama_Satuan FROM vi_inv_produk2 WHERE InvID='".$atabel['InvID']."' AND SatuanID='".$atabel['SatuanID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
}
$form = new Form($db);
$tnama = $form->textauto("_", "Nama_Produk", ['value'=>$atabel['InvID'],'text'=>$atabel['Nama_Produk']], true, true, "ketik nama produk");
$tqty = $form->textbox("_", "Qty", $atabel['Qty'], true, true, "double");
$thpp = $form->textbox("_", "Harga_Pokok", $atabel['Harga_Pokok'], true, true, "double");
$ttot = $form->textbox("_", "Jumlah", 0, false, false, "double");
$tsat = $form->textbox("_", "Nama_Satuan", $adetail['Nama_Satuan'], false, false, "text");
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Produk">Nama Produk</label>
<div class="col">'.$tnama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Qty">Qty</label>
<div class="col-sm-4 col-lg-5">'.$tqty.'</div>
<div class="col-sm-4 col-lg-4">'.$tsat.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Harga_Pokok">Harga (@)</label>
<div class="col-sm-4 col-lg-5">'.$thpp.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label">Total</label>
<div class="col-sm-4 col-lg-5">'.$ttot.'</div>
</div>
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'" >
<input type="hidden" id="SatuanID" value="'.$atabel['SatuanID'].'" >
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >
';
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Retur Pembelian</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
<button class="btn btn-secondary mb-1 ms-2" id="butPrint" type="button"><i class="bi-printer me-2"></i>Cetak</button>
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-floppy me-2"></i>Simpan</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divTXMaster">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+334
View File
@@ -0,0 +1,334 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/biaya_pajak.php
Desc. : PHP - Pembuatan Faktur Pajak Biaya
Created By : Siau Pheng ([email protected]).
Created Date : February 9th, 2017.
Last Modified : January 8th, 2025.
(c) 2017 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/biaya.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$nomor = Param::Get("No_Biaya", "");
$ppn = 0.11;
//$ppn = (tgl_sql2str(Param::Get("Tgl_Biaya",tgl_dmy())) >= $_SESSION['__APP_IAS']['PPN_TGL']) ? $_SESSION['__APP_IAS']['PPN'] : 0.11;
$ppn_string = "11";
//$ppn_string = ($atabel['Tgl_Biaya'] >= $_SESSION['__APP_IAS']['PPN_TGL']) ? $_SESSION['__APP_IAS']['PPN_STRING'] : "11";
$ppn_string = "11";
//$ppn_string = (tgl_sql2str(Param::Get("Tgl_Biaya",tgl_dmy())) >= $_SESSION['__APP_IAS']['PPN_TGL']) ? $_SESSION['__APP_IAS']['PPN_STRING'] : "11";
if ( $data == "master" ) {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['No_Biaya'=>$nomor];
if ($mode == "add") {
$atabel['No_Biaya'] = "FPB-BARU-".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
$atabel['No_Pajak'] = FP_Baru();
$atabel['Tgl_Biaya'] = tgl_ymd();
$atabel['Tgl_Pajak'] = tgl_ymd();
$atabel['SupID'] = 0;
$atabel['No_NPWP'] = "0000000000000000";
$atabel['No_NITKU'] = "000000";
$nomor = "";
} else if ($mode == "edit") {
Biaya_Copy($nomor);
} else if ($mode == "save") {
$no_lama = $nomor;
$b_baru = (strpos($no_lama,"BARU")===false) ? false : true;
if ($b_baru) $nomor = Nomor_Baru("F", Param::Get("Tgl_Biaya"), true);
Biaya_Save($nomor, $b_baru, $no_lama, $ppn);
$anota = ['DPP'=>0, 'PPN'=>0];
$db->Query("SELECT SUM(Qty*Harga_Jual) DPP,ROUND(SUM(Qty*Harga_Jual)*PPN) PPN FROM biaya_pajak_detail WHERE No_Biaya='".$nomor."'");
if ($db->Next()) $anota = $db->AllRow();
$sql = new SQL($db);
$sql->set_table("biaya_pajak");
$sql->add_param_date("Tgl_Biaya");
$sql->add_param("Uraian");
$sql->add_param("No_Pajak");
$sql->add_param_date("Tgl_Pajak");
$sql->add_param("No_NPWP");
$sql->add_param("No_NITKU");
$sql->add_param("Nama_NPWP");
$sql->add_param("Alamat_NPWP");
$sql->add_param("Jumlah_DPP", $anota['DPP']);
$sql->add_param("Jumlah_PPN", $anota['PPN']);
$sql->add_param("SupID");
$sql->add_param_userid();
$sql->add_where("No_Biaya", $nomor);
$sql->UpdateDB();
FP_Update(Param::Get("No_Pajak"));
$mode = "view";
} else if ($mode == "cancel") {
Biaya_Cancel($nomor);
$mode = "view";
$nomor = ""; $atabel['No_Biaya'] = "";
}
if ($nomor <> "" && $mode <> "cancel") {
$db->Query("SELECT * FROM biaya_pajak WHERE No_Biaya='".$nomor."'");
if (!$db->Next()) {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
} else $atabel = array_merge($atabel, $db->AllRow());
}
$enable = in_array($mode, ["add","edit"]) ? true : false;
$form = new Form($db);
$tnota = $form->textbox("_", "No_Biaya", $atabel['No_Biaya'], !$enable, false, "text", "nomor faktur");
$ttgl = $form->datebox("_", "Tgl_Biaya", $atabel['Tgl_Biaya'], $enable, false);
$turai = $form->textarea("_", "Uraian", $atabel['Uraian'], $enable, false, 2);
$tnsfp = $form->textbox("_", "No_Pajak", $atabel['No_Pajak'], $enable, false, "text", "nomor seri fp, XXX-XX.12345678");
$tnsfp_tgl = $form->datebox("_", "Tgl_Pajak", $atabel['Tgl_Pajak'], $enable, false);
$tnpwp = $form->textbox("_", "No_NPWP", $atabel['No_NPWP'], $enable, false, "text");
$tnpwp_nam = $form->textbox("_", "Nama_NPWP", $atabel['Nama_NPWP'], $enable, false, "text");
$tnpwp_ala = $form->textarea("_", "Alamat_NPWP", $atabel['Alamat_NPWP'], $enable, false, 2);
$tdpp = $form->textbox("_", "Jumlah_DPP", $atabel['Jumlah_DPP'], false, false, "double");
$tppn = $form->textbox("_", "Jumlah_PPN", $atabel['Jumlah_PPN'], false, false, "double");
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Biaya">Nomor Faktur</label>
<div class="col"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="BiayaPajakJS.tx_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Biaya">Tanggal Faktur</label>
<div class="col-sm-7 col-lg-5">'.$ttgl.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Uraian">Uraian / Catatan</label>
<div class="col">'.$turai.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Jumlah DPP</label>
<div class="col">'.$tdpp.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Jumlah PPN ('.$ppn_string.'%)</label>
<div class="col">'.$tppn.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Pajak">Nomor Seri FP</label>
<div class="col">'.$tnsfp.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Pajak">Tanggal FP</label>
<div class="col-sm-7 col-lg-5">'.$tnsfp_tgl.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_NPWP">NPWP</label>
<div class="col"><div class="input-group">'.$tnpwp.'<button class="btn '.($enable?'btn-info':'btn-secondary').'" type="button"'.($enable?'':' disabled').' onclick="BiayaPajakJS.npwp_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Nama_NPWP">Nama NPWP</label>
<div class="col">'.$tnpwp_nam.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Alamat_NPWP">Alamat NPWP</label>
<div class="col">'.$tnpwp_ala.'</div>
</div>
</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="SupID" value="'.$atabel['SupID'].'" >
<input type="hidden" id="No_NPWP2" value="'.$atabel['No_NPWP'].'" >
<input type="hidden" id="No_Pajak2" value="'.$atabel['No_Pajak'].'" >
<input type="hidden" id="No_NITKU" value="'.$atabel['No_NITKU'].'" >
<input type="hidden" id="mode" value="'.$mode.'" >';
} else if ( $data == "delete" ) {
$db->Query("DELETE FROM biaya_pajak WHERE No_Biaya='".$nomor."'");
$db->Query("DELETE FROM biaya_pajak_detail WHERE No_Biaya='".$nomor."'");
$ajson['status'] = true;
} else if ( $data == "tabel-detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
$sql = new SQL($db);
$sql->set_table("tmp_biaya_detail");
$sql->add_param("Uraian_Biaya");
$sql->add_param("Qty");
$sql->add_param("Harga_Jual");
$sql->add_param_unix();
$sql->add_param_userid();
$sql->add_where("ID");
$sql->add_where("No_Biaya", $nomor);
if ( $mode_detail == "insert" ) {
$sql->add_param("No_Biaya", $nomor);
$sql->add_param("PPN", $ppn);
$sql->InsertDB();
} else if ( $mode_detail == "update" ) {
$sql->UpdateDB();
} else if ( $mode_detail == "delete" ) {
$sql->DeleteDB();
}
}
$qview = ""; $qtabel = "biaya_pajak_detail";
if (in_array($mode, ["add","edit"])) {
if ($mode=="add") $qview = " AND Unix=".user_unix();
$qtabel = "tmp_biaya_detail";
}
$obj = new Table($db);
$obj->set_query("SELECT *,(Qty*Harga_Jual*PPN) Total_PPN,(Qty*Harga_Jual*(1+PPN)) Total FROM ".$qtabel." WHERE No_Biaya='".$nomor."' ".$qview);
$obj->set_query_footer("SELECT COUNT(*) Uraian_Biaya,SUM(Qty*Harga_Jual*PPN) Total_PPN,SUM(Qty*Harga_Jual*(1+PPN)) Total FROM ".$qtabel." WHERE No_Biaya='".$nomor."' ".$qview);
$obj->add_field("ID", "ID", "c");
$obj->add_field("Uraian_Biaya", "Uraian", "awr", "", "items");
$obj->add_field("Qty", "Qty", "c");
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah");
$obj->add_field("Total_PPN", "PPN (".$ppn_string."%)", "r", "rupiah", "rupiah");
$obj->add_field("Total", "TOTAL", "r", "rupiah", "rupiah");
$obj->set_field_order("ID", "A");
if (in_array($mode, ["add","edit"])) {
$obj->add_row_btn("clipboard", "Ubah", "BiayaPajakJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "BiayaPajakJS.detail_hapus", "Unix", user_unix());
$obj->set_func_btn("BiayaPajakJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Produk');
}
$obj->set_func_navi("BiayaPajakJS.data_query('tabel-detail')");
$ajson[] = $obj->json_table("divDetailTabel");
if (in_array($mode_detail, ["insert","update","delete"])) {
$tot_dpp = 0; $tot_ppn = 0;
$db->Query("SELECT SUM(Qty*Harga_Jual) Total_DPP,ROUND(SUM(Qty*Harga_Jual)*PPN) Total_PPN FROM ".$qtabel." WHERE No_Biaya='".$nomor."'");
if ($db->Next()) {
$tot_dpp = $db->Row("Total_DPP", 0);
$tot_ppn = $db->Row("Total_PPN", 0);
}
$ajson[] = ['type'=>"form", 'id'=>"Jumlah_DPP", 'value'=>rupiah($tot_dpp)];
$ajson[] = ['type'=>"form", 'id'=>"Jumlah_PPN", 'value'=>rupiah($tot_ppn)];
}
} else if ( $data == "brow-tx" ) {
$tcari = trim(Param::Get("Cari_TX"));
$tsql = ($tcari=="") ? " ORDER BY No_Biaya DESC LIMIT 100" : " WHERE CONCAT(No_Biaya,No_Pajak,No_NPWP,DATE_FORMAT(Tgl_Pajak,'%d-%m-%Y')) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT P.* FROM (SELECT * FROM biaya_pajak".$tsql.") P");
$obj->add_field("No_Biaya", "No. Faktur", "c");
$obj->add_field("Tgl_Biaya", "Tgl. Faktur", "c", "sqltgl", null, "val-tgl");
$obj->add_field("No_Pajak", "NSFP", "c");
$obj->add_field("No_NPWP", "NPWP", "l");
$obj->add_field("Nama_NPWP", "Nama NPWP", "awr");
$obj->set_field_order("No_Biaya", "D");
$obj->add_row_btn("save", "Pilih", "BiayaPajakJS.tx_select");
$obj->set_func_navi("BiayaPajakJS.data_query('brow-tx')");
$ajson[] = $obj->json_table("divBrowTX");
} else if ( $data == "brow-npwp" ) {
$tcari = trim(Param::Get("Cari_NPWP"));
$tsql = ($tcari=="") ? " LIMIT 100" : " AND CONCAT_WS(S.Nama_Sup,S.No_NPWP) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT S.*,CONCAT(S.Alamat_Sup,' ',S.Kota_Sup) Alamat_Kota FROM para_supplier S WHERE S.Aktif=1".$tsql."");
$obj->add_field("SupID", "ID", "hid");
$obj->add_field("No_NPWP", "NPWP", "c");
$obj->add_field("No_NITKU", "NITKU", "c");
$obj->add_field("Nama_Sup", "Nama NPWP / NIK", "awr");
$obj->add_field("Nama_Alamat", "Nama Supplier", "awr");
$obj->add_field("Alamat_Kota", "Alamat Kota", "hid");
$obj->set_field_order("No_NPWP", "A");
$obj->add_row_btn("save", "Pilih", "BiayaPajakJS.npwp_select");
$obj->set_func_navi("BiayaPajakJS.data_query('brow-npwp')");
$ajson[] = $obj->json_table("divBrowNPWP");
} else if ($data == "detail-biaya") {
$id = Param::Get("ID", 0); $atabel = ['ID'=>$id];
if ($id > 0) {
$db->Query("SELECT * FROM tmp_biaya_detail WHERE No_Biaya='".$nomor."' AND ID='".$id."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$turai = $form->textarea("_", "Uraian_Biaya", $atabel['Uraian_Biaya'], true, false, 2, "uraian biaya");
$tqty = $form->textbox("_", "Qty", $atabel['Qty'], true, false, "double");
$tharga = $form->textbox("_", "Harga_Jual", $atabel['Harga_Jual'], true, false, "double");
$ttot = $form->textbox("_", "Jumlah", 0, false, false, "double");
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Uraian_Biaya">Uraian Biaya</label>
<div class="col">'.$turai.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Qty">Qty</label>
<div class="col-sm-4 col-lg-5">'.$tqty.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Harga_Jual">Harga (@)</label>
<div class="col-sm-4 col-lg-5">'.$tharga.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label">Total</label>
<div class="col-sm-4 col-lg-5">'.$ttot.'</div>
</div>
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >';
} else if ( $data == "check-nsfp" ) {
$ada = 0;
$db->Query("SELECT COUNT(*) Item FROM biaya_pajak WHERE No_Pajak='".Param::Get("No_Pajak")."'");
if ($db->Next()) $ada = $db->Row("Item", 0);
if ($ada == 0) {
$db->Query("SELECT COUNT(*) Item FROM inv_jual_pajak WHERE No_Pajak='".Param::Get("No_Pajak")."'");
if ($db->Next()) $ada = $db->Row("Item", 0);
}
$ajson['ada'] = ($ada > 0) ? true : false;
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Pembuatan Faktur Pajak Biaya</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
<button class="btn btn-secondary mb-1 ms-2 dropdown-toggle" id="butPrint" type="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="bi-printer me-2"></i>Cetak</button>
<div class="dropdown-menu" aria-labelledby="butPrint">
<a class="dropdown-item" href="#" id="printFaktur">Cetak Faktur</a>
<a class="dropdown-item" href="#" id="printFP">Cetak Faktur Pajak</a>
</div>
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-floppy me-2"></i>Simpan</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divTXMaster">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+458
View File
@@ -0,0 +1,458 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/jual.php
Desc. : PHP - Transaksi Penjualan
Created By : Siau Pheng ([email protected]).
Created Date : May 24th, 2010.
Last Modified : January 22nd, 2024.
(c) 2010 - 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$nomor = Param::Get("No_Jual", "");
if ( $data == "master" ) {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['No_Jual'=>$nomor, 'CK'=>"K", 'A_Picker'=>"0"];
if ($mode == "add") {
$atabel['No_Jual'] = "TJ-BARU-".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
$atabel['Tgl_Jual'] = tgl_ymd();
$atabel['Termin'] = $_SESSION['__APP_IAS']['INVOICE_JUAL_HARI'];
$atabel['GudangID'] = 1;
$atabel['OutletID'] = 0;
$atabel['Rekap'] = 0;
$nomor = "";
} else if ($mode == "edit") {
Detail_Copy($nomor);
} else if ($mode == "save") {
$no_lama = $nomor;
$b_baru = (strpos($no_lama,"BARU")===false) ? false : true;
if ($b_baru) $nomor = Nomor_Baru("J", Param::Get("Tgl_Jual"), true);
Detail_Save($nomor, Param::Get("Tgl_Jual"), Param::Get("GudangID"), $b_baru, $no_lama);
$anota = ['Jual'=>0, 'Diskon'=>0];
$db->Query("SELECT SUM(-Qty*Harga_Jual) Jual, SUM(Total_Diskon) Diskon FROM inv_detail WHERE No_Ref='".$nomor."'");
if ($db->Next()) $anota = $db->AllRow();
$sql = new SQL($db);
$sql->set_table("inv_jual");
$sql->add_param_date("Tgl_Jual");
$sql->add_param_date("Tgl_JT");
$sql->add_param("Termin", "IF(Tgl_JT='0000-00-00',0,DATEDIFF(Tgl_JT,Tgl_Jual))", true);
$sql->add_param("No_Faktur");
$sql->add_param("GudangID");
$sql->add_param("OutletID");
$sql->add_param("SalesID");
$sql->add_param("HelperID");
$sql->add_param("SupirID");
$sql->add_param("A_Picker", Param_Picker(Param::Get("A_Picker","0")));
$sql->add_param("Total_Jual", $anota['Jual']);
$sql->add_param("Total_Diskon", $anota['Diskon']);
$sql->add_param("Catatan");
$sql->add_param("CK");
$sql->add_param_userid();
$sql->add_where("No_Jual", $nomor);
if ($b_baru) $sql->add_param_date("Tgl_Nota", Param::Get("Tgl_Jual"));
$sql->UpdateDB();
if (!$b_baru && Param::Get("Rekap",0)==1) {
// update ke SCS
scs_update_jual($nomor);
}
/* PELUNASAN JIKA CASH
if (Param::Get("CK", "K") == "C") {
$tot_bayar = $anota['Jual']-$anota['Diskon'];
$db->Query("DELETE FROM inv_jual_lunas WHERE No_Jual='".$nomor."'");
$db->Query("INSERT INTO inv_jual_lunas (No_Jual,Tgl_Bayar,Total_Bayar,UserID) VALUES('".$nomor."','".tgl_sql2str(Param::Get("Tgl_Jual"))."','".$tot_bayar."','".user_id()."')");
$db->Query("UPDATE inv_jual SET Total_Bayar='".$tot_bayar."',Lunas=IF(Total_Jual-Total_Diskon-Total_Bayar-Total_Potong=0,1,0),Tgl_Lunas=IF(Lunas=1,'".tgl_sql2str(Param::Get("Tgl_Jual"))."','0000-00-00') WHERE No_Jual='".$nomor."'");
}*/
$mode = "view";//todo: print jika langsung cetak
} else if ($mode == "cancel") {
Detail_Cancel($nomor);
$mode = "view";
$nomor = ""; $atabel['No_Jual'] = "";
}
if ($nomor <> "" && $mode <> "cancel") {
$db->Query("SELECT * FROM inv_jual WHERE Data_Jual=1 AND No_Jual='".$nomor."'");
if (!$db->Next()) {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
} else $atabel = array_merge($atabel, $db->AllRow());
if ($atabel['OutletID']>0) {
$db->Query("SELECT Nama_Alamat Nama_Outlet,Alamat_Kota Alamat_Outlet FROM vi_para_outlet WHERE OutletID='".$atabel['OutletID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
}
}
$enable = in_array($mode, ["add","edit"]) ? true : false;
$form = new Form($db);
$tnota = $form->textbox("_", "No_Jual", $atabel['No_Jual'], !$enable, true, "text", "nomor transaksi");
$tfaktur = $form->textbox("_", "No_Faktur", $atabel['No_Faktur'], $enable, true, "text", "nomor faktur");
$ttglnota = $form->datebox("_", "Tgl_Jual", $atabel['Tgl_Jual'], $enable, true);
$ttgljt = $form->datebox("_", "Tgl_JT", $atabel['Tgl_JT'], $enable, true);
$tgud = $form->option_db("_", "GudangID", $atabel['GudangID'], $enable, true, "vi_para_gudang", ["GudangID","Nama_Gudang2"], "Aktif=1 ORDER BY Nama_Gudang", [0,"&nbsp;"]);
$toutl = $form->textauto("_", "Nama_Outlet", ['value'=>$atabel['OutletID'],'text'=>$atabel['Nama_Outlet']], $enable, true, "ketik nama outlet");
$toutlal = $form->textbox("_", "Alamat_Outlet", $atabel['Alamat_Outlet'], false, false, "text");
$tsales = $form->option_db("_", "SalesID", $atabel['SalesID'], $enable, false, "para_pegawai", ["PegID","Nama_Pegawai"], "Aktif=1 AND Jenis_PegID='".$_SESSION['__APP_IAS']['GRUP_PEG_SALES']."' ORDER BY Nama_Pegawai", [0,"&nbsp;"]);
$thelper = $form->option_db("_", "HelperID", $atabel['HelperID'], $enable, false, "para_pegawai", ["PegID","Nama_Pegawai"], "Aktif=1 AND Jenis_PegID='".$_SESSION['__APP_IAS']['GRUP_PEG_HELPER']."' ORDER BY Nama_Pegawai", [0,"&nbsp;"]);
$tsupir = $form->option_db("_", "SupirID", $atabel['SupirID'], $enable, false, "para_pegawai", ["PegID","Nama_Pegawai"], "Aktif=1 AND Jenis_PegID='".$_SESSION['__APP_IAS']['GRUP_PEG_SUPIR']."' ORDER BY Nama_Pegawai", [0,"&nbsp;"]);
$tpicker = $form->option_db("_", "A_Picker", $atabel['A_Picker'], $enable, false, "para_pegawai", ["PegID","Nama_Pegawai"], "Aktif=1 AND Jenis_PegID='".$_SESSION['__APP_IAS']['GRUP_PEG_PICKER']."' ORDER BY Nama_Pegawai", [0,"&nbsp;"], null, null, true);
$tno_do = $form->textbox("_", "No_DO", $atabel['No_DO'], false, false, "text");
$tno_tagih = $form->textbox("_", "No_Tagih", $atabel['No_Tagih'], false, false, "text");
$tno_pajak = $form->textbox("_", "No_Pajak", $atabel['No_Pajak'], false, false, "text");
$ttgllunas = $form->datebox("_", "Tgl_Lunas", $atabel['Tgl_Lunas'], false, false);
$tcatat = $form->textarea("_", "Catatan", $atabel['Catatan'], $enable, true, 1);
$tck = ($enable) ? '<select class="form-select" id="CK" name="CK" onchange="JualJS.oc_CK();"><option value="C"'.($atabel['CK']=="C"?' selected="selected"':'').'>Tunai</option><option value="K"'.($atabel['CK']=="K"?' selected="selected"':'').'>Non Tunai</option></select>' : '<button class="btn btn-secondary" type="button" disabled="">'.['C'=>"Tunai",'K'=>"Non Tunai"][$atabel['CK']].'</button>';
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Jual">Nomor Transaksi</label>
<div class="col"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="JualJS.tx_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Jual">Tanggal Transaksi</label>
<div class="col-sm-7 col-lg-5">'.$ttglnota.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_JT">Jatuh Tempo</label>
<div class="col-sm-7 col-lg-5">'.$ttgljt.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="GudangID">Lokasi Gudang</label>
<div class="col">'.$tgud.'</div>
</div>
<div class="row mb-1 collapse iextra" id="iex1">
<label class="col-sm-5 col-lg-3 col-form-label">No. DO</label>
<div class="col">'.$tno_do.'</div>
</div>
<div class="row mb-1 collapse iextra" id="iex2">
<label class="col-sm-5 col-lg-3 col-form-label">No. Tagihan</label>
<div class="col">'.$tno_tagih.'</div>
</div>
<div class="row mb-1 collapse iextra" id="iex3">
<label class="col-sm-5 col-lg-3 col-form-label">No. Seri FP</label>
<div class="col">'.$tno_pajak.'</div>
</div>
<div class="row mb-1 collapse iextra" id="iex4">
<label class="col-sm-5 col-lg-3 col-form-label">Tanggal Lunas</label>
<div class="col-sm-7 col-lg-5">'.$ttgllunas.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Faktur">Nomor Faktur</label>
<div class="col"><div class="input-group">'.$tfaktur.$tck.'</div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Nama_Outlet">Nama Outlet</label>
<div class="col"><div class="input-group">'.$toutl.'<button class="btn '.($enable?'btn-info':'btn-secondary').'" type="button"'.($enable?'':' disabled').' onclick="JualJS.outlet_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Alamat Outlet</label>
<div class="col">'.$toutlal.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="SalesID">Nama Sales <span class="float-end"><a class="text-decoration-none text-active" type="button" data-bs-toggle="collapse" data-bs-target=".iextra" aria-expanded="false" aria-controls="iex1 iex2 iex3 iex4 iex5 iex6 iex7"><i class="fw-bolder bi-arrows-expand"></i></a></span></label>
<div class="col">'.$tsales.'</div>
</div>
<div class="row mb-1 collapse iextra" id="iex5">
<label class="col-sm-5 col-lg-3 col-form-label">Nama Helper</label>
<div class="col">'.$thelper.'</div>
</div>
<div class="row mb-1 collapse iextra" id="iex6">
<label class="col-sm-5 col-lg-3 col-form-label">Nama Supir</label>
<div class="col">'.$tsupir.'</div>
</div>
<div class="row mb-1 collapse iextra" id="iex7">
<label class="col-sm-5 col-lg-3 col-form-label">Nama Picker</label>
<div class="col">'.$tpicker.'</div>
</div>
</div>
</div>
<div class="row mb-1">
<label class="col-sm-3 col-lg-2 col-form-label" for="Catatan" style="width:12.5%;">Catatan</label>
<div class="col">'.$tcatat.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="OutletID" value="'.$atabel['OutletID'].'" >
<input type="hidden" id="Lunas" value="'.$atabel['Lunas'].'" >
<input type="hidden" id="Rekap" value="'.$atabel['Rekap'].'" >
<input type="hidden" id="Termin" value="'.$atabel['Termin'].'" >
<input type="hidden" id="mode" value="'.$mode.'" >
';
} else if ( $data == "delete" ) {
$db->Query("DELETE FROM inv_jual_lunas WHERE No_Jual='".$nomor."'");
$db->Query("DELETE FROM inv_jual WHERE No_Jual='".$nomor."'");
$db->Query("DELETE FROM inv_detail WHERE No_Ref='".$nomor."'");
// update ke SCS
if (Param::Get("Rekap",0)==1) scs_delete_jual($nomor);
$ajson['status'] = true;
} else if ( $data == "tabel-detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
$iqty = doubleval(Param::Get("Qty", 0)) * -1; $istok = $iqty;
$db->Query("SELECT Qty FROM inv_produk_kemasan WHERE InvID='".Param::Get("InvID")."' AND SatuanID='".Param::Get("SatuanID")."'");
if ($db->Next()) $istok = $db->Row("Qty", 1) * $iqty;
$tot_diskon = ($iqty==0) ? 0 : Param::Get("Total_Diskon", 0);
if (Param::Get("Pro_SQ",0)==1) $tot_diskon = Param::Get("Harga_Jual",0) * $iqty * -1;
$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("RasaID");
$sql->add_param("Qty", $iqty);
$sql->add_param("Stok", $istok);
$sql->add_param("Harga_Jual");
$sql->add_param("Total_Diskon", $tot_diskon);
$sql->add_param("Pro_SQ");
$sql->add_param("Pro_SD");
$sql->add_param("Pro_ID");
$sql->add_param_unix();
$sql->add_param_userid();
$sql->add_where("ID");
$sql->add_where("No_Ref", $nomor);
if ( $mode_detail == "insert" ) {
$sql->add_param("Harga_Pokok");
$sql->add_param("NotaID", 5);
$sql->InsertDB();
} else if ( $mode_detail == "update" ) {
$sql->UpdateDB();
} else if ( $mode_detail == "delete" ) {
$sql->DeleteDB();
}
}
$qview = ""; $qtabel = "inv_detail";
if (in_array($mode, ["add","edit"])) {
if ($mode=="add") $qview = " AND Unix=".user_unix();
$qtabel = "tmp_inv_detail";
}
$obj = new Table($db);
$obj->set_query("SELECT D.*,CONCAT(P.Nama_Lengkap2,IF(D.Qty>0,' (Ret)','')) Nama_Produk,P.Nama_Satuan,R.Nama_Rasa,(D.Qty2*D.Harga_Jual)-D.Total_Diskon Total,IF(D.Qty>0,0,1) FC FROM (SELECT *,-Qty Qty2 FROM ".$qtabel." WHERE No_Ref='".$nomor."'".$qview." AND Qty<>0) D LEFT JOIN vi_inv_produk2 P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID) LEFT JOIN para_rasa R ON (D.RasaID=R.RasaID)");
$obj->set_query_footer("SELECT COUNT(*) Harga_Jual,SUM(D.Total_Diskon) Total_Diskon,SUM((D.Qty2*D.Harga_Jual)-D.Total_Diskon) Total FROM (SELECT *,-Qty Qty2 FROM ".$qtabel." WHERE No_Ref='".$nomor."' ".$qview.") D");
$obj->add_field("ID", "ID", "c");
$obj->add_field("Nama_Produk", "Nama Produk", "awr");
$obj->add_field("Nama_Rasa", "Varian / Rasa", "l");
$obj->add_field("Qty2", "Qty", "r", "rupiah2");
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah", "items");
$obj->add_field("Total_Diskon", "Diskon", "r", "rupiah", "rupiah");
$obj->add_field("Total", "TOTAL", "r", "rupiah", "rupiah");
$obj->set_field_order("ID", "A");
$obj->set_row_control("FC", 1);
if (in_array($mode, ["add","edit"])) {
$obj->add_row_btn("clipboard", "Ubah", "JualJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "JualJS.detail_hapus", "Unix", user_unix());
$obj->set_func_btn("JualJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Produk');
$obj->set_func_btn("JualJS.produk_brow", '<i class="bi-table me-1"></i> Browse');
}
$obj->set_func_navi("JualJS.data_query('tabel-detail')");
$ajson[] = $obj->json_table("divDetailTabel");
} else if ( $data == "brow-tx" ) {
$tcari = trim(Param::Get("Cari_TX"));
$tlimit = ($tcari=="") ? "" : " AND (No_Jual LIKE '%".$tcari."%' OR No_Faktur LIKE '%".$tcari."%' OR OutletID IN (SELECT OutletID FROM para_outlet WHERE Nama_Outlet LIKE '%".$tcari."%'))";
$obj = new Table($db);
$obj->set_table("(SELECT *,Total_Jual-Total_Diskon Jumlah FROM inv_jual WHERE Data_Jual=1".$tlimit.") J LEFT JOIN vi_para_outlet O ON (J.OutletID=O.OutletID)", "J.*,O.Nama_Alamat", "");
$obj->add_field("No_Jual", "No. Trans", "c");
$obj->add_field("Tgl_Jual", "Tgl. Jual", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Total_Jual", "Sub. Total", "r", "rupiah");
$obj->add_field("Total_Diskon", "Diskon", "r", "rupiah");
$obj->add_field("Jumlah", "TOTAL", "r", "rupiah");
$obj->add_field("CK", "C/K", "c");
$obj->set_field_order("No_Jual", "D");
$obj->add_row_btn("save", "Pilih", "JualJS.tx_select");
$obj->set_func_navi("JualJS.data_query('brow-tx')");
$ajson[] = $obj->db_table("divBrowTX");
} else if ( $data == "brow-outlet" ) {
$tcari = trim(Param::Get("Cari_Outlet"));
$tsql = ($tcari=="") ? "" : " AND CONCAT(Nama_Outlet,Telp_Outlet,Nama_Outlet) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("vi_para_outlet", "*", "Aktif=1".$tsql);
$obj->add_field("OutletID", "ID", "hid");
$obj->add_field("Kode_Outlet", "Kode", "c");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Alamat_Kota", "Alamat & Kota", "awr");
$obj->set_field_order("Nama_Outlet", "A");
$obj->add_row_btn("save", "Pilih", "JualJS.outlet_select");
$obj->set_func_navi("JualJS.data_query('brow-outlet')");
$ajson[] = $obj->db_table("divBrowOutlet");
} else if ( $data == "brow-produk" ) {
$tcari = trim(Param::Get("Cari_Produk"));
$tsql = ($tcari=="") ? "" : " AND CONCAT(Kode_Produk,Nama_Lengkap) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("vi_inv_produk2", "*", "Aktif=1".$tsql);
$obj->add_field("InvID", "ID", "hid");
$obj->add_field("SatuanID", "SatuanID", "hid");
$obj->add_field("Kode_Produk", "Kode", "c");
$obj->add_field("Nama_Lengkap2", "Nama Produk", "awr");
$obj->set_field_order("Nama_Lengkap", "A");
$obj->add_row_btn("save", "Pilih", "JualJS.produk_select");
$obj->set_func_navi("JualJS.data_query('brow-produk')");
$ajson[] = $obj->db_table("divBrowProduk");
} else if ( $data == "auto-outlet" ) {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
if (is_string($tcari) && strlen($tcari) < 64) {
$db->Query("SELECT * FROM vi_para_outlet WHERE Aktif=1 AND CONCAT(Nama_Outlet,Alamat_Outlet) LIKE '%".$tcari."%' ORDER BY Nama_Outlet LIMIT 50");
while ($db->Next()) {
$ajson['autodata'][] = ['value'=>$db->Row("OutletID"), 'text'=>$db->Row("Nama_Alamat"), 'data'=>$db->Row("Alamat_Kota")];
}
}
} else if ( $data == "auto-produk" ) {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
if (is_string($tcari) && strlen($tcari) < 64) {
$db->Query("SELECT P.InvID,P.Nama_Lengkap,CONCAT(P.SatuanID,':',P.Nama_Satuan) Data2 FROM vi_inv_produk2 P WHERE Aktif=1 AND CONCAT(Nama_Lengkap) LIKE '%".$tcari."%' ORDER BY Nama_Lengkap LIMIT 50");
while ($db->Next()) {
$ajson['autodata'][] = ['value'=>$db->Row("InvID"), 'text'=>$db->Row("Nama_Lengkap"), 'data'=>$db->Row("Data2")];
}
}
} else if ($data == "detail-produk") {
$id = Param::Get("ID", 0); $atabel = ['ID'=>$id, 'InvID'=>Param::Get("InvID",0), 'SatuanID'=>Param::Get("SatuanID",0)];
if ($id > 0) {
$db->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND ID='".$id."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
$atabel['Qty'] *= -1;
}
if ($atabel['InvID']>0 && $atabel['SatuanID']>0) {
$db->Query("SELECT Nama_Lengkap2 Nama_Produk,Nama_Satuan FROM vi_inv_produk2 WHERE InvID='".$atabel['InvID']."' AND SatuanID='".$atabel['SatuanID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
}
$form = new Form($db);
$tnama = $form->textauto("_", "Nama_Produk", ['value'=>$atabel['InvID'],'text'=>$atabel['Nama_Produk']], true, false, "ketik nama produk");
$trasa = $form->option("_", "RasaID", $atabel['RasaID'], true, false, [$atabel['RasaID']=>$atabel['RasaID']]);
$tqty = $form->textbox("_", "Qty", $atabel['Qty'], true, false, "double");
$tdis = $form->textbox("_", "Total_Diskon", $atabel['Total_Diskon'], true, false, "double");
$ttot = $form->textbox("_", "Jumlah", 0, false, false, "double");
$tsat = $form->textbox("_", "Nama_Satuan", $atabel['Nama_Satuan'], false, false, "text");
$tharga = '<select class="form-select text-end" id="Harga_Jual" name="Harga_Jual" onchange="JualJS.Hitung_Detail();"><option value="'.$atabel['Harga_Jual'].'">'.rupiah($atabel['Harga_Jual']).'</option></select>';
$tpro_sq = '<div class="form-check form-check-inline mr-1"><input type="checkbox" class="form-check-input" id="Pro_SQ" name="Pro_SQ" value="'.$atabel['Pro_SQ'].'"'.($atabel['Pro_SQ']==1?' checked="checked"':'').' onchange="this.value=(this.checked)?\'1\':\'0\';JualJS.Hitung_Detail();">Promo Barang</div>';
$tpro_sd = '<div class="form-check form-check-inline mr-1"><input type="checkbox" class="form-check-input" id="Pro_SD" name="Pro_SD" value="'.$atabel['Pro_SD'].'"'.($atabel['Pro_SD']==1?' checked="checked"':'').' onchange="this.value=(this.checked)?\'1\':\'0\';">Promo Diskon</div>';
$tpro_id = '<div class="form-check form-check-inline mr-1"><input type="checkbox" class="form-check-input" id="Pro_ID" name="Pro_ID" value="'.$atabel['Pro_ID'].'"'.($atabel['Pro_ID']==1?' checked="checked"':'').' onchange="this.value=(this.checked)?\'1\':\'0\';">Promo Diskon PMS</div>';
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Produk">Nama Produk</label>
<div class="col">'.$tnama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="RasaID">Varian / Rasa</label>
<div class="col">'.$trasa.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Qty">Qty</label>
<div class="col-sm-4 col-lg-5">'.$tqty.'</div>
<div class="col-sm-4 col-lg-4">'.$tsat.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Harga_Jual">Harga (@)</label>
<div class="col-sm-4 col-lg-5">'.$tharga.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Total_Diskon">Diskon</label>
<div class="col-sm-4 col-lg-5">'.$tdis.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label">Total</label>
<div class="col-sm-4 col-lg-5">'.$ttot.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<div class="col-auto">'.$tpro_sq.'</div>
<div class="col-auto">'.$tpro_sd.'</div>
<div class="col-auto">'.$tpro_id.'</div>
</div>
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'" >
<input type="hidden" id="SatuanID" value="'.$atabel['SatuanID'].'" >
<input type="hidden" id="Harga_Pokok" value="'.$atabel['Harga_Pokok'].'" >
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >
';
} else if ( $data == "option-rasa" ) {
$aoption = ['type' => "option", 'id' => "RasaID", 'value' => Param::Get("RasaID",0), 'avalue' => [['value'=>0,'html'=>""]]];
$db->Query("SELECT R.RasaID,R.Nama_Rasa FROM (SELECT * FROM inv_produk_varian WHERE InvID='".Param::Get("InvID",0)."') V LEFT JOIN para_rasa R ON (R.RasaID=V.RasaID) ORDER BY R.Nama_Rasa");
while ($db->Next()) {
$aoption['avalue'][] = ['value'=>$db->Row("RasaID"), 'html'=>$db->Row("Nama_Rasa")];
}
$ajson[] = $aoption;
} else if ( $data == "option-harga" ) {
$aoption = ['type' => "option", 'id' => "Harga_Jual", 'value' => 0, 'avalue' => []];
$id_grup = 0;
$db->Query("SELECT Grup_OutletID FROM para_outlet WHERE OutletID='".Param::Get("OutletID",0)."'");
if ($db->Next()) $id_grup = $db->Row("Grup_OutletID", 0);
$db->Query("SELECT Tanggal,Harga_Jual FROM inv_produk_harga WHERE InvID='".Param::Get("InvID",0)."' AND SatuanID='".Param::Get("SatuanID",0)."' AND Grup_OutletID='".$id_grup."' ORDER BY Tanggal DESC, Harga_Jual DESC");
while ($db->Next()) {
if ($db->RecordCount()==1) $aoption['value'] = $db->Row("Harga_Jual");
$aoption['avalue'][] = ['value'=>$db->Row("Harga_Jual"), 'html'=>rupiah($db->Row("Harga_Jual"))];
}
$ajson[] = $aoption;
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Penjualan</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
<button class="btn btn-secondary mb-1 ms-2" id="butPrint" type="button"><i class="bi-printer me-2"></i>Cetak</button>
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-floppy me-2"></i>Simpan</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divTXMaster">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+236
View File
@@ -0,0 +1,236 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/jual_do.php
Desc. : PHP - Pembuatan Delivery Order Penjualan
Created By : Siau Pheng ([email protected]).
Created Date : March 4th, 2011.
Last Modified : January 20th, 2024.
(c) 2010 - 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$db2 = $db2 ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$nomor = Param::Get("No_DO", "");
if ( $data == "master" ) {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['No_DO'=>$nomor, 'A_Picker'=>"0"];
$no_lama = $nomor;
if ($mode == "add") {
$atabel['No_DO'] = "DO-BARU-".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
$atabel['Tgl_DO'] = tgl_ymd();
$atabel['MobilID'] = 0;
$atabel['SupirID'] = 0;
$nomor = "";
} else if ($mode == "save") {
$b_baru = (strpos($no_lama,"BARU")===false) ? false : true;
if ($b_baru) $nomor = Nomor_Baru("D", Param::Get("Tgl_DO"), true);
$sql = new SQL($db);
$sql->set_table("inv_jual_do");
$sql->add_param_date("Tgl_DO");
$sql->add_param("MobilID");
$sql->add_param("SupirID");
$sql->add_param("A_Picker", Param_Picker(Param::Get("A_Picker","0")));
$sql->add_param("Catatan");
$sql->add_param_userid();
$sql->add_where("No_DO", $nomor);
$sql->UpdateDB();
if ($b_baru) {
$db->Query("UPDATE inv_jual SET No_DO='".$nomor."' WHERE No_DO='".$no_lama."'");
}
if ($nomor <> "") {
// UPDATE inv_jual DGN Tgl_Jual, Tgl_JT*, SUPIR, PICKER
$tgl_do = tgl_sql2str(Param::Get("Tgl_DO"));
$db->Query("UPDATE inv_jual SET Tgl_Jual='".$tgl_do."',Tgl_JT=DATE_ADD('".$tgl_do."', INTERVAL Termin DAY),SupirID='".Param::Get("SupirID",0)."',A_Picker='".Param_Picker(Param::Get("A_Picker","0"))."' WHERE No_DO='".$nomor."'");
$db->Query("SELECT CONCAT('\'',GROUP_CONCAT(No_Jual SEPARATOR '\',\''),'\'') No_Ref FROM inv_jual WHERE No_DO='".$nomor."'");
if ($db->Next()) $db2->Query("UPDATE inv_detail SET Tgl_Ref='".$tgl_do."' WHERE No_Ref IN (".$db->Row("No_Ref").")");
}
$mode = "view";//todo: print jika langsung cetak
} else if ($mode == "cancel") {
if (strpos($no_lama,"BARU")!==false) {
$db->Query("UPDATE inv_jual SET No_DO='' WHERE No_DO='".$nomor."'");
}
$mode = "view";
$nomor = ""; $atabel['No_DO'] = "";
}
if ($nomor <> "" && $mode <> "cancel") {
$db->Query("SELECT * FROM inv_jual_do WHERE No_DO='".$nomor."'");
if (!$db->Next()) {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
} else $atabel = array_merge($atabel, $db->AllRow());
}
$enable = in_array($mode, ["add","edit"]) ? true : false;
$form = new Form($db);
$tnota = $form->textbox("_", "No_DO", $atabel['No_DO'], !$enable, true, "text", "nomor transaksi");
$ttglnota = $form->datebox("_", "Tgl_DO", $atabel['Tgl_DO'], $enable, true);
$tmobil = $form->option_db("_", "MobilID", $atabel['MobilID'], $enable, false, "para_mobil", ["MobilID","Nama_Mobil"], "Aktif=1 ORDER BY Nama_Mobil", [0,"&nbsp;"]);
$tsupir = $form->option_db("_", "SupirID", $atabel['SupirID'], $enable, false, "para_pegawai", ["PegID","Nama_Pegawai"], "Aktif=1 AND Jenis_PegID='".$_SESSION['__APP_IAS']['GRUP_PEG_SUPIR']."' ORDER BY Nama_Pegawai", [0,"&nbsp;"]);
$tpicker = $form->option_db("_", "A_Picker", $atabel['A_Picker'], $enable, false, "para_pegawai", ["PegID","Nama_Pegawai"], "Aktif=1 AND Jenis_PegID='".$_SESSION['__APP_IAS']['GRUP_PEG_PICKER']."' ORDER BY Nama_Pegawai", [0,"&nbsp;"], null, null, true);
$tcatat = $form->textarea("_", "Catatan", $atabel['Catatan'], $enable, true, 1);
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_DO">Nomor Transaksi</label>
<div class="col"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="JualDOJS.tx_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_DO">Tanggal Transaksi</label>
<div class="col-sm-7 col-lg-5">'.$ttglnota.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="MobilID">Kendaraan</label>
<div class="col">'.$tmobil.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Catatan">Catatan</label>
<div class="col">'.$tcatat.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="SupirID">Nama Supir</label>
<div class="col">'.$tsupir.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="A_Picker">Nama Picker</label>
<div class="col">'.$tpicker.'</div>
</div>
</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="mode" value="'.$mode.'" >
';
} else if ( $data == "delete" ) {
$db->Query("UPDATE inv_jual SET No_DO='' WHERE No_DO='".$nomor."'");
$db->Query("DELETE FROM inv_jual_do WHERE No_DO='".$nomor."'");
$ajson['status'] = true;
} else if ( $data == "status" ) {
$db->Query("SELECT No_Jual,Rekap FROM inv_jual WHERE No_DO='".$nomor."'");
while ($db->Next()) {
if ($db->Row("Rekap",0)==0) {
$db2->Query("UPDATE inv_jual SET Rekap=1 WHERE No_Jual='".$db->Row("No_Jual")."'");
scs_update_jual($db->Row("No_Jual"));
}
}
$ajson['status'] = true;
} else if ( $data == "tabel-detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
if ( $mode_detail == "insert" ) {
$alist = Param::Get_ArrayCBOX();
foreach ($alist as $_key => $_val) {
if ($_val=="Y") $db->Query("UPDATE inv_jual SET No_DO='".$nomor."' WHERE No_Jual='".$_key."' LIMIT 1");
}
} else if ( $mode_detail == "delete" ) {
$db->Query("UPDATE inv_jual SET No_DO='' WHERE No_Jual='".Param::Get("No_Jual")."' LIMIT 1");
}
}
$obj = new Table($db);
$obj->set_query("SELECT J.*,O.Nama_Alamat,S.Nama_Pegawai Nama_Sales FROM (SELECT *,Total_Jual-Total_Diskon Total FROM inv_jual WHERE Data_Jual=1 AND No_DO='".$nomor."'".($nomor==""?" AND FALSE":"").") J LEFT JOIN vi_para_outlet O ON (J.OutletID=O.OutletID) LEFT JOIN para_pegawai S ON (J.SalesID=S.PegID)");
$obj->add_field("No_Jual", "No. Trans", "c");
$obj->add_field("Tgl_Jual", "Tgl. Jual", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$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->add_field("Nama_Sales", "Sales", "awr");
$obj->add_field("CK", "C/K", "c");
$obj->set_field_order("No_Jual", "A");
if (in_array($mode, ["add","edit"])) {
$obj->add_row_btn("trash", "Hapus", "JualDOJS.jual_hapus", "No_DO", $nomor);
$obj->set_func_btn("JualDOJS.jual_brow", '<i class="bi-table me-1"></i> Browse');
}
$obj->set_func_navi("JualDOJS.data_query('tabel-detail')");
$ajson[] = $obj->json_table("divDetailTabel");
} else if ( $data == "brow-tx" ) {
$tcari = trim(Param::Get("Cari_TX"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(No_DO,DATE_FORMAT(Tgl_DO,'%d-%m-%Y')) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("(SELECT * FROM inv_jual_do".$tsql.") DO LEFT JOIN para_mobil M ON (DO.MobilID=M.MobilID) LEFT JOIN para_pegawai S ON (DO.SupirID=S.PegID)", "DO.*,M.Nama_Mobil,Nama_Picker(DO.A_Picker) Nama_Picker,S.Nama_Pegawai Nama_Supir", "");
$obj->add_field("No_DO", "No. Trans", "c");
$obj->add_field("Tgl_DO", "Tgl. Trans", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Mobil", "Kendaraan", "l");
$obj->add_field("Nama_Supir", "Nama Supir", "awr");
$obj->add_field("Nama_Picker", "Nama Picker", "awr");
$obj->set_field_order("No_DO", "D");
$obj->add_row_btn("save", "Pilih", "JualDOJS.tx_select");
$obj->set_func_navi("JualDOJS.data_query('brow-tx')");
$ajson[] = $obj->db_table("divBrowTX");
} else if ( $data == "brow-jual" ) {
$tcari = trim(Param::Get("Cari_Jual"));
$tlimit = ($tcari=="") ? "" : " AND (No_Jual LIKE '%".$tcari."%' OR No_Faktur LIKE '%".$tcari."%' OR OutletID IN (SELECT OutletID FROM para_outlet WHERE Nama_Outlet LIKE '%".$tcari."%'))";
$obj = new Table($db);
$obj->set_table("(SELECT *,Total_Jual-Total_Diskon Jumlah FROM inv_jual WHERE Data_Jual=1 AND No_DO=''".$tlimit.") J LEFT JOIN vi_para_outlet O ON (J.OutletID=O.OutletID)", "J.*,O.Nama_Alamat,'N' Nota", "");
$obj->add_field("No_Jual", "No. Trans", "c");
$obj->add_field("Tgl_Jual", "Tgl. Jual", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Total_Jual", "Sub. Total", "r", "rupiah");
$obj->add_field("Total_Diskon", "Diskon", "r", "rupiah");
$obj->add_field("Jumlah", "TOTAL", "r", "rupiah");
$obj->set_field_order("No_Jual", "A");
$obj->add_row_checkbox("No_Jual", "Nota", ["Y","N"]);
$obj->set_func_navi("JualDOJS.data_query('brow-jual')");
$ajson[] = $obj->db_table("divBrowJual");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Pembuatan Delivery Order Penjualan</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
<button class="btn btn-info mb-1 ms-2" id="butStatus" type="button"><i class="bi-arrow-repeat me-2"></i>Status</button>
<button class="btn btn-secondary mb-1 ms-2" id="butPrint" type="button"><i class="bi-printer me-2"></i>Cetak</button>
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-floppy me-2"></i>Simpan</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divTXMaster">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+282
View File
@@ -0,0 +1,282 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/jual_lunas.php
Desc. : PHP - Transaksi Pelunasan Penjualan
Created By : Siau Pheng ([email protected]).
Created Date : February 28th, 2011.
Last Modified : May 19th, 2023.
(c) 2011 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$id_outlet = Param::Get("OutletID", 0);
$nomor = Param::Get("No_Jual", "");
if ( $data == "master" ) {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['OutletID'=>0, 'Nama_Outlet'=>"", 'Alamat_Outlet'=>""];
$form = new Form($db);
$toutlet = $form->textauto("_", "Nama_Outlet", ['value'=>$atabel['OutletID'],'text'=>$atabel['Nama_Outlet']], true, false, "ketik nama outlet");
$toutletal = $form->textbox("_", "Alamat_Outlet", $atabel['Alamat_Outlet'], false, false, "text");
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="Nama_Outlet">Nama Outlet</label>
<div class="col"><div class="input-group">'.$toutlet.'<button id="butBrow" class="btn btn-info" type="button" onclick="JualLunasJS.outlet_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label">Alamat Outlet</label>
<div class="col">'.$toutletal.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="OutletID" value="0" >
<input type="hidden" id="Mode_Tampil" value="0" >
';
} else if ( $data == "tabel-nota" ) {
$tsql = (Param::Get("Mode_Tampil", 0)==1) ? "" : " AND Lunas=0";
$obj = new Table($db);
$obj->set_query("SELECT *,Total_Jual-Total_Diskon Total,IF(Data_Jual=1,'J','R') Tipe FROM inv_jual WHERE OutletID='".$id_outlet."' AND No_DO<>''".$tsql);
$obj->set_query_footer("SELECT SUM(Total_Jual-Total_Diskon) Total FROM inv_jual WHERE OutletID='".$id_outlet."' AND No_DO<>''".$tsql);
$obj->add_field("Tipe", "Tipe", "hid");
$obj->add_field("No_Jual", "No. Trans", "c");
$obj->add_field("Tgl_Jual", "Tgl. Trans", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Tgl_JT", "Jatuh Tempo", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Total_Jual", "Sub. Total", "r", "rupiah");
$obj->add_field("Total_Diskon", "Diskon", "r", "rupiah");
$obj->add_field("Total", "TOTAL", "r", "rupiah", "rupiah");
if (Param::Get("Mode_Tampil", 0)==1) $obj->add_field("Lunas", "Lunas", "c", "checkbox");
$obj->set_field_order("No_Jual", "A");
$obj->add_row_btn("save", "Pilih", "JualLunasJS.nota_select");
$obj->set_func_navi("JualLunasJS.data_query('tabel-nota')");
$ajson[] = $obj->json_table("divTXNota");
} else if ( $data == "tabel-bayar" ) {
$lunas = Param::Get("Lunas", 0);
if (in_array($mode_detail, ["insert","delete"])) {
$sql = new SQL($db);
$sql->set_table("inv_jual_lunas");
$sql->add_param("No_Jual");
$sql->add_param_date("Tgl_Bayar");
if (Param::Get("Tipe", 0) == 2) $sql->add_param_date("Tgl_Cair");
$sql->add_param("Tipe");
$sql->add_param("Total_Bayar");
$sql->add_param("Total_Potong");
$sql->add_param_userid();
$sql->add_where("ID");
$sql->add_where("No_Jual", $nomor);
if ($mode_detail == "insert") {
$sql->InsertDB();
} else if ($mode_detail == "delete") {
$sql->DeleteDB();
}
$anota = ['Bayar'=>0, 'Potong'=>0, 'Total_Sisa'=>0, 'Lunas'=>0];
$db->Query("SELECT SUM(Total_Bayar) Bayar,SUM(Total_Potong) Potong FROM inv_jual_lunas WHERE No_Jual='".$nomor."'");
if ($db->Next()) $anota = $db->AllRow();
$db->Query("UPDATE inv_jual SET Total_Bayar='".$anota['Bayar']."',Total_Potong='".$anota['Potong']."',Lunas=IF(Total_Jual-Total_Diskon-Total_Bayar-Total_Potong=0,1,0),Tgl_Lunas=IF(Lunas=1,'".tgl_sql2str(Param::Get("Tgl_Bayar"))."','0000-00-00') WHERE No_Jual='".$nomor."'");
$db->Query("SELECT Lunas,Total_Jual-Total_Diskon-Total_Bayar-Total_Potong Total_Sisa FROM inv_jual WHERE No_Jual='".$nomor."'");
if ($db->Next()) $anota = $db->AllRow();
$lunas = $anota['Lunas'];
$ajson[] = array('type'=>"form", 'id'=>"Total_Sisa", 'value'=>$anota['Total_Sisa']);
$ajson[] = array('type'=>"form", 'id'=>"Lunas", 'value'=>$anota['Lunas']);
}
$obj = new Table($db);
$obj->set_query("SELECT * FROM inv_jual_lunas WHERE No_Jual='".$nomor."' ORDER BY ID");
$obj->add_field("ID", "ID", "hid");
$obj->add_field("Tgl_Bayar", "Tgl. Bayar", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Tipe", "Tipe", "l", [1=>"Cash",2=>"Giro"]);
$obj->add_field("Tgl_Cair", "Tgl. BG", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Total_Bayar", "Jumlah Bayar", "r", "rupiah");
$obj->add_field("Total_Potong", "Pemotongan", "r", "rupiah");
$obj->set_field_order("Tgl_Bayar", "A");
if ($_SESSION['__WEB_USER']['Level']<=1 && ($lunas==0 || ($lunas==1 && Param::Get('Mode_Tampil',0)==1))) {
$obj->add_row_btn("trash", "Hapus", "JualLunasJS.bayar_hapus", "No_Jual", $nomor);
}
if ($lunas == 0) {
$obj->set_func_btn("JualLunasJS.bayar_show", '<i class="bi-wallet me-1"></i> Pembayaran');
}
$obj->set_func_navi("JualLunasJS.data_query('tabel-bayar')");
$ajson[] = $obj->json_table("divDetailBayar");
} else if ( $data == "brow-outlet" ) {
$tcari = trim(Param::Get("Cari_Outlet"));
$tsql = ($tcari=="") ? " LIMIT 100" : " AND CONCAT(Kode_Outlet,Nama_Outlet,Telp_Outlet,Alamat_Outlet) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM vi_para_outlet WHERE Aktif=1".$tsql);
$obj->add_field("OutletID", "ID", "hid");
$obj->add_field("Nama_Alamat", "NA", "hid");
$obj->add_field("Kode_Outlet", "Kode", "l");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Alamat_Kota", "Alamat Lengkap", "awr");
$obj->add_field("Telp_Outlet", "Telp", "l");
$obj->set_field_order("Kode_Outlet", "A");
$obj->add_row_btn("save", "Pilih", "JualLunasJS.outlet_select");
$obj->set_func_navi("JualLunasJS.data_query('brow-outlet')");
$ajson[] = $obj->json_table("divBrowOutlet");
} else if ( $data == "auto-outlet" ) {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
if (is_string($tcari) && strlen($tcari) < 64) {
$db->Query("SELECT * FROM vi_para_outlet WHERE Aktif=1 AND CONCAT(Kode_Outlet,Nama_Outlet,Telp_Outlet,Alamat_Outlet) LIKE '%".$tcari."%' ORDER BY Kode_Outlet LIMIT 50");
while ($db->Next()) {
$ajson['autodata'][] = ['value'=>$db->Row("OutletID"), 'text'=>$db->Row("Nama_Alamat"), 'data'=>$db->Row("Alamat_Kota")];
}
}
} else if ($data == "detail-nota") {
$atabel = ['No_Jual'=>$nomor]; $tipe = Param::Get("Tipe_Nota", "J");
$db->Query("SELECT *,Total_Jual-Total_Diskon Jumlah,Total_Jual-Total_Diskon-Total_Bayar-Total_Potong Sisa_Bayar FROM inv_jual WHERE No_Jual='".$nomor."'");
if ($db->Next()) $atabel = $db->AllRow();
$form = new Form($db);
$tnota = $form->textbox("_", "No_Jual", $atabel['No_Jual'], false, false, "text");
$tpajak= $form->textbox("_", "No_Pajak", $atabel['No_Pajak'], false, false, "text");
$tfaktur = $form->textbox("_", "No_Faktur", $atabel['No_Faktur'], false, false, "text");
$ttglnota = $form->datebox("_", "Tgl_Jual", $atabel['Tgl_Jual'], false, false);
$ttgljt = $form->datebox("_", "Tgl_JT", $atabel['Tgl_JT'], false, false);
$ttot_jual = $form->textbox("_", "Total_Jual", $atabel['Total_Jual'], false, false, "double");
$ttot_dis = $form->textbox("_", "Total_Diskon", $atabel['Total_Diskon'], false, false, "double");
$tjumlah = $form->textbox("_", "Jumlah", $atabel['Jumlah'], false, false, "double");
$ajson['html'] = '
<div class="row">
<div class="col text-center fs-5 pb-1">Informasi Faktur / Retur</div>
</div>
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">No. '.(($tipe=="J")?"Transaksi":"Retur").'</label>
<div class="col">'.$tnota.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">No. Seri FP</label>
<div class="col-sm-7 col-lg-5">'.$tpajak.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Tgl. '.(($tipe=="J")?"Transaksi":"Retur").'</label>
<div class="col-sm-7 col-lg-5">'.$ttglnota.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Jatuh Tempo</label>
<div class="col-sm-7 col-lg-5">'.$ttgljt.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">'.(($tipe=="J")?"No. Faktur":"Catatan").'</label>
<div class="col">'.$tfaktur.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Jumlah '.(($tipe=="J")?"Transaksi":"Retur").'</label>
<div class="col">'.$ttot_jual.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Jumlah Diskon</label>
<div class="col">'.$ttot_dis.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Total '.(($tipe=="J")?"Faktur":"Retur").'</label>
<div class="col">'.$tjumlah.'</div>
</div>
</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="Total_Sisa" value="'.$atabel['Sisa_Bayar'].'" >
<input type="hidden" id="Lunas" value="'.$atabel['Lunas'].'" >
<input type="hidden" id="Rekap" value="'.$atabel['Rekap'].'" >
<input type="hidden" id="Tipe_Nota" value="'.$tipe.'" >
';
} else if ($data == "detail-bayar") {
$form = new Form($db);
$ttglbyr = $form->datebox("_", "Tgl_Bayar", tgl_ymd(), true, false);
$ttglcair = $form->datebox("_", "Tgl_Cair", tgl_ymd(), true, false);
$ttipe = $form->radio("_", "Tipe", 1, true, false, [1=>"Cash",2=>"Giro"], null, "JualLunasJS.oc_Tipe();");
$ttotal = $form->textbox("_", "Temp_Total", Param::Get("Total_Sisa",0), false, false, "double");
$tsisa = $form->textbox("_", "Temp_Sisa", 0, false, false, "double");
$tbayar = $form->textbox("_", "Total_Bayar", Param::Get("Total_Sisa",0), true, false, "double", null, null, null, "JualLunasJS.Hitung_Detail();");
$tpotong = $form->textbox("_", "Total_Potong", 0, true, false, "double", null, null, null, "JualLunasJS.Hitung_Detail();");
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Tipe">Tipe Bayar</label>
<div class="col">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Tgl_Bayar">Tanggal Bayar</label>
<div class="col">'.$ttglbyr.'</div>
</div>
<div class="row mb-1 d-none" id="divTglCair">
<label class="col-sm-6 col-lg-4 col-form-label" for="Tgl_Cair">Tanggal Giro</label>
<div class="col">'.$ttglcair.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label">Total Faktur</label>
<div class="col">'.$ttotal.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Total_Bayar">Jumlah Bayar</label>
<div class="col">'.$tbayar.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Total_Potong">Potongan</label>
<div class="col">'.$tpotong.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label">Sisa Tagihan</label>
<div class="col">'.$tsisa.'</div>
</div>
';
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Pelunasan Penjualan</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-secondary mb-1 ms-2" id="butMode" type="button"><i class="bi-list me-2"></i>Normal</button>
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divTXMaster">&nbsp;</div>
<div id="divTXNota">&nbsp;</div>
<div id="divDetailNota" class="d-none">&nbsp;</div>
<div id="divDetailBayar" class="d-none">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+129
View File
@@ -0,0 +1,129 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/jual_lunas_sales.php
Desc. : PHP - Transaksi Pelunasan Sales
Created By : Siau Pheng ([email protected]).
Created Date : March 29th, 2012.
Last Modified : October 29th, 2023.
(c) 2012 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$id_sales = Param::Get("SalesID", 0);
if ( $data == "master" ) {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['PegID'=>$id_sales,'Alamat_Pegawai'=>"Tanpa Alamat Sales",'Tgl_Bayar'=>"0000-00-00"];
if ($id_sales > 0) {
$db->Query("SELECT * FROM para_pegawai WHERE PegID='".$id_sales."'");
if (!$db->Next()) {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
} else $atabel = array_merge($atabel, $db->AllRow());
}
$form = new Form($db);
$tsales = $form->option_db("_", "SalesID", $atabel['PegID'], true, false, "para_pegawai", ["PegID","Nama_Pegawai"], "Jenis_PegID='".$_SESSION['__APP_IAS']['GRUP_PEG_SALES']."' ORDER BY Nama_Pegawai", [0,"Tanpa Nama Sales"], null, "JualLunasSalesJS.data_query('master');");
$ttglbayar = $form->datebox("_", "Tgl_Bayar", $atabel['Tgl_Bayar'], true, false);
$tsalesal = $form->textarea("_", "Alamat_Pegawai", $atabel['Alamat_Pegawai'], false, false, 2);
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="SalesID">Nama Sales</label>
<div class="col">'.$tsales.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Bayar">Tanggal Bayar</label>
<div class="col-sm-7 col-lg-5">'.$ttglbayar.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Alamat Sales</label>
<div class="col">'.$tsalesal.'</div>
</div>
</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
';
} else if ( $data == "tabel-detail" ) {
if ( $mode == "bayar" ) {
$tgl_bayar = tgl_sql2str(Param::Get("Tgl_Bayar"));
$alist = Param::Get_ArrayCBOX();
foreach ($alist as $_key => $_val) {
if ($_val=="Y") {
$anota = ['Jumlah'=>0, 'Rekap'=>0];
$db->Query("SELECT (Total_Jual-Total_Diskon-Total_Potong) Jumlah,Rekap FROM inv_jual WHERE No_Jual='".$_key."'");
if ($db->Next()) $anota = $db->AllRow();
$db->Query("INSERT INTO inv_jual_lunas (No_Jual,Tgl_Bayar,Tipe,Total_Bayar,UserID) VALUES ('".$_key."','".$tgl_bayar."','1','".$anota['Jumlah']."','".user_id()."')");
$db->Query("UPDATE inv_jual SET Tgl_Lunas='".$tgl_bayar."',Total_Bayar='".$anota['Jumlah']."',Lunas=1 WHERE No_Jual='".$_key."' LIMIT 1");
if ($anota['Rekap']==0) {
$db->Query("UPDATE inv_jual SET Rekap=1 WHERE No_Jual='".$_key."' LIMIT 1");
scs_update_jual($_key, true);
}
}
}
}
$obj = new Table($db);
$obj->set_query("SELECT J.*,O.Nama_Alamat,'N' Pilih FROM (SELECT OutletID,No_Jual,Tgl_Jual,Tgl_JT,Total_Jual-Total_Diskon Total_Faktur,Total_Bayar+Total_Potong Total_Bayar,Total_Jual-Total_Diskon-Total_Bayar-Total_Potong Total_Sisa,CK FROM inv_jual WHERE Lunas=0 AND No_DO<>'' AND SalesID='".$id_sales."') J LEFT JOIN vi_para_outlet O ON (J.OutletID=O.OutletID)");
$obj->set_query_footer("SELECT SUM(Total_Jual-Total_Diskon) Total_Faktur,SUM(Total_Bayar+Total_Potong) Total_Bayar,SUM(Total_Jual-Total_Diskon-Total_Bayar-Total_Potong) Total_Sisa FROM inv_jual WHERE Lunas=0 AND No_DO<>'' AND SalesID='".$id_sales."'");
$obj->add_field("No_Jual", "No. Trans", "c");
$obj->add_field("Tgl_Jual", "Tgl. Jual", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Tgl_JT", "Jatuh Tempo", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Total_Faktur", "Faktur", "r", "rupiah", "rupiah");
$obj->add_field("Total_Bayar", "Bayar", "r", "rupiah", "rupiah");
$obj->add_field("Total_Sisa", "Sisa", "r", "rupiah", "rupiah");
$obj->add_field("CK", "C/K", "c");
$obj->set_field_order("No_Jual", "A");
$obj->add_row_checkbox("No_Jual", "Pilih", ["Y","N"]);
$obj->set_func_navi("JualLunasSalesJS.data_query('tabel-detail')");
$ajson[] = $obj->json_table("divDetailTabel");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Pelunasan Penjualan via Tagihan Penjualan</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-floppy me-2"></i>Simpan</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divTXMaster">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+249
View File
@@ -0,0 +1,249 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/jual_lunas_tagihan.php
Desc. : PHP - Transaksi Pelunasan Daftar Tagihan
Created By : Siau Pheng ([email protected]).
Created Date : March 17th, 2012.
Last Modified : January 20th, 2024.
(c) 2012 - 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$nomor = Param::Get("No_Tagih", "");
$no_jual = Param::Get("No_Jual", "");
if ( $data == "master" ) {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['No_Tagih'=>$nomor];
if ($nomor <> "") {
$db->Query("SELECT * FROM inv_jual_tagih WHERE No_Tagih='".$nomor."'");
if (!$db->Next()) {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
} else $atabel = array_merge($atabel, $db->AllRow());
if ($atabel['SalesID']>0) {
$db->Query("SELECT Nama_Pegawai,Alamat_Pegawai FROM para_pegawai WHERE PegID='".$atabel['SalesID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
}
}
$form = new Form($db);
$tnota = $form->textbox("_", "No_Tagih", $atabel['No_Tagih'], true, false, "text", "nomor transaksi");
$ttglnota = $form->datebox("_", "Tgl_Tagih", $atabel['Tgl_Tagih'], false, false);
$tsales = $form->textbox("_", "Nama_Pegawai", $atabel['Nama_Pegawai'], false, false, "text");
$tsalesal = $form->textbox("_", "Alamat_Pegawai", $atabel['Alamat_Pegawai'], false, false, "text");
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Tagih">Nomor Transaksi</label>
<div class="col"><div class="input-group">'.$tnota.'<button class="btn btn-info" type="button" onclick="JualLunasTagihanJS.tx_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Tanggal Transaksi</label>
<div class="col-sm-7 col-lg-5">'.$ttglnota.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Nama Sales</label>
<div class="col">'.$tsales.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Alamat Sales</label>
<div class="col">'.$tsalesal.'</div>
</div>
</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
';
} else if ( $data == "tabel-detail" ) {
if ( $mode_detail == "insert" ) {
$sql = new SQL($db);
$sql->set_table("inv_jual_lunas");
$sql->add_param("No_Jual");
$sql->add_param_date("Tgl_Bayar");
if (Param::Get("Tipe", 0) == 2) $sql->add_param_date("Tgl_Cair");
$sql->add_param("Tipe");
$sql->add_param("Total_Bayar");
$sql->add_param("Total_Potong");
$sql->add_param_userid();
$sql->InsertDB();
$anota = ['Bayar'=>0, 'Potong'=>0];
$db->Query("SELECT SUM(Total_Bayar) Bayar,SUM(Total_Potong) Potong FROM inv_jual_lunas WHERE No_Jual='".$no_jual."'");
if ($db->Next()) $anota = $db->AllRow();
$db->Query("UPDATE inv_jual SET Total_Bayar='".$anota['Bayar']."',Total_Potong='".$anota['Potong']."' WHERE No_Jual='".$no_jual."' LIMIT 1");
$db->Query("UPDATE inv_jual SET Lunas=IF(Total_Jual-Total_Diskon-Total_Bayar-Total_Potong=0,1,0),Tgl_Lunas=IF(Lunas=1,'".tgl_sql2str(Param::Get("Tgl_Bayar"))."','0000-00-00') WHERE No_Jual='".$no_jual."'");
if (Param::Get("Rekap",0)==0) {
$db->Query("UPDATE inv_jual SET Rekap=1 WHERE No_Jual='".$no_jual."'");
scs_update_jual($no_jual, true);
}
}
$obj = new Table($db);
$obj->set_query("SELECT J.*,O.Nama_Alamat FROM (SELECT OutletID,No_Jual,Tgl_Jual,Tgl_JT,Total_Jual-Total_Diskon Total_Faktur,Total_Bayar+Total_Potong Total_Bayar,Total_Jual-Total_Diskon-Total_Bayar-Total_Potong Total_Sisa,CK,Lunas FROM inv_jual WHERE No_Jual IN (SELECT No_Jual FROM inv_jual_tagih_detail WHERE No_Tagih='".$nomor."')) J LEFT JOIN vi_para_outlet O ON (J.OutletID=O.OutletID)");
$obj->set_query_footer("SELECT SUM(Total_Jual-Total_Diskon) Total_Faktur,SUM(Total_Bayar+Total_Potong) Total_Bayar,SUM(Total_Jual-Total_Diskon-Total_Bayar-Total_Potong) Total_Sisa FROM inv_jual WHERE No_Jual IN (SELECT No_Jual FROM inv_jual_tagih_detail WHERE No_Tagih='".$nomor."')");
$obj->add_field("No_Jual", "No. Trans", "c");
$obj->add_field("Tgl_Jual", "Tgl. Jual", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Tgl_JT", "Jatuh Tempo", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Total_Faktur", "Faktur", "r", "rupiah", "rupiah");
$obj->add_field("Total_Bayar", "Pembayaran", "r", "rupiah", "rupiah");
$obj->add_field("Total_Sisa", "Sisa", "r", "rupiah", "rupiah");
$obj->add_field("CK", "C/K", "c");
$obj->add_field("Lunas", "Lunas", "c", "checkbox");
$obj->set_field_order("No_Jual", "A");
$obj->add_row_btn("wallet2", "Bayar", "JualLunasTagihanJS.jual_detail", "Lunas", 0);
$obj->set_func_navi("JualLunasTagihanJS.data_query('tabel-detail')");
$ajson[] = $obj->json_table("divDetailTabel");
} else if ( $data == "detail-jual" ) {
$atabel = ['Tipe'=>1, 'Tgl_Bayar'=>tgl_ymd(), 'Tgl_Cair'=>tgl_ymd()];
if ($no_jual <> "") {
$db->Query("SELECT J.*,J.Total_Jual-J.Total_Diskon Jumlah,J.Total_Bayar+J.Total_Potong Bayar,S.Nama_Pegawai Nama_Sales,H.Nama_Pegawai Nama_Helper,O.Nama Nama_Operator FROM (SELECT * FROM inv_jual WHERE No_Jual='".$no_jual."' LIMIT 1) J LEFT JOIN para_pegawai S ON (J.SalesID=S.PegID) LEFT JOIN para_pegawai H ON (J.HelperID=H.PegID) LEFT JOIN app_operator O ON (J.UserID=O.UserID)");
if (!$db->Next()) {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
} else $atabel = array_merge($atabel, $db->AllRow());
$atabel['Sisa'] = $atabel['Jumlah'] - $atabel['Bayar'];
}
$form = new Form($db);
$tjual = $form->textbox("_", "No_Jual", $atabel['No_Jual'], false, false, "text");
$tjual_tgl = $form->datebox("_", "Tgl_Jual", $atabel['Tgl_Jual'], false, false);
$tsales = $form->textbox("_", "Nama_Sales", $atabel['Nama_Sales'], false, false, "text");
$thelper = $form->textbox("_", "Nama_Helper", $atabel['Nama_Helper'], false, false, "text");
$toperator = $form->textbox("_", "Nama_Operator", $atabel['Nama_Operator'], false, false, "text");
$tjumlah = $form->textbox("_", "Jumlah", $atabel['Jumlah'], false, false, "double");
$tsisa = $form->textbox("_", "Sisa", $atabel['Sisa'], false, false, "double");
$tbayar_tgl = $form->datebox("_", "Tgl_Bayar", $atabel['Tgl_Bayar'], true, false);
$tcair_tgl = $form->datebox("_", "Tgl_Cair", $atabel['Tgl_Cair'], true, false);
$tbayar = $form->textbox("_", "Total_Bayar", $atabel['Sisa'], true, false, "double");
$tpotong = $form->textbox("_", "Total_Potong", 0, true, false, "double");
$ttipe = $form->radio("_", "Tipe", $atabel['Tipe'], true, false, [1=>"Cash",2=>"Giro"], null, "JualLunasTagihanJS.oc_Tipe();");
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label">Nomor Transaksi</label>
<div class="col">'.$tjual.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label">Tanggal Transaksi</label>
<div class="col-sm-7 col-lg-5">'.$tjual_tgl.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label">Nama Operator</label>
<div class="col">'.$toperator.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label">Nama Sales</label>
<div class="col">'.$tsales.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label">Nama Helper</label>
<div class="col">'.$thelper.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label">Jumlah Faktur</label>
<div class="col">'.$tjumlah.'</div>
</div>
</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label" for="Tipe">Tipe Pembayaran</label>
<div class="col">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label" for="Tgl_Bayar">Tanggal Pembayaran</label>
<div class="col-sm-7 col-lg-5">'.$tbayar_tgl.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label" for="Tgl_Cair">Tanggal Giro</label>
<div class="col-sm-7 col-lg-5">'.$tcair_tgl.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label">Sisa Pembayaran</label>
<div class="col">'.$tsisa.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label" for="Total_Bayar">Jumlah Pembayaran</label>
<div class="col">'.$tbayar.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label" for="Total_Potong">Jumlah Potongan</label>
<div class="col">'.$tpotong.'</div>
</div>
</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="Total_Faktur" value="'.$atabel['Jumlah'].'" >
<input type="hidden" id="Total_Sisa" value="'.$atabel['Sisa'].'" >
<input type="hidden" id="Lunas" value="'.$atabel['Lunas'].'" >
<input type="hidden" id="Rekap" value="'.$atabel['Rekap'].'" >
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >
';
} else if ( $data == "brow-tx" ) {
$tcari = trim(Param::Get("Cari_TX"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(No_Tagih,DATE_FORMAT(Tgl_Tagih,'%d-%m-%Y')) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("(SELECT * FROM inv_jual_tagih".$tsql.") T LEFT JOIN para_pegawai S ON (T.SalesID=S.PegID)", "T.*,S.Nama_Pegawai", "");
$obj->add_field("No_Tagih", "No. Trans", "c");
$obj->add_field("Tgl_Tagih", "Tgl. Tagih", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Pegawai", "Nama Sales", "awr");
$obj->set_field_order("No_Tagih", "D");
$obj->add_row_btn("save", "Pilih", "JualLunasTagihanJS.tx_select");
$obj->set_func_navi("JualLunasTagihanJS.data_query('brow-tx')");
$ajson[] = $obj->db_table("divBrowTX");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Pelunasan Penjualan via Tagihan Penjualan</button>
</li>
<li class="nav-item ms-auto">&nbsp;</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divTXMaster">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+216
View File
@@ -0,0 +1,216 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/jual_pajak.php
Desc. : PHP - Pembuatan Faktur Pajak Penjualan
Created By : Siau Pheng ([email protected]).
Created Date : March 13th, 2011.
Last Modified : December 27th, 2024.
(c) 2011 - 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$nomor = Param::Get("No_Jual", "");
$no_pajak = Param::Get("No_Pajak", "");
$ppn = 0.11;
//$ppn = (tgl_sql2str(Param::Get("Tgl_Pajak",tgl_dmy())) >= $_SESSION['__APP_IAS']['PPN_TGL']) ? $_SESSION['__APP_IAS']['PPN'] : 0.11;
if ( $data == "tabel-detail" ) {
if ( $mode == "save-nsfp" && Param::Get("draw", 0)==0 ) {
// UPDATE INV_JUAL_PAJAK
$db->Query("UPDATE inv_detail SET PPN='".$ppn."' WHERE No_Ref='".$nomor."' AND InvID IN (SELECT InvID FROM inv_produk WHERE Pajak=1)");
$tot_dpp = 0;
$db->Query("SELECT SUM((-Qty*ROUND(Harga_Jual/(1+PPN),2))-IF(Total_Diskon=(-Qty*Harga_Jual),-Qty*ROUND(Harga_Jual/(1+PPN),2),ROUND(Total_Diskon/(1+PPN),2))) Total_DPP FROM inv_detail WHERE No_Ref='".$nomor."' AND InvID IN (SELECT InvID FROM inv_produk WHERE Pajak=1)");
if ($db->Next()) $tot_dpp = $db->Row("Total_DPP", 0);
$sql = new SQL($db);
$sql->set_table("inv_jual_pajak");
$sql->add_param("No_Pajak", $no_pajak);
$sql->add_param_date("Tgl_Pajak");
$sql->add_param("No_NPWP");
$sql->add_param("Nama_NPWP");
$sql->add_param("Alamat_NPWP");
$sql->add_param("PPN", $ppn);
$sql->add_param("Jumlah_DPP", "ROUND(".$tot_dpp.",2)", true);
$sql->add_param("Jumlah_PPN", "ROUND(".$tot_dpp."*PPN)", true);
$sql->add_param("OutletID");
$sql->add_param_userid();
$sql->InsertDB();
$db->Query("UPDATE inv_jual SET No_Pajak='".$no_pajak."' WHERE No_Jual='".$nomor."'");
FP_Update($no_pajak);
}
$tcari = trim(Param::Get("Cari_TX"));
$tlimit = ($tcari=="") ? "" : " AND (No_Jual LIKE '%".$tcari."%' OR No_Faktur LIKE '%".$tcari."%' OR OutletID IN (SELECT OutletID FROM para_outlet WHERE Nama_Outlet LIKE '%".$tcari."%'))";
$obj = new Table($db);
$obj->set_table("(SELECT *,Total_Jual-Total_Diskon Total FROM inv_jual WHERE Data_Jual=1 AND Rekap=1 AND No_Pajak=''".$tlimit.") J LEFT JOIN vi_para_outlet O ON (J.OutletID=O.OutletID)", "J.*,O.Nama_Alamat", "");
$obj->add_field("No_Jual", "No. Trans", "c");
$obj->add_field("Tgl_Jual", "Tgl. Jual", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$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->add_field("CK", "C/K", "c");
$obj->set_field_order("No_Jual", "A");
$obj->add_row_btn("save", "FP", "JualPajakJS.tx_select");
$obj->set_func_navi("JualPajakJS.data_query('tabel-detail')");
$ajson[] = $obj->db_table("divDetailTabel");
} else if ( $data == "detail-nsfp" ) {
$atabel = ['No_Pajak'=>"", 'Total_DPP'=>0, 'Total_PPN'=>0];
$db->Query("SELECT *,Total_Jual-Total_Diskon Total_Faktur FROM inv_jual WHERE No_Jual='".$nomor."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
$ppn = 0.11;
//$ppn = ($atabel['Tgl_Jual'] >= $_SESSION['__APP_IAS']['PPN_TGL']) ? $_SESSION['__APP_IAS']['PPN'] : 0.11;
$ppn_string = "11";
//$ppn_string = ($atabel['Tgl_Jual'] >= $_SESSION['__APP_IAS']['PPN_TGL']) ? $_SESSION['__APP_IAS']['PPN_STRING'] : "11";
$db->Query("SELECT D.Total_DPP,ROUND(D.Total_DPP*".$ppn.") Total_PPN FROM (SELECT ROUND(SUM((-Qty*ROUND(Harga_Jual/(1+".$ppn."),2))-IF(Total_Diskon=(-Qty*Harga_Jual),-Qty*ROUND(Harga_Jual/(1+".$ppn."),2),ROUND(Total_Diskon/(1+".$ppn."),2))),2) Total_DPP,PPN FROM inv_detail WHERE No_Ref='".$atabel['No_Jual']."' AND InvID IN (SELECT InvID FROM inv_produk WHERE Pajak=1)) D");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
if ($atabel['OutletID']>0) {
$db->Query("SELECT Nama_Outlet,Alamat_Outlet,Kota_Outlet,No_NPWP15,No_NPWP,Nama_NPWP,Alamat_NPWP FROM para_outlet WHERE OutletID='".$atabel['OutletID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
}
if ($atabel['No_NPWP15']==0) $atabel['No_NPWP15'] = $atabel['No_NPWP'];
$form = new Form($db);
$tnsfp = $form->textbox("_", "No_Pajak", FP_Baru(), true, false, "text", "nomor seri fp, XXX-XX.12345678");
$tnsfp_tgl = $form->datebox("_", "Tgl_Pajak", $atabel['Tgl_Jual'], true, false);
$tnpwp = $form->textbox("_", "No_NPWP", $atabel['No_NPWP15'], true, false, "text");
$tnpwp_nam = $form->textbox("_", "Nama_NPWP", $atabel['Nama_NPWP'], true, false, "text");
$tnpwp_ala = $form->textarea("_", "Alamat_NPWP", $atabel['Alamat_NPWP'], true, false, 2);
$tdpp = $form->textbox("_", "Total_DPP", $atabel['Total_DPP'], false, false, "double");
$tppn = $form->textbox("_", "Total_PPN", $atabel['Total_PPN'], false, false, "double");
$tnota = $form->textbox("_", "No_Jual", $atabel['No_Jual'], false, false, "text");
$tnota_tgl = $form->datebox("_", "Tgl_Jual", $atabel['Tgl_Jual'], false, false);
$tnota_lun = $form->datebox("_", "Tgl_Lunas", $atabel['Tgl_Lunas'], false, false);
$tout_nam = $form->textbox("_", "Nama_Outlet", $atabel['Nama_Outlet'], false, false, "text");
$tout_ala = $form->textarea("_", "Alamat_Outlet", $atabel['Alamat_Outlet'], false, false, 2);
$ttot_jual = $form->textbox("_", "Total_Jual", $atabel['Total_Jual'], false, false, "double");
$ttot_disk = $form->textbox("_", "Total_Diskon", $atabel['Total_Diskon'], false, false, "double");
$ttot_fakt = $form->textbox("_", "Total_Faktur", $atabel['Total_Faktur'], false, false, "double");
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Nomor Faktur</label>
<div class="col">'.$tnota.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Tanggal Faktur</label>
<div class="col-sm-7 col-lg-5">'.$tnota_tgl.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Tanggal Lunas</label>
<div class="col-sm-7 col-lg-5">'.$tnota_lun.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Nama Outlet</label>
<div class="col">'.$tout_nam.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Alamat Outlet</label>
<div class="col">'.$tout_ala.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Sub. Total</label>
<div class="col">'.$ttot_jual.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Diskon</label>
<div class="col">'.$ttot_disk.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Total Faktur</label>
<div class="col">'.$ttot_fakt.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Pajak">Nomor Seri FP</label>
<div class="col">'.$tnsfp.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Pajak">Tanggal FP</label>
<div class="col-sm-7 col-lg-5">'.$tnsfp_tgl.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">NPWP</label>
<div class="col">'.$tnpwp.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Nama NPWP</label>
<div class="col">'.$tnpwp_nam.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Alamat NPWP</label>
<div class="col">'.$tnpwp_ala.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">DPP</label>
<div class="col">'.$tdpp.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">PPN ('.$ppn_string.'%)</label>
<div class="col">'.$tppn.'</div>
</div>
</div>
</div>
<input type="hidden" id="OutletID" value="'.$atabel['OutletID'].'" >
';
} else if ( $data == "check-nsfp" ) {
$ada = 0;
$db->Query("SELECT COUNT(*) Item FROM biaya_pajak WHERE No_Pajak='".$no_pajak."'");
if ($db->Next()) $ada = $db->Row("Item", 0);
if ($ada == 0) {
$db->Query("SELECT COUNT(*) Item FROM inv_jual_pajak WHERE No_Pajak='".$no_pajak."'");
if ($db->Next()) $ada = $db->Row("Item", 0);
}
$ajson['ada'] = ($ada > 0) ? true : false;
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Pembuatan Faktur Pajak Penjualan</button>
</li>
<li class="nav-item ms-auto">
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div class="row mb-1">
<div class="col">
<div class="input-group"><input class="form-control" id="Cari_TX" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div>
</div>
</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+266
View File
@@ -0,0 +1,266 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/jual_pajak_2025.php
Desc. : PHP - Pembuatan FP Gabungan Penjualan 2025
Created By : Siau Pheng ([email protected]).
Created Date : March 13th, 2011.
Last Modified : January 8th, 2025.
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$nomor = Param::Get("No_Pajak", "");
$ppn = 0.11;
//$ppn = (tgl_sql2str(Param::Get("Tgl_Pajak",tgl_dmy())) >= $_SESSION['__APP_IAS']['PPN_TGL']) ? $_SESSION['__APP_IAS']['PPN'] : 0.11;
$ppn_string = "11";
//$ppn_string = ($atabel['Tgl_Pajak'] >= $_SESSION['__APP_IAS']['PPN_TGL']) ? $_SESSION['__APP_IAS']['PPN_STRING'] : "11";
if ( $data == "master" ) {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['No_Pajak'=>$nomor];
if ($mode == "add") {
$atabel['No_Pajak'] = "FPG-BARU-".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
$atabel['Tgl_Pajak'] = tgl_ymd();
$atabel['OutletID'] = 0;
$atabel['No_NPWP'] = "0000000000000000";
$atabel['No_NITKU'] = "000000";
$nomor = "";
} else if ($mode == "edit") {
// do nothing !
} else if ($mode == "save") {
$no_lama = $nomor;
$b_baru = (strpos($no_lama,"BARU")===false) ? false : true;
if ($b_baru) {
$nomor = Nomor_Baru("P", Param::Get("Tgl_Pajak"), true);
$db->Query("UPDATE inv_jual SET No_Pajak='".$nomor."' WHERE No_Pajak='".$no_lama."'");
}
// UPDATE INV_JUAL_PAJAK
$db->Query("UPDATE inv_detail A, (SELECT No_Jual FROM inv_jual WHERE No_Pajak='".$nomor."') B SET A.PPN='".$ppn."' WHERE A.No_Ref=B.No_Jual AND A.InvID IN (SELECT InvID FROM inv_produk WHERE Pajak=1)");
$tot_dpp = 0;
$db->Query("SELECT SUM((-Qty*ROUND(Harga_Jual/(1+PPN),2))-IF(Total_Diskon=(-Qty*Harga_Jual),-Qty*ROUND(Harga_Jual/(1+PPN),2),ROUND(Total_Diskon/(1+PPN),2))) Total_DPP FROM inv_detail WHERE No_Ref IN (SELECT No_Jual FROM inv_jual WHERE No_Pajak='".$nomor."') AND InvID IN (SELECT InvID FROM inv_produk WHERE Pajak=1)");
if ($db->Next()) $tot_dpp = $db->Row("Total_DPP", 0);
$sql = new SQL($db);
$sql->set_table("inv_jual_pajak");
$sql->add_param_date("Tgl_Pajak");
$sql->add_param("No_NPWP");
$sql->add_param("No_NITKU");
$sql->add_param("Nama_NPWP");
$sql->add_param("Alamat_NPWP");
$sql->add_param("PPN", $ppn);
$sql->add_param("Jumlah_DPP", "FLOOR(".$tot_dpp.")", true);
$sql->add_param("Jumlah_PPN", "FLOOR(".$tot_dpp."*PPN)", true);
$sql->add_param("OutletID");
$sql->add_param_userid();
$sql->add_where("No_Pajak", $nomor);
$sql->UpdateDB();
$mode = "view";
} else if ($mode == "cancel") {
$db->Query("UPDATE inv_jual SET No_Pajak='' WHERE No_Pajak='".$nomor."'");
$mode = "view";
$nomor = ""; $atabel['No_Pajak'] = "";
}
if ($nomor <> "" && $mode <> "cancel") {
$db->Query("SELECT * FROM inv_jual_pajak WHERE No_Pajak='".$nomor."'");
if (!$db->Next()) {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
} else $atabel = array_merge($atabel, $db->AllRow());
}
$enable = in_array($mode, ["add","edit"]) ? true : false;
$form = new Form($db);
$tnsfp = $form->textbox("_", "No_Pajak", $atabel['No_Pajak'], !$enable, false, "text", "nomor transaksi");
$tnsfp_tgl = $form->datebox("_", "Tgl_Pajak", $atabel['Tgl_Pajak'], $enable, false);
$tnpwp = $form->textbox("_", "No_NPWP", $atabel['No_NPWP'], $enable, false, "text");
$tnpwp_nam = $form->textbox("_", "Nama_NPWP", $atabel['Nama_NPWP'], $enable, false, "text");
$tnpwp_ala = $form->textarea("_", "Alamat_NPWP", $atabel['Alamat_NPWP'], $enable, false, 2);
$tdpp = $form->textbox("_", "Jumlah_DPP", $atabel['Jumlah_DPP'], false, false, "double");
$tppn = $form->textbox("_", "Jumlah_PPN", $atabel['Jumlah_PPN'], false, false, "double");
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Pajak">Nomor Transaksi</label>
<div class="col"><div class="input-group">'.$tnsfp.'<button id="butBrow" class="btn btn-info" type="button" onclick="JualPajak2025JS.tx_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Pajak">Tanggal FP</label>
<div class="col-sm-7 col-lg-5">'.$tnsfp_tgl.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Jumlah DPP</label>
<div class="col">'.$tdpp.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Jumlah PPN ('.$ppn_string.'%)</label>
<div class="col">'.$tppn.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_NPWP">NPWP</label>
<div class="col"><div class="input-group">'.$tnpwp.'<button class="btn '.($enable?'btn-info':'btn-secondary').'" type="button"'.($enable?'':' disabled').' onclick="JualPajak2025JS.npwp_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Nama_NPWP">Nama NPWP</label>
<div class="col">'.$tnpwp_nam.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Alamat_NPWP">Alamat NPWP</label>
<div class="col">'.$tnpwp_ala.'</div>
</div>
</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="OutletID" value="'.$atabel['OutletID'].'" >
<input type="hidden" id="No_NPWP2" value="'.$atabel['No_NPWP'].'" >
<input type="hidden" id="No_NITKU" value="'.$atabel['No_NITKU'].'" >
<input type="hidden" id="mode" value="'.$mode.'" >';
} else if ( $data == "delete" ) {
$db->Query("UPDATE inv_detail SET PPN=0 WHERE No_Ref IN (SELECT No_Jual FROM inv_jual WHERE No_Pajak='".$nomor."')");
$db->Query("UPDATE inv_jual SET No_Pajak='' WHERE No_Pajak='".$nomor."'");
$db->Query("DELETE FROM inv_jual_pajak WHERE No_Pajak='".$nomor."'");
$ajson['status'] = true;
} else if ( $data == "tabel-detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
if ( $mode_detail == "insert" ) {
$alist = Param::Get_ArrayCBOX();
foreach ($alist as $_key => $_val) {
if ($_val=="Y") $db->Query("UPDATE inv_jual SET No_Pajak='".$nomor."' WHERE No_Jual='".$_key."' LIMIT 1");
}
} else if ( $mode_detail == "delete" ) {
$db->Query("UPDATE inv_jual SET No_Pajak='' WHERE No_Jual='".Param::Get("No_Jual")."' LIMIT 1");
}
$tot_dpp = 0; $tot_ppn = 0;
$db->Query("SELECT D.Total_DPP,FLOOR(D.Total_DPP*D.PPN) Total_PPN FROM (SELECT FLOOR(SUM((-Qty*ROUND(Harga_Jual/(1+PPN),2))-IF(Total_Diskon=(-Qty*Harga_Jual),-Qty*ROUND(Harga_Jual/(1+PPN),2),ROUND(Total_Diskon/(1+PPN),2)))) Total_DPP,PPN FROM inv_detail WHERE No_Ref IN (SELECT No_Jual FROM inv_jual WHERE No_Pajak='".$nomor."') AND InvID IN (SELECT InvID FROM inv_produk WHERE Pajak=1)) D");
if ($db->Next()) {
$tot_dpp = $db->Row("Total_DPP", 0);
$tot_ppn = $db->Row("Total_PPN", 0);
}
$ajson[] = ['type'=>"form", 'id'=>"Jumlah_DPP", 'value'=>rupiah($tot_dpp)];
$ajson[] = ['type'=>"form", 'id'=>"Jumlah_PPN", 'value'=>rupiah($tot_ppn)];
}
$obj = new Table($db);
$obj->set_query("SELECT J.*,O.Nama_Alamat FROM (SELECT OutletID,No_Pajak,No_Jual,Tgl_Jual,Tgl_JT,Total_Jual,Total_Diskon,Total_Jual-Total_Diskon Total,CK FROM inv_jual WHERE".($nomor==""?" FALSE":" No_Pajak='".$nomor."'").") J LEFT JOIN vi_para_outlet O ON (J.OutletID=O.OutletID)");
$obj->set_query_footer("SELECT SUM(Total_Jual) Total_Jual,SUM(Total_Diskon) Total_Diskon,SUM(Total_Jual-Total_Diskon) Total FROM inv_jual WHERE".((trim($nomor)=="")?" FALSE":" No_Pajak='".$nomor."'"));
$obj->add_field("No_Jual", "No. Trans", "c");
$obj->add_field("Tgl_Jual", "Tgl. Jual", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Total_Jual", "Sub. Total", "r", "rupiah", "rupiah");
$obj->add_field("Total_Diskon", "Diskon", "r", "rupiah", "rupiah");
$obj->add_field("Total", "TOTAL", "r", "rupiah", "rupiah");
$obj->add_field("CK", "C/K", "c");
$obj->set_field_order("No_Jual", "A");
if (in_array($mode, ["add","edit"])) {
$obj->add_row_btn("trash", "Hapus", "JualPajak2025JS.jual_hapus", "No_Pajak", $nomor);
$obj->set_func_btn("JualPajak2025JS.jual_brow", '<i class="bi-table me-1"></i> Browse');
}
$obj->set_func_navi("JualPajak2025JS.data_query('tabel-detail')");
$ajson[] = $obj->json_table("divDetailTabel");
} else if ( $data == "brow-tx" ) {
$tcari = trim(Param::Get("Cari_TX"));
$tsql = ($tcari=="") ? "" : " AND CONCAT(No_Pajak,No_NPWP,DATE_FORMAT(Tgl_Pajak,'%d-%m-%Y')) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("(SELECT * FROM inv_jual_pajak WHERE LEFT(No_Pajak,1)='P'".$tsql.") P", "P.*", "");
$obj->add_field("No_Pajak", "NSFP", "c");
$obj->add_field("Tgl_Pajak", "Tgl. Pajak", "c", "sqltgl", null, "val-tgl");
$obj->add_field("No_NPWP", "NPWP", "l");
$obj->add_field("Nama_NPWP", "Nama NPWP", "awr");
$obj->set_field_order("No_Pajak", "D");
$obj->add_row_btn("save", "Pilih", "JualPajak2025JS.tx_select");
$obj->set_func_navi("JualPajak2025JS.data_query('brow-tx')");
$ajson[] = $obj->db_table("divBrowTX");
} else if ( $data == "brow-npwp" ) {
$tcari = trim(Param::Get("Cari_NPWP"));
$tsql = ($tcari=="") ? "" : " AND CONCAT_WS(Nama_Outlet,No_NPWP15,Nama_NPWP,No_NPWP) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("vi_para_outlet", "*", "Aktif=1 AND GG=1".$tsql);
$obj->add_field("OutletID", "ID", "hid");
$obj->add_field("No_NPWP", "NPWP", "c");
$obj->add_field("No_NITKU", "NITKU", "c");
$obj->add_field("Nama_NPWP", "Nama NPWP / NIK", "awr");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Alamat_NPWP", "Alamat NPWP", "hid");
$obj->set_field_order("No_NPWP_NIK", "A");
$obj->add_row_btn("save", "Pilih", "JualPajak2025JS.npwp_select");
$obj->set_func_navi("JualPajak2025JS.data_query('brow-npwp')");
$ajson[] = $obj->db_table("divBrowNPWP");
} else if ( $data == "brow-jual" ) {
$tcari = trim(Param::Get("Cari_Jual"));
$tlimit = ($tcari=="") ? " AND OutletID IN (SELECT OutletID FROM para_outlet WHERE GG=1)" : " AND (No_Jual LIKE '%".$tcari."%' OR No_Faktur LIKE '%".$tcari."%' OR OutletID IN (SELECT OutletID FROM para_outlet WHERE GG=1 AND Nama_Outlet LIKE '%".$tcari."%'))";
$obj = new Table($db);
$obj->set_table("(SELECT *,Total_Jual-Total_Diskon Total FROM inv_jual WHERE Data_Jual=1 AND Rekap=1 AND No_Pajak=''".$tlimit.") J LEFT JOIN vi_para_outlet O ON (J.OutletID=O.OutletID)", "J.*,O.Nama_Alamat,'N' Nota", "");
$obj->add_field("No_Jual", "No. Trans", "c");
$obj->add_field("Tgl_Jual", "Tgl. Jual", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$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->add_field("CK", "C/K", "c");
$obj->set_field_order("No_Jual", "A");
$obj->add_row_checkbox("No_Jual", "Nota", ["Y","N"]);
$obj->set_func_navi("JualPajak2025JS.data_query('brow-jual')");
$ajson[] = $obj->db_table("divBrowJual");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Pembuatan FP Gabungan Penjualan 2025</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
<button class="btn btn-secondary mb-1 ms-2 d-none" id="butPrint" type="button"><i class="bi-printer me-2"></i>Cetak</button>
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-floppy me-2"></i>Simpan</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divTXMaster">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+277
View File
@@ -0,0 +1,277 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/jual_pajak_gab.php
Desc. : PHP - Pembuatan Faktur Pajak Gabungan Penjualan
Created By : Siau Pheng ([email protected]).
Created Date : March 13th, 2011.
Last Modified : December 27th, 2024.
(c) 2011 - 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$nomor = Param::Get("No_Pajak", "");
$no_trx = Param::Get("No_TRX", "");
$ppn = 0.11;
//$ppn = (tgl_sql2str(Param::Get("Tgl_Pajak",tgl_dmy())) >= $_SESSION['__APP_IAS']['PPN_TGL']) ? $_SESSION['__APP_IAS']['PPN'] : 0.11;
$ppn_string = "11";
//$ppn_string = ($atabel['Tgl_Pajak'] >= $_SESSION['__APP_IAS']['PPN_TGL']) ? $_SESSION['__APP_IAS']['PPN_STRING'] : "11";
if ( $data == "master" ) {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['No_Pajak'=>$nomor];
if ($mode == "add") {
$atabel['No_TRX'] = "FP-BARU-".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
$atabel['No_Pajak'] = FP_Baru();
$atabel['Tgl_Pajak'] = tgl_ymd();
$atabel['OutletID'] = 0;
$atabel['No_NPWP'] = "000000000000000";//todo: update npwp16
$nomor = "";
} else if ($mode == "edit") {
// do nothing !
} else if ($mode == "save") {
$b_baru = (strpos($no_trx,"BARU")===false) ? false : true;
if ($b_baru) $db->Query("UPDATE inv_jual SET No_Pajak='".$nomor."' WHERE No_Pajak='".$no_trx."'");
// UPDATE INV_JUAL_PAJAK
$db->Query("UPDATE inv_detail A, (SELECT No_Jual FROM inv_jual WHERE No_Pajak='".$nomor."') B SET A.PPN='".$ppn."' WHERE A.No_Ref=B.No_Jual AND A.InvID IN (SELECT InvID FROM inv_produk WHERE Pajak=1)");
$tot_dpp = 0;
$db->Query("SELECT SUM((-Qty*ROUND(Harga_Jual/(1+PPN),2))-IF(Total_Diskon=(-Qty*Harga_Jual),-Qty*ROUND(Harga_Jual/(1+PPN),2),ROUND(Total_Diskon/(1+PPN),2))) Total_DPP FROM inv_detail WHERE No_Ref IN (SELECT No_Jual FROM inv_jual WHERE No_Pajak='".$nomor."') AND InvID IN (SELECT InvID FROM inv_produk WHERE Pajak=1)");
if ($db->Next()) $tot_dpp = $db->Row("Total_DPP", 0);
$sql = new SQL($db);
$sql->set_table("inv_jual_pajak");
$sql->add_param_date("Tgl_Pajak");
$sql->add_param("No_NPWP");
$sql->add_param("Nama_NPWP");
$sql->add_param("Alamat_NPWP");
$sql->add_param("PPN", $ppn);
$sql->add_param("Jumlah_DPP", "ROUND(".$tot_dpp.",2)", true);
$sql->add_param("Jumlah_PPN", "ROUND(".$tot_dpp."*PPN)", true);
$sql->add_param("OutletID");
$sql->add_param_userid();
$sql->add_where("No_Pajak", $nomor);
if ($b_baru) {
$sql->add_param("No_Pajak", $nomor);
$sql->InsertDB();
} else $sql->UpdateDB();
FP_Update($nomor);
$mode = "view";
} else if ($mode == "cancel") {
$db->Query("UPDATE inv_jual SET No_Pajak='' WHERE No_Pajak='".$no_trx."'");
$mode = "view";
$nomor = ""; $atabel['No_Pajak'] = "";
}
if ($nomor <> "" && $mode <> "cancel") {
$db->Query("SELECT * FROM inv_jual_pajak WHERE No_Pajak='".$nomor."'");
if (!$db->Next()) {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
} else $atabel = array_merge($atabel, $db->AllRow());
$atabel['No_TRX'] = $atabel['No_Pajak'];
}
$enable = in_array($mode, ["add","edit"]) ? true : false;
$form = new Form($db);
$tnsfp = $form->textbox("_", "No_Pajak", $atabel['No_Pajak'], ($mode=="edit"?false:true), false, "text", "nomor seri fp, XXX-XX.12345678");
$tnsfp_tgl = $form->datebox("_", "Tgl_Pajak", $atabel['Tgl_Pajak'], $enable, false);
$tnpwp = $form->textbox("_", "No_NPWP", $atabel['No_NPWP'], $enable, false, "text");
$tnpwp_nam = $form->textbox("_", "Nama_NPWP", $atabel['Nama_NPWP'], $enable, false, "text");
$tnpwp_ala = $form->textarea("_", "Alamat_NPWP", $atabel['Alamat_NPWP'], $enable, false, 2);
$tdpp = $form->textbox("_", "Jumlah_DPP", $atabel['Jumlah_DPP'], false, false, "double");
$tppn = $form->textbox("_", "Jumlah_PPN", $atabel['Jumlah_PPN'], false, false, "double");
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Pajak">Nomor Seri FP</label>
<div class="col"><div class="input-group">'.$tnsfp.'<button id="butBrow" class="btn btn-info" type="button" onclick="JualPajakGabJS.tx_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Pajak">Tanggal FP</label>
<div class="col-sm-7 col-lg-5">'.$tnsfp_tgl.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Jumlah DPP</label>
<div class="col">'.$tdpp.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Jumlah PPN ('.$ppn_string.'%)</label>
<div class="col">'.$tppn.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_NPWP">NPWP</label>
<div class="col"><div class="input-group">'.$tnpwp.'<button class="btn '.($enable?'btn-info':'btn-secondary').'" type="button"'.($enable?'':' disabled').' onclick="JualPajakGabJS.npwp_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Nama_NPWP">Nama NPWP</label>
<div class="col">'.$tnpwp_nam.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Alamat_NPWP">Alamat NPWP</label>
<div class="col">'.$tnpwp_ala.'</div>
</div>
</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="OutletID" value="'.$atabel['OutletID'].'" >
<input type="hidden" id="No_NPWP2" value="'.$atabel['No_NPWP'].'" >
<input type="hidden" id="No_TRX" value="'.$atabel['No_TRX'].'" >
<input type="hidden" id="mode" value="'.$mode.'" >
';
} else if ( $data == "delete" ) {
$db->Query("UPDATE inv_detail A,(SELECT No_Jual FROM inv_jual WHERE No_Pajak='".$nomor."') B SET A.PPN=0 WHERE A.No_Ref=B.No_Jual");
$db->Query("UPDATE inv_jual SET No_Pajak='' WHERE No_Pajak='".$nomor."'");
$db->Query("DELETE FROM inv_jual_pajak WHERE No_Pajak='".$nomor."'");
$ajson['status'] = true;
} else if ( $data == "tabel-detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
if ( $mode_detail == "insert" ) {
$alist = Param::Get_ArrayCBOX();
foreach ($alist as $_key => $_val) {
if ($_val=="Y") $db->Query("UPDATE inv_jual SET No_Pajak='".$no_trx."' WHERE No_Jual='".$_key."' LIMIT 1");
}
} else if ( $mode_detail == "delete" ) {
$db->Query("UPDATE inv_jual SET No_Pajak='' WHERE No_Jual='".Param::Get("No_Jual")."' LIMIT 1");
}
$tot_dpp = 0; $tot_ppn = 0;
$db->Query("SELECT D.Total_DPP,ROUND(D.Total_DPP*D.PPN) Total_PPN FROM (SELECT ROUND(SUM((-Qty*ROUND(Harga_Jual/(1+PPN),2))-IF(Total_Diskon=(-Qty*Harga_Jual),-Qty*ROUND(Harga_Jual/(1+PPN),2),ROUND(Total_Diskon/(1+PPN),2))),2) Total_DPP,PPN FROM inv_detail WHERE No_Ref IN (SELECT No_Jual FROM inv_jual WHERE No_Pajak='".$no_trx."') AND InvID IN (SELECT InvID FROM inv_produk WHERE Pajak=1)) D");
if ($db->Next()) {
$tot_dpp = $db->Row("Total_DPP", 0);
$tot_ppn = $db->Row("Total_PPN", 0);
}
$ajson[] = ['type'=>"form", 'id'=>"Jumlah_DPP", 'value'=>rupiah($tot_dpp)];
$ajson[] = ['type'=>"form", 'id'=>"Jumlah_PPN", 'value'=>rupiah($tot_ppn)];
}
$obj = new Table($db);
$obj->set_query("SELECT J.*,O.Nama_Alamat FROM (SELECT OutletID,No_Pajak,No_Jual,Tgl_Jual,Tgl_JT,Total_Jual,Total_Diskon,Total_Jual-Total_Diskon Total,CK FROM inv_jual WHERE".($no_trx==""?" FALSE":" No_Pajak='".$no_trx."'").") J LEFT JOIN vi_para_outlet O ON (J.OutletID=O.OutletID)");
$obj->set_query_footer("SELECT SUM(Total_Jual) Total_Jual,SUM(Total_Diskon) Total_Diskon,SUM(Total_Jual-Total_Diskon) Total FROM inv_jual WHERE".((trim($no_trx)=="")?" FALSE":" No_Pajak='".$no_trx."'"));
$obj->add_field("No_Jual", "No. Trans", "c");
$obj->add_field("Tgl_Jual", "Tgl. Jual", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Total_Jual", "Sub. Total", "r", "rupiah", "rupiah");
$obj->add_field("Total_Diskon", "Diskon", "r", "rupiah", "rupiah");
$obj->add_field("Total", "TOTAL", "r", "rupiah", "rupiah");
$obj->add_field("CK", "C/K", "c");
$obj->set_field_order("No_Jual", "A");
if (in_array($mode, ["add","edit"])) {
$obj->add_row_btn("trash", "Hapus", "JualPajakGabJS.jual_hapus", "No_Pajak", $no_trx);
$obj->set_func_btn("JualPajakGabJS.jual_brow", '<i class="bi-table me-1"></i> Browse');
}
$obj->set_func_navi("JualPajakGabJS.data_query('tabel-detail')");
$ajson[] = $obj->json_table("divDetailTabel");
} else if ( $data == "brow-tx" ) {
$tcari = trim(Param::Get("Cari_TX"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(No_Pajak,No_NPWP,DATE_FORMAT(Tgl_Pajak,'%d-%m-%Y')) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("(SELECT * FROM inv_jual_pajak".$tsql.") P", "P.*", "");
$obj->add_field("No_Pajak", "NSFP", "c");
$obj->add_field("Tgl_Pajak", "Tgl. Pajak", "c", "sqltgl", null, "val-tgl");
$obj->add_field("No_NPWP", "NPWP", "l");
$obj->add_field("Nama_NPWP", "Nama NPWP", "awr");
$obj->set_field_order("No_Pajak", "D");
$obj->add_row_btn("save", "Pilih", "JualPajakGabJS.tx_select");
$obj->set_func_navi("JualPajakGabJS.data_query('brow-tx')");
$ajson[] = $obj->db_table("divBrowTX");
} else if ( $data == "brow-npwp" ) {
$tcari = trim(Param::Get("Cari_NPWP"));
$tsql = ($tcari=="") ? "" : " AND CONCAT_WS(Nama_Outlet,No_NPWP15,Nama_NPWP,No_NPWP) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("vi_para_outlet", "*,IF(No_NPWP15=0,No_NPWP,No_NPWP15) No_NPWP_NIK", "Aktif=1".$tsql);
$obj->add_field("OutletID", "ID", "hid");
$obj->add_field("No_NPWP_NIK", "NPWP", "c");
$obj->add_field("Nama_NPWP", "Nama NPWP / NIK", "awr");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Alamat_NPWP", "Alamat NPWP", "hid");
$obj->set_field_order("No_NPWP_NIK", "A");
$obj->add_row_btn("save", "Pilih", "JualPajakGabJS.npwp_select");
$obj->set_func_navi("JualPajakGabJS.data_query('brow-npwp')");
$ajson[] = $obj->db_table("divBrowNPWP");
} else if ( $data == "brow-jual" ) {
$tcari = trim(Param::Get("Cari_Jual"));
$tlimit = ($tcari=="") ? "" : " AND (No_Jual LIKE '%".$tcari."%' OR No_Faktur LIKE '%".$tcari."%' OR OutletID IN (SELECT OutletID FROM para_outlet WHERE Nama_Outlet LIKE '%".$tcari."%'))";
$obj = new Table($db);
$obj->set_table("(SELECT *,Total_Jual-Total_Diskon Total FROM inv_jual WHERE Data_Jual=1 AND Rekap=1 AND No_Pajak=''".$tlimit.") J LEFT JOIN vi_para_outlet O ON (J.OutletID=O.OutletID)", "J.*,O.Nama_Alamat,'N' Nota", "");
$obj->add_field("No_Jual", "No. Trans", "c");
$obj->add_field("Tgl_Jual", "Tgl. Jual", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$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->add_field("CK", "C/K", "c");
$obj->set_field_order("No_Jual", "A");
$obj->add_row_checkbox("No_Jual", "Nota", ["Y","N"]);
$obj->set_func_navi("JualPajakGabJS.data_query('brow-jual')");
$ajson[] = $obj->db_table("divBrowJual");
} else if ( $data == "check-nsfp" ) {
$ada = 0;
$db->Query("SELECT COUNT(*) Item FROM biaya_pajak WHERE No_Pajak='".$nomor."'");
if ($db->Next()) $ada = $db->Row("Item", 0);
if ($ada == 0) {
$db->Query("SELECT COUNT(*) Item FROM inv_jual_pajak WHERE No_Pajak='".$nomor."'");
if ($db->Next()) $ada = $db->Row("Item", 0);
}
$ajson['ada'] = ($ada > 0) ? true : false;
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Pembuatan Faktur Pajak Gabungan Penjualan</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
<button class="btn btn-secondary mb-1 ms-2" id="butPrint" type="button"><i class="bi-printer me-2"></i>Cetak</button>
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-floppy me-2"></i>Simpan</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divTXMaster">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+359
View File
@@ -0,0 +1,359 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/jual_retur.php
Desc. : PHP - Transaksi Retur Penjualan
Created By : Siau Pheng ([email protected]).
Created Date : March 28th, 2011.
Last Modified : October 29th, 2023.
(c) 2011 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$nomor = Param::Get("No_Jual", "");
if ( $data == "master" ) {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['No_Jual'=>$nomor];
if ($mode == "add") {
$atabel['No_Jual'] = "RJ-BARU-".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
$atabel['Tgl_Jual'] = tgl_ymd();
$atabel['GudangID'] = 1;
$atabel['OutletID'] = 0;
$nomor = "";
} else if ($mode == "edit") {
Detail_Copy($nomor);
} else if ($mode == "save") {
$no_lama = $nomor;
$b_baru = (strpos($no_lama,"BARU")===false) ? false : true;
if ($b_baru) $nomor = Nomor_Baru("R", Param::Get("Tgl_Jual"), true);
Detail_Save($nomor, Param::Get("Tgl_Jual"), Param::Get("GudangID"), $b_baru, $no_lama);
$anota = ['Retur_Jual'=>0];
$db->Query("SELECT SUM(-Qty*Harga_Jual) Retur_Jual FROM inv_detail WHERE No_Ref='".$nomor."'");
if ($db->Next()) $anota = $db->AllRow();
$sql = new SQL($db);
$sql->set_table("inv_jual");
//$sql->add_param("No_Jual", $nomor);
$sql->add_param_date("Tgl_Jual");
$sql->add_param("GudangID");
$sql->add_param("OutletID");
$sql->add_param("Total_Jual", $anota['Retur_Jual']);
$sql->add_param("Data_Jual", 0);
$sql->add_param("Catatan");
$sql->add_param_userid();
$sql->add_where("No_Jual", $nomor);
if ($b_baru) $sql->add_param_date("Tgl_Nota", Param::Get("Tgl_Jual"));
$sql->UpdateDB();
$mode = "view";//todo: print jika langsung cetak
} else if ($mode == "cancel") {
Detail_Cancel($nomor);
$mode = "view";
$nomor = ""; $atabel['No_Jual'] = "";
}
if ($nomor <> "" && $mode <> "cancel") {
$db->Query("SELECT * FROM inv_jual WHERE Data_Jual=0 AND No_Jual='".$nomor."'");
if (!$db->Next()) {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
} else $atabel = array_merge($atabel, $db->AllRow());
if ($atabel['OutletID']>0) {
$db->Query("SELECT Nama_Alamat Nama_Outlet,Alamat_Kota Alamat_Outlet FROM vi_para_outlet WHERE OutletID='".$atabel['OutletID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
}
}
$enable = in_array($mode, ["add","edit"]) ? true : false;
$form = new Form($db);
$tnota = $form->textbox("_", "No_Jual", $atabel['No_Jual'], !$enable, true, "text", "nomor transaksi");
$ttglnota = $form->datebox("_", "Tgl_Jual", $atabel['Tgl_Jual'], $enable, true);
$tgud = $form->option_db("_", "GudangID", $atabel['GudangID'], $enable, true, "vi_para_gudang", ["GudangID","Nama_Gudang2"], "Aktif=1 ORDER BY Nama_Gudang", [0,"&nbsp;"]);
$toutl = $form->textauto("_", "Nama_Outlet", ['value'=>$atabel['OutletID'],'text'=>$atabel['Nama_Outlet']], $enable, true, "ketik nama outlet");
$toutlal = $form->textbox("_", "Alamat_Outlet", $atabel['Alamat_Outlet'], false, false, "text");
$tcatat = $form->textarea("_", "Catatan", $atabel['Catatan'], $enable, true, 1);
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Jual">Nomor Transaksi</label>
<div class="col"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="JualReturJS.tx_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Jual">Tanggal Transaksi</label>
<div class="col-sm-7 col-lg-5">'.$ttglnota.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="GudangID">Lokasi Gudang</label>
<div class="col">'.$tgud.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Nama_Outlet">Nama Outlet</label>
<div class="col"><div class="input-group">'.$toutl.'<button class="btn '.($enable?'btn-info':'btn-secondary').'" type="button"'.($enable?'':' disabled').' onclick="JualReturJS.outlet_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Alamat Outlet</label>
<div class="col">'.$toutlal.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Catatan">Catatan</label>
<div class="col">'.$tcatat.'</div>
</div>
</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="OutletID" value="'.$atabel['OutletID'].'" >
<input type="hidden" id="Lunas" value="'.$atabel['Lunas'].'" >
<input type="hidden" id="mode" value="'.$mode.'" >
';
} else if ( $data == "delete" ) {
$db->Query("DELETE FROM inv_jual WHERE No_Jual='".$nomor."'");
$db->Query("DELETE FROM inv_detail WHERE No_Ref='".$nomor."'");
$ajson['status'] = true;
} else if ( $data == "tabel-detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
$iqty = doubleval(Param::Get("Qty", 0)) * 1; $istok = $iqty;
$db->Query("SELECT Qty FROM inv_produk_kemasan WHERE InvID='".Param::Get("InvID")."' AND SatuanID='".Param::Get("SatuanID")."'");
if ($db->Next()) $istok = $db->Row("Qty", 1) * $iqty;
$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("RasaID");
$sql->add_param("Qty", $iqty);
$sql->add_param("Stok", $istok);
$sql->add_param("Harga_Jual");
$sql->add_param_unix();
$sql->add_param_userid();
$sql->add_where("ID");
$sql->add_where("No_Ref", $nomor);
if ( $mode_detail == "insert" ) {
$sql->add_param("Harga_Pokok");
$sql->add_param("NotaID", 6);
$sql->InsertDB();
} else if ( $mode_detail == "update" ) {
$sql->UpdateDB();
} else if ( $mode_detail == "delete" ) {
$sql->DeleteDB();
}
}
$qview = ""; $qtabel = "inv_detail";
if (in_array($mode, ["add","edit"])) {
if ($mode=="add") $qview = " AND Unix=".user_unix();
$qtabel = "tmp_inv_detail";
}
$obj = new Table($db);
$obj->set_query("SELECT D.*,P.Nama_Lengkap2 Nama_Produk,P.Nama_Satuan,R.Nama_Rasa,(D.Qty*D.Harga_Jual) Total FROM (SELECT * FROM ".$qtabel." WHERE No_Ref='".$nomor."'".$qview.") D LEFT JOIN vi_inv_produk2 P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID) LEFT JOIN para_rasa R ON (D.RasaID=R.RasaID)");
$obj->set_query_footer("SELECT COUNT(*) Harga_Jual,SUM(D.Qty*D.Harga_Jual) Total FROM (SELECT * FROM ".$qtabel." WHERE No_Ref='".$nomor."' ".$qview.") D");
$obj->add_field("ID", "ID", "c");
$obj->add_field("Nama_Produk", "Nama Produk", "awr");
$obj->add_field("Nama_Rasa", "Varian / Rasa", "l");
$obj->add_field("Qty", "Qty", "r", "rupiah2");
$obj->add_field("Harga_Jual", "Harga @", "r", "rupiah", "items");
$obj->add_field("Total_Diskon", "Diskon", "r", "rupiah", "rupiah");
$obj->add_field("Total", "TOTAL", "r", "rupiah", "rupiah");
$obj->set_field_order("ID", "A");
if (in_array($mode, ["add","edit"])) {
$obj->add_row_btn("clipboard", "Ubah", "JualReturJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "JualReturJS.detail_hapus", "Unix", user_unix());
$obj->set_func_btn("JualReturJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Produk');
$obj->set_func_btn("JualReturJS.produk_brow", '<i class="bi-table me-1"></i> Browse');
}
$obj->set_func_navi("JualReturJS.data_query('tabel-detail')");
$ajson[] = $obj->json_table("divDetailTabel");
} else if ( $data == "brow-tx" ) {
$tcari = trim(Param::Get("Cari_TX"));
$tlimit = ($tcari=="") ? "" : " AND (No_Jual LIKE '%".$tcari."%' OR Catatan LIKE '%".$tcari."%' OR OutletID IN (SELECT OutletID FROM para_outlet WHERE Nama_Outlet LIKE '%".$tcari."%'))";
$obj = new Table($db);
$obj->set_table("(SELECT *,-Total_Jual Jumlah FROM inv_jual WHERE Data_Jual=0".$tlimit.") J LEFT JOIN vi_para_outlet O ON (J.OutletID=O.OutletID)", "J.*,O.Nama_Alamat", "");
$obj->add_field("No_Jual", "No. Trans", "c");
$obj->add_field("Tgl_Jual", "Tgl. Retur", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Jumlah", "Total Retur", "r", "rupiah");
$obj->set_field_order("No_Jual", "D");
$obj->add_row_btn("save", "Pilih", "JualReturJS.tx_select");
$obj->set_func_navi("JualReturJS.data_query('brow-tx')");
$ajson[] = $obj->db_table("divBrowTX");
} else if ( $data == "brow-outlet" ) {
$tcari = trim(Param::Get("Cari_Outlet"));
$tsql = ($tcari=="") ? "" : " AND CONCAT(Nama_Outlet,Telp_Outlet,Nama_Outlet) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("vi_para_outlet", "*", "Aktif=1".$tsql);
$obj->add_field("OutletID", "ID", "hid");
$obj->add_field("Kode_Outlet", "Kode", "c");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Alamat_Kota", "Alamat & Kota", "awr");
$obj->set_field_order("Nama_Outlet", "A");
$obj->add_row_btn("save", "Pilih", "JualReturJS.outlet_select");
$obj->set_func_navi("JualReturJS.data_query('brow-outlet')");
$ajson[] = $obj->db_table("divBrowOutlet");
} else if ( $data == "brow-produk" ) {
$tcari = trim(Param::Get("Cari_Produk"));
$tsql = ($tcari=="") ? "" : " AND CONCAT(Kode_Produk,Nama_Lengkap) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM vi_inv_produk2 WHERE Aktif=1".$tsql);
$obj->add_field("InvID", "ID", "hid");
$obj->add_field("SatuanID", "SatuanID", "hid");
$obj->add_field("Kode_Produk", "Kode", "c");
$obj->add_field("Nama_Lengkap2", "Nama Produk", "awr");
$obj->set_field_order("Nama_Lengkap", "A");
$obj->add_row_btn("save", "Pilih", "JualReturJS.produk_select");
$obj->set_func_navi("JualReturJS.data_query('brow-produk')");
$ajson[] = $obj->json_table("divBrowProduk");
} else if ( $data == "auto-outlet" ) {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
if (is_string($tcari) && strlen($tcari) < 64) {
$db->Query("SELECT * FROM vi_para_outlet WHERE Aktif=1 AND CONCAT(Nama_Outlet,Alamat_Outlet) LIKE '%".$tcari."%' ORDER BY Nama_Outlet LIMIT 50");
while ($db->Next()) {
$ajson['autodata'][] = ['value'=>$db->Row("OutletID"), 'text'=>$db->Row("Nama_Alamat"), 'data'=>$db->Row("Alamat_Kota")];
}
}
} else if ( $data == "auto-produk" ) {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
if (is_string($tcari) && strlen($tcari) < 64) {
$db->Query("SELECT P.InvID,P.Nama_Lengkap,CONCAT(P.SatuanID,':',P.Nama_Satuan) Data2 FROM vi_inv_produk2 P WHERE Aktif=1 AND CONCAT(Nama_Lengkap) LIKE '%".$tcari."%' ORDER BY Nama_Lengkap LIMIT 50");
while ($db->Next()) {
$ajson['autodata'][] = ['value'=>$db->Row("InvID"), 'text'=>$db->Row("Nama_Lengkap"), 'data'=>$db->Row("Data2")];
}
}
} else if ($data == "detail-produk") {
$id = Param::Get("ID", 0); $atabel = ['ID'=>$id, 'InvID'=>Param::Get("InvID",0), 'SatuanID'=>Param::Get("SatuanID",0)];
if ($id > 0) {
$db->Query("SELECT * FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND ID='".$id."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
//$atabel['Qty'] *= -1;
}
if ($atabel['InvID']>0 && $atabel['SatuanID']>0) {
$db->Query("SELECT Nama_Lengkap2 Nama_Produk,Nama_Satuan FROM vi_inv_produk2 WHERE InvID='".$atabel['InvID']."' AND SatuanID='".$atabel['SatuanID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
}
$form = new Form($db);
$tnama = $form->textauto("_", "Nama_Produk", ['value'=>$atabel['InvID'],'text'=>$atabel['Nama_Produk']], true, false, "ketik nama produk");
$trasa = $form->option("_", "RasaID", $atabel['RasaID'], true, false, [$atabel['RasaID']=>$atabel['RasaID']]);
$tqty = $form->textbox("_", "Qty", $atabel['Qty'], true, false, "double");
$ttot = $form->textbox("_", "Jumlah", 0, false, false, "double");
$tsat = $form->textbox("_", "Nama_Satuan", $atabel['Nama_Satuan'], false, false, "text");
$tharga = '<select class="form-select text-end" id="Harga_Jual" name="Harga_Jual" onchange="JualReturJS.Hitung_Detail();"><option value="'.$atabel['Harga_Jual'].'">'.rupiah($atabel['Harga_Jual']).'</option></select>';
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Produk">Nama Produk</label>
<div class="col">'.$tnama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="RasaID">Varian / Rasa</label>
<div class="col">'.$trasa.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Qty">Qty</label>
<div class="col-sm-4 col-lg-5">'.$tqty.'</div>
<div class="col-sm-4 col-lg-4">'.$tsat.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Harga_Jual">Harga (@)</label>
<div class="col-sm-4 col-lg-5">'.$tharga.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label">Total</label>
<div class="col-sm-4 col-lg-5">'.$ttot.'</div>
</div>
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'" >
<input type="hidden" id="SatuanID" value="'.$atabel['SatuanID'].'" >
<input type="hidden" id="Harga_Pokok" value="'.$atabel['Harga_Pokok'].'" >
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >
';
} else if ( $data == "option-rasa" ) {
$aoption = ['type' => "option", 'id' => "RasaID", 'value' => 0, 'avalue' => [['value'=>0,'html'=>""]]];
$db->Query("SELECT R.RasaID,R.Nama_Rasa FROM (SELECT * FROM inv_produk_varian WHERE InvID='".Param::Get("InvID",0)."') V LEFT JOIN para_rasa R ON (R.RasaID=V.RasaID) ORDER BY R.Nama_Rasa");
while ($db->Next()) {
$aoption['avalue'][] = ['value'=>$db->Row("RasaID"), 'html'=>$db->Row("Nama_Rasa")];
}
$ajson[] = $aoption;
} else if ( $data == "option-harga" ) {
$aoption = ['type' => "option", 'id' => "Harga_Jual", 'value' => 0, 'avalue' => []];
$id_grup = 0;
$db->Query("SELECT Grup_OutletID FROM para_outlet WHERE OutletID='".Param::Get("OutletID",0)."'");
if ($db->Next()) $id_grup = $db->Row("Grup_OutletID", 0);
//todo: check if use last sale price !!
//$db->Query("SELECT D.Harga_Jual FROM inv_detail D LEFT JOIN inv_jual J ON (D.No_Ref=J.No_Jual) WHERE J.OutletID='".Param::Get("OutletID",0)."' AND D.InvID='".Param::Get("InvID",0)."' AND D.SatuanID='".Param::Get("SatuanID",0)."' ORDER BY D.Tgl_Ref DESC LIMIT 1", 0));
$db->Query("SELECT Tanggal,Harga_Jual FROM inv_produk_harga WHERE InvID='".Param::Get("InvID",0)."' AND SatuanID='".Param::Get("SatuanID",0)."' AND Grup_OutletID='".$id_grup."' ORDER BY Tanggal DESC, Harga_Jual DESC");
while ($db->Next()) {
if ($db->RecordCount()==1) $aoption['value'] = $db->Row("Harga_Jual");
$aoption['avalue'][] = ['value'=>$db->Row("Harga_Jual"), 'html'=>rupiah($db->Row("Harga_Jual"))];
}
$ajson[] = $aoption;
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Retur Penjualan</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
<button class="btn btn-secondary mb-1 ms-2" id="butPrint" type="button"><i class="bi-printer me-2"></i>Cetak</button>
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-floppy me-2"></i>Simpan</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divTXMaster">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+271
View File
@@ -0,0 +1,271 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/jual_retur_kemas.php
Desc. : PHP - Transaksi Retur Kemasan Penjualan
Created By : Siau Pheng ([email protected]).
Created Date : February 27th, 2011.
Last Modified : October 29th, 2023.
(c) 2011 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$nomor = Param::Get("No_Jual", "");
if ( $data == "master" ) {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['No_Jual'=>$nomor, 'A_Picker'=>"0"];
if ($mode == "edit") {
Detail_Copy($nomor);
} else if ($mode == "save") {
Detail_Save($nomor, Param::Get("Tgl_Jual"), Param::Get("GudangID"), false);
$anota = ['Jual'=>0, 'Diskon'=>0];
$db->Query("SELECT SUM(-Qty*Harga_Jual) Jual, SUM(Total_Diskon) Diskon FROM inv_detail WHERE No_Ref='".$nomor."'");
if ($db->Next()) $anota = $db->AllRow();
$sql = new SQL($db);
$sql->set_table("inv_jual");
$sql->add_param("Total_Jual", $anota['Jual']);
$sql->add_param("Total_Diskon", $anota['Diskon']);
$sql->add_where("No_Jual", $nomor);
$sql->UpdateDB();
if (Param::Get("Rekap",0)==1) {
// update ke SCS
scs_update_jual($nomor);
}
$mode = "view";
} else if ($mode == "cancel") {
Detail_Cancel($nomor);
$mode = "view";
$nomor = ""; $atabel['No_Jual'] = "";
}
if ($nomor <> "" && $mode <> "cancel") {
$db->Query("SELECT *,Nama_Picker(A_Picker) Nama_Picker FROM inv_jual WHERE Data_Jual=1 AND No_Jual='".$nomor."'");
if (!$db->Next()) {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
} else $atabel = array_merge($atabel, $db->AllRow());
if ($atabel['OutletID']>0) {
$db->Query("SELECT Nama_Alamat FROM vi_para_outlet WHERE OutletID='".$atabel['OutletID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
}
if ($atabel['SalesID']>0) {
$db->Query("SELECT Nama_Pegawai Nama_Sales FROM para_pegawai WHERE PegID='".$atabel['SalesID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
}
if ($atabel['SupirID']>0) {
$db->Query("SELECT Nama_Pegawai Nama_Supir FROM para_pegawai WHERE PegID='".$atabel['SupirID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
}
}
$form = new Form($db);
$tnota = $form->textbox("_", "No_Jual", $atabel['No_Jual'], true, false, "text", "nomor transaksi");
$ttglnota = $form->datebox("_", "Tgl_Jual", $atabel['Tgl_Jual'], false, false);
$ttgljt = $form->datebox("_", "Tgl_JT", $atabel['Tgl_JT'], false, false);
$tgud = $form->option_db("_", "GudangID", $atabel['GudangID'], false, false, "vi_para_gudang", ["GudangID","Nama_Gudang2"], "Aktif=1 ORDER BY Nama_Gudang", [0,"&nbsp;"]);
$toutl = $form->textbox("_", "Nama_Outlet", $atabel['Nama_Alamat'], false, false, "text");
$tsales = $form->textbox("_", "Nama_Sales", $atabel['Nama_Sales'], false, false, "text");
$tsupir = $form->textbox("_", "Nama_Supir", $atabel['Nama_Supir'], false, false, "text");
$tpicker = $form->textbox("_", "Nama_Picker", $atabel['Nama_Picker'], false, false, "text");
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Jual">Nomor Transaksi</label>
<div class="col"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="JualReturKemasJS.tx_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Tanggal Transaksi</label>
<div class="col-sm-7 col-lg-5">'.$ttglnota.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Jatuh Tempo</label>
<div class="col-sm-7 col-lg-5">'.$ttgljt.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Lokasi Gudang</label>
<div class="col">'.$tgud.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Nama Outlet</label>
<div class="col">'.$toutl.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Nama Sales</label>
<div class="col">'.$tsales.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Nama Supir</label>
<div class="col">'.$tsupir.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Nama Picker</label>
<div class="col">'.$tpicker.'</div>
</div>
</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="Lunas" value="'.$atabel['Lunas'].'" >
<input type="hidden" id="Rekap" value="'.$atabel['Rekap'].'" >
<input type="hidden" id="mode" value="'.$mode.'" >
';
} else if ( $data == "tabel-detail" ) {
$grup_kemasan = $_SESSION['__APP_IAS']['GRUP_PRODUK_KEMASAN'];
if (in_array($mode_detail, ["insert","update","delete"])) {
$iqty = doubleval(Param::Get("QtyIn", 0)); $istok = $iqty;
$db->Query("SELECT Qty FROM inv_produk_kemasan WHERE InvID='".Param::Get("InvID")."' AND SatuanID='".Param::Get("SatuanID")."'");
if ($db->Next()) $istok = $db->Row("Qty", 1) * $iqty;
$ada = 0;
$db->Query("SELECT COUNT(*) Item FROM tmp_inv_detail WHERE No_Ref='".$nomor."' AND InvID='".Param::Get("InvID")."' AND Qty>=0");
if ($db->Next()) $ada = $db->Row("Item", 0);
if ($ada > 0) {
$db->Query("UPDATE tmp_inv_detail SET Qty='".$iqty."',Stok='".$istok."',Unix='".user_unix()."',UserID='".user_id()."' WHERE No_Ref='".$nomor."' AND InvID='".Param::Get("InvID")."' AND Qty>=0");
} else {
$sql = new SQL($db);
$sql->set_table("tmp_inv_detail");
$sql->add_param("No_Ref", $nomor);
$sql->add_param("NotaID", 5);
$sql->add_param("InvID");
$sql->add_param("SatuanID");
$sql->add_param("Qty", $iqty);
$sql->add_param("Stok", $istok);
$sql->add_param("Harga_Pokok");
$sql->add_param("Harga_Jual");
$sql->add_param_unix();
$sql->add_param_userid();
$sql->InsertDB();
}
}
$qview = ""; $qtabel = "inv_detail";
if (in_array($mode, ["add","edit"])) {
if ($mode=="add") $qview = " AND Unix=".user_unix();
$qtabel = "tmp_inv_detail";
}
$obj = new Table($db);
$obj->set_query("SELECT D.*,SUM(IF(D.Qty<0,-D.Qty,0)) Keluar,SUM(IF(D.Qty>0,D.Qty,0)) Masuk,P.Nama_Produk,S.Nama_Satuan FROM (SELECT * FROM ".$qtabel." WHERE No_Ref='".$nomor."'".$qview.") D LEFT JOIN inv_produk P ON (P.InvID=D.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=D.SatuanID) WHERE P.Grup_InvID='".$grup_kemasan."' GROUP BY D.InvID,D.SatuanID");
$obj->add_field("InvID", "ID", "hid");
$obj->add_field("SatuanID", "SID", "hid");
$obj->add_field("Nama_Produk", "Nama Kemasan", "awr");
$obj->add_field("Nama_Satuan", "Satuan", "l");
$obj->add_field("Keluar", "Qty Jual", "r", "abs");
$obj->add_field("Masuk", "Qty Kembali", "r", "abs");
$obj->add_field("Harga_Pokok", "Harga Pokok", "hid");
$obj->add_field("Harga_Jual", "Harga @", "hid");
$obj->set_field_order("ID", "Nama_Produk");
if (in_array($mode, ["add","edit"])) {
$obj->add_row_btn("clipboard", "Ubah", "JualReturKemasJS.detail_ubah");
}
$obj->set_func_navi("JualReturKemasJS.data_query('tabel-detail')");
$ajson[] = $obj->json_table("divDetailTabel");
} else if ( $data == "brow-tx" ) {
$tcari = trim(Param::Get("Cari_TX"));
$tlimit = ($tcari=="") ? "" : " AND (No_Jual LIKE '%".$tcari."%' OR No_Faktur LIKE '%".$tcari."%' OR OutletID IN (SELECT OutletID FROM para_outlet WHERE Nama_Outlet LIKE '%".$tcari."%'))";
$obj = new Table($db);
$obj->set_table("(SELECT *,Total_Jual-Total_Diskon Jumlah FROM inv_jual WHERE Data_Jual=1 AND Lunas=0".$tlimit.") J LEFT JOIN vi_para_outlet O ON (J.OutletID=O.OutletID)", "J.*,O.Nama_Alamat", "");
$obj->add_field("No_Jual", "No. Trans", "c");
$obj->add_field("Tgl_Jual", "Tgl. Jual", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Total_Jual", "Sub. Total", "r", "rupiah");
$obj->add_field("Total_Diskon", "Diskon", "r", "rupiah");
$obj->add_field("Jumlah", "TOTAL", "r", "rupiah");
$obj->set_field_order("No_Jual", "D");
$obj->add_row_btn("save", "Pilih", "JualReturKemasJS.tx_select");
$obj->set_func_navi("JualReturKemasJS.data_query('brow-tx')");
$ajson[] = $obj->db_table("divBrowTX");
} else if ($data == "detail-produk") {
$atabel = [ 'InvID'=>Param::Get("InvID",0),
'SatuanID'=>Param::Get("SatuanID",0),
'Harga_Pokok'=>Param::Get("Harga_Pokok",0),
'Harga_Jual'=>Param::Get("Harga_Jual",0),
'QtyOut'=>Param::Get("QtyOut",0),
'QtyIn'=>Param::Get("QtyIn",0) ];
if ($atabel['InvID']>0 && $atabel['SatuanID']>0) {
$db->Query("SELECT Nama_Lengkap2 Nama_Produk,Nama_Satuan FROM vi_inv_produk2 WHERE InvID='".$atabel['InvID']."' AND SatuanID='".$atabel['SatuanID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
}
$form = new Form($db);
$tnama = $form->textbox("_", "Nama_Produk", $atabel['Nama_Produk'], false, false, "text");
$tqtyo = $form->textbox("_", "QtyOut", $atabel['QtyOut'], false, false, "double");
$tqtyi = $form->textbox("_", "QtyIn", $atabel['QtyIn'], true, false, "double");
$tsat = $form->textbox("_", "Nama_Satuan", $atabel['Nama_Satuan'], false, false, "text");
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label">Nama Kemasan</label>
<div class="col">'.$tnama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label">Qty Jual</label>
<div class="col-sm-4 col-lg-5">'.$tqtyo.'</div>
<div class="col-sm-4 col-lg-4">'.$tsat.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="QtyIn">Qty Kembali</label>
<div class="col-sm-4 col-lg-5">'.$tqtyi.'</div>
<div class="col-sm-4 col-lg-4">'.$tsat.'</div>
</div>
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'" >
<input type="hidden" id="SatuanID" value="'.$atabel['SatuanID'].'" >
<input type="hidden" id="Harga_Pokok" value="'.$atabel['Harga_Pokok'].'" >
<input type="hidden" id="Harga_Jual" value="'.$atabel['Harga_Jual'].'" >
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >
';
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Retur Kemasan Penjualan</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-floppy me-2"></i>Simpan</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divTXMaster">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+90
View File
@@ -0,0 +1,90 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/jual_status.php
Desc. : PHP - Validasi Status Penjualan
Created By : Siau Pheng ([email protected]).
Created Date : March 8th, 2011.
Last Modified : October 30th, 2023.
(c) 2011 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
if ( $data == "tabel-detail" ) {
if ( $mode_detail == "insert" && Param::Get("draw", 0)==0 ) {
$alist = Param::Get_ArrayCBOX();
foreach ($alist as $_key => $_val) {
if (intval($_val)==1) {
$db->Query("UPDATE inv_jual SET Rekap=1 WHERE No_Jual='".$_key."' LIMIT 1");
scs_update_jual($_key, true);
}
}
}
$tcari = trim(Param::Get("Cari_TX"));
$tlimit = ($tcari=="") ? "" : " AND (No_Jual LIKE '%".$tcari."%' OR No_Faktur LIKE '%".$tcari."%' OR OutletID IN (SELECT OutletID FROM para_outlet WHERE Nama_Outlet LIKE '%".$tcari."%'))";
$obj = new Table($db);
$obj->set_table("(SELECT *,Total_Jual-Total_Diskon Total FROM inv_jual WHERE Data_Jual=1 AND Rekap=0".$tlimit.") J LEFT JOIN vi_para_outlet O ON (J.OutletID=O.OutletID)", "J.*,O.Nama_Alamat", "");
$obj->add_field("No_Jual", "No. Trans", "c");
$obj->add_field("Tgl_Jual", "Tgl. Jual", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$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->add_field("CK", "C/K", "c");
$obj->set_field_order("No_Jual", "D");
if (in_array($mode, ["add","edit"])) {
$obj->add_row_checkbox("No_Jual", "Rekap", ["1","0"]);
}
$obj->set_func_navi("JualStatusJS.data_query('tabel-detail')");
$ajson[] = $obj->db_table("divDetailTabel");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Validasi Status Order Penjualan</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-floppy me-2"></i>Simpan</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div class="row mb-1">
<div class="col">
<div class="input-group"><input class="form-control" id="Cari_TX" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div>
</div>
</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+223
View File
@@ -0,0 +1,223 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/jual_tagihan.php
Desc. : PHP - Pembuatan Daftar Tagihan Penjualan
Created By : Siau Pheng ([email protected]).
Created Date : March 10th, 2011.
Last Modified : January 22nd, 2026.
(c) 2011 - 2026, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/dt.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$nomor = Param::Get("No_Tagih", "");
$tgl_tagih = tgl_sql2str(Param::Get("Tgl_Tagih", tgl_dmy()));
if ( $data == "master" ) {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['No_Tagih'=>$nomor];
if ($mode == "add") {
$atabel['No_Tagih'] = "DT-BARU-".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
$atabel['Tgl_Tagih'] = tgl_ymd();
$atabel['SalesID'] = 0;
$nomor = "";
} else if ($mode == "edit") {
DT_Copy($nomor);
} else if ($mode == "save") {
$no_lama = $nomor;
$b_baru = (strpos($no_lama,"BARU")===false) ? false : true;
if ($b_baru) $nomor = Nomor_Baru("T", Param::Get("Tgl_Tagih"), true);
DT_Save($nomor, $b_baru, $no_lama);
$sql = new SQL($db);
$sql->set_table("inv_jual_tagih");
$sql->add_param_date("Tgl_Tagih");
$sql->add_param("SalesID");
$sql->add_param_userid();
$sql->add_where("No_Tagih", $nomor);
$sql->UpdateDB();
$mode = "view";//todo: print jika langsung cetak
} else if ($mode == "cancel") {
DT_Cancel($nomor);
$mode = "view";
$nomor = ""; $atabel['No_Tagih'] = "";
}
if ($nomor <> "" && $mode <> "cancel") {
$db->Query("SELECT * FROM inv_jual_tagih WHERE No_Tagih='".$nomor."'");
if (!$db->Next()) {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
} else $atabel = array_merge($atabel, $db->AllRow());
if ($atabel['SalesID']>0) {
$db->Query("SELECT Alamat_Pegawai Alamat_Sales FROM para_pegawai WHERE PegID='".$atabel['SalesID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
}
}
$enable = in_array($mode, ["add","edit"]) ? true : false;
$form = new Form($db);
$tnota = $form->textbox("_", "No_Tagih", $atabel['No_Tagih'], !$enable, true, "text", "nomor transaksi");
$ttglnota = $form->datebox("_", "Tgl_Tagih", $atabel['Tgl_Tagih'], $enable, true);
$tsales = $form->option_db("_", "SalesID", $atabel['SalesID'], $enable, false, "para_pegawai", ["PegID","Nama_Pegawai"], "Aktif=1 AND Jenis_PegID='".$_SESSION['__APP_IAS']['GRUP_PEG_SALES']."' ORDER BY Nama_Pegawai", [0,"&nbsp;"], null, "JualTagihanJS.oc_SalesID(this);");
$tsalesal = $form->textbox("_", "Alamat_Sales", $atabel['Alamat_Sales'], false, false, "text");
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_Tagih">Nomor Transaksi</label>
<div class="col"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="JualTagihanJS.tx_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Tagih">Tanggal Transaksi</label>
<div class="col-sm-7 col-lg-5">'.$ttglnota.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="SalesID">Nama Sales</label>
<div class="col">'.$tsales.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">Alamat Sales</label>
<div class="col">'.$tsalesal.'</div>
</div>
</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="mode" value="'.$mode.'" >
';
} else if ( $data == "delete" ) {
DT_Delete($nomor);
$db->Query("DELETE FROM inv_jual_tagih_detail WHERE No_Tagih='".$nomor."'");
$db->Query("DELETE FROM inv_jual_tagih WHERE No_Tagih='".$nomor."'");
$ajson['status'] = true;
} else if ( $data == "tabel-detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
if ( $mode_detail == "insert" ) {
$alist = Param::Get_ArrayCBOX();
foreach ($alist as $_key => $_val) {
if ($_val=="Y") $db->Query("INSERT IGNORE INTO tmp_jual_dt_detail (No_Tagih,No_Jual,Unix,UserID) VALUES ('".$nomor."','".$_key."','".user_unix()."','".user_id()."')");
}
} else if ( $mode_detail == "delete" ) {
$db->Query("DELETE FROM tmp_jual_dt_detail WHERE No_Tagih='".$nomor."' AND No_Jual='".Param::Get("No_Jual")."' LIMIT 1");
}
}
$qview = ""; $qtabel = "inv_jual_tagih_detail";
if (in_array($mode, ["add","edit"])) {
if ($mode=="add") $qview = " AND Unix=".user_unix();
$qtabel = "tmp_jual_dt_detail";
}
$obj = new Table($db);
$obj->set_query("SELECT J.*,IFNULL(B.Bayar_Lalu,0) Bayar_Lalu,IFNULL(B.Bayar_Ini,0) Bayar_Ini,J.Total_Faktur-IFNULL(B.Bayar_Lalu,0)-IFNULL(B.Bayar_Ini,0) Total_Sisa,O.Nama_Alamat FROM (SELECT OutletID,No_Jual,Tgl_Jual,Tgl_JT,Total_Jual-Total_Diskon Total_Faktur,CK FROM inv_jual WHERE No_Jual IN (SELECT No_Jual FROM ".$qtabel." WHERE No_Tagih='".$nomor."'".$qview.")) J LEFT JOIN (SELECT No_Jual,SUM(IF(Tgl_Bayar<'".$tgl_tagih."',Total_Bayar+Total_Potong,0)) Bayar_Lalu,SUM(IF(Tgl_Bayar='".$tgl_tagih."',Total_Bayar+Total_Potong,0)) Bayar_Ini FROM inv_jual_lunas WHERE No_Jual IN (SELECT No_Jual FROM ".$qtabel." WHERE No_Tagih='".$nomor."'".$qview.") GROUP BY No_Jual) B ON (B.No_Jual=J.No_Jual) LEFT JOIN vi_para_outlet O ON (O.OutletID=J.OutletID)");
$obj->set_query_footer("SELECT SUM(J.Total_Faktur) Total_Faktur,SUM(B.Bayar_Lalu) Bayar_Lalu,SUM(B.Bayar_Ini) Bayar_Ini,SUM(J.Total_Faktur-B.Bayar_Lalu-B.Bayar_Ini) Total_Sisa FROM (SELECT No_Jual,Total_Jual-Total_Diskon Total_Faktur FROM inv_jual WHERE No_Jual IN (SELECT No_Jual FROM ".$qtabel." WHERE No_Tagih='".$nomor."'".$qview.")) J LEFT JOIN (SELECT No_Jual,SUM(IF(Tgl_Bayar<'".$tgl_tagih."',Total_Bayar+Total_Potong,0)) Bayar_Lalu,SUM(IF(Tgl_Bayar='".$tgl_tagih."',Total_Bayar+Total_Potong,0)) Bayar_Ini FROM inv_jual_lunas WHERE No_Jual IN (SELECT No_Jual FROM ".$qtabel." WHERE No_Tagih='".$nomor."'".$qview.") GROUP BY No_Jual) B ON (B.No_Jual=J.No_Jual)");
$obj->add_field("No_Jual", "No. Trans", "c");
$obj->add_field("Tgl_Jual", "Tgl. Jual", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Tgl_JT", "Jatuh Tempo", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Total_Faktur", "Faktur", "r", "rupiah", "rupiah");
$obj->add_field("Bayar_Lalu", "Setoran", "r", "rupiah", "rupiah");
$obj->add_field("Bayar_Ini", "Pembayaran", "r", "rupiah", "rupiah");
$obj->add_field("Total_Sisa", "Sisa", "r", "rupiah", "rupiah");
$obj->add_field("CK", "C/K", "c");
$obj->set_field_order("No_Jual", "A");
if (in_array($mode, ["add","edit"])) {
$obj->add_row_btn("trash", "Hapus", "JualTagihanJS.jual_hapus");
$obj->set_func_btn("JualTagihanJS.jual_brow", '<i class="bi-table me-1"></i> Browse');
}
$obj->set_func_navi("JualTagihanJS.data_query('tabel-detail')");
$ajson[] = $obj->json_table("divDetailTabel");
} else if ( $data == "brow-tx" ) {
$tcari = trim(Param::Get("Cari_TX"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(No_Tagih,DATE_FORMAT(Tgl_Tagih,'%d-%m-%Y')) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("(SELECT * FROM inv_jual_tagih".$tsql.") T LEFT JOIN para_pegawai S ON (T.SalesID=S.PegID)", "T.*,S.Nama_Pegawai", "");
$obj->add_field("No_Tagih", "No. Trans", "c");
$obj->add_field("Tgl_Tagih", "Tgl. Tagih", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Pegawai", "Nama Sales", "awr");
$obj->set_field_order("No_Tagih", "D");
$obj->add_row_btn("save", "Pilih", "JualTagihanJS.tx_select");
$obj->set_func_navi("JualTagihanJS.data_query('brow-tx')");
$ajson[] = $obj->db_table("divBrowTX");
} else if ( $data == "brow-jual" ) {
$tcari = trim(Param::Get("Cari_Jual"));
$tlimit = ($tcari=="") ? " AND SalesID='".Param::Get("SalesID",0)."'" : " AND (No_Jual LIKE '%".$tcari."%' OR No_Faktur LIKE '%".$tcari."%' OR No_Tagih LIKE '%".$tcari."%' OR OutletID IN (SELECT OutletID FROM para_outlet WHERE Nama_Outlet LIKE '%".$tcari."%'))";
$obj = new Table($db);
$obj->set_table("(SELECT *,Total_Jual-Total_Diskon Total_Faktur,Total_Bayar+Total_Potong Total_Bayar2,Total_Jual-Total_Diskon-Total_Bayar-Total_Potong Total_Sisa FROM inv_jual WHERE Data_Jual=1 AND Lunas=0 AND No_Jual NOT IN (SELECT No_Jual FROM tmp_jual_dt_detail WHERE No_Tagih='".$nomor."')".$tlimit.") J LEFT JOIN vi_para_outlet O ON (J.OutletID=O.OutletID)", "J.*,O.Nama_Alamat,'N' Nota", "");
$obj->add_field("No_Jual", "No. Trans", "c");
$obj->add_field("Tgl_Jual", "Tgl. Jual", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Tgl_JT", "Jatuh Tempo", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("No_Tagih", "No. Tagihan", "c");
$obj->add_field("Total_Faktur", "Faktur", "r", "rupiah");
$obj->add_field("Total_Bayar2", "Pembayaran", "r", "rupiah");
$obj->add_field("Total_Sisa", "Sisa", "r", "rupiah");
$obj->set_field_order("No_Jual", "A");
$obj->add_row_checkbox("No_Jual", "Nota", ["Y","N"]);
$obj->set_func_navi("JualTagihanJS.data_query('brow-jual')");
$ajson[] = $obj->db_table("divBrowJual");
} else if ( $data == "info-sales") {
$arec = [];
$db->Query("SELECT * FROM para_pegawai WHERE PegID='".Param::Get("SalesID", 0)."' LIMIT 1");
if ($db->Next()) $arec = $db->AllRow();
$ajson[] = array('type'=>"form", 'id'=>"Alamat_Sales", 'value'=>$arec['Alamat_Pegawai']);
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Pembuatan Daftar Tagihan Penjualan</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
<button class="btn btn-secondary mb-1 ms-2" id="butPrint" type="button"><i class="bi-printer me-2"></i>Cetak</button>
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-floppy me-2"></i>Simpan</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divTXMaster">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+295
View File
@@ -0,0 +1,295 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/ias/manual_do.php
Desc. : PHP - Transaksi Pembuatan DO Manual
Created By : Siau Pheng ([email protected]).
Created Date : January 23rd, 2024.
(c) 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/mdo.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode", "view");
$mode_detail = Param::Get("mode_detail");
$nomor = Param::Get("No_MDO", "");
if ( $data == "master" ) {
$ajson = ['error'=>"", 'html'=>""];
$atabel = ['No_MDO'=>$nomor];
if ($mode == "add") {
$atabel['No_MDO'] = "MD-BARU-".$_SESSION['__WEB_APP']['SERVER_ID'].user_id(3);
$atabel['Tgl_MDO'] = tgl_ymd();
$atabel['SupirID'] = 0;
$nomor = "";
} else if ($mode == "edit") {
MDO_Copy($nomor);
} else if ($mode == "save") {
$no_lama = $nomor;
$b_baru = (strpos($no_lama,"BARU")===false) ? false : true;
if ($b_baru) $nomor = Nomor_Baru("N", Param::Get("Tgl_MDO"), true);
MDO_Save($nomor, $b_baru, $no_lama);
$sql = new SQL($db);
$sql->set_table("manual_do");
$sql->add_param_date("Tgl_MDO");
$sql->add_param("SupirID");
$sql->add_param("Catatan");
$sql->add_param_userid();
$sql->add_where("No_MDO", $nomor);
$sql->UpdateDB();
$mode = "view";
} else if ($mode == "cancel") {
MDO_Cancel($nomor);
$mode = "view";
$nomor = ""; $atabel['No_MDO'] = "";
}
if ($nomor <> "" && $mode <> "cancel") {
$db->Query("SELECT * FROM manual_do WHERE No_MDO='".$nomor."'");
if (!$db->Next()) {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
} else $atabel = array_merge($atabel, $db->AllRow());
}
$enable = in_array($mode, ["add","edit"]) ? true : false;
$form = new Form($db);
$tnota = $form->textbox("_", "No_MDO", $atabel['No_MDO'], !$enable, false, "text", "nomor transaksi");
$ttglmdo = $form->datebox("_", "Tgl_MDO", $atabel['Tgl_MDO'], $enable, false);
$tsupir = $form->option_db("_", "SupirID", $atabel['SupirID'], $enable, false, "para_pegawai", ["PegID","Nama_Pegawai"], "Aktif=1 AND Jenis_PegID='".$_SESSION['__APP_IAS']['GRUP_PEG_SUPIR']."' ORDER BY Nama_Pegawai", [0,"&nbsp;"]);
$tcatat = $form->textarea("_", "Catatan", $atabel['Catatan'], $enable, false, 1);
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="No_MDO">Nomor Transaksi</label>
<div class="col"><div class="input-group">'.$tnota.'<button id="butBrow" class="btn btn-info" type="button" onclick="ManualDOJS.tx_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_MDO">Tanggal Transaksi</label>
<div class="col-sm-7 col-lg-5">'.$ttglmdo.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-6">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="SupirID">Nama Supir</label>
<div class="col">'.$tsupir.'</div>
</div>
<div class="row mb-1 d-none">
<label class="col-sm-5 col-lg-3 col-form-label">Nama Picker</label>
<div class="col">'.$tpicker.'</div>
</div>
</div>
</div>
<div class="row mb-1">
<label class="col-sm-3 col-lg-2 col-form-label" for="Catatan" style="width:12.5%;">Catatan</label>
<div class="col">'.$tcatat.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="mode" value="'.$mode.'" >
';
} else if ( $data == "delete" ) {
$db->Query("DELETE FROM manual_do_detail WHERE No_MDO='".$nomor."'");
$db->Query("DELETE FROM manual_do WHERE No_MDO='".$nomor."'");
$ajson['status'] = true;
} else if ( $data == "tabel-detail" ) {
if (in_array($mode_detail, ["insert","update","delete"])) {
$iqty = 1;
$db->Query("SELECT Qty FROM inv_produk_kemasan WHERE InvID='".Param::Get("InvID")."' AND SatuanID='".Param::Get("SatuanID")."'");
if ($db->Next()) $iqty = $db->Row("Qty", 1);
$sql = new SQL($db);
$sql->set_table("tmp_manual_do_detail");
$sql->add_param("No_MDO", $nomor);
$sql->add_param("InvID");
$sql->add_param("RasaID");
$sql->add_param("SatuanID");
$sql->add_param("Qty", $iqty);
$sql->add_param("Muat");
$sql->add_param("Kembali");
$sql->add_param_unix();
$sql->add_param_userid();
$sql->add_where("ID");
$sql->add_where("No_MDO", $nomor);
if ( $mode_detail == "insert" ) {
$sql->InsertDB();
} else if ( $mode_detail == "update" ) {
$sql->UpdateDB();
} else if ( $mode_detail == "delete" ) {
$sql->DeleteDB();
}
}
$qview = ""; $qtabel = "manual_do_detail";
if (in_array($mode, ["add","edit"])) {
if ($mode=="add") $qview = " AND Unix=".user_unix();
$qtabel = "tmp_manual_do_detail";
}
$obj = new Table($db);
$obj->set_query("SELECT D.*,P.Nama_Lengkap2,P.Nama_Satuan,R.Nama_Rasa FROM (SELECT *,(Muat-Kembali) Terantar FROM ".$qtabel." WHERE No_MDO='".$nomor."'".$qview.") D LEFT JOIN vi_inv_produk2 P ON (D.InvID=P.InvID AND D.SatuanID=P.SatuanID) LEFT JOIN para_rasa R ON (D.RasaID=R.RasaID)");
$obj->set_query_footer("SELECT COUNT(*) Nama_Lengkap2,SUM(D.Muat) Muat,SUM(D.Kembali) Kembali,SUM(D.Muat-D.Kembali) Terantar FROM (SELECT * FROM ".$qtabel." WHERE No_MDO='".$nomor."' ".$qview.") D");
$obj->add_field("ID", "ID", "c");
$obj->add_field("Nama_Lengkap2", "Nama Produk", "awr", null, "items");
$obj->add_field("Nama_Rasa", "Varian / Rasa", "l");
$obj->add_field("Muat", "Muat", "r", "rupiah", "rupiah");
$obj->add_field("Kembali", "Kembali", "r", "rupiah", "rupiah");
$obj->add_field("Terantar", "Terantar", "r", "rupiah", "rupiah");
$obj->set_field_order("ID", "A");
if (in_array($mode, ["add","edit"])) {
$obj->add_row_btn("clipboard", "Ubah", "ManualDOJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "ManualDOJS.detail_hapus", "Unix", user_unix());
$obj->set_func_btn("ManualDOJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Produk');
$obj->set_func_btn("ManualDOJS.produk_brow", '<i class="bi-table me-1"></i> Browse');
}
$obj->set_func_navi("ManualDOJS.data_query('tabel-detail')");
$ajson[] = $obj->json_table("divDetailTabel");
} else if ( $data == "brow-tx" ) {
$tcari = trim(Param::Get("Cari_TX"));
$tlimit = ($tcari=="") ? "" : "(No_MDO LIKE '%".$tcari."%' OR Catatan LIKE '%".$tcari."%')";
$obj = new Table($db);
$obj->set_table("manual_do", "*", $tlimit);
$obj->add_field("No_MDO", "No. Trans", "c");
$obj->add_field("Tgl_MDO", "Tgl. Trans", "c", "sqltgl", null, "val-tgl");
$obj->add_field("Catatan", "Catatan", "awr");
$obj->set_field_order("No_MDO", "D");
$obj->add_row_btn("save", "Pilih", "ManualDOJS.tx_select");
$obj->set_func_navi("ManualDOJS.data_query('brow-tx')");
$ajson[] = $obj->db_table("divBrowTX");
} else if ( $data == "brow-produk" ) {
$tcari = trim(Param::Get("Cari_Produk"));
$tsql = ($tcari=="") ? "" : " AND CONCAT(Kode_Produk,Nama_Lengkap) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("vi_inv_produk2", "*", "Aktif=1".$tsql);
$obj->add_field("InvID", "ID", "hid");
$obj->add_field("SatuanID", "SatuanID", "hid");
$obj->add_field("Kode_Produk", "Kode", "c");
$obj->add_field("Nama_Lengkap2", "Nama Produk", "awr");
$obj->set_field_order("Nama_Lengkap", "A");
$obj->add_row_btn("save", "Pilih", "ManualDOJS.produk_select");
$obj->set_func_navi("ManualDOJS.data_query('brow-produk')");
$ajson[] = $obj->db_table("divBrowProduk");
} else if ( $data == "auto-produk" ) {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
if (is_string($tcari) && strlen($tcari) < 64) {
$db->Query("SELECT P.InvID,P.Nama_Lengkap,CONCAT(P.SatuanID,':',P.Nama_Satuan) Data2 FROM vi_inv_produk2 P WHERE Aktif=1 AND CONCAT(Nama_Lengkap) LIKE '%".$tcari."%' ORDER BY Nama_Lengkap LIMIT 50");
while ($db->Next()) {
$ajson['autodata'][] = ['value'=>$db->Row("InvID"), 'text'=>$db->Row("Nama_Lengkap"), 'data'=>$db->Row("Data2")];
}
}
} else if ($data == "detail-produk") {
$id = Param::Get("ID", 0); $atabel = ['ID'=>$id, 'InvID'=>Param::Get("InvID",0), 'SatuanID'=>Param::Get("SatuanID",0)];
if ($id > 0) {
$db->Query("SELECT * FROM tmp_manual_do_detail WHERE No_MDO='".$nomor."' AND ID='".$id."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
if ($atabel['InvID']>0 && $atabel['SatuanID']>0) {
$db->Query("SELECT Nama_Lengkap2 Nama_Produk,Nama_Satuan FROM vi_inv_produk2 WHERE InvID='".$atabel['InvID']."' AND SatuanID='".$atabel['SatuanID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
}
$form = new Form($db);
$tnama = $form->textauto("_", "Nama_Produk", ['value'=>$atabel['InvID'],'text'=>$atabel['Nama_Produk']], true, false, "ketik nama produk");
$trasa = $form->option("_", "RasaID", $atabel['RasaID'], true, false, [$atabel['RasaID']=>$atabel['RasaID']]);
$tsat = $form->textbox("_", "Nama_Satuan", $atabel['Nama_Satuan'], false, false, "text");
$tmuat = $form->textbox("_", "Muat", $atabel['Muat'], true, false, "double");
$tkemb = $form->textbox("_", "Kembali", $atabel['Kembali'], true, false, "double");
$tantar = $form->textbox("_", "Terantar", 0, false, false, "double");
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Produk">Nama Produk</label>
<div class="col">'.$tnama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="RasaID">Varian / Rasa</label>
<div class="col">'.$trasa.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label">Satuan</label>
<div class="col-sm-4 col-lg-5">'.$tsat.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Muat">Muat</label>
<div class="col-sm-4 col-lg-5">'.$tmuat.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Kembali">Kembali</label>
<div class="col-sm-4 col-lg-5">'.$tkemb.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label">Terantar</label>
<div class="col-sm-4 col-lg-5">'.$tantar.'</div>
</div>
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'" >
<input type="hidden" id="SatuanID" value="'.$atabel['SatuanID'].'" >
<input type="hidden" id="mode_detail" value="'.$mode_detail.'" >
';
} else if ( $data == "option-rasa" ) {
$aoption = ['type' => "option", 'id' => "RasaID", 'value' => Param::Get("RasaID",0), 'avalue' => [['value'=>0,'html'=>""]]];
$db->Query("SELECT R.RasaID,R.Nama_Rasa FROM (SELECT * FROM inv_produk_varian WHERE InvID='".Param::Get("InvID",0)."') V LEFT JOIN para_rasa R ON (R.RasaID=V.RasaID) ORDER BY R.Nama_Rasa");
while ($db->Next()) {
$aoption['avalue'][] = ['value'=>$db->Row("RasaID"), 'html'=>$db->Row("Nama_Rasa")];
}
$ajson[] = $aoption;
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-database me-2"></i>Transaksi Pembuatan DO Manual</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-primary mb-1 ms-2" id="butTambah" type="button"><i class="bi-plus-lg me-2"></i>Tambah</button>
<button class="btn btn-info mb-1 ms-2" id="butUbah" type="button"><i class="bi-clipboard me-2"></i>Ubah</button>
<button class="btn btn-warning mb-1 ms-2" id="butHapus" type="button"><i class="bi-trash me-2"></i>Hapus</button>
<button class="btn btn-secondary mb-1 ms-2" id="butPrint" type="button"><i class="bi-printer me-2"></i>Cetak</button>
<button class="btn btn-danger mb-1 ms-2" id="butBatal" type="button"><i class="bi-x-lg me-2"></i>Batal</button>
<button class="btn btn-success mb-1 ms-2" id="butSimpan" type="button"><i class="bi-floppy me-2"></i>Simpan</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divTXMaster">&nbsp;</div>
<div id="divDetailTabel">&nbsp;</div>
</div>
</div>
</div></div>
</div>';
}
send_json($ajson);
?>
+104
View File
@@ -0,0 +1,104 @@
<?php
/*******************************************************************
Module : /apps/php/index.php
Desc. : PHP - Halaman Utama Desktop
Created By : Siau Pheng ([email protected]).
Created Date : May 24th, 2010.
Last Modified : March 21st, 2023.
(c) 2010 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../vendor/autoload.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Register;
function random_color($trans = "0.6") {
$col_r = mt_rand( 0, 255 );
$col_g = mt_rand( 0, 255 );
$col_b = mt_rand( 0, 255 );
return "rgba(".$col_r.",".$col_g.",".$col_b.",".$trans.")";
}
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "jual-chart" ) {
$agrup = [];
$db->Query("SELECT * FROM inv_produk_grup WHERE Aktif=1 ORDER BY Grup_InvID");
while ($db->Next()) $agrup[$db->Row("Grup_InvID")] = $db->Row("Kode_Grup");
$db->Query("SELECT A.*,P.Grup_InvID FROM (SELECT CONCAT(YEAR(Tgl_Ref),'-',LPAD(MONTH(Tgl_Ref),2,'0')) Thn_Bln,InvID,SUM(-Qty*Harga_Jual) Jumlah FROM inv_detail WHERE NotaID=5 AND Tgl_Ref>=(LAST_DAY((SELECT Tgl_Jual FROM inv_jual ORDER BY Tgl_Jual DESC LIMIT 1)) + INTERVAL 1 DAY - INTERVAL 6 MONTH) GROUP BY YEAR(Tgl_Ref),MONTH(Tgl_Ref),InvID) A LEFT JOIN inv_produk P ON (P.InvID=A.InvID) ORDER BY A.Thn_Bln,P.Grup_InvID");
$ajson['tipe'] = "chart";
$adata['datasets'] = [];
$adata['labels'] = ["Belum Ada Penjualan"];
if ($db->RecordCount()>0) {
$adata['labels'] = [];
}
$ajual = []; $abln = [];
while ($db->Next()){
$ajual[$db->Row("Grup_InvID")][$db->Row("Thn_Bln")] = $db->Row("Jumlah", 0) / 1000000;
if (!in_array($db->Row("Thn_Bln"), $abln, true)) array_push($abln, $db->Row("Thn_Bln"));
}
asort($abln);
foreach ($abln as $_val) {
$adata['labels'][] = bulan_array()[intval(explode("-",$_val)[1])];
}
foreach ($agrup as $id_grup => $n_grup) {
$atmp = [];
foreach ($abln as $_val) {
$atmp[] = $ajual[$id_grup][$_val] ?? 0;
}
$adata['datasets'][] = ['data'=>$atmp, 'label'=>$n_grup, 'backgroundColor'=>random_color(), 'datalabels'=>['align'=>"end", 'anchor'=>"end", 'color'=>"#36A2EB"]];
}
$ajson['chart'] = ['type' => "bar",
'data' => $adata,
'options' => [
'responsive' => true,
'aspectRatio' => 1.5,
'plugins' => [
'legend' => ['position' => "bottom"],
'title' => ['display' => true, 'font' => ['size' => 20, 'weight' => 'normal'], 'text' => 'Penjualan 6 Bulan Terakhir'],
'subtitle' => ['display' => true, 'position' => "top", 'text' => '(dalam jutaan)']
],
'scales' => ['y' => ['min' => 0, 'ticks' => ['stepSize' => 1], 'title' => ['display' => true, 'font' => ['size' => 16], 'text' => "Nilai Penjualan"]]],
'layout' => ['padding' => ['top' => 10]]
]
];
} else if ( $data == "default" ) {
$aapp = $_SESSION['__WEB_APP'];
$ajson['content'] = '
<div class="row">
<div class="col-sm-12 col-md-6 d-flex align-items-stretch">
<div class="card w-100 h-100"><div class="card-body d-flex flex-column" id="divHome1">
<div class="my-auto text-center"><img class="img-fluid" src="'.$aapp['WEB_PATH'].'assets/images/logo300.png" title="'.$aapp['REG_NAME'].'">
<p class="mt-2">'.$aapp['REG_ADDRESS'].'<br>
'.$aapp['REG_CITY'].' '.$aapp['REG_POSTCODE'].'</p>
<p class="mt-3 mb-3"><i>Register ID : '.Register::reg_id().'</i></p>
<p>'.$aapp['APP_NAMES'].'<br>'.$aapp['APP_NAME'].' Ver. '.$aapp['APP_VER'].'<br>
Updated : '.$aapp['APP_UPDATED'].'</p></div>
</div></div>
</div>
<div class="col-sm-12 col-md-6 d-flex align-items-stretch">
<div class="card w-100 h-100"><div class="card-body d-flex flex-column" id="divHome2">
<div class="chart-wrapper pb-2">
<canvas id="barChart"></canvas>
</div>
</div></div>
</div>
</div>
';
}
send_json($ajson);
?>
+72
View File
@@ -0,0 +1,72 @@
<?php
/*******************************************************************
Module : /apps/php/login.php
Desc. : PHP - Halaman Proses Login
Created By : Siau Pheng ([email protected]).
Created Date : January 5th, 2008.
Last Modified : April 29th, 2022.
(c) 2008 - 2019, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../vendor/autoload.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\Web\Auth;
use siaupheng\fonia3\Web\Param;
$db = (is_resource($db)) ? $db : new MySQL();
$auth = new Auth($db);
$ajson = [];
$mode = Param::Get("mode");
$aapp = $_SESSION['__WEB_APP'];
if ($mode == "login") {
$auser = [];
$auth->set_id_reg($aapp['PARENT_CODE']);
if ($auth->user_check(Param::Get("Username"), Param::Get("Password"))) {
$auser = $auth->user_data(Param::Get("Username"));
$_appurl = $_GET['redir'];
if (!empty($_appurl)) {
$_redir = $auth->redirect($_appurl);
//jika kosong, tampilkan pesan redirect tidak diijinkan
//jika berisi, js harus redirect ...
}
$ajson['token'] = $_SESSION['APP_TOKEN'];
$ajson['hasil'] = "SUKSES";
$ajson['pesan'] = '<div class="border border-success p-2 pt-3"><h5>Login berhasil,</h5><p><b>'.$auser["Username"].'</b> / '.$auser["Nama"].'<br>'.$auser["Posisi"].'<br><i>login terakhir :</i><br>'.tgl_sql2str($auser["Last_Date"],true).'<br>'.$auser["Last_IP"].'</p></div>';
} else {
$ajson['hasil'] = "ERROR";
$ajson['pesan'] = "Periksa kembali ID Pengguna atau Password Anda ...";
}
} else if ($mode == "logout") {
$auth->logout();
foreach ($_SESSION as $_key => $_val) {
if (substr($_key,0,5)=="__WEB") unset($_SESSION[$_key]);
if (substr($_key,0,5)=="__APP") unset($_SESSION[$_key]);
}
require(__DIR__."/../cfg/app.php");
if ($_SERVER['SERVER_ADDR'] == "127.0.0.1") {
$_host = $_SESSION['__WEB_APP']['WEB_PATH']."../";
} else {
$_host = (isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : $_SESSION['__WEB_APP']['PARENT_SITE']);
$_host = str_replace(['http://','https://'], "", $_host);
if ($_SESSION['__WEB_APP']['PARENT_SUB'] == true) {
$_subs = explode('.', $_host);
if (count($_subs) > 2) array_shift($_subs);
$_host = implode('.', $_subs);
}
$_host = "//" . $_host;
}
$ajson['nexthost'] = $_host;
}
send_json($ajson);
?>
+98
View File
@@ -0,0 +1,98 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/beli.php
Desc. : PHP - Laporan Pembelian
Created By : Siau Pheng ([email protected]).
Created Date : April 12th, 2011.
Last Modified : July 4th, 2023.
(c) 2011 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Form;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$tipe = Param::Get("Tipe"); // R or D
$id_sup = Param::Get("SupID", 0);
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$asup = [];
if ($id_sup > 0) {
$db->Query("SELECT * FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
if ($db->Next()) $asup = $db->AllRow();
}
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " s/d ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_sup>0) ? " AND SupID='".$id_sup."'" : "";
// query data laporan
if ($tipe=="R") {
$db->Query("SELECT B.*,S.Nama_Sup FROM (SELECT SupID,SUM(Total_Beli) Total_Beli,SUM(Total_Diskon) Total_Diskon,SUM(Total_Beli-Total_Diskon) Total FROM inv_beli WHERE Data_Beli=1 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY SupID) B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) ORDER BY S.Nama_Sup");
} else {
$db->Query("SELECT B.*,DATE_FORMAT(B.Tgl_Beli,'%d-%m-%Y') Tgl_Beli2,B.Total_Beli-B.Total_Diskon Total,S.Nama_Sup FROM (SELECT * FROM inv_beli WHERE Data_Beli=1 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) ORDER BY B.No_Beli");
}
}
if ( $data == "print" ) {
Report_Header("LAPORAN ".($tipe=="R"?"REKAP":"DETAIL")." PEMBELIAN", $tglheader);
if ($id_sup>0) $header = "Nama Supplier : ".$asup['Nama_Sup'];
if ($tipe=="R") {
$header .= '<table class="garis"><thead><tr><th>No.</th><th>Nama Supplier</th><th>Sub. Total</th><th>Diskon</th><th>Total</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td class="r">%s</td><td class="r">%s</td><td class="r">%s</td></tr>';
$_sline = '<tr><td class="c b" colspan="2">%s</td><td class="r b">%s</td><td class="r b">%s</td><td class="r b">%s</td></tr>';
$body = ''; $nomor = 1; $subtotal = 0; $diskon = 0;
while ($db->Next()) {
$subtotal += $db->Row("Total_Beli");
$diskon += $db->Row("Total_Diskon");
$body .= sprintf($_line, $nomor++, $db->Row("Nama_Sup"), rupiah2($db->Row("Total_Beli")), rupiah2($db->Row("Total_Diskon")), rupiah2($db->Row("Total")));
}
$body .= sprintf($_sline, "Jumlah", rupiah2($subtotal), rupiah2($diskon), rupiah2($subtotal-$diskon));
} else {
$header .= '<table class="garis"><thead><tr><th>No. Nota</th><th>Tgl. Nota</th><th>No. Faktur</th><th>Nama Supplier</th><th>Sub. Total</th><th>Diskon</th><th>Total</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td class="c">%s</td><td>%s</td><td>%s</td><td class="r">%s</td><td class="r">%s</td><td class="r">%s</td></tr>';
$_sline = '<tr><td class="c b" colspan="4">%s</td><td class="r b">%s</td><td class="r b">%s</td><td class="r b">%s</td></tr>';
$body = ''; $subtotal = 0; $diskon = 0;
while ($db->Next()) {
$subtotal += $db->Row("Total_Beli");
$diskon += $db->Row("Total_Diskon");
$body .= sprintf($_line, $db->Row("No_Beli"), $db->Row("Tgl_Beli2"), $db->Row("No_Faktur"), $db->Row("Nama_Sup"), rupiah2($db->Row("Total_Beli")), rupiah2($db->Row("Total_Diskon")), rupiah2($db->Row("Total")));
}
$body .= sprintf($_sline, "Jumlah", rupiah2($subtotal), rupiah2($diskon), rupiah2($subtotal-$diskon));
}
echo $header . $body . "</tbody></table>" . Report_Stamp(1, true);
} else if ( $data == "default") {
$form = new Form($db);
$form->radio("Tipe Laporan", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
$form->option_db("Nama Supplier", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "TRUE ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
$form->datebox("Dari Tanggal", "Tgl_From", tgl_ymd(), true, false);
$form->datebox("Sampai Tanggal", "Tgl_To", tgl_ymd(), true, false);
$form->show(' _Tipe_ _SupID_ _Tgl_From_ _Tgl_To_ ');
}
?>
+97
View File
@@ -0,0 +1,97 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/beli_retur.php
Desc. : PHP - Laporan Retur Pembelian
Created By : Siau Pheng ([email protected]).
Created Date : April 12th, 2011.
Last Modified : July 4th, 2023.
(c) 2011 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Form;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$tipe = Param::Get("Tipe"); // R or D
$id_sup = Param::Get("SupID", 0);
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$asup = [];
if ($id_sup > 0) {
$db->Query("SELECT * FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
if ($db->Next()) $asup = $db->AllRow();
}
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " s/d ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_sup>0) ? " AND SupID='".$id_sup."'" : "";
// query data laporan
if ($tipe=="R") {
$db->Query("SELECT B.*,S.Nama_Sup FROM (SELECT SupID,SUM(-Total_Beli) Total_Retur FROM inv_beli WHERE Data_Beli=0 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY SupID) B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) ORDER BY S.Nama_Sup");
} else {
$db->Query("SELECT B.*,DATE_FORMAT(B.Tgl_Beli,'%d-%m-%Y') Tgl_Beli2,-B.Total_Beli Retur,S.Nama_Sup FROM (SELECT * FROM inv_beli WHERE Data_Beli=0 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) ORDER BY B.No_Beli");
}
}
if ( $data == "print" ) {
Report_Header("LAPORAN ".($tipe=="R"?"REKAP":"DETAIL")." RETUR PEMBELIAN", $tglheader);
if ($id_sup>0) $header = "Nama Supplier : ".$asup['Nama_Sup'];
if ($tipe=="R") {
$header .= '<table class="garis"><thead><tr><th>No.</th><th>Nama Supplier</th><th>Total</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td class="r">%s</td></tr>';
$_sline = '<tr><td class="c b" colspan="2">%s</td><td class="r b">%s</td></tr>';
$body = ''; $nomor = 1; $subtotal = 0;
while ($db->Next()) {
$subtotal += $db->Row("Total_Retur");
$body .= sprintf($_line, $nomor++, $db->Row("Nama_Sup"), rupiah2($db->Row("Total_Retur")));
}
$body .= sprintf($_sline, "Jumlah", rupiah2($subtotal));
} else {
$header .= '<table class="garis"><thead><tr><th>No. Nota</th><th>Tgl. Nota</th><th>Nama Supplier</th><th>Total</th><th>Catatan</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td class="c">%s</td><td>%s</td><td class="r">%s</td><td>%s</td></tr>';
$_sline = '<tr><td class="c b" colspan="3">%s</td><td class="r b">%s</td><td class="r b">%s</td></tr>';
$body = ''; $subtotal = 0;
while ($db->Next()) {
$subtotal += $db->Row("Retur");
$body .= sprintf($_line, $db->Row("No_Beli"), $db->Row("Tgl_Beli2"), $db->Row("Nama_Sup"), rupiah2($db->Row("Retur")), $db->Row("No_Faktur"));
}
$body .= sprintf($_sline, "Jumlah", rupiah2($subtotal), "");
}
echo $header . $body . "</tbody></table>" . Report_Stamp(1, true);
} else if ( $data == "default") {
$form = new Form($db);
$form->radio("Tipe Laporan", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
$form->option_db("Nama Supplier", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "TRUE ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
$form->datebox("Dari Tanggal", "Tgl_From", tgl_ymd(), true, false);
$form->datebox("Sampai Tanggal", "Tgl_To", tgl_ymd(), true, false);
$form->show(' _Tipe_ _SupID_ _Tgl_From_ _Tgl_To_ ');
}
?>
+136
View File
@@ -0,0 +1,136 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/bonus_supir.php
Desc. : PHP - Laporan Bonus Penjualan Supir
Created By : Siau Pheng ([email protected]).
Created Date : June 8th, 2011.
Last Modified : July 10th, 2021.
(c) 2011 - 2021, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.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;
use siaupheng\fonia3\Printer\PrintHTML;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$tipe = Param::Get("Tipe"); // R or D
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = " AND P.Grup_InvID<>".$_SESSION['__APP_IAS']['GRUP_PRODUK_KEMASAN']." AND P.Grup_InvID<>".$_SESSION['__APP_IAS']['GRUP_PRODUK_HADIAH'];
if ($tipe=="R") {
$db->Query("SELECT D.PegID,S.Nama_Satuan,SUM(D.Qty) Qty,G.Nama_Pegawai FROM (SELECT D.InvID,D.SatuanID,SUM(IFNULL(-D.Qty/D.Person,0)) Qty,SUBSTRING_INDEX(SUBSTRING_INDEX(D.Picker2,',',P.PegID),',',-1) PegID FROM para_pegawai P INNER JOIN (SELECT A.*,IF(B.SupirID>0,1,0)+IF(B.A_Picker='0',0,LENGTH(B.A_Picker)-LENGTH(REPLACE(B.A_Picker,',',''))+1) Person,CONCAT(B.SupirID,',',B.A_Picker) Picker2 FROM (SELECT * FROM inv_detail USE INDEX (NO_REF) WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND Promo=0) A LEFT JOIN (SELECT * FROM inv_jual WHERE (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."') AND Rekap=1 AND SupirID>0) B ON (A.No_Ref=B.No_Jual)) D ON (CHAR_LENGTH(D.Picker2)-CHAR_LENGTH(REPLACE(D.Picker2,',',''))>=P.PegID-1) GROUP BY D.InvID,D.SatuanID,SUBSTRING_INDEX(SUBSTRING_INDEX(D.Picker2,',',P.PegID),',',-1)) D LEFT JOIN inv_produk P ON (P.InvID=D.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=D.SatuanID) LEFT JOIN para_pegawai G ON (G.PegID=D.PegID) WHERE D.PegID>0".$tsql." GROUP BY D.PegID,D.SatuanID ORDER BY G.Nama_Pegawai");
} else {
$db->Query("SELECT D.PegID,P.Nama_Produk,S.Nama_Satuan,SUM(D.Qty) Qty,G.Nama_Pegawai FROM (SELECT D.InvID,D.SatuanID,SUM(IFNULL(-D.Qty/D.Person,0)) Qty,SUBSTRING_INDEX(SUBSTRING_INDEX(D.Picker2,',',P.PegID),',',-1) PegID FROM para_pegawai P INNER JOIN (SELECT A.*,IF(B.SupirID>0,1,0)+IF(B.A_Picker='0',0,LENGTH(B.A_Picker)-LENGTH(REPLACE(B.A_Picker,',',''))+1) Person,CONCAT(B.SupirID,',',B.A_Picker) Picker2 FROM (SELECT * FROM inv_detail USE INDEX (NO_REF) WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND Promo=0) A LEFT JOIN (SELECT * FROM inv_jual WHERE (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."') AND Rekap=1 AND SupirID>0) B ON (A.No_Ref=B.No_Jual)) D ON (CHAR_LENGTH(D.Picker2)-CHAR_LENGTH(REPLACE(D.Picker2,',',''))>=P.PegID-1) GROUP BY D.InvID,D.SatuanID,SUBSTRING_INDEX(SUBSTRING_INDEX(D.Picker2,',',P.PegID),',',-1)) D LEFT JOIN inv_produk P ON (P.InvID=D.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=D.SatuanID) LEFT JOIN para_pegawai G ON (G.PegID=D.PegID) WHERE D.PegID>0".$tsql." GROUP BY D.PegID,D.InvID,D.SatuanID ORDER BY D.PegID");
}
}
if ( $data == "print" ) {
Report_Header("LAPORAN ".($tipe=="R"?"REKAP":"DETAIL")." BONUS PENJUALAN SUPIR & PICKER", $tglheader);
$pre = new PrintHTML();
$pre->set_css("garis");
if ($tipe=="R") {
$pre->add_field("NO.", 40, "C", "uang");
$pre->add_field("NAMA SUPIR / PICKER", 200);
$pre->add_field("JUMLAH", 100);
$pre->show_fields();
$nomor = 1; $arekap = array();
while ($db->Next()) {
$arekap[$db->Row("Nama_Pegawai")][$db->Row("Nama_Satuan")] += $db->Row("Qty");
}
foreach ($arekap as $nama => $ket) {
$ket_tot = "";
foreach ($ket as $key => $val) {
if ($val > 0) $ket_tot .= " / ".uang($val,2)." ".strtoupper($key);
}
$ket_tot = substr($ket_tot, 3);
$pre->add_value( $nomor, $nama, $ket_tot );
$nomor++;
}
} else {
$pre->add_field("NO.", 40, "C", "uang");
$pre->add_field("NAMA PRODUK", 320);
$pre->add_field("QTY", 60, "R");
$pre->add_field("SATUAN", 80);
$nomor = 1; $supir = ""; $atot = array();
while ($db->Next()) {
if ($supir <> $db->Row("PegID")) {
if ($supir <> "") {
$ket_tot = "";
foreach ($atot as $key => $val) {
if ($val > 0) $ket_tot .= " / ".uang($val,2)." ".strtoupper($key);
}
$atot = array();
$ket_tot = substr($ket_tot, 3);
$pre->add_span(array("TOTAL BONUS : ".$ket_tot,4,"C,B"));
$pre->add_span(array("&nbsp;",4,"L,NB"));
$nomor = 1;
}
$pre->add_span(array("Nama Supir / Picker : ".$db->Row("Nama_Pegawai"),4,"L"));
$pre->show_fields();
}
$pre->add_value( $nomor, $db->Row("Nama_Produk"), uang($db->Row("Qty"),2), $db->Row("Nama_Satuan") );
$supir = $db->Row("PegID");
$atot[$db->Row("Nama_Satuan")] += $db->Row("Qty");
$nomor++;
}
$ket_tot = "";
foreach ($atot as $key => $val) {
if ($val > 0) $ket_tot .= " / ".uang($val,2)." ".strtoupper($key);
}
$ket_tot = substr($ket_tot, 3);
$pre->add_span(array("TOTAL BONUS : ".$ket_tot,4,"C,B"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "default") {
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
$ttglfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$ttglto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col">'.$ttipe.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col">'.$ttglfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col">'.$ttglto.'</div>
</div>';
}
?>
+399
View File
@@ -0,0 +1,399 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/fp.php
Desc. : PHP - Cetak Faktur Pajak
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : April 12th, 2011.
Last Modified : December 27th, 2024.
(c) 2011 - 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\Web\Param;
function fp_jual($db, $nota="") {
if (trim($nota)=="") return;
$html = '
<htmlpagefooter name="RepFoot">
<table width="100%" style="border:none;"><tr><td width="95%" style="text-align:left;border:none;">PEMBERITAHUAN: Faktur Pajak ini telah dilaporkan ke Direktorat Jenderal Pajak dan telah memperoleh persetujuan sesuai dengan ketentuan peraturan perpajakan yang berlaku. PERINGATAN: PKP yang menerbitkan Faktur Pajak yang tidak sesuai dengan keadaan yang sebenarnya dan/atau sesungguhnya sebagaimana dimaksud Pasal 13 ayat (9) UU PPN dikenai sanksi sesuai dengan Pasal 14 ayat (4) UU KUP</td><td width="50%" style="text-align:right;font-style:italic;border:none;">{PAGENO} dari {nbpg}</td></tr></table>
</htmlpagefooter>
<sethtmlpagefooter name="RepFoot" show-this-page="1" value="on" />
<table class="judul" style="width:100%;" borderspacing="0">
<tr><td class="center" style="font-size:15pt;">Faktur Pajak</td></tr>
<tr><td class="line">Kode dan Nomor Seri Faktur Pajak : _NO_PAJAK_</td></tr>
<tr><td class="line">Pengusaha Kena Pajak</td></tr>
<tr>
<td class="line">
<table width="100%">
<tr><td width="50" class="left">Nama</td><td width="5" class="center">:</td><td class="left">_REG_NAME_</td></tr>
<tr><td class="left">Alamat</td><td class="center">:</td><td class="left">_REG_ADDRESS_ _REG_CITY_</td></tr>
<tr><td class="left">NPWP</td><td class="center">:</td><td class="left">_REG_NPWP_</td></tr>
</table>
</td>
</tr>
<tr><td class="line">Pembeli Barang Kena Pajak / Penerima Jasa Kena Pajak</td></tr>
<tr>
<td class="line">
<table width="100%">
<tr><td width="50" class="left">Nama</td><td width="5" class="center">:</td><td class="left">_OUT_NAME_</td></tr>
<tr><td class="left">Alamat</td><td class="center">:</td><td class="left">_OUT_ADDRESS_ _OUT_CITY_</td></tr>
<tr><td class="left">NPWP</td><td class="center">:</td><td class="left">_OUT_NPWP_</td></tr>
</table>
</td>
</tr>
</table>
<div id="pdf_cont">
<table><thead>
<tr><th style="width:5%;">No.</th><th>Nama Barang Kena Pajak / Jasa Kena Pajak</th><th style="width:25%;">Harga Jual/Penggantian/Uang<br>Muka/Termin</th></tr>
</thead><tbody>';
$_line = '<tr><td class="center">%s</td><td class="left">%s</td><td class="right">%s</td></tr>';
$_foot = '
</tbody></table>
<table>
<tr><td class="left">Harga Jual / Penggantian</td><td class="right" style="width:25%;">_TOT_INVOICE_</td></tr>
<tr><td class="left">Dikurangi Potongan Harga</td><td class="right">_TOT_DISC_</td></tr>
<tr><td class="left">Dikurangi Uang Muka</td><td class="right">_TOT_DP_</td></tr>
<tr><td class="left">Dasar Pengenaan Pajak</td><td class="right">_TOT_BTAX_</td></tr>
<tr><td class="left">Total PPN = _PPN_STRING_% x Dasar Pengenaan Pajak</td><td class="right">_TOT_TAX_</td></tr>
<tr><td class="left">Total PPnBM (Pajak Penjualan Barang Mewah)</td><td class="right">0,00</td></tr>
</table>
<span style="font-size:8pt;">Sesuai dengan ketentuan yang berlaku, Direktorat Jenderal Pajak mengatur bahwa Faktur Pajak ini telah ditandatangani secara elektronik sehingga tidak diperlukan tanda tangan basah pada Faktur Pajak ini.</span><br />
<table width="100%" style="border:0;">
<tr><td style="width:50%;border:0;">&nbsp;</td><td style="border:0;">_REG_CITY_, _TGL_PAJAK_<br><br><br><br><br>_REG_OWNER_</td></tr>
</table>
</div>';
$db->Query("SELECT *,DATE_FORMAT(Tgl_Pajak,'%d-%m-%Y') Tgl_Pajak2 FROM inv_jual_pajak WHERE No_Pajak='".$nota."'");
if ($db->Next()) $ainfo = $db->AllRow();
if (intval($ainfo['OutletID'])>0) {
$db->Query("SELECT * FROM para_outlet WHERE OutletID='".$ainfo['OutletID']."'");
if ($db->Next()) {
if (!$ainfo['No_NPWP']) $ainfo['No_NPWP'] = $db->Row("No_NPWP");
if (!$ainfo['Nama_NPWP']) $ainfo['Nama_NPWP'] = $db->Row("Nama_NPWP");
if (!$ainfo['Alamat_NPWP']) $ainfo['Alamat_NPWP'] = $db->Row("Alamat_Outlet");
$ainfo['Kota_NPWP'] = $db->Row("Kota_Outlet");
}
}
$html = str_replace("_NO_PAJAK_", "010.".format_nofp($ainfo['No_Pajak']), $html);
$html = str_replace("_REG_NAME_", strtoupper($_SESSION['__WEB_APP']['REG_NAME']), $html);
$html = str_replace("_REG_ADDRESS_", $_SESSION['__WEB_APP']['REG_ADDRESS'], $html);
$html = str_replace("_REG_CITY_", $_SESSION['__WEB_APP']['REG_CITY'], $html);
$html = str_replace("_REG_NPWP_", $_SESSION['__WEB_APP']['REG_NPWP'], $html);
$html = str_replace("_OUT_NAME_", strtoupper($ainfo['Nama_NPWP']), $html);
$html = str_replace("_OUT_ADDRESS_", rapi_alamat($ainfo['Alamat_NPWP']), $html);
$html = str_replace("_OUT_CITY_", $ainfo['Kota_NPWP'], $html);
$html = str_replace("_OUT_NPWP_", $ainfo['No_NPWP'], $html);
$_foot = str_replace("_REG_CITY_", $_SESSION['__WEB_APP']['REG_CITY'], $_foot);
$_foot = str_replace("_TGL_PAJAK_", tgl_panjang($ainfo['Tgl_Pajak2']), $_foot);
$_foot = str_replace("_REG_OWNER_", $_SESSION['__WEB_APP']['REG_OWNER'], $_foot);
$_foot = str_replace("_PPN_STRING_", "11", $_foot);
//$_foot = str_replace("_PPN_STRING_", (($ainfo['Tgl_Pajak'] >= $_SESSION['__APP_IAS']['PPN_TGL']) ? $_SESSION['__APP_IAS']['PPN_STRING'] : "11"), $_foot);
$nomor = 1; $tot_inv = $tot_disc = $tot_btax = $tot_tax = 0; $ppn = 0;
$db->Query("SELECT P.Nama_Produk,R.Nama_Rasa,SUM(-D.Qty) Qty,ROUND(D.Harga_Jual/(1+D.PPN),2) Harga_Jual,SUM(-D.Qty*ROUND(D.Harga_Jual/(1+D.PPN),2)) Total_Jual,SUM(IF(D.Total_Diskon=(-D.Qty*D.Harga_Jual),-D.Qty*ROUND(D.Harga_Jual/(1+D.PPN),2),ROUND(D.Total_Diskon/(1+D.PPN),2))) Total_Diskon,D.PPN FROM (SELECT * FROM inv_detail WHERE No_Ref IN (SELECT No_Jual FROM inv_jual WHERE No_Pajak='".$nota."') AND Qty<>0) D LEFT JOIN inv_produk P ON (D.InvID=P.InvID) LEFT JOIN para_rasa R ON (D.RasaID=R.RasaID) WHERE P.Pajak=1 GROUP BY D.InvID, D.RasaID, D.SatuanID ORDER BY P.Nama_Produk");
while ($db->Next()) {
$ppn = $db->Row("PPN");
$_tdisc = ($db->RowFloat("Total_Diskon")==0) ? "" : "<br>Potongan Harga : Rp ".rupiah2($db->Row("Total_Diskon"));
$html .= sprintf($_line, $nomor, $db->Row("Nama_Produk").data_rasafp($db->Row("Nama_Rasa"))."<br>Rp ".rupiah2($db->Row("Harga_Jual"))." x ".rupiah2($db->Row("Qty")).$_tdisc, rupiah2($db->Row("Total_Jual")));
$tot_inv += $db->Row("Total_Jual");
$tot_disc += $db->Row("Total_Diskon");
$nomor++;
}
$tot_btax = floor($tot_inv - $tot_disc);
$tot_tax = floor($tot_btax * $ppn);
$_foot = str_replace("_TOT_INVOICE_", rupiah2($tot_inv), $_foot);
$_foot = str_replace("_TOT_DISC_", rupiah2($tot_disc), $_foot);
$_foot = str_replace("_TOT_DP_", rupiah2(0), $_foot);
$_foot = str_replace("_TOT_BTAX_", rupiah2($tot_btax), $_foot);
$_foot = str_replace("_TOT_TAX_", rupiah2($tot_tax), $_foot);
$html .= $_foot;
$mpdf = new \Mpdf\Mpdf([
'default_font_size' => 10,
'mode' => 'c',
'format' => 'A4',
'margin_left' => 5,
'margin_right' => 5,
'margin_top' => 5,
'margin_header' => 5,
'margin_footer' => 5
]);
$mpdf->SetDisplayMode('fullpage');
$css = file_get_contents($_SESSION['__WEB_APP']['REAL_PATH'].'assets/css/pdf/fp.css');
$mpdf->WriteHTML($css, \Mpdf\HTMLParserMode::HEADER_CSS);
$mpdf->WriteHTML($html, \Mpdf\HTMLParserMode::HTML_BODY);
$mpdf->SetAuthor($_SESSION['__WEB_APP']['REG_NAME']);
$mpdf->SetCreator($_SESSION['__WEB_APP']['APP_NAME']." v".$_SESSION['__WEB_APP']['APP_VER']);
$mpdf->setTitle("Faktur Pajak No. ".$nota);
$mpdf->Output($nota.".pdf", \Mpdf\Output\Destination::INLINE);
unset($mpdf);
}
function fp_retur($db, $nota="") {
if (trim($nota)=="") return;
$html = '
<htmlpagefooter name="RepFoot">
<table width="100%" style="border:none;"><tr><td width="95%" style="text-align:left;border:none;">PEMBERITAHUAN: Faktur Pajak ini telah dilaporkan ke Direktorat Jenderal Pajak dan telah memperoleh persetujuan sesuai dengan ketentuan peraturan perpajakan yang berlaku. PERINGATAN: PKP yang menerbitkan Faktur Pajak yang tidak sesuai dengan keadaan yang sebenarnya dan/atau sesungguhnya sebagaimana dimaksud Pasal 13 ayat (9) UU PPN dikenai sanksi sesuai dengan Pasal 14 ayat (4) UU KUP</td><td width="50%" style="text-align:right;font-style:italic;border:none;">{PAGENO} dari {nbpg}</td></tr></table>
</htmlpagefooter>
<sethtmlpagefooter name="RepFoot" show-this-page="1" value="on" />
<table class="judul" style="width:100%;" borderspacing="0">
<tr><td class="center" style="font-size:15pt;">Nota Retur</td></tr>
<tr><td class="line">Nomor : _NO_PAJAK_</td></tr>
<tr><td class="line">Pembeli Barang Kena Pajak</td></tr>
<tr>
<td class="line">
<table width="100%">
<tr><td width="50" class="left">Nama</td><td width="5" class="center">:</td><td class="left">_REG_NAME_</td></tr>
<tr><td class="left">Alamat</td><td class="center">:</td><td class="left">_REG_ADDRESS_ _REG_CITY_</td></tr>
<tr><td class="left">NPWP</td><td class="center">:</td><td class="left">_REG_NPWP_</td></tr>
</table>
</td>
</tr>
<tr><td class="line">Kepada Penjual</td></tr>
<tr>
<td class="line">
<table width="100%">
<tr><td width="50" class="left">Nama</td><td width="5" class="center">:</td><td class="left">_OUT_NAME_</td></tr>
<tr><td class="left">Alamat</td><td class="center">:</td><td class="left">_OUT_ADDRESS_ _OUT_CITY_</td></tr>
<tr><td class="left">NPWP</td><td class="center">:</td><td class="left">_OUT_NPWP_</td></tr>
</table>
</td>
</tr>
</table>
<div id="pdf_cont">
<table><thead>
<tr><th style="width:5%;">No.</th><th>Nama Barang Kena Pajak / Jasa Kena Pajak</th><th style="width:25%;">Harga Jual/Penggantian/Uang<br>Muka/Termin</th></tr>
</thead><tbody>';
$_line = '<tr><td class="center">%s</td><td class="left">%s</td><td class="right">%s</td></tr>';
$_foot = '
</tbody></table>
<table>
<tr><td class="left">Harga Jual / Penggantian</td><td class="right" style="width:25%;">_TOT_INVOICE_</td></tr>
<tr><td class="left">Dikurangi Potongan Harga</td><td class="right">_TOT_DISC_</td></tr>
<tr><td class="left">Dikurangi Uang Muka</td><td class="right">_TOT_DP_</td></tr>
<tr><td class="left">Dasar Pengenaan Pajak</td><td class="right">_TOT_BTAX_</td></tr>
<tr><td class="left">Total PPN = _PPN_STRING_% x Dasar Pengenaan Pajak</td><td class="right">_TOT_TAX_</td></tr>
<tr><td class="left">Total PPnBM (Pajak Penjualan Barang Mewah)</td><td class="right">0,00</td></tr>
</table>
<span style="font-size:8pt;">Sesuai dengan ketentuan yang berlaku, Direktorat Jenderal Pajak mengatur bahwa Faktur Pajak ini telah ditandatangani secara elektronik sehingga tidak diperlukan tanda tangan basah pada Faktur Pajak ini.</span><br />
<table width="100%" style="border:0;">
<tr><td style="width:50%;border:0;">&nbsp;</td><td style="border:0;">_REG_CITY_, _TGL_PAJAK_<br><br><br><br><br>_REG_OWNER_</td></tr>
</table>
</div>';
$db->Query("SELECT *,DATE_FORMAT(Tgl_Pajak,'%d-%m-%Y') Tgl_Pajak2,DATE_FORMAT(Tgl_Retur,'%d-%m-%Y') Tgl_Retur2 FROM inv_beli_pajak WHERE No_Pajak='".$nota."'");
if ($db->Next()) $ainfo = $db->AllRow();
if (intval($ainfo['SupID'])>0) {
$db->Query("SELECT * FROM para_supplier WHERE SupID='".$ainfo['SupID']."'");
if ($db->Next()) {
$ainfo['No_NPWP'] = $db->Row("No_NPWP");
$ainfo['Nama_NPWP'] = $db->Row("Nama_Sup");
$ainfo['Alamat_NPWP'] = $db->Row("Alamat_Sup");
$ainfo['Kota_NPWP'] = $db->Row("Kota_Sup");
}
}
$html = str_replace("_NO_RETUR_", $ainfo['No_Retur'], $html);
$html = str_replace("_NO_PAJAK_", $ainfo['No_Pajak'], $html);
$html = str_replace("_TGL_PAJAK_", $ainfo['Tgl_Pajak2'], $html);
$html = str_replace("_REG_NAME_", strtoupper($_SESSION['__WEB_APP']['REG_NAME']), $html);
$html = str_replace("_REG_ADDRESS_", $_SESSION['__WEB_APP']['REG_ADDRESS'], $html);
$html = str_replace("_REG_CITY_", $_SESSION['__WEB_APP']['REG_CITY'], $html);
$html = str_replace("_REG_NPWP_", $_SESSION['__WEB_APP']['REG_NPWP'], $html);
$html = str_replace("_OUT_NAME_", strtoupper($ainfo['Nama_NPWP']), $html);
$html = str_replace("_OUT_ADDRESS_", rapi_alamat($ainfo['Alamat_NPWP']), $html);
$html = str_replace("_OUT_CITY_", $ainfo['Kota_NPWP'], $html);
$html = str_replace("_OUT_NPWP_", $ainfo['No_NPWP'], $html);
$_foot = str_replace("_REG_CITY_", $_SESSION['__WEB_APP']['REG_CITY'], $_foot);
$_foot = str_replace("_TGL_PAJAK_", tgl_panjang($ainfo['Tgl_Pajak2']), $_foot);
$_foot = str_replace("_REG_OWNER_", $_SESSION['__WEB_APP']['REG_OWNER'], $_foot);
$_foot = str_replace("_PPN_STRING_", "11", $_foot);
//$_foot = str_replace("_PPN_STRING_", (($ainfo['Tgl_Pajak'] >= $_SESSION['__APP_IAS']['PPN_TGL']) ? $_SESSION['__APP_IAS']['PPN_STRING'] : "11"), $_foot);
$nomor = 1; $tot_inv = 0; $tot_tax = 0; $ppn = 0;
$db->Query("SELECT P.Nama_Produk,R.Nama_Rasa,S.Nama_Satuan,-D.Qty Qty,(D.Harga_Pokok/(1+D.PPN)) Harga_Satuan,FLOOR((-D.Qty*D.Harga_Pokok)/(1+D.PPN)) Total_Beli FROM (SELECT * FROM inv_detail WHERE No_Ref IN (SELECT No_Beli FROM inv_beli WHERE No_Pajak='".$nota."' AND Data_Beli=0) AND Qty<>0) D LEFT JOIN inv_produk P ON (D.InvID=P.InvID) LEFT JOIN para_satuan S ON (D.SatuanID=S.SatuanID) LEFT JOIN para_rasa R ON (D.RasaID=R.RasaID)");
while ($db->Next()) {
$ppn = $db->Row("PPN");
$html .= sprintf($_line, $nomor, $db->Row("Nama_Produk").data_rasafp($db->Row("Nama_Rasa"))."<br>Rp ".rupiah2($db->Row("Harga_Satuan"))." x ".rupiah2($db->Row("Qty")), rupiah2($db->Row("Total_Beli")));
$tot_inv += $db->Row("Total_Beli");
$nomor++;
}
$tot_tax = floor($tot_inv * $ppn);
$_foot = str_replace("_TOT_INVOICE_", rupiah2($tot_inv), $_foot);
$_foot = str_replace("_TOT_DISC_", rupiah2(0), $_foot);
$_foot = str_replace("_TOT_DP_", rupiah2(0), $_foot);
$_foot = str_replace("_TOT_BTAX_", rupiah2($tot_tax), $_foot);
$_foot = str_replace("_TOT_TAX_", rupiah2($tot_tax), $_foot);
$html .= $_foot;
$mpdf = new \Mpdf\Mpdf([
'default_font_size' => 10,
'mode' => 'c',
'format' => 'A4',
'margin_left' => 5,
'margin_right' => 5,
'margin_top' => 5,
'margin_header' => 5,
'margin_footer' => 5
]);
$mpdf->SetDisplayMode('fullpage');
$css = file_get_contents($_SESSION['__WEB_APP']['REAL_PATH'].'assets/css/pdf/fp.css');
$mpdf->WriteHTML($css, \Mpdf\HTMLParserMode::HEADER_CSS);
$mpdf->WriteHTML($html, \Mpdf\HTMLParserMode::HTML_BODY);
$mpdf->SetAuthor($_SESSION['__WEB_APP']['REG_NAME']);
$mpdf->SetCreator($_SESSION['__WEB_APP']['APP_NAME']." v".$_SESSION['__WEB_APP']['APP_VER']);
$mpdf->setTitle("Faktur Pajak No. ".$nota);
$mpdf->Output($nota.".pdf", \Mpdf\Output\Destination::INLINE);
unset($mpdf);
}
function fp_biaya($db, $nota="") {
if (trim($nota)=="") return;
$html = '
<htmlpagefooter name="RepFoot">
<table width="100%" style="border:none;"><tr><td width="95%" style="text-align:left;border:none;">PEMBERITAHUAN: Faktur Pajak ini telah dilaporkan ke Direktorat Jenderal Pajak dan telah memperoleh persetujuan sesuai dengan ketentuan peraturan perpajakan yang berlaku. PERINGATAN: PKP yang menerbitkan Faktur Pajak yang tidak sesuai dengan keadaan yang sebenarnya dan/atau sesungguhnya sebagaimana dimaksud Pasal 13 ayat (9) UU PPN dikenai sanksi sesuai dengan Pasal 14 ayat (4) UU KUP</td><td width="50%" style="text-align:right;font-style:italic;border:none;">{PAGENO} dari {nbpg}</td></tr></table>
</htmlpagefooter>
<sethtmlpagefooter name="RepFoot" show-this-page="1" value="on" />
<table class="judul" style="width:100%;" borderspacing="0">
<tr><td class="center" style="font-size:15pt;">Faktur Pajak</td></tr>
<tr><td class="line">Kode dan Nomor Seri Faktur Pajak : _NO_PAJAK_</td></tr>
<tr><td class="line">Pengusaha Kena Pajak</td></tr>
<tr>
<td class="line">
<table width="100%">
<tr><td width="50" class="left">Nama</td><td width="5" class="center">:</td><td class="left">_REG_NAME_</td></tr>
<tr><td class="left">Alamat</td><td class="center">:</td><td class="left">_REG_ADDRESS_ _REG_CITY_</td></tr>
<tr><td class="left">NPWP</td><td class="center">:</td><td class="left">_REG_NPWP_</td></tr>
</table>
</td>
</tr>
<tr><td class="line">Pembeli Barang Kena Pajak / Penerima Jasa Kena Pajak</td></tr>
<tr>
<td class="line">
<table width="100%">
<tr><td width="50" class="left">Nama</td><td width="5" class="center">:</td><td class="left">_OUT_NAME_</td></tr>
<tr><td class="left">Alamat</td><td class="center">:</td><td class="left">_OUT_ADDRESS_ _OUT_CITY_</td></tr>
<tr><td class="left">NPWP</td><td class="center">:</td><td class="left">_OUT_NPWP_</td></tr>
</table>
</td>
</tr>
</table>
<div id="pdf_cont">
<table><thead>
<tr><th style="width:5%;">No.</th><th>Nama Barang Kena Pajak / Jasa Kena Pajak</th><th style="width:25%;">Harga Jual/Penggantian/Uang<br>Muka/Termin</th></tr>
</thead><tbody>';
$_line = '<tr><td class="center">%s</td><td class="left">%s</td><td class="right">%s</td></tr>';
$_foot = '
</tbody></table>
<table>
<tr><td class="left">Harga Jual / Penggantian</td><td class="right" style="width:25%;">_TOT_INVOICE_</td></tr>
<tr><td class="left">Dikurangi Potongan Harga</td><td class="right">_TOT_DISC_</td></tr>
<tr><td class="left">Dikurangi Uang Muka</td><td class="right">_TOT_DP_</td></tr>
<tr><td class="left">Dasar Pengenaan Pajak</td><td class="right">_TOT_BTAX_</td></tr>
<tr><td class="left">Total PPN = _PPN_STRING_% x Dasar Pengenaan Pajak</td><td class="right">_TOT_TAX_</td></tr>
<tr><td class="left">Total PPnBM (Pajak Penjualan Barang Mewah)</td><td class="right">0,00</td></tr>
</table>
<span style="font-size:8pt;">Sesuai dengan ketentuan yang berlaku, Direktorat Jenderal Pajak mengatur bahwa Faktur Pajak ini telah ditandatangani secara elektronik sehingga tidak diperlukan tanda tangan basah pada Faktur Pajak ini.</span><br />
<table width="100%" style="border:0;">
<tr><td style="width:50%;border:0;">&nbsp;</td><td style="border:0;">_REG_CITY_, _TGL_PAJAK_<br><br><br><br><br>_REG_OWNER_</td></tr>
</table>
</div>';
$db->Query("SELECT *,DATE_FORMAT(Tgl_Pajak,'%d-%m-%Y') Tgl_Pajak2 FROM biaya_pajak WHERE No_Biaya='".$nota."'");
if ($db->Next()) $ainfo = $db->AllRow();
if (intval($ainfo['SupID'])>0) {
$db->Query("SELECT * FROM para_supplier WHERE SupID='".$ainfo['SupID']."'");
if ($db->Next()) {
$ainfo['No_NPWP'] = $db->Row("No_NPWP");
$ainfo['Nama_NPWP'] = $db->Row("Nama_Sup");
$ainfo['Alamat_NPWP'] = $db->Row("Alamat_Sup");
$ainfo['Kota_NPWP'] = $db->Row("Kota_Sup");
}
}
$html = str_replace("_NO_PAJAK_", "010.".format_nofp($ainfo['No_Pajak']), $html);
$html = str_replace("_REG_NAME_", strtoupper($_SESSION['__WEB_APP']['REG_NAME']), $html);
$html = str_replace("_REG_ADDRESS_", $_SESSION['__WEB_APP']['REG_ADDRESS'], $html);
$html = str_replace("_REG_CITY_", $_SESSION['__WEB_APP']['REG_CITY'], $html);
$html = str_replace("_REG_NPWP_", $_SESSION['__WEB_APP']['REG_NPWP'], $html);
$html = str_replace("_OUT_NAME_", strtoupper($ainfo['Nama_NPWP']), $html);
$html = str_replace("_OUT_ADDRESS_", rapi_alamat($ainfo['Alamat_NPWP']), $html);
$html = str_replace("_OUT_CITY_", $ainfo['Kota_NPWP'], $html);
$html = str_replace("_OUT_NPWP_", $ainfo['No_NPWP'], $html);
$_foot = str_replace("_REG_CITY_", $_SESSION['__WEB_APP']['REG_CITY'], $_foot);
$_foot = str_replace("_TGL_PAJAK_", tgl_panjang($ainfo['Tgl_Pajak2']), $_foot);
$_foot = str_replace("_REG_OWNER_", $_SESSION['__WEB_APP']['REG_OWNER'], $_foot);
$_foot = str_replace("_PPN_STRING_", "11", $_foot);
//$_foot = str_replace("_PPN_STRING_", (($ainfo['Tgl_Pajak'] >= $_SESSION['__APP_IAS']['PPN_TGL']) ? $_SESSION['__APP_IAS']['PPN_STRING'] : "11"), $_foot);
$nomor = 1; $tot_inv = $tot_disc = $tot_btax = $tot_tax = 0; $ppn = 0;
$db->Query("SELECT *,(Qty*Harga_Jual) Total_Jual,0 Total_Diskon FROM biaya_pajak_detail WHERE No_Biaya='".$nota."' ORDER BY ID");
while ($db->Next()) {
$ppn = $db->Row("PPN");
$_tdisc = ($db->RowFloat("Total_Diskon")==0) ? "" : "<br>Potongan Harga : Rp ".rupiah2($db->Row("Total_Diskon"));
$html .= sprintf($_line, $nomor, $db->Row("Uraian_Biaya")."<br>Rp ".rupiah2($db->Row("Harga_Jual"))." x ".rupiah2($db->Row("Qty")).$_tdisc, rupiah2($db->Row("Total_Jual")));
$tot_inv += $db->Row("Total_Jual");
$tot_disc += $db->Row("Total_Diskon");
$nomor++;
}
$tot_btax = floor($tot_inv - $tot_disc);
$tot_tax = floor($tot_btax * $ppn);
$_foot = str_replace("_TOT_INVOICE_", rupiah2($tot_inv), $_foot);
$_foot = str_replace("_TOT_DISC_", rupiah2($tot_disc), $_foot);
$_foot = str_replace("_TOT_DP_", rupiah2(0), $_foot);
$_foot = str_replace("_TOT_BTAX_", rupiah2($tot_btax), $_foot);
$_foot = str_replace("_TOT_TAX_", rupiah2($tot_tax), $_foot);
$html .= $_foot;
$mpdf = new \Mpdf\Mpdf([
'default_font_size' => 10,
'mode' => 'c',
'format' => 'A4',
'margin_left' => 5,
'margin_right' => 5,
'margin_top' => 5,
'margin_header' => 5,
'margin_footer' => 5
]);
$mpdf->SetDisplayMode('fullpage');
$css = file_get_contents($_SESSION['__WEB_APP']['REAL_PATH'].'assets/css/pdf/fp.css');
$mpdf->WriteHTML($css, \Mpdf\HTMLParserMode::HEADER_CSS);
$mpdf->WriteHTML($html, \Mpdf\HTMLParserMode::HTML_BODY);
$mpdf->SetAuthor($_SESSION['__WEB_APP']['REG_NAME']);
$mpdf->SetCreator($_SESSION['__WEB_APP']['APP_NAME']." v".$_SESSION['__WEB_APP']['APP_VER']);
$mpdf->setTitle("Faktur Pajak No. ".$nota);
$mpdf->Output($nota.".pdf", \Mpdf\Output\Destination::INLINE);
unset($mpdf);
}
$db = (is_resource($db)) ? $db : new MySQL();
$data = Param::Get("data");
$nomor = Param::Get("Nomor_Cetak");
if ( $data == "fp-jual" ) {
fp_jual($db, $nomor);
} else if ( $data == "fp-retur" ) {
fp_retur($db, $nomor);
} else if ( $data == "fp-biaya" ) {
fp_biaya($db, $nomor);
} else if ( $data == "default") {}
?>
+127
View File
@@ -0,0 +1,127 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/hutang.php
Desc. : PHP - Laporan Hutang Supplier
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : July 17th, 2011.
Last Modified : October 22nd, 2015.
(c) 2011 - 2015, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.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;
use siaupheng\fonia3\Printer\PrintHTML;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$tipe = Param::Get("Tipe"); // R or D
$id_sup = Param::Get("SupID", 0);
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$asup = [];
if ($id_sup > 0) {
$db->Query("SELECT * FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
if ($db->Next()) $asup = $db->AllRow();
}
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_sup>0) ? " AND B.SupID='".$id_sup."'" : "";
if ($tipe=="R") {
$db->Query("SELECT S.Nama_Sup,SUM(B.Total_Beli-B.Total_Diskon) Total_Hutang FROM inv_beli B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) WHERE B.Lunas=0 AND (B.Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY B.SupID ORDER BY S.Nama_Sup");
} else {
$db->Query("SELECT B.*,DATE_FORMAT(B.Tgl_Beli,'%d-%m-%Y') Tgl_Beli2,CONCAT(S.Nama_Sup,IF(B.Data_Beli=1,'',' <i>(Retur)</i>')) Nama_Sup,B.Total_Beli-B.Total_Diskon Total_Hutang FROM inv_beli B LEFT JOIN para_supplier S ON (B.SupID=S.SupID) WHERE B.Lunas=0 AND (B.Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." ORDER BY B.No_Beli");
}
}
if ( $data == "print" ) {
Report_Header("LAPORAN ".($tipe=="R"?"REKAP":"DETAIL")." HUTANG SUPPLIER", $tglheader);
$pre = new PrintHTML();
$pre->set_css("garis");
if ($tipe=="R") {
$pre->add_field("NO.",10,"C");
$pre->add_field("NAMA SUPPLIER",120);
$pre->add_field("JUMLAH HUTANG",30,"R","uang");
$pre->add_field("JUMLAH BAYAR",30,"R","uang");
$pre->add_field("SISA HUTANG",30,"R","uang");
if ($supid>0) $pre->add_span(array("NAMA SUPPLIER",2,"L,NB"),array(": ".$asup['Nama_Sup'],3,"L,NB"));
$pre->show_fields();
$tot_hut = $tot_bayar = $nomor = 0;
while ($db->Next()) {
$nomor++;
$tot_hut += $db->Row("Total_Hutang");
$tot_bayar += 0;
$pre->add_value($nomor, $db->Row("Nama_Sup"), $db->Row("Total_Hutang"), 0, $db->Row("Total_Hutang"));
}
$pre->add_span(array("",1),array("GRAND TOTAL",1,"L,B"),array($tot_hut,1,"R,B","uang"),array($tot_bayar,1,"R,B","uang"),array($tot_hut-$tot_bayar,1,"R,B","uang"));
} else {
$pre->add_field("NO. NOTA",10,"C");
$pre->add_field("TGL. BELI",10,"C");
$pre->add_field("NAMA SUPPLIER",120);
$pre->add_field("JUMLAH HUTANG",30,"R","uang");
if ($supid>0) $pre->add_span(array("NAMA SUPPLIER",2,"L,NB"),array(": ".$nama_sup,2,"L,NB"));
$pre->show_fields();
$subtotal = 0;
while ($db->Next()) {
$subtotal += $db->Row("Total_Hutang");
$pre->add_value($db->Row("No_Beli"), $db->Row("Tgl_Beli2"), $db->Row("Nama_Sup"), $db->Row("Total_Hutang"));
}
$pre->add_span(array("GRAND TOTAL",3,"L,B"),array($subtotal,1,"R,B","uang"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "default") {
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
$tsup = $form->option_db("_", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "TRUE ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
$ttglfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$ttglto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="SupID">Nama Supplier</label>
<div class="col">'.$tsup.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col">'.$ttglfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col">'.$ttglto.'</div>
</div>';
}
?>
+271
View File
@@ -0,0 +1,271 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/jual.php
Desc. : PHP - Laporan Penjualan
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : April 12th, 2011.
Last Modified : February 4th, 2024.
(c) 2011 - 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.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;
use siaupheng\fonia3\Printer\PrintHTML;
use siaupheng\fonia3\Data\SimpleXLS;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$tipe = Param::Get("Tipe"); // R or D
$rekap = Param::Get("Rekap"); // X, 1, 0
$ck = Param::Get("CK", "X");
$id_outlet = Param::Get("OutletID", 0);
$id_sales = Param::Get("SalesID", "SEMUA");
$id_grup = Param::Get("Grup_InvID");
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$aoutlet = []; $agroup = []; $asales = [];
if ($id_outlet > 0) {
$db->Query("SELECT * FROM para_outlet WHERE OutletID='".$id_outlet."' LIMIT 1");
if ($db->Next()) $aoutlet = $db->AllRow();
}
if ($id_grup > 0) {
$db->Query("SELECT * FROM inv_produk_grup WHERE Grup_InvID='".$id_grup."' LIMIT 1");
if ($db->Next()) $agroup = $db->AllRow();
}
if (!in_array($id_sales, [0,"NON","SEMUA"])) {
$db->Query("SELECT Nama_Pegawai Nama_Sales FROM para_pegawai WHERE PegID='".$id_sales."' LIMIT 1");
if ($db->Next()) $asales = $db->AllRow();
}
if ($id_sales=="NON") $asales['Nama_Sales'] = "TANPA SALES";
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " s/d ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_outlet>0) ? " AND OutletID='".$id_outlet."'" : "";
$tsql .= (!in_array($id_sales, [0,"NON","SEMUA"])) ? " AND SalesID='".$id_sales."'" : "";
$tsql .= ($id_sales=="NON") ? " AND SalesID=0" : "";
$tsql .= ($rekap<>"X") ? " AND Rekap='".intval($rekap)."'" : "";
$tsql .= ($ck=="X") ? "" : ($ck=="C" ? " AND (Tgl_Jual=Tgl_JT OR Tgl_JT='0000-00-00')" : " AND (Tgl_Jual<>Tgl_JT AND Tgl_JT<>'0000-00-00')");
if ($tipe=="R") {
$db->Query("SELECT J.*,O.Nama_Outlet FROM (SELECT OutletID,SUM(Total_Jual) Total_Jual,SUM(Total_Diskon) Total_Diskon,SUM(Total_Jual-Total_Diskon) Total FROM inv_jual WHERE Data_Jual=1 AND (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY OutletID) J LEFT JOIN para_outlet O ON (J.OutletID=O.OutletID) ORDER BY O.Nama_Outlet");
} else {
$tgrup = ($id_grup>0) ? " AND InvID IN (SELECT InvID FROM inv_produk WHERE Grup_InvID='".$id_grup."')" : "";
$db->Query("SELECT J.*,D.*,O.Nama_Outlet,S.Nama_Pegawai FROM (SELECT No_Jual,OutletID,SalesID,Tgl_Jual,DATE_FORMAT(Tgl_Jual,'%d-%m-%Y') Tgl_Jual2,Tgl_Lunas,DATE_FORMAT(Tgl_Lunas,'%d-%m-%Y') Tgl_Lunas2,IF(Tgl_Jual=Tgl_JT OR Tgl_JT='0000-00-00','C','K') CK,No_Faktur,Catatan FROM inv_jual WHERE Data_Jual=1 AND (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") J LEFT JOIN (SELECT No_Ref,SUM(-Qty*Harga_Jual) Total_Jual,SUM(Total_Diskon) Total_Diskon FROM inv_detail WHERE No_Ref IN (SELECT No_Jual FROM inv_jual WHERE Data_Jual=1 AND (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.")".$tgrup." GROUP BY No_Ref) D ON (D.No_Ref=J.No_Jual) LEFT JOIN para_outlet O ON (J.OutletID=O.OutletID) LEFT JOIN para_pegawai S ON (S.PegID=J.SalesID) WHERE D.Total_Jual<>0 ORDER BY J.No_Jual");
}
}
if ( $data == "print" ) {
Report_Header("LAPORAN ".($tipe=="R"?"REKAP":"DETAIL")." PENJUALAN", $tglheader);
$pre = new PrintHTML();
$pre->set_css("garis");
if ($tipe=="R") {
if ($id_outlet>0) echo "Nama Outlet : ".$aoutlet['Nama_Outlet']."<br>";
if ($id_sales>0 || $id_sales=="NON") echo "Nama Sales : ".$asales['Nama_Sales']."<br>";
$pre->add_field("NO.",10,"C");
$pre->add_field("NAMA OUTLET",80);
$pre->add_field("SUB. TOTAL",20,"R","rupiah");
$pre->add_field("DISKON",20,"R","rupiah");
$pre->add_field("TOTAL",20,"R","rupiah");
$pre->show_fields();
$subtotal = 0; $diskon = 0; $nomor = 0;
while ($db->Next()) {
$subtotal += $db->Row("Total_Jual");
$diskon += $db->Row("Total_Diskon");
$pre->add_value(++$nomor, $db->Row("Nama_Outlet"), $db->Row("Total_Jual"), $db->Row("Total_Diskon"), $db->Row("Total"));
}
$pre->add_span(array(""),array("GRAND TOTAL",1,"L,B"),array($subtotal,1,"R,B","rupiah"),array($diskon,1,"R,B","rupiah"),array($subtotal-$diskon,1,"R,B","rupiah"));
} else {
if ($id_outlet>0) echo "Nama Outlet : ".$aoutlet['Nama_Outlet']."<br>";
if ($id_sales>0 || $id_sales=="NON") echo "Nama Sales : ".$asales['Nama_Sales']."<br>";
if ($id_grup>0) echo "Nama Grup Produk : ".$agroup['Nama_Grup']."<br>";
$pre->add_field("No. Nota",10,"C");
$pre->add_field("Tgl. Nota",10,"C");
$pre->add_field("Tgl. Lunas",10,"C");
$pre->add_field("No. Faktur",10);
$pre->add_field("Nama Outlet",80);
$pre->add_field("Nama Sales",30);
$pre->add_field("Sub. Total",20,"R","rupiah");
$pre->add_field("Diskon",20,"R","rupiah");
$pre->add_field("Total",20,"R","rupiah");
$pre->add_field("C/K", 6, "C");
$pre->add_field("Catatan", 30);
$pre->show_fields();
$subtotal = 0; $diskon = 0;
while ($db->Next()) {
$subtotal += $db->Row("Total_Jual");
$diskon += $db->Row("Total_Diskon");
$pre->add_value($db->Row("No_Jual"), $db->Row("Tgl_Jual2"), $db->Row("Tgl_Lunas2"), $db->Row("No_Faktur"), $db->Row("Nama_Outlet"), $db->Row("Nama_Pegawai"), $db->Row("Total_Jual"), $db->Row("Total_Diskon"), $db->Row("Total_Jual")-$db->Row("Total_Diskon"), $db->Row("CK"), $db->Row("Catatan"));
}
$pre->add_span(array("",2),array("GRAND TOTAL",4,"L,B"),array($subtotal,1,"R,B","rupiah"),array($diskon,1,"R,B","rupiah"),array($subtotal-$diskon,1,"R,B","rupiah"), array("",1), array("",1));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Laporan ".($tipe=="R"?"Rekap":"Detail")." Penjualan",
'subject'=>"PT.PMS",
'desc'=>"Export Data dari IAS"
]);
$xls->add_header("<b>".strtoupper($_SESSION['__WEB_APP']['REG_NAME'])."</b>");
$xls->add_header("<b>LAPORAN ".($tipe=="R"?"REKAP":"DETAIL")." PENJUALAN</b>");
$xls->add_header($tglheader);
if ($tipe=="R") {
$xls->add_field("NO.", 10, "C");
$xls->add_field("NAMA OUTLET", 80, "L");
$xls->add_field("SUB. TOTAL", 20, "R,N");
$xls->add_field("DISKON", 20, "R,N");
$xls->add_field("TOTAL", 20, "R,N");
$xls->add_sheet("REKAP PENJUALAN", false);
if ($id_outlet>0) $xls->add_span(["Nama Outlet",2,"L"],[$aoutlet['Nama_Outlet'],3]);
if ($id_sales>0 || $id_sales=="NON") $xls->add_span(["Nama Sales",2,"L"],[$asales['Nama_Sales'],3]);
$xls->show_headers();
$subtotal = 0; $diskon = 0; $nomor = 0;
while ($db->Next()) {
$nomor++;
$subtotal += $db->RowFloat("Total_Jual");
$diskon += $db->RowFloat("Total_Diskon");
$xls->add_value($nomor, $db->Row("Nama_Outlet"), $db->RowFloat("Total_Jual"), $db->RowFloat("Total_Diskon"), $db->RowFloat("Total"));
}
$xls->add_span(["GRAND TOTAL",2,"C,B"],[$subtotal,1,"R,B,N"],[$diskon,1,"R,B,N"],[$subtotal-$diskon,1,"R,B,N"]);
} else {
$xls->add_field("NO. NOTA", 12, "C");
$xls->add_field("TGL. NOTA", 12, "C");
$xls->add_field("TGL. LUNAS", 12, "C");
$xls->add_field("NO. FAKTUR", 12, "L");
$xls->add_field("NAMA OUTLET", 60, "L");
$xls->add_field("NAMA SALES", 20, "L");
$xls->add_field("SUB. TOTAL", 20, "R,N");
$xls->add_field("DISKON", 20, "R,N");
$xls->add_field("TOTAL", 20, "R,N");
$xls->add_field("C/K", 4, "C");
$xls->add_field("CATATAN", 20, "L");
$xls->add_sheet("DETAIL PENJUALAN", false);
if ($id_outlet>0) $xls->add_span(["Nama Outlet",3,"L"],[$aoutlet['Nama_Outlet'],8]);
if ($id_sales>0 || $id_sales=="NON") $xls->add_span(["Nama Sales",3,"L"],[$asales['Nama_Sales'],8]);
if ($id_grup>0) $xls->add_span(["Nama Grup Produk",3,"L"],[$agroup['Nama_Grup'],8]);
$xls->show_headers();
$subtotal = 0; $diskon = 0;
while ($db->Next()) {
$subtotal += $db->RowFloat("Total_Jual");
$diskon += $db->RowFloat("Total_Diskon");
$xls->add_value($db->Row("No_Jual"), $db->Row("Tgl_Jual"), ($db->Row("Tgl_Lunas")=="0000-00-00"?"":$db->Row("Tgl_Lunas")), $db->Row("No_Faktur"), $db->Row("Nama_Outlet"), $db->Row("Nama_Pegawai"), $db->RowFloat("Total_Jual"), $db->RowFloat("Total_Diskon"), $db->RowFloat("Total_Jual")-$db->RowFloat("Total_Diskon"), $db->Row("CK"), $db->Row("Catatan"));
}
$xls->add_span(["GRAND TOTAL",6,"C,B"],[$subtotal,1,"R,B,N"],[$diskon,1,"R,B,N"],[$subtotal-$diskon,1,"R,B,N"],[""],[""]);
}
$xls->add_stamp(1, true);
$xls->send("Laporan Penjualan.xlsx");
unset($xls);
} else if ( $data == "brow-outlet" ) {
$tcari = trim(Param::Get("Cari_Outlet"));
$tsql = ($tcari=="") ? " LIMIT 100" : " AND CONCAT(Nama_Outlet,Telp_Outlet,Nama_Outlet) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM vi_para_outlet WHERE Aktif=1".$tsql);
$obj->add_field("OutletID", "ID", "hid");
$obj->add_field("Kode_Outlet", "Kode", "c");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Alamat_Kota", "Alamat & Kota", "awr");
$obj->set_field_order("Nama_Outlet", "A");
$obj->add_row_btn("save", "Pilih", "RepoJualJS.outlet_select");
$obj->set_func_navi("RepoJualJS.data_query('brow-outlet')");
$ajson[] = $obj->json_table("divBrowOutlet");
} else if ( $data == "auto-outlet" ) {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [['value' => 0, 'text' => "SEMUA OUTLET", 'data' => ""]];
if (is_string($tcari) && strlen($tcari) < 64) {
$db->Query("SELECT * FROM vi_para_outlet WHERE Aktif=1 AND CONCAT(Nama_Outlet,Alamat_Outlet) LIKE '%".$tcari."%' ORDER BY Nama_Outlet LIMIT 50");
while ($db->Next()) {
$ajson['autodata'][] = ['value'=>$db->Row("OutletID"), 'text'=>$db->Row("Nama_Alamat"), 'data'=>$db->Row("Alamat_Kota")];
}
}
} else if ( $data == "default") {
$asales = ['SEMUA' => "SEMUA SALES", 'NON' => "TANPA-SALES"];
$db->Query("SELECT PegID,Nama_Pegawai FROM para_pegawai WHERE Jenis_PegID='".$_SESSION['__APP_IAS']['GRUP_PEG_SALES']."' ORDER BY Nama_Pegawai");
while ($db->Next()){
$asales[$db->Row("PegID")] = $db->Row("Nama_Pegawai");
}
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"], null, "RepoJualJS.oc_Tipe();");
$trekap = $form->radio("_", "Rekap", "X", true, false, ["1"=>"Antar","0"=>"Belum Antar","X"=>"Semua"]);
$tck = $form->radio("_", "CK", "X", true, false, ["C"=>"Cash","K"=>"Kredit","X"=>"Semua"]);
$toutlet = $form->textauto("_", "Nama_Outlet", ['value'=>0,'text'=>"SEMUA OUTLET"], true, false);
$tsales = $form->option("_", "SalesID", "SEMUA", true, false, $asales);
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "TRUE ORDER BY Nama_Grup", [0,"SEMUA GRUP"]);
$ttglfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$ttglto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Rekap">Status Order</label>
<div class="col">'.$trekap.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="CK">Status Bayar</label>
<div class="col">'.$tck.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Nama_Outlet">Nama Outlet</label>
<div class="col"><div class="input-group">'.$toutlet.'<button class="btn btn-info" type="button" onclick="RepoJualJS.outlet_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="SalesID">Nama Sales</label>
<div class="col">'.$tsales.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Grup_InvID">Grup Produk</label>
<div class="col">'.$tgrup.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col">'.$ttglfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col">'.$ttglto.'</div>
</div>
<input type="hidden" id="OutletID" value="0">';
}
send_json($ajson);
?>
+159
View File
@@ -0,0 +1,159 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/jual_harian.php
Desc. : PHP - Laporan Penjualan Harian
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : June 6th, 2011.
Last Modified : November 18th, 2023.
(c) 2011 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.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;
use siaupheng\fonia3\Printer\PrintHTML;
use siaupheng\fonia3\Data\SimpleXLS;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$rekap = Param::Get("Rekap"); // X, 1, 0
$id_grup = Param::Get("Grup_InvID", 0);
$tgldata = Param::Get("Tgl_Data");
// generate report header
//$grupheader = ($grup>0) ? " - ".fastQuery("SELECT UPPER(Nama_Grup) Nama FROM inv_produk_grup WHERE Grup_InvID=".$grup, "") : "";
$tglheader = "Periode : ".$tgldata;
$tgldata = tgl_sql2str($tgldata);
$tsql = ($rekap<>"X") ? " AND Rekap=".intval($rekap) : "";
$tsql2 = ($id_grup>0) ? " WHERE P.Grup_InvID=".$id_grup : "";
$db->Query("SELECT D.No_Ref,D.Promo,D.Harga_Jual,P.Nama_Produk,S.Nama_Satuan,R.Nama_Rasa,SUM(-D.Qty) Qty1,SUM(-D.Qty*D.Harga_Jual) Sub_Total,J.No_Faktur,O.Nama_Outlet,O.Alamat_Outlet,L.Nama_Pegawai Nama_Sales,J.Total_Jual,J.Total_Diskon FROM (SELECT * FROM inv_detail WHERE No_Ref IN (SELECT No_Jual FROM inv_jual WHERE Data_Jual=1 AND Tgl_Jual='".$tgldata."'".$tsql.")) D LEFT JOIN (SELECT * FROM inv_jual WHERE Data_Jual=1 AND Tgl_Jual='".$tgldata."'".$tsql.") J ON (J.No_Jual=D.No_Ref) LEFT JOIN para_outlet O ON (O.OutletID=J.OutletID) LEFT JOIN para_pegawai L ON (L.PegID=J.SalesID) LEFT JOIN inv_produk P ON (P.InvID=D.InvID) LEFT JOIN para_satuan S ON (D.SatuanID=S.SatuanID) LEFT JOIN para_rasa R ON (R.RasaID=D.RasaID)".$tsql2." GROUP BY D.No_Ref, D.InvID, D.RasaID, D.SatuanID, D.Harga_Jual ORDER BY D.No_Ref, D.Promo, P.Pajak DESC, P.Nama_Produk");
}
if ( $data == "print" ) {
Report_Header("LAPORAN PENJUALAN DETAIL HARIAN", $tglheader);
$pre = new PrintHTML();
$pre->set_css("garis");
$pre->add_field("NO.", 40, "C", "uang");
$pre->add_field("NAMA PRODUK", 320);
$pre->add_field("QTY", 60, "R");
$pre->add_field("SATUAN", 80);
$pre->add_field("HARGA @", 90, "R", "uang");
$pre->add_field("TOTAL", 90, "R", "uang");
$nomor = 1; $no_ref = ""; $sub = $dis = 0;
while ($db->Next()) {
if ($no_ref <> $db->Row("No_Ref")) {
if ($no_ref <> "") {
$pre->add_span(array("Sub. Total Rp.",4,"R,B"),array($sub,2,"R,B","uang"));
$pre->add_span(array("Diskon Rp.",4,"R,B"),array($dis,2,"R,B","uang"));
$pre->add_span(array("Total Rp.",4,"R,B"),array($sub-$dis,2,"R,B","uang"));
$pre->add_span(array("&nbsp;",6,"L,NB"));
$sub = $dis = 0;
$nomor = 1;
}
$pre->add_span(array('<table width="100%" class="pnormal"><tr><td class="nb" width="10%">Outlet</td><td class="nb" width="40%">: '.$db->Row("Nama_Outlet").'</td><td class="nb" width="10%">No. Nota</td><td class="nb" width="40%">: '.$db->Row("No_Ref").($db->Row("No_Faktur")?" / ".$db->Row("No_Faktur"):"").'</td></tr><tr><td class="nb">Alamat</td><td class="nb">: '.$db->Row("Alamat_Outlet").'</td><td class="nb">Sales</td><td class="nb">: '.$db->Row("Nama_Sales").'</td></tr></table>',6,"L"));
$pre->show_fields();
}
$pre->add_value( $nomor++, $db->Row("Nama_Produk").(($db->Row("Nama_Rasa"))?" (".$db->Row("Nama_Rasa").")":"").(($db->Row("Promo")>0)?" ***":""), uang($db->Row("Qty1"),2), $db->Row("Nama_Satuan"), $db->Row("Harga_Jual"), $db->Row("Sub_Total") );
$no_ref = $db->Row("No_Ref");
$sub = $db->Row("Total_Jual");
$dis = $db->Row("Total_Diskon");
}
if ($nomor > 1) {
$pre->add_span(array("Sub. Total Rp.",4,"R,B"),array($sub,2,"R,B","uang"));
$pre->add_span(array("Diskon Rp.",4,"R,B"),array($dis,2,"R,B","uang"));
$pre->add_span(array("Total Rp.",4,"R,B"),array($sub-$dis,2,"R,B","uang"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Laporan Penjualan Detail Harian",
'subject'=>"PT.PMS",
'desc'=>"Export Data dari IAS"
]);
$xls->add_header("<b>".strtoupper($_SESSION['__WEB_APP']['REG_NAME'])."</b>");
$xls->add_header("<b>LAPORAN PENJUALAN DETAIL HARIAN</b>");
$xls->add_header($tglheader);
$xls->add_field("NO", 8, "C");
$xls->add_field("NAMA PRODUK", 50, "L");
$xls->add_field("QTY", 8, "R,N");
$xls->add_field("SATUAN", 13, "L");
$xls->add_field("HARGA @", 13, "R,N0");
$xls->add_field("TOTAL", 13, "R,N0");
$xls->add_sheet("PENJ.DET-HARIAN", false);
$nomor = 1; $no_ref = ""; $sub = 0; $dis = 0;
while ($db->Next()) {
if ($no_ref <> $db->Row("No_Ref")) {
if ($no_ref <> "") {
if ($dis > 0) {
$xls->add_span(array("Sub. Total Rp.",4,"R,B"),array($sub,2,"R,B,N0"));
$xls->add_span(array("Diskon Rp.",4,"R,B"),array($dis,2,"R,B,N0"));
}
$xls->add_span(array("TOTAL Rp.",4,"R,B"),array($sub-$dis,2,"R,B,N0"));
$xls->add_empty_row();
$sub = $dis = 0;
$nomor = 1;
}
$xls->add_span(array("Outlet",1,"L"),array($db->Row("Nama_Outlet"),2,"L"),array("No. Nota",1,"L"),array($db->Row("No_Ref"),1,"L"),array($db->Row("No_Faktur"),1,"L"));
$xls->add_span(array("Alamat",1,"L"),array($db->Row("Alamat_Outlet"),2,"L"),array("Sales",1,"L"),array($db->Row("Nama_Sales"),1,"L"),array("",1,"L"));
$xls->show_headers();
}
$xls->add_value($nomor++, $db->Row("Nama_Produk").(($db->Row("Nama_Rasa"))?" (".$db->Row("Nama_Rasa").")":"").(($db->Row("Promo")>0)?" ***":""), $db->Row("Qty1"), $db->Row("Nama_Satuan"), $db->Row("Harga_Jual"), $db->Row("Sub_Total"));
$no_ref = $db->Row("No_Ref");
$sub += $db->Row("Sub_Total");
$dis = $db->Row("Total_Diskon");
}
if ($nomor > 1) {
if ($dis > 0) {
$xls->add_span(array("Sub. Total Rp.",4,"R,B"),array($sub,2,"R,B,N0"));
$xls->add_span(array("Diskon Rp.",4,"R,B"),array($dis,2,"R,B,N0"));
}
$xls->add_span(array("TOTAL Rp.",4,"R,B"),array($sub-$dis,2,"R,B,N0"));
}
$xls->send("Laporan Penjualan Detail Harian.xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$trekap = $form->radio("_", "Rekap", "X", true, false, ["1"=>"Antar","0"=>"Belum Antar","X"=>"Semua"]);
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "TRUE ORDER BY Nama_Grup", [0,"SEMUA GRUP"]);
$ttgldata = $form->datebox("_", "Tgl_Data", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Rekap">Status Order</label>
<div class="col">'.$trekap.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Grup_InvID">Grup Produk</label>
<div class="col">'.$tgrup.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Data">Tanggal Faktur</label>
<div class="col">'.$ttgldata.'</div>
</div>';
}
?>
+151
View File
@@ -0,0 +1,151 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/jual_harian_pajak.php
Desc. : PHP - Laporan Penjualan Harian Pajak
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : November 11st, 2011.
Last Modified : December 27th, 2024.
(c) 2011 - 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.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;
use siaupheng\fonia3\Printer\PrintHTML;
use siaupheng\fonia3\Data\SimpleXLS;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$tgldata = Param::Get("Tgl_Data");
// generate report header
$tglheader = "Periode : ".$tgldata;
$tgldata = tgl_sql2str($tgldata);
$ppn_string = "11";
//$ppn_string = ($tgldata >= $_SESSION['__APP_IAS']['PPN_TGL']) ? $_SESSION['__APP_IAS']['PPN_STRING'] : "11";
$db->Query("SELECT P.Nama_Produk,S.Nama_Satuan,SUM(-D.Qty) Qty,SUM(-D.Qty*ROUND(D.Harga_Jual/(1+D.PPN),2)) Total_Jual,SUM(IF(D.Total_Diskon=(-D.Qty*D.Harga_Jual),-D.Qty*ROUND(D.Harga_Jual/(1+D.PPN),2),ROUND(D.Total_Diskon/(1+D.PPN),2))) Total_Diskon,D.PPN,K.No_Pajak,K.Nama_NPWP FROM inv_detail D LEFT JOIN inv_jual J ON (D.No_Ref=J.No_Jual) LEFT JOIN inv_jual_pajak K ON (J.No_Pajak=K.No_Pajak) LEFT JOIN inv_produk P ON (D.InvID=P.InvID) LEFT JOIN para_satuan S ON (D.SatuanID=S.SatuanID) WHERE K.Tgl_Pajak='".$tgldata."' AND P.Pajak=1 AND D.Qty<>0 GROUP BY J.No_Pajak,D.InvID, D.SatuanID");
}
if ( $data == "print" ) {
Report_Header("LAPORAN PENJUALAN DETAIL HARIAN PAJAK", $tglheader);
$pre = new PrintHTML();
$pre->set_css("garis");
$pre->add_field("NO.", 40, "C", "uang");
$pre->add_field("NAMA PRODUK", 320);
$pre->add_field("QTY", 60, "R");
$pre->add_field("SATUAN", 80);
$pre->add_field("TOTAL", 90, "R", "rupiah2");
$nomor = 1; $no_pajak = ""; $sub = 0; $dis = 0; $ppn = 0;
while ($db->Next()) {
$ppn = $db->Row("PPN");
if ($no_pajak <> $db->Row("No_Pajak")) {
if ($no_pajak <> "") {
$tot_dpp = round($sub - $dis, 2);
$tot_tax = round($tot_dpp * $ppn);
$pre->add_span(array("",1),array("Sub. Total Rp.",3,"R,B"),array($sub,1,"R,B","rupiah2"));
$pre->add_span(array("",1),array("Diskon Rp.",3,"R,B"),array($dis,1,"R,B","rupiah2"));
$pre->add_span(array("",1),array("Total DPP Rp.",3,"R,B"),array($tot_dpp,1,"R,B","rupiah2"));
$pre->add_span(array("",1),array("PPN (".$ppn_string."%) Rp.",3,"R,B"),array($tot_tax,1,"R,B","rupiah2"));
$pre->add_span(array("&nbsp;",5,"L,NB"));
$sub = $dis = 0;
$nomor = 1;
}
$pre->add_span(array("<table width=\"100%\" class=\"pnormal\"><tr><td class=\"nb\" width=\"30%\">No. Pajak</td><td class=\"nb\">: ".$db->Row("No_Pajak")."</td></tr><tr><td class=\"nb\">Nama NPWP</td><td class=\"nb\">: ".$db->Row("Nama_NPWP")."</td></tr></table>",5,"L,B"));
$pre->show_fields();
}
$pre->add_value($nomor++, $db->Row("Nama_Produk"), uang($db->Row("Qty"),2), $db->Row("Nama_Satuan"), $db->Row("Total_Jual"));
$no_pajak = $db->Row("No_Pajak");
$sub += $db->Row("Total_Jual");
$dis += $db->Row("Total_Diskon");
}
if ($nomor > 1) {
$tot_dpp = round($sub - $dis, 2);
$tot_tax = round($tot_dpp * $ppn);
$pre->add_span(array("",1),array("Sub. Total Rp.",3,"R,B"),array($sub,1,"R,B","rupiah2"));
$pre->add_span(array("",1),array("Diskon Rp.",3,"R,B"),array($dis,1,"R,B","rupiah2"));
$pre->add_span(array("",1),array("Total DPP Rp.",3,"R,B"),array($tot_dpp,1,"R,B","rupiah2"));
$pre->add_span(array("",1),array("PPN (".$ppn_string."%) Rp.",3,"R,B"),array($tot_tax,1,"R,B","rupiah2"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Laporan Penjualan Detail Harian Pajak",
'subject'=>"PT.PMS",
'desc'=>"Export Data dari IAS"
]);
$xls->add_header("<b>".strtoupper($_SESSION['__WEB_APP']['REG_NAME'])."</b>");
$xls->add_header("<b>LAPORAN PENJUALAN DETAIL HARIAN PAJAK</b>");
$xls->add_header($tglheader);
$xls->add_field("NO.", 10, "C");
$xls->add_field("NAMA PRODUK", 80, "L");
$xls->add_field("QTY", 20, "R,N");
$xls->add_field("SATUAN", 12, "L");
$xls->add_field("TOTAL", 20, "R,N");
$xls->add_sheet("JUAL HARIAN PAJAK", false);
$nomor = 1; $no_pajak = ""; $sub = $dis = 0; $ppn = 0;
while ($db->Next()) {
$ppn = $db->Row("PPN");
if ($no_pajak <> $db->Row("No_Pajak")) {
if ($no_pajak <> "") {
$tot_tax = round(($sub - $dis) * $ppn);
$xls->add_span(array("Sub. Total Rp.",4,"R,B"),array($sub,1,"R,B,N"));
$xls->add_span(array("Diskon Rp.",4,"R,B"),array($dis,1,"R,B,N"));
$xls->add_span(array("Total Rp.",4,"R,B"),array($sub-$dis,1,"R,B,N"));
$xls->add_span(array("PPN (".$ppn_string."%) Rp.",4,"R,B"),array($tot_tax,1,"R,B,N"));
$xls->add_empty_row();
//$xls->add_span(array("",5,"L,NL"));
$sub = $dis = 0;
$nomor = 1;
}
$xls->add_span(array("No. Pajak",2,"L,NL"),array($db->Row("No_Pajak"),3,"L,NL"));
$xls->add_span(array("Nama NPWP",2,"L,NL"),array($db->Row("Nama_NPWP"),3,"L,NL"));
$xls->show_headers();
}
$xls->add_value($nomor++, $db->Row("Nama_Produk"), $db->Row("Qty"), $db->Row("Nama_Satuan"), $db->Row("Total_Jual"));
$no_pajak = $db->Row("No_Pajak");
$sub += $db->Row("Total_Jual");
$dis += $db->Row("Total_Diskon");
}
if ($nomor > 1) {
$tot_tax = round(($sub - $dis) * $ppn);
$xls->add_span(array("Sub. Total Rp.",4,"R,B"),array($sub,1,"R,B,N"));
$xls->add_span(array("Diskon Rp.",4,"R,B"),array($dis,1,"R,B,N"));
$xls->add_span(array("Total Rp.",4,"R,B"),array($sub-$dis,1,"R,B,N"));
$xls->add_span(array("PPN (".$ppn_string."%) Rp.",4,"R,B"),array($tot_tax,1,"R,B,N"));
}
$xls->add_stamp(1, true);
$xls->send("Laporan Penjualan Detail Harian Pajak.xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$ttgldata = $form->datebox("_", "Tgl_Data", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Data">Tanggal Pajak</label>
<div class="col">'.$ttgldata.'</div>
</div>';
}
?>
+152
View File
@@ -0,0 +1,152 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/jual_retur.php
Desc. : PHP - Laporan Retur Penjualan
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : April 12th, 2011.
Last Modified : October 22nd, 2015.
(c) 2011 - 2015, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.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;
use siaupheng\fonia3\Printer\PrintHTML;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$tipe = Param::Get("Tipe"); // R or D
$id_outlet = Param::Get("OutletID", 0);
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$aoutlet = [];
if ($id_outlet > 0) {
$db->Query("SELECT * FROM para_outlet WHERE OutletID='".$id_outlet."' LIMIT 1");
if ($db->Next()) $aoutlet = $db->AllRow();
}
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($outid>0) ? " AND J.OutletID=".$outid : "";
if ($tipe=="R") {
$db->Query("SELECT O.Nama_Outlet,SUM(J.Total_Jual) Total_Jual FROM inv_jual J LEFT JOIN para_outlet O ON (J.OutletID=O.OutletID) WHERE J.Data_Jual=0 AND (J.Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY J.OutletID ORDER BY O.Nama_Outlet");
} else {
$db->Query("SELECT J.*,DATE_FORMAT(J.Tgl_Jual,'%d-%m-%Y') Tgl_Jual2,O.Nama_Outlet FROM inv_jual J LEFT JOIN para_outlet O ON (J.OutletID=O.OutletID) WHERE J.Data_Jual=0 AND (J.Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." ORDER BY J.No_Jual");
}
}
if ( $data == "print" ) {
Report_Header("LAPORAN ".($tipe=="R"?"REKAP":"DETAIL")." RETUR PENJUALAN", $tglheader);
$pre = new PrintHTML();
$pre->set_css("garis");
if ($tipe=="R") {
$pre->add_field("NO.",10,"C");
$pre->add_field("NAMA OUTLET",80);
$pre->add_field("TOTAL",20,"R","uang");
if ($outid>0) $pre->add_span(array("NAMA OUTLET",2,"L,NB"),array(": ".$aoutlet['Nama_Outlet'],1,"L,NB"));
$pre->show_fields();
$subtotal = $nomor = 0;
while ($db->Next()) {
$nomor++;
$subtotal += $db->Row("Total_Jual");
$pre->add_value($nomor, $db->Row("Nama_Outlet"), $db->Row("Total_Jual"));
}
$pre->add_span(array(""),array("GRAND TOTAL",1,"L,B"),array($subtotal,1,"R,B","uang"));
} else {
$pre->add_field("NO. NOTA",10,"C");
$pre->add_field("TGL. NOTA",10,"C");
$pre->add_field("NAMA OUTLET",80);
$pre->add_field("TOTAL",20,"R","uang");
$pre->add_field("CATATAN",30);
if ($outid>0) $pre->add_span(array("NAMA OUTLET",2,"L,NB"),array(": ".$nama_out,3,"L,NB"));
$pre->show_fields();
$subtotal = 0;
while ($db->Next()) {
$subtotal += $db->Row("Total_Jual");
$pre->add_value($db->Row("No_Jual"), $db->Row("Tgl_Jual2"), $db->Row("Nama_Outlet"), $db->Row("Total_Jual"), $db->Row("No_Faktur"));
}
$pre->add_span(array(""),array("GRAND TOTAL",2,"L,B"),array($subtotal,1,"R,B","uang"),array("",1));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "brow-outlet" ) {
$tcari = trim(Param::Get("Cari_Outlet"));
$tsql = ($tcari=="") ? " LIMIT 100" : " AND CONCAT(Nama_Outlet,Telp_Outlet,Nama_Outlet) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM vi_para_outlet WHERE Aktif=1".$tsql);
$obj->add_field("OutletID", "ID", "hid");
$obj->add_field("Kode_Outlet", "Kode", "c");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Alamat_Kota", "Alamat & Kota", "awr");
$obj->set_field_order("Nama_Outlet", "A");
$obj->add_row_btn("save", "Pilih", "RepoJualReturJS.outlet_select");
$obj->set_func_navi("RepoJualReturJS.data_query('brow-outlet')");
$ajson[] = $obj->json_table("divBrowOutlet");
} else if ( $data == "auto-outlet" ) {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [['value' => 0, 'text' => "SEMUA OUTLET", 'data' => ""]];
if (is_string($tcari) && strlen($tcari) < 64) {
$db->Query("SELECT * FROM vi_para_outlet WHERE Aktif=1 AND CONCAT(Nama_Outlet,Alamat_Outlet) LIKE '%".$tcari."%' ORDER BY Nama_Outlet LIMIT 50");
while ($db->Next()) {
$ajson['autodata'][] = ['value'=>$db->Row("OutletID"), 'text'=>$db->Row("Nama_Alamat"), 'data'=>$db->Row("Alamat_Kota")];
}
}
} else if ( $data == "default") {
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
$toutlet = $form->textauto("_", "Nama_Outlet", ['value'=>0,'text'=>"SEMUA OUTLET"], true, false);
$ttglfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$ttglto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Nama_Outlet">Nama Outlet</label>
<div class="col"><div class="input-group">'.$toutlet.'<button class="btn btn-info" type="button" onclick="RepoJualReturJS.outlet_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col">'.$ttglfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col">'.$ttglto.'</div>
</div>
<input type="hidden" id="OutletID" value="0">';
}
send_json($ajson);
?>
+109
View File
@@ -0,0 +1,109 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/keluar.php
Desc. : PHP - Laporan Pengeluaran
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : July 17th, 2011.
Last Modified : October 22nd, 2015.
(c) 2011 - 2015, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.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;
use siaupheng\fonia3\Printer\PrintHTML;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$tipe = Param::Get("Tipe"); // R or D
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
if ($tipe=="R") {
$db->Query("SELECT DATE_FORMAT(L.Tgl_Bayar,'%d-%m-%Y') Tgl_Bayar2,IF(L.Tipe=1,'Cash','BG') Tipe_Bayar,SUM(L.Total_Bayar) Total_Bayar FROM inv_beli_lunas L WHERE (L.Tgl_Bayar BETWEEN '".$tglfrom."' AND '".$tglto."') GROUP BY L.Tgl_Bayar,L.Tipe ORDER BY L.Tgl_Bayar,L.Tipe");
} else {
$db->Query("SELECT L.*,DATE_FORMAT(L.Tgl_Bayar,'%d-%m-%Y') Tgl_Bayar2,DATE_FORMAT(L.Tgl_Cair,'%d-%m-%Y') Tgl_Cair2,IF(L.Tipe=1,'Cash','BG') Tipe_Bayar, S.Nama_Sup FROM inv_beli_lunas L LEFT JOIN inv_beli B ON (B.No_Beli=L.No_Beli) LEFT JOIN para_supplier S ON (S.SupID=B.SupID) WHERE (L.Tgl_Bayar BETWEEN '".$tglfrom."' AND '".$tglto."') ORDER BY L.Tgl_Bayar,L.Tipe");
}
}
if ( $data == "print" ) {
Report_Header("LAPORAN ".($tipe=="R"?"REKAP":"DETAIL")." PENGELUARAN", $tglheader);
$pre = new PrintHTML();
$pre->set_css("garis");
if ($tipe=="R") {
$pre->add_field("NO.",10,"C");
$pre->add_field("TANGGAL",30,"C");
$pre->add_field("TIPE",10);
$pre->add_field("JUMLAH",30,"R","uang");
$pre->show_fields();
$tot_bayar = $nomor = 0;
while ($db->Next()) {
$nomor++;
$tot_bayar += $db->Row("Total_Bayar");
$pre->add_value($nomor, $db->Row("Tgl_Bayar2"), $db->Row("Tipe_Bayar"), $db->Row("Total_Bayar"));
}
$pre->add_span(array("GRAND TOTAL",3,"L,B"),array($tot_bayar,1,"R,B","uang"));
} else {
$pre->add_field("TANGGAL",30,"C");
$pre->add_field("BAYAR KEPADA",150);
$pre->add_field("TIPE",10);
$pre->add_field("TGL. CAIR BG",30,"C");
$pre->add_field("JUMLAH",30,"R","uang");
$pre->show_fields();
$tot_bayar = 0;
while ($db->Next()) {
$tot_bayar += $db->Row("Total_Bayar");
$pre->add_value($db->Row("Tgl_Bayar2"), $db->Row("No_Beli")." - ".$db->Row("Nama_Sup"), $db->Row("Tipe_Bayar"), $db->Row("Tgl_Cair2"), $db->Row("Total_Bayar"));
}
$pre->add_span(array("GRAND TOTAL",4,"L,B"),array($tot_bayar,1,"R,B","uang"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "default") {
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
$ttglfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$ttglto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col">'.$ttipe.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col">'.$ttglfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col">'.$ttglto.'</div>
</div>';
}
?>
+477
View File
@@ -0,0 +1,477 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/nota.php
Desc. : PHP - Cetak Nota
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : April 12th, 2011.
Last Modified : July 5th, 2025.
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\Web\Param;
function nota_beli($db, $nota="") {
if (trim($nota)=="") return;
$baris_faktur = 8;
$ainfo = [];
$db->Query("SELECT B.*,DATE_FORMAT(B.Tgl_Beli,'%d-%m-%Y') Tgl_Beli2,DATE_FORMAT(B.Tgl_JT,'%d-%m-%Y') Tgl_JT2,S.Nama_Sup,S.Alamat_Sup,S.No_NPWP,B.Total_Beli-B.Total_Diskon Jumlah FROM (SELECT * FROM inv_beli WHERE No_Beli='".$nota."' LIMIT 1) B LEFT JOIN para_supplier S ON (S.SupID=B.SupID)");
if ($db->Next()) $ainfo = $db->AllRow();
$ainfo['Alamat_Sup'] = str_replace("\n", " ", $ainfo['Alamat_Sup']);
$db->Query("SELECT D.*,P.Nama_Produk,S.Nama_Satuan,R.Nama_Rasa FROM (SELECT InvID,RasaID,SatuanID,Harga_Pokok,SUM(Qty) Qty,SUM(Qty*Harga_Pokok) Jumlah,SUM(Total_Diskon) Total_Diskon FROM inv_detail WHERE No_Ref='".$nota."' GROUP BY InvID,RasaID,SatuanID,Harga_Pokok) D LEFT JOIN inv_produk P ON (P.InvID=D.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=D.SatuanID) LEFT JOIN para_rasa R ON (R.RasaID=D.RasaID) ORDER BY P.Nama_Produk");
//if ($db->RecordCount()==0) return;
// menampilkan judul dibagian atas laporan
$kop = '<div class="notaTitle">FAKTUR PEMBELIAN</div>';
$kop .= '<table class="notaAddress"><tbody>';
$kop .= '<tr><td class="w50">'.$_SESSION['__WEB_APP']['REG_NAME'].'</td><td class="w50">Terima Dari Yth. :</td></tr>';
$kop .= '<tr><td class="w50">Telp. '.$_SESSION['__WEB_APP']['REG_PHONE'].'</td><td class="w50">'.$ainfo['Nama_Sup'].'</td></tr>';
$kop .= '<tr><td class="w50">Fax. '.$_SESSION['__WEB_APP']['REG_FAX'].'</td><td class="w50">'.$ainfo['Alamat_Sup'].'</td></tr>';
$kop .= '<tr><td>&nbsp;</td><td>'.$ainfo['No_NPWP'].'</td></tr>';
$kop .= '</tbody></table>';
$kop .= '<table class="notaDesc"><tbody>';
$kop .= '<tr><td width="15%">No. Nota</td><td width="35%" class="ttkdua">'.$ainfo['No_Beli'].'</td><td width="15%">Tanggal</td><td width="35%" class="ttkdua">'.$ainfo['Tgl_Beli2'].'</td></tr>';
$kop .= '<tr><td>No. Faktur</td><td class="ttkdua">'.$ainfo['No_Faktur'].'</td><td>Jatuh Tempo</td><td class="ttkdua">'.$ainfo['Tgl_JT2'].'</td></tr>';
$kop .= '</tbody></table>';
$header = '<table class="notaTable"><thead><tr><th style="width:1cm">No.</th><th>Nama Produk</th><th style="width:1.8cm">Qty</th><th style="width:2cm">Satuan</th><th style="width:2.6cm">Harga @</th><th style="width:2.8cm">Total</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td class="r">%s</td><td>%s</td><td class="r">%s</td><td class="r">%s</td></tr>';
$_bline = '<tr><td class="b">&nbsp;</td><td class="b r" colspan="3">%s</td><td class="b r" colspan="2">%s</td></tr>';
$body = ""; $no_urut = 1;
while ($db->Next()) {
$body .= sprintf($_line, $no_urut++, $db->Row("Nama_Produk").(($db->Row("Nama_Rasa"))?" (".$db->Row("Nama_Rasa").")":""), rupiah2($db->Row("Qty")), $db->Row("Nama_Satuan"), rupiah($db->Row("Harga_Pokok")), rupiah($db->Row("Jumlah")));
}
if ($no_urut <= $baris_faktur) {
$no_urut--;
for ($x=$baris_faktur; $x>fmod($no_urut, $baris_faktur); $x--) {
$body .= sprintf($_line, "&nbsp;", "&nbsp;", "&nbsp;","&nbsp;", "&nbsp;", "&nbsp;");
}
}
$body .= sprintf($_bline, "Sub. Total Rp.", rupiah($ainfo['Total_Beli']));
$body .= sprintf($_bline, "Diskon Rp.", rupiah($ainfo['Total_Diskon']));
$body .= sprintf($_bline, "Total Rp.", rupiah($ainfo['Jumlah']));
$body .= '</tbody></table>';
$body .= '<table class="notaFooter"><tr height="80"><td>Penerima,</td><td>Hormat Kami,</td></tr><tr><td>Tanda Tangan & Cap Perusahaan</td><td class="r stamp">'.Report_Stamp(1,true).'</td></tr></table>';
echo '<div class="printNota">' . $kop . $header . $body . '</div>';
}
function nota_jual($db, $nota="") {
if (trim($nota)=="") return;
$baris_faktur = 8;
$ainfo = [];
$db->Query("SELECT J.*,DATE_FORMAT(J.Tgl_Jual,'%d-%m-%Y') Tgl_Jual2,DATE_FORMAT(J.Tgl_JT,'%d-%m-%Y') Tgl_JT2,O.Nama_Outlet,O.Alamat_Outlet,O.No_NPWP,O.No_NIK,O.Nama_NPWP,O.Alamat_NPWP,S.Kode_Pegawai Kode_Sales,S.Nama_Pegawai Nama_Sales,J.Total_Jual-J.Total_Diskon Jumlah FROM (SELECT * FROM inv_jual WHERE No_Jual='".$nota."' LIMIT 1) J LEFT JOIN para_outlet O ON (O.OutletID=J.OutletID) LEFT JOIN para_pegawai S ON (J.SalesID=S.PegID)");
if ($db->Next()) $ainfo = $db->AllRow();
$ainfo['Alamat_Outlet'] = str_replace("\n", " ", $ainfo['Alamat_Outlet']);
$ainfo['Alamat_NPWP'] = str_replace("\n", " ", $ainfo['Alamat_NPWP']);
$ainfo['No_NPWP'] = ($ainfo['No_NPWP']==0) ? "NIK : ".$ainfo['No_NIK'] : "NPWP : ".$ainfo['No_NPWP'];
$db->Query("SELECT SUM(-Qty*Harga_Jual) Total_Jual,SUM(Total_Diskon) Total_Diskon,SUM((-Qty*Harga_Jual)-Total_Diskon) Jumlah FROM inv_detail WHERE No_Ref='".$nota."' AND Qty<>0 AND InvID IN (".$_SESSION['__APP_IAS']['PRODUK_EX'].")");
if ($db->Next()) {
$ainfo['Total_Jual'] -= $db->RowFloat("Total_Jual", 0);
$ainfo['Total_Diskon'] -= $db->RowFloat("Total_Diskon", 0);
$ainfo['Jumlah'] -= $db->RowFloat("Jumlah", 0);
}
$db->Query("SELECT D.*,P.Nama_Produk,S.Nama_Satuan,R.Nama_Rasa FROM (SELECT InvID,RasaID,SatuanID,Harga_Jual,SUM(Total_Diskon) Total_Diskon,SUM(-Qty) Qty,SUM((-Qty*Harga_Jual)-Total_Diskon) Jumlah FROM inv_detail WHERE No_Ref='".$nota."' AND Qty<>0 AND InvID NOT IN(".$_SESSION['__APP_IAS']['PRODUK_EX'].") GROUP BY InvID,RasaID,SatuanID,Harga_Jual) D LEFT JOIN inv_produk P ON (P.InvID=D.InvID) LEFT JOIN para_satuan S ON (D.SatuanID=S.SatuanID) LEFT JOIN para_rasa R ON (R.RasaID=D.RasaID) ORDER BY P.Nama_Produk");
// menampilkan judul dibagian atas laporan
$kop = '<div class="notaTitle">FAKTUR PENJUALAN</div>';
$kop .= '<table class="notaAddress"><tbody>';
if ($ainfo['Nama_Outlet']==$ainfo['Nama_NPWP'] && $ainfo['Alamat_Outlet']==$ainfo['Alamat_NPWP']) {
$kop .= '<tr><td class="w50">'.$_SESSION['__WEB_APP']['REG_NAME'].'</td><td class="w50">Kepada Yth. :</td></tr>';
$kop .= '<tr><td class="w50">Telp. '.$_SESSION['__WEB_APP']['REG_PHONE'].'</td><td class="w50">'.$ainfo['Nama_Outlet'].'</td></tr>';
$kop .= '<tr><td class="w50">Fax. '.$_SESSION['__WEB_APP']['REG_FAX'].'</td><td class="w50">'.$ainfo['Alamat_Outlet'].'</td></tr>';
} else {
$kop .= '<tr><td>'.$_SESSION['__WEB_APP']['REG_NAME'].'</td><td>Kepada Yth. :</td><td>Dikirim Ke :</td></tr>';
$kop .= '<tr><td>Telp. '.$_SESSION['__WEB_APP']['REG_PHONE'].'</td><td>'.$ainfo['Nama_NPWP'].'</td><td>'.$ainfo['Nama_Outlet'].'</td></tr>';
$kop .= '<tr><td>Fax. '.$_SESSION['__WEB_APP']['REG_FAX'].'</td><td>'.$ainfo['Alamat_NPWP'].'</td><td rowspan="2">'.$ainfo['Alamat_Outlet'].' '.$ainfo['Kota_Outlet'].'</td></tr>';
}
$kop .= '<tr><td>&nbsp;</td><td>'.$ainfo['No_NPWP'].'</td></tr>';
$kop .= '</tbody></table>';
$kop .= '<table class="notaDesc"><tbody>';
$kop .= '<tr><td width="15%">No. Faktur</td><td width="35%" class="ttkdua">'.$ainfo['No_Jual'].'</td><td width="15%">Tanggal</td><td width="35%" class="ttkdua">'.$ainfo['Tgl_Jual2'].'</td></tr>';
$kop .= '<tr><td>Sales</td><td class="ttkdua">'.$ainfo['Nama_Sales'].($ainfo['Kode_Sales']==""?"":" (".$ainfo['Kode_Sales'].")").'</td><td>Jatuh Tempo</td><td class="ttkdua">'.$ainfo['Tgl_JT2'].'</td></tr>';
$kop .= '</tbody></table>';
$header = '<table class="notaTable"><thead><tr><th style="width:1cm">No.</th><th>Nama Produk</th><th style="width:1.8cm">Qty</th><th style="width:2cm">Satuan</th><th style="width:2.6cm">Harga @</th><th style="width:2.3cm">Diskon</th><th style="width:2.8cm">Total</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td class="r">%s</td><td>%s</td><td class="r">%s</td><td class="r">%s</td><td class="r">%s</td></tr>';
$_bline = '<tr><td class="b">&nbsp;</td><td class="b r" colspan="4">%s</td><td class="b r" colspan="2">%s</td></tr>';
$body = ""; $no_urut = 1;
while ($db->Next()) {
if ($db->Row("Qty", 0)==0) continue;
$body .= sprintf($_line, $no_urut++, $db->Row("Nama_Produk").(($db->Row("Nama_Rasa"))?" (".$db->Row("Nama_Rasa").")":""), rupiah2($db->Row("Qty")), $db->Row("Nama_Satuan"), rupiah($db->Row("Harga_Jual")), rupiah($db->Row("Total_Diskon")), rupiah($db->Row("Jumlah")));
}
if ($no_urut <= $baris_faktur) {
$no_urut--;
for ($x=$baris_faktur; $x>fmod($no_urut, $baris_faktur); $x--) {
$body .= sprintf($_line, "&nbsp;", "&nbsp;", "&nbsp;","&nbsp;", "&nbsp;", "&nbsp;", "&nbsp;");
}
}
$body .= sprintf($_bline, "Sub. Total Rp.", rupiah($ainfo['Total_Jual']));
$body .= sprintf($_bline, "Diskon Rp.", rupiah($ainfo['Total_Diskon']));
$body .= sprintf($_bline, "Total Rp.", rupiah($ainfo['Jumlah']));
$body .= '</tbody></table>';
$body .= '<table class="notaFooter"><tr height="80"><td>Penerima,</td><td>Hormat Kami,</td></tr><tr><td>Tanda Tangan & Cap Perusahaan</td><td class="r stamp">'.Report_Stamp(1,true).'</td></tr></table>';
echo '<div class="printNota">' . $kop . $header . $body . '</div>';
}
function nota_retur_beli($db, $nota="") {//
if (trim($nota)=="") return;
$baris_faktur = 8;
$ainfo = [];
$db->Query("SELECT R.*,DATE_FORMAT(R.Tgl_Beli,'%d-%m-%Y') Tgl_Beli2,S.Nama_Sup,S.Alamat_Sup,R.Total_Beli Jumlah FROM (SELECT * FROM inv_beli WHERE No_Beli='".$nota."' LIMIT 1) R LEFT JOIN para_supplier S ON (S.SupID=R.SupID)");
if ($db->Next()) $ainfo = $db->AllRow();
$ainfo['Alamat_Sup'] = str_replace("\n", "<br>", $ainfo['Alamat_Sup']);
$db->Query("SELECT D.*,P.Nama_Produk,S.Nama_Satuan,R.Nama_Rasa FROM (SELECT InvID,RasaID,SatuanID,Harga_Pokok,SUM(-Qty) Qty,SUM(-Qty*Harga_Pokok) Jumlah FROM inv_detail WHERE No_Ref='".$nota."' GROUP BY InvID,RasaID,SatuanID,Harga_Pokok) D LEFT JOIN inv_produk P ON (P.InvID=D.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=D.SatuanID) LEFT JOIN para_rasa R ON (R.RasaID=D.RasaID) ORDER BY P.Nama_Produk");
//if ($db->RecordCount()==0) return;
// menampilkan judul dibagian atas laporan
$kop = '<h5 class="text-center">RETUR PEMBELIAN</h5>';
$kop .= '<table class="notaHeader"><tbody>';
$kop .= '<tr><td colspan="2">'.$_SESSION['__WEB_APP']['REG_NAME'].'</td><td colspan="2">Kepada Yth. :</td></tr>';
$kop .= '<tr><td colspan="2">Telp. '.$_SESSION['__WEB_APP']['REG_PHONE'].'</td><td colspan="2">'.$ainfo['Nama_Sup'].'</td></tr>';
$kop .= '<tr><td colspan="2">Fax. '.$_SESSION['__WEB_APP']['REG_FAX'].'</td><td colspan="2">'.$ainfo['Alamat_Sup'].'</td></tr>';
$kop .= '<tr><td colspan="4">&nbsp;</td></tr>';
$kop .= '<tr><td width="20%">No. Retur</td><td width="30%">'.$ainfo['No_Beli'].'</td><td width="20%">Tanggal</td><td width="30%">'.$ainfo['Tgl_Beli2'].'</td></tr>';
$kop .= '</tbody></table>';
$header = '<table class="garis"><thead><tr><th style="width:1cm">No.</th><th>Nama Produk</th><th style="width:1.8cm">Qty</th><th style="width:1.8cm">Satuan</th><th style="width:2.8cm">Harga @</th><th style="width:2.8cm">Total</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td class="r">%s</td><td>%s</td><td class="r">%s</td><td class="r">%s</td></tr>';
$_bline = '<tr><td class="b">&nbsp;</td><td class="b r" colspan="3">%s</td><td class="b r" colspan="2">%s</td></tr>';
$body = ""; $no_urut = 1;
while ($db->Next()) {
$body .= sprintf($_line, $no_urut++, $db->Row("Nama_Produk").(($db->Row("Nama_Rasa"))?" (".$db->Row("Nama_Rasa").")":""), rupiah2($db->Row("Qty")), $db->Row("Nama_Satuan"), rupiah($db->Row("Harga_Pokok")), rupiah($db->Row("Jumlah")));
}
if ($no_urut <= $baris_faktur) {
$no_urut--;
for ($x=$baris_faktur; $x>fmod($no_urut, $baris_faktur); $x--) {
$body .= sprintf($_line, "&nbsp;", "&nbsp;", "&nbsp;","&nbsp;", "&nbsp;", "&nbsp;");
}
}
$body .= sprintf($_bline, "Total Rp.", rupiah($ainfo['Jumlah']));
$body .= '<table class="notaFooter">';
if ($ainfo['No_Faktur']<>"") $body .= '<tr><td colspan="2">Catatan : <i>'.$ainfo['No_Faktur'].'</i>.</td></tr>';
$body .= '<tr height="80"><td width="50%">Penerima,</td><td>Hormat Kami,</td></tr><tr><td>Tanda Tangan & Cap Perusahaan</td><td class="r stamp">'.Report_Stamp(1,true).'</td></tr></table>';
echo '<div class="printNota">' . $kop . $header . $body . '</tbody></table></div>';
}
function nota_retur_jual($db, $nota="") {//
if (trim($nota)=="") return;
$baris_faktur = 8;
$ainfo = [];
$db->Query("SELECT R.*,DATE_FORMAT(R.Tgl_Jual,'%d-%m-%Y') Tgl_Jual2,O.Nama_Outlet,O.Alamat_Outlet,-R.Total_Jual Jumlah FROM (SELECT * FROM inv_jual WHERE No_Jual='".$nota."' LIMIT 1) R LEFT JOIN para_outlet O ON (O.OutletID=R.OutletID)");
if ($db->Next()) $ainfo = $db->AllRow();
$ainfo['Alamat_Outlet'] = str_replace("\n", "<br>", $ainfo['Alamat_Outlet']);
$db->Query("SELECT D.*,P.Nama_Produk,S.Nama_Satuan,R.Nama_Rasa FROM (SELECT InvID,RasaID,SatuanID,Harga_Jual,SUM(Qty) Qty,SUM(Qty*Harga_Jual) Jumlah FROM inv_detail WHERE No_Ref='".$nota."' GROUP BY InvID,RasaID,SatuanID,Harga_Jual) D LEFT JOIN inv_produk P ON (P.InvID=D.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=D.SatuanID) LEFT JOIN para_rasa R ON (R.RasaID=D.RasaID) ORDER BY P.Nama_Produk");
//if ($db->RecordCount()==0) return;
// menampilkan judul dibagian atas laporan
$kop = '<h5 class="text-center">RETUR PENJUALAN</h5>';
$kop .= '<table class="notaHeader"><tbody>';
$kop .= '<tr><td colspan="2">'.$_SESSION['__WEB_APP']['REG_NAME'].'</td><td colspan="2">Kepada Yth. :</td></tr>';
$kop .= '<tr><td colspan="2">Telp. '.$_SESSION['__WEB_APP']['REG_PHONE'].'</td><td colspan="2">'.$ainfo['Nama_Outlet'].'</td></tr>';
$kop .= '<tr><td colspan="2">Fax. '.$_SESSION['__WEB_APP']['REG_FAX'].'</td><td colspan="2">'.$ainfo['Alamat_Outlet'].'</td></tr>';
$kop .= '<tr><td colspan="4">&nbsp;</td></tr>';
$kop .= '<tr><td width="20%">Nomor Retur / Tanggal Retur</td><td width="30%">: '.$ainfo['No_Jual'].' / '.$ainfo['Tgl_Jual2'].'</td></tr>';
$kop .= '</tbody></table>';
$header = '<table class="garis"><thead><tr><th style="width:1cm">No.</th><th>Nama Produk</th><th style="width:1.8cm">Qty</th><th style="width:1.8cm">Satuan</th><th style="width:2.8cm">Harga @</th><th style="width:2.8cm">Total</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td class="r">%s</td><td>%s</td><td class="r">%s</td><td class="r">%s</td></tr>';
$_bline = '<tr><td class="b">&nbsp;</td><td class="b r" colspan="3">%s</td><td class="b r" colspan="2">%s</td></tr>';
$body = ""; $no_urut = 1;
while ($db->Next()) {
$body .= sprintf($_line, $no_urut++, $db->Row("Nama_Produk").(($db->Row("Nama_Rasa"))?" (".$db->Row("Nama_Rasa").")":""), rupiah2($db->Row("Qty")), $db->Row("Nama_Satuan"), rupiah($db->Row("Harga_Jual")), rupiah($db->Row("Jumlah")));
}
if ($no_urut <= $baris_faktur) {
$no_urut--;
for ($x=$baris_faktur; $x>fmod($no_urut, $baris_faktur); $x--) {
$body .= sprintf($_line, "&nbsp;", "&nbsp;", "&nbsp;","&nbsp;", "&nbsp;", "&nbsp;");
}
}
$body .= sprintf($_bline, "Total Rp.", rupiah($ainfo['Jumlah']));
$body .= '<table class="notaFooter">';
if ($ainfo['Catatan']<>"") $body .= '<tr><td colspan="2">Catatan : <i>'.$ainfo['Catatan'].'</i>.</td></tr>';
$body .= '<tr height="80"><td width="50%">Penerima,</td><td>Hormat Kami,</td></tr><tr><td>Tanda Tangan & Cap Perusahaan</td><td class="r stamp">'.Report_Stamp(1,true).'</td></tr></table>';
echo '<div class="printNota">' . $kop . $header . $body . '</tbody></table></div>';
}
function nota_do_produk($db, $nota="", $w_catat=0) {
if (trim($nota)=="") return;
$asatuan = []; $ainfo = [];
$db->Query("SELECT Kode_Satuan FROM para_satuan ORDER BY Urut");//todo: hilangkan nomor urut
while ($db->Next()) $asatuan[$db->Row("Kode_Satuan")] = 0;
$db->Query("SELECT DO.No_DO,DO.Catatan,DATE_FORMAT(DO.Tgl_DO,'%d-%m-%Y') Tgl_DO2,M.Nama_Mobil,S.Nama_Pegawai Nama_Supir,Nama_Picker(DO.A_Picker) Nama_Picker FROM (SELECT * FROM inv_jual_do WHERE No_DO='".$nota."') DO LEFT JOIN para_mobil M ON (DO.MobilID=M.MobilID) LEFT JOIN para_pegawai S ON (DO.SupirID=S.PegID)");
if ($db->Next()) $ainfo = $db->AllRow();
$db->Query("SELECT P.Kode_Produk,R.Kode_Rasa,S.Kode_Satuan,D.Qty,P.Grup_InvID Grup FROM (SELECT InvID,RasaID,SatuanID,SUM(-Qty) Qty FROM inv_detail WHERE No_Ref IN (SELECT No_Jual FROM inv_jual WHERE No_DO='".$nota."') GROUP BY InvID,RasaID,SatuanID) D LEFT JOIN inv_produk P ON (D.InvID=P.InvID) LEFT JOIN para_rasa R ON (D.RasaID=R.RasaID) LEFT JOIN para_satuan S ON (D.SatuanID=S.SatuanID) ORDER BY P.Pajak DESC,P.Grup_InvID,D.InvID");
// menampilkan judul dibagian atas laporan
$kop = '<div class="text-center"><span class="fs-6 fw-bold">'.$_SESSION['__WEB_APP']['REG_NAME'].'</span><br>DELIVERY ORDER (DO)</div>';
$kop .= '<table class="notaHeader"><tbody>';
$kop .= '<tr><td width="15%">No. DO</td><td width="35%" class="ttkdua">'.$ainfo['No_DO'].'</td><td width="15%">Driver</td><td width="35%" class="ttkdua">'.$ainfo['Nama_Supir'].'</td></tr>';
$kop .= '<tr><td>Tanggal</td><td class="ttkdua">'.$ainfo['Tgl_DO2'].'</td><td>Helper</td><td class="ttkdua">'.$ainfo['Nama_Picker'].'</td></tr>';
$kop .= '<tr><td>Kendaraan</td><td colspan="3" class="ttkdua">'.$ainfo['Nama_Mobil'].'</td></tr>';
$kop .= '</tbody></table>';
$header = '<table class="garis"><thead><tr><th style="width:1cm">No.</th><th>Produk</th><th style="width:2.2cm">Jumlah</th><th style="width:2cm">Satuan</th><th style="width:2.2cm">Kembali</th><th style="width:2.2cm">Total</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td class="r">%s</td><td>%s</td><td class="r">%s</td><td class="r">%s</td></tr>';
$_bline = '<tr><td class="b c" colspan="4">%s</td><td class="b r">%s</td><td class="b r">%s</td></tr>';
$body = $kop.$header; $no_urut = 1; $sub_jenis = 0;
while ($db->Next()) {
$mark = "";
if ($db->Row("Grup")==$_SESSION['__APP_IAS']['GRUP_PRODUK_KEMASAN']) $mark = " *)";
if ($db->Row("Grup")==$_SESSION['__APP_IAS']['GRUP_PRODUK_HADIAH']) $mark = " ***";
if ($db->Row("Grup")<>$_SESSION['__APP_IAS']['GRUP_PRODUK_KEMASAN'] && $db->Row("Grup")<>$_SESSION['__APP_IAS']['GRUP_PRODUK_HADIAH']) {
$asatuan[$db->Row("Kode_Satuan")] += $db->Row("Qty");
$sub_jenis++;
}
$body .= sprintf($_line, $no_urut++, $db->Row("Kode_Produk").(($db->Row("Kode_Rasa"))?" (".$db->Row("Kode_Rasa").")":"").$mark, rupiah2($db->Row("Qty")), $db->Row("Kode_Satuan"), "", "");
}
$ket_produk = "";
foreach ($asatuan as $key => $val) {
if ($val > 0) $ket_produk .= " / ".rupiah2($val)." ".strtoupper($key);
}
$ket_produk = substr($ket_produk, 3);
$body .= sprintf($_bline, $sub_jenis." ITEM PRODUK (".$ket_produk.")", "", "");
$t_catat = ($w_catat==1 && $ainfo['Catatan']<>"") ? '<i>'.nl2br($ainfo['Catatan']).'</i>.' : '&nbsp;';
$body .= '</tbody></table><table class="notaFooter"><tr height="80"><td colspan="2">'.$t_catat.'</td></tr><tr><td width="50%" class="stamp">&nbsp;</td><td class="r stamp">'.Report_Stamp(1,true).'</td></tr></table>';
echo '<div>' . $body . '</div>';
}
function nota_do_faktur($db, $nota = "", $w_catat=0) {
if (trim($nota)=="") return;
$ainfo = [];
$db->Query("SELECT DO.No_DO,DO.Catatan,DATE_FORMAT(DO.Tgl_DO,'%d-%m-%Y') Tgl_DO2,M.Nama_Mobil,S.Nama_Pegawai Nama_Supir,Nama_Picker(DO.A_Picker) Nama_Picker FROM (SELECT * FROM inv_jual_do WHERE No_DO='".$nota."') DO LEFT JOIN para_mobil M ON (DO.MobilID=M.MobilID) LEFT JOIN para_pegawai S ON (DO.SupirID=S.PegID)");
if ($db->Next()) $ainfo = $db->AllRow();
$db->Query("SELECT J.*,DATE_FORMAT(J.Tgl_Jual,'%d-%m-%Y') Tgl_Jual2,J.Total_Jual-J.Total_Diskon Total_Nota,O.Nama_Outlet,S.Nama_Pegawai FROM (SELECT * FROM inv_jual WHERE No_DO='".$nota."') J LEFT JOIN para_outlet O ON (J.OutletID=O.OutletID) LEFT JOIN para_pegawai S ON (J.SalesID=S.PegID) ORDER BY J.No_Jual");
// menampilkan judul dibagian atas laporan
$kop = '<div class="text-center"><span class="fs-6 fw-bold">'.$_SESSION['__WEB_APP']['REG_NAME'].'</span><br>DELIVERY ORDER (DO)</div>';
$kop .= '<table class="notaHeader"><tbody>';
$kop .= '<tr><td width="15%">No. DO</td><td width="35%" class="ttkdua">'.$ainfo['No_DO'].'</td><td width="15%">Driver</td><td width="35%" class="ttkdua">'.$ainfo['Nama_Supir'].'</td></tr>';
$kop .= '<tr><td>Tanggal</td><td class="ttkdua">'.$ainfo['Tgl_DO2'].'</td><td>Helper</td><td class="ttkdua">'.$ainfo['Nama_Picker'].'</td></tr>';
$kop .= '<tr><td>Kendaraan</td><td colspan="3" class="ttkdua">'.$ainfo['Nama_Mobil'].'</td></tr>';
$kop .= '</tbody></table>';
$header = '<table class="garis"><thead><tr><th style="width:1cm">No.</th><th style="width:2cm">No. Faktur</th><th style="width:2.5cm">Tgl. Faktur</th><th>Nama Outlet</th><th style="width:2.2cm">Jumlah</th><th>Sales</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td class="c">%s</td><td class="c">%s</td><td>%s</td><td class="r">%s</td><td>%s</td></tr>';
$_bline = '<tr><td class="b c" colspan="4">%s</td><td class="b r">%s</td><td class="b r">%s</td></tr>';
$body = $kop.$header; $no_urut = 1; $tot_nota = 0;
while ($db->Next()) {
$body .= sprintf($_line, $no_urut++, $db->Row("No_Jual"), $db->Row("Tgl_Jual2"), $db->Row("Nama_Outlet"), rupiah2($db->Row("Total_Nota")), $db->Row("Nama_Pegawai"));
$tot_nota += $db->Row("Total_Nota");
}
$body .= sprintf($_bline, "Total Delivery Order", rupiah2($tot_nota), "");
//$t_catat = ($w_catat==1 && $ainfo['Catatan']<>"") ? 'Catatan : <i>'.$ainfo['Catatan'].'</i>.' : '&nbsp;';
$t_catat = '&nbsp;';
$body .= '</tbody></table><table class="notaFooter"><tr height="80"><td colspan="2">'.$t_catat.'</td></tr><tr><td width="50%" class="stamp">&nbsp;</td><td class="r stamp">'.Report_Stamp(1,true).'</td></tr></table>';
echo '<div>' . $body . '</div>';
}
function nota_dt($db, $nota = "", $w_lunas = 0) {
if (trim($nota)=="") return;
$ainfo = [];
$db->Query("SELECT T.*,DATE_FORMAT(T.Tgl_Tagih,'%d-%m-%Y') Tgl_Tagih2,S.Kode_Pegawai Kode_Sales,S.Nama_Pegawai Nama_Sales FROM (SELECT * FROM inv_jual_tagih WHERE No_Tagih='".$nota."' LIMIT 1) T LEFT JOIN para_pegawai S ON (T.SalesID=S.PegID)");
if ($db->Next()) $ainfo = $db->AllRow();
$tsql = ($w_lunas == 0) ? " AND Lunas=0" : "";
$db->Query("SELECT J.*,DATE_FORMAT(J.Tgl_Jual,'%d-%m-%Y') Tgl_Jual2,DATE_FORMAT(J.Tgl_JT,'%d-%m-%Y') Tgl_JT2,O.Nama_Outlet,J.Total_Jual-J.Total_Diskon Total_Faktur,IFNULL(B.Bayar_Lalu,0) Bayar_Lalu,IFNULL(B.Bayar_Ini,0) Bayar_Ini,J.Total_Jual-J.Total_Diskon-IFNULL(B.Bayar_Lalu,0)-IFNULL(B.Bayar_Ini,0) Total_Sisa FROM (SELECT * FROM inv_jual WHERE No_Jual IN (SELECT No_Jual FROM inv_jual_tagih_detail WHERE No_Tagih='".$ainfo['No_Tagih']."')".$tsql.") J LEFT JOIN (SELECT No_Jual,SUM(IF(Tgl_Bayar<'".$ainfo['Tgl_Tagih']."',Total_Bayar+Total_Potong,0)) Bayar_Lalu,SUM(IF(Tgl_Bayar='".$ainfo['Tgl_Tagih']."',Total_Bayar+Total_Potong,0)) Bayar_Ini FROM inv_jual_lunas WHERE No_Jual IN (SELECT No_Jual FROM inv_jual_tagih_detail WHERE No_Tagih='".$ainfo['No_Tagih']."') GROUP BY No_Jual) B ON (B.No_Jual=J.No_Jual) LEFT JOIN para_outlet O ON (O.OutletID=J.OutletID) ORDER BY O.Nama_Outlet, J.Tgl_Jual");
//if ($db->RecordCount()==0) return;
// menampilkan judul dibagian atas laporan
$kop = '<div class="text-center"><span class="fs-6 fw-bold">'.$_SESSION['__WEB_APP']['REG_NAME'].'</span><br>DAFTAR TAGIHAN OUTLET</div>';
$kop .= '<table class="notaHeader"><tbody>';
$kop .= '<tr><td width="15%">No. Tagihan</td><td width="35%" class="ttkdua">'.$ainfo['No_Tagih'].'</td><td width="15%">Sales</td><td width="35%" class="ttkdua">'.$ainfo['Nama_Sales'].($ainfo['Kode_Sales']==""?"":" (".$ainfo['Kode_Sales'].")").'</td></tr>';
$kop .= '<tr><td>Tanggal</td><td class="ttkdua">'.$ainfo['Tgl_Tagih2'].'</td></tr>';
$kop .= '</tbody></table>';
$header = '<table class="garis"><thead><tr><th style="width:1cm">No.</th><th>Nama Outlet</th><th style="width:2cm">No. Nota</th><th style="width:2.6cm">Tgl. Nota</th><th style="width:2.2cm">Total Nota</th><th style="width:2.2cm">Setoran</th><th style="width:2.2cm">Pembayaran</th><th style="width:2.2cm">Sisa Nota</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td class="c">%s</td><td class="c nwr">%s</td><td class="r">%s</td><td class="r">%s</td><td class="r">%s</td><td class="r">%s</td></tr>';
$_bline = '<tr><td class="b c" colspan="6">%s</td><td class="b r" colspan="2">%s</td></tr>';
$body = ""; $no_urut = 1; $tot_tag = 0;
while ($db->Next()) {
$body .= sprintf($_line, $no_urut++, $db->Row("Nama_Outlet"), $db->Row("No_Jual"), $db->Row("Tgl_Jual2"), rupiah($db->Row("Total_Faktur")), rupiah($db->Row("Bayar_Lalu")), rupiah($db->Row("Bayar_Ini")), rupiah($db->Row("Total_Sisa")));
$tot_tag += $db->RowFloat("Total_Sisa", 0);
}
$body .= sprintf($_bline, "Total Tagihan Rp.", rupiah($tot_tag), "");
$body .= '</tbody></table><table class="notaFooter"><tr height="80"><td width="50%">&nbsp;</td></tr><tr><td class="r stamp">'.Report_Stamp(1,true).'</td></tr></table>';
echo '<div>' . $kop . $header . $body . '</div>';
}
function nota_biaya($db, $nota = "") {
if (trim($nota)=="") return;
$baris_faktur = 6;
$ainfo = [];
$db->Query("SELECT B.*,DATE_FORMAT(B.Tgl_Biaya,'%d-%m-%Y') Tgl_Biaya2,(B.Jumlah_DPP+B.Jumlah_PPN) Jumlah,S.Nama_Sup,S.Alamat_Sup,S.Kota_Sup FROM (SELECT * FROM biaya_pajak WHERE No_Biaya='".$nota."') B LEFT JOIN para_supplier S ON (S.SupID=B.SupID)");
if ($db->Next()) $ainfo = $db->AllRow();
$ainfo['Alamat_Sup'] = str_replace("\n", "<br>", $ainfo['Alamat_Sup']);
$db->Query("SELECT *,(Qty*Harga_Jual) Jumlah FROM biaya_pajak_detail WHERE No_Biaya='".$nota."' ORDER BY ID");
//if ($db->RecordCount()==0) return;
// menampilkan judul dibagian atas laporan
$kop = '<div class="text-center"><span class="fs-6 fw-bold">INVOICE</span><br>Nomor : '.$ainfo['No_Biaya'].'</div>';
$kop .= '<table class="notaHeader"><tbody>';
$kop .= '<tr><td colspan="2">'.$_SESSION['__WEB_APP']['REG_NAME'].'</td><td colspan="2">Kepada Yth. :</td></tr>';
$kop .= '<tr><td colspan="2" class="align-top">Telp. '.$_SESSION['__WEB_APP']['REG_PHONE'].'</td><td colspan="2">'.$ainfo['Nama_Sup'].'</td></tr>';
$kop .= '<tr><td colspan="2" class="align-top">Fax. '.$_SESSION['__WEB_APP']['REG_FAX'].'</td><td colspan="2">'.$ainfo['Alamat_Sup'].'</td></tr>';
$kop .= '<tr><td colspan="2" width="50%">&nbsp;</td><td width="50%">'.$ainfo['Kota_Sup'].'</td></tr>';
$kop .= '</tbody></table>';
$header = '<table class="garis"><thead><tr><th style="width:1cm">No.</th><th>Uraian</th><th style="width:1.8cm">Qty</th><th style="width:2.8cm">Harga @</th><th style="width:2.8cm">Jumlah</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td class="r">%s</td><td class="r">%s</td><td class="r">%s</td></tr>';
$_bline = '<tr><td class="b">&nbsp;</td><td class="b r" colspan="2">%s</td><td class="b r" colspan="2">%s</td></tr>';
$body = ""; $no_urut = 1;
while ($db->Next()) {
$body .= sprintf($_line, $no_urut++, $db->Row("Uraian_Biaya"), rupiah2($db->Row("Qty")), rupiah($db->Row("Harga_Jual")), rupiah($db->Row("Jumlah")));
}
if ($no_urut <= $baris_faktur) {
$no_urut--;
for ($x=$baris_faktur; $x>fmod($no_urut, $baris_faktur); $x--) {
$body .= sprintf($_line, "&nbsp;", "&nbsp;", "&nbsp;","&nbsp;", "&nbsp;");
}
}
$body .= sprintf($_bline, "Total (Dasar Pengenaan Pajak) Rp.", rupiah($ainfo['Jumlah_DPP']));
$body .= sprintf($_bline, "PPN (11% x Dasar Pengenaan Pajak) Rp.", rupiah($ainfo['Jumlah_PPN']));
//$body .= sprintf($_bline, "PPN (".(($ainfo['Tgl_Biaya'] >= $_SESSION['__APP_IAS']['PPN_TGL']) ? $_SESSION['__APP_IAS']['PPN_STRING'] : "11")."% x Dasar Pengenaan Pajak) Rp.", rupiah($ainfo['Jumlah_PPN']));
$body .= sprintf($_bline, "Grand Total Rp.", rupiah($ainfo['Jumlah']));
$body .= '<table class="notaFooter">';
$body .= '<tr><td width="50%">&nbsp;</td><td>Pontianak, '.tgl_panjang($ainfo['Tgl_Biaya2']).'</td></tr><tr height="80"><td><table class="nostyle"><tr><td style="width:30%;" class="py-0">A/C</td><td class="py-0 ttkdua">029 052 7899</td></tr><tr><td class="py-0">A/N</td><td class="py-0 ttkdua">PT. Ponti Mitra Sejati</td></tr><tr><td class="py-0">Bank</td><td class="py-0 ttkdua">BCA KCU Pontianak</td></tr></table></td><td style="vertical-align:bottom;">Budiyanto Halim Krisno<br>Manager</td></tr><tr><td>&nbsp;</td><td class="r stamp">'.Report_Stamp(1,true).'</td></tr></table>';
echo '<div class="printNota">' . $kop . $header . $body . '</tbody></table></div>';
}
function nota_mdo($db, $nota="") {
if (trim($nota)=="") return;
$asatuan = []; $ainfo = []; $baris_faktur = 25;
$db->Query("SELECT Kode_Satuan FROM para_satuan ORDER BY Urut");//todo: hilangkan nomor urut
while ($db->Next()) $asatuan[$db->Row("Kode_Satuan")] = 0;
$db->Query("SELECT DO.No_MDO,DO.Catatan,DATE_FORMAT(DO.Tgl_MDO,'%d-%m-%Y') Tgl_MDO2,S.Nama_Pegawai Nama_Supir FROM (SELECT * FROM manual_do WHERE No_MDO='".$nota."') DO LEFT JOIN para_pegawai S ON (DO.SupirID=S.PegID)");
if ($db->Next()) $ainfo = $db->AllRow();
$db->Query("SELECT P.Kode_Produk,R.Kode_Rasa,S.Kode_Satuan,D.Muat,D.Kembali,D.Terantar FROM (SELECT *,(Muat-Kembali) Terantar FROM manual_do_detail WHERE No_MDO='".$nota."') D LEFT JOIN inv_produk P ON (D.InvID=P.InvID) LEFT JOIN para_rasa R ON (D.RasaID=R.RasaID) LEFT JOIN para_satuan S ON (D.SatuanID=S.SatuanID) ORDER BY D.ID");
$jml_hal = ceil($db->RecordCount() / $baris_faktur);
// menampilkan judul dibagian atas laporan
$kop = '<div class="text-center"><span class="fs-6 fw-bold">'.$_SESSION['__WEB_APP']['REG_NAME'].'</span><br>DELIVERY ORDER (DO)</div>';
$kop .= '<table class="notaHeader"><tbody>';
$kop .= '<tr><td width="15%">No. DO</td><td width="35%" class="ttkdua">'.$ainfo['No_MDO'].'</td><td width="15%">Driver</td><td width="35%" class="ttkdua">'.$ainfo['Nama_Supir'].'</td></tr>';
$kop .= '<tr><td>Tanggal</td><td class="ttkdua">'.$ainfo['Tgl_MDO2'].'</td></tr>';
$kop .= '<tr><td>Catatan</td><td colspan="3" class="ttkdua">'.$ainfo['Catatan'].'</td></tr>';
$kop .= '</tbody></table>';
$header = '<table class="garis"><thead><tr><th style="width:1cm">No.</th><th>Produk</th><th style="width:2cm">Satuan</th><th style="width:2.2cm">Muat</th><th style="width:2.2cm">Kembali</th><th style="width:2.2cm">Terantar</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td>%s</td><td class="r">%s</td><td class="r">%s</td><td class="r">%s</td></tr>';
$_bline = '<tr><td class="b c" colspan="4">%s</td><td class="b r">%s</td><td class="b r">%s</td></tr>';
$body = '<p id="autopage">&nbsp;</p>';
$body .= $kop.$header; $no_urut = 1; $hal = 1; $sub_jenis = 0;
while ($db->Next()) {
if (fmod(($no_urut-1), $baris_faktur) == 0 && $no_urut > $baris_faktur) {
//footer
$body .= '</tbody></table><table class="notaFooter"><tr height="80"><td colspan="2">&nbsp;</td></tr><tr><td width="50%" class="stamp">Halaman : '.$hal."/".$jml_hal.'</td><td class="r stamp">'.Report_Stamp(1,true).'</td></tr></table>';
$body .= '<p id="linebreak">................ page break ................</p><p id="pagebreak">&nbsp;</p>';
//header
$body .= $kop.$header;
$hal++;
}
//if ($db->Row("Grup")<>$_SESSION['__APP_IAS']['GRUP_PRODUK_KEMASAN'] && $db->Row("Grup")<>$_SESSION['__APP_IAS']['GRUP_PRODUK_HADIAH']) {
$asatuan[$db->Row("Kode_Satuan")] += $db->RowFloat("Terantar");
$sub_jenis++;
//}
$body .= sprintf($_line, $no_urut++, $db->Row("Kode_Produk").(($db->Row("Kode_Rasa"))?" (".$db->Row("Kode_Rasa").")":""), $db->Row("Kode_Satuan"), rupiah($db->Row("Muat")), ($db->RowFloat("Kembali")>0?rupiah($db->Row("Kembali")):""), ($db->RowFloat("Kembali")>0?rupiah($db->Row("Terantar")):""));
}
$ket_produk = "";
foreach ($asatuan as $key => $val) {
if ($val > 0) $ket_produk .= " / ".rupiah($val)." ".strtoupper($key);
}
$ket_produk = substr($ket_produk, 3);
$body .= sprintf($_bline, $sub_jenis." ITEM PRODUK (".$ket_produk.")", "", "");
$body .= '</tbody></table><table class="notaFooter"><tr height="80"><td colspan="2">&nbsp;</td></tr><tr><td width="50%" class="stamp">Halaman : '.$hal."/".$jml_hal.'</td><td class="r stamp">'.Report_Stamp(1,true).'</td></tr></table>';
echo '<div>' . $body . '</div>';
}
$db = (is_resource($db)) ? $db : new MySQL();
$data = Param::Get("data");
$nomor = Param::Get("Nomor_Cetak");
$w_catatan = Param::Get("Cetak_Catatan");
$w_lunas = Param::Get("Cetak_Lunas");
if ( $data == "beli" ) {
nota_beli($db, $nomor);
} else if ( $data == "jual" ) {
nota_jual($db, $nomor);
} else if ( $data == "retur-beli" ) {
nota_retur_beli($db, $nomor);
} else if ( $data == "retur-jual" ) {
nota_retur_jual($db, $nomor);
} else if ( $data == "do-produk" ) {
nota_do_produk($db, $nomor, $w_catatan);
} else if ( $data == "do-faktur" ) {
nota_do_faktur($db, $nomor, $w_catatan);
} else if ( $data == "tagih" ) {
nota_dt($db, $nomor, $w_lunas);
} else if ( $data == "biaya" ) {
nota_biaya($db, $nomor);
} else if ( $data == "mdo" ) {
nota_mdo($db, $nomor);
} else if ( $data == "default") {}
?>
+122
View File
@@ -0,0 +1,122 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/outlet.php
Desc. : PHP - Laporan Daftar Outlet
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : March 25th, 2011.
Last Modified : August 8th, 2024.
(c) 2011 - 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Form;
use avadim\FastExcelWriter\Excel;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export") {
$id_outlet = Param::Get("Grup_OutletID", 0); $aout = [];
$id_grup = Param::Get("Grup_InvID", 0); $agrup = [];
$aktif = Param::Get("Aktif", "X");
if ($id_outlet>0) {
$db->Query("SELECT * FROM para_outlet_grup WHERE Grup_OutletID='".$id_outlet."'");
if ($db->Next()) $aout = $db->AllRow();
}
if ($id_grup>0) {
$db->Query("SELECT * FROM inv_produk_grup WHERE Grup_InvID='".$id_grup."'");
if ($db->Next()) $agrup = $db->AllRow();
}
if ($aktif<>"X") $nama_aktif = ($aktif=="Y") ? "AKTIF" : "TIDAK AKTIF";
// generate report header
$tglheader = "Tanggal Cetak : ".Param::Get("Tgl_Cetak");
$tsql = ($id_outlet==0) ? "" : " AND O.Grup_OutletID='".$id_outlet."'";
$tsql .= ($id_grup==0) ? "" : " AND P.Grup_InvID='".$id_grup."'";
$tsql .= ($aktif=="X") ? "" : " AND O.Aktif='".(($aktif=="Y")?1:0)."'";
$tsql = ($tsql == "") ? " TRUE" : substr($tsql,4);
$ljoin = ($id_grup==0) ? "" : " LEFT JOIN inv_jual J ON (J.OutletID=O.OutletID) LEFT JOIN inv_detail D ON (D.No_Ref=J.No_Jual) LEFT JOIN inv_produk P ON (P.InvID=D.InvID)";
$lgrup = ($id_grup==0) ? "" : " GROUP BY O.OutletID";
// query data laporan
$db->Query("SELECT O.*,IF(O.No_NPWP=0,O.No_NIK,O.No_NPWP) No_NPWP_NIK FROM para_outlet O ".$ljoin." WHERE ".$tsql." ".$lgrup." ORDER BY O.Nama_Outlet");
}
if ( $data == "print" ) {
Report_Header("LAPORAN DAFTAR OUTLET", $tglheader);
if ($id_outlet>0) $header = '<p>Nama Grup Outlet : '.$aout['Nama_Grup'].'</p>';
if ($id_grup>0) $header .= '<p>Nama Grup Produk : '.$agrup['Nama_Grup'].'</p>';
if ($aktif<>"X") $header .= '<p>Status Aktif : '.$nama_aktif.'</p>';
$header .= '<table class="garis"><thead><tr><th>No.</th><th>Nama Outlet</th><th>NPWP</th><th>Alamat</th><th>Kota</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>';
$body = ''; $nomor = 1;
while ($db->Next()) {
$body .= sprintf($_line, $nomor, $db->Row("Nama_Outlet"), $db->Row("No_NPWP_NIK"), $db->Row("Alamat_Outlet"), $db->Row("Kota_Outlet"));
$nomor++;
}
echo $header . $body . "</tbody></table>" . Report_Stamp(1, true);
} else if ( $data == "export" ) {
$excel = Excel::create(['Daftar Outlet']);
$excel->setCompany($_SESSION['__WEB_APP']['REG_NAME']);
$excel->setAuthor($_SESSION['__WEB_APP']['APP_NAMES']);
$sheet = $excel->getSheet();
$rep_header = [
'font' => ['style' => 'bold'],
'text-align' => 'center', 'vertical-align' => 'center'
];
$sheet->writeTo('A1:E1', $_SESSION['__WEB_APP']['REG_NAME'], $rep_header);
$sheet->writeTo('A2:E2', "LAPORAN DAFTAR OUTLET", $rep_header);
$sheet->writeTo('A3:E3', $tglheader, $rep_header);
$sheet->nextRow();
if ($id_outlet>0) $sheet->writeRow(["Nama Grup Outlet : ".$aout['Nama_Grup']]);
if ($id_grup>0) $sheet->writeRow(["Nama Grup Produk : ".$agrup['Nama_Grup']]);
if ($aktif<>"X") $sheet->writeRow(["Status Aktif : ".$nama_aktif]);
$tab_header = [
'font' => ['style' => 'bold'],
'text-align' => 'center', 'vertical-align' => 'center',
'fill' => '#ddd'
];
$sheet->writeHeader(['No', 'Nama Outlet', 'NPWP', 'Alamat', 'Kota'], $tab_header);
$sheet->setColOptions([
'A' => ['format' => "@integer", 'width' => 8],
'B' => ['format' => "@text", 'width' => 25],
'C' => ['format' => "@text", 'width' => 25],
'D' => ['format' => "@text", 'width' => 80],
'E' => ['format' => "@text", 'width' => 15],
]);
$nomor = 1;
while ($db->Next()) {
$sheet->writeRow([$nomor++, $db->Row("Nama_Outlet"), $db->Row("No_NPWP_NIK"), $db->Row("Alamat_Outlet"), $db->Row("Kota_Outlet")]);
}
$excel->output("Daftar Outlet.xlsx");
} else if ( $data == "default") {
$form = new Form($db);
$form->option_db("Grup Outlet", "Grup_OutletID", 0, true, false, "para_outlet_grup", ["Grup_OutletID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"SEMUA GRUP OUTLET"]);
$form->option_db("Grup Produk", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"SEMUA GRUP PRODUK"]);
$form->radio("Status Aktif", "Aktif", "X", true, false, ['Y'=>"Ya",'N'=>"Tidak",'X'=>"Semua"]);
$form->datebox("Tanggal Cetak", "Tgl_Cetak", tgl_ymd(), true, false);
$form->show(' _Grup_OutletID_ _Grup_InvID_ _Aktif_ _Tgl_Cetak_ ');
}
?>
+313
View File
@@ -0,0 +1,313 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/piutang.php
Desc. : PHP - Laporan Piutang Outlet
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : July 17th, 2011.
Last Modified : January 20th, 2024.
(c) 2011 - 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.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;
use siaupheng\fonia3\Printer\PrintHTML;
use siaupheng\fonia3\Data\SimpleXLS;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$tipe = Param::Get("Tipe"); // R or D
$tipedt = Param::Get("TipeDT"); // X, S, B
$ck = Param::Get("CK", "X");
$id_gout = Param::Get("Grup_OutletID", 0);
$id_outlet = Param::Get("OutletID", 0);
$id_sales = Param::Get("SalesID", "SEMUA");
$id_grup = Param::Get("Grup_InvID");
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$aoutlet = []; $nama_gout = ""; $nama_grup = ""; $nama_sales = "TANPA SALES";
if ($id_outlet > 0) {
$db->Query("SELECT * FROM para_outlet WHERE OutletID='".$id_outlet."' LIMIT 1");
if ($db->Next()) $aoutlet = $db->AllRow();
}
if ($id_gout > 0) {
$db->Query("SELECT Nama_Grup FROM para_outlet_grup WHERE Grup_OutletID='".$id_gout."' LIMIT 1");
if ($db->Next()) $nama_gout = $db->Row("Nama_Grup");
}
if ($id_grup > 0) {
$db->Query("SELECT Nama_Grup FROM inv_produk_grup WHERE Grup_InvID='".$id_grup."' LIMIT 1");
if ($db->Next()) $nama_grup = $db->Row("Nama_Grup");
}
if ($id_sales>0 && $id_sales<>"NON" && $id_sales<>"SEMUA") {
$db->Query("SELECT Nama_Pegawai FROM para_pegawai WHERE PegID='".$id_sales."' LIMIT 1");
$nama_sales = $db->Row("Nama_Pegawai");
}
if ($id_sales=="SEMUA") $nama_sales = "";
$nama_dt = ($tipedt<>"X") ? (($tipedt=="S")?"SUDAH DT":"BELUM DT") : "";
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$qsql = ($id_outlet>0) ? " AND OutletID=".$id_outlet : "";
$qsql .= ($id_sales>0 && $id_sales<>"NON" && $id_sales<>"SEMUA") ? " AND SalesID=".$id_sales : "";
$qsql .= ($id_sales=="NON") ? " AND SalesID=0" : "";
$qsql .= ($tipedt<>"X") ? (($tipedt=="S")?" AND No_Jual IN (SELECT No_Jual FROM inv_jual_tagih_detail)":" AND No_Jual NOT IN (SELECT No_Jual FROM inv_jual_tagih_detail)") : "";
$tsql = ($id_gout>0) ? " AND O.Grup_OutletID='".$id_gout."'" : "";
$tsql .= ($id_grup>0) ? " AND P.Grup_InvID=".$id_grup : "";
if ($tsql <> "") $tsql = " WHERE ".substr($tsql, 4);
if ($tipe=="R") {
$xsql = "SELECT O.Nama_Outlet,SUM(J.Total_Jual-J.Total_Diskon) Total_Piutang,SUM(J.Total_Bayar) Total_Bayar, SUM(J.Total_Jual-J.Total_Diskon-J.Total_Bayar) Total_Sisa FROM (SELECT * FROM inv_jual WHERE Lunas=0 AND Rekap=1 AND (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$qsql.") J LEFT JOIN para_outlet O ON (J.OutletID=O.OutletID)".$tsql." GROUP BY J.OutletID ORDER BY O.Nama_Outlet";
if ($id_grup > 0) $xsql = "SELECT O.Nama_Outlet,SUM((-D.Qty*D.Harga_Jual)-D.Total_Diskon) Total_Piutang FROM (SELECT * FROM inv_jual WHERE Lunas=0 AND Rekap=1 AND (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$qsql.") J INNER JOIN (SELECT * FROM inv_detail WHERE Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') D ON (D.No_Ref=J.No_Jual) LEFT JOIN para_outlet O ON (J.OutletID=O.OutletID) LEFT JOIN inv_produk P ON (D.InvID=P.InvID)".$tsql." GROUP BY J.OutletID ORDER BY O.Nama_Outlet";
} else {
$xsql = "SELECT J.*,DATE_FORMAT(J.Tgl_Jual,'%d-%m-%Y') Tgl_Jual2,O.Nama_Outlet,J.Total_Jual-J.Total_Diskon Total_Piutang,J.Total_Jual-J.Total_Diskon-J.Total_Bayar Total_Sisa FROM (SELECT * FROM inv_jual WHERE Lunas=0 AND Rekap=1 AND (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$qsql.") J LEFT JOIN para_outlet O ON (J.OutletID=O.OutletID)".$tsql." ORDER BY J.No_Jual";
if ($id_grup > 0) $xsql = "SELECT J.*,DATE_FORMAT(J.Tgl_Jual,'%d-%m-%Y') Tgl_Jual2,O.Nama_Outlet,SUM((-D.Qty*D.Harga_Jual)-D.Total_Diskon) Total_Piutang FROM (SELECT * FROM inv_jual WHERE Lunas=0 AND Rekap=1 AND (Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$qsql.") J INNER JOIN (SELECT * FROM inv_detail WHERE Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') D ON (D.No_Ref=J.No_Jual) LEFT JOIN para_outlet O ON (J.OutletID=O.OutletID) LEFT JOIN inv_produk P ON (D.InvID=P.InvID)".$tsql." GROUP BY J.No_Jual ORDER BY J.No_Jual";
}
$db->Query($xsql);
}
if ( $data == "print" ) {
Report_Header("LAPORAN ".($tipe=="R"?"REKAP":"DETAIL")." PIUTANG OUTLET", $tglheader);
$pre = new PrintHTML();
$pre->set_css("garis");
if ($tipe=="R") {
$nkol = 3;
$pre->add_field("NO.",10,"C");
$pre->add_field("NAMA OUTLET",120);
$pre->add_field("JUMLAH PIUTANG",30,"R","uang");
if ($id_grup == 0) {
$nkol = 5;
$pre->add_field("JUMLAH BAYAR",30,"R","uang");
$pre->add_field("SISA PIUTANG",30,"R","uang");
}
if ($id_gout>0) $pre->add_span(array("NAMA GRUP OUTLET : ".$nama_gout,$nkol,"L,NB"));
if ($id_outlet>0) $pre->add_span(array("NAMA OUTLET : ".strtoupper($nama_out),$nkol,"L,NB"));
if ($id_sales>0 || $id_sales=="NON") $pre->add_span(array("NAMA SALES : ".strtoupper($nama_sales),$nkol,"L,NB"));
if ($id_grup>0) $pre->add_span(array("GRUP PRODUK : ".strtoupper($nama_grup),$nkol,"L,NB"));
if ($tipedt<>"X") $pre->add_span(array("STATUS DT : ".strtoupper($nama_dt),$nkol,"L,NB"));
$pre->show_fields();
$tot_piu = $tot_bayar = $nomor = 0;
while ($db->Next()) {
$nomor++;
$tot_piu += $db->Row("Total_Piutang");
if ($id_grup == 0) {
$tot_bayar += $db->Row("Total_Bayar");
$pre->add_value($nomor, $db->Row("Nama_Outlet"), $db->Row("Total_Piutang"), $db->Row("Total_Bayar"), $db->Row("Total_Sisa"));
}
if ($id_grup > 0) $pre->add_value($nomor, $db->Row("Nama_Outlet"), $db->Row("Total_Piutang"));
}
if ($id_grup == 0) $pre->add_span(array(""),array("GRAND TOTAL",1,"L,B"),array($tot_piu,1,"R,B","uang"),array($tot_bayar,1,"R,B","uang"),array($tot_piu-$tot_bayar,1,"R,B","uang"));
if ($id_grup > 0) $pre->add_span(array(""),array("GRAND TOTAL",1,"L,B"),array($tot_piu,1,"R,B","uang"));
} else {
$nkol = 4;
$pre->add_field("NO. NOTA",10,"C");
$pre->add_field("TGL. NOTA",10,"C");
$pre->add_field("NAMA OUTLET",120);
$pre->add_field("JUMLAH PIUTANG",30,"R","uang");
if ($id_grup == 0) {
$nkol = 6;
$pre->add_field("JUMLAH BAYAR",30,"R","uang");
$pre->add_field("SISA PIUTANG",30,"R","uang");
}
if ($id_gout>0) $pre->add_span(array("NAMA GRUP OUTLET : ".$nama_gout,$nkol,"L,NB"));
if ($id_outlet>0) $pre->add_span(array("NAMA OUTLET : ".strtoupper($nama_out),$nkol,"L,NB"));
if ($id_sales>0 || $id_sales=="NON") $pre->add_span(array("NAMA SALES : ".strtoupper($nama_sales),$nkol,"L,NB"));
if ($id_grup>0) $pre->add_span(array("GRUP PRODUK : ".strtoupper($nama_grup),$nkol,"L,NB"));
if ($tipedt<>"X") $pre->add_span(array("STATUS DT : ".strtoupper($nama_dt),$nkol,"L,NB"));
$pre->show_fields();
$tot_piu = $tot_bayar = $diskon = 0;
while ($db->Next()) {
$tot_piu += $db->Row("Total_Piutang");
if ($id_grup == 0) {
$tot_bayar += $db->Row("Total_Bayar");
$pre->add_value($db->Row("No_Jual"), $db->Row("Tgl_Jual2"), $db->Row("Nama_Outlet"), $db->Row("Total_Piutang"), $db->Row("Total_Bayar"), $db->Row("Total_Sisa"));
}
if ($id_grup > 0) $pre->add_value($db->Row("No_Jual"), $db->Row("Tgl_Jual2"), $db->Row("Nama_Outlet"), $db->Row("Total_Piutang"));
}
if ($id_grup == 0) $pre->add_span(array("GRAND TOTAL",3,"L,B"),array($tot_piu,1,"R,B","uang"),array($tot_bayar,1,"R,B","uang"),array($tot_piu-$tot_bayar,1,"R,B","uang"));
if ($id_grup > 0) $pre->add_span(array("GRAND TOTAL",3,"L,B"),array($tot_piu,1,"R,B","uang"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Laporan ".($tipe=="R"?"Rekap":"Detail")." Piutang Outlet",
'subject'=>"PT.PMS",
'desc'=>"Export Data dari IAS"
]);
$xls->add_header("<b>".strtoupper($_SESSION['__WEB_APP']['REG_NAME'])."</b>");
$xls->add_header("<b>LAPORAN ".(($tipe=="R")?"REKAP":"DETAIL")." PIUTANG OUTLET</b>");
$xls->add_header($tglheader);
if ($tipe=="R") {
$xls->add_field("NO", 12, "C");
$xls->add_field("NAMA OUTLET", 60, "L");
$xls->add_field("JUMLAH PIUTANG", 20, "R,N");
if ($id_grup == 0) {
$xls->add_field("JUMLAH BAYAR", 20, "R,N");
$xls->add_field("SISA PIUTANG", 20, "R,N");
}
$xls->add_sheet("PIUTANG OUTLET", false);
$nkol = ($id_grup == 0) ? 3 : 1;
if ($id_gout>0) $xls->add_span(array("NAMA GRUP OUTLET",2,"L,B,NL"),array($nama_gout,$nkol,"L,B,NL"));
if ($id_outlet>0) $xls->add_span(array("NAMA OUTLET",2,"L,B,NL"),array(strtoupper($nama_out),$nkol,"L,B,NL"));
if ($id_sales>0 || $id_sales=="NON") $xls->add_span(array("NAMA SALES",2,"L,B,NL"),array(strtoupper($nama_sales),$nkol,"L,B,NL"));
if ($id_grup>0) $xls->add_span(array("GRUP PRODUK",2,"L,B,NL"),array(strtoupper($nama_grup),$nkol,"L,B,NL"));
if ($tipedt<>"X") $xls->add_span(array("STATUS DT",2,"L,B,NL"),array(strtoupper($nama_dt),$nkol,"L,B,NL"));
$xls->show_headers();
$tot_piu = $tot_bayar = $nomor = 0;
while ($db->Next()) {
$nomor++;
$tot_piu += $db->Row("Total_Piutang");
if ($id_grup == 0) {
$tot_bayar += $db->Row("Total_Bayar");
$xls->add_value($nomor, $db->Row("Nama_Outlet"), $db->Row("Total_Piutang"), $db->Row("Total_Bayar"), $db->Row("Total_Sisa"));
} else {
$xls->add_value($nomor, $db->Row("Nama_Outlet"), $db->Row("Total_Piutang"));
}
}
if ($id_grup == 0) {
$xls->add_span(array("TOTAL PIUTANG",2,"R,B"),array($tot_piu,1,"R,N,B"),array($tot_bayar,1,"R,N,B"),array($tot_piu-$tot_bayar,1,"R,N,B"));
} else {
$xls->add_span(array("TOTAL PIUTANG",2,"R,B"),array($tot_piu,1,"R,N,B"));
}
} else {
$xls->add_field("NO. NOTA", 14, "C");
$xls->add_field("TGL. NOTA", 15, "C");
$xls->add_field("NAMA OUTLET", 60, "L");
$xls->add_field("JUMLAH PIUTANG", 20, "R,N");
if ($id_grup == 0) {
$xls->add_field("JUMLAH BAYAR", 20, "R,N");
$xls->add_field("SISA PIUTANG", 20, "R,N");
}
$xls->add_sheet("PIUTANG OUTLET", false);
$nkol = ($id_grup == 0) ? 4 : 2;
if ($id_gout>0) $xls->add_span(array("NAMA GRUP OUTLET",2,"L,B,NL"),array($nama_gout,$nkol,"L,B,NL"));
if ($id_outlet>0) $xls->add_span(array("NAMA OUTLET",2,"L,B,NL"),array(strtoupper($nama_out),$nkol,"L,B,NL"));
if ($id_sales>0 || $id_sales=="NON") $xls->add_span(array("NAMA SALES",2,"L,B,NL"),array(strtoupper($nama_sales),$nkol,"L,B,NL"));
if ($id_grup>0) $xls->add_span(array("GRUP PRODUK",2,"L,B,NL"),array(strtoupper($nama_grup),$nkol,"L,B,NL"));
if ($tipedt<>"X") $xls->add_span(array("STATUS DT",2,"L,B,NL"),array(strtoupper($nama_dt),$nkol,"L,B,NL"));
$xls->show_headers();
$tot_piu = $tot_bayar = $diskon = 0;
while ($db->Next()) {
$tot_piu += $db->Row("Total_Piutang");
if ($id_grup == 0) {
$tot_bayar += $db->Row("Total_Bayar");
$xls->add_value($db->Row("No_Jual"), $db->Row("Tgl_Jual2"), $db->Row("Nama_Outlet"), $db->Row("Total_Piutang"), $db->Row("Total_Bayar"), $db->Row("Total_Sisa"));
} else {
$xls->add_value($db->Row("No_Jual"), $db->Row("Tgl_Jual2"), $db->Row("Nama_Outlet"), $db->Row("Total_Piutang"));
}
}
if ($id_grup == 0) {
$xls->add_span(array("TOTAL PIUTANG",3,"R,B"),array($tot_piu,1,"R,N,B"),array($tot_bayar,1,"R,N,B"),array($tot_piu-$tot_bayar,1,"R,N,B"));
} else {
$xls->add_span(array("TOTAL PIUTANG",3,"R,B"),array($tot_piu,1,"R,N,B"));
}
}
$xls->send("Laporan ".($tipe=="R"?"Rekap":"Detail")." Piutang Outlet.xlsx");
unset($xls);
} else if ( $data == "brow-outlet" ) {
$tcari = trim(Param::Get("Cari_Outlet"));
$tsql = ($tcari=="") ? " LIMIT 100" : " AND CONCAT(Nama_Outlet,Telp_Outlet,Nama_Outlet) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM vi_para_outlet WHERE Aktif=1".$tsql);
$obj->add_field("OutletID", "ID", "hid");
$obj->add_field("Kode_Outlet", "Kode", "c");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Alamat_Kota", "Alamat & Kota", "awr");
$obj->set_field_order("Nama_Outlet", "A");
$obj->add_row_btn("save", "Pilih", "RepoPiutangJS.outlet_select");
$obj->set_func_navi("RepoPiutangJS.data_query('brow-outlet')");
$ajson[] = $obj->json_table("divBrowOutlet");
} else if ( $data == "auto-outlet" ) {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [['value' => 0, 'text' => "SEMUA OUTLET", 'data' => ""]];
if (is_string($tcari) && strlen($tcari) < 64) {
$db->Query("SELECT * FROM vi_para_outlet WHERE Aktif=1 AND CONCAT(Nama_Outlet,Alamat_Outlet) LIKE '%".$tcari."%' ORDER BY Nama_Outlet LIMIT 50");
while ($db->Next()) {
$ajson['autodata'][] = ['value'=>$db->Row("OutletID"), 'text'=>$db->Row("Nama_Alamat"), 'data'=>$db->Row("Alamat_Kota")];
}
}
} else if ( $data == "default") {
$asales = ['SEMUA' => "SEMUA SALES", 'NON' => "TANPA-SALES"];
$db->Query("SELECT PegID,Nama_Pegawai FROM para_pegawai WHERE Jenis_PegID='".$_SESSION['__APP_IAS']['GRUP_PEG_SALES']."' ORDER BY Nama_Pegawai");
while ($db->Next()){
$asales[$db->Row("PegID")] = $db->Row("Nama_Pegawai");
}
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
$tdt = $form->radio("_", "TipeDT", "X", true, false, ["X"=>"Semua","S"=>"Sudah DT","B"=>"Belum DT"]);
$toutlet = $form->textauto("_", "Nama_Outlet", ['value'=>0,'text'=>"SEMUA OUTLET"], true, false);
$tsales = $form->option("_", "SalesID", "SEMUA", true, false, $asales);
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "TRUE ORDER BY Nama_Grup", [0,"SEMUA GRUP"]);
$ttglfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$ttglto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="TipeDT">Status DT</label>
<div class="col">'.$tdt.'</div>
</div>
<!--- group outlet -->
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Nama_Outlet">Nama Outlet</label>
<div class="col"><div class="input-group">'.$toutlet.'<button class="btn btn-info" type="button" onclick="RepoPiutangJS.outlet_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="SalesID">Nama Sales</label>
<div class="col">'.$tsales.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Grup_InvID">Grup Produk</label>
<div class="col">'.$tgrup.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col">'.$ttglfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col">'.$ttglto.'</div>
</div>
<input type="hidden" id="OutletID" value="0">';
}
send_json($ajson);
?>
+141
View File
@@ -0,0 +1,141 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/produk.php
Desc. : PHP - Laporan Daftar Produk
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : May 26th, 2010.
Last Modified : March 21st, 2023.
(c) 2010 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Form;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export") {
$id_grup = Param::Get("Grup_InvID", 0); $agrup = [];
if ($id_grup>0) {
$db->Query("SELECT * FROM inv_produk_grup WHERE Grup_InvID='".$id_grup."'");
if ($db->Next()) $agrup = $db->AllRow();
}
// generate report header
$tglheader = "Tanggal Cetak : ".Param::Get("Tgl_Cetak");
$tsql = ($id_grup==0) ? "" : " WHERE Grup_InvID='".$id_grup."'";
// query data laporan
$db->Query("SELECT * FROM vi_inv_produk".$tsql." ORDER BY Nama_Produk");
}
if ( $data == "print" ) {
Report_Header("LAPORAN DAFTAR PRODUK", $tglheader);
if ($id_grup>0) $header = '<p>Nama Grup Produk : '.$agrup['Nama_Grup'].'</p>';
$header .= '<table class="garis"><thead><tr><th>No.</th><th>Kode</th><th>Nama Produk</th><th>Satuan</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td>%s</td><td>%s</td></tr>';
$body = ''; $nomor = 1;
while ($db->Next()) {
$body .= sprintf($_line, $nomor, $db->Row("Kode_Produk"), $db->Row("Nama_Produk"), $db->Row("Satuan_Stok"));
$nomor++;
}
echo $header . $body . "</tbody></table>" . Report_Stamp(1, true);
} else if ( $data == "export" ) {
\PhpOffice\PhpSpreadsheet\Cell\Cell::setValueBinder( new \PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder() );
$styleTxt = [
'numberFormat' => ['formatCode' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT]
];
$styleNum = [
'numberFormat' => ['formatCode' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2]
];
$ssheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$ssheet->getProperties()
->setCreator($_SESSION['__WEB_APP']['APP_NAME']." v".$_SESSION['__WEB_APP']['APP_VER'])
->setLastModifiedBy($_SESSION['__WEB_APP']['APP_NAME']." v".$_SESSION['__WEB_APP']['APP_VER'])
->setTitle("Daftar Produk")
->setCompany($_SESSION['__WEB_APP']['REG_NAME']);
$sheet = $ssheet->getActiveSheet();
$sheet->setTitle("Daftar Produk");
// header
$styleHeader = [
'font' => ['bold' => true],
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER]
];
$sheet->setCellValue("A1", strtoupper($_SESSION['__WEB_APP']['REG_NAME']));
$sheet->mergeCells('A1:D1');
$sheet->setCellValue("A2", "LAPORAN DAFTAR PRODUK");
$sheet->mergeCells('A2:D2');
$sheet->setCellValue("A3", $tglheader);
$sheet->mergeCells('A3:D3');
$sheet->getStyle('A1:D3')->applyFromArray($styleHeader);
// table header
$sheet->getColumnDimension('A')->setWidth(8);
$sheet->getColumnDimension('B')->setWidth(25);
$sheet->getColumnDimension('C')->setWidth(80);
$sheet->getColumnDimension('D')->setWidth(15);
$baris = 5;
if ($id_grup>0) {
$sheet->setCellValue("A".$baris, "Nama Grup Outlet : ".$agrup['Nama_Grup']);
$baris++;
}
$styleTableH = [
'font' => ['bold' => true],
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER, 'wrapText' => true],
'fill' => ['fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID, 'startColor' => ['rgb'=>"D0D0D0"]],
'borders' => ['allBorders' => ['borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => ['rgb'=>"C0C0C0"]]]
];
$sheet->setCellValue("A".$baris, "No.");
$sheet->setCellValue("B".$baris, "Kode");
$sheet->setCellValue("C".$baris, "Nama Produk");
$sheet->setCellValue("D".$baris, "Satuan");
$sheet->getStyle('A'.$baris.':D'.$baris)->applyFromArray($styleTableH);
$baris++; $nomor = 1;
while ($db->Next()) {
$sheet->setCellValue("A".$baris, $nomor++);
$sheet->setCellValue("B".$baris, $db->Row("Kode_Produk"));
$sheet->setCellValue("C".$baris, $db->Row("Nama_Produk"));
$sheet->setCellValue("D".$baris, $db->Row("Satuan_Stok"));
$baris++;
}
$sheet->getSheetView()->setZoomScale(75);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="Daftar Produk.xlsx"');
header('Cache-Control: max-age=0');
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($ssheet, 'Xlsx');
$writer->save('php://output');
$ssheet->disconnectWorksheets();
unset($ssheet);
unset($writer);
} else if ( $data == "default") {
$form = new Form($db);
$form->option_db("Grup Produk", "Grup_InvID", 0, true, true, "inv_produk_grup", array("Grup_InvID","Nama_Grup"), "Aktif=1 ORDER BY Nama_Grup", [0,"SEMUA GRUP PRODUK"]);
$form->datebox("Tanggal Cetak", "Tgl_Cetak", tgl_ymd(), true, true);
$form->show(' _Grup_InvID_ _Tgl_Cetak_ ');
}
?>
+154
View File
@@ -0,0 +1,154 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/rekap_do.php
Desc. : PHP - Rekap Penjualan Produk Per-DO
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : January 25th, 2024.
(c) 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Form;
use siaupheng\fonia3\Printer\PrintHTML;
use siaupheng\fonia3\Data\SimpleXLS;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$ahasil = []; $aprod = [];
$db->Query("SELECT A.No_DO,A.Tgl_DO,D.InvID,SUM(D.Stok) Stok FROM (SELECT * FROM inv_jual_do WHERE Tgl_DO BETWEEN '".$tglfrom."' AND '".$tglto."') A LEFT JOIN (SELECT No_DO,No_Jual FROM inv_jual WHERE No_DO IN (SELECT No_DO FROM inv_jual_do WHERE Tgl_DO BETWEEN '".$tglfrom."' AND '".$tglto."')) J ON (J.No_DO=A.No_DO) LEFT JOIN (SELECT No_Ref,InvID,SUM(-Stok) Stok FROM inv_detail WHERE No_Ref IN (SELECT No_Jual FROM inv_jual WHERE No_DO IN (SELECT No_DO FROM inv_jual_do WHERE Tgl_DO BETWEEN '".$tglfrom."' AND '".$tglto."') AND InvID NOT IN (SELECT InvID FROM inv_produk WHERE Grup_InvID IN (".$_SESSION['__APP_IAS']['GRUP_PRODUK_KEMASAN'].",".$_SESSION['__APP_IAS']['GRUP_PRODUK_HADIAH']."))) GROUP BY No_Ref,InvID) D ON (D.No_Ref=J.No_Jual) GROUP BY A.No_DO,D.InvID ORDER BY A.No_DO");
while ($db->Next()) {
if (!$ahasil[$db->Row("No_DO")]) {
$ahasil[$db->Row("No_DO")]['No_DO'] = $db->Row("No_DO");
$ahasil[$db->Row("No_DO")]['Tgl_DO'] = tgl_sql2str($db->Row("Tgl_DO"));
}
$ahasil[$db->Row("No_DO")][$db->Row("InvID")] += $db->RowFloat("Stok", 0);
$aprod[$db->Row("InvID")] += $db->RowFloat("Stok", 0);
}
$aproduk = [];
$db->Query("SELECT A.InvID,A.Kode_Produk,IFNULL(B.Qty,0) Qty FROM (SELECT * FROM inv_produk) A LEFT JOIN (SELECT * FROM inv_produk_kemasan WHERE SatuanID=2) B ON (B.InvID=A.InvID)");
while ($db->Next()) {
$aproduk[$db->Row("InvID")] = ['kode' => $db->Row("Kode_Produk"), 'kali' => $db->RowFloat("Qty", 0)];
}
}
if ( $data == "print" ) {
Report_Header("LAPORAN REKAP DELIVERY ORDER", $tglheader);
$pre = new PrintHTML();
$pre->set_css("garis");
$pre->add_field("No DO",50,"C");
$pre->add_field("Tgl DO",30, "C");
foreach ($aprod as $_key => $_val) {
if ($_key == "") continue;
$pre->add_field($aproduk[$_key]['kode'],50,"R","rupiah2");
}
$pre->add_field("TOTAL",50,"R","rupiah2");
$pre->show_fields();
foreach ($ahasil as $_key => $_val) {
$_tot = 0;
$_atmp = [$_val['No_DO'], $_val['Tgl_DO']];
foreach ($aprod as $_key2 => $_val2) {
if ($_key2 == "") continue;
array_push($_atmp, $_val[$_key2] / $aproduk[$_key2]['kali']);
$_tot += $_val[$_key2] / $aproduk[$_key2]['kali'];
}
array_push($_atmp, $_tot);
$pre->add_value($_atmp);
}
$_tot = 0;
$_atmp = ["TOTAL", ""];
foreach ($aprod as $_key2 => $_val2) {
if ($_key2 == "") continue;
array_push($_atmp, $_val2 / $aproduk[$_key2]['kali']);
$_tot += $_val2 / $aproduk[$_key2]['kali'];
}
array_push($_atmp, $_tot);
$pre->add_value($_atmp);
$pre->add_stamp(0, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Laporan Penjualan ".ucfirst($sjudul)."",
'subject'=>"PT.PMS",
'desc'=>"Export Data dari IAS"
]);
$xls->add_header("<b>".strtoupper($_SESSION['__WEB_APP']['REG_NAME'])."</b>");
$xls->add_header("<b>LAPORAN REKAP DELIVERY ORDER</b>");
$xls->add_header($tglheader);
$xls->add_field("No DO", 20, "C");
$xls->add_field("Tgl DO", 15, "C");
foreach ($aprod as $_key => $_val) {
if ($_key == "") continue;
$xls->add_field($aproduk[$_key]['kode'],12,"R,N");
}
$xls->add_field("TOTAL",12,"R,N");
$xls->add_sheet("REKAP DO", false);
$xls->show_headers();
foreach ($ahasil as $_key => $_val) {
$_tot = 0;
$_atmp = [$_val['No_DO'], $_val['Tgl_DO']];
foreach ($aprod as $_key2 => $_val2) {
if ($_key2 == "") continue;
array_push($_atmp, $_val[$_key2] / $aproduk[$_key2]['kali']);
$_tot += $_val[$_key2] / $aproduk[$_key2]['kali'];
}
array_push($_atmp, $_tot);
$xls->add_value($_atmp);
}
$_tot = 0;
$_atmp = ["TOTAL", ""];
foreach ($aprod as $_key2 => $_val2) {
if ($_key2 == "") continue;
array_push($_atmp, $_val2 / $aproduk[$_key2]['kali']);
$_tot += $_val2 / $aproduk[$_key2]['kali'];
}
array_push($_atmp, $_tot);
$xls->add_value($_atmp);
$xls->add_stamp(1, true);
$xls->send("Laporan Rekap Delivery Order.xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$ttglfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$ttglto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col">'.$ttglfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col">'.$ttglto.'</div>
</div>';
}
?>
+163
View File
@@ -0,0 +1,163 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/rekap_fp.php
Desc. : PHP - Rekap Faktur Pajak Keluaran
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : August 30th, 2016.
Last Modified : July 4th, 2023.
(c) 2016 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Form;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " s/d ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
// query data laporan
$db->Query("SELECT P.*,J.No_Nota,O.Email_Outlet FROM (SELECT * FROM inv_jual_pajak WHERE Tgl_Pajak BETWEEN '".$tglfrom."' AND '".$tglto."') P LEFT JOIN (SELECT No_Pajak,GROUP_CONCAT(RIGHT(No_Jual,5) SEPARATOR ', ') No_Nota FROM inv_jual WHERE No_Pajak IN (SELECT No_Pajak FROM inv_jual_pajak WHERE Tgl_Pajak BETWEEN '".$tglfrom."' AND '".$tglto."') GROUP BY No_Pajak ORDER BY No_Pajak) J ON (J.No_Pajak=P.No_Pajak) LEFT JOIN para_outlet O ON (O.OutletID=P.OutletID) ORDER BY P.No_Pajak");
}
if ( $data == "print" ) {
Report_Header("LAPORAN REKAPITULASI FAKTUR PAJAK", $tglheader);
$header .= '<table class="garis"><thead><tr><th>No.</th><th>NSFP</th><th>Tanggal</th><th>No. Nota</th><th>Nama NPWP</th><th>Email Outlet</th><th>DPP</th><th>PPN</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td class="c">%s</td><td>%s</td><td>%s</td><td>%s</td><td class="r">%s</td><td class="r">%s</td></tr>';
$_sline = '<tr><td class="c b" colspan="6">%s</td><td class="r b">%s</td><td class="r b">%s</td></tr>';
$body = ''; $nomor = 1; $tot_dpp = 0; $tot_ppn = 0;
while ($db->Next()) {
$tot_dpp += $db->Row("Jumlah_DPP");
$tot_ppn += $db->Row("Jumlah_PPN");
$body .= sprintf($_line, $nomor++, $db->Row("No_Pajak"), tgl_sql2str($db->Row("Tgl_Pajak")), $db->Row("No_Nota"), $db->Row("Nama_NPWP"), $db->Row("Email_Outlet"), rupiah2($db->Row("Jumlah_DPP")), rupiah2($db->Row("Jumlah_PPN")));
}
$body .= sprintf($_sline, "Jumlah", rupiah2($tot_dpp), rupiah2($tot_ppn));
echo $header . $body . "</tbody></table>" . Report_Stamp(1, true);
} else if ( $data == "export" ) {
\PhpOffice\PhpSpreadsheet\Cell\Cell::setValueBinder( new \PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder() );
$styleTxt = [
'numberFormat' => ['formatCode' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT]
];
$styleNum = [
'numberFormat' => ['formatCode' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2]
];
$ssheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$ssheet->getProperties()
->setCreator($_SESSION['__WEB_APP']['APP_NAME']." v".$_SESSION['__WEB_APP']['APP_VER'])
->setLastModifiedBy($_SESSION['__WEB_APP']['APP_NAME']." v".$_SESSION['__WEB_APP']['APP_VER'])
->setTitle("Data Rekapitulasi Faktur Pajak")
->setCompany($_SESSION['__WEB_APP']['REG_NAME']);
$sheet = $ssheet->getActiveSheet();
$sheet->setTitle("Data Rekapitulasi Faktur Pajak");
// header
$styleHeader = [
'font' => ['bold' => true],
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER]
];
$sheet->setCellValue("A1", strtoupper($_SESSION['__WEB_APP']['REG_NAME']));
$sheet->mergeCells('A1:H1');
$sheet->setCellValue("A2", "LAPORAN REKAPITULASI FAKTUR PAJAK");
$sheet->mergeCells('A2:H2');
$sheet->setCellValue("A3", $tglheader);
$sheet->mergeCells('A3:H3');
$sheet->getStyle('A1:H3')->applyFromArray($styleHeader);
// table header
$sheet->getColumnDimension('A')->setWidth(8);
$sheet->getColumnDimension('B')->setWidth(18);
$sheet->getColumnDimension('C')->setWidth(12);
$sheet->getColumnDimension('D')->setWidth(25);
$sheet->getColumnDimension('E')->setWidth(25);
$sheet->getColumnDimension('F')->setWidth(20);
$sheet->getColumnDimension('G')->setWidth(18);
$sheet->getColumnDimension('H')->setWidth(18);
$styleTableH = [
'font' => ['bold' => true],
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER, 'wrapText' => true],
'fill' => ['fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID, 'startColor' => ['rgb'=>"D0D0D0"]],
'borders' => ['allBorders' => ['borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => ['rgb'=>"C0C0C0"]]]
];
$baris = 5;
$sheet->setCellValue("A".$baris, "No.");
$sheet->setCellValue("B".$baris, "NSFP");
$sheet->setCellValue("C".$baris, "Tanggal");
$sheet->setCellValue("D".$baris, "No. Nota");
$sheet->setCellValue("E".$baris, "Nama NPWP");
$sheet->setCellValue("F".$baris, "Email Outlet");
$sheet->setCellValue("G".$baris, "DPP");
$sheet->setCellValue("H".$baris, "PPN");
$sheet->getStyle('A'.$baris.':H'.$baris)->applyFromArray($styleTableH);
$baris++; $nomor = 1; $tot_dpp = 0; $tot_ppn = 0;
while ($db->Next()) {
$sheet->setCellValue("A".$baris, $nomor++);
$sheet->setCellValue("B".$baris, $db->Row("No_Pajak"));
$sheet->setCellValue("C".$baris, $db->Row("Tgl_Pajak"));
$sheet->setCellValue("D".$baris, $db->Row("No_Nota"));
$sheet->setCellValue("E".$baris, $db->Row("Nama_NPWP"));
$sheet->setCellValue("F".$baris, $db->Row("Email_Outlet"));
$sheet->setCellValue("G".$baris, $db->RowFloat("Jumlah_DPP"));
$sheet->setCellValue("H".$baris, $db->RowFloat("Jumlah_PPN"));
$sheet->getStyle('G'.$baris.':H'.$baris)->applyFromArray($styleNum);
$baris++;
$tot_dpp += $db->Row("Jumlah_DPP");
$tot_ppn += $db->Row("Jumlah_PPN");
}
$sheet->setCellValue("A".$baris, "Jumlah");
$sheet->mergeCells('A'.$baris.':F'.$baris);
$sheet->setCellValue("G".$baris, $tot_dpp);
$sheet->setCellValue("H".$baris, $tot_ppn);
$sheet->getStyle('A'.$baris.':F'.$baris)->applyFromArray(['alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER]]);
$sheet->getStyle('G'.$baris.':H'.$baris)->applyFromArray($styleNum);
$styleSub = [
'font' => ['bold' => true],
'fill' => ['fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID, 'startColor' => ['rgb'=>"D0D0D0"]]
];
$sheet->getStyle('A'.$baris.':H'.$baris)->applyFromArray($styleSub);
$sheet->getSheetView()->setZoomScale(75);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="Data Rekapitulasi Faktur Pajak.xlsx"');
header('Cache-Control: max-age=0');
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($ssheet, 'Xlsx');
$writer->save('php://output');
$ssheet->disconnectWorksheets();
unset($ssheet);
unset($writer);
} else if ( $data == "default") {
$form = new Form($db);
$form->datebox("Dari Tanggal", "Tgl_From", tgl_ymd(), true, false);
$form->datebox("Sampai Tanggal", "Tgl_To", tgl_ymd(), true, false);
$form->show(' _Tgl_From_ _Tgl_To_ ');
}
?>
+162
View File
@@ -0,0 +1,162 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/rekap_fp_biaya.php
Desc. : PHP - Rekap Faktur Pajak Biaya
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : December 31st, 2024.
(c) 2016 - 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Form;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " s/d ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
// query data laporan
$db->Query("SELECT P.* FROM (SELECT * FROM biaya_pajak WHERE Tgl_Pajak BETWEEN '".$tglfrom."' AND '".$tglto."') P ORDER BY P.No_Pajak");
}
if ( $data == "print" ) {
Report_Header("LAPORAN REKAPITULASI FP INVOICE BIAYA", $tglheader);
$header .= '<table class="garis"><thead><tr><th>No.</th><th>No. Faktur</th><th>Tgl. Faktur</th><th>NSFP</th><th>NPWP</th><th>Nama NPWP</th><th>DPP</th><th>PPN</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td class="c">%s</td><td>%s</td><td>%s</td><td>%s</td><td class="r">%s</td><td class="r">%s</td></tr>';
$_sline = '<tr><td class="c b" colspan="6">%s</td><td class="r b">%s</td><td class="r b">%s</td></tr>';
$body = ''; $nomor = 1; $tot_dpp = 0; $tot_ppn = 0;
while ($db->Next()) {
$tot_dpp += $db->Row("Jumlah_DPP");
$tot_ppn += $db->Row("Jumlah_PPN");
$body .= sprintf($_line, $nomor++, $db->Row("No_Biaya"), tgl_sql2str($db->Row("Tgl_Biaya")), $db->Row("No_Pajak"), $db->Row("No_NPWP"), $db->Row("Nama_NPWP"), rupiah2($db->Row("Jumlah_DPP")), rupiah2($db->Row("Jumlah_PPN")));
}
$body .= sprintf($_sline, "Jumlah", rupiah2($tot_dpp), rupiah2($tot_ppn));
echo $header . $body . "</tbody></table>" . Report_Stamp(1, true);
} else if ( $data == "export" ) {
\PhpOffice\PhpSpreadsheet\Cell\Cell::setValueBinder( new \PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder() );
$styleTxt = [
'numberFormat' => ['formatCode' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT]
];
$styleNum = [
'numberFormat' => ['formatCode' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2]
];
$ssheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$ssheet->getProperties()
->setCreator($_SESSION['__WEB_APP']['APP_NAME']." v".$_SESSION['__WEB_APP']['APP_VER'])
->setLastModifiedBy($_SESSION['__WEB_APP']['APP_NAME']." v".$_SESSION['__WEB_APP']['APP_VER'])
->setTitle("Data Rekapitulasi FP Invoice Biaya")
->setCompany($_SESSION['__WEB_APP']['REG_NAME']);
$sheet = $ssheet->getActiveSheet();
$sheet->setTitle("Data Rekapitulasi FP Invoice Biaya");
// header
$styleHeader = [
'font' => ['bold' => true],
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER]
];
$sheet->setCellValue("A1", strtoupper($_SESSION['__WEB_APP']['REG_NAME']));
$sheet->mergeCells('A1:H1');
$sheet->setCellValue("A2", "LAPORAN REKAPITULASI FP INVOICE BIAYA");
$sheet->mergeCells('A2:H2');
$sheet->setCellValue("A3", $tglheader);
$sheet->mergeCells('A3:H3');
$sheet->getStyle('A1:H3')->applyFromArray($styleHeader);
// table header
$sheet->getColumnDimension('A')->setWidth(8);
$sheet->getColumnDimension('B')->setWidth(18);
$sheet->getColumnDimension('C')->setWidth(12);
$sheet->getColumnDimension('D')->setWidth(25);
$sheet->getColumnDimension('E')->setWidth(25);
$sheet->getColumnDimension('F')->setWidth(20);
$sheet->getColumnDimension('G')->setWidth(18);
$sheet->getColumnDimension('H')->setWidth(18);
$styleTableH = [
'font' => ['bold' => true],
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER, 'wrapText' => true],
'fill' => ['fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID, 'startColor' => ['rgb'=>"D0D0D0"]],
'borders' => ['allBorders' => ['borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => ['rgb'=>"C0C0C0"]]]
];
$baris = 5;
$sheet->setCellValue("A".$baris, "No.");
$sheet->setCellValue("B".$baris, "No. Faktur");
$sheet->setCellValue("C".$baris, "Tgl. Faktur");
$sheet->setCellValue("D".$baris, "NSFP");
$sheet->setCellValue("E".$baris, "NPWP");
$sheet->setCellValue("F".$baris, "Nama NPWP");
$sheet->setCellValue("G".$baris, "DPP");
$sheet->setCellValue("H".$baris, "PPN");
$sheet->getStyle('A'.$baris.':H'.$baris)->applyFromArray($styleTableH);
$baris++; $nomor = 1; $tot_dpp = 0; $tot_ppn = 0;
while ($db->Next()) {
$sheet->setCellValue("A".$baris, $nomor++);
$sheet->setCellValue("B".$baris, $db->Row("No_Biaya"));
$sheet->setCellValue("C".$baris, $db->Row("Tgl_Biaya"));
$sheet->setCellValue("D".$baris, $db->Row("No_Pajak"));
$sheet->setCellValue("E".$baris, $db->Row("No_NPWP"));
$sheet->setCellValue("F".$baris, $db->Row("Nama_NPWP"));
$sheet->setCellValue("G".$baris, $db->RowFloat("Jumlah_DPP"));
$sheet->setCellValue("H".$baris, $db->RowFloat("Jumlah_PPN"));
$sheet->getStyle('G'.$baris.':H'.$baris)->applyFromArray($styleNum);
$baris++;
$tot_dpp += $db->Row("Jumlah_DPP");
$tot_ppn += $db->Row("Jumlah_PPN");
}
$sheet->setCellValue("A".$baris, "Jumlah");
$sheet->mergeCells('A'.$baris.':F'.$baris);
$sheet->setCellValue("G".$baris, $tot_dpp);
$sheet->setCellValue("H".$baris, $tot_ppn);
$sheet->getStyle('A'.$baris.':F'.$baris)->applyFromArray(['alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER]]);
$sheet->getStyle('G'.$baris.':H'.$baris)->applyFromArray($styleNum);
$styleSub = [
'font' => ['bold' => true],
'fill' => ['fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID, 'startColor' => ['rgb'=>"D0D0D0"]]
];
$sheet->getStyle('A'.$baris.':H'.$baris)->applyFromArray($styleSub);
$sheet->getSheetView()->setZoomScale(75);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="Data Rekapitulasi FP Invoice Biaya.xlsx"');
header('Cache-Control: max-age=0');
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($ssheet, 'Xlsx');
$writer->save('php://output');
$ssheet->disconnectWorksheets();
unset($ssheet);
unset($writer);
} else if ( $data == "default") {
$form = new Form($db);
$form->datebox("Dari Tanggal", "Tgl_From", tgl_ymd(), true, false);
$form->datebox("Sampai Tanggal", "Tgl_To", tgl_ymd(), true, false);
$form->show(' _Tgl_From_ _Tgl_To_ ');
}
?>
+178
View File
@@ -0,0 +1,178 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/rekap_outlet.php
Desc. : PHP - Laporan R. Penjualan Produk/Outlet
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : April 16th, 2011.
Last Modified : November 18th, 2023.
(c) 2011 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.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;
use siaupheng\fonia3\Printer\PrintHTML;
use siaupheng\fonia3\Data\SimpleXLS;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$id_outlet = Param::Get("OutletID", 0);
$id_grup = Param::Get("Grup_InvID");
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$aoutlet = []; $agrup = [];
if ($id_outlet > 0) {
$db->Query("SELECT * FROM para_outlet WHERE OutletID='".$id_outlet."' LIMIT 1");
if ($db->Next()) $aoutlet = $db->AllRow();
}
if ($id_grup > 0) {
$db->Query("SELECT * FROM inv_produk_grup WHERE Grup_InvID='".$id_grup."' LIMIT 1");
if ($db->Next()) $agrup = $db->AllRow();
}
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_outlet>0) ? " AND J.OutletID='".$id_outlet."'" : "";
$tsql .= ($id_grup>0) ? " AND P.Grup_InvID='".$id_grup."'" : "";
$db->Query("SELECT D.Promo,P.Kode_Produk,P.Nama_Produk,SUM(-D.Qty) Qty,S.Nama_Satuan FROM inv_detail D LEFT JOIN inv_jual J ON (D.No_Ref=J.No_Jual) LEFT JOIN inv_produk P ON (D.InvID=P.InvID) LEFT JOIN para_satuan S ON (D.SatuanID=S.SatuanID) WHERE J.Data_Jual=1 AND (J.Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."') AND J.Rekap=1".$tsql." GROUP BY D.Promo,D.InvID,D.SatuanID ORDER BY D.Promo,P.Nama_Produk");
}
if ( $data == "print" ) {
Report_Header("LAPORAN REKAP PENJUALAN PRODUK PER-OUTLET", $tglheader);
$pre = new PrintHTML();
$pre->set_css("garis");
if ($id_outlet>0) echo "Nama Outlet : ".$aoutlet['Nama_Outlet']."<br>";
if ($id_grup>0) echo "Nama Grup Produk : ".$agrup['Nama_Grup']."<br>";
$pre->add_field("No.",10,"C");
$pre->add_field("Kode",10);
$pre->add_field("Nama Produk",90);
$pre->add_field("Jumlah",20,"R");
$pre->add_field("Satuan",10);
$pre->show_fields();
$nomor = 0; $atot = [];
while ($db->Next()) {
$pre->add_value(++$nomor, $db->Row("Kode_Produk"), $db->Row("Nama_Produk").(($db->Row("Promo")>0)?" ***":""), uang($db->Row("Qty"),2), $db->Row("Nama_Satuan"));
$atot[$db->Row("Nama_Satuan")] += $db->Row("Qty");
}
$ket_tot = "";
foreach ($atot as $key => $val) {
if ($val > 0) $ket_tot .= " / ".uang($val,2)." ".strtoupper($key);
}
$ket_tot = substr($ket_tot, 3);
$pre->add_span(array("GRAND TOTAL",2,"L,B"),array($ket_tot,3,"C,B"));
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Laporan Rekap Penjualan Produk Per Outlet",
'subject'=>"PT.PMS",
'desc'=>"Export Data dari IAS"
]);
$xls->add_header("<b>".strtoupper($_SESSION['__WEB_APP']['REG_NAME'])."</b>");
$xls->add_header("<b>LAPORAN REKAP PENJUALAN PRODUK PER-OUTLET</b>");
$xls->add_header($tglheader);
$xls->add_field("NO.", 5, "C");
$xls->add_field("KODE", 12, "L");
$xls->add_field("NAMA PRODUK", 60, "L");
$xls->add_field("JUMLAH", 22, "R,N");
$xls->add_field("SATUAN", 8, "L");
$xls->add_sheet("REKAP OUTLET", false);
if ($id_outlet>0) $xls->add_span(["Nama Outlet : ".$aoutlet['Nama_Outlet'],5,"L"]);
if ($id_grup>0) $xls->add_span(["Nama Grup Produk : ".$agrup['Nama_Grup'],5,"L"]);
$xls->show_headers();
$nomor = 0; $atot = [];
while ($db->Next()) {
$xls->add_value(++$nomor, $db->Row("Kode_Produk"), $db->Row("Nama_Produk").(($db->Row("Promo")>0)?" ***":""), uang($db->Row("Qty"),2), $db->Row("Nama_Satuan"));
$atot[$db->Row("Nama_Satuan")] += $db->Row("Qty");
}
$ket_tot = "";
foreach ($atot as $key => $val) {
if ($val > 0) $ket_tot .= " / ".uang($val,2)." ".strtoupper($key);
}
$ket_tot = substr($ket_tot, 3);
$xls->add_span(array("GRAND TOTAL",2,"L,B"),array($ket_tot,3,"C,B"));
$xls->add_stamp(1, true);
$xls->send("Laporan Rekap Penjualan Produk Per Outlet.xlsx");
unset($xls);
} else if ( $data == "brow-outlet" ) {
$tcari = trim(Param::Get("Cari_Outlet"));
$tsql = ($tcari=="") ? " LIMIT 100" : " AND CONCAT(Nama_Outlet,Telp_Outlet,Nama_Outlet) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM vi_para_outlet WHERE Aktif=1".$tsql);
$obj->add_field("OutletID", "ID", "hid");
$obj->add_field("Kode_Outlet", "Kode", "c");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Alamat_Kota", "Alamat & Kota", "awr");
$obj->set_field_order("Nama_Outlet", "A");
$obj->add_row_btn("save", "Pilih", "RepoRekapOutletJS.outlet_select");
$obj->set_func_navi("RepoRekapOutletJS.data_query('brow-outlet')");
$ajson[] = $obj->json_table("divBrowOutlet");
} else if ( $data == "auto-outlet" ) {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [['value' => 0, 'text' => "SEMUA OUTLET", 'data' => ""]];
if (is_string($tcari) && strlen($tcari) < 64) {
$db->Query("SELECT * FROM vi_para_outlet WHERE Aktif=1 AND CONCAT(Nama_Outlet,Alamat_Outlet) LIKE '%".$tcari."%' ORDER BY Nama_Outlet LIMIT 50");
while ($db->Next()) {
$ajson['autodata'][] = ['value'=>$db->Row("OutletID"), 'text'=>$db->Row("Nama_Alamat"), 'data'=>$db->Row("Alamat_Kota")];
}
}
} else if ( $data == "default") {
$form = new Form($db);
$toutlet = $form->textauto("_", "Nama_Outlet", ['value'=>0,'text'=>"SEMUA OUTLET"], true, false);
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "TRUE ORDER BY Nama_Grup", [0,"SEMUA GRUP"]);
$ttglfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$ttglto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Nama_Outlet">Nama Outlet</label>
<div class="col"><div class="input-group">'.$toutlet.'<button class="btn btn-info" type="button" onclick="RepoRekapOutletJS.outlet_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Grup_InvID">Grup Produk</label>
<div class="col">'.$tgrup.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col">'.$ttglfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col">'.$ttglto.'</div>
</div>
<input type="hidden" id="OutletID" value="0">';
}
send_json($ajson);
?>
+182
View File
@@ -0,0 +1,182 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/rekap_outlet_oli.php
Desc. : PHP - Rekap Penj. Outlet Produk Sosro & Oli
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : November 20th, 2014.
Last Modified : January 20th, 2024.
(c) 2014 - 2024, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Form;
use siaupheng\fonia3\Printer\PrintHTML;
use siaupheng\fonia3\Data\SimpleXLS;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$tipe = Param::Get("Tipe", 1); // 1, 2
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$sjudul = "OLI"; $tsql1 = ""; $tsql2 = "/B.Qty"; $tsql3 = "5";
if ($tipe==1) {
$sjudul = "SOSRO"; $tsql1 = " NOT"; $tsql2 = ""; $tsql3 = "3";
}
$tsql = (Param::Get("Semua",2)==1) ? " WHERE D.OutletID2 IS NOT NULL" : "";
$ahasil = []; $aprod = [];
$db->Query("SELECT O.OutletID,O.Nama_Outlet,O.Alamat_Outlet,D.* FROM (SELECT * FROM para_outlet WHERE Grup_OutletID".$tsql1." IN (14,18,19,20,21,22,23,25,26,27,28,29,30,31,32,33,34,35,36)) O LEFT JOIN (SELECT A.No_Ref,A.InvID,SUM(-A.Stok)".$tsql2." Qty,J.OutletID OutletID2,S.Nama_Pegawai Nama_Sales FROM inv_detail A LEFT JOIN inv_jual J ON (A.No_Ref=J.No_Jual) LEFT JOIN para_pegawai S ON (J.SalesID=S.PegID) LEFT JOIN inv_produk_kemasan B ON (A.InvID=B.InvID AND B.SatuanID=2) WHERE (A.Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND A.InvID IN (SELECT InvID FROM inv_produk WHERE Grup_InvID=".$tsql3." ORDER BY Kode_Produk) AND A.NotaID=5 AND J.Rekap=1 GROUP BY A.No_Ref,A.InvID) D ON (O.OutletID=D.OutletID2)".$tsql." ORDER BY O.Nama_Outlet");
while ($db->Next()) {
if (!$ahasil[$db->Row("OutletID")]) {
$ahasil[$db->Row("OutletID")]['Nama'] = $db->Row("Nama_Outlet");
$ahasil[$db->Row("OutletID")]['Alamat'] = $db->Row("Alamat_Outlet");
$ahasil[$db->Row("OutletID")]['Sales'] = $db->Row("Nama_Sales");
}
$ahasil[$db->Row("OutletID")][$db->Row("InvID")] += $db->RowFloat("Qty", 0);
$aprod[$db->Row("InvID")] += $db->RowFloat("Qty", 0);
}
$aproduk = array();
$db->Query("SELECT InvID,Kode_Produk FROM inv_produk WHERE Grup_InvID='".$tsql3."'");
while ($db->Next()) {
$aproduk[$db->Row("InvID")] = $db->Row("Kode_Produk");
}
}
if ( $data == "print" ) {
Report_Header("LAPORAN PENJUALAN ".$sjudul, $tglheader);
$pre = new PrintHTML();
$pre->set_css("garis");
$pre->add_field("NO.",5,"C");
$pre->add_field("NAMA OUTLET",80);
$pre->add_field("ALAMAT OUTLET",100);
$pre->add_field("SALES",20);
foreach ($aprod as $_key => $_val) {
if ($_key == "") continue;
$pre->add_field($aproduk[$_key],50,"R","rupiah2");
}
$pre->add_field("TOTAL",50,"R","rupiah2");
$pre->show_fields();
$tot = 0; $no = 1;
foreach ($ahasil as $_key => $_val) {
$_tot = 0;
$_atmp = array($no, $_val['Nama'], $_val['Alamat'], $_val['Sales']);
foreach ($aprod as $_key2 => $_val2) {
if ($_key2 == "") continue;
$_atmp[] = $_val[$_key2];
$_tot += $_val[$_key2];
}
$_atmp[] = $_tot;
$pre->add_value($_atmp);
$no++;
}
$_tot = 0;
$_atmp = array("", "TOTAL", "", "");
foreach ($aprod as $_key2 => $_val2) {
if ($_key2 == "") continue;
$_atmp[] = $_val2;
$_tot += $_val2;
}
$_atmp[] = $_tot;
$pre->add_value($_atmp);
$pre->add_stamp(0, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Laporan Penjualan ".ucfirst($sjudul)."",
'subject'=>"PT.PMS",
'desc'=>"Export Data dari IAS"
]);
$xls->add_header("<b>".strtoupper($_SESSION['__WEB_APP']['REG_NAME'])."</b>");
$xls->add_header("<b>LAPORAN PENJUALAN ".$sjudul."</b>");
$xls->add_header($tglheader);
$xls->add_field("NO.", 6, "C");
$xls->add_field("NAMA OUTLET", 30, "L");
$xls->add_field("ALAMAT OUTLET", 80, "L");
$xls->add_field("SALES", 20, "L");
foreach ($aprod as $_key => $_val) {
if ($_key == "") continue;
$xls->add_field($aproduk[$_key],12,"R,N");
}
$xls->add_field("TOTAL",12,"R,N");
$xls->add_sheet("REKAP PENJUALAN ".$sjudul, false);
$xls->show_headers();
$tot = 0; $no = 1;
foreach ($ahasil as $_key => $_val) {
$_tot = 0;
$_atmp = array($no, $_val['Nama'], $_val['Alamat'], $_val['Sales']);
foreach ($aprod as $_key2 => $_val2) {
if ($_key2 == "") continue;
$_atmp[] = $_val[$_key2];
$_tot += $_val[$_key2];
}
$_atmp[] = $_tot;
$xls->add_value($_atmp);
$no++;
}
$_tot = 0;
$_atmp = array("", "TOTAL", "", "");
foreach ($aprod as $_key2 => $_val2) {
if ($_key2 == "") continue;
$_atmp[] = $_val2;
$_tot += $_val2;
}
$_atmp[] = $_tot;
$xls->add_value($_atmp);
$xls->add_stamp(1, true);
$xls->send("Laporan Penjualan ".ucfirst($sjudul).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", 1, true, false, [1=>"Sosro",2=>"Oli"], null);
$tsemua = $form->radio("_", "Semua", 2, true, false, [1=>"Ya",2=>"Tidak"]);
$ttglfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$ttglto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Semua">Semua Outlet</label>
<div class="col">'.$tsemua.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col">'.$ttglfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col">'.$ttglto.'</div>
</div>';
}
?>
+163
View File
@@ -0,0 +1,163 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/rekap_outlet_produk.php
Desc. : PHP - Laporan Rekap Penj. Outlet/Produk
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : November 4th, 2011.
Last Modified : November 18th, 2023.
(c) 2011 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.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;
use siaupheng\fonia3\Printer\PrintHTML;
use siaupheng\fonia3\Data\SimpleXLS;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$rekap = Param::Get("Rekap"); // X, 1, 0
$id_inv = Param::Get("InvID", 0);
$id_sales = Param::Get("SalesID", 0);
$id_grup = Param::Get("Grup_OutletID");
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
if ($id_inv>0) {
$nama_produk = ""; $ainfo = array();
$db->Query("SELECT CONCAT('[',P.Kode_Produk,'] ',P.Nama_Produk,' (',P.Satuan_Normal,')') Nama,K.Qty Kali,P.Satuan_Stok,P.Satuan_Normal FROM vi_inv_produk P LEFT JOIN inv_produk_kemasan K ON (K.InvID=P.InvID AND K.SatuanID=P.NormalID) WHERE P.InvID='".$id_inv."'");
if ($db->Next()) {
$nama_produk = $db->Row("Nama");
$ainfo = $db->AllRow();
}
}
if ($id_grup>0) {
$db->Query("SELECT Nama_Grup FROM para_outlet_grup WHERE Grup_OutletID='".$id_grup."'");
if ($db->Next()) $nama_goutlet = $db->Row("Nama_Grup");
}
if ($id_sales>0) {
$db->Query("SELECT Nama_Pegawai FROM para_pegawai WHERE PegID='".$id_sales."'");
if ($db->Next()) $nama_sales = $db->Row("Nama_Pegawai");
}
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_grup==0) ? "" : " AND O.Grup_OutletID='".$id_grup."'";
$tsql .= ($id_sales==0) ? "" : " AND J.SalesID='".$id_sales."'";
$tsql .= ($rekap=="X") ? "" : " AND J.Rekap='".intval($rekap)."'";
$db->Query("SELECT O.Nama_Outlet,O.Alamat_Outlet,SUM(D.Qty) Qty,SUM(D.Stok) Stok,D.Promo,S.Nama_Satuan FROM (SELECT No_Ref,Promo,SatuanID,SUM(-Qty) Qty,SUM(-Stok) Stok FROM inv_detail WHERE NotaID=5 AND InvID=".$id_inv." AND (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') GROUP BY No_Ref) D LEFT JOIN inv_jual J ON (D.No_Ref=J.No_Jual) LEFT JOIN para_outlet O ON (J.OutletID=O.OutletID) LEFT JOIN para_satuan S ON (D.SatuanID=S.SatuanID) WHERE J.Data_Jual=1".$tsql." GROUP BY J.OutletID,D.Promo,D.SatuanID ORDER BY O.Nama_Outlet,D.Promo,D.SatuanID");
}
if ( $data == "print" ) {
Report_Header("LAPORAN REKAP PENJUALAN OUTLET / PRODUK", $tglheader);
$pre = new PrintHTML();
$pre->set_css("garis");
echo "Nama Produk : ".$nama_produk."<br>";
if ($id_grup>0) echo "Nama Grup Outlet : ".$nama_goutlet."<br>";
if ($id_sales>0) echo "Nama Sales : ".$nama_sales."<br>";
$pre->add_field("NO.",5,"R");
$pre->add_field("NAMA OUTLET",80);
$pre->add_field("ALAMAT OUTLET",100);
$pre->add_field("QTY",10,"R");
$pre->add_field("SATUAN",15);
$pre->show_fields();
$tot = 0; $no = 1;
while ($db->Next()) {
$pre->add_value($no++, $db->Row("Nama_Outlet"), $db->Row("Alamat_Outlet"), uang($db->Row("Qty"),2), $db->Row("Nama_Satuan").(($db->Row("Promo",0)==0)?"":" ***"));
$tot += $db->Row("Stok");
}
$pre->add_span(array("JUMLAH PENJUALAN",3,"R,B"),array(Format_Stok($tot,$ainfo['Kali'],$ainfo['Satuan_Normal'],$ainfo['Satuan_Stok']),2,"C,B"));
$pre->add_stamp(0, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Laporan Rekap Penjualan Outlet / Produk",
'subject'=>"PT.PMS",
'desc'=>"Export Data dari IAS"
]);
$xls->add_header("<b>".strtoupper($_SESSION['__WEB_APP']['REG_NAME'])."</b>");
$xls->add_header("<b>LAPORAN REKAP PENJUALAN OUTLET / PRODUK</b>");
$xls->add_header($nama_produk);
$xls->add_header($tglheader);
$xls->add_field("NO.", 10, "C");
$xls->add_field("NAMA OUTLET", 50, "L");
$xls->add_field("ALAMAT OUTLET", 80, "L");
$xls->add_field("QTY", 20, "R,N");
$xls->add_field("SATUAN", 15, "L");
$xls->add_sheet("REKAP OUTLET PRODUK", false);
if ($id_grup>0) $xls->add_span(["Nama Grup Outlet : ".$nama_goutlet,5,"L"]);
if ($id_sales>0) $xls->add_span(["Nama Sales : ".$nama_sales,5,"L"]);
$xls->show_headers();
$tot = 0; $no = 1;
while ($db->Next()) {
$xls->add_value($no++, $db->Row("Nama_Outlet"), $db->Row("Alamat_Outlet"), $db->RowFloat("Qty"), $db->Row("Nama_Satuan").(($db->Row("Promo",0)==0)?"":" ***"));
$tot += $db->Row("Stok");
}
$xls->add_span(array("JUMLAH PENJUALAN",3,"R,B"),array(Format_Stok($tot,$ainfo['Kali'],$ainfo['Satuan_Normal'],$ainfo['Satuan_Stok']),2,"C,B"));
$xls->add_stamp(1, true);
$xls->send("Laporan Rekap Penjualan Outlet Per Produk.xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$trekap = $form->radio("_", "Rekap", "1", true, false, ["1"=>"Antar","0"=>"Belum Antar","X"=>"Semua"]);
$tproduk = $form->option_db("_", "InvID", 0, true, false, "inv_produk", ["InvID","Nama_Produk"], "TRUE ORDER BY Nama_Produk");
$tgrup = $form->option_db("_", "Grup_OutletID", 0, true, false, "para_outlet_grup", ["Grup_OutletID","Nama_Grup"], "TRUE ORDER BY Nama_Grup", [0,"SEMUA GRUP"]);
$tsales = $form->option_db("_", "SalesID", 0, true, false, "para_pegawai", ["PegID","Nama_Pegawai"], "Jenis_PegID='".$_SESSION['__APP_IAS']['GRUP_PEG_SALES']."' ORDER BY Nama_Pegawai", [0,"SEMUA SALES"]);
$ttglfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$ttglto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Rekap">Status Order</label>
<div class="col">'.$trekap.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="InvID">Nama Produk</label>
<div class="col">'.$tproduk.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Grup_OutletID">Grup Outlet</label>
<div class="col">'.$tgrup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="SalesID">Nama Sales</label>
<div class="col">'.$tsales.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col">'.$ttglfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col">'.$ttglto.'</div>
</div>';
}
?>
+377
View File
@@ -0,0 +1,377 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/rekap_promo.php
Desc. : PHP - Laporan Penjualan Produk Promo
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : July 22th, 2011.
Last Modified : March 28th, 2025.
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.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;
use siaupheng\fonia3\Printer\PrintHTML;
use siaupheng\fonia3\Data\SimpleXLS;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_grup = Param::Get("Grup_InvID", 0);
$id_inv = Param::Get("InvID", 0);
if ( $data == "print" || $data == "export" ) {
$tipe = Param::Get("Tipe"); // R or D
$rekap = Param::Get("Rekap"); // X, 1, 0
$id_sales = Param::Get("SalesID", "SEMUA");
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$asales = []; $aproduk = [];
if (!in_array($id_sales, [0,"NON","SEMUA"])) {
$db->Query("SELECT Nama_Pegawai Nama_Sales FROM para_pegawai WHERE PegID='".$id_sales."' LIMIT 1");
if ($db->Next()) $asales = $db->AllRow();
}
if ($id_sales=="NON") $asales['Nama_Sales'] = "TANPA SALES";
if ($id_inv > 0) {
$db->Query("SELECT UPPER(CONCAT('[',Kode_Produk,'] ',Nama_Produk,' (',Satuan_Normal,')')) Nama_Produk FROM vi_inv_produk WHERE InvID='".$id_inv."' LIMIT 1");
if ($db->Next()) $aproduk = $db->AllRow();
}
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$qdetail = ""; $qsql = "";
if ($id_inv > 0) {
$qdetail = " AND InvID='".$id_inv."'";
} else if ($id_grup > 0) {
$qsql .= " AND P.Grup_InvID='".$id_grup."'";
} else {
$qsql .= " AND P.Grup_InvID NOT IN ('".$_SESSION['__APP_IAS']['GRUP_PRODUK_KEMASAN']."','".$_SESSION['__APP_IAS']['GRUP_PRODUK_HADIAH']."')";
}
$qsql .= ($rekap<>"X") ? " AND J.Rekap='".intval($rekap)."'" : "";
$qsql .= ($id_sales>0 && $id_sales<>"NON") ? " AND J.SalesID='".$id_sales."'" : "";
$qsql .= ($id_sales=="NON") ? " AND J.SalesID=0" : "";
if ($tipe=="R") {
$db->Query("SELECT SUM(-D.Qty) Qty,S.Nama_Satuan,CONCAT(P.Nama_Produk,IF(D.RasaID=0,'',CONCAT(' (',R.Nama_Rasa,')'))) Nama_Produk FROM (SELECT * FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND Pro_SQ=1".$qdetail.") D LEFT JOIN inv_jual J ON (J.No_Jual=D.No_Ref) LEFT JOIN para_outlet O ON (O.OutletID=J.OutletID) LEFT JOIN inv_produk P ON (P.InvID=D.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=D.SatuanID) LEFT JOIN para_rasa R ON (R.RasaID=D.RasaID) WHERE J.Data_Jual=1".$qsql." GROUP BY D.InvID,D.RasaID,D.SatuanID ORDER BY P.Nama_Produk,D.RasaID,D.SatuanID");
} else if ($tipe=="B") {
if (trim($qsql)<>"") $qsql = " WHERE".substr($qsql,4);
$db->Query("SELECT D.*,J.Tgl_Jual,O.Nama_Outlet,O.Alamat_Outlet FROM (SELECT B.No_Ref,B.InvID,B.SatuanID,J.SatuanID SatuanID2,B.Bonus,J.Qty FROM (SELECT No_Ref,InvID,SatuanID,-Qty Bonus FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND Pro_SQ=1 AND NotaID=5 AND Qty<>0".$qdetail.") B LEFT JOIN (SELECT No_Ref,InvID,SatuanID,SUM(-Qty) Qty FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND Pro_SQ=0 AND NotaID=5".$qdetail." GROUP BY No_Ref,InvID,SatuanID) J ON (B.No_Ref=J.No_Ref AND B.InvID=J.InvID)) D LEFT JOIN inv_jual J ON (D.No_Ref=J.No_Jual) LEFT JOIN para_outlet O ON (J.OutletID=O.OutletID) LEFT JOIN inv_produk P ON (P.InvID=D.InvID)".$qsql." ORDER BY J.Tgl_Jual");
$aheader = []; $adata = [];
while ($db->Next()) {
$aheader[$db->Row("InvID")] = "";
$adata[$db->Row("No_Ref")]['Kode'] = ($db->Row("SatuanID",0)==$db->Row("SatuanID2",0)?$adata[$db->Row("No_Ref")]['Kode']:" ***");
$adata[$db->Row("No_Ref")]['No_Jual'] = $db->Row("No_Ref");
$adata[$db->Row("No_Ref")]['Tgl_Jual'] = tgl_sql2str($db->Row("Tgl_Jual"));
$adata[$db->Row("No_Ref")]['N_Outlet'] = $db->Row("Nama_Outlet");
$adata[$db->Row("No_Ref")]['A_Outlet'] = $db->Row("Alamat_Outlet");
$adata[$db->Row("No_Ref")][$db->Row("InvID")]['Qty'] = $db->RowFloat("Qty",0);
$adata[$db->Row("No_Ref")][$db->Row("InvID")]['Bonus'] += $db->RowFloat("Bonus",0);
}
// Header Caption
$t_judul = "";
foreach ($aheader as $_key => $_val) {
$t_judul .= "," . $_key;
}
$db->Query("SELECT InvID,Kode_Produk FROM inv_produk WHERE InvID IN (".substr($t_judul,1).")");
while ($db->Next()) {
$aheader[$db->Row("InvID")] = $db->Row("Kode_Produk");
}
} else {
$db->Query("SELECT D.No_Ref,DATE_FORMAT(D.Tgl_Ref,'%d-%m-%Y') Tgl_Ref2,J.No_Faktur,O.Nama_Outlet,LEFT(O.Alamat_Outlet,100) Alamat_Outlet,-D.Qty Qty,S.Nama_Satuan,CONCAT(P.Nama_Produk,IF(D.RasaID=0,'',CONCAT(' (',R.Nama_Rasa,')'))) Nama_Produk FROM (SELECT * FROM inv_detail WHERE (Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."') AND Pro_SQ=1".$qdetail.") D LEFT JOIN inv_jual J ON (J.No_Jual=D.No_Ref) LEFT JOIN para_outlet O ON (O.OutletID=J.OutletID) LEFT JOIN inv_produk P ON (P.InvID=D.InvID) LEFT JOIN para_satuan S ON (S.SatuanID=D.SatuanID) LEFT JOIN para_rasa R ON (R.RasaID=D.RasaID) WHERE J.Data_Jual=1".$qsql." ORDER BY D.Tgl_Ref,O.Nama_Outlet,P.Nama_Produk,D.RasaID,D.SatuanID");
}
}
if ( $data == "print" ) {
Report_Header("LAPORAN ".($tipe=="R"?"REKAP":($tipe=="B"?"DETAIL & BONUS":"DETAIL"))." PENJUALAN PRODUK PROMO", $tglheader);
$pre = new PrintHTML();
$pre->set_css("garis");
if ($tipe=="R") {
if ($id_inv>0) echo "Nama Produk : ".$aproduk['Nama_Produk']."<br>";
$pre->add_field("NO.",10,"C");
$pre->add_field("NAMA PRODUK",120);
$pre->add_field("JUMLAH",20,"R","rupiah2");
$pre->add_field("SATUAN",20);
$pre->show_fields();
$no = 1;
while ($db->Next()) {
$pre->add_value($no++, $db->Row("Nama_Produk"), $db->Row("Qty"), $db->Row("Nama_Satuan"));
}
} else if ($tipe=="B") {
$t_head = '<table class="garis"><tbody>';
if ($id_sales>0 && $id_sales=="NON") $t_head .= '<tr><td class="l nb b" colspan="'.((count($aheader)*2)+5).'">NAMA SALES : '.$asales['Nama_Sales'].'</td></tr>';
$t_head .= '<tr><th class="c" rowspan="2" width="10">NO.</th><th class="c" rowspan="2" width="20">TANGGAL</th><th class="c" rowspan="2" width="20">NO. NOTA</th><th class="c" rowspan="2" width="120">NAMA OUTLET</th><th class="c" rowspan="2" width="120">ALAMAT OUTLET</th>';
$t_shead = '<tr>';
foreach ($aheader as $_key => $_val) {
$t_head .= '<th class="c" colspan="2" width="60">'.$_val.'</th>';
$t_shead .= '<th class="c" width="20">Qty</th><th class="c" width="20">Bonus</th>';
}
$t_head .= '</tr>' . $t_shead . '</tr>';
$t_cont = ""; $i_no = 1;
foreach ($adata as $_key => $_val) {
$t_cont .= '<tr><td class="c">'.$i_no.'</td><td class="c">'.$_val['Tgl_Jual'].'</td><td class="l">'.$_val['No_Jual'].$_val['Kode'].'</td><td class="l">'.$_val['N_Outlet'].'</td><td class="l">'.$_val['A_Outlet'].'</td>';
foreach ($aheader as $_skey => $_sval) {
$t_cont .= (isset($_val[$_skey])) ? '<td class="r">'.rupiah2($_val[$_skey]['Qty']).'</td><td class="r">'.rupiah2($_val[$_skey]['Bonus']).'</td>' : '<td class="r">&nbsp;</td><td class="r">&nbsp;</td>';
}
$t_cont .= '</tr>';
$i_no++;
}
$t_foot = '<tr><td colspan="'.((count($aheader)*2)+5).'" class="nb">'.$pre->get_stamp(1,true).'</td></tr></tbody></table>';
echo $t_head . $t_cont . $t_foot;
} else {
if ($id_inv>0) echo "Nama Produk : ".$aproduk['Nama_Produk']."<br>";
$pre->add_field("NO.",10,"C");
$pre->add_field("NAMA PRODUK",120);
$pre->add_field("JUMLAH",20,"R","rupiah2");
$pre->add_field("SATUAN",20);
$pre->show_fields();
$no = 1; $no_ref = "";
while ($db->Next()) {
if ($no_ref <> $db->Row("No_Ref")) {
$pre->add_span(array("&nbsp;",4,"L,NB"));
$pre->add_span(array('<table width="100%"><tr><td width="100" class="nb">NO. NOTA</td><td class="nb">: '.$db->Row("No_Ref")." / TANGGAL : ".$db->Row("Tgl_Ref2")." / NO. FAKTUR : ".$db->Row("No_Faktur").'</td></tr><tr><td class="nb">NAMA OUTLET</td><td class="nb">: '.$db->Row("Nama_Outlet").'</td></tr><tr><td class="nb">ALAMAT OUTLET</td><td class="nb">: '.$db->Row("Alamat_Outlet").'</td></tr></table>',4));
$no = 1;
}
$pre->add_value($no++, $db->Row("Nama_Produk"), $db->Row("Qty"), $db->Row("Nama_Satuan"));
$no_ref = $db->Row("No_Ref");
}
}
if ($tipe <> "B") {
$pre->add_stamp(1, true);
$pre->show();
}
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Laporan Penjualan ".($tipe=="R"?"Rekap":"Detail")." Penjualan",
'subject'=>"PT.PMS",
'desc'=>"Export Data dari IAS"
]);
$xls->add_header("<b>".strtoupper($_SESSION['__WEB_APP']['REG_NAME'])."</b>");
if ($tipe=="R") {
$xls->add_header("<b>LAPORAN REKAP PENJUALAN PRODUK PROMO</b>");
$xls->add_header($tglheader);
$xls->add_field("NO.", 5, "C");
$xls->add_field("NAMA PRODUK", 80, "L");
$xls->add_field("JUMLAH", 15, "R,N");
$xls->add_field("SATUAN", 15, "L");
$xls->add_sheet("REKAP PENJUALAN PROMO", false);
if ($id_inv>0) $xls->add_span(["Nama Produk : ".$aproduk['Nama_Produk'],4,"L"]);
$xls->show_headers();
$no = 1;
while ($db->Next()) {
$xls->add_value($no++, $db->Row("Nama_Produk"), $db->Row("Qty"), $db->Row("Nama_Satuan"));
}
} else if ($tipe=="B") {
$wbook = new Spreadsheet_Excel_Writer();
$fjudul =& $wbook->addFormat();
$fjudul->setBold();
$fjudul->setAlign("center");
$fhead =& $wbook->addFormat();
$fhead->setBold();
$fhead->setAlign("center");
$fhead->setVAlign("vcenter");
$fhead->setBorder(1);
$fhead->setTextWrap();
$ftxt =& $wbook->addFormat();
$ftxt->setVAlign("top");
$ftxt->setTextWrap();
$ftxt->setNumFormat("@");
$fbtxt =& $wbook->addFormat();
$fbtxt->setVAlign("top");
$fbtxt->setItalic();
$fbtxt->setNumFormat("@");
$fnum =& $wbook->addFormat();
$fnum->setNumFormat(4);
$jum_col = (count($aheader)*2) + 5;
$baris = 4;
$wsheet =& $wbook->addWorksheet("DETAIL + BONUS");
$wsheet->setColumn(0,0,4);
$wsheet->setColumn(1,2,12);
$wsheet->setColumn(3,3,20);
$wsheet->setColumn(4,4,30);
$wsheet->write(0,0,strtoupper($_SESSION['__WEB_APP']['REG_NAME']),$fjudul);
$wsheet->setMerge(0,0,0,$jum_col-1);
$wsheet->write(1,0,"LAPORAN DETAIL & BONUS PENJUALAN PRODUK PROMO",$fjudul);
$wsheet->setMerge(1,0,1,$jum_col-1);
$wsheet->write(2,0,"PERIODE : ".$tglheader,$fjudul);
$wsheet->setMerge(2,0,2,$jum_col-1);
if ($id_sales>0 && $id_sales=="NON") {
$wsheet->write($baris,0,"NAMA SALES : ".$nama_sales,$ftxt);
$wsheet->setMerge($baris,0,$baris,$jum_col-1);
$baris++;
}
for ($_x=0;$_x<$jum_col;$_x++) {
$wsheet->write($baris,$_x,"",$fhead);
$wsheet->write($baris+1,$_x,"",$fhead);
}
$wsheet->write($baris,0,"No.",$fhead);
$wsheet->setMerge($baris,0,$baris+1,0);
$wsheet->write($baris,1,"Tanggal",$fhead);
$wsheet->setMerge($baris,1,$baris+1,1);
$wsheet->write($baris,2,"No. Nota",$fhead);
$wsheet->setMerge($baris,2,$baris+1,2);
$wsheet->write($baris,3,"Nama Outlet",$fhead);
$wsheet->setMerge($baris,3,$baris+1,3);
$wsheet->write($baris,4,"Alamat Outlet",$fhead);
$wsheet->setMerge($baris,4,$baris+1,4);
$h_kol = 5;
foreach ($aheader as $_key => $_val) {
$wsheet->setColumn($h_kol,$h_kol+1,6);
$wsheet->write($baris,$h_kol,$_val,$fhead);
$wsheet->setMerge($baris,$h_kol,$baris,$h_kol+1);
$wsheet->write($baris+1,$h_kol,"Qty",$fhead);
$wsheet->write($baris+1,$h_kol+1,"Bonus",$fhead);
$h_kol += 2;
}
$baris += 2;
$i_no = 1;
foreach ($adata as $_key => $_val) {
$wsheet->write($baris,0, $i_no, $ftxt);
$wsheet->write($baris,1, $_val['Tgl_Jual'], $ftxt);
$wsheet->write($baris,2, $_val['No_Jual'].$_val['Kode'], $ftxt);
$wsheet->write($baris,3, $_val['N_Outlet'], $ftxt);
$wsheet->write($baris,4, $_val['A_Outlet'], $ftxt);
$h_kol = 5;
foreach ($aheader as $_skey => $_sval) {
if (isset($_val[$_skey])) {
$wsheet->write($baris,$h_kol, $_val[$_skey]['Qty'], $fnum);
$wsheet->write($baris,$h_kol+1, $_val[$_skey]['Bonus'], $fnum);
} else {
$wsheet->write($baris,$h_kol, "", $fnum);
$wsheet->write($baris,$h_kol+1, "", $fnum);
}
$h_kol += 2;
}
$i_no++;
$baris++;
}
$wsheet->write($baris,0,$xls->get_stamp(1,true),$fbtxt);
$wbook->send("DATA DETAIL & BONUS PENJUALAN ".tgl_dmy(true).".xls");
$wbook->close();
} else {
$xls->add_header("<b>LAPORAN DETAIL PENJUALAN PRODUK PROMO</b>");
$xls->add_header($tglheader);
$xls->add_field("NO.", 5, "C");
$xls->add_field("NAMA PRODUK", 80, "L");
$xls->add_field("JUMLAH", 15, "R,N");
$xls->add_field("SATUAN", 15, "L");
$xls->add_sheet("DETAIL PENJUALAN PROMO", false);
if ($id_inv>0) $xls->add_span(["Nama Produk : ".$aproduk['Nama_Produk'],4,"L"]);
$xls->show_headers();
$no = 1; $no_ref = "";
while ($db->Next()) {
if ($no_ref <> $db->Row("No_Ref")) {
$xls->add_span(array("",4,"L,NL"));
$xls->add_span(array("NO. NOTA : ".$db->Row("No_Ref")." / TANGGAL : ".$db->Row("Tgl_Ref2")." / NO. FAKTUR : ".$db->Row("No_Faktur"),4,"L"));
$xls->add_span(array("NAMA OUTLET : ".$db->Row("Nama_Outlet"),4,"L"));
$xls->add_span(array("ALAMAT OUTLET : ".$db->Row("Alamat_Outlet"),4,"L"));
$no = 1;
}
$xls->add_value($no++, $db->Row("Nama_Produk"), $db->Row("Qty"), $db->Row("Nama_Satuan"));
$no_ref = $db->Row("No_Ref");
}
}
$xls->add_stamp(1, true);
$xls->send("Laporan Penjualan Produk Promo.xlsx");
unset($xls);
} else if ( $data == "option-produk" ) {
$tsql = ($id_grup == 0) ? " Grup_InvID NOT IN ('".$_SESSION['__APP_IAS']['GRUP_PRODUK_KEMASAN']."','".$_SESSION['__APP_IAS']['GRUP_PRODUK_HADIAH']."')" : " Grup_InvID='".$id_grup."'";
$aoption = ['type' => "option", 'id' => "InvID", 'value' => 0, 'avalue' => [['value'=>0,'html'=>"SEMUA PRODUK"]]];
$db->Query("SELECT * FROM inv_produk WHERE".$tsql." ORDER BY Nama_Produk");
while ($db->Next()) {
$aoption['avalue'][] = ['value'=>$db->Row("InvID"), 'html'=>$db->Row("Nama_Produk")];
}
$ajson[] = $aoption;
} else if ( $data == "default") {
$asales = ['SEMUA' => "SEMUA SALES", 'NON' => "TANPA-SALES"];
$db->Query("SELECT PegID,Nama_Pegawai FROM para_pegawai WHERE Jenis_PegID='".$_SESSION['__APP_IAS']['GRUP_PEG_SALES']."' ORDER BY Nama_Pegawai");
while ($db->Next()){
$asales[$db->Row("PegID")] = $db->Row("Nama_Pegawai");
}
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail","B"=>"Detail + Bonus"]);
$trekap = $form->radio("_", "Rekap", "X", true, false, ["1"=>"Antar","0"=>"Belum Antar","X"=>"Semua"]);
$tsales = $form->option("_", "SalesID", "SEMUA", true, false, $asales);
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Grup_InvID NOT IN ('".$_SESSION['__APP_IAS']['GRUP_PRODUK_KEMASAN']."','".$_SESSION['__APP_IAS']['GRUP_PRODUK_HADIAH']."') ORDER BY Nama_Grup", [0,"SEMUA GRUP PRODUK"], null, "RepoRekapPromoJS.oc_Grup();");
$tproduk = $form->option("_", "InvID", $id_inv, true, false, []);
$ttglfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$ttglto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Rekap">Status Order</label>
<div class="col">'.$trekap.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="SalesID">Nama Sales</label>
<div class="col">'.$tsales.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Grup_InvID">Grup Produk</label>
<div class="col">'.$tgrup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="InvID">Nama Produk</label>
<div class="col">'.$tproduk.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col">'.$ttglfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col">'.$ttglto.'</div>
</div>';
}
send_json($ajson);
?>
+175
View File
@@ -0,0 +1,175 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/rekap_sales.php
Desc. : PHP - Laporan R. Penjualan Produk/Sales
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : April 15th, 2011.
Last Modified : October 22nd, 2015.
(c) 2011 - 2015, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.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;
use siaupheng\fonia3\Printer\PrintHTML;
function total_kemasan($aval = array()) {
$ket_tot = "";
foreach ($aval as $key => $val) {
if ($val <> 0) $ket_tot .= " / ".uang($val,2)." ".strtoupper($key);
}
$ket_tot = substr($ket_tot, 3);
return $ket_tot;
}
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$rekap = Param::Get("Rekap"); // X, 1, 0
$id_outlet = Param::Get("OutletID", 0);
$id_sales = Param::Get("SalesID", 0);
$id_grup = Param::Get("Grup_InvID");
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$aoutlet = [];
if ($id_outlet > 0) {
$db->Query("SELECT * FROM para_outlet WHERE OutletID='".$id_outlet."' LIMIT 1");
if ($db->Next()) $aoutlet = $db->AllRow();
}
$asales = ['Nama_Pegawai'=>"TANPA SALES"];
if ($id_sales > 0) {
$db->Query("SELECT * FROM para_pegawai WHERE PegID='".$id_sales."' LIMIT 1");
if ($db->Next()) $asales = $db->AllRow();
}
//$nama_grup = ($gprod>0) ? fastQuery("SELECT UPPER(Nama_Grup) Nama FROM inv_produk_grup WHERE Grup_InvID=".$gprod, "") : "";
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
if ($rekap<>"X") {
$tglheader .= ($rekap==0) ? " (STATUS ORDER : NOTA BELUM TERANTAR)" : " (STATUS ORDER : TERANTAR)";
}
$tsql = " AND J.SalesID='".$id_sales."'";
$tsql .= ($id_outlet>0) ? " AND J.OutletID='".$id_outlet."'" : "";
$tsql .= ($id_grup>0) ? " AND P.Grup_InvID='".$id_grup."'" : " AND P.Grup_InvID<>'".$_SESSION['__APP_IAS']['GRUP_PRODUK_KEMASAN']."' AND P.Grup_InvID<>'".$_SESSION['__APP_IAS']['GRUP_PRODUK_HADIAH']."'";
$tsql .= ($rekap<>"X") ? " AND J.Rekap='".intval($rekap)."'" : "";
$db->Query("SELECT P.Kode_Produk,P.Nama_Produk,SUM(-D.Qty) Qty,SUM(IF(D.Pro_SQ=0,0,-D.Qty)) Pro_SQ,S.Nama_Satuan FROM inv_detail D LEFT JOIN inv_jual J ON (D.No_Ref=J.No_Jual) LEFT JOIN inv_produk P ON (D.InvID=P.InvID) LEFT JOIN para_satuan S ON (D.SatuanID=S.SatuanID) WHERE J.Data_Jual=1 AND (J.Tgl_Jual BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." GROUP BY D.InvID, D.SatuanID ORDER BY P.Nama_Produk");
}
if ( $data == "print" ) {
Report_Header("LAPORAN REKAP PENJUALAN PRODUK PER-SALES", $tglheader);
echo "NAMA SALES : ".$asales['Nama_Pegawai'];
if ($id_outlet>0) echo "<br>NAMA OUTLET : ".$aoutlet['Nama_Outlet'];
if ($id_grup>0) echo "<br>NAMA GRUP PRODUK : ".$nama_grup;
$pre = new PrintHTML();
$pre->set_css("garis");
$pre->add_field("No.",10,"C");
$pre->add_field("Kode",10);
$pre->add_field("Nama Produk",80);
$pre->add_field("Satuan",10);
$pre->add_field("Jumlah",20,"R","rupiah2");
$pre->add_field("Promo",20,"R","rupiah2");
$pre->add_field("Total",20,"R","rupiah2");
$pre->show_fields();
$nomor = 0; $atot = $abon = $anet = array();
while ($db->Next()) {
$nomor++;
$pre->add_value($nomor, $db->Row("Kode_Produk"), $db->Row("Nama_Produk"), $db->Row("Nama_Satuan"), $db->Row("Qty")-$db->Row("Pro_SQ"), $db->Row("Pro_SQ"), $db->Row("Qty"));
$atot[$db->Row("Nama_Satuan")] += $db->Row("Qty")-$db->Row("Pro_SQ");
$abon[$db->Row("Nama_Satuan")] += $db->Row("Pro_SQ");
$anet[$db->Row("Nama_Satuan")] += $db->Row("Qty");
}
$pre->add_span(array("TOTAL PENJUALAN",4,"R,B"),array(total_kemasan($atot),1,"R,B"),array(total_kemasan($abon),1,"R,B"),array(total_kemasan($anet),1,"R,B"));
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "brow-outlet" ) {
$tcari = trim(Param::Get("Cari_Outlet"));
$tsql = ($tcari=="") ? " LIMIT 100" : " AND CONCAT(Nama_Outlet,Telp_Outlet,Nama_Outlet) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM vi_para_outlet WHERE Aktif=1".$tsql);
$obj->add_field("OutletID", "ID", "hid");
$obj->add_field("Kode_Outlet", "Kode", "c");
$obj->add_field("Nama_Alamat", "Nama Outlet", "awr");
$obj->add_field("Alamat_Kota", "Alamat & Kota", "awr");
$obj->set_field_order("Nama_Outlet", "A");
$obj->add_row_btn("save", "Pilih", "RepoRekapSalesJS.outlet_select");
$obj->set_func_navi("RepoRekapSalesJS.data_query('brow-outlet')");
$ajson[] = $obj->json_table("divBrowOutlet");
} else if ( $data == "auto-outlet" ) {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [['value' => 0, 'text' => "SEMUA OUTLET", 'data' => ""]];
if (is_string($tcari) && strlen($tcari) < 64) {
$db->Query("SELECT * FROM vi_para_outlet WHERE Aktif=1 AND CONCAT(Nama_Outlet,Alamat_Outlet) LIKE '%".$tcari."%' ORDER BY Nama_Outlet LIMIT 50");
while ($db->Next()) {
$ajson['autodata'][] = ['value'=>$db->Row("OutletID"), 'text'=>$db->Row("Nama_Alamat"), 'data'=>$db->Row("Alamat_Kota")];
}
}
} else if ( $data == "default") {
$asales = ['NON' => "TANPA-SALES"];
$db->Query("SELECT PegID,Nama_Pegawai FROM para_pegawai WHERE Jenis_PegID='".$_SESSION['__APP_IAS']['GRUP_PEG_SALES']."' ORDER BY Nama_Pegawai");
while ($db->Next()){
$asales[$db->Row("PegID")] = $db->Row("Nama_Pegawai");
}
$form = new Form($db);
$trekap = $form->radio("_", "Rekap", "X", true, false, ["1"=>"Antar","0"=>"Belum Antar","X"=>"Semua"]);
$toutlet = $form->textauto("_", "Nama_Outlet", ['value'=>0,'text'=>"SEMUA OUTLET"], true, false);
$tsales = $form->option("_", "SalesID", "SEMUA", true, false, $asales);
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "TRUE ORDER BY Nama_Grup", [0,"SEMUA GRUP"]);
$ttglfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$ttglto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Rekap">Status Order</label>
<div class="col">'.$trekap.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Nama_Outlet">Nama Outlet</label>
<div class="col"><div class="input-group">'.$toutlet.'<button class="btn btn-info" type="button" onclick="RepoRekapSalesJS.outlet_brow();"><i class="bi-search"></i></button></div></div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="SalesID">Nama Sales</label>
<div class="col">'.$tsales.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Grup_InvID">Grup Produk</label>
<div class="col">'.$tgrup.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col">'.$ttglfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col">'.$ttglto.'</div>
</div>
<input type="hidden" id="OutletID" value="0">';
}
send_json($ajson);
?>
+126
View File
@@ -0,0 +1,126 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/rekap_sup.php
Desc. : PHP - Laporan Rekap Pembelian / Supplier
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : March 5th, 2012.
Last Modified : November 18th, 2023.
(c) 2012 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$id_sup = Param::Get("SupID", 0);
$id_grup = Param::Get("Grup_InvID", 0);
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$asup = []; $agrup = [];
if ($id_sup > 0) {
$db->Query("SELECT * FROM para_supplier WHERE SupID='".$id_sup."' LIMIT 1");
if ($db->Next()) $asup = $db->AllRow();
}
if ($id_grup > 0) {
$db->Query("SELECT * FROM inv_produk_grup WHERE Grup_InvID='".$id_grup."' LIMIT 1");
if ($db->Next()) $agrup = $db->AllRow();
}
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " s/d ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_sup>0) ? " AND SupID='".$id_sup."'" : "";
$tsql2 = ($id_grup>0) ? " AND P.Grup_InvID='".$id_grup."'" : "";
// query data laporan
$db->Query("SELECT D.*,P.Kode_Produk,P.Nama_Produk,S.Nama_Satuan FROM (SELECT InvID,SatuanID,SUM(Qty) Qty FROM inv_detail WHERE No_Ref IN (SELECT No_Beli FROM inv_beli WHERE Data_Beli=1 AND (Tgl_Beli BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql.") GROUP BY InvID,SatuanID) D LEFT JOIN inv_produk P ON (D.InvID=P.InvID) LEFT JOIN para_satuan S ON (D.SatuanID=S.SatuanID) ORDER BY P.Nama_Produk");
}
if ( $data == "print" ) {
Report_Header("LAPORAN REKAP PEMBELIAN PRODUK PER-SUPPLIER", $tglheader);
if ($id_sup>0) $header .= "Nama Supplier : ".$asup['Nama_Sup'];
if ($id_grup>0) $header .= "Nama Grup Produk : ".$agrup['Nama_Grup'];
$header .= '<table class="garis"><thead><tr><th>No.</th><th>Kode</th><th>Nama Produk</th><th>Jumlah</th><th>Satuan</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td class="c">%s</td><td>%s</td><td class="r">%s</td><td>%s</td></tr>';
$_sline = '<tr><td class="c b" colspan="2">%s</td><td class="r b" colspan="3">%s</td></tr>';
$body = ''; $nomor = 0; $atot = [];
while ($db->Next()) {
$atot[$db->Row("Nama_Satuan")] += $db->Row("Qty");
$body .= sprintf($_line, ++$nomor, $db->Row("Kode_Produk"), $db->Row("Nama_Produk"), rupiah2($db->Row("Qty")), $db->Row("Nama_Satuan"));
}
$ket_tot = "";
foreach ($atot as $key => $val) {
if ($val > 0) $ket_tot .= " / ".rupiah2($val,2)." ".strtoupper($key);
}
$ket_tot = substr($ket_tot, 3);
$body .= sprintf($_sline, "Jumlah", $ket_tot);
echo $header . $body . "</tbody></table>" . Report_Stamp(1, true);
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Laporan Rekap Pembelian Produk Per-Supplier",
'subject'=>"PT.PMS",
'desc'=>"Export Data dari IAS"
]);
$xls->add_header("<b>".strtoupper($_SESSION['__WEB_APP']['REG_NAME'])."</b>");
$xls->add_header("<b>LAPORAN REKAP PEMBELIAN PRODUK PER-SUPPLIER</b>");
$xls->add_header($tglheader);
$xls->add_field("NO.", 10, "C");
$xls->add_field("KODE", 25, "L");
$xls->add_field("NAMA PRODUK", 80, "L");
$xls->add_field("JUMLAH", 20, "R,N");
$xls->add_field("SATUAN", 12, "L");
$xls->add_sheet("R-BELI-SUP", false);
if ($id_sup>0) $xls->add_span(["Nama Supplier : ".$asup['Nama_Sup'],5,"L"]);
if ($id_grup>0) $xls->add_span(["Nama Grup Produk : ".$agrup['Nama_Grup'],5,"L"]);
$xls->show_headers();
$nomor = 0; $atot = [];
while ($db->Next()) {
$xls->add_value(++$nomor, $db->Row("Kode_Produk"), $db->Row("Nama_Produk"), uang($db->Row("Qty"),2), $db->Row("Nama_Satuan"));
$atot[$db->Row("Nama_Satuan")] += $db->Row("Qty");
}
$ket_tot = "";
foreach ($atot as $key => $val) {
if ($val > 0) $ket_tot .= " / ".uang($val,2)." ".strtoupper($key);
}
$ket_tot = substr($ket_tot, 3);
$xls->add_span(["Jumlah",2,"L,B"],[$ket_tot,3,"C,B"]);
$xls->add_stamp(1, true);
$xls->send("Laporan Rekap Pembelian Produk Per-Supplier.xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$form->option_db("Nama Supplier", "SupID", 0, true, false, "para_supplier", ["SupID","Nama_Sup"], "TRUE ORDER BY Nama_Sup", [0,"SEMUA SUPPLIER"]);
$form->option_db("Grup Produk", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "TRUE ORDER BY Nama_Grup", [0,"SEMUA GRUP PRODUK"]);
$form->datebox("Dari Tanggal", "Tgl_From", tgl_ymd(), true, false);
$form->datebox("Sampai Tanggal", "Tgl_To", tgl_ymd(), true, false);
$form->show(' _SupID_ _Grup_InvID_ _Tgl_From_ _Tgl_To_ ');
}
?>
+122
View File
@@ -0,0 +1,122 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/stok_akhir.php
Desc. : PHP - Laporan Stok Akhir Produk
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : January 24th, 2011.
Last Modified : November 18th, 2023.
(c) 2011 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.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;
use siaupheng\fonia3\Printer\PrintHTML;
use siaupheng\fonia3\Data\SimpleXLS;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$id_gudang = Param::Get("GudangID", 0);
$tgldata = Param::Get("Tgl_Data");
$agudang = [];
if ($id_gudang>0) {
$db->Query("SELECT * FROM para_gudang WHERE GudangID='".$id_gudang."' LIMIT 1");
if ($db->Next()) $agudang = $db->AllRow();
}
// generate report header
$tglheader = "Periode : ".$tgldata;
$tgldata = tgl_sql2str($tgldata);
$tsql = ($id_gudang==0) ? "" : " AND GudangID='".$id_gudang."'";
$db->Query("SELECT P.Kode_Produk,P.Nama_Produk,P.Satuan_Normal,P.Satuan_Stok,D.Jumlah,S.Qty Kali FROM (SELECT InvID,SUM(Stok) Jumlah FROM inv_detail WHERE NotaID<>5 OR (NotaID=5 AND Promo=0 AND No_Ref IN (SELECT No_Jual FROM inv_jual WHERE Data_Jual=1 AND Rekap=1)) AND Tgl_Ref<>'0000-00-00' AND Tgl_Ref<='".$tgldata."'".$tsql." GROUP BY InvID) D LEFT JOIN vi_inv_produk P ON (P.InvID=D.InvID) LEFT JOIN inv_produk_kemasan S ON (S.InvID=P.InvID AND S.SatuanID=P.NormalID) WHERE P.Nama_Produk IS NOT NULL ORDER BY P.Grup_InvID,P.Nama_Produk");
}
if ( $data == "print" ) {
Report_Header("LAPORAN STOK PRODUK", $tglheader);
$pre = new PrintHTML();
$pre->set_css("garis");
if ($id_gudang>0) echo "Nama Gudang : ".$agudang['Nama_Gudang']."<br>";
$pre->add_field("NO",10,"C");
$pre->add_field("KODE",20);
$pre->add_field("NAMA PRODUK",200);
$pre->add_field("STOK",80,"R");
$pre->show_fields();
$nomor = 1;
while ($db->Next()) {
$total = $db->Row("Jumlah",0);
$kali = $db->Row("Kali",0);
$sat_norm = $db->Row("Satuan_Normal");
$sat_stok = $db->Row("Satuan_Stok");
$pre->add_value($nomor++, $db->Row("Kode_Produk"), $db->Row("Nama_Produk"), Format_Stok($total, $kali, $sat_norm, $sat_stok));
}
$pre->add_stamp(0, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Laporan Stok Produk",
'subject'=>"PT.PMS",
'desc'=>"Export Data dari IAS"
]);
$xls->add_header("<b>".strtoupper($_SESSION['__WEB_APP']['REG_NAME'])."</b>");
$xls->add_header("<b>LAPORAN STOK PRODUK</b>");
$xls->add_header($tglheader);
$xls->add_field("NO.", 5, "C");
$xls->add_field("KODE", 12, "L");
$xls->add_field("NAMA PRODUK", 50, "L");
$xls->add_field("STOK", 22, "R");
$xls->add_sheet("STOK AKHIR", false);
if ($id_gudang>0) $xls->add_span(["Nama Gudang : ".$agudang['Nama_Gudang'],4,"L"]);
$xls->show_headers();
$nomor = 1;
while ($db->Next()) {
$total = $db->Row("Jumlah",0);
$kali = $db->Row("Kali",0);
$sat_norm = $db->Row("Satuan_Normal");
$sat_stok = $db->Row("Satuan_Stok");
$xls->add_value($nomor++, $db->Row("Kode_Produk"), $db->Row("Nama_Produk"), Format_Stok($total, $kali, $sat_norm, $sat_stok));
}
$xls->add_stamp(1, true);
$xls->send("Laporan Stok Produk.xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$tgudang = $form->option_db("_", "GudangID", 0, true, false, "para_gudang", ["GudangID","Nama_Gudang"], "TRUE ORDER BY Nama_Gudang", [0,"SEMUA GUDANG"]);
$ttgldata = $form->datebox("_", "Tgl_Data", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="GudangID">Nama Gudang</label>
<div class="col">'.$tgudang.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_Data">Tanggal Stok</label>
<div class="col">'.$ttgldata.'</div>
</div>';
}
?>
+180
View File
@@ -0,0 +1,180 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/stok_mutasi.php
Desc. : PHP - Laporan Mutasi Stok Produk
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : July 16th, 2011.
Last Modified : November 18th, 2023.
(c) 2011 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.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;
use siaupheng\fonia3\Printer\PrintHTML;
use siaupheng\fonia3\Data\SimpleXLS;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$tipe = Param::Get("Tipe_Data"); // X:Semua, B:Beli, J:Jual
$jenis = Param::Get("Nota_Pajak", 1); // 1:No_Faktur, 2:No_Pajak
$id_gudang = Param::Get("GudangID", 0);
$id_inv = Param::Get("InvID");
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
$agudang = []; $aproduk = [];
if ($id_gudang > 0) {
$db->Query("SELECT * FROM para_gudang WHERE GudangID='".$id_gudang."' LIMIT 1");
if ($db->Next()) $agudang = $db->AllRow();
}
if ($id_inv > 0) {
$db->Query("SELECT CONCAT('[',Kode_Produk,'] ',Nama_Produk,' (',Satuan_Normal,')') Nama_Produk FROM vi_inv_produk WHERE InvID='".$id_inv."' LIMIT 1");
if ($db->Next()) $aproduk = $db->AllRow();
}
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
$tsql = ($id_gudang==0) ? " AND D.NotaID<>2" : " AND D.GudangID='".$id_gudang."'";
$tord = ($jenis==1) ? ",No_Faktur" : ",No_Pajak";
// query ukuran normal produk & stok awal
$db->Query("SELECT P.Satuan_Stok,P.Satuan_Normal,S.Qty Kali FROM (SELECT * FROM vi_inv_produk WHERE InvID='".$id_inv."') P LEFT JOIN inv_produk_kemasan S ON (S.InvID=P.InvID AND S.SatuanID=P.NormalID)");
if ($db->Next()) $ainfo = $db->AllRow();
$stok = 0;
$db->Query("SELECT SUM(D.Stok) Stok FROM inv_detail D LEFT JOIN inv_jual J ON (J.No_Jual=D.No_Ref) WHERE D.Tgl_Ref<>'0000-00-00' AND D.Tgl_Ref<'".$tglfrom."'".$tsql." AND D.InvID='".$id_inv."' AND (D.NotaID<>5 OR (D.NotaID=5 AND J.Rekap=1 AND D.Promo=0))");
if ($db->Next()) $stok = $db->Row("Stok", 0);
if ($tipe == "X") {
$tsql .= " AND (D.NotaID<>5 OR (D.NotaID=5 AND J.Rekap=1 AND D.Promo=0))";
} else {
$tsql .= ($tipe == "B") ? " AND D.NotaID=3" : " AND (D.NotaID=5 AND J.Rekap=1 AND D.Promo=0)";
}
$db->Query("SELECT DATE_FORMAT(D.Tgl_Ref,'%d-%m-%Y') Tgl_Ref2,D.No_Ref,SUM(IF(D.Stok<0,-D.Stok,0)) Keluar,SUM(IF(D.Stok>0,D.Stok,0)) Masuk, IF(ISNULL(B.No_Faktur),J.No_Faktur,B.No_Faktur) No_Faktur, IF(ISNULL(B.No_Pajak),J.No_Pajak,B.No_Pajak) No_Pajak, IF(ISNULL(S.Nama_Sup),T.Nama_Outlet,S.Nama_Sup) Nama FROM inv_detail D LEFT JOIN inv_beli B ON (B.No_Beli=D.No_Ref) LEFT JOIN inv_jual J ON (J.No_Jual=D.No_Ref) LEFT JOIN inv_opname O ON (O.No_Opname=D.No_Ref) LEFT JOIN inv_mutasi M ON (M.No_Mutasi=D.No_Ref) LEFT JOIN para_supplier S ON (S.SupID=B.SupID) LEFT JOIN para_outlet T ON (T.OutletID=J.OutletID) LEFT JOIN para_nota N ON (D.NotaID=N.NotaID) WHERE (D.Tgl_Ref BETWEEN '".$tglfrom."' AND '".$tglto."')".$tsql." AND D.InvID='".$id_inv."' AND D.Stok<>0 GROUP BY D.No_Ref,D.InvID ORDER BY D.Tgl_Ref,N.Urut,D.No_Ref".$tord);
}
if ( $data == "print" ) {
Report_Header("LAPORAN MUTASI STOK PRODUK", $tglheader);
$pre = new PrintHTML();
$pre->set_css("garis");
echo "Nama Produk : ".$aproduk['Nama_Produk']."<br>";
if ($id_gudang>0) echo "Nama Gudang : ".$agudang['Nama_Gudang']."<br>";
$pre->add_field("TANGGAL",20,"C");
$pre->add_field("NO. NOTA",20);
$pre->add_field("NO. FAKTUR",100);
$pre->add_field("NAMA SUPPLIER / OUTLET",300);
$pre->add_field("MASUK",160,"R");
$pre->add_field("KELUAR",160,"R");
$pre->add_field("STOK",160,"R");
$pre->show_fields();
$tot_m = 0; $tot_k = 0;
$pre->add_span(array("STOK AWAL",4,"R"),array("",1,"R"),array("",1,"R"),array(Format_Stok($stok,$ainfo['Kali'],$ainfo['Satuan_Normal'],$ainfo['Satuan_Stok']),1,"R"));
while ($db->Next()) {
$msk = $db->Row("Masuk");
$klr = $db->Row("Keluar");
$stok += $msk - $klr;
$tot_m += $msk;
$tot_k += $klr;
$pre->add_value($db->Row("Tgl_Ref2"), $db->Row("No_Ref"), (($jenis==1)?$db->Row("No_Faktur"):$db->Row("No_Pajak")), $db->Row("Nama"), (($msk>0)?Format_Stok($msk,$ainfo['Kali'],$ainfo['Satuan_Normal'],$ainfo['Satuan_Stok']):""), (($klr>0)?Format_Stok($klr,$ainfo['Kali'],$ainfo['Satuan_Normal'],$ainfo['Satuan_Stok']):""), Format_Stok($stok,$ainfo['Kali'],$ainfo['Satuan_Normal'],$ainfo['Satuan_Stok']));
}
$pre->add_span(array("STOK AKHIR",4,"R"),array(Format_Stok($tot_m,$ainfo['Kali'],$ainfo['Satuan_Normal'],$ainfo['Satuan_Stok']),1,"R"),array(Format_Stok($tot_k,$ainfo['Kali'],$ainfo['Satuan_Normal'],$ainfo['Satuan_Stok']),1,"R"),array(Format_Stok($stok,$ainfo['Kali'],$ainfo['Satuan_Normal'],$ainfo['Satuan_Stok']),1,"R"));
$pre->add_stamp(0, true);
$pre->show();
} else if ( $data == "export" ) {
$xls = new SimpleXLS([
'title'=>"Laporan Mutasi Stok Produk",
'subject'=>"PT.PMS",
'desc'=>"Export Data dari IAS"
]);
$xls->add_header("<b>".strtoupper($_SESSION['__WEB_APP']['REG_NAME'])."</b>");
$xls->add_header("<b>LAPORAN MUTASI STOK PRODUK</b>");
$xls->add_header($aproduk['Nama_Produk']);
$xls->add_header($tglheader);
$xls->add_field("TANGGAL", 12, "C");
$xls->add_field("NO. NOTA", 14, "L");
$xls->add_field("NO. FAKTUR", 14, "L");
$xls->add_field("NAMA SUPPLIER / OUTLET", 60, "L");
$xls->add_field("MASUK", 20, "R");
$xls->add_field("KELUAR", 20, "R");
$xls->add_field("STOK", 20, "R");
$xls->add_sheet("MUTASI STOK", false);
if ($id_gudang>0) $xls->add_span(["Nama Gudang",3,"L"],[$agudang['Nama_Gudang'],4]);
$xls->show_headers();
$tot_m = 0; $tot_k = 0;
$xls->add_span(["STOK AWAL",4,"R,B"],["",1,"R,B"],["",1,"R,B"],[Format_Stok($stok,$ainfo['Kali'],$ainfo['Satuan_Normal'],$ainfo['Satuan_Stok']),1,"R,B"]);
while ($db->Next()) {
$msk = $db->Row("Masuk");
$klr = $db->Row("Keluar");
$stok += $msk - $klr;
$tot_m += $msk;
$tot_k += $klr;
$xls->add_value($db->Row("Tgl_Ref2"), $db->Row("No_Ref"), (($jenis==1)?$db->Row("No_Faktur"):$db->Row("No_Pajak")), $db->Row("Nama"), (($msk>0)?Format_Stok($msk,$ainfo['Kali'],$ainfo['Satuan_Normal'],$ainfo['Satuan_Stok']):""), (($klr>0)?Format_Stok($klr,$ainfo['Kali'],$ainfo['Satuan_Normal'],$ainfo['Satuan_Stok']):""), Format_Stok($stok,$ainfo['Kali'],$ainfo['Satuan_Normal'],$ainfo['Satuan_Stok']));
}
$xls->add_span(array("STOK AKHIR",4,"R,B"),array(Format_Stok($tot_m,$ainfo['Kali'],$ainfo['Satuan_Normal'],$ainfo['Satuan_Stok']),1,"R,B"),array(Format_Stok($tot_k,$ainfo['Kali'],$ainfo['Satuan_Normal'],$ainfo['Satuan_Stok']),1,"R,B"),array(Format_Stok($stok,$ainfo['Kali'],$ainfo['Satuan_Normal'],$ainfo['Satuan_Stok']),1,"R,B"));
$xls->add_stamp(1, true);
$xls->send("Laporan Mutasi Stok Produk.xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe_Data", "X", true, false, ["X"=>"Semua","B"=>"Pembelian","J"=>"Penjualan"]);
$tnota = $form->radio("_", "Nota_Pajak", 1, true, false, [1=>"Nota Jual",2=>"Faktur Pajak"]);
$tgudang = $form->option_db("_", "GudangID", 0, true, false, "para_gudang", ["GudangID","Nama_Gudang"], "TRUE ORDER BY Nama_Gudang", [0,"SEMUA GUDANG"]);
$tproduk = $form->option_db("_", "InvID", 0, true, false, "inv_produk", ["InvID","Nama_Produk"], "TRUE ORDER BY Nama_Produk");
$ttglfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$ttglto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tipe_Data">Jenis Transaksi</label>
<div class="col">'.$ttipe.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Nota_Pajak">Jenis Informasi</label>
<div class="col">'.$tnota.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="GudangID">Nama Gudang</label>
<div class="col">'.$tgud.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="InvID">Nama Produk</label>
<div class="col">'.$tproduk.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col">'.$ttglfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col">'.$ttglto.'</div>
</div>';
}
?>
+152
View File
@@ -0,0 +1,152 @@
<?php
/*******************************************************************
Module : /apps/php/repo/supervisi.php
Desc. : PHP - Laporan Supervisi
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : June 1st, 2013.
Last Modified : March 26th, 2023.
(c) 2013 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Form;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export") {
$id_user = Param::Get("UserID", 0);
$tgl_from = Param::Get("Tgl_From");
$tgl_to = Param::Get("Tgl_To");
$auser = [];
if ($id_user>0) {
$db->Query("SELECT Nama FROM app_operator WHERE UserID='".$id_user."'");
if ($db->Next()) $auser = $db->AllRow();
}
// generate report header
$tglheader = "Periode : ".$tgl_from;
if ($tgl_from!==$tgl_to) $tglheader .= " s/d ".$tgl_to;
$tgl_from = tgl_sql2str($tgl_from);
$tgl_to = tgl_sql2str($tgl_to);
// query data laporan
$tsql = ($id_user>0) ? " AND UserID='".$id_user."'" : " AND UserID>1";
$db->Query("SELECT UPPER(O.Nama) Nama_User,UPPER(M.Judul) Menu,DATE_FORMAT(A.Tanggal,'%d-%m-%Y %H:%i:%s') Tanggal2,A.Catatan,UPPER(S.Nama) Nama_Super FROM (SELECT * FROM app_auth WHERE Auth=1 AND (Tanggal BETWEEN '".$tgl_from." 00:00:00' AND '".$tgl_to." 23:59:59')".$tsql.") A LEFT JOIN app_operator O ON (O.UserID=A.UserID) LEFT JOIN app_operator S ON (S.UserID=A.SuperID) LEFT JOIN app_menu M ON (M.Kode=A.Kode) ORDER BY A.Tanggal");
}
if ( $data == "print" ) {
Report_Header("LAPORAN SUPERVISI APLIKASI", $tglheader);
if ($id_user>0) $header = '<p>Nama Pengguna : '.$auser['Nama'].'</p>';
$header .= '<table class="garis"><thead><tr><th>No.</th><th>Tanggal / Jam</th><th>Menu Aplikasi</th><th>Catatan</th><th>Operator</th><th>Supervisi</th></tr></thead><tbody>';
$_line = '<tr><td class="c">%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>';
$body = ''; $nomor = 1;
while ($db->Next()) {
$body .= sprintf($_line, $nomor++, $db->Row("Tanggal2"), $db->Row("Menu"), $db->Row("Catatan"), $db->Row("Nama_User"), $db->Row("Nama_Super"));
}
echo $header . $body . "</tbody></table>" . Report_Stamp(1, true);
} else if ( $data == "export" ) {
\PhpOffice\PhpSpreadsheet\Cell\Cell::setValueBinder( new \PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder() );
$styleTxt = [
'numberFormat' => ['formatCode' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT]
];
$styleNum = [
'numberFormat' => ['formatCode' => \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED2]
];
$ssheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$ssheet->getProperties()
->setCreator($_SESSION['__WEB_APP']['APP_NAME']." v".$_SESSION['__WEB_APP']['APP_VER'])
->setLastModifiedBy($_SESSION['__WEB_APP']['APP_NAME']." v".$_SESSION['__WEB_APP']['APP_VER'])
->setTitle("Data Supervisi")
->setCompany($_SESSION['__WEB_APP']['REG_NAME']);
$sheet = $ssheet->getActiveSheet();
$sheet->setTitle("Data Supervisi");
// header
$styleHeader = [
'font' => ['bold' => true],
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER]
];
$sheet->setCellValue("A1", strtoupper($_SESSION['__WEB_APP']['REG_NAME']));
$sheet->mergeCells('A1:F1');
$sheet->setCellValue("A2", "LAPORAN SUPERVISI APLIKASI");
$sheet->mergeCells('A2:F2');
$sheet->setCellValue("A3", $tglheader);
$sheet->mergeCells('A3:F3');
$sheet->getStyle('A1:F3')->applyFromArray($styleHeader);
// table header
$sheet->getColumnDimension('A')->setWidth(8);
$sheet->getColumnDimension('B')->setWidth(25);
$sheet->getColumnDimension('C')->setWidth(80);
$sheet->getColumnDimension('D')->setWidth(25);
$sheet->getColumnDimension('E')->setWidth(15);
$sheet->getColumnDimension('F')->setWidth(15);
$baris = 5;
if ($id_user>0) {
$sheet->setCellValue("A".$baris, "Nama Pengguna : ".$auser['Nama']);
$baris++;
}
$styleTableH = [
'font' => ['bold' => true],
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER, 'wrapText' => true],
'fill' => ['fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID, 'startColor' => ['rgb'=>"D0D0D0"]],
'borders' => ['allBorders' => ['borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => ['rgb'=>"C0C0C0"]]]
];
$sheet->setCellValue("A".$baris, "No.");
$sheet->setCellValue("B".$baris, "Tanggal / Jam");
$sheet->setCellValue("C".$baris, "Menu Aplikasi");
$sheet->setCellValue("D".$baris, "Catatan");
$sheet->setCellValue("E".$baris, "Operator");
$sheet->setCellValue("F".$baris, "Supervisi");
$sheet->getStyle('A'.$baris.':F'.$baris)->applyFromArray($styleTableH);
$baris++; $nomor = 1;
while ($db->Next()) {
$sheet->setCellValue("A".$baris, $nomor++);
$sheet->setCellValue("B".$baris, $db->Row("Tanggal2"));
$sheet->setCellValue("C".$baris, $db->Row("Menu"));
$sheet->setCellValue("D".$baris, $db->Row("Catatan"));
$sheet->setCellValue("E".$baris, $db->Row("Nama_User"));
$sheet->setCellValue("F".$baris, $db->Row("Nama_Super"));
$baris++;
}
$sheet->getSheetView()->setZoomScale(75);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="Data Supervisi.xlsx"');
header('Cache-Control: max-age=0');
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($ssheet, 'Xlsx');
$writer->save('php://output');
$ssheet->disconnectWorksheets();
unset($ssheet);
unset($writer);
} else if ( $data == "default") {
$form = new Form($db);
$form->option_db("Nama Pengguna", "UserID", 0, true, false, "app_operator", ["UserID","Nama"], "UserID>1 ORDER BY Nama", [0,"SEMUA PENGGUNA"]);
$form->datebox("Dari Tanggal", "Tgl_From", tgl_ymd(), true, false);
$form->datebox("Sampai Tanggal", "Tgl_To", tgl_ymd(), true, false);
$form->show(' _UserID_ _Tgl_From_ _Tgl_To_ ');
}
?>
+110
View File
@@ -0,0 +1,110 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/repo/terima.php
Desc. : PHP - Laporan Penerimaan
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : July 17th, 2011.
Last Modified : March 6th, 2017.
(c) 2011 - 2017, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
require_once(__DIR__."/../func/report.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;
use siaupheng\fonia3\Printer\PrintHTML;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "print" || $data == "export" ) {
$tipe = Param::Get("Tipe"); // R or D
$tglfrom = Param::Get("Tgl_From");
$tglto = Param::Get("Tgl_To");
// generate report header
$tglheader = "Periode : ".$tglfrom;
if ($tglfrom!==$tglto) $tglheader .= " S/D ".$tglto;
$tglfrom = tgl_sql2str($tglfrom);
$tglto = tgl_sql2str($tglto);
if ($tipe=="R") {
$db->Query("SELECT DATE_FORMAT(L.Tgl_Bayar,'%d-%m-%Y') Tgl_Bayar2,IF(L.Tipe=1,'Cash','BG') Tipe_Bayar,SUM(L.Total_Bayar) Total_Bayar FROM inv_jual_lunas L WHERE (L.Tgl_Bayar BETWEEN '".$tglfrom."' AND '".$tglto."') GROUP BY L.Tgl_Bayar,L.Tipe ORDER BY L.Tgl_Bayar,L.Tipe");
} else {
$db->Query("SELECT L.*,DATE_FORMAT(L.Tgl_Bayar,'%d-%m-%Y') Tgl_Bayar2,DATE_FORMAT(L.Tgl_Cair,'%d-%m-%Y') Tgl_Cair2,IF(L.Tipe=1,'Cash','BG') Tipe_Bayar, O.Nama_Outlet,J.Tgl_Nota FROM inv_jual_lunas L LEFT JOIN inv_jual J ON (J.No_Jual=L.No_Jual) LEFT JOIN para_outlet O ON (O.OutletID=J.OutletID) WHERE (L.Tgl_Bayar BETWEEN '".$tglfrom."' AND '".$tglto."') ORDER BY L.Tgl_Bayar,L.Tipe");
}
}
if ( $data == "print" ) {
Report_Header("LAPORAN ".($tipe=="R"?"REKAP":"DETAIL")." PENERIMAAN", $tglheader);
$pre = new PrintHTML();
$pre->set_css("garis");
if ($tipe=="R") {
$pre->add_field("NO.",10,"C");
$pre->add_field("TANGGAL",30,"C");
$pre->add_field("TIPE",10);
$pre->add_field("JUMLAH",30,"R","uang");
$pre->show_fields();
$tot_bayar = $nomor = 0;
while ($db->Next()) {
$nomor++;
$tot_bayar += $db->Row("Total_Bayar");
$pre->add_value($nomor, $db->Row("Tgl_Bayar2"), $db->Row("Tipe_Bayar"), $db->Row("Total_Bayar"));
}
$pre->add_span(array("GRAND TOTAL",3,"L,B"),array($tot_bayar,1,"R,B","uang"));
} else {
$pre->add_field("TANGGAL",30,"C");
$pre->add_field("TERIMA DARI",150);
$pre->add_field("TGL. NOTA",30,"C","sqltgl");
$pre->add_field("TIPE",10);
$pre->add_field("TGL. CAIR BG",30,"C");
$pre->add_field("JUMLAH",30,"R","uang");
$pre->show_fields();
$tot_bayar = 0;
while ($db->Next()) {
$tot_bayar += $db->Row("Total_Bayar");
$pre->add_value($db->Row("Tgl_Bayar2"), $db->Row("No_Jual")." - ".$db->Row("Nama_Outlet"), $db->Row("Tgl_Nota"), $db->Row("Tipe_Bayar"), $db->Row("Tgl_Cair2"), $db->Row("Total_Bayar"));
}
$pre->add_span(array("GRAND TOTAL",5,"L,B"),array($tot_bayar,1,"R,B","uang"));
}
$pre->add_stamp(1, true);
$pre->show();
} else if ( $data == "default") {
$form = new Form($db);
$ttipe = $form->radio("_", "Tipe", "R", true, false, ["R"=>"Rekap","D"=>"Detail"]);
$ttglfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$ttglto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tipe">Tipe Laporan</label>
<div class="col">'.$ttipe.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col">'.$ttglfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col">'.$ttglto.'</div>
</div>';
}
?>
+125
View File
@@ -0,0 +1,125 @@
<?php
/*******************************************************************
Module : /apps/php/sys/about.php
Desc. : PHP - Informasi Aplikasi
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : November 23th, 2011.
Last Modified : September 30th, 2025.
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
use siaupheng\fonia3\DB\CheckSQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Form;
use siaupheng\fonia3\Web\Register;
use siaupheng\fonia3\Web\Update;
$db = $db ?? new MySQL();
$ajson = array();
$data = Param::Get("data");
$mode = Param::Get("mode");
$cpd = new Update($db);
if ( $data == "check_update") {
$ainfo = $cpd->check_update();
echo '<table width="100%">
<tr><td>Versi Sekarang</td><td>:</td><td>'.$ainfo['build_cur'].'</td></tr>
<tr><td>Versi Update</td><td>:</td><td>'.$ainfo['build_new'].'</td></tr>
<tr><td>Status Update</td><td>:</td><td>'.$ainfo['svr_status'].'</td></tr>
<input type="hidden" id="file_build" value="'.$ainfo['build_new'].'">
<input type="hidden" id="file_online" value="'.(($ainfo['build_new']>$ainfo['build_cur'])?1:0).'">
<input type="hidden" id="file_web" value="'.$ainfo['file_web'].'">
<input type="hidden" id="file_sql" value="'.$ainfo['file_sql'].'">
</table>';
} else if ( $data == "proses_update") {
$ajson['sukses'] = $cpd->go_update(Param::Get("file_web"), Param::Get("file_build"));
if ($ajson['sukses']==true && Param::Get("file_sql","")!=="") $cpd->update_mysql(Param::Get("file_sql"));
} else if ( $data == "check_db") {
$form = new Form($db);
$t_cek = $form->checkbox("_", "DB_Cek", 1, true, false, [1,0]);
$t_repa = $form->checkbox("_", "DB_Repair", 0, true, false, [1,0]);
$t_opti = $form->checkbox("_", "DB_Opti", 0, true, false, [1,0]);
$form->show('
<div class="row mb-4">
<div class="col-12"><div class="input-group">'.$t_cek.'<label for="DB_Cek">Cek Database</label></div><label class="small" for="DB_Cek">Proses Cek ini otomatis memperbaiki tabel yang bermasalah, jika ditemukan.</label></div>
</div>
<div class="row mb-4">
<div class="col-12"><div class="input-group">'.$t_repa.'<label for="DB_Repair">Perbaiki Database</label></div><label class="small" for="DB_Repair">Proses Perbaiki akan memperbaiki semua tabel yang bermasalah.</label></div>
</div>
<div class="row mb-1">
<div class="col-12"><div class="input-group">'.$t_opti.'<label for="DB_Opti">Optimalisasi Database</label></div><label class="small" for="DB_Opti">Proses Optimalisasi ini otomatis merapikan database, merampingkan database dari record data yang telah dihapus.</label></div>
</div>
<div class="d-none" id="DB_Hasil">&nbsp;</div>');
} else if ( $data == "proses_db") {
$chk = new CheckSQL($db);
$chk->ignore_table("app_auth","app_backup","app_config","app_menu","app_operator");
if (Param::Get("DB_Cek",0)==1) {
echo "<br>";
echo $chk->check_db();
}
if (Param::Get("DB_Repair",0)==1) {
echo "<br>";
echo $chk->repair_db();
}
if (Param::Get("DB_Opti",0)==1) {
echo "<br>";
echo $chk->optimize_db();
}
} else if ( $data == "default") {
$apps = $_SESSION['__WEB_APP'];
$apps['CREATOR_YEAR'] = ($apps['CREATOR_YEAR']!=date('Y')) ? $apps['CREATOR_YEAR']." - ".date('Y') : $apps['CREATOR_YEAR'];
$hasil = '<div>
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="about-tab" data-bs-toggle="tab" data-bs-target="#about" type="button" role="tab" aria-controls="about" aria-selected="true">Tentang Aplikasi</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="other-tab" data-bs-toggle="tab" data-bs-target="#other" type="button" role="tab" aria-controls="other" aria-selected="false">Informasi Pendukung</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="tool-tab" data-bs-toggle="tab" data-bs-target="#tool" type="button" role="tab" aria-controls="tool" aria-selected="false">Tools</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="about" role="tabpanel" aria-labelledby="about-tab">
<div class="text-center text-secondary">
<span class="fs-5">'.$apps['REG_NAME'].'</span><br>'.$apps['REG_ADDRESS'].'<br>'.strtoupper($apps['REG_CITY']).' '.$apps['REG_POSTCODE'].'</div><br>
<table>
<tr><td>Register ID</td><td class="c pe-1">:</td><td nowrap>'.Register::reg_id().'</td></tr>
<tr><td>Register Code</td><td class="c">:</td><td>'.Register::reg_code().'</td></tr>
</table>
<hr class="my-2">
<div class="text-center text-secondary">'.$apps['APP_NAMES'].' Ver. '.$apps['APP_VER'].'<br>Updated : '.$apps['APP_UPDATED'].'<br><br><span style="font-size:.9em;">&copy; '.$apps['CREATOR_YEAR'].', '.$apps['CREATOR_NAME'].'<br>'.$apps['CREATOR_WEBSITE'].'.</span></div>
</div>
<div class="tab-pane fade" id="other" role="tabpanel" aria-labelledby="other-tab">
<div class="row"><div class="col" id="divBuildInfo"></div></div>
</div>
<div class="tab-pane fade" id="tool" role="tabpanel" aria-labelledby="tool-tab">
<div class="row mb-2">
<div class="col-md-8">Silahkan jalankan proses Cek Database, jika terjadi masalah dengan database aplikasi.</div>
<div class="col-md-4 d-grid gap-2 my-auto"><button type="button" class="btn btn-info col-12" onclick="AboutJS.proses_checkdb();">Cek Database</button></div>
</div>
<div class="row">
<div class="col-md-8">Cek update aplikasi secara online.</div>
<div class="col-md-4 d-grip gap-2 my-auto"><button type="button" class="btn btn-info col-12" onclick="AboutJS.proses_update();">Cek Update</button></div>
</div>
</div>
</div>
</div>';
echo $hasil;
}
send_json($ajson);
?>
+52
View File
@@ -0,0 +1,52 @@
<?php
/*******************************************************************
Module : /apps/php/sys/chpasswd.php
Desc. : PHP - Perubahan Password Operator
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : December 7th, 2008.
Last Modified : April 25th, 2020.
(c) 2008 - 2020, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
use siaupheng\fonia3\Web\Auth;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Form;
$db = (is_resource($db)) ? $db : new MySQL();
$auth = new Auth($db);
$ajson = [];
$data = Param::Get("data");
if ( $data == "default") {
$form = new Form($db);
$form->password("Password Lama", "LPass", $l_pass, true, true, "masukkan password lama", 20);
$form->password("Password Baru 1", "BPass1", $b_pass1, true, true, "masukkan password baru 1", 20);
$form->password("Password Baru 2", "BPass2", $b_pass2, true, true, "masukkan password baru 2", 20);
$form->show(' _LPass_ _BPass1_ _BPass2_ ');
} else if ( $data == "chpasswd") {
$l_pass = Param::Get("LPass");
$b_pass1 = Param::Get("BPass1");
$b_pass2 = Param::Get("BPass2");
$ajson['status'] = false;
if ($auth->user_check(user_user(), $l_pass)) {
$db->Query("UPDATE app_operator SET Password=MD5('".$b_pass1."') WHERE UserID='".user_id()."'");
$ajson['status'] = true;
$ajson['msg'] = "Sukses merubah password Anda!";
} else {
$ajson['msg'] = "Password lama Anda salah!";
}
}
send_json($ajson);
?>
+76
View File
@@ -0,0 +1,76 @@
<?php
/*******************************************************************
Module : /apps/php/sys/config.php
Desc. : PHP - Konfigurasi Aplikasi
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : May 25th, 2010.
Last Modified : May 1st, 2022.
(c) 2010 - 2022, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Form;
$db = (is_resource($db)) ? $db : new MySQL();
$data = Param::Get("data");
$mode = Param::Get("mode");
if ( $data == "master" ) {
if ( $mode == "save" ) {
$sql = new SQL($db);
$sql->set_table("app_config");
$sql->add_param("REG_ADDRESS");
$sql->add_param("REG_CITY");
$sql->add_param("REG_POSTCODE");
$sql->add_param("REG_PHONE");
$sql->add_param("REG_FAX");
$sql->add_param("REG_WEBSITE");
$sql->add_param("REG_EMAIL");
$sql->add_param_userid();
$sql->add_where("REG_ID");
$sql->UpdateDB();
$mode = "view";
}
$para = [];
$id = Param::Get("REG_ID", $_SESSION['__WEB_APP']['REG_ID']);
$tsql = ($id=="") ? " ORDER BY REG_ID ASC LIMIT 1" : " WHERE REG_ID='".$id."'";
$db->Query("SELECT * FROM app_config".$tsql);
if ($db->Next()) $para = $db->AllRow();
$benable = ($mode=="edit") ? true : false;
$form = new Form($db);
$form->textbox("Nama Perusahaan", "REG_NAME", $para['REG_NAME'], false, false, "text", "masukkan nama instansi");
$form->textarea("Alamat Perusahaan", "REG_ADDRESS", $para['REG_ADDRESS'], $benable, false, 1, "masukkan alamat instansi");
$form->textbox("Kabupaten / Kota", "REG_CITY", $para['REG_CITY'], $benable, false, "text", "masukkan nama kota");
$form->textbox("Kode Pos", "REG_POSTCODE", $para['REG_POSTCODE'], $benable, false, "integer", "masukkan nomor kodepos");
$form->textbox("No. Telpon", "REG_PHONE", $para['REG_PHONE'], $benable, false, "phone", "masukkan nomor telphone");
$form->textbox("No. Fax", "REG_FAX", $para['REG_FAX'], $benable, false, "phone", "masukkan nomor faximile");
$form->textbox("Website", "REG_WEBSITE", $para['REG_WEBSITE'], $benable, false, "text", "masukkan alamat website");
$form->textbox("Email", "REG_EMAIL", $para['REG_EMAIL'], $benable, false, "email", "masukkan alamat email");
$form->hidden("REG_ID", $para['REG_ID']);
$form->hidden("mode", $mode);
$form->show('
_REG_NAME_
_REG_ADDRESS_
_REG_CITY_
_REG_POSTCODE_
_REG_PHONE_
_REG_FAX_
_REG_WEBSITE_
_REG_EMAIL_
_mode_ _REG_ID_ ');
} else if ( $data == "default") {
echo '<div class="card"><div class="card-body"><div id="divMaster">&nbsp;</div></div></div>';
}
?>
+183
View File
@@ -0,0 +1,183 @@
<?php
/*******************************************************************
Module : /apps/php/sys/menu_grup.php
Desc. : PHP - Manajemen Data Grup Login Menu
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : August 8th, 2013.
Last Modified : January 1st, 2026.
(c) 2013 - 2026, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.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 modul_gen($alist = [], $amenu = []) {
$hasil = '<table class="table table-striped table-bordered table-hover">';
$hasil .= '<thead><tr><th>Nama Menu</th><th>Keterangan</th><th width="30"><input onchange="MenuGrupJS.menu_cek(this);" type="checkbox" class="form-check-input mx-2" value="'.$alist[0]['Modul'].'" /></th></tr></thead><tbody>';
for ($i=0; $i<count($alist); $i++) {
$checked = (in_array($alist[$i]['Kode'], $amenu)) ? "checked" : "";
$hasil .= sprintf('<tr><td class="l">%s</td><td class="l">%s</td><td class="c" width="30"><input type="checkbox" class="form-check-input %s" value="%s" %s/></td></tr>', str_repeat("--", $alist[$i]['Level']-1)."> ".$alist[$i]['Menu'], $alist[$i]['Judul'], $alist[$i]['Modul'], $alist[$i]['Kode'], $checked);
}
$hasil .= '</tbody></table>';
return $hasil;
}
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode");
$id_grup = Param::Get("Grup_MenuID");
if ( $data == "grup-detail" ) {
$agrup = array('Aktif'=>1);
if ($mode == "edit") {
$db->Query("SELECT * FROM app_menu_grup WHERE Grup_MenuID='".$id_grup."'");
if ($db->Next()) $agrup = $db->AllRow();
}
$form = new Form($db);
$t_nama = $form->textbox("_", "Nama_Grup", $agrup['Nama_Grup'], true, false, "text", "nama grup menu");
$t_ket = $form->textarea("_", "Ket", $agrup['Ket'], true, false, 1, "keterangan grup menu");
$t_status = $form->switch("_", "Aktif", $agrup['Aktif'], true, false, ["1","0"]);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Grup">Nama Grup Menu</label>
<div class="col">'.$t_nama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Ket">Keterangan Grup</label>
<div class="col">'.$t_ket.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Aktif">Status Aktif ?</label>
<div class="col col-form-label">'.$t_status.'</div>
</div>
<input type="hidden" id="Grup_MenuID" value="'.$agrup['Grup_MenuID'].'" >
<input type="hidden" id="mode" value="'.$mode.'" >
';
} else if ( $data == "save" ) {
$sql = new SQL($db);
$sql->set_table("app_menu_grup");
$sql->add_param("Nama_Grup");
$sql->add_param("Ket");
$sql->add_param("Aktif");
$sql->add_param_stamp();
$sql->add_param_userid();
$sql->add_where("Grup_MenuID");
if ($mode=="add") {
$sql->InsertDB();
} else if ($mode=="edit") {
$sql->UpdateDB();
} else if ($mode=="del") {
$sql->DeleteDB();
}
$ajson['status'] = true;
} else if ( $data == "menu" ) {
$agrup = array('Grup_MenuID'=>0,'Nama_Grup'=>"",'Menu'=>"");
$db->Query("SELECT Grup_MenuID,Nama_Grup,DECODE(Menu,'".$_SESSION['__WEB_APP']['REG_ID']."') Menu FROM app_menu_grup WHERE Grup_MenuID='".$id_grup."' LIMIT 1");
if ($db->Next()) $agrup = $db->AllRow();
$amenu = explode(",", $agrup['Menu']);
$amodul = [];
$db->Query("SELECT * FROM app_menu WHERE Level=0 AND Modul<>'IND' AND Aktif=1 ORDER BY Urut ASC");
while ($db->Next()) {
$amodul[] = $db->AllRow();
}
$hasil = '<div id="tabMenuList">';
if (count($amodul)>1) {
$hasil .= '<ul class="nav nav-tabs" role="tablist">';
for ($i=0; $i<count($amodul); $i++) {
$hasil .= '<li class="nav-item" role="presentation"><button class="nav-link'.($i==0?' active':'').'" id="i'.$amodul[$i]['Modul'].'-tab" data-bs-toggle="tab" data-bs-target="#i'.$amodul[$i]['Modul'].'" type="button" role="tab" aria-controls="i'.$amodul[$i]['Modul'].'" aria-selected="'.($i==0?'true':'false').'">'.$amodul[$i]['Menu'].'</button></li>';
}
$hasil .= '<li class="nav-item ms-auto"><a class="nav-link disabled text-uppercase">'.$agrup['Nama_Grup'].'</a></li></ul>';
$hasil .= '<div class="tab-content">';
for ($i=0; $i<count($amodul); $i++) {
$alist = array();
$db->Query("SELECT * FROM app_menu WHERE Modul='".$amodul[$i]['Modul']."' AND Level>0 AND Aktif=1 ORDER BY Kode");
while ($db->Next()) {
$akode[] = $db->Row("Kode");
$alist[] = $db->AllRow();
}
$hasil .= '<div class="tab-pane fade'.($i==0?' show active':'').'" role="tabpanel" id="i'.$amodul[$i]['Modul'].'" aria-labelledby="i'.$amodul[$i]['Modul'].'-tab">';
$hasil .= modul_gen($alist, $amenu);
$hasil .= '</div>';
}
$hasil .= '</div>';
} else {
$alist = [];
$db->Query("SELECT * FROM app_menu WHERE Modul='".$amodul[0]['Modul']."' AND Level>0 AND Aktif=1 ORDER BY Kode");
while ($db->Next()) {
$akode[] = $db->Row("Kode");
$alist[] = $db->AllRow();
}
$hasil .= modul_gen($alist, $amenu);
}
echo $hasil.'</div>';
$armenu = array();
for ($i=0; $i<count($amenu); $i++) {
if (!in_array($amenu[$i], $akode)) $armenu[] = $amenu[$i];
}
echo '<input type="hidden" id="Grup_MenuID" value="'. $agrup['Grup_MenuID'] .'" />';
echo '<input type="hidden" id="R_MENU" value="'.implode(",", $armenu).'" />';
} else if ( $data == "save-menu" ) {
$amenu = explode(",", Param::Get("Menu")); $ahasil = array();
$amodul = array();
$db->Query("SELECT * FROM app_menu WHERE Level=0 AND Modul<>'IND' AND Aktif=1 ORDER BY Urut ASC");
while ($db->Next()) {
$amodul[] = $db->AllRow();
}
for ($i=0; $i<count($amodul); $i++) {
$asub = array();
$db->Query("SELECT * FROM app_menu WHERE Modul='".$amodul[$i]['Modul']."' AND Level>0 AND Aktif=1 ORDER BY Kode");
while ($db->Next()) {
if (in_array($db->Row("Kode"), $amenu)) $asub[] = $db->Row("Kode");
}
if (count($asub)>0) $ahasil = array_merge($ahasil, array($amodul[$i]['Kode']), $asub);
}
$db->Query("UPDATE app_menu_grup SET Menu=ENCODE('".implode(",",$ahasil)."','".$_SESSION['__WEB_APP']['REG_ID']."'),DateStamp=NOW(),UserID='".user_id()."' WHERE Grup_MenuID='".$id_grup."'");
$ajson['status'] = true;
} else if ( $data == "detail" ) {
$tcari = trim(Param::Get("Cari_Grup"));
$tsql .= ($tcari=="") ? "" : " WHERE Nama_Grup LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT *,DATE_FORMAT(DateStamp,'%d-%m-%Y %H:%i:%s') DateStamp2,IF(Grup_MenuID=1,0,1) IDel FROM app_menu_grup".$tsql);
$obj->add_field("Grup_MenuID", "ID", "hid");
$obj->add_field("Nama_Grup", "Nama Grup");
$obj->add_field("Ket", "Keterangan");
$obj->add_field("DateStamp2", "Update Terakhir", "c");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Nama_Grup", "A");
$obj->add_row_btn("menu-button", "Menu", "MenuGrupJS.menu_show");
$obj->add_row_btn("clipboard", "Ubah", "MenuGrupJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "MenuGrupJS.detail_hapus", "IDel", 1);
$obj->set_func_navi("MenuGrupJS.data_query('detail')");
$obj->set_func_btn("MenuGrupJS.detail_tambah", "+ Grup");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Grup Menu</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Grup" name="Cari_User" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+236
View File
@@ -0,0 +1,236 @@
<?php
/*******************************************************************
Module : /apps/php/sys/operator.php
Desc. : PHP - Manajemen Data Pengguna
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : August 1st, 2008.
Last Modified : January 1st, 2026.
(c) 2008 - 2026, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.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 modul_gen($alist=array(), $amenu=array(), $aglist=array()) {
$hasil = '<table class="table table-striped table-bordered table-hover">';
$hasil .= '<thead><tr><th>Nama Menu</th><th>Keterangan</th><th width="30"><input onchange="OperatorJS.menu_cek(this);" type="checkbox" class="form-check-input mx-2" value="'.$alist[0]['Modul'].'" /></th><th width="30"><input type="checkbox" class="form-check-input mx-2" disabled /></th></tr></thead><tbody>';
for ($i=0; $i<count($alist); $i++) {
$checked = (in_array($alist[$i]['Kode'], $amenu)) ? "checked" : "";
$gchecked = (in_array($alist[$i]['Kode'], $aglist)) ? "checked" : "";
$hasil .= sprintf('<tr><td class="l">%s</td><td class="l">%s</td><td class="c" width="30"><input type="checkbox" class="form-check-input %s" value="%s" %s/></td><td class="c" width="30"><input type="checkbox" class="form-check-input" disabled %s/></td></tr>', str_repeat("--", $alist[$i]['Level']-1)."> ".$alist[$i]['Menu'], $alist[$i]['Judul'], $alist[$i]['Modul'], $alist[$i]['Kode'], $checked, $gchecked);
}
$hasil .= '</tbody></table>';
return $hasil;
}
$db = $db ?? new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode");
$i_filt = Param::Get("Filter_Level", 0);
$id_user = Param::Get("UserID", 0);
if ( $data == "user-detail" ) {
$auser = array('Level'=>1, 'Aktif'=>1);
if ($mode == "edit") {
$db->Query("SELECT * FROM app_operator WHERE UserID='".$id_user."'");
if ($db->Next()) $auser = $db->AllRow();
}
$form = new Form($db);
$t_user = $form->textbox("_", "Username", $auser['Username'], true, true, "text", "username");
$t_nama = $form->textbox("_", "Nama", $auser['Nama'], true, false, "text", "nama pengguna");
$t_posi = $form->textbox("_", "Posisi", $auser['Posisi'], true, false, "text", "posisi pengguna");
$t_level = $form->option_ulevel("_", "Level", $auser['Level'], true, false, "", "OperatorJS.oc_Level();");
$t_pass = $form->password("_", "Password", "", true, true, "", 50, "biarkan kosong jika tidak ingin mengubah password.");
$t_status = $form->switch("_", "Aktif", $auser['Aktif'], true, false, ["1","0"]);
$t_grup = $form->option_db("_", "Grup_MenuID", $auser['Grup_MenuID'], true, false, "app_menu_grup", ["Grup_MenuID","Nama_Grup"], "Aktif=1", [0,"TANPA GRUP"]);
echo '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Username">Username</label>
<div class="col">'.$t_user.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama">Nama Pengguna</label>
<div class="col">'.$t_nama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Posisi">Posisi Pengguna</label>
<div class="col">'.$t_posi.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Level">Level Pengguna</label>
<div class="col">'.$t_level.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Grup_MenuID">Grup Menu</label>
<div class="col">'.$t_grup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Password">Password</label>
<div class="col">'.$t_pass.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Aktif">Status Aktif ?</label>
<div class="col col-form-label">'.$t_status.'</div>
</div>
<input type="hidden" id="UserID" value="'.$auser['UserID'].'" >
<input type="hidden" id="UserLama" value="'.$auser['Username'].'" >
<input type="hidden" id="mode" value="'.$mode.'" >
';
} else if ( $data == "user-check") {
$ajson['ada'] = false;
$db->Query("SELECT COUNT(*) Jumlah FROM app_operator WHERE Username='".Param::Get("Username")."'");
if ($db->Next()) {
if ($db->Row("Jumlah", 0) > 0) $ajson['ada'] = true;
}
} else if ( $data == "save" ) {
$sql = new SQL($db);
$sql->set_table("app_operator");
$sql->add_param("Grup_MenuID");
$sql->add_param("Username");
$sql->add_param("Nama");
$sql->add_param("Posisi");
$sql->add_param("Level");
$sql->add_param("Aktif");
$sql->add_param("SuperID", user_id());
$sql->add_where("UserID");
if ($mode=="add") {
$sql->InsertDB();
} else if ($mode=="edit") {
$sql->UpdateDB();
} else if ($mode=="del") {
$sql->DeleteDB();
}
// SIMPAN PASSWORD
$pass = Param::Get("Password");
if (($mode <> "del") and ($pass <> "")) {
$db->Query("UPDATE app_operator SET Password=MD5('".$pass."') WHERE Username='".Param::Get("Username")."'");
}
$ajson['status'] = true;
} else if ( $data == "menu" ) {
$auser = array('UserID'=>0,'Nama'=>"",'Grup_MenuID'=>0,'Menu'=>"");
$db->Query("SELECT UserID,Nama,Grup_MenuID,DECODE(Menu,'".$_SESSION['__WEB_APP']['PARENT_CODE']."') Menu FROM app_operator WHERE UserID='".$id_user."' LIMIT 1");
if ($db->Next()) $auser = $db->AllRow();
$amenu = explode(",", $auser['Menu']);
$akode = []; $aglist = [];
$db->Query("SELECT DECODE(Menu,'".$_SESSION['__WEB_APP']['PARENT_CODE']."') Menu FROM app_menu_grup WHERE Grup_MenuID='".$auser['Grup_MenuID']."' LIMIT 1");
if ($db->Next()) $aglist = explode(",", $db->Row("Menu"));
$amodul = [];
$db->Query("SELECT * FROM app_menu WHERE Level=0 AND Modul<>'IND' AND Aktif=1 ORDER BY Urut ASC");
while ($db->Next()) {
$amodul[] = $db->AllRow();
}
$hasil = '<div id="tabMenuList">';
if (count($amodul)>1) {
$hasil .= '<ul class="nav nav-tabs" role="tablist">';
for ($i=0; $i<count($amodul); $i++) {
$hasil .= '<li class="nav-item" role="presentation"><button class="nav-link'.($i==0?' active':'').'" id="i'.$amodul[$i]['Modul'].'-tab" data-bs-toggle="tab" data-bs-target="#i'.$amodul[$i]['Modul'].'" type="button" role="tab" aria-controls="i'.$amodul[$i]['Modul'].'" aria-selected="'.($i==0?'true':'false').'">'.$amodul[$i]['Menu'].'</button></li>';
}
$hasil .= '<li class="nav-item ms-auto"><a class="nav-link disabled text-uppercase">'.$auser['Nama'].'</a></li></ul>';
$hasil .= '<div class="tab-content">';
for ($i=0; $i<count($amodul); $i++) {
$alist = array();
$db->Query("SELECT * FROM app_menu WHERE Modul='".$amodul[$i]['Modul']."' AND Level>0 AND Aktif=1 ORDER BY Kode");
while ($db->Next()) {
$akode[] = $db->Row("Kode");
$alist[] = $db->AllRow();
}
$hasil .= '<div class="tab-pane fade'.($i==0?' show active':'').'" role="tabpanel" id="i'.$amodul[$i]['Modul'].'" aria-labelledby="i'.$amodul[$i]['Modul'].'-tab">';
$hasil .= modul_gen($alist, $amenu, $aglist);
$hasil .= '</div>';
}
$hasil .= '</div>';
} else {
$alist = array();
$db->Query("SELECT * FROM app_menu WHERE Modul='".$amodul[0]['Modul']."' AND Level>0 AND Aktif=1 ORDER BY Kode");
while ($db->Next()) {
$akode[] = $db->Row("Kode");
$alist[] = $db->AllRow();
}
$hasil .= modul_gen($alist, $amenu, $aglist);
//$hasil .= '</div>';
}
echo $hasil.'</div>';
$armenu = array();
for ($i=0; $i<count($amenu); $i++) {
if (!in_array($amenu[$i], $akode)) $armenu[] = $amenu[$i];
}
echo '<input type="hidden" id="UserID" value="'. $auser['UserID'] .'" />';
echo '<input type="hidden" id="R_MENU" value="'.implode(",", $armenu).'" />';
} else if ( $data == "save-menu" ) {
$amenu = explode(",", Param::Get("Menu")); $ahasil = [];
$amodul = array();
$db->Query("SELECT * FROM app_menu WHERE Level=0 AND Modul<>'IND' AND Aktif=1 ORDER BY Urut ASC");
while ($db->Next()) {
$amodul[] = $db->AllRow();
}
for ($i=0; $i<count($amodul); $i++) {
$asub = [];
$db->Query("SELECT * FROM app_menu WHERE Modul='".$amodul[$i]['Modul']."' AND Level>0 AND Aktif=1 ORDER BY Kode");
while ($db->Next()) {
if (in_array($db->Row("Kode"), $amenu)) $asub[] = $db->Row("Kode");
}
if (count($asub)>0) $ahasil = array_merge($ahasil, array($amodul[$i]['Kode']), $asub);
}
$db->Query("UPDATE app_operator SET Menu=ENCODE('".implode(",",$ahasil)."','".$_SESSION['__WEB_APP']['PARENT_CODE']."'),SuperID='".user_id()."' WHERE UserID='".$id_user."'");
$ajson['status'] = true;
} else if ( $data == "detail" ) {
$tcari = Param::Get("Cari_User");
$tsql = (user_id()==1) ? "" : " AND UserID>2";
$tsql = (user_id()==2) ? " AND UserID>1" : $tsql;
$tsql .= ($i_filt==0) ? "" : " AND Level='".$i_filt."'";
$tsql .= ($tcari=="") ? "" : " AND CONCAT(Username,Nama) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM app_operator WHERE Level>=".$_SESSION['__WEB_USER']['Level'].$tsql);
$obj->add_field("UserID", "ID", "hid");
$obj->add_field("Username", "Username");
$obj->add_field("Nama", "Nama Pengguna", "awr");
$obj->add_field("Posisi", "Posisi");
$obj->add_field("Level", "Level", "l", $_SESSION['__WEB_APP']['USER_LEVEL']);
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Username", "A");
$obj->add_row_btn("menu-button", "Menu", "OperatorJS.menu_show");
$obj->add_row_btn("clipboard", "Ubah", "OperatorJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "OperatorJS.detail_hapus");
$obj->set_func_navi("OperatorJS.data_query('detail')");
$obj->set_func_btn("OperatorJS.detail_tambah", "+ Pengguna");
$ajson[] = $obj->json_table("divDetail");
} else if ($data == "detail_filter") {
$form = new Form($db);
$_form = $form->option_ulevel("Level Pengguna", "Fi_Level", $i_filt);
echo '
<div class="row mb-3"><div class="col text-center">Tampilan Berdasarkan :</div></div>
<div class="row"><div class="col text-center">'.$_form.'</div></div>';
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Pengguna</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_User" name="Cari_User" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div><div class="col-auto"><button class="btn btn-info shadow-none" type="button" id="butFilter">Filter</button><input type="hidden" id="Filter_Level"></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+54
View File
@@ -0,0 +1,54 @@
<?php
/*******************************************************************
Module : /apps/php/sys/super.php
Desc. : PHP - Informasi Supervisi Operator
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : September 11st, 2012.
Last Modified : March 19th, 2023.
(c) 2012 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
if ( $data == "save" ) {
$db->Query("UPDATE app_auth SET Auth=1,SuperID='".user_id()."' WHERE UserID='".Param::Get("USERID")."' AND Kode='".Param::Get("KODE")."' AND SID='".Param::Get("REQ_SID")."' AND REQ='".Param::Get("REQ")."'");
} else if ( $data == "detail" ) {
$obj = new Table($db);
$obj->set_query("SELECT A.*,DATE_FORMAT(A.Tanggal,'%d-%m-%Y %H:%i:%s') Tanggal2,O.Nama Nama_User,M.Judul FROM app_auth A LEFT JOIN app_operator O ON (A.UserID=O.UserID) LEFT JOIN app_menu M ON (A.Kode=M.Kode) WHERE A.Auth=0");
$obj->add_field("UserID", "UserID", "hid");
$obj->add_field("Kode", "Kode", "hid");
$obj->add_field("SID", "SID", "hid");
$obj->add_field("Nama_User", "User ID", "l");
$obj->add_field("Tanggal", "Tanggal", "c");
$obj->add_field("Judul", "Menu Aplikasi", "l");
$obj->add_field("Catatan", "Informasi Transaksi", "awr");
$obj->add_field("REQ", "Kode Request", "l");
$obj->add_row_btn("unlock2", "Proses", "SuperJS.detail_select");
$obj->set_func_navi("SuperJS.data_query('detail')");
$ajson[] = $obj->json_table("divSuper");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Supervisi Hak Akses</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Super" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divSuper">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+88
View File
@@ -0,0 +1,88 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/tab/gudang.php
Desc. : PHP - Tabel Master Lokasi Gudang
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : December 7th, 2010.
Last Modified : March 19th, 2023.
(c) 2010 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode");
$id_tm = Param::Get("GudangID", 0);
if ( $data == "gudang-detail" ) {
$atabel = ['GudangID'=>0,'Aktif'=>1];
if ($id_tm > 0) {
$db->Query("SELECT * FROM para_gudang WHERE GudangID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$form->textbox("Kode Lokasi Gudang", "Kode_Gudang", $atabel['Kode_Gudang'], true, true, "text", "kode lokasi gudang");
$form->textbox("Nama Lokasi Gudang", "Nama_Gudang", $atabel['Nama_Gudang'], true, true, "text", "nama lokasi gudang");
$form->switch("Status Aktif", "Aktif", $atabel['Aktif'], true, true, [1,0]);
$form->hidden("GudangID", $atabel['GudangID']);
$form->hidden("mode", $mode);
$form->show(' _Kode_Gudang_ _Nama_Gudang_ _Aktif_ _mode_ _GudangID_ ');
} else if ( $data == "save" ) {
$sql = new SQL($db);
$sql->set_table("para_gudang");
$sql->add_param("Kode_Gudang");
$sql->add_param("Nama_Gudang");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("GudangID");
if ($mode=="add") {
$sql->InsertDB();
} else if ($mode=="edit") {
$sql->UpdateDB();
} else if ($mode=="del") {
$sql->DeleteDB();
}
$ajson['status'] = true;
} else if ( $data == "detail" ) {
$tcari = trim(Param::Get("Cari_Gudang"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(Kode_Gudang,Nama_Gudang) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM para_gudang".$tsql);
$obj->add_field("GudangID", "ID", "hid");
$obj->add_field("Kode_Gudang", "Kode Gudang");
$obj->add_field("Nama_Gudang", "Nama Lokasi Gudang", "awr");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Kode_Gudang", "A");
$obj->add_row_btn("clipboard", "Ubah", "GudangJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "GudangJS.detail_hapus");
$obj->set_func_navi("GudangJS.data_query('detail')");
$obj->set_func_btn("GudangJS.detail_tambah", '<i class="bi-plus-lg me-1"></i>Gudang');
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Lokasi Gudang</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Gudang" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+88
View File
@@ -0,0 +1,88 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/tab/mobil.php
Desc. : PHP - Tabel Master Kendaraan
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : March 4th, 2011.
Last Modified : March 20th, 2023.
(c) 2011 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode");
$id_tm = Param::Get("MobilID", 0);
if ( $data == "mobil-detail" ) {
$atabel = ['MobilID'=>0,'Aktif'=>1];
if ($id_tm > 0) {
$db->Query("SELECT * FROM para_mobil WHERE MobilID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$form->textbox("Kode Kendaraan", "Kode_Mobil", $atabel['Kode_Mobil'], true, true, "text", "kode kendaraan");
$form->textbox("Nama Kendaraan", "Nama_Mobil", $atabel['Nama_Mobil'], true, true, "text", "nama kendaraan");
$form->switch("Status Aktif", "Aktif", $atabel['Aktif'], true, true, [1,0]);
$form->hidden("MobilID", $atabel['MobilID']);
$form->hidden("mode", $mode);
$form->show(' _Kode_Mobil_ _Nama_Mobil_ _Aktif_ _mode_ _MobilID_ ');
} else if ( $data == "save" ) {
$sql = new SQL($db);
$sql->set_table("para_mobil");
$sql->add_param("Kode_Mobil");
$sql->add_param("Nama_Mobil");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("MobilID");
if ($mode=="add") {
$sql->InsertDB();
} else if ($mode=="edit") {
$sql->UpdateDB();
} else if ($mode=="del") {
$sql->DeleteDB();
}
$ajson['status'] = true;
} else if ( $data == "detail" ) {
$tcari = trim(Param::Get("Cari_Mobil"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(Kode_Mobil,Nama_Mobil) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM para_mobil".$tsql);
$obj->add_field("MobilID", "ID", "hid");
$obj->add_field("Kode_Mobil", "Kode Kendaraan");
$obj->add_field("Nama_Mobil", "Nama Kendaraan", "awr");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Kode_Mobil", "A");
$obj->add_row_btn("clipboard", "Ubah", "MobilJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "MobilJS.detail_hapus");
$obj->set_func_navi("MobilJS.data_query('detail')");
$obj->set_func_btn("MobilJS.detail_tambah", "+ Kendaraan");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Kendaraan</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Mobil" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+121
View File
@@ -0,0 +1,121 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/tab/outlet.php
Desc. : PHP - Tabel Master Outlet
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : December 7th, 2010.
Last Modified : January 5th, 2025.
(c) 2010 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode");
$id_tm = Param::Get("OutletID", 0);
if ( $data == "outlet-detail" ) {
$atabel = ['OutletID'=>0,'Grup_OutletID'=>0,'Tipe_OutletID'=>0,'No_NPWP'=>"0000000000000000",'No_NIK'=>"0000000000000000",'No_NITKU'=>"000000",'GG'=>0,'Aktif'=>1,'Prov_LokasiID'=>20,'Kode_Outlet'=>"OUTLET-BARU"];
if ($id_tm > 0) {
$db->Query("SELECT * FROM para_outlet WHERE OutletID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$form->textbox("Kode Outlet", "Kode_Outlet", $atabel['Kode_Outlet'], false, false, "text");
$form->textbox("Nama Outlet", "Nama_Outlet", $atabel['Nama_Outlet'], true, true, "text", "nama outlet");
$form->textarea("Alamat Outlet", "Alamat_Outlet", $atabel['Alamat_Outlet'], true, true, 2, "alamat outlet");
$form->textbox("Kota Outlet", "Kota_Outlet", $atabel['Kota_Outlet'], true, true, "text", "kota outlet");
$form->textbox("Telp Outlet", "Telp_Outlet", $atabel['Telp_Outlet'], true, true, "text", "telp outlet");
$form->textbox("Email Outlet", "Email_Outlet", $atabel['Email_Outlet'], true, true, "text", "email outlet");
$form->option_db("Provinsi Outlet", "Prov_LokasiID", $atabel['Prov_LokasiID'], true, false, "para_lokasi", ["LokasiID","N_Lokasi"], "Aktif=1 ORDER BY K_Lokasi", [0,'&nbsp;']);
$form->option_db("Grup Outlet", "Grup_OutletID", $atabel['Grup_OutletID'], true, false, "para_outlet_grup", ["Grup_OutletID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,'&nbsp;']);
$form->option_que("Tipe Outlet", "Tipe_OutletID", $atabel['Tipe_OutletID'], true, false, "SELECT *,CONCAT(Kode_Tipe,' ',Nama_Tipe) Kode_Nama FROM para_outlet_tipe WHERE Aktif=1 AND Opsi=0 ORDER BY Kode_Tipe", ["Tipe_OutletID","Kode_Nama"], [0,'&nbsp;']);
$form->datebox("Tanggal Terdaftar", "Tgl_Daftar", $atabel['Tgl_Daftar'], true, true);
$form->textbox("NPWP", "No_NPWP", $atabel['No_NPWP'], true, true, "angka", "0000000000000000", 16, "16 digit NPWP, jika tidak ada isi semua dengan nol.");
$form->textbox("NITKU", "No_NITKU", $atabel['No_NITKU'], true, true, "angka", "000000", 6, "6 digit NITKU, jika tidak ada isi semua dengan nol.");
$form->textbox("NIK", "No_NIK", $atabel['No_NIK'], true, true, "angka", "0000000000000000", 16, "16 digit NIK, jika tidak ada isi semua dengan nol.");
$form->textbox("Nama NPWP / NIK", "Nama_NPWP", $atabel['Nama_NPWP'], true, true, "text", "nama npwp / nik");
$form->textarea("Alamat NPWP / NIK", "Alamat_NPWP", $atabel['Alamat_NPWP'], true, true, 2, "alamat npwp / nik");
$form->switch("FP Gabungan", "GG", $atabel['GG'], true, true, [1,0]);
$form->switch("Status Aktif", "Aktif", $atabel['Aktif'], true, true, [1,0]);
$form->hidden("OutletID", $atabel['OutletID']);
$form->hidden("mode", $mode);
$form->show(' _Kode_Outlet_ _Nama_Outlet_ _Alamat_Outlet_ _Kota_Outlet_ _Telp_Outlet_ _Prov_LokasiID_ _Email_Outlet_ <hr class="my-2"> _No_NPWP_ _No_NITKU_ _No_NIK_ _Nama_NPWP_ _Alamat_NPWP_ <hr class="my-2"> _Grup_OutletID_ _Tipe_OutletID_ _Tgl_Daftar_ _GG_ _Aktif_ _mode_ _OutletID_ ');
} else if ( $data == "save" ) {
$sql = new SQL($db);
$sql->set_table("para_outlet");
$sql->add_param("Grup_OutletID");
$sql->add_param("Tipe_OutletID");
$sql->add_param("Nama_Outlet");
$sql->add_param("Alamat_Outlet");
$sql->add_param("Kota_Outlet");
$sql->add_param("Telp_Outlet");
$sql->add_param("Prov_LokasiID");
$sql->add_param("Email_Outlet");
$sql->add_param("No_NPWP");
$sql->add_param("No_NITKU");
$sql->add_param("No_NIK");
$sql->add_param("Nama_NPWP");
$sql->add_param("Alamat_NPWP");
$sql->add_param_date("Tgl_Daftar");
$sql->add_param("GG");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("OutletID");
if ($mode=="add") {
$sql->add_param("Kode_Outlet", Outlet_Baru());
$sql->InsertDB();
} else if ($mode=="edit") {
$sql->UpdateDB();
} else if ($mode=="del") {
$sql->DeleteDB();
}
$ajson['status'] = true;
} else if ( $data == "detail" ) {
$tcari = trim(Param::Get("Cari_Outlet"));
$tsql = ($tcari=="") ? "" : "CONCAT(Kode_Outlet,Nama_Outlet,Alamat_Outlet,Kota_Outlet,No_NPWP,No_NIK) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_table("para_outlet", "*", $tsql);
$obj->add_field("OutletID", "ID", "hid");
$obj->add_field("Kode_Outlet", "Kode", "c");
$obj->add_field("Nama_Outlet", "Nama Outlet", "awr");
$obj->add_field("Alamat_Outlet", "Alamat", "awr");
$obj->add_field("Kota_Outlet", "Kota");
$obj->add_field("No_NIK", "NPWP");
//$obj->add_field("Telp_Outlet", "No. Telp.");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Kode_Outlet", "D");
$obj->add_row_btn("clipboard", "Ubah", "OutletJS.detail_ubah");
if (user_level(1)) $obj->add_row_btn("trash", "Hapus", "OutletJS.detail_hapus");
$obj->set_func_navi("OutletJS.data_query('detail')");
$obj->set_func_btn("OutletJS.detail_tambah", '<i class="bi-plus-lg me-1"></i>Outlet');
$ajson[] = $obj->db_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Outlet</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Outlet" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+88
View File
@@ -0,0 +1,88 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/tab/outlet_grup.php
Desc. : PHP - Tabel Master Grup Outlet
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : December 7th, 2010.
Last Modified : March 19th, 2023.
(c) 2010 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode");
$id_tm = Param::Get("Grup_OutletID", 0);
if ( $data == "grup-detail" ) {
$atabel = ['Grup_OutletID'=>0,'Aktif'=>1];
if ($id_tm > 0) {
$db->Query("SELECT * FROM para_outlet_grup WHERE Grup_OutletID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$form->textbox("Kode Grup Produk", "Kode_Grup", $atabel['Kode_Grup'], true, true, "text", "kode grup outlet");
$form->textbox("Nama Grup Produk", "Nama_Grup", $atabel['Nama_Grup'], true, true, "text", "nama grup outlet");
$form->switch("Status Aktif", "Aktif", $atabel['Aktif'], true, true, [1,0]);
$form->hidden("Grup_OutletID", $atabel['Grup_OutletID']);
$form->hidden("mode", $mode);
$form->show(' _Kode_Grup_ _Nama_Grup_ _Aktif_ _mode_ _Grup_OutletID_ ');
} else if ( $data == "save" ) {
$sql = new SQL($db);
$sql->set_table("para_outlet_grup");
$sql->add_param("Kode_Grup");
$sql->add_param("Nama_Grup");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("Grup_OutletID");
if ($mode=="add") {
$sql->InsertDB();
} else if ($mode=="edit") {
$sql->UpdateDB();
} else if ($mode=="del") {
$sql->DeleteDB();
}
$ajson['status'] = true;
} else if ( $data == "detail" ) {
$tcari = trim(Param::Get("Cari_Grup"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(Kode_Grup,Nama_Grup) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM para_outlet_grup".$tsql);
$obj->add_field("Grup_OutletID", "ID", "hid");
$obj->add_field("Kode_Grup", "Kode Grup");
$obj->add_field("Nama_Grup", "Nama Grup", "awr");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Kode_Grup", "A");
$obj->add_row_btn("clipboard", "Ubah", "OutletGrupJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "OutletGrupJS.detail_hapus");
$obj->set_func_navi("OutletGrupJS.data_query('detail')");
$obj->set_func_btn("OutletGrupJS.detail_tambah", "+ Grup Outlet");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Grup Outlet</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Grup" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+93
View File
@@ -0,0 +1,93 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/tab/outlet_tipe.php
Desc. : PHP - Tabel Master Tipe Outlet
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : January 21th, 2011.
Last Modified : March 19th, 2023.
(c) 2011 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode");
$id_tm = Param::Get("Tipe_OutletID", 0);
if ( $data == "tipe-detail" ) {
$atabel = ['Tipe_OutletID'=>0,'Opsi'=>1,'Aktif'=>1];
if ($id_tm > 0) {
$db->Query("SELECT * FROM para_outlet_tipe WHERE Tipe_OutletID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$form->textbox("Kode Tipe", "Kode_Tipe", $atabel['Kode_Tipe'], true, true, "text", "kode tipe");
$form->textbox("Nama Tipe", "Nama_Tipe", $atabel['Nama_Tipe'], true, true, "text", "nama tipe outlet");
$form->textarea("Keterangan", "Keterangan", $atabel['Keterangan'], true, true, 3, "keterangan tipe outlet");
$form->radio("Bisa Dipilih ?", "Opsi", $atabel['Opsi'], true, true, ['1'=>"Ya",'0'=>"Tidak"]);
$form->switch("Status Aktif", "Aktif", $atabel['Aktif'], true, true, [1,0]);
$form->hidden("Tipe_OutletID", $atabel['Tipe_OutletID']);
$form->hidden("mode", $mode);
$form->show(' _Kode_Tipe_ _Nama_Tipe_ _Keterangan_ _Opsi_ _Aktif_ _mode_ _Tipe_OutletID_ ');
} else if ( $data == "save" ) {
$sql = new SQL($db);
$sql->set_table("para_outlet_tipe");
$sql->add_param("Kode_Tipe");
$sql->add_param("Nama_Tipe");
$sql->add_param("Keterangan");
$sql->add_param("Opsi");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("Tipe_OutletID");
if ($mode=="add") {
$sql->InsertDB();
} else if ($mode=="edit") {
$sql->UpdateDB();
} else if ($mode=="del") {
$sql->DeleteDB();
}
$ajson['status'] = true;
} else if ( $data == "detail" ) {
$tcari = trim(Param::Get("Cari_Tipe"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(Kode_Tipe,Nama_Tipe) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM para_outlet_tipe".$tsql);
$obj->add_field("Tipe_OutletID", "ID", "hid");
$obj->add_field("Kode_Tipe", "Kode Tipe");
$obj->add_field("Nama_Tipe", "Nama Tipe Outlet", "awr");
$obj->add_field("Opsi", "Opsi", "c", "checkbox");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Kode_Tipe", "A");
$obj->add_row_btn("clipboard", "Ubah", "OutletTipeJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "OutletTipeJS.detail_hapus");
$obj->set_func_navi("OutletTipeJS.data_query('detail')");
$obj->set_func_btn("OutletTipeJS.detail_tambah", "+ Tipe Outlet");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Tipe Outlet</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Tipe" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+96
View File
@@ -0,0 +1,96 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/tab/pegawai.php
Desc. : PHP - Tabel Master Pegawai
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : December 7th, 2010.
Last Modified : March 20th, 2023.
(c) 2010 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode");
$id_tm = Param::Get("PegID", 0);
if ( $data == "pegawai-detail" ) {
$atabel = ['PegID'=>0,'Jenis_PegID'=>0,'Aktif'=>1];
if ($id_tm > 0) {
$db->Query("SELECT * FROM para_pegawai WHERE PegID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$form->textbox("Kode Pegawai", "Kode_Pegawai", $atabel['Kode_Pegawai'], true, true, "text", "kode pegawai");
$form->textbox("Nama Pegawai", "Nama_Pegawai", $atabel['Nama_Pegawai'], true, true, "text", "nama pegawai");
$form->textarea("Alamat Pegawai", "Alamat_Pegawai", $atabel['Alamat_Pegawai'], true, true, 2, "nama pegawai");
$form->textbox("Telp Pegawai", "Telp_Pegawai", $atabel['Telp_Pegawai'], true, true, "text", "telp pegawai");
$form->option_db("Jenis Pegawai", "Jenis_PegID", $atabel['Jenis_PegID'], true, true, "para_pegawai_jenis", ["Jenis_PegID","Nama_Jenis"], "Aktif=1 ORDER BY Nama_Jenis", [0,'&nbsp;']);
$form->switch("Status Aktif", "Aktif", $atabel['Aktif'], true, true, [1,0]);
$form->hidden("PegID", $atabel['PegID']);
$form->hidden("mode", $mode);
$form->show(' _Kode_Pegawai_ _Nama_Pegawai_ _Alamat_Pegawai_ _Telp_Pegawai_ <div class="row"><div class="col-12"><hr class="my-2"></div></div> _Jenis_PegID_ _Aktif_ _mode_ _PegID_ ');
} else if ( $data == "save" ) {
$sql = new SQL($db);
$sql->set_table("para_pegawai");
$sql->add_param("Jenis_PegID");
$sql->add_param("Kode_Pegawai");
$sql->add_param("Nama_Pegawai");
$sql->add_param("Alamat_Pegawai");
$sql->add_param("Telp_Pegawai");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("PegID");
if ($mode=="add") {
$sql->InsertDB();
} else if ($mode=="edit") {
$sql->UpdateDB();
} else if ($mode=="del") {
$sql->DeleteDB();
}
$ajson['status'] = true;
} else if ( $data == "detail" ) {
$tcari = trim(Param::Get("Cari_Peg"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(Kode_Pegawai,Nama_Pegawai,Telp_Pegawai) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM para_pegawai".$tsql);
$obj->add_field("PegID", "ID", "hid");
$obj->add_field("Kode_Pegawai", "Kode Pegawai");
$obj->add_field("Nama_Pegawai", "Nama Pegawai", "awr");
$obj->add_field("Alamat_Pegawai", "Alamat", "awr");
$obj->add_field("Telp_Pegawai", "No. Telp", "l");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Kode_Pegawai", "A");
$obj->add_row_btn("clipboard", "Ubah", "PegawaiJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "PegawaiJS.detail_hapus");
$obj->set_func_navi("PegawaiJS.data_query('detail')");
$obj->set_func_btn("PegawaiJS.detail_tambah", "+ Pegawai");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Pegawai</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Peg" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+88
View File
@@ -0,0 +1,88 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/tab/pegawai_jenis.php
Desc. : PHP - Tabel Master Jenis Pegawai
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : February 8th, 2011.
Last Modified : March 20th, 2023.
(c) 2011 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode");
$id_tm = Param::Get("Jenis_PegID", 0);
if ( $data == "jenis-detail" ) {
$atabel = ['Jenis_PegID'=>0,'Aktif'=>1];
if ($id_tm > 0) {
$db->Query("SELECT * FROM para_pegawai_jenis WHERE Jenis_PegID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$form->textbox("Kode Jenis", "Kode_Jenis", $atabel['Kode_Jenis'], true, true, "text", "kode jenis pegawai");
$form->textbox("Nama Jenis Pegawai", "Nama_Jenis", $atabel['Nama_Jenis'], true, true, "text", "nama jenis pegawai");
$form->switch("Status Aktif", "Aktif", $atabel['Aktif'], true, true, [1,0]);
$form->hidden("Jenis_PegID", $atabel['Jenis_PegID']);
$form->hidden("mode", $mode);
$form->show(' _Kode_Jenis_ _Nama_Jenis_ _Aktif_ _mode_ _Jenis_PegID_ ');
} else if ( $data == "save" ) {
$sql = new SQL($db);
$sql->set_table("para_pegawai_jenis");
$sql->add_param("Kode_Jenis");
$sql->add_param("Nama_Jenis");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("Jenis_PegID");
if ($mode=="add") {
$sql->InsertDB();
} else if ($mode=="edit") {
$sql->UpdateDB();
} else if ($mode=="del") {
$sql->DeleteDB();
}
$ajson['status'] = true;
} else if ( $data == "detail" ) {
$tcari = trim(Param::Get("Cari_Jenis"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(Kode_Jenis,Nama_Jenis) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM para_pegawai_jenis".$tsql);
$obj->add_field("Jenis_PegID", "ID", "hid");
$obj->add_field("Kode_Jenis", "Kode Jenis");
$obj->add_field("Nama_Jenis", "Nama Jenis Pegawai", "awr");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Kode_Jenis", "A");
$obj->add_row_btn("clipboard", "Ubah", "PegawaiJenisJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "PegawaiJenisJS.detail_hapus");
$obj->set_func_navi("PegawaiJenisJS.data_query('detail')");
$obj->set_func_btn("PegawaiJenisJS.detail_tambah", "+ Jenis Pegawai");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Jenis Pegawai</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Jenis" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+628
View File
@@ -0,0 +1,628 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/tab/produk.php
Desc. : PHP - Tabel Master Produk
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : May 19th, 2010.
Last Modified : January 10th, 2026.
(c) 2010 - 2026, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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 Produk_Baru($autosave = false) {
global $db;
$ino = 1;
$db->Query("SELECT MAX(InvID)+1 Nomor FROM inv_produk");
if ($db->Next()) $ino = (int)$db->Row("Nomor", 1);
if ($autosave) $db->Query("INSERT INTO inv_produk (InvID) VALUES ('".$ino."')");
return $ino;
}
function Produk_Backup($id_inv = 0) {
global $db;
if ($id_inv == 0) return;
$db->Query("INSERT IGNORE INTO inv_produk_backup (InvID,UserID,Produk,Kemasan,Harga,Varian,MD5Key) SELECT A.InvID,A.UserID,A.Produk,IFNULL(B.Kemasan,'[]'),IFNULL(C.Harga,'[]'),IFNULL(D.Varian,'[]'),UPPER(MD5(CONCAT(A.Produk,IFNULL(B.Kemasan,'[]'),IFNULL(C.Harga,'[]'),IFNULL(D.Varian,'[]')))) FROM (SELECT InvID,UserID,JSON_ARRAYAGG(JSON_OBJECT('InvID',InvID,'Grup_InvID',Grup_InvID,'Kode_Produk',Kode_Produk,'Nama_Produk',Nama_Produk,'Kode_FP',Kode_FP,'StokID',StokID,'NormalID',NormalID,'Harga_Pokok',Harga_Pokok,'Stok_Min',Stok_Min,'Pajak',Pajak,'Hadiah',Hadiah,'Aktif',Aktif,'UserID',UserID)) Produk FROM inv_produk WHERE InvID='".$id_inv."') A LEFT JOIN (SELECT InvID,JSON_ARRAYAGG(JSON_OBJECT('InvKemasanID',InvKemasanID,'InvID',InvID,'SatuanID',SatuanID,'Qty',Qty,'UserID',UserID)) Kemasan FROM inv_produk_kemasan WHERE InvID='".$id_inv."') B ON (A.InvID=B.InvID) LEFT JOIN (SELECT InvID,JSON_ARRAYAGG(JSON_OBJECT('InvHargaID',InvHargaID,'InvID',InvID,'SatuanID',SatuanID,'Grup_OutletID',Grup_OutletID,'Tanggal',Tanggal,'Harga_Jual',Harga_Jual,'UserID',UserID)) Harga FROM inv_produk_harga WHERE InvID='".$id_inv."') C ON (A.InvID=C.InvID) LEFT JOIN (SELECT InvID,JSON_ARRAYAGG(JSON_OBJECT('InvVarianID',InvVarianID,'InvID',InvID,'RasaID',RasaID,'UserID',UserID)) Varian FROM inv_produk_varian WHERE InvID='".$id_inv."') D ON (A.InvID=D.InvID)");
}
function Produk_Restore($id_inv = 0, $md5_key = "") {
global $db;
if ($id_inv == 0) return;
$_json_produk = []; $_json_kemasan = []; $_json_harga = []; $_json_varian = []; $_userid = 0;
$tsql = ($md5_key == "") ? "ORDER BY Tanggal DESC" : "AND MD5Key='".$md5_key."'";
$db->Query("SELECT * FROM inv_produk_backup WHERE InvID='".$id_inv."' ".$tsql." LIMIT 1");
if ($db->Next()) {
$_json_produk = json_decode($db->Row("Produk", "[]"), true);
$_json_kemasan = json_decode($db->Row("Kemasan", "[]"), true);
$_json_harga = json_decode($db->Row("Harga", "[]"), true);
$_json_varian = json_decode($db->Row("Varian", "[]"), true);
$_userid = $db->Row("UserID", 0);
}
if (isset($_json_produk[0]['InvID'])) {
$db->Query("DELETE FROM inv_produk_kemasan WHERE InvID='".$id_inv."'");
$db->Query("DELETE FROM inv_produk_harga WHERE InvID='".$id_inv."'");
$db->Query("DELETE FROM inv_produk_varian WHERE InvID='".$id_inv."'");
foreach($_json_produk as $_key => $val) {
$db->Query("REPLACE INTO inv_produk (InvID,Grup_InvID,Kode_Produk,Nama_Produk,Kode_FP,StokID,NormalID,Harga_Pokok,Stok_Min,Pajak,Hadiah,Aktif,UserID) VALUES ('".$val['InvID']."','".$val['Grup_InvID']."','".$val['Kode_Produk']."','".$val['Nama_Produk']."','".$val['Kode_FP']."','".$val['StokID']."','".$val['NormalID']."','".$val['Harga_Pokok']."','".$val['Stok_Min']."','".$val['Pajak']."','".$val['Hadiah']."','".$val['Aktif']."','".$_userid."') LIMIT 1");
}
foreach($_json_kemasan as $_key => $val) {
$db->Query("REPLACE INTO inv_produk_kemasan (InvKemasanID,InvID,SatuanID,Qty,UserID) VALUES ('".$val['InvKemasanID']."','".$val['InvID']."','".$val['SatuanID']."','".$val['Qty']."','".$_userid."') LIMIT 1");
}
foreach($_json_harga as $_key => $val) {
$db->Query("REPLACE INTO inv_produk_harga (InvHargaID,InvID,SatuanID,Grup_OutletID,Tanggal,Harga_Jual,UserID) VALUES ('".$val['InvHargaID']."','".$val['InvID']."','".$val['SatuanID']."','".$val['Grup_OutletID']."','".$val['Tanggal']."','".$val['Harga_Jual']."','".$_userid."') LIMIT 1");
}
foreach($_json_varian as $_key => $val) {
$db->Query("REPLACE INTO inv_produk_varian (InvVarianID,InvID,RasaID,UserID) VALUES ('".$val['InvVarianID']."','".$val['InvID']."','".$val['RasaID']."','".$_userid."') LIMIT 1");
}
}
}
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode");
$mode_detail = Param::Get("mode_detail");
$id_inv = Param::Get("InvID", 0);
$id_varian = Param::Get("InvVarianID", 0);
$id_kemasan = Param::Get("InvKemasanID", 0);
$id_harga = Param::Get("InvHargaID", 0);
$md5_key = Param::Get("MD5Key", "");
$i_filt = Param::Get("Filter_Produk", 0);
if ( $data == "detail-produk" ) {
$atabel = ['InvID'=>0,'Grup_InvID'=>3,'StokID'=>$_SESSION['__APP_IAS']['DEF_SATUANID'],'NormalID'=>$_SESSION['__APP_IAS']['DEF_SATUANID'],'Pajak'=>1,'Hadiah'=>0,'Aktif'=>1];
if ($id_inv > 0) {
$db->Query("SELECT * FROM inv_produk WHERE InvID='".$id_inv."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
Produk_Backup($id_inv);
} else {
$atabel['InvID'] = Produk_Baru(true);
}
$form = new Form($db);
$tkode = $form->textbox("_", "Kode_Produk", $atabel['Kode_Produk'], true, true, "text", "kode produk");
$tnama = $form->textbox("_", "Nama_Produk", $atabel['Nama_Produk'], true, true, "text", "nama produk");
$tkode_fp = $form->textbox("_", "Kode_FP", $atabel['Kode_FP'], true, true, "text", "kode produk faktur pajak");
$tgrup = $form->option_db("_", "Grup_InvID", $atabel['Grup_InvID'], true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"&nbsp;"]);
$tstok = $form->option_db("_", "StokID", $atabel['StokID'], true, false, "para_satuan", ["SatuanID","Nama_Satuan"], "Aktif=1 ORDER BY Nama_Satuan", [0,"&nbsp;"]);
$tnormal = $form->option_db("_", "NormalID", $atabel['NormalID'], true, false, "para_satuan", ["SatuanID","Nama_Satuan"], "Aktif=1 ORDER BY Nama_Satuan", [0,"&nbsp;"]);
$thpp = $form->textbox("_", "Harga_Pokok", $atabel['Harga_Pokok'], true, true, "double", "harga pokok produk");
$tsmin = $form->textbox("_", "Stok_Min", $atabel['Stok_Min'], true, true, "double", "stok minimal produk");
$tpajak = $form->radio("_", "Pajak", $atabel['Pajak'], true, true, ['1'=>"Ya",'0'=>"Tidak"]);
$thadiah = $form->radio("_", "Hadiah", $atabel['Hadiah'], true, true, ['1'=>"Ya",'0'=>"Tidak"]);
$taktif = $form->radio("_", "Aktif", $atabel['Aktif'], true, true, ['1'=>"Ya",'0'=>"Tidak"]);
$ajson['html'] = '
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="produk-tab" data-bs-toggle="tab" data-bs-target="#produk" type="button" role="tab" aria-controls="produk" aria-selected="true">Informasi Produk</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="varian-tab" data-bs-toggle="tab" data-bs-target="#varian" type="button" role="tab" aria-controls="varian" aria-selected="false">Varian / Rasa</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="kemasan-tab" data-bs-toggle="tab" data-bs-target="#kemasan" type="button" role="tab" aria-controls="kemasan" aria-selected="false">Kemasan</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="harga-tab" data-bs-toggle="tab" data-bs-target="#harga" type="button" role="tab" aria-controls="harga" aria-selected="false">Harga Jual</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="produk" role="tabpanel" aria-labelledby="produk-tab">
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="Grup_InvID">Grup Produk</label>
<div class="col-sm-4 col-lg-5">'.$tgrup.'</div>
<div class="col-sm-4 col-lg-5 text-end"><label class="form-label me-3">Produk Aktif ?</label>'.$taktif.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="Kode_Produk">Kode Produk</label>
<div class="col-sm-4 col-lg-5">'.$tkode.'</div>
<label class="col-sm-2 col-lg-2 col-form-label" for="Kode_FP">Kode Produk FP</label>
<div class="col-sm-2 col-lg-3">'.$tkode_fp.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="Nama_Produk">Nama Produk</label>
<div class="col">'.$tnama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="StokID">Satuan Stok / Normal</label>
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$tstok.Form_Info("Ukuran satuan terkecil produk.").'</div></div>
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$tnormal.Form_Info("Ukuran satuan yang dipergunakan dalam transaksi normal dan laporan.").'</div></div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="Stok_Min">Stok Minimum</label>
<div class="col-sm-4 col-lg-5">'.$tsmin.'</div>
<div class="col-sm-4 col-lg-5 text-end"><label class="form-label me-3">Pajak ?</label>'.$tpajak.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="Harga_Pokok">Harga Pokok</label>
<div class="col-sm-4 col-lg-5">'.$thpp.'</div>
<div class="col-sm-4 col-lg-5 text-end"><label class="form-label me-3">Hadiah ?</label>'.$thadiah.'</div>
</div>
</div>
<div class="tab-pane fade" id="varian" role="tabpanel" aria-labelledby="varian-tab">
<div class="row"><div class="col" id="divVarian"></div></div>
</div>
<div class="tab-pane fade" id="kemasan" role="tabpanel" aria-labelledby="kemasan-tab">
<div class="row"><div class="col" id="divKemasan"></div></div>
</div>
<div class="tab-pane fade" id="harga" role="tabpanel" aria-labelledby="harga-tab">
<div class="row"><div class="col" id="divHarga"></div></div>
</div>
</div>
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'" />
<input type="hidden" id="mode" value="'.$mode.'" />
';
} else if ( $data == "save" ) {
if ($mode == "cancel") {
if (Param::Get("mode_before")=="add") {
$db->Query("DELETE FROM inv_produk_kemasan WHERE InvID='".$id_inv."'");
$db->Query("DELETE FROM inv_produk_harga WHERE InvID='".$id_inv."'");
$db->Query("DELETE FROM inv_produk_varian WHERE InvID='".$id_inv."'");
$db->Query("DELETE FROM inv_produk WHERE InvID='".$id_inv."'");
} else {
Produk_Restore($id_inv);
}
} else {
$sql = new SQL($db);
$sql->set_table("inv_produk");
$sql->add_param("Grup_InvID");
$sql->add_param("Kode_Produk");
$sql->add_param("Nama_Produk");
$sql->add_param("Kode_FP");
$sql->add_param("StokID");
$sql->add_param("NormalID");
$sql->add_param("Harga_Pokok");
$sql->add_param("Stok_Min");
$sql->add_param("Pajak");
$sql->add_param("Hadiah");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("InvID");
if (in_array($mode, ["add","edit"])) {
$sql->UpdateDB();
} else if ($mode=="del") {
$sql->DeleteDB();
$db->Query("DELETE FROM inv_produk_kemasan WHERE InvID='".$id_inv."'");
$db->Query("DELETE FROM inv_produk_harga WHERE InvID='".$id_inv."'");
$db->Query("DELETE FROM inv_produk_varian WHERE InvID='".$id_inv."'");
}
if ($mode <> "del") {
Produk_Backup($id_inv);
}
}
$ajson['status'] = true;
} else if ( $data == "tabel-produk" ) {
$tcari = trim(Param::Get("Cari_Produk"));
$tsql = ($tcari=="") ? "" : " AND CONCAT(Kode_Produk,Nama_Produk) LIKE '%".$tcari."%'";
$tsql .= ($i_filt==0) ? "" : " AND Grup_InvID='".$i_filt."'";
if (strlen($tsql)>0) $tsql = " WHERE ".substr($tsql, 4);
$obj = new Table($db);
$obj->set_query("SELECT * FROM vi_inv_produk".$tsql);
$obj->add_field("InvID", "ID", "hid");
$obj->add_field("Kode_Produk", "Kode", "l");
$obj->add_field("Nama_Produk", "Nama Produk", "awr");
$obj->add_field("Satuan_Stok", "Satuan Stok");
$obj->add_field("Harga_Pokok", "Harga Pokok", "r", "rupiah");
$obj->add_field("Stok_Min", "Stok Min", "r", "rupiah");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Kode_Produk", "A");
$obj->add_row_btn("clipboard", "Ubah", "ProdukJS.produk_ubah");
if (user_level(2)) $obj->add_row_btn("arrow-counterclockwise", "Restore", "ProdukJS.produk_restore");
$obj->add_row_btn("trash", "Hapus", "ProdukJS.produk_hapus");
$obj->set_func_navi("ProdukJS.data_query('tabel-produk')");
$obj->set_func_btn("ProdukJS.produk_tambah", "+ Produk");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "tabel-varian" ) {
if (in_array($mode_detail, ["update","delete"])) {
$sql = new SQL($db);
$sql->set_table("inv_produk_varian");
$sql->add_param("RasaID");
$sql->add_param_userid();
$sql->add_where("InvVarianID", $id_varian);
if ($mode_detail=="update") {
if ($id_varian == 0) {
$sql->add_param("InvID");
$sql->InsertDB();
} else {
$sql->UpdateDB();
}
} else if ($mode_detail=="delete") {
$sql->DeleteDB();
}
}
$obj = new Table($db);
$obj->set_query("SELECT S.*,T.Kode_Rasa,T.Nama_Rasa FROM (SELECT * FROM inv_produk_varian WHERE InvID='".$id_inv."') S LEFT JOIN para_rasa T ON (S.RasaID=T.RasaID)");
$obj->add_field("InvVarianID", "ID", "hid");
$obj->add_field("Kode_Rasa", "Kode", "l");
$obj->add_field("Nama_Rasa", "Varian / Rasa", "awr");
$obj->set_field_order("Kode_Rasa", "A");
$obj->add_row_form("pencil-square", "Detail", "ProdukJS.varian_form");
$obj->add_row_btn("trash", "Hapus", "ProdukJS.varian_del");
$obj->set_func_btn("ProdukJS.varian_add", "+ Varian / Rasa");
$ajson[] = $obj->json_table("divVarian");
} else if ( $data == "detail-varian" ) {
$arec = ['InvVarianID'=>0,'RasaID'=>0];
if ($id_varian > 0) {
$db->Query("SELECT * FROM inv_produk_varian WHERE InvVarianID='".$id_varian."' LIMIT 1");
if ($db->Next()) $arec = $db->AllRow();
}
$form = new Form($db);
$trasa = $form->option_que("_", "RasaID", $arec['RasaID'], true, false, "SELECT * FROM para_rasa WHERE Aktif=1 AND RasaID NOT IN (SELECT RasaID FROM inv_produk_varian WHERE InvID='".$id_inv."' AND InvVarianID<>'".$id_varian."') ORDER BY Nama_Rasa", ["RasaID","Nama_Rasa"]);
$ajson['html'] = '
<div class="card"><div class="card-body">
<div class="row">
<label class="col-sm-4 col-lg-2 col-form-label" for="RasaID">Nama Varian / Rasa</label>
<div class="col-sm-5">'.$trasa.'</div>
<div class="col text-end"><button type="button" class="btn btn-warning shadow-none me-2" id="butBatalVarian">Batal</button><button type="button" class="btn btn-success shadow-none" id="butSimpanVarian">Simpan</button></div>
</div>
<input type="hidden" id="InvVarianID" value="'.$arec['InvVarianID'].'">
</div></div>';
} else if ( $data == "tabel-kemasan" ) {
if (in_array($mode_detail, ["update","delete"])) {
$sql = new SQL($db);
$sql->set_table("inv_produk_kemasan");
$sql->add_param("SatuanID");
$sql->add_param("Qty");
$sql->add_param_userid();
$sql->add_where("InvKemasanID", $id_kemasan);
if ($mode_detail=="update") {
if ($id_kemasan == 0) {
$sql->add_param("InvID");
$sql->InsertDB();
} else {
$sql->UpdateDB();
if (Param::Get("SatuanID")<>Param::Get("SatuanLamaID")) {
$db->Query("UPDATE inv_produk_harga SET SatuanID='".Param::Get("SatuanID")."' WHERE InvID='".$id_inv."' AND SatuanID='".Param::Get("SatuanLamaID")."'");
}
}
} else if ($mode_detail=="delete") {
$sql->DeleteDB();
$db->Query("DELETE FROM inv_produk_harga WHERE InvID='".Param::Get("InvID")."' AND SatuanID='".Param::Get("SatuanLamaID")."'");
}
}
$obj = new Table($db);
$obj->set_query("SELECT S.*,T.Nama_Satuan FROM (SELECT * FROM inv_produk_kemasan WHERE InvID='".$id_inv."') S LEFT JOIN para_satuan T ON (S.SatuanID=T.SatuanID)");
$obj->add_field("InvKemasanID", "ID", "hid");
$obj->add_field("Nama_Satuan", "Nama Kemasan");
$obj->add_field("Qty", "Qty", "r", "rupiah");
$obj->set_field_order("Nama_Satuan", "A");
$obj->add_row_form("pencil-square", "Detail", "ProdukJS.kemasan_form");
$obj->add_row_btn("trash", "Hapus", "ProdukJS.kemasan_del");
$obj->set_func_btn("ProdukJS.kemasan_add", "+ Kemasan");
$ajson[] = $obj->json_table("divKemasan");
} else if ( $data == "detail-kemasan" ) {
$arec = ['InvKemasanID'=>0,'SatuanID'=>0,'Qty'=>0];
if ($id_kemasan > 0) {
$db->Query("SELECT * FROM inv_produk_kemasan WHERE InvKemasanID='".$id_kemasan."' LIMIT 1");
if ($db->Next()) $arec = $db->AllRow();
}
$form = new Form($db);
$tsatuan = $form->option_db("_", "SatuanID", $arec['SatuanID'], true, false, "para_satuan", ["SatuanID","Nama_Satuan"], "Aktif=1 ORDER BY Nama_Satuan");
$tqty = $form->textbox("_", "Qty", $arec['Qty'], true, true, "number", "qty");
$ajson['html'] = '
<div class="card"><div class="card-body">
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="SatuanID">Satuan Kemasan</label>
<div class="col-sm-5">'.$tsatuan.'</div>
</div>
<div class="row">
<label class="col-sm-4 col-lg-2 col-form-label" for="Qty">Qty / Kemasan</label>
<div class="col-sm-5">'.$tqty.'</div>
<div class="col text-end"><button type="button" class="btn btn-warning shadow-none me-2" id="butBatalKemasan">Batal</button><button type="button" class="btn btn-success shadow-none" id="butSimpanKemasan">Simpan</button></div></div>
</div>
<input type="hidden" id="InvKemasanID" value="'.$arec['InvKemasanID'].'">
<input type="hidden" id="SatuanLamaID" value="'.$arec['SatuanID'].'">
</div></div>';
} else if ( $data == "check-kemasan") {
$ajson['ada'] = false;
$db->Query("SELECT COUNT(*) Jumlah FROM inv_produk_kemasan WHERE InvID='".$id_inv."' AND SatuanID='".Param::Get("SatuanID")."'");
if ($db->Next() && $db->Row("Jumlah",0)>0) $ajson['ada'] = true;
} else if ( $data == "tabel-harga" ) {
if (in_array($mode_detail, ["update","delete"])) {
$sql = new SQL($db);
$sql->set_table("inv_produk_harga");
$sql->add_param("SatuanID");
$sql->add_param("Grup_OutletID");
$sql->add_param_date("Tanggal");
$sql->add_param("Harga_Jual");
$sql->add_param_userid();
$sql->add_where("InvHargaID", $id_harga);
if ($mode_detail=="update") {
if ($id_harga == 0) {
$sql->add_param("InvID");
$sql->InsertDB();
} else {
$sql->UpdateDB();
}
} else if ($mode_detail=="delete") {
$sql->DeleteDB();
}
}
$obj = new Table($db);
$obj->set_query("SELECT H.*,S.Nama_Satuan,G.Nama_Grup FROM inv_produk_harga H LEFT JOIN para_satuan S ON (H.SatuanID=S.SatuanID) LEFT JOIN para_outlet_grup G ON (H.Grup_OutletID=G.Grup_OutletID) WHERE H.InvID='".$id_inv."'");
$obj->add_field("InvHargaID", "ID", "hid");
$obj->add_field("Nama_Satuan", "Nama Kemasan");
$obj->add_field("Nama_Grup", "Grup Outlet");
$obj->add_field("Tanggal", "Tanggal", "c", "sqltgl", "", "val-tgl");
$obj->add_field("Harga_Jual", "Harga Jual", "r", "rupiah");
$obj->set_field_order("Nama_Satuan", "A");
$obj->add_row_form("pencil-square", "Detail", "ProdukJS.harga_form");
$obj->add_row_btn("trash", "Hapus", "ProdukJS.harga_del");
$obj->set_func_btn("ProdukJS.harga_add", "+ Harga Jual");
$ajson[] = $obj->json_table("divHarga");
} else if ( $data == "detail-harga" ) {
$arec = ['InvHargaID'=>0,'SatuanID'=>0,'Grup_OutletID'=>0,'Tanggal'=>tgl_ymd(),'Harga_Jual'=>0];
if ($id_harga > 0) {
$db->Query("SELECT * FROM inv_produk_harga WHERE InvHargaID='".$id_harga."' LIMIT 1");
if ($db->Next()) $arec = $db->AllRow();
}
$form = new Form($db);
$tsatuan = $form->option_que("_", "SatuanID", $arec['SatuanID'], true, true, "SELECT * FROM para_satuan WHERE Aktif=1 AND SatuanID IN (SELECT SatuanID FROM inv_produk_kemasan WHERE InvID='".$id_inv."') ORDER BY Nama_Satuan", ["SatuanID","Nama_Satuan"]);
$tqty = $form->textbox("_", "Qty", $arec['Qty'], true, true, "number", "qty");
$tgrup = $form->option_db("_", "Grup_OutletID", $arec['Grup_OutletID'], true, true, "para_outlet_grup", ["Grup_OutletID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup");
$ttgl = $form->datebox("_", "Tanggal", $arec['Tanggal'], true, true);
$tharga = $form->textbox("_", "Harga_Jual", $arec['Harga_Jual'], true, true, "double", "harga jual");
$ajson['html'] = '
<div class="card"><div class="card-body">
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="SatuanID">Satuan Kemasan</label>
<div class="col-sm-5">'.$tsatuan.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="Grup_OutletID">Grup Outlet</label>
<div class="col-sm-5">'.$tgrup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="Tanggal">Tanggal Update</label>
<div class="col-sm-5">'.$ttgl.'</div>
</div>
<div class="row">
<label class="col-sm-4 col-lg-2 col-form-label" for="Harga_Jual">Harga Jual</label>
<div class="col-sm-5">'.$tharga.'</div>
<div class="col text-end"><button type="button" class="btn btn-warning shadow-none me-2" id="butBatalHarga">Batal</button><button type="button" class="btn btn-success shadow-none" id="butSimpanHarga">Simpan</button></div>
</div>
<input type="hidden" id="InvHargaID" value="'.$arec['InvHargaID'].'">
<input type="hidden" id="SatuanLamaID" value="'.$arec['SatuanID'].'">
<input type="hidden" id="GrupLamaID" value="'.$arec['Grup_OutletID'].'">
<input type="hidden" id="TanggalLama" value="'.$arec['Tanggal'].'">
</div></div>';
} else if ( $data == "check-harga") {
$ajson['ada'] = false;
$db->Query("SELECT COUNT(*) Jumlah FROM inv_produk_harga WHERE InvID='".$id_inv."' AND SatuanID='".Param::Get("SatuanID")."' AND Grup_OutletID='".Param::Get("Grup_OutletID")."' AND Tanggal='".tgl_sql2str(Param::Get("Tanggal"))."'");
if ($db->Next() && $db->Row("Jumlah",0)>0) $ajson['ada'] = true;
} else if ($data == "detail-filter") {
$form = new Form($db);
$tfilter = $form->option_db("_", "Fi_Produk", Param::Get("Filter_Produk",0), true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Aktif=1 ORDER BY Nama_Grup", [0,"SEMUA GRUP PRODUK"]);
echo '
<div class="row mb-1"><div class="col text-center">Tampilan Berdasarkan :</div></div>
<div class="row mb-1"><div class="col">'.$tfilter.'</div></div>
';
} else if ( $data == "restore-detail" ) {
$atabel = ['InvID'=>$id_inv];
if ($id_inv > 0) {
$db->Query("SELECT * FROM inv_produk WHERE InvID='".$id_inv."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$tnama = $form->textbox("_", "Nama_Produk", $atabel['Nama_Produk'], false, false, "text");
$ajson['html'] = '
<div class="row mb-1"><div class="col">'.$tnama.'</div></div>
<div id="divBrowBackup">&nbsp;</div>
<input type="hidden" id="InvID" value="'.$atabel['InvID'].'">
</div></div>';
} else if ( $data == "restore-tabel" ) {
$obj = new Table($db);
$obj->set_table("inv_produk_backup", "Tanggal,MD5Key,UserID", "InvID='".$id_inv."'");
$obj->add_field("Tanggal", "Waktu Backup", "c nwr", "sqljam", "", "val-tgljam");
$obj->add_field("MD5Key", "Kode Backup", "l");
$obj->set_field_order("Tanggal", "A");
$obj->add_row_form("list", "Detail", "ProdukJS.produk_restore_form");
$obj->add_row_btn("arrow-counterclockwise", "Restore", "ProdukJS.produk_restore_select");
$obj->set_func_navi("ProdukJS.data_query('restore-tabel')");
$ajson[] = $obj->db_table("divBrowBackup");
} else if ($data == "restore-proses") {
Produk_Restore($id_inv, $md5_key);
$ajson['status'] = true;
} else if ( $data == "restore-form" ) {
$atabel = ['InvID'=>$id_inv, 'Nama_Grup'=>"", 'Nama_Stok'=>"", 'Nama_Normal'=>""];
$akemasan = []; $aharga = []; $avarian = [];
if ($md5_key <> "") {
$db->Query("SELECT * FROM inv_produk_backup WHERE MD5Key='".$md5_key."' LIMIT 1");
if ($db->Next()) {
$atabel = array_merge($atabel, json_decode($db->Row("Produk", "[]"), true)[0]);
$akemasan = json_decode($db->Row("Kemasan", "[]"), true);
$aharga = json_decode($db->Row("Harga", "[]"), true);
$avarian = json_decode($db->Row("Varian", "[]"), true);
}
$db->Query("SELECT Nama_Grup FROM inv_produk_grup WHERE Grup_InvID='".$atabel['Grup_InvID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
$db->Query("SELECT Nama_Satuan Nama_Stok FROM para_satuan WHERE SatuanID='".$atabel['StokID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
$db->Query("SELECT Nama_Satuan Nama_Normal FROM para_satuan WHERE SatuanID='".$atabel['NormalID']."' LIMIT 1");
if ($db->Next()) $atabel = array_merge($atabel, $db->AllRow());
$atabel['Status_Pajak'] = ($atabel['Pajak']==1) ? "Ya" : "Tidak";
$atabel['Status_Hadiah'] = ($atabel['Hadiah']==1) ? "Ya" : "Tidak";
$atabel['Status_Aktif'] = ($atabel['Aktif']==1) ? "Aktif" : "Tidak Aktif";
}
$tgrup = '<input type="text" class="form-control" value="'.$atabel['Nama_Grup'].'" readonly="">';
$taktif = '<input type="text" class="form-control" value="'.$atabel['Status_Aktif'].'" readonly="">';
$tkode = '<input type="text" class="form-control" value="'.$atabel['Kode_Produk'].'" readonly="">';
$tkodefp = '<input type="text" class="form-control" value="'.$atabel['Kode_FP'].'" readonly="">';
$tnama = '<input type="text" class="form-control" value="'.$atabel['Nama_Produk'].'" readonly="">';
$tstok = '<input type="text" class="form-control" value="'.$atabel['Nama_Stok'].'" readonly="">';
$tnormal = '<input type="text" class="form-control" value="'.$atabel['Nama_Normal'].'" readonly="">';
$tsmin = '<input type="text" class="form-control text-end" value="'.rupiah($atabel['Stok_Min']).'" readonly="">';
$thpp = '<input type="text" class="form-control text-end" value="'.rupiah($atabel['Harga_Pokok']).'" readonly="">';
$tpajak = '<input type="text" class="form-control" value="'.$atabel['Status_Pajak'].'" readonly="">';
$thadiah = '<input type="text" class="form-control" value="'.$atabel['Status_Hadiah'].'" readonly="">';
$ajson['html'] = '
<div class="card"><div class="card-body">
<div class="accordion" id="accorProduk">
<!-- start produk -->
<div class="accordion-item">
<h2 class="accordion-header" id="flush-one"><button class="accordion-button bg-info bg-gradient" style="--bs-bg-opacity: .5;" type="button" data-bs-toggle="collapse" data-bs-target="#flush-coll-one" aria-controls="flush-coll-one" aria-expanded="true">Informasi Produk</button></h2>
<div id="flush-coll-one" class="accordion-collapse collapse show" aria-labelledby="flush-head-one" data-bs-parent="#accorProduk">
<div class="accordion-body">
<div class="row mb-1">
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Grup Produk</span>'.$tgrup.'</div></div>
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Status Produk</span>'.$taktif.'</div></div>
</div>
<div class="row mb-1">
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Kode Produk</span>'.$tkode.'</div></div>
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Kode Produk FP</span>'.$tkodefp.'</div></div>
</div>
<div class="row mb-1">
<div class="col-sm-12 col-lg-12"><div class="input-group"><span class="input-group-text" style="width:160px;">Nama Produk</span>'.$tnama.'</div></div>
</div>
<div class="row mb-1">
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Satuan Stok</span>'.$tstok.'</div></div>
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Satuan Normal</span>'.$tnormal.'</div></div>
</div>
<div class="row mb-1">
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Stok Minimum</span>'.$tsmin.'</div></div>
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Status Pajak</span>'.$tpajak.'</div></div>
</div>
<div class="row mb-1">
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Harga Pokok</span>'.$thpp.'</div></div>
<div class="col-sm-12 col-lg-6"><div class="input-group"><span class="input-group-text" style="width:160px;">Status Hadiah</span>'.$thadiah.'</div></div>
</div>
</div></div></div>
<!-- end produk -->
<!-- start varian -->
<div class="accordion-item">
<h2 class="accordion-header" id="flush-two"><button class="accordion-button bg-warning bg-gradient collapsed" style="--bs-bg-opacity: .5;" type="button" data-bs-toggle="collapse" data-bs-target="#flush-coll-two" aria-controls="flush-coll-two" aria-expanded="false">Varian / Rasa</button></h2>
<div id="flush-coll-two" class="accordion-collapse collapse" aria-labelledby="flush-head-two" data-bs-parent="#accorProduk">
<div class="accordion-body">
<div class="row mb-1">
<div class="col">
<table class="table table-striped table-bordered table-hover dataTable no-footer dtr-inline">
<thead><tr><th class="l">Kode</th><th class="awr">Varian / Rasa</th></tr></thead>
<tbody>';
if (count($avarian) == 0) {
$ajson['html'] .= '<tr><td class="c" colspan="2">belum ada data</td></tr>';
}
foreach($avarian as $_key => $val) {
$db->Query("SELECT * FROM para_rasa WHERE RasaID='".$val['RasaID']."' LIMIT 1");
if ($db->Next()) $val = array_merge($val, $db->AllRow());
$ajson['html'] .= sprintf('<tr><td class="l">%s</td><td class="awr">%s</td></tr>', $val['Kode_Rasa'], $val['Nama_Rasa']);
}
$ajson['html'] .= '
</tbody>
</table>
</div>
</div>
</div></div></div>
<!-- end varian -->
<!-- start kemasan -->
<div class="accordion-item">
<h2 class="accordion-header" id="flush-tri"><button class="accordion-button bg-secondary bg-gradient collapsed" style="--bs-bg-opacity: .5;" type="button" data-bs-toggle="collapse" data-bs-target="#flush-coll-tri" aria-controls="flush-coll-tri" aria-expanded="false">Kemasan</button></h2>
<div id="flush-coll-tri" class="accordion-collapse collapse" aria-labelledby="flush-head-tri" data-bs-parent="#accorProduk">
<div class="accordion-body">
<div class="row mb-1">
<div class="col">
<table class="table table-striped table-bordered table-hover dataTable no-footer dtr-inline">
<thead><tr><th class="l">Nama Kemasan</th><th class="r">Qty</th></tr></thead>
<tbody>';
if (count($akemasan) == 0) {
$ajson['html'] .= '<tr><td class="c" colspan="2">belum ada data</td></tr>';
}
foreach($akemasan as $_key => $val) {
$db->Query("SELECT * FROM para_satuan WHERE SatuanID='".$val['SatuanID']."' LIMIT 1");
if ($db->Next()) $val = array_merge($val, $db->AllRow());
$ajson['html'] .= sprintf('<tr><td class="l">%s</td><td class="r">%s</td></tr>', $val['Nama_Satuan'], rupiah($val['Qty']));
}
$ajson['html'] .= '
</tbody>
</table>
</div>
</div>
</div></div></div>
<!-- end kemasan -->
<!-- start harga -->
<div class="accordion-item">
<h2 class="accordion-header" id="flush-four"><button class="accordion-button bg-success bg-gradient collapsed" style="--bs-bg-opacity: .5;" type="button" data-bs-toggle="collapse" data-bs-target="#flush-coll-four" aria-controls="flush-coll-four" aria-expanded="false">Harga Jual</button></h2>
<div id="flush-coll-four" class="accordion-collapse collapse" aria-labelledby="flush-head-four" data-bs-parent="#accorProduk">
<div class="accordion-body">
<div class="row mb-1">
<div class="col">
<table class="table table-striped table-bordered table-hover dataTable no-footer dtr-inline">
<thead><tr><th class="l">Nama Kemasan</th><th class="l">Grup Outlet</th><th class="c">Tanggal</th><th class="r">Harga Jual</th></tr></thead>
<tbody>';
if (count($aharga) == 0) {
$ajson['html'] .= '<tr><td class="c" colspan="4">belum ada data</td></tr>';
}
foreach($aharga as $_key => $val) {
$db->Query("SELECT * FROM para_satuan WHERE SatuanID='".$val['SatuanID']."' LIMIT 1");
if ($db->Next()) $val = array_merge($val, $db->AllRow());
$db->Query("SELECT * FROM para_outlet_grup WHERE Grup_OutletID='".$val['Grup_OutletID']."' LIMIT 1");
if ($db->Next()) $val = array_merge($val, $db->AllRow());
$ajson['html'] .= sprintf('<tr><td class="l">%s</td><td class="l">%s</td><td class="c">%s</td><td class="r">%s</td></tr>', $val['Nama_Satuan'], $val['Nama_Grup'], $val['Tanggal'], rupiah($val['Harga_Jual']));
}
$ajson['html'] .= '
</tbody>
</table>
</div>
</div>
</div></div></div>
<!-- end harga -->
</div>
</div></div>';
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Produk</div><div class="card-body"><div class="row mb-1"><div class="col d-flex justify-content-between"><div class="input-group me-3"><input class="form-control" id="Cari_Produk" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div><button class="btn btn-secondary shadow-none" type="button" id="butFilter">Filter</button><input type="hidden" id="Filter_Produk" value="0" /></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+88
View File
@@ -0,0 +1,88 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/tab/produk_grup.php
Desc. : PHP - Tabel Master Grup Produk
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : February 8th, 2011.
Last Modified : March 19th, 2023.
(c) 2011 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode");
$id_tm = Param::Get("Grup_InvID", 0);
if ( $data == "grup-detail" ) {
$atabel = ['Grup_InvID'=>0,'Aktif'=>1];
if ($id_tm > 0) {
$db->Query("SELECT * FROM inv_produk_grup WHERE Grup_InvID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$form->textbox("Kode Grup Produk", "Kode_Grup", $atabel['Kode_Grup'], true, true, "text", "kode grup produk");
$form->textbox("Nama Grup Produk", "Nama_Grup", $atabel['Nama_Grup'], true, true, "text", "nama grup produk");
$form->switch("Status Aktif", "Aktif", $atabel['Aktif'], true, true, [1,0]);
$form->hidden("Grup_InvID", $atabel['Grup_InvID']);
$form->hidden("mode", $mode);
$form->show(' _Kode_Grup_ _Nama_Grup_ _Aktif_ _mode_ _Grup_InvID_ ');
} else if ( $data == "save" ) {
$sql = new SQL($db);
$sql->set_table("inv_produk_grup");
$sql->add_param("Kode_Grup");
$sql->add_param("Nama_Grup");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("Grup_InvID");
if ($mode=="add") {
$sql->InsertDB();
} else if ($mode=="edit") {
$sql->UpdateDB();
} else if ($mode=="del") {
$sql->DeleteDB();
}
$ajson['status'] = true;
} else if ( $data == "detail" ) {
$tcari = trim(Param::Get("Cari_Grup"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(Kode_Grup,Nama_Grup) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM inv_produk_grup".$tsql);
$obj->add_field("Grup_InvID", "ID", "hid");
$obj->add_field("Kode_Grup", "Kode Grup");
$obj->add_field("Nama_Grup", "Nama Grup", "awr");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Kode_Grup", "A");
$obj->add_row_btn("clipboard", "Ubah", "ProdukGrupJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "ProdukGrupJS.detail_hapus");
$obj->set_func_navi("ProdukGrupJS.data_query('detail')");
$obj->set_func_btn("ProdukGrupJS.detail_tambah", "+ Grup Produk");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Grup Produk</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Grup" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+88
View File
@@ -0,0 +1,88 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/tab/rasa.php
Desc. : PHP - Tabel Master Rasa Produk
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : December 7th, 2010.
Last Modified : March 19th, 2023.
(c) 2010 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode");
$id_tm = Param::Get("RasaID", 0);
if ( $data == "rasa-detail" ) {
$atabel = ['RasaID'=>0,'Aktif'=>1];
if ($id_tm > 0) {
$db->Query("SELECT * FROM para_rasa WHERE RasaID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$form->textbox("Kode Rasa Produk", "Kode_Rasa", $atabel['Kode_Rasa'], true, true, "text", "kode rasa produk");
$form->textbox("Nama Rasa Produk", "Nama_Rasa", $atabel['Nama_Rasa'], true, true, "text", "nama rasa produk");
$form->switch("Status Aktif", "Aktif", $atabel['Aktif'], true, true, [1,0]);
$form->hidden("RasaID", $atabel['RasaID']);
$form->hidden("mode", $mode);
$form->show(' _Kode_Rasa_ _Nama_Rasa_ _Aktif_ _mode_ _RasaID_ ');
} else if ( $data == "save" ) {
$sql = new SQL($db);
$sql->set_table("para_rasa");
$sql->add_param("Kode_Rasa");
$sql->add_param("Nama_Rasa");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("RasaID");
if ($mode=="add") {
$sql->InsertDB();
} else if ($mode=="edit") {
$sql->UpdateDB();
} else if ($mode=="del") {
$sql->DeleteDB();
}
$ajson['status'] = true;
} else if ( $data == "detail" ) {
$tcari = trim(Param::Get("Cari_Rasa"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(Kode_Rasa,Nama_Rasa) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM para_rasa".$tsql);
$obj->add_field("RasaID", "ID", "hid");
$obj->add_field("Kode_Rasa", "Kode Rasa");
$obj->add_field("Nama_Rasa", "Nama Rasa Produk", "awr");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Kode_Rasa", "A");
$obj->add_row_btn("clipboard", "Ubah", "RasaJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "RasaJS.detail_hapus");
$obj->set_func_navi("RasaJS.data_query('detail')");
$obj->set_func_btn("RasaJS.detail_tambah", "+ Rasa Produk");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Rasa Produk</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Rasa" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+88
View File
@@ -0,0 +1,88 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/tab/satuan.php
Desc. : PHP - Tabel Master Satuan Produk
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : May 19th, 2010.
Last Modified : March 19th, 2023.
(c) 2010 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode");
$id_tm = Param::Get("SatuanID", 0);
if ( $data == "satuan-detail" ) {
$atabel = ['SatuanID'=>0,'Aktif'=>1];
if ($id_tm > 0) {
$db->Query("SELECT * FROM para_satuan WHERE SatuanID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$form->textbox("Kode Satuan", "Kode_Satuan", $atabel['Kode_Satuan'], true, true, "text", "kode satuan produk");
$form->textbox("Nama Satuan Produk", "Nama_Satuan", $atabel['Nama_Satuan'], true, true, "text", "nama satuan produk");
$form->switch("Status Aktif", "Aktif", $atabel['Aktif'], true, true, [1,0]);
$form->hidden("SatuanID", $atabel['SatuanID']);
$form->hidden("mode", $mode);
$form->show(' _Kode_Satuan_ _Nama_Satuan_ _Aktif_ _mode_ _SatuanID_ ');
} else if ( $data == "save" ) {
$sql = new SQL($db);
$sql->set_table("para_satuan");
$sql->add_param("Kode_Satuan");
$sql->add_param("Nama_Satuan");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("SatuanID");
if ($mode=="add") {
$sql->InsertDB();
} else if ($mode=="edit") {
$sql->UpdateDB();
} else if ($mode=="del") {
$sql->DeleteDB();
}
$ajson['status'] = true;
} else if ( $data == "detail" ) {
$tcari = trim(Param::Get("Cari_Satuan"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(Kode_Satuan,Nama_Satuan) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM para_satuan".$tsql);
$obj->add_field("SatuanID", "ID", "hid");
$obj->add_field("Kode_Satuan", "Kode");
$obj->add_field("Nama_Satuan", "Nama Satuan Produk", "awr");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Kode_Satuan", "A");
$obj->add_row_btn("clipboard", "Ubah", "SatuanJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "SatuanJS.detail_hapus");
$obj->set_func_navi("SatuanJS.data_query('detail')");
$obj->set_func_btn("SatuanJS.detail_tambah", "+ Satuan");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Satuan Produk</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Satuan" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+99
View File
@@ -0,0 +1,99 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/tab/supplier.php
Desc. : PHP - Tabel Master Supplier
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : December 7th, 2010.
Last Modified : March 19th, 2023.
(c) 2010 - 2023, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$mode = Param::Get("mode");
$id_tm = Param::Get("SupID", 0);
if ( $data == "sup-detail" ) {
$atabel = ['SupID'=>0,'Aktif'=>1];
if ($id_tm > 0) {
$db->Query("SELECT * FROM para_supplier WHERE SupID='".$id_tm."' LIMIT 1");
if ($db->Next()) $atabel = $db->AllRow();
}
$form = new Form($db);
$form->textbox("Kode Supplier", "Kode_Sup", $atabel['Kode_Sup'], true, true, "text", "kode supplier");
$form->textbox("Nama Supplier", "Nama_Sup", $atabel['Nama_Sup'], true, true, "text", "nama supplier");
$form->textarea("Alamat Supplier", "Alamat_Sup", $atabel['Alamat_Sup'], true, true, 3, "alamat supplier");
$form->textbox("Kota Supplier", "Kota_Sup", $atabel['Kota_Sup'], true, true, "text", "kota supplier");
$form->textbox("Telp Supplier", "Telp_Sup", $atabel['Telp_Sup'], true, true, "text", "telp supplier");
$form->textbox("NPWP Supplier", "No_NPWP", $atabel['No_NPWP'], true, true, "text", "0000000000000000", 16);
$form->textbox("NITKU Supplier", "No_NITKU", $atabel['No_NITKU'], true, true, "text", "000000", 6);
$form->switch("Status Aktif", "Aktif", $atabel['Aktif'], true, true, [1,0]);
$form->hidden("SupID", $atabel['SupID']);
$form->hidden("mode", $mode);
$form->show(' _Kode_Sup_ _Nama_Sup_ _Alamat_Sup_ _Kota_Sup_ _Telp_Sup_ _No_NPWP_ _No_NITKU_ _Aktif_ _mode_ _SupID_ ');
} else if ( $data == "save" ) {
$sql = new SQL($db);
$sql->set_table("para_supplier");
$sql->add_param("Kode_Sup");
$sql->add_param("Nama_Sup");
$sql->add_param("Alamat_Sup");
$sql->add_param("Kota_Sup");
$sql->add_param("Telp_Sup");
$sql->add_param("No_NPWP");
$sql->add_param("No_NITKU");
$sql->add_param("Aktif");
$sql->add_param_userid();
$sql->add_where("SupID");
if ($mode=="add") {
$sql->InsertDB();
} else if ($mode=="edit") {
$sql->UpdateDB();
} else if ($mode=="del") {
$sql->DeleteDB();
}
$ajson['status'] = true;
} else if ( $data == "detail" ) {
$tcari = trim(Param::Get("Cari_Sup"));
$tsql = ($tcari=="") ? "" : " WHERE CONCAT(Kode_Sup,Nama_Sup,Telp_Sup) LIKE '%".$tcari."%'";
$obj = new Table($db);
$obj->set_query("SELECT * FROM para_supplier".$tsql);
$obj->add_field("SupID", "ID", "hid");
$obj->add_field("Kode_Sup", "Kode Supplier");
$obj->add_field("Nama_Sup", "Nama Supplier", "awr");
$obj->add_field("Telp_Sup", "No. Telp", "l");
$obj->add_field("Aktif", "Aktif", "c", "checkbox");
$obj->set_field_order("Kode_Sup", "A");
$obj->add_row_btn("clipboard", "Ubah", "SupplierJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "SupplierJS.detail_hapus");
$obj->set_func_navi("SupplierJS.data_query('detail')");
$obj->set_func_btn("SupplierJS.detail_tambah", "+ Supplier");
$ajson[] = $obj->json_table("divDetail");
} else if ( $data == "default") {
echo '
<div class="fade-in">
<div class="card"><div class="card-header custom-style">Daftar Supplier</div><div class="card-body"><div class="row mb-1"><div class="col"><div class="input-group"><input class="form-control" id="Cari_Sup" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button><button class="btn btn-secondary shadow-none" type="button" id="butAll">Semua</button></div></div></div><div id="divDetail">&nbsp;</div></div></div>
</div>';
}
send_json($ajson);
?>
+113
View File
@@ -0,0 +1,113 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/xls/jual.php
Desc. : PHP - Export XLS Penjualan
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : April 2rd, 2011.
Last Modified : July 5th, 2025.
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.php");
use siaupheng\fonia3\DB\MySQL;
use siaupheng\fonia3\DB\SQL;
use siaupheng\fonia3\Web\Param;
use siaupheng\fonia3\Web\Form;
use siaupheng\fonia3\Data\SimpleXLS;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$id_grup = Param::Get("Grup_InvID", 0);
$tgl_from = Param::Get("Tgl_From");
$tgl_to = Param::Get("Tgl_To");
if ( $data == "download" ) {
// generate report header
$tglheader = $tgl_from;
if ($tgl_from!==$tgl_to) $tglheader .= " S/D ".$tgl_to;
$tgl_from = tgl_sql2str($tgl_from);
$tgl_to = tgl_sql2str($tgl_to);
$qsql = "";
if ($id_grup > 0) {
$qsql .= " AND InvID IN (SELECT InvID FROM inv_produk WHERE Grup_InvID='".$id_grup."')";
} else {
$qsql .= " AND InvID IN (SELECT InvID FROM inv_produk WHERE Grup_InvID NOT IN ('".$_SESSION['__APP_IAS']['GRUP_PRODUK_KEMASAN']."','".$_SESSION['__APP_IAS']['GRUP_PRODUK_HADIAH']."'))";
}
$db->Query("SELECT D.*,J.*,CONCAT(P.Nama_Produk,_latin1' ',S.Nama_Satuan) Nama_Produk,IFNULL(R.Nama_Rasa,'') Rasa,OG.Nama_Grup Grup_Outlet,PG.Nama_Grup Grup_Produk,O.Nama_Outlet,CONCAT(O.Alamat_Outlet,_latin1', ',O.Kota_Outlet) Alamat_Outlet,PS.Nama_Pegawai Nama_Sales,PO.Nama_Pegawai Nama_Supir,Nama_Picker(J.A_Picker) Nama_Picker FROM (SELECT No_Ref,InvID,RasaID,SatuanID,-Qty Qty,Harga_Jual,Total_Diskon,(-Qty*Harga_Jual)-Total_Diskon Jumlah FROM inv_detail WHERE NotaID=5 AND (Tgl_Ref BETWEEN '".$tgl_from."' AND '".$tgl_to."')".$qsql.") D LEFT JOIN (SELECT No_Jual,No_Faktur,No_DO,Tgl_Jual,Tgl_Lunas,OutletID,SalesID,HelperID,SupirID,A_Picker,CK,IF(Rekap=1,'Antar','Belum Antar') Status_Order,Catatan FROM inv_jual WHERE Tgl_Jual BETWEEN '".$tgl_from."' AND '".$tgl_to."') J ON (J.No_Jual=D.No_Ref) LEFT JOIN para_outlet O ON (O.OutletID=J.OutletID) LEFT JOIN para_outlet_grup OG ON (OG.Grup_OutletID=O.Grup_OutletID) LEFT JOIN inv_produk P ON (P.InvID=D.InvID) LEFT JOIN inv_produk_grup PG ON (PG.Grup_InvID=P.Grup_InvID) LEFT JOIN para_satuan S ON (S.SatuanID=D.SatuanID) LEFT JOIN para_rasa R ON (R.RasaID=D.RasaID) LEFT JOIN para_pegawai PS ON (J.SalesID=PS.PegID) LEFT JOIN para_pegawai PO ON (J.SupirID=PO.PegID) ORDER BY J.Tgl_Jual,J.No_Jual,P.Nama_Produk");
/* QUERY MANUAL
SELECT DATE_FORMAT(J.Tgl_Jual,'%d-%m-%Y'), DATE_FORMAT(J.Tgl_Lunas,'%d-%m-%Y'), J.No_Jual, J.No_Faktur, J.No_DO, PS.Nama_Pegawai, OG.Nama_Grup, O.Nama_Outlet, CONCAT(O.Alamat_Outlet,_latin1', ',O.Kota_Outlet), CONCAT(P.Nama_Produk,_latin1' ',S.Nama_Satuan), IFNULL(R.Nama_Rasa,''), round(Qty,2), round(Harga_Jual,2), round(Total_Diskon,2), round(Jumlah,2), PG.Nama_Grup, Status_Order, CK, PO.Nama_Pegawai, Nama_Picker(J.A_Picker), Catatan FROM (SELECT No_Ref,InvID,RasaID,SatuanID,-Qty Qty,Harga_Jual,Total_Diskon,(-Qty*Harga_Jual)-Total_Diskon Jumlah FROM inv_detail WHERE NotaID=5 AND (Tgl_Ref BETWEEN '2024-01-01' AND '2024-12-31') AND InvID IN (SELECT InvID FROM inv_produk WHERE Grup_InvID=3)) D LEFT JOIN (SELECT No_Jual,No_Faktur,No_DO,Tgl_Jual,Tgl_Lunas,OutletID,SalesID,HelperID,SupirID,A_Picker,CK,IF(Rekap=1,'Antar','Belum Antar') Status_Order,Catatan FROM inv_jual WHERE Tgl_Jual BETWEEN '2024-01-01' AND '2024-12-31') J ON (J.No_Jual=D.No_Ref) LEFT JOIN para_outlet O ON (O.OutletID=J.OutletID) LEFT JOIN para_outlet_grup OG ON (OG.Grup_OutletID=O.Grup_OutletID) LEFT JOIN inv_produk P ON (P.InvID=D.InvID) LEFT JOIN inv_produk_grup PG ON (PG.Grup_InvID=P.Grup_InvID) LEFT JOIN para_satuan S ON (S.SatuanID=D.SatuanID) LEFT JOIN para_rasa R ON (R.RasaID=D.RasaID) LEFT JOIN para_pegawai PS ON (J.SalesID=PS.PegID) LEFT JOIN para_pegawai PO ON (J.SupirID=PO.PegID) ORDER BY J.Tgl_Jual,J.No_Jual,P.Nama_Produk
*/
$xls = new SimpleXLS([
'title'=>"Data Penjualan",
'subject'=>"PT.PMS",
'desc'=>"Export Data Penjualan dari IAS"
]);
$xls->add_span(["<b>".strtoupper($_SESSION['__WEB_APP']['REG_NAME'])."</b>",1]);
$xls->add_span(["<b>DATA DETAIL PENJUALAN PRODUK</b>",1]);
$xls->add_span(["Periode : ".$tglheader,1]);
$xls->add_field("TANGGAL NOTA", 12, "C", "tgl_sql2str");
$xls->add_field("TANGGAL LUNAS", 12, "C", "tgl_sql2str");
$xls->add_field("NO. NOTA", 12, "C");
$xls->add_field("NO. FAKTUR", 12, "L");
$xls->add_field("NO. DO", 12, "C");
$xls->add_field("NAMA SALES", 12, "L");
$xls->add_field("GRUP OUTLET", 12, "L");
$xls->add_field("NAMA OUTLET", 15, "L");
$xls->add_field("ALAMAT OUTLET", 25, "L");
$xls->add_field("NAMA PRODUK", 45, "L");
$xls->add_field("VARIAN / RASA", 15, "L");
$xls->add_field("QTY", 15, "R,N");
$xls->add_field("HARGA SATUAN", 15, "R,N");
$xls->add_field("DISKON", 15, "R,N");
$xls->add_field("TOTAL", 15, "R,N");
$xls->add_field("GRUP PRODUK", 15, "L");
$xls->add_field("STATUS ORDER", 10, "L");
$xls->add_field("C / K", 5, "L");
$xls->add_field("NAMA SUPIR", 12, "L");
$xls->add_field("NAMA PICKER", 12, "L");
$xls->add_field("CATATAN", 12, "L");
$xls->add_sheet("".str_replace("S/D","-",$tglheader), true);
//$xls->show_headers();
while ($db->Next()) {
$xls->add_value($db->Row("Tgl_Jual"), $db->Row("Tgl_Lunas"), $db->Row("No_Jual"), $db->Row("No_Faktur"), $db->Row("No_DO"), $db->Row("Nama_Sales"), $db->Row("Grup_Outlet"), $db->Row("Nama_Outlet"), $db->Row("Alamat_Outlet"), $db->Row("Nama_Produk"), $db->Row("Rasa"), $db->RowFloat("Qty"), $db->RowFloat("Harga_Jual"), $db->RowFloat("Total_Diskon"), $db->RowFloat("Jumlah"), $db->Row("Grup_Produk"), $db->Row("Status_Order"), $db->Row("CK"), $db->Row("Nama_Supir"), $db->Row("Nama_Picker"), $db->Row("Catatan"));
}
$xls->add_stamp(1, true);
$xls->send("Data Penjualan Produk ".str_replace("S/D","-",$tglheader).".xlsx");
unset($xls);
} else if ( $data == "default") {
$form = new Form($db);
$tgrup = $form->option_db("_", "Grup_InvID", 0, true, false, "inv_produk_grup", ["Grup_InvID","Nama_Grup"], "Grup_InvID NOT IN ('".$_SESSION['__APP_IAS']['GRUP_PRODUK_KEMASAN']."','".$_SESSION['__APP_IAS']['GRUP_PRODUK_HADIAH']."') ORDER BY Nama_Grup", [0,"SEMUA GRUP PRODUK"]);
$ttglfrom = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$ttglto = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Grup_InvID">Grup Produk</label>
<div class="col">'.$tgrup.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_From">Dari Tanggal</label>
<div class="col">'.$ttglfrom.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Tgl_To">Sampai Tanggal</label>
<div class="col">'.$ttglto.'</div>
</div>';
}
send_json($ajson);
?>
+155
View File
@@ -0,0 +1,155 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/xml/fp_jual.php
Desc. : PHP - Export XML Faktur Pajak Invoice Biaya
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : April 2rd, 2011.
Last Modified : January 20th, 2025.
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$tgl_from = tgl_sql2str(Param::Get("Tgl_From"));
$tgl_to = tgl_sql2str(Param::Get("Tgl_To"));
if ( $data == "download" ) {
$a_xml = '<?xml version="1.0" encoding="utf-8"?>
<TaxInvoiceBulk xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<TIN>'.$_SESSION['__WEB_APP']['REG_NPWP'].'</TIN>
<ListOfTaxInvoice>';
$a_tax = '
<TaxInvoice>
<TaxInvoiceDate>%s</TaxInvoiceDate>
<TaxInvoiceOpt>Normal</TaxInvoiceOpt>
<TrxCode>04</TrxCode>
<AddInfo/>
<CustomDoc/>
<RefDesc/>
<FacilityStamp/>
<SellerIDTKU>'.$_SESSION['__WEB_APP']['REG_NPWP'].$_SESSION['__WEB_APP']['REG_NITKU'].'</SellerIDTKU>
<BuyerTin>%s</BuyerTin>
<BuyerDocument>%s</BuyerDocument>
<BuyerCountry>IDN</BuyerCountry>
<BuyerDocumentNumber>%s</BuyerDocumentNumber>
<BuyerName>%s</BuyerName>
<BuyerAdress>%s</BuyerAdress>
<BuyerEmail>-</BuyerEmail>
<BuyerIDTKU>%s</BuyerIDTKU>
<ListOfGoodService>';
$x_item = '
<GoodService>
<Opt>B</Opt>
<Code>000000</Code>
<Name>%s</Name>
<Unit>%s</Unit>
<Price>%s</Price>
<Qty>%s</Qty>
<TotalDiscount>%s</TotalDiscount>
<TaxBase>%s</TaxBase>
<OtherTaxBase>%s</OtherTaxBase>
<VATRate>%s</VATRate>
<VAT>%s</VAT>
<STLGRate>0</STLGRate>
<STLG>0</STLG>
</GoodService>';
$z_tax = '
</ListOfGoodService>
</TaxInvoice>';
$z_xml = '
</ListOfTaxInvoice>
</TaxInvoiceBulk>';
}
if ( $data == "download" ) {
$xml = $a_xml;
$alist = Param::Get_ArrayCBOX();
foreach ($alist as $_key => $_val) {
if ($_val!=="Y") continue;
$no_pajak = str_replace("_",".",$_key);
$afp = [];
//pajak per invoice biaya
$db->Query("SELECT P.*,IF(P.SupID=0,P.Alamat_NPWP,CONCAT(S.Alamat_Sup,' ',S.Kota_Sup)) Alamat_NPWP2 FROM (SELECT * FROM biaya_pajak WHERE No_Biaya='".$no_pajak."' LIMIT 1) P LEFT JOIN para_supplier S ON (S.SupID=P.SupID)");
if ($db->Next()) $afp = $db->AllRow();
if (count($afp) > 0) {
$buy_id = "TIN"; $buy_doc = $afp['No_Biaya']; $buy_name = "-"; $buy_addr = "-"; $buy_nitku = $afp['No_NPWP'].$afp['No_NITKU'];
if ($afp['No_NPWP']==0) {
if (($afp['No_NIK']?:0)==0) {
$buy_id = "Other ID";
$buy_nitku = "0";
} else {
$buy_id = "National ID";
$buy_doc = $afp['No_NIK'];
$buy_nitku = "000000";
}
$buy_name = $afp['Nama_NPWP'];
$buy_addr = $afp['Alamat_NPWP2'];
}
$xml .= sprintf($a_tax, $afp['Tgl_Biaya'], $afp['No_NPWP'], $buy_id, $buy_doc, $buy_name, $buy_addr, $buy_nitku);
$db->Query("SELECT *,(Qty*Harga_Jual) Total_Jual FROM biaya_pajak_detail WHERE No_Biaya='".$no_pajak."' ORDER BY ID");
while ($db->Next()) {
$n_dpp = $db->Row("Total_Jual");
$n_dpp_lain = $n_dpp * 11/12;
$n_ppn = $n_dpp_lain * 12/100;//ppn = 12%
$xml .= sprintf($x_item, $db->Row("Uraian_Biaya"), "UM.0030", $db->RowFloat("Harga_Jual"), $db->RowFloat("Qty"), 0.00, round($n_dpp,2), round($n_dpp_lain,2), 12, round($n_ppn,2));
}
$xml .= $z_tax;
$db->Query("UPDATE biaya_pajak SET XFP=XFP+1 WHERE No_Biaya='".$no_pajak."' LIMIT 1");
}
}
$xml .= $z_xml;
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"FPB-".Param::Get("Tgl_From").".xml\"");
echo $xml;
} else if ( $data == "detail" ) {
$tcari = trim(Param::Get("Cari_FP"));
$tsql = ($tcari=="") ? "" : " AND CONCAT(No_Biaya,No_NPWP,Nama_NPWP,DATE_FORMAT(Tgl_Biaya,'%d-%m-%Y')) LIKE '%".$tcari."%'";
$tot_fp = 50;
$db->Query("SELECT COUNT(*) FP FROM biaya_pajak WHERE Tgl_Biaya BETWEEN '".$tgl_from."' AND '".$tgl_to."'".$tsql."");
if ($db->Next()) $tot_fp = $db->RowFloat("FP", 50);
$obj = new Table($db);
$obj->set_query("SELECT *,'N' Nota FROM biaya_pajak WHERE Tgl_Biaya BETWEEN '".$tgl_from."' AND '".$tgl_to."'".$tsql);
$obj->add_field("No_Biaya", "No. TX", "c");
$obj->add_field("Tgl_Biaya", "Tgl. Pajak", "c", "sqltgl");
$obj->add_field("No_NPWP", "NPWP", "l");
$obj->add_field("Nama_NPWP", "Nama NPWP", "awr");
$obj->add_field("Jumlah_DPP", "Jumlah DPP", "r", "rupiah");
$obj->add_field("Jumlah_PPN", "Jumlah PPN", "r", "rupiah");
$obj->add_field("XFP", "XML", "c");
$obj->set_field_order("No_Biaya", "A");
$obj->add_row_checkbox("No_Biaya", "Nota", ["Y","N"]);
$obj->set_func_navi("XMLFPBJS.data_query('detail')");
$ajson[] = $obj->json_table("divDetail", $tot_fp);
} else if ( $data == "default") {
$form = new Form($db);
$tdari = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tsamp = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="card"><div class="card-header custom-style">Export Data FP XML Penjualan 2025</div><div class="card-body"><div class="row mb-1"><div class="col d-flex justify-content-between"><div class="d-flex">'.$tdari.'<div><input type="text" class="form-control-plaintext text-center px-2" value="S / D"></div>'.$tsamp.'</div><div class="ms-2 input-group"><input class="form-control" id="Cari_FP" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button></div><button class="btn btn-info shadow-none ms-2 text-nowrap" id="butXML" type="button"><i class="bi-cloud-download me-2"></i>Export XML</button></div></div><div id="divDetail">&nbsp;</div></div></div>';
}
send_json($ajson);
?>
+199
View File
@@ -0,0 +1,199 @@
<?php
/*******************************************************************
App. Name : Inventory Advanced Systems
Module : /apps/php/xml/fp_jual.php
Desc. : PHP - Export XML Faktur Pajak Penjualan
Created By : Siau Pheng (siaupheng@3fonia.com).
Created Date : April 2rd, 2011.
Last Modified : July 26th, 2025.
(c) 2011 - 2025, 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
require_once(__DIR__."/../../../../../vendor/autoload.php");
require_once(__DIR__."/../func/ias.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;
$db = (is_resource($db)) ? $db : new MySQL();
$ajson = [];
$data = Param::Get("data");
$tgl_from = tgl_sql2str(Param::Get("Tgl_From"));
$tgl_to = tgl_sql2str(Param::Get("Tgl_To"));
$ppn = 0.11;
//$ppn = ($tgl_from >= $_SESSION['__APP_IAS']['PPN_TGL']) ? $_SESSION['__APP_IAS']['PPN'] : 0.11;
if ( $data == "download" ) {
$a_xml = '<?xml version="1.0" encoding="utf-8"?>
<TaxInvoiceBulk xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<TIN>'.$_SESSION['__WEB_APP']['REG_NPWP'].'</TIN>
<ListOfTaxInvoice>';
$a_tax = '
<TaxInvoice>
<TaxInvoiceDate>%s</TaxInvoiceDate>
<TaxInvoiceOpt>Normal</TaxInvoiceOpt>
<TrxCode>04</TrxCode>
<AddInfo/>
<CustomDoc/>
<RefDesc/>
<FacilityStamp/>
<SellerIDTKU>'.$_SESSION['__WEB_APP']['REG_NPWP'].$_SESSION['__WEB_APP']['REG_NITKU'].'</SellerIDTKU>
<BuyerTin>%s</BuyerTin>
<BuyerDocument>%s</BuyerDocument>
<BuyerCountry>IDN</BuyerCountry>
<BuyerDocumentNumber>%s</BuyerDocumentNumber>
<BuyerName>%s</BuyerName>
<BuyerAdress>%s</BuyerAdress>
<BuyerEmail>-</BuyerEmail>
<BuyerIDTKU>%s</BuyerIDTKU>
<ListOfGoodService>';
$x_item = '
<GoodService>
<Opt>A</Opt>
<Code>%s</Code>
<Name>%s</Name>
<Unit>%s</Unit>
<Price>%s</Price>
<Qty>%s</Qty>
<TotalDiscount>%s</TotalDiscount>
<TaxBase>%s</TaxBase>
<OtherTaxBase>%s</OtherTaxBase>
<VATRate>%s</VATRate>
<VAT>%s</VAT>
<STLGRate>0</STLGRate>
<STLG>0</STLG>
</GoodService>';
$z_tax = '
</ListOfGoodService>
</TaxInvoice>';
$z_xml = '
</ListOfTaxInvoice>
</TaxInvoiceBulk>';
}
if ( $data == "download" ) {
$xml = $a_xml;
$alist = Param::Get_ArrayCBOX();
foreach ($alist as $_key => $_val) {
if ($_val!=="Y") continue;
$no_pajak = str_replace("_",".",$_key);
$afp = [];
if ($no_pajak[0] == "J") {
//pajak per nota
$db->Query("SELECT * FROM (SELECT * FROM inv_jual WHERE No_Jual='".$no_pajak."' LIMIT 1) J LEFT JOIN para_outlet O ON (O.OutletID=J.OutletID)");
if ($db->Next()) $afp = $db->AllRow();
if ($afp['Total_Jual'] > 0) {
$db->Query("UPDATE inv_detail SET PPN='".$ppn."' WHERE No_Ref='".$no_pajak."'");
}
if (count($afp) > 0) {
$buy_id = "TIN"; $buy_doc = $afp['No_Jual']; $buy_name = "-"; $buy_addr = "-"; $buy_nitku = $afp['No_NPWP'].$afp['No_NITKU'];
if ($afp['No_NPWP']==0) {
if (($afp['No_NIK']?:0)==0) {
$buy_id = "Other ID";
$buy_nitku = "0";
} else {
$buy_id = "National ID";
$buy_doc = $afp['No_NIK'];
$buy_nitku = "000000";
}
$buy_name = $afp['Nama_NPWP'];
$buy_addr = $afp['Alamat_NPWP'];
}
$xml .= sprintf($a_tax, $afp['Tgl_Jual'], $afp['No_NPWP'], $buy_id, $buy_doc, $buy_name, $buy_addr, $buy_nitku);
$db->Query("SELECT P.*,R.Nama_Rasa,S.Pajak_Satuan,D.Qty,D.Harga,D.Total_Jual,D.Total_Diskon FROM (SELECT InvID,RasaID,SatuanID,SUM(-Qty) Qty,ROUND(Harga_Jual/(1+PPN),2) Harga,SUM(-Qty*ROUND(Harga_Jual/(1+PPN),2)) Total_Jual,SUM(IF(Total_Diskon=(-Qty*Harga_Jual),-Qty*ROUND(Harga_Jual/(1+PPN),2),ROUND(Total_Diskon/(1+PPN),2))) Total_Diskon FROM inv_detail WHERE No_Ref='".$no_pajak."' AND Qty<>0 GROUP BY InvID,RasaID,SatuanID ORDER BY InvID,RasaID,SatuanID) D LEFT JOIN inv_produk P ON (D.InvID=P.InvID) LEFT JOIN para_rasa R ON (D.RasaID=R.RasaID) LEFT JOIN para_satuan S ON (S.SatuanID=D.SatuanID) WHERE P.Pajak=1 ORDER BY P.Nama_Produk");
while ($db->Next()) {
$n_dpp = $db->Row("Total_Jual")-$db->Row("Total_Diskon");
$n_dpp_lain = $n_dpp * 11/12;
$n_ppn = $n_dpp_lain * 12/100;//ppn = 12%
$xml .= sprintf($x_item, $db->Row("Kode_FP"), $db->Row("Nama_Produk").data_rasafp($db->Row("Nama_Rasa")), $db->Row("Pajak_Satuan"), $db->RowFloat("Harga"), $db->RowFloat("Qty"), $db->RowFloat("Total_Diskon"), round($n_dpp,2), round($n_dpp_lain,2), 12, round($n_ppn,2));
}
$xml .= $z_tax;
$db->Query("UPDATE inv_jual SET XFP=XFP+1 WHERE No_Jual='".$no_pajak."' LIMIT 1");
}
} else {
//pajak gabungan
$db->Query("SELECT * FROM inv_jual_pajak WHERE No_Pajak='".$no_pajak."' LIMIT 1");
if ($db->Next()) $afp = $db->AllRow();
if ($afp['OutletID'] > 0) {
$db->Query("SELECT No_NIK FROM para_outlet WHERE OutletID='".$afp['OutletID']."' LIMIT 1");
if ($db->Next()) $afp = array_merge($afp, $db->AllRow());
}
if (count($afp) > 0) {
$buy_id = "TIN"; $buy_doc = $afp['No_Pajak']; $buy_name = "-"; $buy_addr = "-"; $buy_nitku = $afp['No_NPWP'].$afp['No_NITKU'];
if ($afp['No_NPWP']==0) {
if (($afp['No_NIK']?:0)==0) {
$buy_id = "Other ID";
$buy_nitku = "0";
} else {
$buy_id = "National ID";
$buy_doc = $afp['No_NIK'];
$buy_nitku = "000000";
}
$buy_name = $afp['Nama_NPWP'];
$buy_addr = $afp['Alamat_NPWP'];
}
$xml .= sprintf($a_tax, $afp['Tgl_Pajak'], $afp['No_NPWP'], $buy_id, $buy_doc, $buy_name, $buy_addr, $buy_nitku);
$db->Query("SELECT P.*,R.Nama_Rasa,S.Pajak_Satuan,D.Qty,D.Harga,D.Total_Jual,D.Total_Diskon FROM (SELECT InvID,RasaID,SatuanID,SUM(-Qty) Qty,ROUND(Harga_Jual/(1+PPN),2) Harga,SUM(-Qty*ROUND(Harga_Jual/(1+PPN),2)) Total_Jual,SUM(IF(Total_Diskon=(-Qty*Harga_Jual),-Qty*ROUND(Harga_Jual/(1+PPN),2),ROUND(Total_Diskon/(1+PPN),2))) Total_Diskon FROM inv_detail WHERE No_Ref IN (SELECT No_Jual FROM inv_jual WHERE No_Pajak='".$no_pajak."') AND Qty<>0 GROUP BY InvID,RasaID,SatuanID ORDER BY InvID,RasaID,SatuanID) D LEFT JOIN inv_produk P ON (D.InvID=P.InvID) LEFT JOIN para_rasa R ON (D.RasaID=R.RasaID) LEFT JOIN para_satuan S ON (S.SatuanID=D.SatuanID) WHERE P.Pajak=1 ORDER BY P.Nama_Produk");
while ($db->Next()) {
$n_dpp = $db->Row("Total_Jual")-$db->Row("Total_Diskon");
$n_dpp_lain = $n_dpp * 11/12;
$n_ppn = $n_dpp_lain * 12/100;//ppn = 12%
$xml .= sprintf($x_item, $db->Row("Kode_FP"), $db->Row("Nama_Produk").data_rasafp($db->Row("Nama_Rasa")), $db->Row("Pajak_Satuan"), $db->RowFloat("Harga"), $db->RowFloat("Qty"), $db->RowFloat("Total_Diskon"), round($n_dpp,2), round($n_dpp_lain,2), 12, round($n_ppn,2));
}
$xml .= $z_tax;
$db->Query("UPDATE inv_jual_pajak SET XFP=XFP+1 WHERE No_Pajak='".$no_pajak."' LIMIT 1");
}
}
}
$xml .= $z_xml;
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"FPJ-".Param::Get("Tgl_From").".xml\"");
echo $xml;
} else if ( $data == "detail" ) {
$tcari = trim(Param::Get("Cari_FP"));
$tsql1 = ($tcari=="") ? "" : " AND CONCAT(No_Pajak,No_NPWP,Nama_NPWP,DATE_FORMAT(Tgl_Pajak,'%d-%m-%Y')) LIKE '%".$tcari."%'";
$tsql2 = ($tcari=="") ? "" : " WHERE CONCAT(J.No_Jual,O.No_NPWP,O.Nama_NPWP,DATE_FORMAT(J.Tgl_Jual,'%d-%m-%Y')) LIKE '%".$tcari."%'";
$tot_fp = 50;
$db->Query("SELECT COUNT(*) FP FROM ((SELECT No_Pajak FROM inv_jual_pajak WHERE Tgl_Pajak BETWEEN '".$tgl_from."' AND '".$tgl_to."'".$tsql1.") UNION ALL (SELECT J.No_Jual No_Pajak FROM (SELECT * FROM inv_jual WHERE Data_Jual=1 AND Rekap=1 AND Tgl_Jual BETWEEN '".$tgl_from."' AND '".$tgl_to."' AND OutletID NOT IN (SELECT OutletID FROM para_outlet WHERE GG=1)) J LEFT JOIN para_outlet O ON (O.OutletID=J.OutletID)".$tsql2.")) A");
if ($db->Next()) $tot_fp = $db->RowFloat("FP", 50);
$obj = new Table($db);
$obj->set_query("SELECT * FROM ((SELECT No_Pajak,Tgl_Pajak,No_NPWP,Nama_NPWP,Jumlah_DPP,Jumlah_PPN,XFP,1 GG,'N' Nota FROM inv_jual_pajak WHERE Tgl_Pajak BETWEEN '".$tgl_from."' AND '".$tgl_to."'".$tsql1.") UNION ALL (SELECT J.No_Jual No_Pajak,J.Tgl_Jual Tgl_Pajak,O.No_NPWP,O.Nama_NPWP,J.Jumlah_DPP,J.Jumlah_PPN,J.XFP,0 GG,'N' Nota FROM (SELECT *,ROUND((Total_Jual-Total_Diskon)/(1+".$ppn."),2) Jumlah_DPP, ROUND(ROUND((Total_Jual-Total_Diskon)/(1+".$ppn."),2)*".$ppn.") Jumlah_PPN FROM inv_jual WHERE Data_Jual=1 AND Rekap=1 AND Tgl_Jual BETWEEN '".$tgl_from."' AND '".$tgl_to."') J LEFT JOIN para_outlet O ON (O.OutletID=J.OutletID)".$tsql2." AND O.GG=0)) A");
$obj->add_field("No_Pajak", "No. TX", "c");
$obj->add_field("Tgl_Pajak", "Tgl. Pajak", "c", "sqltgl");
$obj->add_field("No_NPWP", "NPWP", "l");
$obj->add_field("Nama_NPWP", "Nama NPWP", "awr");
$obj->add_field("Jumlah_DPP", "Jumlah DPP", "r", "rupiah");
$obj->add_field("Jumlah_PPN", "Jumlah PPN", "r", "rupiah");
$obj->add_field("XFP", "XML", "c");
$obj->set_field_order("No_Pajak", "A");
$obj->add_row_checkbox("No_Pajak", "Nota", ["Y","N"]);
$obj->set_row_color("GG", 1, "rgg");
$obj->set_func_navi("XMLFPJJS.data_query('detail')");
$ajson[] = $obj->json_table("divDetail", $tot_fp);
} else if ( $data == "default") {
$form = new Form($db);
$tdari = $form->datebox("_", "Tgl_From", tgl_ymd(), true, false);
$tsamp = $form->datebox("_", "Tgl_To", tgl_ymd(), true, false);
echo '
<div class="card"><div class="card-header custom-style">Export Data FP XML Penjualan 2025</div><div class="card-body"><div class="row mb-1"><div class="col d-flex justify-content-between"><div class="d-flex">'.$tdari.'<div><input type="text" class="form-control-plaintext text-center px-2" value="S / D"></div>'.$tsamp.'</div><div class="ms-2 input-group"><input class="form-control" id="Cari_FP" placeholder="Kunci Pencarian" type="text"><button class="btn btn-info shadow-none" type="button" id="butSearch">Cari</button></div><button class="btn btn-info shadow-none ms-2 text-nowrap" id="butXML" type="button"><i class="bi-cloud-download me-2"></i>Export XML</button></div></div><div id="divDetail">&nbsp;</div></div></div>';
}
send_json($ajson);
?>