getTypePiece() : $entity->getTypeComposant(); if (!$modelType || !$modelType->getReferenceFormula()) { return null; } $valueMap = $this->buildValueMap($entity); $requiredFields = $modelType->getRequiredFieldsForReference(); if ($requiredFields) { foreach ($requiredFields as $fieldName) { if (!isset($valueMap[$fieldName]) || '' === $valueMap[$fieldName]) { return null; } } } return preg_replace_callback('/\{([^}]+)\}/u', static function (array $matches) use ($valueMap): string { return $valueMap[$matches[1]] ?? ''; }, $modelType->getReferenceFormula()); } /** * Build a map of fieldName → normalized value from the entity's CustomFieldValues. * * @return array */ private function buildValueMap(Composant|Piece $entity): array { $map = []; /** @var CustomFieldValue $cfv */ foreach ($entity->getCustomFieldValues() as $cfv) { $normalized = mb_strtoupper(trim($cfv->getValue())); $map[$cfv->getCustomField()->getName()] = $normalized; } return $map; } }