filter(function ($form) use ($role, $periodStart, $periodEnd, $regionId, $cabangId) { $tanggal = Carbon::parse($form->tanggal); if ($tanggal->lt($periodStart) || $tanggal->gt($periodEnd)) { return false; } $status = (string) $form->status; $normalizedStatus = strtolower($status); if (in_array($normalizedStatus, ['rejected', 'closed'], true)) { return false; } switch ($role) { case 'Admin Region': if ($status !== 'On Progress') { return false; } if ($regionId && optional($form->user)->region_id !== $regionId) { return false; } return true; case 'Area Manager Cabang': if ($status !== 'Approved 1') { return false; } $formCabangId = optional($form->rayon)->cabang_id ?? optional(optional($form->user)->cabang)->cabang_id ?? optional(optional(optional($form->user)->cabang)->cabang)->id; if ($cabangId !== null && (string) $formCabangId !== (string) $cabangId) { return false; } return true; case 'Marketing Information System': return $status === 'Approved 1'; case 'Marketing Operational Manager Region': if ($status !== 'Approved 2') { return false; } if (!is_null($form->final_approved_at) || !is_null($form->final_approved_by)) { return false; } if ($regionId && optional($form->user)->region_id !== $regionId) { return false; } return true; case 'Head of Sales Marketing': if ($status !== 'Approved 2') { return false; } return is_null($form->final_approved_at) || is_null($form->final_approved_by); default: if (!in_array($normalizedStatus, ['on progress', 'approved 1', 'approved 2'], true)) { return false; } return is_null($form->final_approved_at) || is_null($form->final_approved_by); } }); } }