fixing data double
This commit is contained in:
parent
d98df34f2c
commit
834dd8c0c4
270
routes/web.php
270
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
|
||||
// ];
|
||||
// });
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user