first commit
This commit is contained in:
@@ -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"> </div>
|
||||
<div id="divDetailTabel"> </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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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"> </div>
|
||||
<div id="divTXNota"> </div>
|
||||
<div id="divDetailNota" class="d-none"> </div>
|
||||
<div id="divDetailBayar" class="d-none"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>'
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -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"> </div>
|
||||
<div id="divTXKarya"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>'
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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"> </div>
|
||||
<div id="divDetailTabel"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>'
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -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"> </div>
|
||||
<div id="divTXNota"> </div>
|
||||
<div id="divDetailNota" class="d-none"> </div>
|
||||
<div id="divDetailBayar" class="d-none"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>'
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -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"> </div>
|
||||
<div id="divDetailTabel"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>'
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -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"> </div>
|
||||
<div id="divDetailTabel"> </div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>'
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user