253 lines
12 KiB
PHP
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"> </div>
|
|
<div id="divTXKarya"> </div>
|
|
</div>
|
|
</div>
|
|
</div></div>
|
|
</div>'
|
|
]);
|
|
}
|
|
|
|
}
|