tambah baik laporan SA by sag
This commit is contained in:
@@ -432,4 +432,151 @@ class StokAuditController extends Controller
|
||||
'totaltunggakan'=>$totaltunggakan ?? null];
|
||||
return response()->json($arrayrekod,200);
|
||||
}
|
||||
|
||||
|
||||
public function LaporanAuditKhasByNorujukan($kodcaw, Request $request)
|
||||
{
|
||||
$daritempoh = $request->daritempoh;
|
||||
$hinggatempoh = $request->hinggatempoh;
|
||||
|
||||
$cawangan = Cawangan::on('mysql7')->where('kodcaw', '=', $request->kodcaw)->first();
|
||||
|
||||
// Ambil semua rekod gadai asas
|
||||
$audit = Gadai::on($cawangan['mysql'])
|
||||
->where([
|
||||
['tagpalsu', '=', 0],
|
||||
['tempoh', '>=', $daritempoh],
|
||||
['tempoh', '<=', $hinggatempoh],
|
||||
['sttebus', '=', ''],
|
||||
['taglel', '=', 0],
|
||||
])
|
||||
->orderBy('norujukan', 'ASC') // susun ikut norujukan
|
||||
->get();
|
||||
|
||||
$arraynorujukan = $audit->pluck('norujukan')->toArray();
|
||||
|
||||
// Tarikh terkini ikut trans_type T
|
||||
$tarikhTerkiniT = Transaction::on('mysql7')
|
||||
->select('norujukan', DB::raw('MAX(created_at) as tarikh_max'))
|
||||
->where('trans_type', 'T')
|
||||
->whereIn('norujukan', $arraynorujukan)
|
||||
->groupBy('norujukan')
|
||||
->pluck('tarikh_max', 'norujukan')
|
||||
->toArray();
|
||||
|
||||
// Tarikh terkini ikut trans_type A
|
||||
$tarikhTerkiniA = Transaction::on('mysql7')
|
||||
->select('norujukan', DB::raw('MAX(created_at) as tarikh_max'))
|
||||
->where('trans_type', 'A')
|
||||
->whereIn('norujukan', $arraynorujukan)
|
||||
->groupBy('norujukan')
|
||||
->pluck('tarikh_max', 'norujukan')
|
||||
->toArray();
|
||||
|
||||
// Filter audit
|
||||
$rekodaudit = $audit->filter(function ($item) use ($tarikhTerkiniT, $tarikhTerkiniA) {
|
||||
$norujukan = $item->norujukan;
|
||||
|
||||
$adaTebusTerkini = isset($tarikhTerkiniT[$norujukan]) &&
|
||||
Transaction::on('mysql7')
|
||||
->where('norujukan', $norujukan)
|
||||
->where('trans_type', 'T')
|
||||
->whereDate('created_at', '>=', date('Y-m-d', strtotime($tarikhTerkiniT[$norujukan])))
|
||||
->exists();
|
||||
|
||||
$adaAnsuranTerkini = isset($tarikhTerkiniA[$norujukan]) &&
|
||||
Transaction::on('mysql7')
|
||||
->where('norujukan', $norujukan)
|
||||
->where('trans_type', 'A')
|
||||
->whereDate('created_at', '>=', date('Y-m-d', strtotime($tarikhTerkiniA[$norujukan])))
|
||||
->exists();
|
||||
|
||||
return !$adaTebusTerkini && !$adaAnsuranTerkini;
|
||||
})->values();
|
||||
|
||||
// Attach customer info + blast untuk setiap norujukan
|
||||
foreach ($rekodaudit as $index => $rekod) {
|
||||
$customer = Customer::on('mysql7')
|
||||
->where('kpbaru', '=', $rekod->nokp)
|
||||
->orWhere('kplama', '=', $rekod->nokp)
|
||||
->first();
|
||||
|
||||
$rekodaudit[$index]['customer'] = $customer;
|
||||
|
||||
$rekodaudit[$index]['blasted'] = BlastWasap::on('mysql7')
|
||||
->where('nokp', $rekod->nokp)
|
||||
->where('norujukan', $rekod->norujukan)
|
||||
->where('kodcaw', $kodcaw)
|
||||
->first();
|
||||
|
||||
// 👉 Kira keuntungan (tunggakan sebenar) guna function
|
||||
$upah = $this->kiraupahUjrahOnePercent($kodcaw, $rekod->norujukan);
|
||||
$keuntungan = $upah['ujrah'] + $upah['onepercent'];
|
||||
|
||||
// Save ke dalam rekod
|
||||
$rekodaudit[$index]['tunggakan'] = $this->floorTo5SenFrom2dp($keuntungan);
|
||||
}
|
||||
|
||||
// Summary total
|
||||
$summary = [
|
||||
'totalrekod' => $rekodaudit->count(),
|
||||
'totalberat' => $rekodaudit->sum('berat'),
|
||||
'totalnilaimarhun'=> $rekodaudit->sum('nilaimarhun'),
|
||||
'totalpinjaman' => $rekodaudit->sum('pinjaman'),
|
||||
'totalbakipjm' => $rekodaudit->sum('bakipjm'),
|
||||
'totaltunggakan' => $rekodaudit->sum('tunggakan'),
|
||||
];
|
||||
|
||||
return response()->json([
|
||||
'rekod' => $rekodaudit,
|
||||
'summary' => $summary,
|
||||
]);
|
||||
}
|
||||
|
||||
public function kiraupahUjrahOnePercent($kodcaw,$norujukan){
|
||||
$onepercentservices = new OnePercentServices();
|
||||
|
||||
$cawangan = Cawangan::on('mysql7')
|
||||
->where('kodcaw','=',$kodcaw)
|
||||
->first();
|
||||
|
||||
$gadai_data = Gadai::on($cawangan['mysql'])
|
||||
->where('norujukan','=',$norujukan)
|
||||
->first();
|
||||
|
||||
if($gadai_data['tempoh'] >= 12.0){
|
||||
$tempoh = 12;
|
||||
}else{
|
||||
$tempoh = $gadai_data['tempoh'];
|
||||
}
|
||||
|
||||
$bilang_bln = $tempoh - $gadai_data['tempohbayar'];
|
||||
$array_upah = $onepercentservices->kiraanKeuntunganSebenar($gadai_data['pinjaman'],$gadai_data['nilaimarhun'],$gadai_data['kadarupah'],$gadai_data['percentpinj']);
|
||||
$ujrah = $bilang_bln * $array_upah['ujrah'];
|
||||
$onepercent = $bilang_bln * $array_upah['onepercent'];
|
||||
$onepercent_semasa = $onepercent;
|
||||
$ujrah_semasa = $ujrah;
|
||||
|
||||
return ['ujrah' => $ujrah_semasa, 'onepercent' => $onepercent_semasa];
|
||||
}
|
||||
|
||||
// dalam Controller (private/protected)
|
||||
private function floorTo5SenFrom2dp($amount)
|
||||
{
|
||||
// pastikan numeric
|
||||
$amount = (float) $amount;
|
||||
|
||||
// 1) Tukar ke sen dan buang sebarang pecahan sen (hanya baca 2 dp)
|
||||
// tambah epsilon kecil untuk elak isu floating point
|
||||
$cents = (int) floor($amount * 100 + 0.0000001);
|
||||
|
||||
// 2) Floor ke gandaan 5 sen
|
||||
$cents5 = (int) (floor($cents / 5) * 5);
|
||||
|
||||
// balik ke ringgit
|
||||
return $cents5 / 100;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -666,6 +666,7 @@ $router->group(['prefix'=>'api'], function () use ($router){
|
||||
|
||||
//STOKAUDITKHAS
|
||||
$router->get('stokauditkhas/aktif/{kodcaw}',['uses'=>'StokAuditController@LaporanAuditKhasAktif']);
|
||||
$router->get('stokauditkhasbynorujukan/aktif/{kodcaw}',['uses'=>'StokAuditController@LaporanAuditKhasByNorujukan']);
|
||||
|
||||
//API BLAST WASAP
|
||||
$router->post('blastwasap/{kodcaw}',['uses'=>'StokAuditController@blastwasap']);
|
||||
|
||||
Reference in New Issue
Block a user