private function processNotificationData(&$NotificationData)
{
$machineIds = collect($NotificationData)->pluck('machine_id')->unique()->filter()->toArray();
$operatorIds = collect($NotificationData)->pluck('operator_id')->unique()->filter()->toArray();
$techsheetHeaderIds = collect($NotificationData)->pluck('techsheet_header_id')->unique()->filter()->toArray();
$poSrTechOpns = collect($NotificationData)->map(function ($data) {
return [
'machine_id' => $data->machine_id,
'po_sr_no' => $data->po_sr_no,
'tech_opn_no' => $data->tech_opn_no,
];
});
// Bulk load data
$machines = MachineMaster::whereIn('id', $machineIds)->get()->keyBy('id');
$users = UserMaster::whereIn('id', $operatorIds)->get()->keyBy('id');
// Bulk fetch queue data
$queueData = DB::table('tech_operation_queue_dataset')
->whereIn('machine_id', $machineIds)
->whereIn('po_sr_no', $NotificationData->pluck('po_sr_no')->unique())
->get()
->groupBy(fn($item) => $item->machine_id . '_' . $item->po_sr_no . '_' . $item->tech_opn_no);
// Bulk fetch techsheet_data
$techData = DB::table('techsheet_data')
->whereIn('fk_techsheet_header_id', $techsheetHeaderIds)
->get()
->groupBy(fn($item) => $item->fk_techsheet_header_id . '_' . $item->opn_no);
// Update each row
foreach ($NotificationData as $data) {
$data->sah = $data->estimated_mrr + $data->estimated_nva;
$machine = $machines[$data->machine_id] ?? null;
$data->machine_shop_name = $machine->machine_shop_name ?? '';
$data->fk_area_master_id = $machine->fk_area_master_id ?? null;
$user = $users[$data->operator_id] ?? null;
$data->reported_by = $user->profile_name ?? '';
$queueKey = $data->machine_id . '_' . $data->po_sr_no . '_' . $data->tech_opn_no;
$queue = $queueData[$queueKey][0] ?? null;
$data->actual_time_taken = $data->sah + ($queue->duration ?? 0);
$data->shift_date = $queue->shift_date ?? '';
// Handling multiple opn_no's
$opnArray = collect(explode(',', $data->tech_opn_no))
->map(fn($val) => (int) trim($val))
->filter()
->unique()
->toArray();
foreach ($opnArray as $opn) {
$key = $data->techsheet_header_id . '_' . $opn;
$tech = $techData[$key][0] ?? null;
if ($tech) {
$data->m_c_no = $tech->m_c_no ?? '';
$data->actual_m_c_no = $tech->actual_m_c_no ?? '';
break;
}
}
}
}
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter