first commit
This commit is contained in:
@@ -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>'
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user