<?php
namespace App\Service;
use App\Entity\RawMaterial;
use Doctrine\ORM\EntityManagerInterface;
class ImportarMateriasHelper
{
public function __construct(private readonly EntityManagerInterface $entityManager) {}
/**
* Intenta importar un archivo con las materias primas
*
* @return array{correct: boolean, error: string}
*/
public function importar(): array
{
/*dump($_ENV);
dump($_SERVER); die();*/
$ruta = $_ENV['RUTA_IMPORTACION'];
if (empty($ruta)) {
return ['correct' => false, 'error' => 'No se ha especificado ninguna ruta'];
}
if (!str_ends_with((string) $ruta, DIRECTORY_SEPARATOR)) {
$ruta .= DIRECTORY_SEPARATOR;
}
$archivo = ''; //echo $ruta;
if (is_dir($ruta)) {
$dir = opendir($ruta);
if (!$dir) {
return ['correct' => false, 'error' => 'La ruta especificada no existe'];
}
// Solo se procesa el primer archivo encontrado
while ($archivoEncontrado = readdir($dir)) {
if (!str_starts_with($archivoEncontrado, '.')) {
if (!is_file($ruta . $archivoEncontrado)) {
return ['correct' => false, 'error' => 'Error del sistema de archivos'];
}
$archivo = $ruta . $archivoEncontrado;
}
}
}
if (empty($archivo)) {
return ['correct' => true, 'error' => 'No hay archivos que procesar'];
}
$content = file_get_contents($archivo);
if (empty($content)) {
return ['correct' => true, 'error' => 'Nada que procesar'];
}
$materiasPrimasRepo = $this->entityManager->getRepository(RawMaterial::class);
//echo 'Antes de procesar'; die();
$xml = simplexml_load_string($content);
foreach ($xml->children() as $child) {
$rawMaterial = $materiasPrimasRepo->findOneBy([
'code' => $child['Codigo']
]);
if (!$rawMaterial) {
$rawMaterial = new RawMaterial();
$rawMaterial->setCode($child['Codigo']);
$rawMaterial->setPrice(0);
}
$rawMaterial->setName($child['NombreOriginal']);
$rawMaterial->setPublicName(
empty($child['NombreDeclaracion']) ? $child['NombreOriginal'] : $child['NombreDeclaracion']
);
$this->camposNutricionales($rawMaterial, $child->ValoresNutricionales->CampoNutricional);
$this->entityManager->persist($rawMaterial);
}
$this->entityManager->flush();
try {
unlink($archivo);
}catch(\Exception) {
return ['correct' => true, 'error' => 'Procesado correctamente. No se ha podido eliminar el archivo de importación.'];
}
return ['correct' => true, 'error' => ''];
}
private function camposNutricionales(RawMaterial $rawMaterial, \SimpleXMLElement $camposNutricionales)
{
//$rawMaterial->setAllergens([]);
//$rawMaterial->setPrice(0);
$rawMaterial->setHumidity('0');
$rawMaterial->setGrease('0');
$rawMaterial->setSaturatedFattyAcids('0');
$rawMaterial->setMonosaturatedFattyAcids('0');
$rawMaterial->setPolyunsaturatedFats('0');
$rawMaterial->setSugars('0');
$rawMaterial->setPolyalcohols('0');
$rawMaterial->setStarches('0');
$rawMaterial->setFiber('0');
$rawMaterial->setProteins('0');
$rawMaterial->setMineralSalts('0');
$rawMaterial->setSodium('0');
$rawMaterial->setVitaminA('0');
$rawMaterial->setVitaminB1('0');
$rawMaterial->setVitaminB2('0');
$rawMaterial->setVitaminB3('0');
$rawMaterial->setVitaminB5('0');
$rawMaterial->setVitaminB6('0');
$rawMaterial->setVitaminB9('0');
$rawMaterial->setVitaminB12('0');
$rawMaterial->setVitaminC('0');
$rawMaterial->setVitaminD('0');
$rawMaterial->setVitaminE('0');
$rawMaterial->setVitaminH('0');
$rawMaterial->setVitaminK('0');
$rawMaterial->setCalcium('0');
$rawMaterial->setIron('0');
$rawMaterial->setMagnesium('0');
$rawMaterial->setMatchElement('0');
$rawMaterial->setPotassium('0');
$rawMaterial->setChlorine('0');
$rawMaterial->setZinc('0');
$rawMaterial->setCopper('0');
$rawMaterial->setManganese('0');
$rawMaterial->setFluorine('0');
$rawMaterial->setSelenium('0');
$rawMaterial->setChromium('0');
$rawMaterial->setMolybdenum('0');
$rawMaterial->setIodine('0');
$rawMaterial->setSalatrim('0');
$rawMaterial->setCarbohydrates('0');
$rawMaterial->setAlcohol('0');
$rawMaterial->setOrganicAcids('0');
$rawMaterial->setErythritol('0');
$rawMaterial->setSalt('0');
$rawMaterial->setLostVolatilization('0');
foreach ($camposNutricionales as $campo) {
switch ($campo['Nombre']) {
case 'Grasas':
$rawMaterial->setGrease($campo['Valor']);
break;
case 'Humedad':
$rawMaterial->setHumidity($campo['Valor']);
break;
case 'Hidratos de carbono':
$rawMaterial->setCarbohydrates($campo['Valor']);
break;
case 'Azúcares':
$rawMaterial->setSugars($campo['Valor']);
break;
case 'Ácidos Orgánicos':
$rawMaterial->setOrganicAcids($campo['Valor']);
break;
case 'Fibra alimentaria':
$rawMaterial->setFiber($campo['Valor']);
break;
case 'Polialcoholes':
$rawMaterial->setPolyalcohols($campo['Valor']);
break;
case 'Sales Minerales':
$rawMaterial->setMineralSalts($campo['Valor']);
break;
case 'Pérdida de Volatilización':
$rawMaterial->setLostVolatilization($campo['Valor']);
break;
case 'Saturadas':
$rawMaterial->setSaturatedFattyAcids($campo['Valor']);
break;
case 'Monoinsaturadas':
$rawMaterial->setMonosaturatedFattyAcids($campo['Valor']);
break;
case 'poliinsaturadas':
$rawMaterial->setPolyunsaturatedFats($campo['Valor']);
break;
case 'Almidón':
$rawMaterial->setStarches($campo['Valor']);
break;
case 'Proteínas':
$rawMaterial->setProteins($campo['Valor']);
break;
case 'Sal':
$rawMaterial->setSalt($campo['Valor']);
break;
case 'Sodio':
$rawMaterial->setSodium($campo['Valor']);
break;
case 'A':
$rawMaterial->setVitaminA($campo['Valor']);
break;
case 'Riboflavina':
$rawMaterial->setVitaminB2($campo['Valor']);
break;
case 'Niacina':
$rawMaterial->setVitaminB3($campo['Valor']);
break;
case 'Ácido pantoténico':
$rawMaterial->setVitaminB5($campo['Valor']);
break;
case 'Vitamina B6':
$rawMaterial->setVitaminB6($campo['Valor']);
break;
case 'Ácido fólico':
$rawMaterial->setVitaminB9($campo['Valor']);
break;
case 'Vitamina B12':
$rawMaterial->setVitaminB12($campo['Valor']);
break;
case 'C':
$rawMaterial->setVitaminC($campo['Valor']);
break;
case 'D':
$rawMaterial->setVitaminD($campo['Valor']);
break;
case 'E':
$rawMaterial->setVitaminE($campo['Valor']);
break;
case 'Biotina':
$rawMaterial->setVitaminH($campo['Valor']);
break;
case 'K':
$rawMaterial->setVitaminK($campo['Valor']);
break;
case 'Hierro':
$rawMaterial->setIron($campo['Valor']);
break;
case 'Zinc':
$rawMaterial->setZinc($campo['Valor']);
break;
case 'Potasio':
$rawMaterial->setPotassium($campo['Valor']);
break;
case 'Manganeso':
$rawMaterial->setManganese($campo['Valor']);
break;
case 'Magnesio':
$rawMaterial->setMagnesium($campo['Valor']);
break;
case 'Calcio':
$rawMaterial->setCalcium($campo['Valor']);
break;
case 'Fósforo':
$rawMaterial->setMatchElement($campo['Valor']);
break;
case 'Selenio':
$rawMaterial->setSelenium($campo['Valor']);
break;
case 'Cromo':
$rawMaterial->setChromium($campo['Valor']);
break;
case 'Cloruro':
$rawMaterial->setChlorine($campo['Valor']);
break;
case 'Fluoruro':
$rawMaterial->setFluorine($campo['Valor']);
break;
case 'Molibdeno':
$rawMaterial->setMolybdenum($campo['Valor']);
break;
case 'Yodo':
$rawMaterial->setIodine($campo['Valor']);
break;
}
}
}
}