src/Controller/FormulaController.php line 53

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Formula;
  4. use App\Entity\Models\FrontModels\ColorDTO;
  5. use App\Form\FormulaType;
  6. use App\Repository\FormulaRepository;
  7. use App\Service\ColorService;
  8. use App\Service\FormulaService;
  9. use FOS\RestBundle\Controller\AbstractFOSRestController;
  10. use JMS\Serializer\SerializationContext;
  11. use FOS\RestBundle\Controller\Annotations as Rest;
  12. use JMS\Serializer\SerializerInterface;
  13. use Monolog\Handler\StreamHandler;
  14. use Monolog\Logger;
  15. use Psr\Log\LoggerInterface;
  16. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. use JMS\Serializer\SerializerBuilder;
  21. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  22. class FormulaController extends AbstractFOSRestController
  23. {
  24.     private $service;
  25.     private $serviceColor;
  26.     private $log ;
  27.     /**
  28.      * FormulaController constructor.
  29.      */
  30.     public function __construct(
  31.         FormulaService $service,
  32.         ColorService $serviceColor,
  33.         LoggerInterface $logger,
  34.         string $projectDir
  35.     )
  36.     {
  37.         $this->service      $service;
  38.         $this ->serviceColor$serviceColor;
  39.         $this->projectDir $projectDir;
  40.         $this->log $logger;
  41.     }
  42.     /**
  43.      * @Rest\Get("api/obtenerFormulas", name="obtener_formulas_convertidor")
  44.      * @param idColor       Clave del color del que queremos extraer las fórmulas.
  45.      */
  46.     public function obtenerFormulas(Request $request)
  47.     {
  48.         $serializer SerializerBuilder::create()->setPropertyNamingStrategy(
  49.             new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
  50.                 new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
  51.             )
  52.         )->build();
  53.         $idColor $request->get('idColor');
  54.         $idTipo  $request->get('tipo');
  55.         $plomo  $request->get('plomo');
  56.         $prueba  $request->get('prueba');
  57.         $usr$this->get('security.token_storage')->getToken()->getUser();
  58.         if(isset($idColor)&&isset($idTipo)) {
  59.             $data $this->service->getAllByColor($idColor,$usr,$idTipo,$plomo);
  60.             $code =  Response::HTTP_OK;
  61.         } elseif (isset($prueba)) {
  62.             // TODO: TERMINAR PROCEDIMINTO
  63.             $data $this->service->getAllByPrueba();
  64.             $code =  Response::HTTP_OK;
  65.         }else{
  66.             $data = ['error' => 'Faltan parámetros en el criterio de búsqueda'];
  67.             $code Response::HTTP_FAILED_DEPENDENCY;
  68.         }
  69.         if($data)
  70.         {
  71.             $code Response::HTTP_OK;
  72.         }else{
  73.             $data = [];
  74.         }
  75.         $serializacion SerializationContext::create()->setGroups(['detalle','componenteFormula']);
  76.         $response =  new Response($serializer->serialize($data"json",$serializacion),$code);
  77.         $response->headers->set('Content-Type''json');
  78.         $response->prepare($request);
  79.         return $response;
  80.     }
  81.     /**
  82.      * @Rest\Get("/formula", name="formula_index")
  83.      */
  84.     public function index(FormulaRepository $formulaRepository): Response
  85.     {
  86.         return $this->render('formula/index.html.twig', ['formulas' => $formulaRepository->findAll()]);
  87.     }
  88.    /**
  89.     * @Rest\Post("/api/formulasPersonalesUpdate", name="formulasPersonalesUpdate")
  90.     */
  91.     public function createFormulasPersonal(Request $requestSerializerInterface $serializer){
  92.         $usr $this->get('security.token_storage')->getToken()->getUser();
  93.         if (=== strpos($request->headers->get('Content-Type'), 'application/json')) {
  94.             $requestObjectjson_decode($request->getContent(), true);
  95.             if(isset($requestObject['color'],$requestObject['formula'])) {
  96.                 //Le añadimos los ids de cuenta y usuario, para reutilizar otros metodos
  97.                 $requestObject['color']['cuenta']['id'] = $usr->getId();
  98.                 $requestObject['color']['tipo'] = 2;
  99.                 $requestObject['formula']['cuenta']['id'] = $usr->getId();
  100.                 // $requestObject['formula']['userId'] = 128;
  101.                 //guardamos color si la formula es nueva y no se ha elegido sobreescribir
  102.                 if ($requestObject['formula']['overwritePF'] === false) {
  103.                     try{
  104.                         $color $this->serviceColor->nuevoColor($requestObject['color']);
  105.                     }catch (\Exception $e){
  106.                         $response =  new Response('KO'Response::HTTP_CONFLICT);
  107.                         /*
  108.                         return [
  109.                             'code' => $e->getCode() ?: 999,
  110.                             'message' => $e->getMessage()?:'API Exception',
  111.                         ];
  112.                         */
  113.                         return $response;
  114.                     }
  115.                     if($color == null){
  116.                         $response =  new Response(Response::HTTP_CONFLICT,Response::HTTP_CONFLICT);
  117.                         return $response;
  118.                     }
  119.                 }
  120.                 //creamos o editamos la formula
  121.                 if ($requestObject['formula']['overwritePF'] === false) {
  122.                     $colorId $color->getId();
  123.                 } else {
  124.                     $colorId $requestObject['color']['id'];
  125.                 }
  126.                 $formulaId $this->service->nuevaFormulaPersonal($requestObject['formula'], $colorId);
  127.                 // Si se está sobreescribiendo la formula, para devolver el mismo color, hay que buscarlo antes
  128.                 if ($requestObject['formula']['overwritePF'] === true) {
  129.                     $color $this->serviceColor->findByIdPersonal($colorId);
  130.                 }
  131.                 $return = new ColorDTO();
  132.                 $return->setId($color->getId());
  133.                 $return->setCodigo($color->getCodigo());
  134.                 $return->setNombre($color->getNombre());
  135.                 $return->setPosicionCT('');
  136.                 $return->setCliente($color->getClienteFinal()->getNombre()); 
  137.                 $return->setTipo(2);
  138.                 $return->setDisponible(true);
  139.                 $return->setActivo(true);
  140.                 $return->setFormulaId($formulaId);
  141.                 $response =  new Response($serializer->serialize($return'json'),Response::HTTP_OK);
  142.                 return $response;
  143.             }else{
  144.                 $response =  new Response(Response::HTTP_BAD_REQUEST);
  145.                 return $response;
  146.             }
  147.         }else{
  148.             $response =  new Response(Response::HTTP_BAD_REQUEST);
  149.             return $response;
  150.         }
  151.     }
  152.     /*
  153.      *     ADMINISTRADOR
  154.      */
  155.     /**
  156.      * @Route("/api/admin/formulaObject", name="formulaById", methods="GET")
  157.      */
  158.     public function getFormulaOficial(Request $request){
  159.         $serializer SerializerBuilder::create()->setPropertyNamingStrategy(
  160.             new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
  161.                 new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
  162.             )
  163.         )->build();
  164.         $response =  new Response(Response::HTTP_BAD_REQUEST);
  165.         if ($request->query->get('idFormula') != null && $request->query->get('idFormula') != "") {
  166.             $correcto $this->service->findById($request->query->get('idFormula') );
  167.         }
  168.         if ($request->query->get('codigoFormula') != null && $request->query->get('codigoFormula') != "") {
  169.             $correcto $this->service->findByCodigo($request->query->get('codigoFormula') );
  170.         }
  171.         $serializacion SerializationContext::create()->setGroups(['detalle','componenteFormula','listAdminFormula']);
  172.         $response =  new Response($serializer->serialize($correcto'json'$serializacion),Response::HTTP_OK);
  173.         // $response =  new Response($serializer->serialize($correcto, 'json', SerializationContext::create()->setGroups('listAdminFormula')),Response::HTTP_OK);
  174.         //$response =  new Response($serializer->serialize($data, 'json'),Response::HTTP_OK);
  175.         $response->headers->set('Content-Type''json'); //xml
  176.         $response->prepare($request);
  177.         return $response;
  178.     }
  179.     /**
  180.      * @Route("/api/admin/formulasOficiales", name="list_formulas_oficiales", methods="GET")
  181.      */
  182.     public function getFormulasOficiales(Request $request){
  183.         $serializer SerializerBuilder::create()->setPropertyNamingStrategy(
  184.             new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
  185.                 new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
  186.             )
  187.         )->build();
  188.         $response =  new Response(Response::HTTP_BAD_REQUEST);
  189.         if ($request ->query ->get('idColor')!=null && $request ->query ->get('idColor')!="") {
  190.                 $correcto $this ->serviceColor ->findById($request ->query ->get('idColor') );
  191.         }
  192.         $serializacion SerializationContext::create()->setGroups(['detalle','componenteFormula','listAdminFormula']);
  193.         $response =  new Response($serializer->serialize($correcto'json',$serializacion),Response::HTTP_OK);
  194.         //$response =  new Response($serializer->serialize($data, 'json'),Response::HTTP_OK);
  195.         $response->headers->set('Content-Type''json'); //xml
  196.         $response->prepare($request);
  197.         return $response;
  198.     }
  199.     /**
  200.      * @Route("/api/admin/formulasPrueba", name="formulaByPrueba", methods="GET")
  201.      */
  202.     public function getFormulasPrueba(Request $request){
  203.         $serializer SerializerBuilder::create()->setPropertyNamingStrategy(
  204.             new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
  205.                 new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
  206.             )
  207.         )->build();
  208.         $response =  new Response(Response::HTTP_BAD_REQUEST);
  209.         $correcto $this->service->getAllByPrueba();
  210.         $serializacion SerializationContext::create()->setGroups(['detalle','componenteFormula','listAdminFormula']);
  211.         $response =  new Response($serializer->serialize($correcto'json'$serializacion),Response::HTTP_OK);
  212.         // $response =  new Response($serializer->serialize($correcto, 'json', SerializationContext::create()->setGroups('listAdminFormula')),Response::HTTP_OK);
  213.         //$response =  new Response($serializer->serialize($data, 'json'),Response::HTTP_OK);
  214.         $response->headers->set('Content-Type''json'); //xml
  215.         $response->prepare($request);
  216.         return $response;
  217.     }
  218.     /**
  219.      * @Route("/api/admin/formulasPersonales", name="list_getFormulasPersonales", methods="GET")
  220.      */
  221.     public function getFormulasPersonales(Request $request){
  222.         $serializer SerializerBuilder::create()->setPropertyNamingStrategy(
  223.             new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
  224.                 new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
  225.             )
  226.         )->build();
  227.         if ($request ->query ->get('idColor')!=null && $request ->query ->get('idColor')!="") {
  228.             $correcto $this ->serviceColor ->findByIdPersonal($request ->query ->get('idColor') );
  229.         }
  230.         $serializacion SerializationContext::create()->setGroups(['detalle','componenteFormula','listAdminFormula']);
  231.         $response =  new Response($serializer->serialize($correcto'json',$serializacion),Response::HTTP_OK);
  232.         //$response =  new Response($serializer->serialize($data, 'json'),Response::HTTP_OK);
  233.         $response->headers->set('Content-Type''json'); //xml
  234.         $response->prepare($request);
  235.         return $response;
  236.     }
  237.     /**
  238.      * @Rest\Post("/api/admin/formulasOficialesAssociate", name="AssociateFormulasOficiales")
  239.      */
  240.     public function asociarFormulasOficiales(Request $request){
  241.         $correcto null;
  242.         $response =  new Response(Response::HTTP_BAD_REQUEST);
  243.         if (=== strpos($request->headers->get('Content-Type'), 'application/json')) {
  244.             $datosjson_decode($request->getContent(), true);
  245.             if (isset($datos['colorId']) && isset($datos['formulaId']) && !isset($datos['unlink'])) {
  246.                 //$correcto= null;
  247.                 $correcto $this ->service ->asociarFormulaOficial($datos);
  248.             } else if (isset($datos['unlink']) ){
  249.                 //Tenemos unlink por lo que es una desasociacion
  250.                 $correcto $this ->service ->desAsociarFormulaOficial($datos);
  251.             }
  252.         }
  253.         if($correcto != 0){
  254.             $response =  new Response(Response::HTTP_OK);
  255.         }else{
  256.             $response =  new Response(Response::HTTP_BAD_REQUEST);
  257.         }
  258.         $response->prepare($request);
  259.         return $response;
  260.     }
  261.     /**
  262.      * @Rest\Post("/api/admin/formulasOficialesUpate", name="CreateOrUpdateFormulasOficiales")
  263.      */
  264.     public function updateFormulasOficiales(Request $request){
  265.         $correcto null;
  266.         $response =  new Response(Response::HTTP_BAD_REQUEST);
  267.         if (=== strpos($request->headers->get('Content-Type'), 'application/json')) {
  268.             $formulajson_decode($request->getContent(), true);
  269.             if(isset($formula['idColor']) && empty($formula['id'])){
  270.                 //$correcto= null;
  271.                 $correcto $this ->service ->nuevaFormulaOficial($formula);
  272.             }else if(isset($formula['id']) ){
  273.                 //Tenemos Id por lo que es una actulizacion
  274.                 $correcto $this ->service ->modificaFormulaOficial($formula);
  275.             }
  276.         }
  277.         if($correcto != null){
  278.             $response =  new Response(Response::HTTP_OK);
  279.         }else{
  280.             $response =  new Response(Response::HTTP_BAD_REQUEST);
  281.         }
  282.         $response->prepare($request);
  283.         return $response;
  284.     }
  285.     /**
  286.      * @Route("/api/admin/formulasPersonalesUpdate", name="updateFormulasPersonal_Admin", methods="POST")
  287.      */
  288.     public function updateFormulasPersonal(Request $request){
  289.         $usr $this->get('security.token_storage')->getToken()->getUser();
  290.         if (=== strpos($request->headers->get('Content-Type'), 'application/json')) {
  291.             $requestObjectjson_decode($request->getContent(), true);
  292.             if(isset($requestObject['idColor'],$requestObject['formula'])) {
  293.                 //Le añadimos los ids de usuario, para reutilizar otros metodos
  294.                 $requestObject['formula']['userId'] = $usr->getId();
  295.                 //guardamos formula
  296.                 $this->service->nuevaFormulaPersonal($requestObject['formula'],$requestObject['idColor']);
  297.                 $response =  new Response(Response::HTTP_OK);
  298.                 return $response;
  299.             }else{
  300.                 $response =  new Response(Response::HTTP_BAD_REQUEST);
  301.                 return $response;
  302.             }
  303.         }else{
  304.             $response =  new Response(Response::HTTP_BAD_REQUEST);
  305.             return $response;
  306.         }
  307.     }
  308.     /**
  309.      * @Route("/api/admin/obtenerFormulasExpertis", name="obtenerFormulas_Expertis", methods="GET")
  310.      */
  311.     public function obtenerFormulasParaExpertis(Request $request) {
  312.         $serializer SerializerBuilder::create()->setPropertyNamingStrategy(
  313.             new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
  314.                 new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
  315.             )
  316.         )->build();
  317.         $usr $this->get('security.token_storage')->getToken()->getUser();
  318.         if($usr != 'anon.') {
  319.             $colores $this ->serviceColor->getByActivo();
  320.             $serializacion SerializationContext::create()->setGroups(['detalle','componenteFormula','listAdminFormula']);
  321.             $response =  new Response($serializer->serialize($colores'json'$serializacion),Response::HTTP_OK);
  322.             //$response =  new Response($serializer->serialize($data, 'json'),Response::HTTP_OK);
  323.             $response->headers->set('Content-Type''json'); //xml
  324.             $response->prepare($request);
  325.             return $response;
  326.         } else {
  327.             $response =  new Response(Response::HTTP_BAD_REQUEST,Response::HTTP_BAD_REQUEST);
  328.             return $response;
  329.         }
  330.     }
  331.     /**
  332.      * @Route("/api/admin/obtenerFormulasCartasExpertis", name="obtenerFormulasCartas_Expertis", methods="GET")
  333.      */
  334.     public function obtenerFormulasCartasParaExpertis(Request $request) {
  335.         $serializer SerializerBuilder::create()->setPropertyNamingStrategy(
  336.             new \JMS\Serializer\Naming\SerializedNameAnnotationStrategy(
  337.                 new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy()
  338.             )
  339.         )->build();
  340.         $usr $this->get('security.token_storage')->getToken()->getUser();
  341.         if($usr != 'anon.') {
  342.             $formulasCartas $this ->service->getExportFormulasCT();
  343.             $response =  new Response($serializer->serialize($formulasCartas'json'),Response::HTTP_OK);
  344.             $response->headers->set('Content-Type''json'); //xml
  345.             $response->prepare($request);
  346.             return $response;
  347.         } else {
  348.             $response =  new Response(Response::HTTP_BAD_REQUEST,Response::HTTP_BAD_REQUEST);
  349.             return $response;
  350.         }
  351.     }
  352.     /**
  353.      * @Route("/api/admin/generaExportExcel", name="generaExportExcel_Admin", methods="GET")
  354.      */
  355.     public function generaExcelFormula(Request $request){
  356.         $usr $this->get('security.token_storage')->getToken()->getUser();
  357.         if($usr != 'anon.') {
  358.             $logDir $this->projectDir;
  359.             $nameLog $logDir."/var/log/".date_format(new \DateTime(), 'Ymd_His') . "generaExcelFormula.log";
  360.             $this->log = new Logger($nameLog);
  361.             $this->log->pushHandler(new StreamHandler($nameLogLogger::INFO));
  362.             $this->log->info("El usuario que solicita la exportacion tiene el id: " $usr->getId());
  363.             $nombreFichero "Exportacion_de_formulas_".date_format(new \DateTime(), 'Ymd_His');
  364.             try {
  365.                 $this->log->info("DEBUG 1");
  366.                 $excel $this->service->generaExcelExportFormulas();
  367.                 $this->log->info("DEBUG 2");
  368.                 $writer = new Xlsx($excel);
  369.                 //Definimos su ruta
  370.                 $excelFilepath $logDir."/var/tmp_upload/".date_format(new \DateTime(), 'Ymd_His').$nombreFichero.".xlsx";
  371.                 //Lo guardamos
  372.                 $writer->save($excelFilepath);
  373.                 $this->log->info("DEBUG 3");
  374.                 $response = new BinaryFileResponse($excelFilepath);
  375.                 $response->headers->set('Content-Type''application/vnd.ms-excel'); //xml
  376.                 $response->headers->set('Content-Disposition''attachment; filename="' $nombreFichero '.xlsx"'); //xml
  377.                 $this->log->info("DEBUG 4");
  378.                 return $response;
  379.             } catch (\Exception $e) {
  380.                 $this->log->error($e->getMessage());
  381.                 $response =  new Response(Response::HTTP_BAD_REQUEST,Response::HTTP_BAD_REQUEST);
  382.                 return $response;
  383.             }
  384.         }else{
  385.             $response =  new Response(Response::HTTP_BAD_REQUEST,Response::HTTP_BAD_REQUEST);
  386.             return $response;
  387.         }
  388.     }
  389.     /**
  390.      * @Route("/api/admin/generaExportExcelCT", name="generaExportExcelCT_Admin", methods="GET")
  391.      */
  392.     public function generaExportExcelCT(Request $request){
  393.         $usr $this->get('security.token_storage')->getToken()->getUser();
  394.         if($usr != 'anon.') {
  395.             $logDir $this->projectDir;
  396.             $nameLog $logDir."/var/log/".date_format(new \DateTime(), 'Ymd_His') . "generaExcelFormula.log";
  397.             $this->log = new Logger($nameLog);
  398.             $this->log->pushHandler(new StreamHandler($nameLogLogger::INFO));
  399.             $this->log->info("El usuario que solicita la exportacion tiene el id: " $usr->getId());
  400.             $nombreFichero "Exportacion_de_formulas_cartas";
  401.             try {
  402.                 $excel $this->service->generaExcelExportFormulasCT();
  403.                 $writer = new Xlsx($excel);
  404.                 //Definimos su ruta
  405.                 $excelFilepath $logDir."/var/tmp_upload/".$nombreFichero.".xlsx";
  406.                 //Lo guardamos
  407.                 $writer->save($excelFilepath);
  408.                 $response = new BinaryFileResponse($excelFilepath);
  409.                 $response->headers->set('Content-Type''application/vnd.ms-excel'); //xml
  410.                 $response->headers->set('Content-Disposition''attachment; filename="' $nombreFichero '.xlsx"'); //xml
  411.                 return $response;
  412.             } catch (\Exception $e) {
  413.                 $this->log->error($e->getMessage());
  414.                 $response =  new Response(Response::HTTP_BAD_REQUEST,Response::HTTP_BAD_REQUEST);
  415.                 return $response;
  416.             }
  417.         }else{
  418.             $response =  new Response(Response::HTTP_BAD_REQUEST,Response::HTTP_BAD_REQUEST);
  419.             return $response;
  420.         }
  421.     }
  422.     /**
  423.      * @Route("/api/importFormulaPersonales", name="import_access_personal", methods="POST")
  424.      */
  425.      public function setAccessFormulaPersonal(Request $request){
  426.      }
  427. }