Files
api_arrahn/app/Http/Controllers/KelulusanController.php
T
Afiq Hamzah 0a9140c85d Enhance audit trail system for approval workflows
- Add conditional audit data enrichment for specific approval actions
- Implement namapelulus and norujukan tracking for pampasan approvals
- Improve audit data structure handling for scalar and array values
- Add user field validation with fallback defaults for audit records
- Optimize approval controller with better request parameter handling
2025-09-25 10:58:58 +08:00

544 lines
17 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Audit;
use App\Mohon;
use App\Cawangan;
use App\Mohonid;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
class KelulusanController extends Controller
{
public function list($kodcaw)
{
$harini = Carbon::now();
$harini = new Carbon;
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
$kelulusan=Mohon::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('masalulus','=','')
->where('pelulus','!=','operasi')
->get();
return response()->json($kelulusan);
}
public function listdahlulus($kodcaw,$norujukan,Request $request)
{
$harini = Carbon::now();
$harini = new Carbon;
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
$kelulusan=Mohon::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('norujukan','=',$norujukan)
->where('masalulus','<>','')
->get();
// $audit = new Audit();
// $audit->users = $request->teller;
// $audit->actions = "test";
// $audit->new_data = $kelulusan;
// $audit->kodcaw = $kodcaw;
// $audit->created_at = $harini;
// $audit->updated_at = $harini;
// $audit->save();
return response()->json($kelulusan);
}
public function listlatestlulus($kodcaw,$norujukan)
{
$harini = Carbon::now();
$harini = new Carbon;
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
$kelulusan=Mohon::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('norujukan','=',$norujukan)
->orderBy('siri','desc')
->first();
return response()->json($kelulusan);
}
public function rekodlepas($kodcaw)
{
$harini = Carbon::now();
$harini = new Carbon;
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
$kelulusan=Mohon::on($cawangan['mysql'])
->where('tarikh','<',$harini->toDateString())
->where('pelulus','=','khazanah')
->where('peloperasi','=','')
->where('masalulus','<>','')
->get();
return response()->json($kelulusan);
}
public function update($kodcaw,$norujukan,Request $request)
{
$harini = Carbon::now();
$harini = new Carbon;
$kelulusan = null;
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
$pengesahan = $request->pengesahan;
if($pengesahan == 'khazanah')
{
if($request->pembatalan == null)
{
$kelulusan=Mohon::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('norujukan','=',$norujukan)
->where('siri','=',$request->siri)
->update(array(
'masalulus' => $harini->toTimeString(),
'pelulus' => 'khazanah',
'khazanah' => $request->namakhazanah
));
}else{
$kelulusan=Mohon::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('norujukan','=',$norujukan)
->where('siri','=',$request->siri)
->update(array(
'masalulus'=> 'batal',
'pelulus'=> 'khazanah',
'khazanah' => $request->namakhazanah
));
}
}
else if($pengesahan == 'operasi')
{
if($request->pembatalan == null)
{
$kelulusan=Mohon::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('norujukan','=',$norujukan)
->where('siri','=',$request->siri)
->update(array(
'pelulus' => 'operasi',
'khazanah' => $request->namakhazanah
));
}
else
{
$kelulusan=Mohon::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('norujukan','=',$norujukan)
->where('siri','=',$request->siri)
->update(array(
'pelulus' => 'operasi',
'masalulus' => 'batal',
'khazanah' => $request->namakhazanah
));
}
$audit = new Audit();
$audit->users = (isset($request->namaoperasi) ? $request->namaoperasi : '');
$audit->actions = "pengesahan kelulusan 75%";
$audit->new_data = json_encode($kelulusan);
$audit->kodcaw = $kodcaw;
$audit->created_at = $harini;
$audit->updated_at = $harini;
$audit->save();
}
if($request->sahkan === 1)
{
$kelulusan=Mohon::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('norujukan','=',$norujukan)
->where('siri','=',$request->siri)
->update(array(
'pelulus' => 'dahlulus',
'operasi' => $request->namaoperasi,
'masalulus'=> $harini->toTimeString()
));
}else if($request->sahkan === 2){
$kelulusan=Mohon::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('norujukan','=',$norujukan)
->where('siri','=',$request->siri)
->update(array(
'pelulus' => 'dahlulus',
'operasi' => $request->namaoperasi,
'masalulus'=> 'batal'
));
}
$audit = new Audit();
$audit->users = (isset($request->namakhazanah) ? $request->namakhazanah : '');
$audit->actions = $request->actions ?? "pengesahan kelulusan 75%";
// Only prepare detailed audit data for Pampasan approval
if($request->actions == 'Pengesahan Pembayaran Pampasan') {
// Prepare data for audit - ensure it's an array
$auditData = [];
// If kelulusan is a scalar (update result), create array structure
if (is_scalar($kelulusan) || is_null($kelulusan)) {
$auditData = ['update_result' => $kelulusan];
} else {
$auditData = $kelulusan;
}
// Add namapelulus and norujukanasal to the audit data
if(isset($request->namaoperasi)) {
$auditData['namapelulus'] = !empty($request->namaoperasi) ? $request->namaoperasi : null;
}
if(isset($request->norujukan)) {
$auditData['norujukan'] = !empty($request->norujukan) ? $request->norujukan : null;
}
} else {
// For other actions, use simple kelulusan data
$auditData = $kelulusan;
}
$audit->new_data = json_encode($auditData);
$audit->kodcaw = $kodcaw;
$audit->created_at = $harini;
$audit->updated_at = $harini;
$audit->save();
return response()->json($kelulusan,201);
}
public function updatekomen($kodcaw,$norujukan,Request $request)
{
$harini = Carbon::now();
$harini = new Carbon;
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
$kelulusan=Mohon::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('norujukan','=',$norujukan)
->where('siri','=',$request->siri)
->update(array(
'komen' => $request->komen
));
return response()->json($kelulusan,201);
}
public function create(REQUEST $request,$kodcaw,$norujukan,$roles)
{
$harini = Carbon::now();
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
if($roles == "khazanah")
{
$kelulusan=Mohon::on($cawangan['mysql'])
->create([
'tarikh'=> $harini->toDateString(),
'norujukan'=> $norujukan,
'siri' => $request->siri,
'komen' => $request->komen,
'margin' => $request->margin,
'nilaimarhun' => $request->nilaimarhun,
'berat' => $request->berat,
'status' => $request->status,
'bilgad' => $request->bilgadai,
'jumpinj' => $request->jumpinjam,
'jenistebus' => $request->jenistebus,
'teller' => $request->teller,
'pelulus' => ($request->pelulus) ? $request->pelulus : ''
]);
}
else if($roles == "operasi")
{
$kelulusan=Mohon::on($cawangan['mysql'])
->create([
'tarikh'=> $harini->toDateString(),
'norujukan'=> $norujukan,
'siri' => $request->siri,
'komen' => $request->komen,
'margin' => $request->margin,
'nilaimarhun' => $request->nilaimarhun,
'berat' => $request->berat,
'status' => $request->status,
'bilgad' => $request->bilgadai,
'jumpinj' => $request->jumpinjam,
'jenistebus' => $request->jenistebus,
'teller' => $request->teller,
'pelulus' => 'minta',
'peloperasi' => ($request->peloperasi) ? $request->peloperasi : ''
]);
}
$audit = new Audit();
$audit->users = (isset($request->teller) ? $request->teller : '');
$audit->actions = $request->actions ?? "Minta Pengesahan kelulusan 75%";
$audit->new_data = json_encode($kelulusan);
$audit->kodcaw = $kodcaw;
$audit->created_at = $harini;
$audit->updated_at = $harini;
$audit->save();
return response()->json($kelulusan);
}
//KEPOHONAN EDIT DAN HAPUS
public function kepohonancreate(REQUEST $request,$kodcaw,$norujukan)
{
$harini = Carbon::now();
$harini = new Carbon;
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
$mohonid=Mohonid::on($cawangan['mysql'])
->create([
'tarikh'=> $harini->toDateString(),
'mohon' => $request->mohon,
'norujukan' => $norujukan,
'katalaluan' => $request->komen,
'pinjaman' => $request->pinjaman,
'nilaimarhun' => $request->nilaimarhun,
'berat' => $request->berat,
'margin' => $request->margin,
'benar' => '0',
'teller' => $request->teller,
'tagoperasi'=> ($request->tagoperasi) ? true : false,
'masa' => $harini->toTimeString(),
'ansuran' => ($request->ansuran) ? $request->ansuran : 0.00,
]);
return response()->json($mohonid,201);
}
public function updatekepohonankhazanah($kodcaw,$norujukan,Request $request)
{
$harini = Carbon::now();
$harini = new Carbon;
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
if($request->pembatalan != null)
{
$kelulusan=Mohonid::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('norujukan','=',$norujukan)
->where('recno','=',$request->recno)
->update(array(
'katalaluan' => $request->komen,
'benar' => '2',
'id' => $request->khazanah,
'timestamp_approved_by_pc' => $harini,
));
}else{
$benar = ($request->tagoperasi == 1) ? 0 : 1;
$kelulusan=Mohonid::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('norujukan','=',$norujukan)
->where('recno','=',$request->recno)
->update(array(
'benar' => $benar,
'id' => $request->khazanah,
'timestamp_approved_by_pc' => $harini,
));
}
return response()->json($kelulusan,202);
}
public function kepohonangetteller(Request $request,$kodcaw)
{
$harini = Carbon::now();
$harini = new Carbon;
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
$kelulusan=Mohonid::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('norujukan','=',$request->norujukan)
->orderBy('recno','desc')
->first();
return response()->json($kelulusan,200);
}
public function listkepohonan($kodcaw)
{
$harini = Carbon::now();
$harini = new Carbon;
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
$kelulusan=Mohonid::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('benar','=', 0)
->orderBy('recno','desc')
->get();
return response()->json($kelulusan,200);
}
public function listoperasi()
{
$harini = Carbon::now();
$harini = new Carbon;
$cawangan_all = Cawangan::on('mysql7')->get();
$arraykelulusan = [];
foreach($cawangan_all as $index=>$cawangan){
$kelulusan = Mohon::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('masalulus','=','')
->where('pelulus','=','operasi')
->get();
$mohonid_data = Mohonid::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->whereNotNull('id')
->whereNotNull('timestamp_approved_by_pc')
->where('tagoperasi', '1')
->whereNull('operasi')
->get();
// Check if EITHER has data (not just $kelulusan)
if(sizeof($kelulusan) != 0 || sizeof($mohonid_data) != 0){
array_push($arraykelulusan,[
"kelulusanall" => $kelulusan,
"kelulusanMohonid" => $mohonid_data,
"cawangan" => $cawangan['details_caw'],
"cawangankod" => $cawangan['kodcaw']
]);
}
}
return response()->json($arraykelulusan,200);
}
public function listoperasikelulusan()
{
$harini = Carbon::now();
$harini = new Carbon;
$cawangan_all = Cawangan::on('mysql7')->get();
$arraykelulusan = [];
foreach($cawangan_all as $index=>$cawangan){
$kelulusan=Mohon::on($cawangan['mysql'])
->where('peloperasi','=','operasi')
->where('operasi','!=','')
->get();
if(sizeof($kelulusan) != 0){
array_push($arraykelulusan,["kelulusanall" => $kelulusan,"cawangan" => $cawangan['details_caw'],"cawangankod" => $cawangan['kodcaw']]);
}
}
return response()->json($arraykelulusan,200);
}
public function UpdateHapusAnsuranOperasi(Request $request){
$harini = Carbon::now();
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first();
if($request->sahkan === 1){
$kelulusan=Mohonid::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('norujukan','=',$request->norujukan)
->where('recno','=',$request->siri)
->where('tagoperasi', '=', 1)
->update(array(
'operasi' => $request->namaoperasi,
'timestamp_approved_by_operasi' => $harini,
'benar' => 1,
));
}else if($request->sahkan === 2){
$kelulusan=Mohonid::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('norujukan','=',$request->norujukan)
->where('recno','=',$request->siri)
->where('tagoperasi', '=', 1)
->update(array(
'operasi' => $request->namaoperasi,
'timestamp_approved_by_operasi' => $harini,
'benar' => 2,
));
}
return response()->json($kelulusan,202);
}
public function getApproval(Request $request){
$harini = Carbon::now();
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first();
$kelulusan = Mohonid::on($cawangan['mysql'])
->where('tarikh','=',$harini->toDateString())
->where('teller','=',$request->teller)
->where('mohon','=',$request->mohon)
->where('benar','=',0)
->latest('masa')
->first();
return response()->json($kelulusan, 200);
}
public function getApprovalList(Request $request){
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first();
$kelulusan = Mohonid::on($cawangan['mysql'])
->groupBy('mohon')
->pluck('mohon');
return response()->json($kelulusan, 200);
}
public function getApprovalLaporan(Request $request){
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$request->kodcaw)->first();
$kelulusan = Mohonid::on($cawangan['mysql'])
->selectRaw('recno, benar, tarikh, onlineid, mohon, norujukan, id, katalaluan, benar, operasi, pinjaman, ansuran, nilaimarhun, berat, margin, teller ,masa, timestamp_approved_by_pc, timestamp_approved_by_operasi')
->whereBetween('tarikh', [$request->tarikh_mula, $request->tarikh_akhir])
->where('mohon', $request->mohon)
->orderBy('tarikh', 'desc')
->orderBy('masa', 'desc')
->get();
return response()->json($kelulusan, 200);
}
}