|object $row */ public static function tryToDomain(array | object $row): ?Employee { try { return self::toDomain($row); } catch (\DomainException) { return null; } } /** * @param array|object $row */ // phpcs:disable Generic.Metrics.CyclomaticComplexity public static function toDomain(array | object $row): Employee { // phpcs:enable Generic.Metrics.CyclomaticComplexity /** @var array $data */ $data = is_object($row) ? (array) $row : $row; $rawMatricule = trim(self::castString( $data['MATRICULE_FIC'] ?? $data['matricule_fic'] ?? $data['public_employee_number'] ?? null, '' )); // Garantir un format 7 ou 8 chiffres pour ArcadiaEmployeeId if (is_numeric($rawMatricule) && strlen($rawMatricule) < 7) { $rawMatricule = str_pad($rawMatricule, 7, '0', STR_PAD_LEFT); } $lastName = self::castString($data['NOM_FIC'] ?? $data['nom_fic'] ?? $data['NOM_PERSONNE'] ?? $data['last_name'] ?? null, ''); $firstName = self::castString($data['PRENOM_FIC'] ?? $data['prenom_fic'] ?? $data['PRENOM_PERSONNE'] ?? $data['first_name'] ?? null, ''); $startDate = self::parseDate( $data['DATE_DEB_FIC'] ?? $data['date_deb_fic'] ?? $data['DATE_ENTREE'] ?? $data['start_date'] ?? null ) ?? new \DateTimeImmutable('2000-01-01'); $endDate = self::parseDate($data['DATE_FIN_FIC'] ?? $data['date_fin_fic'] ?? $data['end_date'] ?? null); $plannedEndDate = self::parseDate($data['DF_CARRIERE'] ?? $data['df_carriere'] ?? $data['planned_end_date'] ?? null); $establishment = self::castString($data['ETAB_FIC'] ?? $data['etab_fic'] ?? $data['ETABLISSEMENT'] ?? $data['establishment'] ?? null, '01'); $site = self::castString($data['SITE_FIC'] ?? $data['site_fic'] ?? $data['site'] ?? null, 'DEFAULT'); $service = self::castString($data['SERVICE_FIC'] ?? $data['service_fic'] ?? $data['NUM_SERV'] ?? $data['service'] ?? null, '001'); $createdAt = self::parseDate($data['DAT_CRE'] ?? $data['dat_cre'] ?? $data['created_at'] ?? null) ?? $startDate; $updatedAt = self::parseDate($data['DAT_MAJ'] ?? $data['dat_maj'] ?? $data['updated_at'] ?? null); return Employee::hydrate( publicEmployeeNumber: new ArcadiaEmployeeId($rawMatricule), lastName: $lastName, firstName: $firstName, startDate: $startDate, endDate: $endDate, plannedEndDate: $plannedEndDate, establishment: new EstablishmentCode($establishment), site: new SiteId($site), service: new ServiceId($service), createdAt: $createdAt, updatedAt: $updatedAt, ); } private static function castString(mixed $val, string $default = ''): string { return is_scalar($val) ? (string) $val : $default; } private static function parseDate(mixed $value): ?\DateTimeInterface { if ($value instanceof \DateTimeInterface) { return $value; } if (is_string($value) && trim($value) !== '') { return DatesHelper::parseDateTime($value); } return null; } }