src/Service/ImportarMateriasHelper.php line 16

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use App\Entity\RawMaterial;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. class ImportarMateriasHelper
  6. {
  7.     public function __construct(private readonly EntityManagerInterface $entityManager) {}
  8.     /**
  9.      * Intenta importar un archivo con las materias primas
  10.      *
  11.      * @return array{correct: boolean, error: string}
  12.      */
  13.     public function importar(): array
  14.     {
  15.         /*dump($_ENV);
  16.         dump($_SERVER); die();*/
  17.         $ruta $_ENV['RUTA_IMPORTACION'];
  18.         if (empty($ruta)) {
  19.             return ['correct' => false'error' => 'No se ha especificado ninguna ruta'];
  20.         }
  21.         if (!str_ends_with((string) $rutaDIRECTORY_SEPARATOR)) {
  22.             $ruta .= DIRECTORY_SEPARATOR;
  23.         }
  24.         $archivo ''//echo $ruta;
  25.         if (is_dir($ruta)) {
  26.             $dir opendir($ruta);
  27.             if (!$dir) {
  28.                 return ['correct' => false'error' => 'La ruta especificada no existe'];
  29.             }
  30.             // Solo se procesa el primer archivo encontrado
  31.             while ($archivoEncontrado readdir($dir)) {
  32.                 if (!str_starts_with($archivoEncontrado'.')) {
  33.                     if (!is_file($ruta $archivoEncontrado)) {
  34.                         return ['correct' => false'error' => 'Error del sistema de archivos'];
  35.                     }
  36.                     $archivo $ruta $archivoEncontrado;
  37.                 }
  38.             }
  39.         }
  40.         if (empty($archivo)) {
  41.             return ['correct' => true'error' => 'No hay archivos que procesar'];
  42.         }
  43.         $content file_get_contents($archivo);
  44.         if (empty($content)) {
  45.             return ['correct' => true'error' => 'Nada que procesar'];
  46.         }
  47.         $materiasPrimasRepo $this->entityManager->getRepository(RawMaterial::class);
  48.         //echo 'Antes de procesar'; die();
  49.         $xml simplexml_load_string($content);
  50.         foreach ($xml->children() as $child) {
  51.             $rawMaterial $materiasPrimasRepo->findOneBy([
  52.                 'code' =>  $child['Codigo']
  53.             ]);
  54.             if (!$rawMaterial) {
  55.                 $rawMaterial = new RawMaterial();
  56.                 $rawMaterial->setCode($child['Codigo']);
  57.                 $rawMaterial->setPrice(0);
  58.             }
  59.             $rawMaterial->setName($child['NombreOriginal']);
  60.             $rawMaterial->setPublicName(
  61.                 empty($child['NombreDeclaracion']) ? $child['NombreOriginal'] : $child['NombreDeclaracion']
  62.             );
  63.             $this->camposNutricionales($rawMaterial$child->ValoresNutricionales->CampoNutricional);
  64.             $this->entityManager->persist($rawMaterial);
  65.         }
  66.         $this->entityManager->flush();
  67.         
  68.         try {
  69.             unlink($archivo);
  70.         }catch(\Exception) {
  71.             return ['correct' => true'error' => 'Procesado correctamente. No se ha podido eliminar el archivo de importación.'];
  72.         }
  73.         return ['correct' => true'error' => ''];
  74.     }
  75.     private function camposNutricionales(RawMaterial $rawMaterial\SimpleXMLElement $camposNutricionales)
  76.     {
  77.         //$rawMaterial->setAllergens([]);
  78.         //$rawMaterial->setPrice(0);
  79.         $rawMaterial->setHumidity('0');
  80.         $rawMaterial->setGrease('0');
  81.         $rawMaterial->setSaturatedFattyAcids('0');
  82.         $rawMaterial->setMonosaturatedFattyAcids('0');
  83.         $rawMaterial->setPolyunsaturatedFats('0');
  84.         $rawMaterial->setSugars('0');
  85.         $rawMaterial->setPolyalcohols('0');
  86.         $rawMaterial->setStarches('0');
  87.         $rawMaterial->setFiber('0');
  88.         $rawMaterial->setProteins('0');
  89.         $rawMaterial->setMineralSalts('0');
  90.         $rawMaterial->setSodium('0');
  91.         $rawMaterial->setVitaminA('0');
  92.         $rawMaterial->setVitaminB1('0');
  93.         $rawMaterial->setVitaminB2('0');
  94.         $rawMaterial->setVitaminB3('0');
  95.         $rawMaterial->setVitaminB5('0');
  96.         $rawMaterial->setVitaminB6('0');
  97.         $rawMaterial->setVitaminB9('0');
  98.         $rawMaterial->setVitaminB12('0');
  99.         $rawMaterial->setVitaminC('0');
  100.         $rawMaterial->setVitaminD('0');
  101.         $rawMaterial->setVitaminE('0');
  102.         $rawMaterial->setVitaminH('0');
  103.         $rawMaterial->setVitaminK('0');
  104.         $rawMaterial->setCalcium('0');
  105.         $rawMaterial->setIron('0');
  106.         $rawMaterial->setMagnesium('0');
  107.         $rawMaterial->setMatchElement('0');
  108.         $rawMaterial->setPotassium('0');
  109.         $rawMaterial->setChlorine('0');
  110.         $rawMaterial->setZinc('0');
  111.         $rawMaterial->setCopper('0');
  112.         $rawMaterial->setManganese('0');
  113.         $rawMaterial->setFluorine('0');
  114.         $rawMaterial->setSelenium('0');
  115.         $rawMaterial->setChromium('0');
  116.         $rawMaterial->setMolybdenum('0');
  117.         $rawMaterial->setIodine('0');
  118.         $rawMaterial->setSalatrim('0');
  119.         $rawMaterial->setCarbohydrates('0');
  120.         $rawMaterial->setAlcohol('0');
  121.         $rawMaterial->setOrganicAcids('0');
  122.         $rawMaterial->setErythritol('0');
  123.         $rawMaterial->setSalt('0');
  124.         $rawMaterial->setLostVolatilization('0');
  125.         foreach ($camposNutricionales as $campo) {
  126.             switch ($campo['Nombre']) {
  127.                 case 'Grasas':
  128.                     $rawMaterial->setGrease($campo['Valor']);
  129.                     break;
  130.                 case 'Humedad':
  131.                     $rawMaterial->setHumidity($campo['Valor']);
  132.                     break;
  133.                 case 'Hidratos de carbono':
  134.                     $rawMaterial->setCarbohydrates($campo['Valor']);
  135.                     break;
  136.                 case 'Azúcares':
  137.                     $rawMaterial->setSugars($campo['Valor']);
  138.                     break;
  139.                 case 'Ácidos Orgánicos':
  140.                     $rawMaterial->setOrganicAcids($campo['Valor']);
  141.                     break;
  142.                 case 'Fibra alimentaria':
  143.                     $rawMaterial->setFiber($campo['Valor']);
  144.                     break;
  145.                 case 'Polialcoholes':
  146.                     $rawMaterial->setPolyalcohols($campo['Valor']);
  147.                     break;
  148.                 case 'Sales Minerales':
  149.                     $rawMaterial->setMineralSalts($campo['Valor']);
  150.                     break;
  151.                 case 'Pérdida de Volatilización':
  152.                     $rawMaterial->setLostVolatilization($campo['Valor']);
  153.                     break;
  154.                 case 'Saturadas':
  155.                     $rawMaterial->setSaturatedFattyAcids($campo['Valor']);
  156.                     break;
  157.                 case 'Monoinsaturadas':
  158.                     $rawMaterial->setMonosaturatedFattyAcids($campo['Valor']);
  159.                     break;
  160.                 case 'poliinsaturadas':
  161.                     $rawMaterial->setPolyunsaturatedFats($campo['Valor']);
  162.                     break;
  163.                 case 'Almidón':
  164.                     $rawMaterial->setStarches($campo['Valor']);
  165.                     break;
  166.                 case 'Proteínas':
  167.                     $rawMaterial->setProteins($campo['Valor']);
  168.                     break;
  169.                 case 'Sal':
  170.                     $rawMaterial->setSalt($campo['Valor']);
  171.                     break;
  172.                 case 'Sodio':
  173.                     $rawMaterial->setSodium($campo['Valor']);
  174.                     break;
  175.                 case 'A':
  176.                     $rawMaterial->setVitaminA($campo['Valor']);
  177.                     break;
  178.                 case 'Riboflavina':
  179.                     $rawMaterial->setVitaminB2($campo['Valor']);
  180.                     break;
  181.                 case 'Niacina':
  182.                     $rawMaterial->setVitaminB3($campo['Valor']);
  183.                     break;
  184.                 case 'Ácido pantoténico':
  185.                     $rawMaterial->setVitaminB5($campo['Valor']);
  186.                     break;
  187.                 case 'Vitamina B6':
  188.                     $rawMaterial->setVitaminB6($campo['Valor']);
  189.                     break;
  190.                 case 'Ácido fólico':
  191.                     $rawMaterial->setVitaminB9($campo['Valor']);
  192.                     break;
  193.                 case 'Vitamina B12':
  194.                     $rawMaterial->setVitaminB12($campo['Valor']);
  195.                     break;
  196.                 case 'C':
  197.                     $rawMaterial->setVitaminC($campo['Valor']);
  198.                     break;
  199.                 case 'D':
  200.                     $rawMaterial->setVitaminD($campo['Valor']);
  201.                     break;
  202.                 case 'E':
  203.                     $rawMaterial->setVitaminE($campo['Valor']);
  204.                     break;
  205.                 case 'Biotina':
  206.                     $rawMaterial->setVitaminH($campo['Valor']);
  207.                     break;
  208.                 case 'K':
  209.                     $rawMaterial->setVitaminK($campo['Valor']);
  210.                     break;
  211.                 case 'Hierro':
  212.                     $rawMaterial->setIron($campo['Valor']);
  213.                     break;
  214.                 case 'Zinc':
  215.                     $rawMaterial->setZinc($campo['Valor']);
  216.                     break;
  217.                 case 'Potasio':
  218.                     $rawMaterial->setPotassium($campo['Valor']);
  219.                     break;
  220.                 case 'Manganeso':
  221.                     $rawMaterial->setManganese($campo['Valor']);
  222.                     break;
  223.                 case 'Magnesio':
  224.                     $rawMaterial->setMagnesium($campo['Valor']);
  225.                     break;
  226.                 case 'Calcio':
  227.                     $rawMaterial->setCalcium($campo['Valor']);
  228.                     break;
  229.                 case 'Fósforo':
  230.                     $rawMaterial->setMatchElement($campo['Valor']);
  231.                     break;
  232.                 case 'Selenio':
  233.                     $rawMaterial->setSelenium($campo['Valor']);
  234.                     break;
  235.                 case 'Cromo':
  236.                     $rawMaterial->setChromium($campo['Valor']);
  237.                     break;
  238.                 case 'Cloruro':
  239.                     $rawMaterial->setChlorine($campo['Valor']);
  240.                     break;
  241.                 case 'Fluoruro':
  242.                     $rawMaterial->setFluorine($campo['Valor']);
  243.                     break;
  244.                 case 'Molibdeno':
  245.                     $rawMaterial->setMolybdenum($campo['Valor']);
  246.                     break;
  247.                 case 'Yodo':
  248.                     $rawMaterial->setIodine($campo['Valor']);
  249.                     break;
  250.             }
  251.         }
  252.     }
  253. }