first commit

This commit is contained in:
2026-10-29 13:34:31 +07:00
commit 45e4595c57
255 changed files with 35457 additions and 0 deletions
+492
View File
@@ -0,0 +1,492 @@
<?php
/*******************************************************************
PHP Class : /Controller/Gel/GajiController
Description : Transaksi Perhitungan Gaji
Created By : Siau Pheng ([email protected]).
Created Date : September 17th, 2014.
Last Modified : September 13th, 2026.
(c) 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
declare(strict_types=1);
namespace App\Controller\Gel;
use App\Utils\Gel;
use flight\Engine;
use flight\database\SimplePdo;
use flight\Session;
use Webapp\DB\SQL;
use Webapp\Web\Form;
use Webapp\Web\Param;
use Webapp\Web\Table;
class GajiController {
private array $web_app;
private array $app_gel;
private int $id_cab;
private string $mode;
private string $mode_detail;
private string $no_gaji;
private Gel $gel;
protected Engine $app;
protected SimplePdo $db;
public function __construct(Engine $app, SimplePdo $db, Session $session) {
$this->app = $app;
$this->db = $db;
$this->web_app = (array) $session->get('WEB_APP');
$this->app_gel = (array) $session->get('APP_GEL');
$this->id_cab = Param::Int("CabID", $session->get('APP_INV')['CABANGID']);
$this->mode = Param::Get("mode", "");
$this->mode_detail = Param::Get("mode_detail", "");
$this->no_gaji = Param::Get("No_Gaji", "");
$this->gel = new Gel($app);
}
public function table_detail() {
if (in_array($this->mode_detail, ["insert","update","delete"])) {
$sql = new SQL($this->app);
$sql->set_table("tmp_gaji_detail");
$sql->add_param("KaryaID");
$sql->add_param("Qty_Harian");
$sql->add_param("Gaji_Harian");
$sql->add_param("Total_Gaji", "Qty_Harian*Gaji_Harian", true);
$sql->add_param("Qty_Lembur");
$sql->add_param("Lembur_Harian");
$sql->add_param("Total_Lembur", "Qty_Lembur*Lembur_Harian", true);
$sql->add_param("Qty_BonusM");
$sql->add_param("Qty_BonusB");
$sql->add_param("Bonus_Minggu");
$sql->add_param("Bonus_Bulan");
$sql->add_param("Total_BonusM", "Qty_BonusM*Bonus_Minggu", true);
$sql->add_param("Total_BonusB", "Qty_BonusB*Bonus_Bulan", true);
$sql->add_param("Total_Potong");
$sql->add_param("Total_Semua", "Total_Gaji+Total_Lembur+Total_BonusM+Total_BonusB-Total_Potong", true);
$sql->add_param("Catatan", Param::Get("CatatKar"));
$sql->add_param_unix();
$sql->add_param_userid();
$sql->add_where("ID");
$sql->add_where("No_Gaji", $this->no_gaji);
if ($this->mode_detail === "insert") {
$sql->add_param("No_Gaji");
$sql->InsertDB();
} else if ($this->mode_detail === "update") {
$sql->UpdateDB();
} else if ($this->mode_detail === "delete") {
$sql->DeleteDB();
}
}
$tsql = ''; $asql = [$this->no_gaji]; $qtabel = "gel_gaji_detail";
if (in_array($this->mode, ["add","edit"])) {
if ($this->mode === "add") { $tsql = " AND Unix=?"; $asql[] = $this->app->user()->unix(); }
$qtabel = "tmp_gaji_detail";
}
$obj = new Table($this->app);
$obj->set_table("(SELECT * FROM ".$qtabel.' WHERE No_Gaji=?'.$tsql.") D LEFT JOIN para_karyawan P ON (D.KaryaID=P.KaryaID)", "D.*,P.Nama_Karya,(P.Total_Pinjam-D.Total_Potong) Sisa_Pinjam", "", $asql);
$obj->set_footer("SUM(Total_Semua) Total_Semua");
$obj->add_field("ID", "ID", "hid");
$obj->add_field("KaryaID", "KaryaID", "hid");
$obj->add_field("Nama_Karya", "Nama Karyawan", "awr");
$obj->add_field("Qty_Harian", "Hari", "r", "rupiah");
$obj->add_field("Total_BonusM", "Bonus MG", "r", "rupiah");
$obj->add_field("Total_BonusB", "Bonus BLN", "r", "rupiah");
$obj->add_field("Total_Potong", "Potongan", "r", "rupiah");
$obj->add_field("Total_Semua", "Gaji Bersih", "r", "rupiah", "rupiah");
$obj->add_field("Catatan", "Catatan", "awr");
$obj->set_field_order("Nama_Karya", "A");
if (in_array($this->mode, ["add","edit"])) {
$obj->add_row_btn("clipboard", "Ubah", "GELGajiJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "GELGajiJS.detail_hapus", "Unix", $this->app->user()->unix());
$obj->set_func_btn("GELGajiJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Karyawan');
$obj->set_func_btn("GELGajiJS.karya_brow", '<i class="bi-table me-1"></i> Browse');
}
$this->app->json([ $obj->json_table("divDetailTabel") ]);
}
public function brow_tx() {
$tcari = Param::Get("Cari_TX");
$tsql = ''; $asql = [];
if (!empty($tcari)) {
$tsql .= "CONCAT(No_Gaji,DATE_FORMAT(Tgl_Gaji,'%d-%m-%Y'),Catatan) LIKE ?";
$asql[] = '%' . $tcari . '%';
}
$obj = new Table($this->app);
$obj->set_table("gel_gaji", "*,CONCAT(LPAD(Bulan,2,'0'),'-',Tahun) BLTH,(Total_Gaji+Total_Bonus-Total_Potong) Jumlah", $tsql);
$obj->add_field("No_Gaji", "No. Trans", "c");
$obj->add_field("Tgl_Gaji", "Tgl. Trans", "c", "sqltgl", "", "val-tgl");
$obj->add_field("Minggu", "MG", "c");
$obj->add_field("BLTH", "Bulan", "c");
$obj->add_field("Total_Gaji", "Total Gaji", "r", "rupiah");
$obj->add_field("Total_Bonus", "Total Bonus", "r", "rupiah");
$obj->add_field("Total_Potong", "Potongan", "r", "rupiah");
$obj->add_field("Jumlah", "TOTAL", "r", "rupiah");
$obj->set_field_order("No_Gaji", "D");
$obj->set_func_select("GELGajiJS.tx_select");
$this->app->json([ $obj->db_table("divBrowTX") ]);
}
public function brow_cetak() {
$obj = new Table($this->app);
$obj->set_table("(SELECT * FROM gel_gaji_detail WHERE No_Gaji=?) D LEFT JOIN para_karyawan P ON (D.KaryaID=P.KaryaID)", "D.*,P.Nama_Karya, 'N' Cek", "", [$this->no_gaji]);
$obj->add_field("ID", "ID", "hid");
$obj->add_field("Nama_Karya", "Nama Karyawan", "awr");
$obj->add_field("Total_Gaji", "Total Gaji", "r", "rupiah");
$obj->add_field("Total_Semua", "Gaji Bersih", "r", "rupiah");
$obj->add_field("Catatan", "Catatan", "awr");
$obj->add_row_checkbox("ID", "Cek");
$obj->set_field_order("Nama_Karya", "A");
$this->app->json([ $obj->db_table("divBrowCetak") ]);
}
public function brow_karya() {
$tcari = Param::Get("Cari_Karya");
$tsql = ''; $asql = [$this->no_gaji];
if (!empty($tcari)) {
$tsql .= " AND Nama_Karya LIKE ?";
$asql[] = '%' . $tcari . '%';
}
$obj = new Table($this->app);
$obj->set_table("para_karyawan", "*", "Aktif=1 AND KaryaID NOT IN (SELECT KaryaID FROM tmp_gaji_detail WHERE No_Gaji=?)".$tsql, $asql);
$obj->add_field("KaryaID", "ID", "hid");
$obj->add_field("Nama_Karya", "Nama Karyawan", "awr");
$obj->add_field("Gaji_Harian", "Gaji Harian", "r", "rupiah");
$obj->add_field("Total_Pinjam", "Total Pinjaman", "r", "rupiah");
$obj->set_field_order("Nama_Karya", "A");
$obj->set_func_select("GELGajiJS.karya_select");
$this->app->json([ $obj->db_table("divBrowKarya") ]);
}
public function auto_karya() {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
$stat = $this->db->runQuery("SELECT KaryaID,Nama_Karya,CONCAT(Gaji_Harian,':',Total_Pinjam) Data2 FROM para_karyawan WHERE Aktif=1 AND KaryaID NOT IN (SELECT KaryaID FROM tmp_gaji_detail WHERE No_Gaji=?) AND Nama_Karya LIKE ? ORDER BY Nama_Karya LIMIT 50", [$this->no_gaji, '%'.$tcari.'%']);
while ($row = $stat->fetch(SimplePdo::FETCH_ASSOC)) {
$ajson['autodata'][] = ['value'=>$row['KaryaID'], 'text'=>$row['Nama_Karya'], 'data'=>$row['Data2'], 'bc'=>0];
}
$this->app->json($ajson);
}
public function form_master() {
$ajson = [ 'error'=>"", 'html'=>"" ];
$atabel = [ 'No_Gaji'=>"", 'CabID'=>$this->id_cab, 'Tgl_Gaji'=>"", 'Minggu'=>date('W'), 'Bulan'=>date('n'), 'Tahun'=>date('Y'), 'Catatan'=>"" ];
if ($this->mode === "add") {
$atabel['No_Gaji'] = "GJ-BARU#".(string) $this->web_app['SERVER_ID']. $this->app->user()->id(3);
$atabel['Tgl_Gaji'] = tgl_ymd();
$this->no_gaji = "";
} else if ($this->mode === "edit") {
$this->Gaji_Copy($this->no_gaji);
} else if ($this->mode === "save") {
$no_lama = $this->no_gaji;
$tgl_gaji = Param::Get("Tgl_Gaji");
$b_baru = str_contains($no_lama, "BARU");
if ($b_baru) $this->no_gaji = $this->Gaji_Baru($this->id_cab, $tgl_gaji, true);
$this->Gaji_Save($this->no_gaji, $b_baru, $no_lama);
$agaji = $this->db->fetchRow("SELECT SUM(Total_Gaji+Total_Lembur) Gaji, SUM(Total_BonusM+Total_BonusB) Bonus, SUM(Total_Potong) Potong FROM gel_gaji_detail WHERE No_Gaji=?", [$this->no_gaji]) ?? ['Gaji'=>0, 'Bonus'=>0, 'Potong'=>0];
$sql = new SQL($this->app);
$sql->set_table("gel_gaji");
$sql->add_param_date("Tgl_Gaji");
$sql->add_param("Total_Gaji", $agaji['Gaji']);
$sql->add_param("Total_Bonus", $agaji['Bonus']);
$sql->add_param("Total_Potong", $agaji['Potong']);
$sql->add_param("Minggu");
$sql->add_param("Bulan");
$sql->add_param("Tahun");
$sql->add_param("CabID");
$sql->add_param("Catatan");
$sql->add_param_stamp();
$sql->add_param_userid();
$sql->add_where("No_Gaji", $this->no_gaji);
$sql->UpdateDB();
// PROSES POSTING GL
$ainfo = $this->db->fetchRow("SELECT *,Total_Gaji+Total_Bonus Gaji FROM gel_gaji WHERE No_Gaji=?", [$this->no_gaji]);
$ajurnal = [
'Kode_Jurnal' => $this->no_gaji,
'TipeID' => 14,
'CabID' => $this->id_cab,
'Tanggal' => $tgl_gaji,
'Kode_Ref' => $this->no_gaji,
'Catatan' => "Pembayaran Gaji : ".$ainfo['No_Gaji']." / Minggu ".$ainfo['Minggu'].", Bulan ".bulan_array()[$ainfo['Bulan']]." ".$ainfo['Tahun']
];
$adetail = [
[
'Kode_Rek' => $this->app_gel['BIAYA_GAJI'],
'DK' => "D",
'Jumlah' => $ainfo['Gaji']
],
[
'Kode_Rek' => $this->app_gel['KAS_TUNAI'],
'DK' => "K",
'Jumlah' => (float) $ainfo['Gaji'] - (float) $ainfo['Total_Potong']
]
];
$this->db->delete("gel_karyawan", "Kode_Jurnal=?", [$this->no_gaji]);
if ((float) $ainfo['Total_Potong'] > 0) {
$apotong = $this->db->fetchAll("SELECT KaryaID,Total_Potong FROM gel_gaji_detail WHERE No_Gaji=? AND Total_Potong>0", [$this->no_gaji]);
foreach($apotong as $_key => $val) {
$this->db->insert("gel_karyawan", [ 'No_Trans'=>$this->gel->Karya_Baru($tgl_gaji), 'Tgl_Trans'=>$ainfo['Tgl_Gaji'], 'KaryaID'=>$val['KaryaID'], 'Kode_Jurnal'=>$this->no_gaji, 'Total_Bayar'=>$val['Total_Potong'], 'Catatan'=>'Potong Gaji : '.$this->no_gaji, 'Kunci'=>1, 'UserID'=>$this->app->user()->id() ]);
$adetail[] = [
'Kode_Rek' => $this->app_gel['PIU_KARYA'],
'DK' => "K",
'Jumlah' => $val['Total_Potong']
];
// UPDATE KE KARYAWAN
$ipinjam = $this->db->fetchField("SELECT SUM(Total_Pinjam-Total_Bayar) FROM gel_karyawan WHERE KaryaID=?", [$val['KaryaID']]) ?? 0;
$this->db->runQuery("UPDATE para_karyawan SET Total_Pinjam=? WHERE KaryaID=?", [$ipinjam, $val['KaryaID']]);
}
}
$this->gel->Jurnal_Post($ajurnal, $adetail);
$this->mode = "view";
} else if ($this->mode === "cancel") {
$this->Gaji_Cancel($this->no_gaji);
$this->mode = "view";
$this->no_gaji = "";
}
if (!empty($this->no_gaji) && $this->mode !== "cancel") {
$row = $this->db->fetchRow("SELECT * FROM gel_gaji WHERE No_Gaji='".$this->no_gaji."'");
if ($row) {
$atabel = $row;
} else {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
}
}
$enable = in_array($this->mode, ["add","edit"]) ? true : false;
$form = new Form($this->app);
$tno = $form->textbox("_", "No_Gaji", $atabel['No_Gaji'], !$enable, false, "text", "nomor transaksi");
$ttgl = $form->datebox("_", "Tgl_Gaji", $atabel['Tgl_Gaji'], $enable, false);
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID");
$tmg = $form->option("_", "Minggu", $atabel['Minggu'], $enable, false, $this->range_minggu((int) $atabel['Bulan'], (int) $atabel['Tahun']));
$tbln = $form->option("_", "Bulan", $atabel['Bulan'], $enable, false, bulan_array(), null, "GELGajiJS.oc_Minggu()");
$tthn = $form->option("_", "Tahun", $atabel['Tahun'], $enable, false, $this->gel->Tahun_Array(), null, "GELGajiJS.oc_Minggu()");
$tcatat = $form->textbox("_", "Catatan", stripslashes($atabel['Catatan']), $enable, false, "text", "catatan gaji");
$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_Gaji">Nomor Transaksi</label>
<div class="col-sm-7 col-lg-7"><div class="input-group">'.$tno.'<button id="butBrow" class="btn btn-info" type="button"><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_Gaji">Tanggal Transaksi</label>
<div class="col-sm-7 col-lg-5">'.$ttgl.'</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="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Bulan">Periode / Minggu</label>
<div class="col"><div class="input-group">'.$tbln.$tthn.'<span class="input-group-text px-2">/</span>'.$tmg.'</div></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%;">Deskripsi</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="Lembur" value="'.$this->app_gel['LEMBUR'].'" >
<input type="hidden" id="Bonus1" value="'.$this->app_gel['BONUS1'].'" >
<input type="hidden" id="Bonus2" value="'.$this->app_gel['BONUS2'].'" >
<input type="hidden" id="mode" value="'.$this->mode.'" >';
$this->app->json($ajson);
}
public function form_gaji() {
$id = (int) Param::Get("ID", 0);
$atabel = [ 'ID'=>$id, 'KaryaID'=>Param::Get("KaryaID"), 'Nama_Karya'=>"", 'Qty_Harian'=>0, 'Gaji_Harian'=>0, 'Qty_Lembur'=>0, 'Lembur_Harian'=>$this->app_gel['LEMBUR'], 'Qty_BonusM'=>0, 'Qty_BonusB'=>0, 'Bonus_Minggu'=>$this->app_gel['BONUS1'], 'Bonus_Bulan'=>$this->app_gel['BONUS2'], 'Total_Potong'=>0, 'Total_Pinjam'=>0, 'Tot_Gaji'=>0, 'Tot_Lembur'=>0, 'Tot_Bonus1'=>0, 'Tot_Bonus2'=>0, 'Jumlah'=>0, 'Catatan'=>"" ];
if ($id > 0) {
$_agaji = $this->db->fetchRow("SELECT * FROM tmp_gaji_detail WHERE No_Gaji=? AND ID=?", [$this->no_gaji, $id]);
if ($_agaji) $atabel = array_merge($atabel, $_agaji->getData());
}
if (!empty($atabel['KaryaID'])) {
$_akary = $this->db->fetchRow("SELECT Nama_Karya,Gaji_Harian,Total_Pinjam FROM para_karyawan WHERE KaryaID=?", [$atabel['KaryaID']]);
if ($_akary) $atabel = array_merge($atabel, $_akary->getData());
}
$form = new Form($this->app);
$tnama = $form->textauto("_", "Nama_Karya", ['value'=>$atabel['KaryaID'],'text'=>$atabel['Nama_Karya']], true, true, "ketik nama karyawan");
$tqty_har = $form->textbox("_", "Qty_Harian", $atabel['Qty_Harian'], true, true, "double");
$tqty_lem = $form->textbox("_", "Qty_Lembur", $atabel['Qty_Lembur'], true, true, "double");
$tqty_bm = $form->textbox("_", "Qty_BonusM", $atabel['Qty_BonusM'], true, true, "double");
$tqty_bb = $form->textbox("_", "Qty_BonusB", $atabel['Qty_BonusB'], true, true, "double");
$tpotong = $form->textbox("_", "Total_Potong", $atabel['Total_Potong'], true, true, "double");
$tgj_hari = $form->textbox("_", "Gaji_Harian", $atabel['Gaji_Harian'], false, false, "double");
$tlb_hari = $form->textbox("_", "Lembur_Harian", $atabel['Lembur_Harian'], false, false, "double");
$tbon_m = $form->textbox("_", "Bonus_Minggu", $atabel['Bonus_Minggu'], false, false, "double");
$tbon_b = $form->textbox("_", "Bonus_Bulan", $atabel['Bonus_Bulan'], false, false, "double");
$ttot_gaji = $form->textbox("_", "Tot_Gaji", $atabel['Tot_Gaji'], false, false, "double");
$ttot_lemb = $form->textbox("_", "Tot_Lembur", $atabel['Tot_Lembur'], false, false, "double");
$ttot_bon1 = $form->textbox("_", "Tot_Bonus1", $atabel['Tot_Bonus1'], false, false, "double");
$ttot_bon2 = $form->textbox("_", "Tot_Bonus2", $atabel['Tot_Bonus2'], false, false, "double");
$tjumlah = $form->textbox("_", "Jumlah", $atabel['Jumlah'], false, false, "double");
$tcatat = $form->textbox("_", "CatatKar", $atabel['Catatan'], true, true, "text");
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Karya">Nama Karyawan</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_Harian">Hari Kerja</label>
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$tqty_har.$tgj_hari.'</div></div>
<div class="col-sm-4 col-lg-4">'.$ttot_gaji.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Qty_Lembur">Hari Lembur</label>
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$tqty_lem.$tlb_hari.'</div></div>
<div class="col-sm-4 col-lg-4">'.$ttot_lemb.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Qty_BonusM">Bonus Mingguan</label>
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$tqty_bm.$tbon_m.'</div></div>
<div class="col-sm-4 col-lg-4">'.$ttot_bon1.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Qty_BonusB">Bonus Bulanan</label>
<div class="col-sm-4 col-lg-5"><div class="input-group">'.$tqty_bb.$tbon_b.'</div></div>
<div class="col-sm-4 col-lg-4">'.$ttot_bon2.'</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-8 col-lg-8 col-form-label" for="Total_Potong">Potongan Pinjaman</label>
<div class="col-sm-4 col-lg-4">'.$tpotong.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-8 col-lg-8 col-form-label">Gaji Bersih (setelah potongan)</label>
<div class="col-sm-4 col-lg-4">'.$tjumlah.'</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-8 col-lg-8 col-form-label">Jumlah Sisa Pinjaman</label>
<div class="col-sm-4 col-lg-4"><input type="double" class="form-control text-danger double" id="Total_Pinjam" name="Total_Pinjam" value="'.uang($atabel['Total_Pinjam']).'" readonly=""></div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="CatatKar">Catatan / Informasi</label>
<div class="col">'.$tcatat.'</div>
</div>
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >
<input type="hidden" id="KaryaID" value="'.$atabel['KaryaID'].'" >
<input type="hidden" id="mode_detail" value="'.$this->mode_detail.'" >';
$this->app->json($ajson);
}
public function proses_hapus() {
$this->db->runQuery("DELETE FROM gel_gaji WHERE No_Gaji=?", [$this->no_gaji]);
$this->db->runQuery("DELETE FROM gel_gaji_detail WHERE No_Gaji=?", [$this->no_gaji]);
// PROSES POSTING GL
$this->db->runQuery("DELETE FROM gel_jurnal WHERE Kode_Jurnal=?", [$this->no_gaji]);
$this->db->runQuery("DELETE FROM gel_jurnal_detail WHERE Kode_Jurnal=?", [$this->no_gaji]);
$this->db->runQuery("DELETE FROM gel_karyawan WHERE Kode_Jurnal=?", [$this->no_gaji]);
$this->app->json([ 'status' => true ]);
}
public function option_minggu() {
$amg = $this->range_minggu((int) Param::Get("Bulan"), (int) Param::Get("Tahun"));
$ajson['option'] = [];
foreach($amg as $_key => $_val) {
$ajson['option'][] = ['value' => $_key, 'label' => $_val];
}
$this->app->json($ajson);
}
public function index() {
$this->app->json(['html' => '
<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-journal-bookmark me-2"></i>Transaksi Gaji Karyawan</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-save 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>'
]);
}
private function Gaji_Baru(int $id_cab = 0, string $tgl = "", bool $save = false) {
if (empty($tgl)) {
$tno = "J" . date("y") . abjad(date("n"));
} else {
$tmp = explode("-", $tgl);
$tno = "J" . substr($tmp[2],2,2) . abjad((int) $tmp[1]);
}
$tno .= $this->web_app['SERVER_ID'] . $id_cab;
$ino = (int) $this->db->fetchField("SELECT MAX(RIGHT(No_Gaji,5)) FROM gel_gaji WHERE No_Gaji LIKE ?", [$tno.'%']) ?? 0;
$tno .= isi_nol(++$ino, 5);
if ($save===true) $this->db->insert("gel_gaji", [ 'No_Gaji'=>$tno ]);
return $tno;
}
private function Gaji_Copy(string $no_gaji, bool $unix = false): void {
if (empty($no_gaji)) return;
$this->Gaji_Cancel($no_gaji);
$this->db->runQuery("INSERT INTO tmp_gaji_detail (No_Gaji,KaryaID,Qty_Harian,Gaji_Harian,Total_Gaji,Qty_Lembur,Lembur_Harian,Total_Lembur,Qty_BonusM,Qty_BonusB,Bonus_Minggu,Bonus_Bulan,Total_BonusM,Total_BonusB,Total_Potong,Total_Semua,Catatan,UserID,Unix) SELECT No_Gaji,KaryaID,Qty_Harian,Gaji_Harian,Total_Gaji,Qty_Lembur,Lembur_Harian,Total_Lembur,Qty_BonusM,Qty_BonusB,Bonus_Minggu,Bonus_Bulan,Total_BonusM,Total_BonusB,Total_Potong,Total_Semua,Catatan,UserID,'".(($unix)?$this->app->user()->unix():0)."' FROM gel_gaji_detail WHERE No_Gaji=?", [$no_gaji]);
}
private function Gaji_Save(string $no_gaji, bool $is_baru = false, ?string $no_lama = ""): void {
if (empty($no_gaji)) return;
$this->db->delete("gel_gaji_detail", "No_Gaji=?", [$no_gaji]);
if ($is_baru) {
$this->Gaji_Cancel($no_gaji);
$this->db->runQuery("UPDATE tmp_gaji_detail SET No_Gaji=? WHERE No_Gaji=? AND Unix=?", [$no_gaji, $no_lama, $this->app->user()->unix()]);
}
$this->db->runQuery("INSERT INTO gel_gaji_detail (No_Gaji,KaryaID,Qty_Harian,Gaji_Harian,Total_Gaji,Qty_Lembur,Lembur_Harian,Total_Lembur,Qty_BonusM,Qty_BonusB,Bonus_Minggu,Bonus_Bulan,Total_BonusM,Total_BonusB,Total_Potong,Total_Semua,Catatan,UserID) SELECT No_Gaji,KaryaID,Qty_Harian,Gaji_Harian,Total_Gaji,Qty_Lembur,Lembur_Harian,Total_Lembur,Qty_BonusM,Qty_BonusB,Bonus_Minggu,Bonus_Bulan,Total_BonusM,Total_BonusB,Total_Potong,Total_Semua,Catatan,UserID FROM tmp_gaji_detail WHERE No_Gaji=?", [$no_gaji]);
$this->Gaji_Cancel($no_gaji);
}
private function Gaji_Cancel(string $no_gaji = ""): void {
if (empty($no_gaji)) return;
$this->db->delete("tmp_gaji_detail", "No_Gaji=?", [$no_gaji]);
}
private function range_minggu(int $bln=1, int $tahun=2010): array {
$nawal = date('W', mktime(0,0,0,$bln,1,$tahun)) - 1;
$nakhir = date('W', mktime(0,0,0,$bln+1,1,$tahun)) * 1;
$amg = [];
if ($nawal > $nakhir) {
$amg[$nawal] = "Minggu ".$nawal;
$nawal = 1;
}
for ($x = $nawal; $x <= $nakhir; $x++) {
$amg[$x] = "Minggu ".$x;
}
return $amg;
}
}
+315
View File
@@ -0,0 +1,315 @@
<?php
/*******************************************************************
PHP Class : /Controller/Gel/HutangController
Description : Transaksi Pembayaran Hutang Supplier
Created By : Siau Pheng ([email protected]).
Created Date : March 7th, 2011.
Last Modified : September 10th, 2026.
(c) 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
declare(strict_types=1);
namespace App\Controller\Gel;
use App\Utils\Gel;
use flight\Engine;
use flight\database\SimplePdo;
use flight\Session;
use Webapp\DB\SQL;
use Webapp\Web\Form;
use Webapp\Web\Param;
use Webapp\Web\Table;
class HutangController {
private array $app_gel;
private string $mode;
private string $mode_detail;
private int $id_sup;
private string $no_beli;
private int $mode_tampil;
private Gel $gel;
protected Engine $app;
protected SimplePdo $db;
public function __construct(Engine $app, SimplePdo $db, Session $session) {
$this->app = $app;
$this->db = $db;
$this->app_gel = (array) $session->get('APP_GEL');
$this->mode = Param::Get("mode", "");
$this->mode_detail = Param::Get("mode_detail", "");
$this->id_sup = Param::Int("SupID", 0);
$this->no_beli = Param::Get("No_Beli", "");
$this->mode_tampil = Param::Int("Mode_Tampil", 0);
$this->gel = new Gel($app);
}
public function table_nota() {
$tsql = 'SupID=?'; $asql = [$this->id_sup];
if ($this->mode_tampil === 0) {
$tsql .= " AND Lunas=0";
}
$obj = new Table($this->app);
$obj->set_table("(SELECT No_Beli,Tgl_Beli,Real_Diskon,Real_Beli,Real_Beli+Real_Diskon Sub_Total,IF(Data_Beli=1,'B','R') Tipe,CabID,Lunas FROM inv_beli WHERE ".$tsql.") B LEFT JOIN para_cabang C ON (C.CabID=B.CabID)", "B.*,C.Nama_Cab", "", $asql);
$obj->set_footer("SUM(B.Real_Beli) Real_Beli");
$obj->add_field("Tipe", "Tipe", "hid");
$obj->add_field("No_Beli", "No. Trans", "c");
$obj->add_field("Tgl_Beli", "Tgl. Trans", "c", "sqltgl", "", "val-tgl");
$obj->add_field("Nama_Cab", "Cabang", "l");
$obj->add_field("Sub_Total", "Sub. Total", "r", "rupiah", "rupiah");
$obj->add_field("Real_Diskon", "Diskon", "r", "rupiah");
$obj->add_field("Real_Beli", "TOTAL", "r", "rupiah", "rupiah");
if ($this->mode_tampil === 1) $obj->add_field("Lunas", "Lunas", "c", "checkbox");
$obj->set_field_order("No_Beli", "A");
$obj->add_row_btn("save", "Pilih", "GELHutangJS.nota_select");
$this->app->json([ $obj->json_table("divTXNota") ]);
}
public function table_bayar() {
$ajson = [];
$lunas = (int) Param::Get("Lunas", 0);
if (in_array($this->mode_detail, ["insert","update","delete"])) {
$sql = new SQL($this->app);
$sql->set_table("inv_beli_lunas");
$sql->add_param("No_Beli");
$sql->add_param_date("Tgl_Bayar");
$sql->add_param("Total_Bayar");
$sql->add_param("Total_Potong");
$sql->add_param_userid();
$sql->add_where("ID");
$sql->add_where("No_Beli", $this->no_beli);
$tgl_bayar = Param::Get("Tgl_Bayar", "00-00-0000");
if ($this->mode_detail === "insert") {
$abeli = $this->db->fetchRow("SELECT CabID,SupID FROM inv_beli WHERE No_Beli=?", [$this->no_beli]) ?? ['CabID'=>0, 'SupID'=>0];
$sql->add_param("CabID", $abeli['CabID']);
$sql->add_param("SupID", $abeli['SupID']);
$sql->InsertDB();
$id_bayar = $sql->LastInsertID();
// PROSES POSTING GL
if (Param::Get("Tipe_Nota","B")==="B") {
$tcat = "Pembayaran Faktur : "; $ddk = "D"; $kdk = "K";
} else {
$tcat ="Retur Nota : "; $ddk = "K"; $kdk = "D";
}
$tot_bayar = (float) Param::Get("Total_Bayar", 0);
$tot_potong = (float) Param::Get("Total_Potong", 0);
$ajurnal = [
'Kode_Jurnal' => "",
'TipeID' => 10,
'CabID' => $abeli['CabID'],
'Tanggal' => $tgl_bayar,
'Kode_Ref' => $this->no_beli,
'Catatan' => $tcat . Param::Get("Nama_Sup", "")
];
$adetail = [
[ 'Kode_Rek' => $this->app_gel['HUT_USAHA'], 'DK' => $ddk, 'Jumlah' => $tot_bayar+$tot_potong, 'SupID' => $this->id_sup ],
[ 'Kode_Rek' => Param::Get("Kode_Rek", ""), 'DK' => $kdk, 'Jumlah' => $tot_bayar ]
];
if ($tot_potong > 0) array_push($adetail, [ 'Kode_Rek' => $this->app_gel['POT_BELI'], 'DK' => $kdk, 'Jumlah' => $tot_potong ]);
$gel_jur = $this->gel->Jurnal_Post($ajurnal, $adetail);
$this->db->update("inv_beli_lunas", ['Kode_Jurnal'=>$gel_jur], "No_Beli=? AND ID=?", [$this->no_beli, $id_bayar]);
} else if ($this->mode_detail === "delete") {
// PROSES POSTING GL
$gel_jur = $this->db->fetchField("SELECT Kode_Jurnal FROM inv_beli_lunas WHERE No_Beli=? AND ID=?", [$this->no_beli, Param::Get("ID", 0)]) ?? '';
if (!empty($gel_jur)) {
$this->db->delete("gel_jurnal", "Kode_Jurnal=?", [$gel_jur]);
$this->db->delete("gel_jurnal_detail", "Kode_Jurnal=?", [$gel_jur]);
}
$sql->DeleteDB();
}
$anota = $this->db->fetchRow("SELECT SUM(Total_Bayar) Bayar,SUM(Total_Potong) Potong FROM inv_beli_lunas WHERE No_Beli=?", [$this->no_beli]) ?? ['Bayar'=>0, 'Potong'=>0];
$this->db->runQuery("UPDATE inv_beli SET Total_Bayar=?,Total_Potong=?,Lunas=IF(Real_Beli-Total_Bayar-Total_Potong=0,1,0),Tgl_Lunas=IF(Lunas=1,'".tgl_sql2str($tgl_bayar)."','0000-00-00') WHERE No_Beli=?", [$anota['Bayar'], $anota['Potong'], $this->no_beli]);
$this->gel->Update_Lunas_Sup($this->id_sup);
$anota = $this->db->fetchRow("SELECT Lunas,Real_Beli-Total_Bayar-Total_Potong Total_Sisa FROM inv_beli WHERE No_Beli=?", [$this->no_beli]) ?? ['Lunas'=>0, 'Total_Sisa'=>0];
$lunas = $anota['Lunas'];
$ajson[] = ['type'=>"form", 'id'=>"Total_Sisa", 'value'=>$anota['Total_Sisa']];
$ajson[] = ['type'=>"form", 'id'=>"Lunas", 'value'=>$anota['Lunas']];
}
$obj = new Table($this->app);
$obj->set_table("inv_beli_lunas", "*", "No_Beli=?", [$this->no_beli]);
$obj->add_field("ID", "ID", "hid");
$obj->add_field("Tgl_Bayar", "Tgl. Bayar", "c", "sqltgl", "", "val-tgl");
$obj->add_field("Kode_Jurnal", "Kode Jurnal", "c");
$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 ($this->app->user()->is_level(0) && ($lunas===0 || ($lunas===1 && $this->mode_tampil===1))) {
$obj->add_row_btn("trash", "Hapus", "GELHutangJS.bayar_hapus", "No_Beli", $this->no_beli);
}
if ($lunas === 0) {
$obj->set_func_btn("GELHutangJS.bayar_show", '<i class="bi-wallet me-1"></i> Pembayaran');
}
$ajson[] = $obj->json_table("divDetailBayar");
$this->app->json($ajson);
}
public function brow_sup() {
$tcari = Param::Get("Cari_Sup");
$tsql = 'Lunas>0'; $asql = [];
if (!empty($tcari)) {
$tsql .= " AND CONCAT(Kode_Sup,Nama_Sup,Telp_Sup) LIKE ?";
$asql[] = '%' . $tcari . '%';
}
$obj = new Table($this->app);
$obj->set_table("para_supplier", "*", $tsql, $asql);
$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->set_func_select("GELHutangJS.sup_select");
$this->app->json([ $obj->db_table("divBrowSup") ]);
}
public function auto_sup() {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
$stat = $this->db->runQuery("SELECT * FROM para_supplier WHERE Lunas>0 AND CONCAT(Kode_Sup,Nama_Sup,Telp_Sup) LIKE ? ORDER BY Kode_Sup LIMIT 50", ['%'.$tcari.'%']);
while ($row = $stat->fetch(SimplePdo::FETCH_ASSOC)) {
$ajson['autodata'][] = ['value'=>$row['SupID'], 'text'=>$row['Nama_Sup'], 'html'=>'<span class="text-primary">'.$row['Kode_Sup'].'</span> '.$row['Nama_Sup'], 'data'=>$row['Alamat_Sup'], 'bc'=>0];
}
$this->app->json($ajson);
}
public function form_master() {
$ajson = [ 'error'=>"", 'html'=>"" ];
$atabel = [ 'SupID'=>0, 'Nama_Sup'=>"", 'Alamat_Sup'=>"" ];
$form = new Form($this->app);
$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"><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"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="SupID" value="0" >
<input type="hidden" id="Mode_Tampil" value="0" >';
$this->app->json($ajson);
}
public function form_nota() {
$tipe = Param::Get("Tipe_Nota", "B");
$atabel = [ 'No_Beli'=>$this->no_beli ];
if (!empty($this->no_beli)) {
$atabel = $this->db->fetchRow("SELECT *,Real_Beli+Real_Diskon Sub_Total,Real_Beli-Total_Bayar-Total_Potong Sisa_Bayar FROM inv_beli WHERE No_Beli=?", [$this->no_beli]);
}
$form = new Form($this->app);
$tnota = $form->textbox("_", "No_Beli", $atabel['No_Beli'], false, false, "text");
$tfaktur = $form->textbox("_", "No_Faktur", $atabel['No_Faktur'], false, false, "text");
$ttglnota = $form->datebox("_", "Tgl_Beli", $atabel['Tgl_Beli'], false, false);
$ttglfaktur = $form->datebox("_", "Tgl_Faktur", $atabel['Tgl_Faktur'], false, false);
$tsubtot = $form->textbox("_", "Real_Beli", $atabel['Sub_Total'], false, false, "double");
$tdiskon = $form->textbox("_", "Ral_Diskon", $atabel['Real_Diskon'], false, false, "double");
$tjumlah = $form->textbox("_", "Jumlah", $atabel['Real_Beli'], false, false, "double");
$ajson['html'] = '
<div class="row mb-1">
<div class="col text-center fs-5 pb-1">Informasi Faktur / Retur</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label">No. '.(($tipe=="B")?"Transaksi":"Retur").'</label>
<div class="col-sm-8 col-lg-4">'.$tnota.'</div>
<label class="col-sm-4 col-lg-2 col-form-label">Jumlah '.(($tipe=="B")?"Transaksi":"Retur").'</label>
<div class="col-sm-8 col-lg-4">'.$tsubtot.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label">'.(($tipe=="B")?"No. Faktur":"Catatan").'</label>
<div class="col-sm-8 col-lg-4">'.$tfaktur.'</div>
<label class="col-sm-4 col-lg-2 col-form-label">Jumlah Diskon</label>
<div class="col-sm-8 col-lg-4">'.$tdiskon.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label">Tgl. '.(($tipe=="B")?"Transaksi":"Retur").'</label>
<div class="col-sm-8 col-lg-4">'.$ttglnota.'</div>
<label class="col-sm-4 col-lg-2 col-form-label">Total Faktur</label>
<div class="col-sm-8 col-lg-4">'.$tjumlah.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label">Tgl. Faktur</label>
<div class="col-sm-8 col-lg-4">'.$ttglfaktur.'</div>
</div>
<div class="row"><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.'" >';
$this->app->json($ajson);
}
public function form_bayar() {
$form = new Form($this->app);
$ttglbyr = $form->datebox("_", "Tgl_Bayar", tgl_ymd(), true, false);
$trek = $form->option_db("_", "Kode_Rek", $this->app_gel['KAS_TUNAI'], true, false, "vi_gel_acc", ["Kode_Rek","Nama_Lengkap"], "Kas_Rek=1 AND Aktif=1 AND Mode='D' ORDER BY Kode_Rek");
$ttotal = $form->textbox("_", "Temp_Total", Param::Get("Total_Sisa",0), false, false, "double");
$tbayar = $form->textbox("_", "Total_Bayar", Param::Get("Total_Sisa",0), true, false, "double");
$tpotong = $form->textbox("_", "Total_Potong", 0, true, false, "double");
$ajson['html'] = '
<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-sm-8 col-lg-6">'.$ttglbyr.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Kode_Rek">Rekening Kredit</label>
<div class="col">'.$trek.'</div>
</div>
<div class="row"><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">Jumlah Sisa</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>';
$this->app->json($ajson);
}
public function index() {
$this->app->json(['html' => '
<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-journal-bookmark me-2"></i>Transaksi Pembayaran Hutang Supplier</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>'
]);
}
}
+252
View File
@@ -0,0 +1,252 @@
<?php
/*******************************************************************
PHP Class : /Controller/Gel/KaryaController
Description : Transaksi Pinjaman Karyawan
Created By : Siau Pheng ([email protected]).
Created Date : September 9th, 2014.
Last Modified : September 14th, 2026.
(c) 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
declare(strict_types=1);
namespace App\Controller\Gel;
use App\Utils\Gel;
use flight\Engine;
use flight\database\SimplePdo;
use flight\Session;
use Webapp\DB\SQL;
use Webapp\Web\Form;
use Webapp\Web\Param;
use Webapp\Web\Table;
class KaryaController {
private array $app_gel;
private string $mode;
private string $mode_detail;
private int $id_karya;
private int $is_pinjam;
private string $no_trans;
private Gel $gel;
protected Engine $app;
protected SimplePdo $db;
public function __construct(Engine $app, SimplePdo $db, Session $session) {
$this->app = $app;
$this->db = $db;
$this->app_gel = (array) $session->get('APP_GEL');
$this->mode = Param::Get("mode", "");
$this->mode_detail = Param::Get("mode_detail", "");
$this->id_karya = Param::Int("KaryaID", 0);
$this->is_pinjam = Param::Int("is_pinjam", 0);
$this->no_trans = Param::Get("No_Trans", "");
$this->gel = new Gel($app);
}
public function table_karya() {
if (in_array($this->mode_detail, ["insert","update","delete"])) {
$sql = new SQL($this->app);
$sql->set_table("gel_karyawan");
$sql->add_param_date("Tgl_Trans");
$sql->add_param("Catatan");
$sql->add_param_userid();
$sql->add_where("No_Trans", $this->no_trans);
$tgl_trans = Param::Get("Tgl_Trans");
if ($this->mode_detail === "insert") {
$this->no_trans = $this->gel->Karya_Baru($tgl_trans);
$sql->add_param("No_Trans", $this->no_trans);
$sql->add_param("KaryaID");
// PROSES POSTING GL
if ($this->is_pinjam === 1) {
$sql->add_param("Total_Pinjam");
$tcat = "Pinjaman Karyawan : "; $ddk = "D"; $kdk = "K";
} else {
$sql->add_param("Total_Bayar");
$tcat = "Pembayaran Karyawan : "; $ddk = "K"; $kdk = "D";
}
$sql->InsertDB();
$tot_jumlah = (float) Param::Get("Total_Bayar", 0) + (float) Param::Get("Total_Pinjam", 0);
$ajurnal = [
'TipeID' => 13,
'Tanggal' => $tgl_trans,
'Kode_Ref' => $this->no_trans,
'Catatan' => $tcat.(string) Param::Get("Nama_Karya").", Untuk : ".(string) Param::Get("Catatan")
];
$adetail = [];
$adetail[] = [
'Kode_Rek' => $this->app_gel['PIU_KARYA'],
'DK' => $ddk,
'Jumlah' => $tot_jumlah
];
$adetail[] = [
'Kode_Rek' => (string) Param::Get("Kode_Rek"),
'DK' => $kdk,
'Jumlah' => $tot_jumlah
];
$kode_jurnal = $this->gel->Jurnal_Post($ajurnal, $adetail);
$this->db->update("gel_karyawan", [ 'Kode_Jurnal'=>$kode_jurnal ], "No_Trans=?", [ $this->no_trans ]);
} else if ($this->mode_detail === "delete") {
$sql->DeleteDB();
// PROSES POSTING GL
$kode_jurnal = $this->db->fetchField("SELECT Kode_Jurnal FROM gel_karyawan WHERE No_Trans=?", [ $this->no_trans ]) ?? '';
if (!empty($kode_jurnal)) {
$this->db->delete("gel_jurnal", "Kode_Jurnal=?", [ $kode_jurnal ]);
$this->db->delete("gel_jurnal_detail", "Kode_Jurnal=?", [ $kode_jurnal ]);
}
}
$ipinjam = (float) $this->db->fetchField("SELECT SUM(Total_Pinjam-Total_Bayar) FROM gel_karyawan WHERE KaryaID=?", [ $this->id_karya ]) ?? 0;
$this->db->update("para_karyawan", ['Total_Pinjam'=>$ipinjam], "KaryaID=?", [ $this->id_karya ]);
}
$obj = new Table($this->app);
$obj->set_table("gel_karyawan", "*", "KaryaID=?", [ $this->id_karya ]);
$obj->set_footer("SUM(Total_Pinjam) Total_Pinjam,SUM(Total_Bayar) Total_Bayar");
$obj->add_field("No_Trans", "No. Trans", "c");
$obj->add_field("Tgl_Trans", "Tgl. Trans", "c", "sqltgl", "", "val-tgl");
$obj->add_field("Kode_Jurnal", "Kode Jurnal", "c");
$obj->add_field("Total_Pinjam", "Pinjaman", "r", "rupiah", "rupiah");
$obj->add_field("Total_Bayar", "Setoran", "r", "rupiah", "rupiah");
$obj->add_field("Catatan", "Catatan", "awr");
$obj->set_field_order("Tgl_Trans", "A");
$obj->add_row_btn("trash", "Hapus", "GELKaryaJS.karya_hapus", "Kunci", 0);
$this->app->json([ $obj->json_table("divTXKarya") ]);
}
public function form_master() {
$ajson = [ 'error'=>"", 'html'=>"" ];
$atabel = ['KaryaID'=>0, 'Total_Pinjam'=>0, 'Tot_Pinjam'=>0, 'Tot_Bayar'=>0];
if ($this->id_karya > 0) {
$row = $this->db->fetchRow("SELECT * FROM para_karyawan WHERE KaryaID=?", [ $this->id_karya ]);
if ($row) {
$atabel = $row->getData();
if ((int) $atabel['KaryaID'] > 0) {
$_tot = $this->db->fetchRow("SELECT SUM(Total_Pinjam) Tot_Pinjam,SUM(Total_Bayar) Tot_Bayar FROM gel_karyawan WHERE KaryaID=?", [ $atabel['KaryaID'] ]);
if ($_tot) $atabel = array_merge($atabel, $_tot->getData());
}
} else {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
}
}
$ket_saldo = ((float) $atabel['Total_Pinjam'] > 0) ? "Saldo Pinjaman" : "Saldo Simpanan";
$form = new Form($this->app);
$tkary = $form->option_db("_", "KaryaID", $atabel['KaryaID'], true, false, "para_karyawan", ["KaryaID","Nama_Karya"], "Aktif=1 ORDER BY Nama_Karya", null, null, "GELKaryaJS.ocKarya");
$ttot_pin = '<input type="double" class="form-control text-end" id="Tot_Pinjam" value="'.rupiah($atabel['Tot_Pinjam']).'" readonly="">';
$ttot_bay = '<input type="double" class="form-control text-end" id="Tot_Bayar" value="'.rupiah($atabel['Tot_Bayar']).'" readonly="">';
$tpinjam = '<input type="double" class="form-control text-end '.((float) $atabel['Total_Pinjam'] > 0?'text-danger':'text-primary').'" id="Jumlah_Pinjam" value="'.rupiah($atabel['Total_Pinjam']).'" readonly="">';
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-7">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="KaryaID">Nama Karyawan</label>
<div class="col-sm-7 col-lg-7">'.$tkary.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">'.$ket_saldo.'</label>
<div class="col-sm-7 col-lg-6">'.$tpinjam.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-5">
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label">Jumlah Pinjaman</label>
<div class="col">'.$ttot_pin.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label">Jumlah Setoran</label>
<div class="col">'.$ttot_bay.'</div>
</div>
</div>
</div>
<div class="row"><div class="col"><hr class="my-1"></div></div>';
$this->app->json($ajson);
}
public function form_pinjam() {
$form = new Form($this->app);
$ttgltran = $form->datebox("_", "Tgl_Trans", tgl_ymd(), true, false);
$trek = $form->option_db("_", "Kode_Rek", $this->app_gel['KAS_TUNAI'], true, false, "vi_gel_acc", ["Kode_Rek","Nama_Lengkap"], "Kas_Rek=1 AND Aktif=1 AND Mode='D' ORDER BY Kode_Rek");
$tpinjam = $form->textbox("_", "Total_Pinjam", 0, true, false, "double");
$tcatat = $form->textarea("_", "Catatan", "", true, false, 2);
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Tgl_Trans">Tanggal Transaksi</label>
<div class="col-sm-8 col-lg-6">'.$ttgltran.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Kode_Rek">Rekening Kredit</label>
<div class="col">'.$trek.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Total_Pinjam">Jumlah Pinjaman</label>
<div class="col-sm-8 col-lg-6">'.$tpinjam.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Catatan">Keterangan</label>
<div class="col">'.$tcatat.'</div>
</div>';
$this->app->json($ajson);
}
public function form_bayar() {
$form = new Form($this->app);
$ttgltran = $form->datebox("_", "Tgl_Trans", tgl_ymd(), true, false);
$trek = $form->option_db("_", "Kode_Rek", $this->app_gel['KAS_TUNAI'], true, false, "vi_gel_acc", ["Kode_Rek","Nama_Lengkap"], "Kas_Rek=1 AND Aktif=1 AND Mode='D' ORDER BY Kode_Rek");
$tbayar = $form->textbox("_", "Total_Bayar", 0, true, false, "double");
$tcatat = $form->textarea("_", "Catatan", "", true, false, 2);
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Tgl_Trans">Tanggal Transaksi</label>
<div class="col-sm-8 col-lg-6">'.$ttgltran.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Kode_Rek">Rekening Debit</label>
<div class="col">'.$trek.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Total_Bayar">Jumlah Pembayaran</label>
<div class="col-sm-8 col-lg-6">'.$tbayar.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Catatan">Keterangan</label>
<div class="col">'.$tcatat.'</div>
</div>';
$this->app->json($ajson);
}
public function index() {
$this->app->json(['html' => '
<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-journal-bookmark me-2"></i>Transaksi Simpan / Pinjam Karyawan</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-warning mb-1 ms-2" id="butPinjam" type="button"><i class="bi-box-arrow-in-right me-2"></i>Pinjam</button>
<button class="btn btn-success mb-1 ms-2" id="butBayar" type="button"><i class="bi-box-arrow-in-left me-2"></i>Bayar</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="divTXKarya">&nbsp;</div>
</div>
</div>
</div></div>
</div>'
]);
}
}
+302
View File
@@ -0,0 +1,302 @@
<?php
/*******************************************************************
PHP Class : /Controller/Gel/KeluarController
Description : Jurnal Pengeluaran Kas / Bank
Created By : Siau Pheng ([email protected]).
Created Date : May 22th, 2010.
Last Modified : September 10th, 2026.
(c) 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
declare(strict_types=1);
namespace App\Controller\Gel;
use App\Utils\Gel;
use flight\Engine;
use flight\database\SimplePdo;
use flight\Session;
use Webapp\DB\SQL;
use Webapp\Web\Form;
use Webapp\Web\Param;
use Webapp\Web\Table;
class KeluarController {
private array $web_app;
private array $app_gel;
private int $id_cab;
private string $mode;
private string $mode_detail;
private string $kode_jurnal;
private string $kode_rek;
private Gel $gel;
protected Engine $app;
protected SimplePdo $db;
public function __construct(Engine $app, SimplePdo $db, Session $session) {
$this->app = $app;
$this->db = $db;
$this->web_app = (array) $session->get('WEB_APP');
$this->app_gel = (array) $session->get('APP_GEL');
$this->id_cab = Param::Int("CabID", $session->get('APP_INV')['CABANGID']);
$this->mode = Param::Get("mode", "");
$this->mode_detail = Param::Get("mode_detail", "");
$this->kode_jurnal = Param::Get("Kode_Jurnal", "");
$this->kode_rek = Param::Get("Kode_Rek", "");
$this->gel = new Gel($app);
}
public function table_detail() {
if (in_array($this->mode_detail, ["insert","update","delete"])) {
$sql = new SQL($this->app);
$sql->set_table("tmp_gel_jurnal_detail");
$sql->add_param("Kode_Rek");
$sql->add_param("DK", "K");
$sql->add_param("Jumlah");
$sql->add_param_unix();
$sql->add_param_userid();
$sql->add_where("Kode_Jurnal");
$sql->add_where("ID");
if ($this->mode_detail === "insert") {
$sql->add_param("Kode_Jurnal");
$sql->InsertDB();
} else if ($this->mode_detail === "update") {
$sql->UpdateDB();
} else if ($this->mode_detail === "delete") {
$sql->DeleteDB();
}
}
$tsql = ''; $asql = [$this->kode_jurnal, "D"]; $qtabel = "gel_jurnal_detail";
if (in_array($this->mode, ["add","edit"])) {
if ($this->mode === "add") { $tsql = " AND Unix=?"; $asql[] = $this->app->user()->unix(); }
$qtabel = "tmp_gel_jurnal_detail";
}
$obj = new Table($this->app);
$obj->set_table("(SELECT * FROM ".$qtabel." WHERE Kode_Jurnal=? AND DK=?".$tsql.") D LEFT JOIN gel_acc A ON (D.Kode_Rek=A.Kode_Rek)", "D.*,D.Jumlah Jumlah2,A.Nama_Rek", "", $asql);
$obj->set_footer("SUM(Jumlah) Jumlah2, COUNT(*) Kode_Rek");
$obj->add_field("ID", "ID", "hid");
$obj->add_field("Kode_Rek", "Kode", "c", "", "records");
$obj->add_field("Nama_Rek", "Rekening Debit", "awr");
$obj->add_field("Jumlah2", "Jumlah", "r", "kurung", "kurung");
$obj->set_field_order("Kode_Rek", "A");
if (in_array($this->mode, ["add","edit"])) {
$obj->add_row_btn("clipboard", "Ubah", "GELKeluarJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "GELKeluarJS.detail_hapus", "Unix", $this->app->user()->unix());
$obj->set_func_btn("GELKeluarJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Rekening');
$obj->set_func_btn("GELKeluarJS.rek_brow", '<i class="bi-table me-1"></i> Browse');
}
$nitems = (int) $this->db->fetchField("SELECT COUNT(*) FROM ".$qtabel." WHERE Kode_Jurnal=? AND DK=?".$tsql, $asql) ?? 0;
$this->app->json([ $obj->json_table("divDetailTabel"), ['type'=>"form", 'id'=>"Total_Item", 'value'=>$nitems] ]);
}
public function brow_tx() {
$tcari = Param::Get("Cari_TX");
$tsql = 'TipeID=3'; $asql = [];
if (!empty($tcari)) {
$tsql .= " AND CONCAT(Kode_Jurnal,DATE_FORMAT(Tanggal,'%d-%m-%Y'),Kode_Ref,Catatan) LIKE ?";
$asql[] = '%' . $tcari . '%';
}
$obj = new Table($this->app);
$obj->set_table("gel_jurnal", "*", $tsql, $asql);
$obj->add_field("Kode_Jurnal", "Kode Jurnal", "c");
$obj->add_field("Tanggal", "Tanggal", "c", "sqltgl", "", "val-tgl");
$obj->add_field("Kode_Ref", "Kode Ref.", "l");
$obj->add_field("Catatan", "Deskripsi", "awr");
$obj->set_field_order("Kode_Jurnal", "D");
$obj->set_func_select("GELKeluarJS.tx_select");
$this->app->json([ $obj->db_table("divBrowTX") ]);
}
public function brow_rek() {
$tcari = Param::Get("Cari_Rek");
$tsql = 'Aktif=1 AND Mode="D"'; $asql = [];
if (!empty($tcari)) {
$tsql .= " AND CONCAT(Kode_Rek,Nama_Rek) LIKE ?";
$asql[] = '%' . $tcari . '%';
}
$obj = new Table($this->app);
$obj->set_table("gel_acc", "*", $tsql, $asql);
$obj->add_field("Kode_Rek", "Kode", "c");
$obj->add_field("Nama_Rek", "Nama Rekening", "awr");
$obj->add_field("Level", "Level", "c");
$obj->set_field_order("Kode_Rek", "A");
$obj->set_func_select("GELKeluarJS.rek_select");
$this->app->json([ $obj->db_table("divBrowRek") ]);
}
public function auto_rek() {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
$stat = $this->db->runQuery("SELECT Kode_Rek,Nama_Rek,CONCAT(Kode_Rek,' - ',Nama_Rek) Nama_Lengkap FROM gel_acc WHERE Aktif=1 AND Mode='D' AND CONCAT(Kode_Rek,Nama_Rek) LIKE ? ORDER BY Kode_Rek LIMIT 50", ['%'.$tcari.'%']);
while ($row = $stat->fetch(SimplePdo::FETCH_ASSOC)) {
$ajson['autodata'][] = ['value'=>$row['Kode_Rek'], 'text'=>$row['Nama_Rek'], 'html'=>'<span class="text-primary">'.$row['Kode_Rek'].'</span> '.$row['Nama_Rek'], 'data'=>"", 'bc'=>0];
}
$this->app->json($ajson);
}
public function form_master() {
$ajson = [ 'error'=>"", 'html'=>"" ];
$atabel = [ 'Kode_Jurnal'=>"", 'CabID'=>$this->id_cab, 'Kode_Ref'=>"", 'Tanggal'=>tgl_ymd(), 'Kode_Kas'=>"", 'Catatan'=>"" ];
if ($this->mode === "add") {
$atabel['Kode_Jurnal'] = "GK-BARU#".(string) $this->web_app['SERVER_ID']. $this->app->user()->id(3);
$atabel['Tanggal'] = tgl_ymd();
$atabel['Kode_Kas'] = $this->app_gel['KAS_TUNAI'];
$this->kode_jurnal = "";
} else if ($this->mode === "edit") {
$this->gel->Detail_Copy($this->kode_jurnal);
} else if ($this->mode === "save") {
$no_lama = $this->kode_jurnal;
$tgl_jurn = Param::Get("Tanggal");
$b_baru = str_contains($no_lama, "BARU");
if ($b_baru) $this->kode_jurnal = $this->gel->Jurnal_Baru($this->id_cab, $tgl_jurn, true);
$kode_kas = Param::Get("Kode_Kas");
$this->db->runQuery("DELETE FROM tmp_gel_jurnal_detail WHERE Kode_Jurnal='".$no_lama."' AND LEFT(Kode_Rek,1)='1' AND DK='K'");
$ntot_kas = $this->db->fetchField("SELECT SUM(-Jumlah) FROM tmp_gel_jurnal_detail WHERE Kode_Jurnal=? AND Unix=?", [$no_lama, $this->app->user()->unix()]) ?? 0;
$this->db->insert("tmp_gel_jurnal_detail", [ 'Kode_Jurnal'=>$no_lama, 'Kode_Rek'=>$kode_kas, 'DK'=>'K', 'Jumlah'=>$ntot_kas,'Unix'=>$this->app->user()->unix(), 'UserID'=>$this->app->user()->id() ]);
$this->gel->Detail_Save($this->kode_jurnal, 3, $this->id_cab, $tgl_jurn, $b_baru, $no_lama);
$this->gel->Jurnal_Save($this->kode_jurnal, 3, $this->id_cab, $tgl_jurn, Param::Get("Kode_Ref"), Param::Get("Catatan"));
$atabel['Tanggal'] = $tgl_jurn;
$this->mode = "view";
} else if ($this->mode === "cancel") {
$this->gel->Detail_Cancel($this->kode_jurnal);
$this->mode = "view";
$this->kode_jurnal = "";
}
if (!empty($this->kode_jurnal) && $this->mode !== "cancel") {
$row = $this->db->fetchRow("SELECT * FROM gel_jurnal WHERE Kode_Jurnal='".$this->kode_jurnal."' AND TipeID=3");
if ($row) {
$atabel = $row;
$atabel['Kode_Kas'] = $this->db->fetchField("SELECT Kode_Rek FROM gel_jurnal_detail WHERE Kode_Jurnal='".$atabel['Kode_Jurnal']."' AND DK='K' LIMIT 1") ?? '';
} else {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
}
}
$enable = in_array($this->mode, ["add","edit"]) ? true : false;
$form = new Form($this->app);
$tkode = $form->textbox("_", "Kode_Jurnal", $atabel['Kode_Jurnal'], !$enable, false, "text", "kode jurnal");
$tref = $form->textbox("_", "Kode_Ref", $atabel['Kode_Ref'], $enable, false, "text", "kode referensi");
$ttgl = $form->datebox("_", "Tanggal", $atabel['Tanggal'], $enable, false);
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID");
$tkas = $form->option_db("_", "Kode_Kas", $atabel['Kode_Kas'], $enable, false, "vi_gel_acc", ["Kode_Rek","Nama_Lengkap"], "Kas_Rek=1 AND Aktif=1 AND Mode='D' ORDER BY Kode_Rek");
$tcatat = $form->textbox("_", "Catatan", stripslashes($atabel['Catatan']), $enable, false, "text", "catatan jurnal");
$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="Kode_Jurnal">Kode Jurnal</label>
<div class="col-sm-7 col-lg-7"><div class="input-group">'.$tkode.'<button id="butBrow" class="btn btn-info" type="button"><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="Tanggal">Tanggal Jurnal</label>
<div class="col-sm-7 col-lg-5">'.$ttgl.'</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="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Kode_Ref">Kode Ref.</label>
<div class="col">'.$tref.'</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%;">Deskripsi</label>
<div class="col">'.$tcatat.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-3 col-lg-2 col-form-label" for="Kode_Kas" style="width:12.5%;">Rekening Kredit</label>
<div class="col-sm-7 col-lg-6">'.$tkas.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="Total_Item" value="0" >
<input type="hidden" id="mode" value="'.$this->mode.'" >';
$this->app->json($ajson);
}
public function form_rek() {
$id = (int) Param::Get("ID", 0);
$atabel = [ 'ID'=>$id, 'Kode_Rek'=>$this->kode_rek, 'Nama_Rek'=>"", 'Jumlah'=>0 ];
if ($id > 0) {
$atabel = $this->db->fetchRow("SELECT * FROM tmp_gel_jurnal_detail WHERE Kode_Jurnal=? AND ID=?", [$this->kode_jurnal, $id]);
}
if (!empty($atabel['Kode_Rek'])) {
$atabel['Nama_Rek'] = $this->db->fetchField("SELECT Nama_Rek FROM gel_acc WHERE Kode_Rek=?", [$atabel['Kode_Rek']]) ?? '';
}
$form = new Form($this->app);
$tkode = $form->textbox("_", "Kode_Rek", $atabel['Kode_Rek'], false, false, "text");
$tnama = $form->textauto("_", "Nama_Rek", ['value'=>$atabel['Kode_Rek'],'text'=>$atabel['Nama_Rek']], true, true, "ketik kode / nama rekening");
$tjumlah = $form->textbox("_", "Jumlah", abs($atabel['Jumlah']), true, true, "double");
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label">Kode Rekening</label>
<div class="col-sm-4 col-lg-3">'.$tkode.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Rek">Nama Rekening</label>
<div class="col">'.$tnama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Jumlah">Jumlah (Rp.)</label>
<div class="col-sm-4 col-lg-5">'.$tjumlah.'</div>
</div>
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >
<input type="hidden" id="mode_detail" value="'.$this->mode_detail.'" >';
$this->app->json($ajson);
}
public function proses_hapus() {
$this->db->runQuery("DELETE FROM gel_jurnal WHERE Kode_Jurnal='".$this->kode_jurnal."'");
$this->db->runQuery("DELETE FROM gel_jurnal_detail WHERE Kode_Jurnal='".$this->kode_jurnal."'");
$this->app->json([ 'status' => true ]);
}
public function index() {
$this->app->json(['html' => '
<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-journal-bookmark me-2"></i>Jurnal Pengeluaran Kas / Bank</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-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-save 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>'
]);
}
}
+329
View File
@@ -0,0 +1,329 @@
<?php
/*******************************************************************
PHP Class : /Controller/Gel/PiutangController
Description : Transaksi Penerimaan Piutang Buyer / Member
Created By : Siau Pheng ([email protected]).
Created Date : March 7th, 2011.
Last Modified : September 13th, 2026.
(c) 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
declare(strict_types=1);
namespace App\Controller\Gel;
use App\Utils\Gel;
use flight\Engine;
use flight\database\SimplePdo;
use flight\Session;
use Webapp\DB\SQL;
use Webapp\Web\Form;
use Webapp\Web\Param;
use Webapp\Web\Table;
class PiutangController {
private array $app_gel;
private string $mode;
private string $mode_detail;
private int $id_buyer;
private string $no_jual;
private int $mode_tampil;
private Gel $gel;
protected Engine $app;
protected SimplePdo $db;
public function __construct(Engine $app, SimplePdo $db, Session $session) {
$this->app = $app;
$this->db = $db;
$this->app_gel = (array) $session->get('APP_GEL');
$this->mode = Param::Get("mode", "");
$this->mode_detail = Param::Get("mode_detail", "");
$this->id_buyer = Param::Int("MemberID", 0);
$this->no_jual = Param::Get("No_Jual", "");
$this->mode_tampil = Param::Int("Mode_Tampil", 0);
$this->gel = new Gel($app);
}
public function table_nota() {
$tsql = 'FALSE'; $asql = [];
if ($this->id_buyer > 0) {
$tsql = 'MemberID=?';
$asql[] = $this->id_buyer;
if ($this->mode_tampil === 0) {
$tsql .= " AND Lunas=0";
}
}
$obj = new Table($this->app);
$obj->set_table("(SELECT No_Jual,Tgl_Jual,Total_Jual,Total_Diskon,Total_Jual-Total_Diskon Total,Total_Bayar+Total_Potong Bayar,Total_Jual-Total_Diskon-Total_Bayar-Total_Potong Sisa,IF(Data_Jual=1,'J','R') Tipe,CabID,Lunas FROM inv_jual WHERE ".$tsql.") J LEFT JOIN para_cabang C ON (C.CabID=J.CabID)", "J.*,C.Nama_Cab", "", $asql);
$obj->set_footer("SUM(J.Total) Total,SUM(J.Bayar) Bayar,SUM(J.Sisa) Sisa");
$obj->add_field("Tipe", "Tipe", "hid");
$obj->add_field("No_Jual", "No. Trans", "c");
$obj->add_field("Tgl_Jual", "Tgl. Trans", "c", "sqltgl", "", "val-tgl");
$obj->add_field("Nama_Cab", "Cabang", "l");
$obj->add_field("Total_Jual", "Sub. Total", "r", "rupiah", "rupiah");
$obj->add_field("Total_Diskon", "Diskon", "r", "rupiah");
$obj->add_field("Total", "TOTAL", "r", "rupiah", "rupiah");
$obj->add_field("Bayar", "BAYAR", "r", "rupiah", "rupiah");
$obj->add_field("Sisa", "SISA", "r", "rupiah", "rupiah");
if ($this->mode_tampil === 1) $obj->add_field("Lunas", "Lunas", "c", "checkbox");
$obj->set_field_order("No_Jual", "A");
$obj->add_row_btn("save", "Pilih", "GELPiutangJS.nota_select");
$this->app->json([ $obj->json_table("divTXNota") ]);
}
public function table_bayar() {
$ajson = [];
$lunas = (int) Param::Get("Lunas", 0);
if (in_array($this->mode_detail, ["insert","update","delete"])) {
$sql = new SQL($this->app);
$sql->set_table("inv_jual_lunas");
$sql->add_param("No_Jual");
$sql->add_param_date("Tgl_Bayar");
$sql->add_param("Total_Bayar");
$sql->add_param("Total_Potong");
$sql->add_param_userid();
$sql->add_where("ID");
$sql->add_where("No_Jual", $this->no_jual);
$tgl_bayar = Param::Get("Tgl_Bayar", "00-00-0000");
if ($this->mode_detail === "insert") {
$ajual = $this->db->fetchRow("SELECT CabID,MemberID FROM inv_jual WHERE No_Jual=?", [$this->no_jual]) ?? ['CabID'=>0, 'MemberID'=>0];
$sql->add_param("CabID", $ajual['CabID']);
$sql->add_param("MemberID", $ajual['MemberID']);
$sql->InsertDB();
$id_bayar = $sql->LastInsertID();
// PROSES POSTING GL
if (Param::Get("Tipe_Nota","J")==="J") {
$tcat = "Penerimaan Nota : "; $ddk = "D"; $kdk = "K";
} else {
$tcat ="Retur Nota : "; $ddk = "K"; $kdk = "D";
}
$tot_bayar = (float) Param::Get("Total_Bayar", 0);
$tot_potong = (float) Param::Get("Total_Potong", 0);
$ajurnal = [
'Kode_Jurnal' => "",
'TipeID' => 11,
'CabID' => $ajual['CabID'],
'Tanggal' => $tgl_bayar,
'Kode_Ref' => $this->no_jual,
'Catatan' => $tcat . Param::Get("Nama_Member", "")
];
$adetail = [
[ 'Kode_Rek' => Param::Get("Kode_Rek", ""), 'DK' => $ddk, 'Jumlah' => $tot_bayar ],
[ 'Kode_Rek' => $this->app_gel['PIU_USAHA'], 'DK' => $kdk, 'Jumlah' => $tot_bayar+$tot_potong, 'MemberID' => $this->id_buyer ]
];
if ($tot_potong > 0) array_push($adetail, [ 'Kode_Rek' => $this->app_gel['POT_JUAL'], 'DK' => $ddk, 'Jumlah' => $tot_potong ]);
$gel_jur = $this->gel->Jurnal_Post($ajurnal, $adetail);
$this->db->update("inv_jual_lunas", ['Kode_Jurnal'=>$gel_jur], "No_Jual=? AND ID=?", [$this->no_jual, $id_bayar]);
} else if ($this->mode_detail === "delete") {
// PROSES POSTING GL
$gel_jur = $this->db->fetchField("SELECT Kode_Jurnal FROM inv_jual_lunas WHERE No_Jual=? AND ID=?", [$this->no_jual, Param::Get("ID", 0)]) ?? '';
if (!empty($gel_jur)) {
$this->db->delete("gel_jurnal", "Kode_Jurnal=?", [$gel_jur]);
$this->db->delete("gel_jurnal_detail", "Kode_Jurnal=?", [$gel_jur]);
}
$sql->DeleteDB();
}
$anota = $this->db->fetchRow("SELECT SUM(Total_Bayar) Bayar,SUM(Total_Potong) Potong FROM inv_jual_lunas WHERE No_Jual=?", [$this->no_jual]) ?? ['Bayar'=>0, 'Potong'=>0];
$this->db->runQuery("UPDATE inv_jual SET Total_Bayar=?,Total_Potong=?,Lunas=IF(Total_Jual-Total_Diskon-Total_Bayar-Total_Potong=0,1,0),Tgl_Lunas=IF(Lunas=1,'".tgl_sql2str($tgl_bayar)."','0000-00-00') WHERE No_Jual=?", [$anota['Bayar'], $anota['Potong'], $this->no_jual]);
//UPDATE POINT UNTUK LUNAS +10 HARI
$this->db->runQuery("UPDATE inv_jual SET Point=IF(Tgl_Lunas<=(Tgl_Jual+INTERVAL 10 DAY),Point,0) WHERE No_Jual=?", [$this->no_jual]);
$this->gel->Update_Lunas_Buy($this->id_buyer);
$anota = $this->db->fetchRow("SELECT Lunas,Total_Jual-Total_Diskon-Total_Bayar-Total_Potong Total_Sisa FROM inv_jual WHERE No_Jual=?", [$this->no_jual]) ?? ['Lunas'=>0, 'Total_Sisa'=>0];
$lunas = $anota['Lunas'];
$ajson[] = ['type'=>"form", 'id'=>"Total_Sisa", 'value'=>$anota['Total_Sisa']];
$ajson[] = ['type'=>"form", 'id'=>"Lunas", 'value'=>$anota['Lunas']];
}
$obj = new Table($this->app);
$obj->set_table("inv_jual_lunas", "*", "No_Jual=?", [$this->no_jual]);
$obj->add_field("ID", "ID", "hid");
$obj->add_field("Tgl_Bayar", "Tgl. Bayar", "c", "sqltgl", "", "val-tgl");
$obj->add_field("Kode_Jurnal", "Kode Jurnal", "c");
$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 ($this->app->user()->is_level(0) && ($lunas===0 || ($lunas===1 && $this->mode_tampil===1))) {
$obj->add_row_btn("trash", "Hapus", "GELPiutangJS.bayar_hapus", "No_Jual", $this->no_jual);
}
if ($lunas === 0) {
$obj->set_func_btn("GELPiutangJS.bayar_show", '<i class="bi-wallet me-1"></i> Pembayaran');
}
$ajson[] = $obj->json_table("divDetailBayar");
$this->app->json($ajson);
}
public function brow_buyer() {
$tcari = Param::Get("Cari_Buyer");
$tsql = 'Lunas>0'; $asql = [];
if (!empty($tcari)) {
$tsql .= " AND CONCAT(Kode_Member,Nama_Member,Alamat_Member) LIKE ?";
$asql[] = '%' . $tcari . '%';
}
$obj = new Table($this->app);
$obj->set_table("para_member", "*", $tsql, $asql);
$obj->add_field("MemberID", "ID", "hid");
$obj->add_field("Kode_Member", "Kode", "l");
$obj->add_field("Nama_Member", "Nama Member", "awr");
$obj->add_field("Alamat_Member", "Alamat", "awr");
$obj->add_field("Kota_Member", "Kota", "awr");
$obj->set_field_order("Nama_Member", "A");
$obj->set_func_select("GELPiutangJS.buyer_select");
$this->app->json([ $obj->db_table("divBrowBuyer") ]);
}
public function auto_buyer() {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
$stat = $this->db->runQuery("SELECT MemberID,Kode_Member,Nama_Member,CONCAT(Alamat_Member,_latin1', ',Kota_Member) Alamat_Kota FROM para_member WHERE Lunas>0 AND CONCAT(Kode_Member,Nama_Member,Alamat_Member) LIKE ? ORDER BY Nama_Member LIMIT 50", ['%'.$tcari.'%']);
while ($row = $stat->fetch(SimplePdo::FETCH_ASSOC)) {
$ajson['autodata'][] = ['value'=>$row['MemberID'], 'text'=>$row['Nama_Member'], 'html'=>'<span class="text-primary">'.$row['Kode_Member'].'</span> '.$row['Nama_Member'], 'data'=>$row['Alamat_Kota'], 'bc'=>0];
}
$this->app->json($ajson);
}
public function form_master() {
$ajson = [ 'error'=>"", 'html'=>"" ];
$atabel = [ 'MemberID'=>0, 'Nama_Member'=>"", 'Alamat_Member'=>"" ];
$form = new Form($this->app);
$tmemb = $form->textauto("_", "Nama_Member", ['value'=>$atabel['MemberID'],'text'=>$atabel['Nama_Member']], true, false, "ketik nama member");
$tmembal = $form->textbox("_", "Alamat_Member", $atabel['Alamat_Member'], false, false, "text");
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label" for="Nama_Member">Nama Member</label>
<div class="col"><div class="input-group">'.$tmemb.'<button id="butBrow" class="btn btn-info" type="button"><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 Member</label>
<div class="col">'.$tmembal.'</div>
</div>
<div class="row"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="MemberID" value="0" >
<input type="hidden" id="Mode_Tampil" value="0" >';
$this->app->json($ajson);
}
public function form_nota() {
$tipe = Param::Get("Tipe_Nota", "J");
$atabel = [ 'No_Jual'=>$this->no_jual, 'Nama_Operator'=>"" ];
if (!empty($this->no_jual)) {
$atabel = $this->db->fetchRow("SELECT *,Total_Jual-Total_Diskon Jumlah,Total_Jual-Total_Diskon-Total_Bayar-Total_Potong Sisa_Bayar FROM inv_jual WHERE No_Jual=?", [$this->no_jual]);
if ((int) $atabel['UserID'] > 0) {
$atabel['Nama_Operator'] = $this->db->fetchField("SELECT Nama FROM app_operator WHERE UserID=?", [$atabel['UserID']]) ?? '';
}
}
$form = new Form($this->app);
$tnota = $form->textbox("_", "No_Jual", $atabel['No_Jual'], false, false, "text");
$ttglnota = $form->datebox("_", "Tgl_Jual", $atabel['Tgl_Jual'], false, false);
$tsubtot = $form->textbox("_", "Total_Jual", $atabel['Total_Jual'], false, false, "double");
$tdiskon = $form->textbox("_", "Total_Diskon", $atabel['Total_Diskon'], false, false, "double");
$tjumlah = $form->textbox("_", "Jumlah", $atabel['Jumlah'], false, false, "double");
$tbayar = $form->textbox("_", "V_Bayar", $atabel['Total_Bayar']+$atabel['Total_Potong'], false, false, "double");
$tsisa = $form->textbox("_", "V_Sisa", $atabel['Sisa_Bayar'], false, false, "double");
$toper = $form->textbox("_", "V_Ope", $atabel['Nama_Operator'], false, false, "text");
$ajson['html'] = '
<div class="row mb-1">
<div class="col text-center fs-5 pb-1">Informasi Faktur / Retur</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label">No. '.(($tipe=="J")?"Transaksi":"Retur").'</label>
<div class="col-sm-8 col-lg-4">'.$tnota.'</div>
<label class="col-sm-4 col-lg-2 col-form-label">Jumlah '.(($tipe=="J")?"Transaksi":"Retur").'</label>
<div class="col-sm-8 col-lg-4">'.$tsubtot.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label">Tgl. '.(($tipe=="J")?"Transaksi":"Retur").'</label>
<div class="col-sm-8 col-lg-4">'.$ttglnota.'</div>
<label class="col-sm-4 col-lg-2 col-form-label">Jumlah Diskon</label>
<div class="col-sm-8 col-lg-4">'.$tdiskon.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label">Nama Operator</label>
<div class="col-sm-8 col-lg-4">'.$toper.'</div>
<label class="col-sm-4 col-lg-2 col-form-label">Total '.(($tipe=="J")?"Nota":"Retur").'</label>
<div class="col-sm-8 col-lg-4">'.$tjumlah.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-2 col-form-label">Total Bayar / Potong</label>
<div class="col-sm-8 col-lg-4">'.$tbayar.'</div>
<label class="col-sm-4 col-lg-2 col-form-label">Sisa Piutang</label>
<div class="col-sm-8 col-lg-4">'.$tsisa.'</div>
</div>
<div class="row"><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.'" >';
$this->app->json($ajson);
}
public function form_bayar() {
$form = new Form($this->app);
$ttglbyr = $form->datebox("_", "Tgl_Bayar", tgl_ymd(), true, false);
$trek = $form->option_db("_", "Kode_Rek", $this->app_gel['KAS_TUNAI'], true, false, "vi_gel_acc", ["Kode_Rek","Nama_Lengkap"], "Kas_Rek=1 AND Aktif=1 AND Mode='D' ORDER BY Kode_Rek");
$ttotal = $form->textbox("_", "Temp_Total", Param::Get("Total_Sisa",0), false, false, "double");
$tbayar = $form->textbox("_", "Total_Bayar", Param::Get("Total_Sisa",0), true, false, "double");
$tpotong = $form->textbox("_", "Total_Potong", 0, true, false, "double");
$ajson['html'] = '
<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-sm-8 col-lg-6">'.$ttglbyr.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Kode_Rek">Rekening Debit</label>
<div class="col">'.$trek.'</div>
</div>
<div class="row"><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">Jumlah Sisa</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>';
$this->app->json($ajson);
}
public function index() {
$this->app->json(['html' => '
<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-journal-bookmark me-2"></i>Transaksi Penerimaan Piutang Member</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>'
]);
}
}
+304
View File
@@ -0,0 +1,304 @@
<?php
/*******************************************************************
PHP Class : /Controller/Gel/TerimaController
Description : Jurnal Penerimaan Kas / Bank
Created By : Siau Pheng ([email protected]).
Created Date : May 22th, 2010.
Last Modified : September 9th, 2026.
(c) 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
declare(strict_types=1);
namespace App\Controller\Gel;
use App\Utils\Gel;
use flight\Engine;
use flight\database\SimplePdo;
use flight\Session;
use Webapp\DB\SQL;
use Webapp\Web\Form;
use Webapp\Web\Param;
use Webapp\Web\Table;
class TerimaController {
private array $web_app;
private array $app_gel;
private int $id_cab;
private string $mode;
private string $mode_detail;
private string $kode_jurnal;
private string $kode_rek;
private Gel $gel;
protected Engine $app;
protected SimplePdo $db;
public function __construct(Engine $app, SimplePdo $db, Session $session) {
$this->app = $app;
$this->db = $db;
$this->web_app = (array) $session->get('WEB_APP');
$this->app_gel = (array) $session->get('APP_GEL');
$this->id_cab = Param::Int("CabID", $session->get('APP_INV')['CABANGID']);
$this->mode = Param::Get("mode", "");
$this->mode_detail = Param::Get("mode_detail", "");
$this->kode_jurnal = Param::Get("Kode_Jurnal", "");
$this->kode_rek = Param::Get("Kode_Rek", "");
$this->gel = new Gel($app);
}
public function table_detail() {
if (in_array($this->mode_detail, ["insert","update","delete"])) {
$jumlah = (float) Param::Get("Jumlah", 0) * -1;
$sql = new SQL($this->app);
$sql->set_table("tmp_gel_jurnal_detail");
$sql->add_param("Kode_Rek");
$sql->add_param("DK", "K");
$sql->add_param("Jumlah", $jumlah);
$sql->add_param_unix();
$sql->add_param_userid();
$sql->add_where("Kode_Jurnal");
$sql->add_where("ID");
if ($this->mode_detail === "insert") {
$sql->add_param("Kode_Jurnal");
$sql->InsertDB();
} else if ($this->mode_detail === "update") {
$sql->UpdateDB();
} else if ($this->mode_detail === "delete") {
$sql->DeleteDB();
}
}
$tsql = ''; $asql = [$this->kode_jurnal, "K"]; $qtabel = "gel_jurnal_detail";
if (in_array($this->mode, ["add","edit"])) {
if ($this->mode === "add") { $tsql = " AND Unix=?"; $asql[] = $this->app->user()->unix(); }
$qtabel = "tmp_gel_jurnal_detail";
}
$obj = new Table($this->app);
$obj->set_table("(SELECT * FROM ".$qtabel." WHERE Kode_Jurnal=? AND DK=?".$tsql.") D LEFT JOIN gel_acc A ON (D.Kode_Rek=A.Kode_Rek)", "D.*,-D.Jumlah Jumlah2,A.Nama_Rek", "", $asql);
$obj->set_footer("SUM(-Jumlah) Jumlah2, COUNT(*) Kode_Rek");
$obj->add_field("ID", "ID", "hid");
$obj->add_field("Kode_Rek", "Kode", "c", "", "records");
$obj->add_field("Nama_Rek", "Rekening Kredit", "awr");
$obj->add_field("Jumlah2", "Jumlah", "r", "kurung", "kurung");
$obj->set_field_order("Kode_Rek", "A");
if (in_array($this->mode, ["add","edit"])) {
$obj->add_row_btn("clipboard", "Ubah", "GELTerimaJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "GELTerimaJS.detail_hapus", "Unix", $this->app->user()->unix());
$obj->set_func_btn("GELTerimaJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Rekening');
$obj->set_func_btn("GELTerimaJS.rek_brow", '<i class="bi-table me-1"></i> Browse');
}
$nitems = (int) $this->db->fetchField("SELECT COUNT(*) FROM ".$qtabel." WHERE Kode_Jurnal=? AND DK=?".$tsql, $asql) ?? 0;
$this->app->json([ $obj->json_table("divDetailTabel"), ['type'=>"form", 'id'=>"Total_Item", 'value'=>$nitems] ]);
}
public function brow_tx() {
$tcari = Param::Get("Cari_TX");
$tsql = 'TipeID=2'; $asql = [];
if (!empty($tcari)) {
$tsql .= " AND CONCAT(Kode_Jurnal,DATE_FORMAT(Tanggal,'%d-%m-%Y'),Kode_Ref,Catatan) LIKE ?";
$asql[] = '%' . $tcari . '%';
}
$obj = new Table($this->app);
$obj->set_table("gel_jurnal", "*", $tsql, $asql);
$obj->add_field("Kode_Jurnal", "Kode Jurnal", "c");
$obj->add_field("Tanggal", "Tanggal", "c", "sqltgl", "", "val-tgl");
$obj->add_field("Kode_Ref", "Kode Ref.", "l");
$obj->add_field("Catatan", "Deskripsi", "awr");
$obj->set_field_order("Kode_Jurnal", "D");
$obj->set_func_select("GELTerimaJS.tx_select");
$this->app->json([ $obj->db_table("divBrowTX") ]);
}
public function brow_rek() {
$tcari = Param::Get("Cari_Rek");
$tsql = 'Aktif=1 AND Mode="D"'; $asql = [];
if (!empty($tcari)) {
$tsql .= " AND CONCAT(Kode_Rek,Nama_Rek) LIKE ?";
$asql[] = '%' . $tcari . '%';
}
$obj = new Table($this->app);
$obj->set_table("gel_acc", "*", $tsql, $asql);
$obj->add_field("Kode_Rek", "Kode", "c");
$obj->add_field("Nama_Rek", "Nama Rekening", "awr");
$obj->add_field("Level", "Level", "c");
$obj->set_field_order("Kode_Rek", "A");
$obj->set_func_select("GELTerimaJS.rek_select");
$this->app->json([ $obj->db_table("divBrowRek") ]);
}
public function auto_rek() {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
$stat = $this->db->runQuery("SELECT Kode_Rek,Nama_Rek,CONCAT(Kode_Rek,' - ',Nama_Rek) Nama_Lengkap FROM gel_acc WHERE Aktif=1 AND Mode='D' AND CONCAT(Kode_Rek,Nama_Rek) LIKE ? ORDER BY Kode_Rek LIMIT 50", ['%'.$tcari.'%']);
while ($row = $stat->fetch(SimplePdo::FETCH_ASSOC)) {
$ajson['autodata'][] = ['value'=>$row['Kode_Rek'], 'text'=>$row['Nama_Rek'], 'html'=>'<span class="text-primary">'.$row['Kode_Rek'].'</span> '.$row['Nama_Rek'], 'data'=>"", 'bc'=>0];
}
$this->app->json($ajson);
}
public function form_master() {
$ajson = [ 'error'=>"", 'html'=>"" ];
$atabel = [ 'Kode_Jurnal'=>"", 'CabID'=>$this->id_cab, 'Kode_Ref'=>"", 'Tanggal'=>tgl_ymd(), 'Kode_Kas'=>"", 'Catatan'=>"" ];
if ($this->mode === "add") {
$atabel['Kode_Jurnal'] = "GT-BARU#".(string) $this->web_app['SERVER_ID']. $this->app->user()->id(3);
$atabel['Tanggal'] = tgl_ymd();
$atabel['Kode_Kas'] = $this->app_gel['KAS_TUNAI'];
$this->kode_jurnal = "";
} else if ($this->mode === "edit") {
$this->gel->Detail_Copy($this->kode_jurnal);
} else if ($this->mode === "save") {
$no_lama = $this->kode_jurnal;
$tgl_jurn = Param::Get("Tanggal");
$b_baru = str_contains($no_lama, "BARU");
if ($b_baru) $this->kode_jurnal = $this->gel->Jurnal_Baru($this->id_cab, $tgl_jurn, true);
$kode_kas = Param::Get("Kode_Kas");
$this->db->runQuery("DELETE FROM tmp_gel_jurnal_detail WHERE Kode_Jurnal='".$no_lama."' AND LEFT(Kode_Rek,1)='1' AND DK='D'");
$ntot_kas = $this->db->fetchField("SELECT SUM(-Jumlah) FROM tmp_gel_jurnal_detail WHERE Kode_Jurnal='".$no_lama."' AND Unix='".$this->app->user()->unix()."'") ?? 0;
$this->db->insert("tmp_gel_jurnal_detail", [ 'Kode_Jurnal'=>$no_lama, 'Kode_Rek'=>$kode_kas, 'DK'=>'D', 'Jumlah'=>$ntot_kas,'Unix'=>$this->app->user()->unix(), 'UserID'=>$this->app->user()->id() ]);
$this->gel->Detail_Save($this->kode_jurnal, 2, $this->id_cab, $tgl_jurn, $b_baru, $no_lama);
$this->gel->Jurnal_Save($this->kode_jurnal, 2, $this->id_cab, $tgl_jurn, Param::Get("Kode_Ref"), Param::Get("Catatan"));
$atabel['Tanggal'] = $tgl_jurn;
$this->mode = "view";
} else if ($this->mode === "cancel") {
$this->gel->Detail_Cancel($this->kode_jurnal);
$this->mode = "view";
$this->kode_jurnal = "";
}
if (!empty($this->kode_jurnal) && $this->mode !== "cancel") {
$row = $this->db->fetchRow("SELECT * FROM gel_jurnal WHERE Kode_Jurnal='".$this->kode_jurnal."' AND TipeID=2");
if ($row) {
$atabel = $row;
$atabel['Kode_Kas'] = $this->db->fetchField("SELECT Kode_Rek FROM gel_jurnal_detail WHERE Kode_Jurnal='".$atabel['Kode_Jurnal']."' AND DK='D' LIMIT 1") ?? '';
} else {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
}
}
$enable = in_array($this->mode, ["add","edit"]) ? true : false;
$form = new Form($this->app);
$tkode = $form->textbox("_", "Kode_Jurnal", $atabel['Kode_Jurnal'], !$enable, false, "text", "kode jurnal");
$tref = $form->textbox("_", "Kode_Ref", $atabel['Kode_Ref'], $enable, false, "text", "kode referensi");
$ttgl = $form->datebox("_", "Tanggal", $atabel['Tanggal'], $enable, false);
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID");
$tkas = $form->option_db("_", "Kode_Kas", $atabel['Kode_Kas'], $enable, false, "vi_gel_acc", ["Kode_Rek","Nama_Lengkap"], "Kas_Rek=1 AND Aktif=1 AND Mode='D' ORDER BY Kode_Rek");
$tcatat = $form->textbox("_", "Catatan", stripslashes($atabel['Catatan']), $enable, false, "text", "catatan jurnal");
$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="Kode_Jurnal">Kode Jurnal</label>
<div class="col-sm-7 col-lg-7"><div class="input-group">'.$tkode.'<button id="butBrow" class="btn btn-info" type="button"><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="Tanggal">Tanggal Jurnal</label>
<div class="col-sm-7 col-lg-5">'.$ttgl.'</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="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Kode_Ref">Kode Ref.</label>
<div class="col">'.$tref.'</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%;">Deskripsi</label>
<div class="col">'.$tcatat.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-3 col-lg-2 col-form-label" for="Kode_Kas" style="width:12.5%;">Rekening Debit</label>
<div class="col-sm-7 col-lg-6">'.$tkas.'</div>
</div>
<div class="row mb-1"><div class="col"><hr class="my-1"></div></div>
<input type="hidden" id="Total_Item" value="0" >
<input type="hidden" id="mode" value="'.$this->mode.'" >';
$this->app->json($ajson);
}
public function form_rek() {
$id = (int) Param::Get("ID", 0);
$atabel = [ 'ID'=>$id, 'Kode_Rek'=>$this->kode_rek, 'Nama_Rek'=>"", 'Jumlah'=>0 ];
if ($id > 0) {
$atabel = $this->db->fetchRow("SELECT * FROM tmp_gel_jurnal_detail WHERE Kode_Jurnal=? AND ID=?", [$this->kode_jurnal, $id]);
}
if (!empty($atabel['Kode_Rek'])) {
$atabel['Nama_Rek'] = $this->db->fetchField("SELECT Nama_Rek FROM gel_acc WHERE Kode_Rek=?", [$atabel['Kode_Rek']]) ?? '';
}
$form = new Form($this->app);
$tkode = $form->textbox("_", "Kode_Rek", $atabel['Kode_Rek'], false, false, "text");
$tnama = $form->textauto("_", "Nama_Rek", ['value'=>$atabel['Kode_Rek'],'text'=>$atabel['Nama_Rek']], true, true, "ketik kode / nama rekening");
$tjumlah = $form->textbox("_", "Jumlah", abs($atabel['Jumlah']), true, true, "double");
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label">Kode Rekening</label>
<div class="col-sm-4 col-lg-3">'.$tkode.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Rek">Nama Rekening</label>
<div class="col">'.$tnama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Jumlah">Jumlah (Rp.)</label>
<div class="col-sm-4 col-lg-5">'.$tjumlah.'</div>
</div>
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >
<input type="hidden" id="mode_detail" value="'.$this->mode_detail.'" >';
$this->app->json($ajson);
}
public function proses_hapus() {
$this->db->runQuery("DELETE FROM gel_jurnal WHERE Kode_Jurnal='".$this->kode_jurnal."'");
$this->db->runQuery("DELETE FROM gel_jurnal_detail WHERE Kode_Jurnal='".$this->kode_jurnal."'");
$this->app->json([ 'status' => true ]);
}
public function index() {
$this->app->json(['html' => '
<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-journal-bookmark me-2"></i>Jurnal Penerimaan Kas / Bank</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-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-save 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>'
]);
}
}
+306
View File
@@ -0,0 +1,306 @@
<?php
/*******************************************************************
PHP Class : /Controller/Gel/UmumController
Description : Jurnal Umum
Created By : Siau Pheng ([email protected]).
Created Date : May 22th, 2010.
Last Modified : September 10th, 2026.
(c) 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
declare(strict_types=1);
namespace App\Controller\Gel;
use App\Utils\Gel;
use flight\Engine;
use flight\database\SimplePdo;
use flight\Session;
use Webapp\DB\SQL;
use Webapp\Web\Form;
use Webapp\Web\Param;
use Webapp\Web\Table;
class UmumController {
private array $web_app;
private array $app_gel;
private int $id_cab;
private string $mode;
private string $mode_detail;
private string $kode_jurnal;
private string $kode_rek;
private Gel $gel;
protected Engine $app;
protected SimplePdo $db;
public function __construct(Engine $app, SimplePdo $db, Session $session) {
$this->app = $app;
$this->db = $db;
$this->web_app = (array) $session->get('WEB_APP');
$this->app_gel = (array) $session->get('APP_GEL');
$this->id_cab = Param::Int("CabID", $session->get('APP_INV')['CABANGID']);
$this->mode = Param::Get("mode", "");
$this->mode_detail = Param::Get("mode_detail", "");
$this->kode_jurnal = Param::Get("Kode_Jurnal", "");
$this->kode_rek = Param::Get("Kode_Rek", "");
$this->gel = new Gel($app);
}
public function table_detail() {
if (in_array($this->mode_detail, ["insert","update","delete"])) {
$jumlah = (float) Param::Get("Jumlah", 0) * ((string) Param::Get("DK","D")==="D" ? 1 : -1);
$sql = new SQL($this->app);
$sql->set_table("tmp_gel_jurnal_detail");
$sql->add_param("Kode_Rek");
$sql->add_param("DK");
$sql->add_param("Jumlah", $jumlah);
$sql->add_param_unix();
$sql->add_param_userid();
$sql->add_where("Kode_Jurnal");
$sql->add_where("ID");
if ($this->mode_detail === "insert") {
$sql->add_param("Kode_Jurnal");
$sql->InsertDB();
} else if ($this->mode_detail === "update") {
$sql->UpdateDB();
} else if ($this->mode_detail === "delete") {
$sql->DeleteDB();
}
}
$tsql = ''; $asql = [$this->kode_jurnal]; $qtabel = "gel_jurnal_detail";
if (in_array($this->mode, ["add","edit"])) {
if ($this->mode === "add") { $tsql = " AND Unix=?"; $asql[] = $this->app->user()->unix(); }
$qtabel = "tmp_gel_jurnal_detail";
}
$obj = new Table($this->app);
$obj->set_table("(SELECT *,IF(DK='D',Jumlah,0) Debit,IF(DK='K',-Jumlah,0) Kredit FROM ".$qtabel." WHERE Kode_Jurnal=?".$tsql.") D LEFT JOIN gel_acc A ON (D.Kode_Rek=A.Kode_Rek)", "D.*,A.Nama_Rek", "", $asql);
$obj->set_footer("SUM(D.Debit) Debit,SUM(D.Kredit) Kredit,COUNT(*) Kode_Rek");
$obj->add_field("ID", "ID", "hid");
$obj->add_field("Kode_Rek", "Kode", "c", "", "records");
$obj->add_field("Nama_Rek", "Nama Rekening", "awr");
$obj->add_field("DK", "D / K", "hid");
$obj->add_field("Debit", "Debit", "r", "kurung", "kurung");
$obj->add_field("Kredit", "Kredit", "r", "kurung", "kurung");
$obj->set_field_order("Kode_Rek", "A");
if (in_array($this->mode, ["add","edit"])) {
$obj->add_row_btn("clipboard", "Ubah", "GELUmumJS.detail_ubah");
$obj->add_row_btn("trash", "Hapus", "GELUmumJS.detail_hapus", "Unix", $this->app->user()->unix());
$obj->set_func_btn("GELUmumJS.detail_tambah", '<i class="bi-plus-lg me-1"></i> Rekening');
$obj->set_func_btn("GELUmumJS.rek_brow", '<i class="bi-table me-1"></i> Browse');
}
$nitems = 0; $ntotal = 0;
$row = $this->db->fetchRow("SELECT COUNT(*) Baris,SUM(Jumlah) Jumlah FROM ".$qtabel." WHERE Kode_Jurnal=?".$tsql, $asql);
if ($row) {
$nitems = (int) $row['Baris'];
$ntotal = (float) $row['Jumlah'];
}
$this->app->json([ $obj->json_table("divDetailTabel"), ['type'=>"form", 'id'=>"Total_Item", 'value'=>$nitems], ['type'=>"form", 'id'=>"Total_Jumlah", 'value'=>$ntotal] ]);
}
public function brow_tx() {
$tcari = Param::Get("Cari_TX");
$tsql = 'TipeID=4'; $asql = [];
if (!empty($tcari)) {
$tsql .= " AND CONCAT(Kode_Jurnal,DATE_FORMAT(Tanggal,'%d-%m-%Y'),Kode_Ref,Catatan) LIKE ?";
$asql[] = '%' . $tcari . '%';
}
$obj = new Table($this->app);
$obj->set_table("gel_jurnal", "*", $tsql, $asql);
$obj->add_field("Kode_Jurnal", "Kode Jurnal", "c");
$obj->add_field("Tanggal", "Tanggal", "c", "sqltgl", "", "val-tgl");
$obj->add_field("Kode_Ref", "Kode Ref.", "l");
$obj->add_field("Catatan", "Deskripsi", "awr");
$obj->set_field_order("Kode_Jurnal", "D");
$obj->set_func_select("GELUmumJS.tx_select");
$this->app->json([ $obj->db_table("divBrowTX") ]);
}
public function brow_rek() {
$tcari = Param::Get("Cari_Rek");
$tsql = 'Aktif=1 AND Mode="D"'; $asql = [];
if (!empty($tcari)) {
$tsql .= " AND CONCAT(Kode_Rek,Nama_Rek) LIKE ?";
$asql[] = '%' . $tcari . '%';
}
$obj = new Table($this->app);
$obj->set_table("gel_acc", "*", $tsql, $asql);
$obj->add_field("Kode_Rek", "Kode", "c");
$obj->add_field("Nama_Rek", "Nama Rekening", "awr");
$obj->add_field("Level", "Level", "c");
$obj->set_field_order("Kode_Rek", "A");
$obj->set_func_select("GELUmumJS.rek_select");
$this->app->json([ $obj->db_table("divBrowRek") ]);
}
public function auto_rek() {
$tcari = Param::Get("Auto_Query");
$ajson['autodata'] = [];
$stat = $this->db->runQuery("SELECT Kode_Rek,Nama_Rek,CONCAT(Kode_Rek,' - ',Nama_Rek) Nama_Lengkap FROM gel_acc WHERE Aktif=1 AND Mode='D' AND CONCAT(Kode_Rek,Nama_Rek) LIKE ? ORDER BY Kode_Rek LIMIT 50", ['%'.$tcari.'%']);
while ($row = $stat->fetch(SimplePdo::FETCH_ASSOC)) {
$ajson['autodata'][] = ['value'=>$row['Kode_Rek'], 'text'=>$row['Nama_Rek'], 'html'=>'<span class="text-primary">'.$row['Kode_Rek'].'</span> '.$row['Nama_Rek'], 'data'=>"", 'bc'=>0];
}
$this->app->json($ajson);
}
public function form_master() {
$ajson = [ 'error'=>"", 'html'=>"" ];
$atabel = [ 'Kode_Jurnal'=>"", 'CabID'=>$this->id_cab, 'Kode_Ref'=>"", 'Tanggal'=>tgl_ymd(), 'Catatan'=>"" ];
if ($this->mode === "add") {
$atabel['Kode_Jurnal'] = "GU-BARU#".(string) $this->web_app['SERVER_ID']. $this->app->user()->id(3);
$atabel['Tanggal'] = tgl_ymd();
$this->kode_jurnal = "";
} else if ($this->mode === "edit") {
$this->gel->Detail_Copy($this->kode_jurnal);
} else if ($this->mode === "save") {
$no_lama = $this->kode_jurnal;
$tgl_jurn = Param::Get("Tanggal");
$b_baru = str_contains($no_lama, "BARU");
if ($b_baru) $this->kode_jurnal = $this->gel->Jurnal_Baru($this->id_cab, $tgl_jurn, true);
$this->gel->Detail_Save($this->kode_jurnal, 4, $this->id_cab, $tgl_jurn, $b_baru, $no_lama);
$this->gel->Jurnal_Save($this->kode_jurnal, 4, $this->id_cab, $tgl_jurn, Param::Get("Kode_Ref"), Param::Get("Catatan"));
$atabel['Tanggal'] = $tgl_jurn;
$this->mode = "view";
} else if ($this->mode === "cancel") {
$this->gel->Detail_Cancel($this->kode_jurnal);
$this->mode = "view";
$this->kode_jurnal = "";
}
if (!empty($this->kode_jurnal) && $this->mode !== "cancel") {
$row = $this->db->fetchRow("SELECT * FROM gel_jurnal WHERE Kode_Jurnal='".$this->kode_jurnal."' AND TipeID=4");
if ($row) {
$atabel = $row;
} else {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
}
}
$enable = in_array($this->mode, ["add","edit"]) ? true : false;
$form = new Form($this->app);
$tkode = $form->textbox("_", "Kode_Jurnal", $atabel['Kode_Jurnal'], !$enable, false, "text", "kode jurnal");
$tref = $form->textbox("_", "Kode_Ref", $atabel['Kode_Ref'], $enable, false, "text", "kode referensi");
$ttgl = $form->datebox("_", "Tanggal", $atabel['Tanggal'], $enable, false);
$tcab = $form->option_db("_", "CabID", $atabel['CabID'], $enable, false, "para_cabang", ["CabID","Nama_Cab"], "Aktif=1 ORDER BY CabID");
$tcatat = $form->textbox("_", "Catatan", stripslashes($atabel['Catatan']), $enable, false, "text", "catatan jurnal");
$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="Kode_Jurnal">Kode Jurnal</label>
<div class="col-sm-7 col-lg-7"><div class="input-group">'.$tkode.'<button id="butBrow" class="btn btn-info" type="button"><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="Tanggal">Tanggal Jurnal</label>
<div class="col-sm-7 col-lg-5">'.$ttgl.'</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="CabID">Nama Cabang</label>
<div class="col">'.$tcab.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="Kode_Ref">Kode Ref.</label>
<div class="col">'.$tref.'</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%;">Deskripsi</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="Total_Item" value="0" >
<input type="hidden" id="Total_Jumlah" value="0" >
<input type="hidden" id="mode" value="'.$this->mode.'" >';
$this->app->json($ajson);
}
public function form_rek() {
$id = (int) Param::Get("ID", 0);
$atabel = [ 'ID'=>$id, 'Kode_Rek'=>$this->kode_rek, 'DK'=>Param::Get("DK", "D"), 'Nama_Rek'=>"", 'Jumlah'=>0 ];
if ($id > 0) {
$atabel = $this->db->fetchRow("SELECT * FROM tmp_gel_jurnal_detail WHERE Kode_Jurnal=? AND ID=?", [$this->kode_jurnal, $id]);
}
if (!empty($atabel['Kode_Rek'])) {
$atabel['Nama_Rek'] = $this->db->fetchField("SELECT Nama_Rek FROM gel_acc WHERE Kode_Rek=?", [$atabel['Kode_Rek']]) ?? '';
}
$form = new Form($this->app);
$tkode = $form->textbox("_", "Kode_Rek", $atabel['Kode_Rek'], false, false, "text");
$tnama = $form->textauto("_", "Nama_Rek", ['value'=>$atabel['Kode_Rek'],'text'=>$atabel['Nama_Rek']], true, true, "ketik kode / nama rekening");
$tdk = $form->radio("_", "DK", $atabel['DK'], true, false, ['D'=>"Debit",'K'=>"Kredit"]);
$tjumlah = $form->textbox("_", "Jumlah", abs($atabel['Jumlah']), true, true, "double");
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label">Kode Rekening</label>
<div class="col-sm-4 col-lg-3">'.$tkode.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Nama_Rek">Nama Rekening</label>
<div class="col">'.$tnama.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="DK">Debit / Kredit</label>
<div class="col d-flex gap-2">'.$tdk.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-4 col-lg-3 col-form-label" for="Jumlah">Jumlah (Rp.)</label>
<div class="col-sm-4 col-lg-5">'.$tjumlah.'</div>
</div>
<input type="hidden" id="ID" value="'.$atabel['ID'].'" >
<input type="hidden" id="mode_detail" value="'.$this->mode_detail.'" >';
$this->app->json($ajson);
}
public function proses_hapus() {
$this->db->runQuery("DELETE FROM gel_jurnal WHERE Kode_Jurnal='".$this->kode_jurnal."'");
$this->db->runQuery("DELETE FROM gel_jurnal_detail WHERE Kode_Jurnal='".$this->kode_jurnal."'");
$this->app->json([ 'status' => true ]);
}
public function index() {
$this->app->json(['html' => '
<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-journal-bookmark me-2"></i>Jurnal Umum</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-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-save 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>'
]);
}
}