Files
cmasa/app/Controller/Gel/KaryaController.php
T
2026-10-29 13:34:31 +07:00

253 lines
12 KiB
PHP

<?php
/*******************************************************************
PHP Class : /Controller/Gel/KaryaController
Description : Transaksi Pinjaman Karyawan
Created By : Siau Pheng ([email protected]).
Created Date : September 9th, 2014.
Last Modified : September 14th, 2026.
(c) 3FONIA Software; WWW.3FONIA.COM.
*******************************************************************/
declare(strict_types=1);
namespace App\Controller\Gel;
use App\Utils\Gel;
use flight\Engine;
use flight\database\SimplePdo;
use flight\Session;
use Webapp\DB\SQL;
use Webapp\Web\Form;
use Webapp\Web\Param;
use Webapp\Web\Table;
class KaryaController {
private array $app_gel;
private string $mode;
private string $mode_detail;
private int $id_karya;
private int $is_pinjam;
private string $no_trans;
private Gel $gel;
protected Engine $app;
protected SimplePdo $db;
public function __construct(Engine $app, SimplePdo $db, Session $session) {
$this->app = $app;
$this->db = $db;
$this->app_gel = (array) $session->get('APP_GEL');
$this->mode = Param::Get("mode", "");
$this->mode_detail = Param::Get("mode_detail", "");
$this->id_karya = Param::Int("KaryaID", 0);
$this->is_pinjam = Param::Int("is_pinjam", 0);
$this->no_trans = Param::Get("No_Trans", "");
$this->gel = new Gel($app);
}
public function table_karya() {
if (in_array($this->mode_detail, ["insert","update","delete"])) {
$sql = new SQL($this->app);
$sql->set_table("gel_karyawan");
$sql->add_param_date("Tgl_Trans");
$sql->add_param("Catatan");
$sql->add_param_userid();
$sql->add_where("No_Trans", $this->no_trans);
$tgl_trans = Param::Get("Tgl_Trans");
if ($this->mode_detail === "insert") {
$this->no_trans = $this->gel->Karya_Baru($tgl_trans);
$sql->add_param("No_Trans", $this->no_trans);
$sql->add_param("KaryaID");
// PROSES POSTING GL
if ($this->is_pinjam === 1) {
$sql->add_param("Total_Pinjam");
$tcat = "Pinjaman Karyawan : "; $ddk = "D"; $kdk = "K";
} else {
$sql->add_param("Total_Bayar");
$tcat = "Pembayaran Karyawan : "; $ddk = "K"; $kdk = "D";
}
$sql->InsertDB();
$tot_jumlah = (float) Param::Get("Total_Bayar", 0) + (float) Param::Get("Total_Pinjam", 0);
$ajurnal = [
'TipeID' => 13,
'Tanggal' => $tgl_trans,
'Kode_Ref' => $this->no_trans,
'Catatan' => $tcat.(string) Param::Get("Nama_Karya").", Untuk : ".(string) Param::Get("Catatan")
];
$adetail = [];
$adetail[] = [
'Kode_Rek' => $this->app_gel['PIU_KARYA'],
'DK' => $ddk,
'Jumlah' => $tot_jumlah
];
$adetail[] = [
'Kode_Rek' => (string) Param::Get("Kode_Rek"),
'DK' => $kdk,
'Jumlah' => $tot_jumlah
];
$kode_jurnal = $this->gel->Jurnal_Post($ajurnal, $adetail);
$this->db->update("gel_karyawan", [ 'Kode_Jurnal'=>$kode_jurnal ], "No_Trans=?", [ $this->no_trans ]);
} else if ($this->mode_detail === "delete") {
$sql->DeleteDB();
// PROSES POSTING GL
$kode_jurnal = $this->db->fetchField("SELECT Kode_Jurnal FROM gel_karyawan WHERE No_Trans=?", [ $this->no_trans ]) ?? '';
if (!empty($kode_jurnal)) {
$this->db->delete("gel_jurnal", "Kode_Jurnal=?", [ $kode_jurnal ]);
$this->db->delete("gel_jurnal_detail", "Kode_Jurnal=?", [ $kode_jurnal ]);
}
}
$ipinjam = (float) $this->db->fetchField("SELECT SUM(Total_Pinjam-Total_Bayar) FROM gel_karyawan WHERE KaryaID=?", [ $this->id_karya ]) ?? 0;
$this->db->update("para_karyawan", ['Total_Pinjam'=>$ipinjam], "KaryaID=?", [ $this->id_karya ]);
}
$obj = new Table($this->app);
$obj->set_table("gel_karyawan", "*", "KaryaID=?", [ $this->id_karya ]);
$obj->set_footer("SUM(Total_Pinjam) Total_Pinjam,SUM(Total_Bayar) Total_Bayar");
$obj->add_field("No_Trans", "No. Trans", "c");
$obj->add_field("Tgl_Trans", "Tgl. Trans", "c", "sqltgl", "", "val-tgl");
$obj->add_field("Kode_Jurnal", "Kode Jurnal", "c");
$obj->add_field("Total_Pinjam", "Pinjaman", "r", "rupiah", "rupiah");
$obj->add_field("Total_Bayar", "Setoran", "r", "rupiah", "rupiah");
$obj->add_field("Catatan", "Catatan", "awr");
$obj->set_field_order("Tgl_Trans", "A");
$obj->add_row_btn("trash", "Hapus", "GELKaryaJS.karya_hapus", "Kunci", 0);
$this->app->json([ $obj->json_table("divTXKarya") ]);
}
public function form_master() {
$ajson = [ 'error'=>"", 'html'=>"" ];
$atabel = ['KaryaID'=>0, 'Total_Pinjam'=>0, 'Tot_Pinjam'=>0, 'Tot_Bayar'=>0];
if ($this->id_karya > 0) {
$row = $this->db->fetchRow("SELECT * FROM para_karyawan WHERE KaryaID=?", [ $this->id_karya ]);
if ($row) {
$atabel = $row->getData();
if ((int) $atabel['KaryaID'] > 0) {
$_tot = $this->db->fetchRow("SELECT SUM(Total_Pinjam) Tot_Pinjam,SUM(Total_Bayar) Tot_Bayar FROM gel_karyawan WHERE KaryaID=?", [ $atabel['KaryaID'] ]);
if ($_tot) $atabel = array_merge($atabel, $_tot->getData());
}
} else {
$ajson['error'] = "Nomor Transaksi belum ada / tidak diketemukan !";
}
}
$ket_saldo = ((float) $atabel['Total_Pinjam'] > 0) ? "Saldo Pinjaman" : "Saldo Simpanan";
$form = new Form($this->app);
$tkary = $form->option_db("_", "KaryaID", $atabel['KaryaID'], true, false, "para_karyawan", ["KaryaID","Nama_Karya"], "Aktif=1 ORDER BY Nama_Karya", null, null, "GELKaryaJS.ocKarya");
$ttot_pin = '<input type="double" class="form-control text-end" id="Tot_Pinjam" value="'.rupiah($atabel['Tot_Pinjam']).'" readonly="">';
$ttot_bay = '<input type="double" class="form-control text-end" id="Tot_Bayar" value="'.rupiah($atabel['Tot_Bayar']).'" readonly="">';
$tpinjam = '<input type="double" class="form-control text-end '.((float) $atabel['Total_Pinjam'] > 0?'text-danger':'text-primary').'" id="Jumlah_Pinjam" value="'.rupiah($atabel['Total_Pinjam']).'" readonly="">';
$ajson['html'] = '
<div class="row">
<div class="col-sm-12 col-lg-7">
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label" for="KaryaID">Nama Karyawan</label>
<div class="col-sm-7 col-lg-7">'.$tkary.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-3 col-form-label">'.$ket_saldo.'</label>
<div class="col-sm-7 col-lg-6">'.$tpinjam.'</div>
</div>
</div>
<div class="col-sm-12 col-lg-5">
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label">Jumlah Pinjaman</label>
<div class="col">'.$ttot_pin.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-5 col-lg-4 col-form-label">Jumlah Setoran</label>
<div class="col">'.$ttot_bay.'</div>
</div>
</div>
</div>
<div class="row"><div class="col"><hr class="my-1"></div></div>';
$this->app->json($ajson);
}
public function form_pinjam() {
$form = new Form($this->app);
$ttgltran = $form->datebox("_", "Tgl_Trans", tgl_ymd(), true, false);
$trek = $form->option_db("_", "Kode_Rek", $this->app_gel['KAS_TUNAI'], true, false, "vi_gel_acc", ["Kode_Rek","Nama_Lengkap"], "Kas_Rek=1 AND Aktif=1 AND Mode='D' ORDER BY Kode_Rek");
$tpinjam = $form->textbox("_", "Total_Pinjam", 0, true, false, "double");
$tcatat = $form->textarea("_", "Catatan", "", true, false, 2);
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Tgl_Trans">Tanggal Transaksi</label>
<div class="col-sm-8 col-lg-6">'.$ttgltran.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Kode_Rek">Rekening Kredit</label>
<div class="col">'.$trek.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Total_Pinjam">Jumlah Pinjaman</label>
<div class="col-sm-8 col-lg-6">'.$tpinjam.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Catatan">Keterangan</label>
<div class="col">'.$tcatat.'</div>
</div>';
$this->app->json($ajson);
}
public function form_bayar() {
$form = new Form($this->app);
$ttgltran = $form->datebox("_", "Tgl_Trans", tgl_ymd(), true, false);
$trek = $form->option_db("_", "Kode_Rek", $this->app_gel['KAS_TUNAI'], true, false, "vi_gel_acc", ["Kode_Rek","Nama_Lengkap"], "Kas_Rek=1 AND Aktif=1 AND Mode='D' ORDER BY Kode_Rek");
$tbayar = $form->textbox("_", "Total_Bayar", 0, true, false, "double");
$tcatat = $form->textarea("_", "Catatan", "", true, false, 2);
$ajson['html'] = '
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Tgl_Trans">Tanggal Transaksi</label>
<div class="col-sm-8 col-lg-6">'.$ttgltran.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Kode_Rek">Rekening Debit</label>
<div class="col">'.$trek.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Total_Bayar">Jumlah Pembayaran</label>
<div class="col-sm-8 col-lg-6">'.$tbayar.'</div>
</div>
<div class="row mb-1">
<label class="col-sm-6 col-lg-4 col-form-label" for="Catatan">Keterangan</label>
<div class="col">'.$tcatat.'</div>
</div>';
$this->app->json($ajson);
}
public function index() {
$this->app->json(['html' => '
<div class="fade-in">
<div class="card"><div class="card-body">
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="tx-tab" data-bs-toggle="tab" data-bs-target="#tx" type="button" role="tab" aria-controls="tx" aria-selected="true"><i class="bi-journal-bookmark me-2"></i>Transaksi Simpan / Pinjam Karyawan</button>
</li>
<li class="nav-item ms-auto">
<button class="btn btn-warning mb-1 ms-2" id="butPinjam" type="button"><i class="bi-box-arrow-in-right me-2"></i>Pinjam</button>
<button class="btn btn-success mb-1 ms-2" id="butBayar" type="button"><i class="bi-box-arrow-in-left me-2"></i>Bayar</button>
</li>
</ul>
<div class="tab-content border border-top-0 p-3">
<div class="tab-pane fade active show" id="tx" role="tabpanel" aria-labelledby="tx-tab">
<div id="divTXMaster">&nbsp;</div>
<div id="divTXKarya">&nbsp;</div>
</div>
</div>
</div></div>
</div>'
]);
}
}