From 834dd8c0c4deaa2446a0187aaf4162051b5f3609 Mon Sep 17 00:00:00 2001 From: JokoPrasetio Date: Mon, 18 May 2026 16:49:01 +0700 Subject: [PATCH] fixing data double --- routes/web.php | 270 ++++++++++++++++++++++++------------------------- 1 file changed, 135 insertions(+), 135 deletions(-) diff --git a/routes/web.php b/routes/web.php index 63a51a9..6349bbb 100644 --- a/routes/web.php +++ b/routes/web.php @@ -133,169 +133,169 @@ Route::get('/pitstop/progress-detail-external-ghost', [PitStopController::class, // 'data' => $data // ]; // }); -Route::get('/outsorching', function(){ +// Route::get('/outsorching', function(){ - $data = DB::connection('pgsql')->select(" +// $data = DB::connection('pgsql')->select(" --- ========================= --- 🔥 1. MATCH (FUZZY) --- ========================= -SELECT - COALESCE(pl.nama, '-') AS nama_external, - pl.tipe, - pg.id as pegawai_id, - pg.namalengkap AS nama_internal, - ukp.name AS unit, +// -- ========================= +// -- 🔥 1. MATCH (FUZZY) +// -- ========================= +// SELECT +// COALESCE(pl.nama, '-') AS nama_external, +// pl.tipe, +// pg.id as pegawai_id, +// pg.namalengkap AS nama_internal, +// ukp.name AS unit, - ROUND(similarity(LOWER(pl.nama), LOWER(pg.namalengkap))::numeric, 2) as score, - true as is_match, - 'MATCH' as status_data, +// ROUND(similarity(LOWER(pl.nama), LOWER(pg.namalengkap))::numeric, 2) as score, +// true as is_match, +// 'MATCH' as status_data, - COUNT(pr.id) as total_praakre, - COUNT(*) FILTER (WHERE pr.status = 'LULUS') as jumlah_lulus, - COUNT(*) FILTER (WHERE pr.status = 'TIDAK LULUS') as jumlah_tidak_lulus, +// COUNT(pr.id) as total_praakre, +// COUNT(*) FILTER (WHERE pr.status = 'LULUS') as jumlah_lulus, +// COUNT(*) FILTER (WHERE pr.status = 'TIDAK LULUS') as jumlah_tidak_lulus, - COALESCE( - json_agg( - json_build_object( - 'id', pr.id, - 'unit_id', pr.unit_id, - 'masterpitstop_id', pr.masterpitstop_id, - 'masterpitstop_nama', mpit.nama, - 'nilai', pr.nilai, - 'action_at', pm.namalengkap, - 'created_at', pr.created_at, - 'type_karyawan', pr.tipe_karyawan - ) - ORDER BY NULLIF(pr.masterpitstop_id, '')::int - ) FILTER (WHERE pr.id IS NOT NULL), - '[]'::json - ) as praakre_data +// COALESCE( +// json_agg( +// json_build_object( +// 'id', pr.id, +// 'unit_id', pr.unit_id, +// 'masterpitstop_id', pr.masterpitstop_id, +// 'masterpitstop_nama', mpit.nama, +// 'nilai', pr.nilai, +// 'action_at', pm.namalengkap, +// 'created_at', pr.created_at, +// 'type_karyawan', pr.tipe_karyawan +// ) +// ORDER BY NULLIF(pr.masterpitstop_id, '')::int +// ) FILTER (WHERE pr.id IS NOT NULL), +// '[]'::json +// ) as praakre_data -FROM public.pegawai_luar_pl pl -JOIN public.pegawai_m pg - ON similarity(LOWER(pl.nama), LOWER(pg.namalengkap)) > 0.6 +// FROM public.pegawai_luar_pl pl +// JOIN public.pegawai_m pg +// ON similarity(LOWER(pl.nama), LOWER(pg.namalengkap)) > 0.6 -LEFT JOIN public.mappegawaijabatantounitkerja_m mp - ON pg.id = mp.objectpegawaifk - AND mp.statusenabled = true - AND mp.isprimary = true +// LEFT JOIN public.mappegawaijabatantounitkerja_m mp +// ON pg.id = mp.objectpegawaifk +// AND mp.statusenabled = true +// AND mp.isprimary = true -LEFT JOIN public.unitkerjapegawai_m ukp - ON ukp.id = mp.objectunitkerjapegawaifk +// LEFT JOIN public.unitkerjapegawai_m ukp +// ON ukp.id = mp.objectunitkerjapegawaifk --- 🔥 PRAAKRE INTERNAL + LUAR -LEFT JOIN public.praakre pr -ON ( - (pr.tipe_karyawan = 'internal' AND pr.pegawai_id::int = pg.id) - OR - (pr.tipe_karyawan = 'luar' AND pr.pegawai_id::int = pl.id) -) +// -- 🔥 PRAAKRE INTERNAL + LUAR +// LEFT JOIN public.praakre pr +// ON ( +// (pr.tipe_karyawan = 'internal' AND pr.pegawai_id::int = pg.id) +// OR +// (pr.tipe_karyawan = 'luar' AND pr.pegawai_id::int = pl.id) +// ) -LEFT JOIN public.masterpitstop mpit - ON mpit.id = NULLIF(pr.masterpitstop_id, '')::int +// LEFT JOIN public.masterpitstop mpit +// ON mpit.id = NULLIF(pr.masterpitstop_id, '')::int -LEFT JOIN public.pegawai_m pm - ON pm.id = NULLIF(pr.action_at, '')::int +// LEFT JOIN public.pegawai_m pm +// ON pm.id = NULLIF(pr.action_at, '')::int -WHERE - pl.tipe ILIKE '%OUTSORCHING%' - AND pg.statusenabled = true - AND pg.kategorypegawai = '11' - AND pg.kedudukanfk = 1 +// WHERE +// pl.tipe ILIKE '%OUTSORCHING%' +// AND pg.statusenabled = true +// AND pg.kategorypegawai = '11' +// AND pg.kedudukanfk = 1 -GROUP BY - pl.nama, pl.tipe, pg.id, pg.namalengkap, ukp.name +// GROUP BY +// pl.nama, pl.tipe, pg.id, pg.namalengkap, ukp.name -UNION ALL +// UNION ALL --- ========================= --- 🔥 2. HANYA DI INTERNAL --- ========================= -SELECT - '-' AS nama_external, - NULL AS tipe, - pg.id as pegawai_id, - pg.namalengkap AS nama_internal, - ukp.name AS unit, +// -- ========================= +// -- 🔥 2. HANYA DI INTERNAL +// -- ========================= +// SELECT +// '-' AS nama_external, +// NULL AS tipe, +// pg.id as pegawai_id, +// pg.namalengkap AS nama_internal, +// ukp.name AS unit, - NULL as score, - false as is_match, - 'HANYA DI INTERNAL' as status_data, +// NULL as score, +// false as is_match, +// 'HANYA DI INTERNAL' as status_data, - COUNT(pr.id) as total_praakre, +// COUNT(pr.id) as total_praakre, - COALESCE( - json_agg( - json_build_object( - 'id', pr.id, - 'masterpitstop_id', pr.masterpitstop_id, - 'masterpitstop_nama', mpit.nama, - 'nilai', pr.nilai, - 'action_at', pm.namalengkap, - 'created_at', pr.created_at, - 'type_karyawan', pr.tipe_karyawan - ) - ORDER BY NULLIF(pr.masterpitstop_id, '')::int - ) FILTER (WHERE pr.id IS NOT NULL), - '[]'::json - ) as praakre_data +// COALESCE( +// json_agg( +// json_build_object( +// 'id', pr.id, +// 'masterpitstop_id', pr.masterpitstop_id, +// 'masterpitstop_nama', mpit.nama, +// 'nilai', pr.nilai, +// 'action_at', pm.namalengkap, +// 'created_at', pr.created_at, +// 'type_karyawan', pr.tipe_karyawan +// ) +// ORDER BY NULLIF(pr.masterpitstop_id, '')::int +// ) FILTER (WHERE pr.id IS NOT NULL), +// '[]'::json +// ) as praakre_data -FROM public.pegawai_m pg +// FROM public.pegawai_m pg -LEFT JOIN public.mappegawaijabatantounitkerja_m mp - ON pg.id = mp.objectpegawaifk - AND mp.statusenabled = true - AND mp.isprimary = true +// LEFT JOIN public.mappegawaijabatantounitkerja_m mp +// ON pg.id = mp.objectpegawaifk +// AND mp.statusenabled = true +// AND mp.isprimary = true -LEFT JOIN public.unitkerjapegawai_m ukp - ON ukp.id = mp.objectunitkerjapegawaifk +// LEFT JOIN public.unitkerjapegawai_m ukp +// ON ukp.id = mp.objectunitkerjapegawaifk --- 🔥 PRAAKRE INTERNAL SAJA -LEFT JOIN public.praakre pr - ON pr.tipe_karyawan = 'internal' - AND pr.pegawai_id::int = pg.id +// -- 🔥 PRAAKRE INTERNAL SAJA +// LEFT JOIN public.praakre pr +// ON pr.tipe_karyawan = 'internal' +// AND pr.pegawai_id::int = pg.id -LEFT JOIN public.masterpitstop mpit - ON mpit.id = NULLIF(pr.masterpitstop_id, '')::int +// LEFT JOIN public.masterpitstop mpit +// ON mpit.id = NULLIF(pr.masterpitstop_id, '')::int -LEFT JOIN public.pegawai_m pm - ON pm.id = NULLIF(pr.action_at, '')::int +// LEFT JOIN public.pegawai_m pm +// ON pm.id = NULLIF(pr.action_at, '')::int -WHERE - pg.statusenabled = true - AND pg.kategorypegawai = '11' - AND pg.kedudukanfk = 1 - AND NOT EXISTS ( - SELECT 1 FROM public.pegawai_luar_pl pl - WHERE pl.tipe ILIKE '%OUTSORCHING%' - AND similarity(LOWER(pl.nama), LOWER(pg.namalengkap)) > 0.6 - ) +// WHERE +// pg.statusenabled = true +// AND pg.kategorypegawai = '11' +// AND pg.kedudukanfk = 1 +// AND NOT EXISTS ( +// SELECT 1 FROM public.pegawai_luar_pl pl +// WHERE pl.tipe ILIKE '%OUTSORCHING%' +// AND similarity(LOWER(pl.nama), LOWER(pg.namalengkap)) > 0.6 +// ) -GROUP BY - pg.id, pg.namalengkap, ukp.name +// GROUP BY +// pg.id, pg.namalengkap, ukp.name -ORDER BY status_data, nama_internal -"); +// ORDER BY status_data, nama_internal +// "); - // 🔥 FIX: pastikan JSON jadi array beneran di Laravel - $data = collect($data)->map(function($item){ - $item->praakre_data = is_string($item->praakre_data) - ? json_decode($item->praakre_data, true) - : $item->praakre_data; - return $item; - }); +// // 🔥 FIX: pastikan JSON jadi array beneran di Laravel +// $data = collect($data)->map(function($item){ +// $item->praakre_data = is_string($item->praakre_data) +// ? json_decode($item->praakre_data, true) +// : $item->praakre_data; +// return $item; +// }); - return [ - 'summary' => [ - 'total' => $data->count(), - 'match' => $data->where('status_data', 'MATCH')->count(), - 'internal_only' => $data->where('status_data', 'HANYA DI INTERNAL')->count(), - 'total_lulus' => $data->sum('jumlah_lulus'), - 'total_tidak_lulus' => $data->sum('jumlah_tidak_lulus'), - ], - 'data' => $data - ]; -}); +// return [ +// 'summary' => [ +// 'total' => $data->count(), +// 'match' => $data->where('status_data', 'MATCH')->count(), +// 'internal_only' => $data->where('status_data', 'HANYA DI INTERNAL')->count(), +// 'total_lulus' => $data->sum('jumlah_lulus'), +// 'total_tidak_lulus' => $data->sum('jumlah_tidak_lulus'), +// ], +// 'data' => $data +// ]; +// });