src/Controller/Movimientos/ItemMovimientoController.php line 893

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Movimientos;
  3. use App\Entity\Movimientos\ItemMovimiento;
  4. use App\Form\Movimientos\ItemMovimientoType;
  5. use App\Repository\Movimientos\ItemMovimientoRepository;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use App\Entity\Movimientos\MovimientoStock;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use App\Entity\Almacen\Deposito;
  13. use App\Entity\Almacen\ArticuloDeposito;
  14. use App\Entity\Calidad\Descripcion;
  15. use EnchantBroker;
  16. use Psr\Log\LoggerInterface;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. /**
  19.  * @Route("/movimientos/item/movimiento")
  20.  */
  21. class ItemMovimientoController extends AbstractController
  22. {
  23.     /**
  24.      * @Route("/", name="app_movimientos_item_movimiento_index", methods={"GET"})
  25.      */
  26.     public function index(ItemMovimientoRepository $itemMovimientoRepository): Response
  27.     {
  28.         return $this->render('movimientos/item_movimiento/index.html.twig', [
  29.             'item_movimientos' => $itemMovimientoRepository->findAll(),
  30.         ]);
  31.     }
  32.     /**
  33.      * @Route("/{id}/new", name="app_movimientos_item_movimiento_new", methods={"GET", "POST"})
  34.      */
  35.     public function new(MovimientoStock $movimientoRequest $requestItemMovimientoRepository $itemMovimientoRepository): Response
  36.     {
  37.         $type $movimiento->getInstance();
  38.         $path $pathsend null;
  39.         switch ($type
  40.         {
  41.             case "as":
  42.                 $path "app_movimientos_ajuste_stock_index";
  43.                 $pathsend="app_movimientos_item_movimiento_procesar_ajuste";
  44.                 break;
  45.             case "or":
  46.                 $path "app_movimientos_orden_reparacion_index";
  47.                 $pathsend="app_movimientos_item_movimiento_procesar_orden_reparacion";
  48.                 break;
  49.             case "tr":
  50.                 $path "app_movimientos_transferencia_index";
  51.                 $pathsend="app_movimientos_item_movimiento_procesar_transferencia";
  52.                 break;
  53.             case "oc":
  54.                 $path "app_movimientos_orden_compra_index";
  55.                 $pathsend="app_movimientos_item_movimiento_procesar_oc";
  56.                 break;
  57.             case "ph":
  58.                 $path "app_movimientos_prestamo_herramienta_index";
  59.                 $pathsend="app_movimientos_item_movimiento_procesar_prestamo";
  60.                 break;
  61.             case "ore":
  62.                 $path "app_movimientos_orden_reparacion_externa_index";
  63.                 $pathsend="app_movimientos_item_movimiento_orden_reparacion_externa";
  64.                 break;
  65.             case "re":
  66.                 $path "app_movimientos_remito_entrega_index";
  67.                 $pathsend "app_movimientos_item_movimiento_procesar_remito_entrega";
  68.                 break;
  69.         }
  70.         $itemMovimiento = new ItemMovimiento();
  71.         $itemMovimiento->setMovimiento($movimiento);
  72.         $form $this->createForm(ItemMovimientoType::class, $itemMovimiento, ['movimiento' => $movimiento'user' => $this->getUser()]);
  73.         $form->handleRequest($request);
  74.         if ($form->isSubmitted() && $form->isValid()) 
  75.         {
  76.             if (!$movimiento->isModificable())
  77.             {
  78.                 $this->addFlash(
  79.                     'error',
  80.                     'La accion no se puede llevar a cabo. El documento ya ha sido finalizado.'
  81.                 );
  82.                 return $this->redirectToRoute('app_movimientos_item_movimiento_new', ['id' => $movimiento->getId()], Response::HTTP_SEE_OTHER); 
  83.             }
  84.             $itemMovimientoRepository->add($itemMovimientotrue);
  85.             //return $this->redirectToRoute('app_movimientos_item_movimiento_index', [], Response::HTTP_SEE_OTHER);
  86.         }
  87.         return $this->renderForm('movimientos/item_movimiento/new.html.twig', [
  88.             'item_movimiento' => $itemMovimiento,
  89.             'movimiento' => $movimiento,
  90.             'form' => $form,
  91.             'path' => $path,
  92.             'pathsend' => $pathsend,
  93.         ]);
  94.     }
  95.     /**
  96.      * @Route("/{id}/procesar/remito/entrega", name="app_movimientos_item_movimiento_procesar_remito_entrega", methods={"POST"})
  97.      */
  98.     public function procesarRemitoEntrega(MovimientoStock $movimientoRequest $request): Response
  99.     {
  100.         if (!$movimiento->getItems()->count())
  101.         {
  102.             $this->addFlash('error''No se han ingresado articulos al remito de entrega');
  103.             return $this->redirectToRoute('app_movimientos_item_movimiento_new', ['id' => $movimiento->getId()], Response::HTTP_SEE_OTHER);
  104.         }
  105.         if ($movimiento->isYaProcesada())
  106.         {
  107.             $this->addFlash('error''El remito de entrega ya ha sido procesado');
  108.             return $this->redirectToRoute('app_movimientos_item_movimiento_new', ['id' => $movimiento->getId()], Response::HTTP_SEE_OTHER);
  109.         }
  110.         $deposito $movimiento->getDeposito();
  111.         if (!$deposito)
  112.         {
  113.             $this->addFlash('error''No se ha seleccionado un deposito para el remito de entrega');
  114.             return $this->redirectToRoute('app_movimientos_item_movimiento_new', ['id' => $movimiento->getId()], Response::HTTP_SEE_OTHER);
  115.         }
  116.         $em $this->getDoctrine()->getManager();
  117.         $repository $em->getRepository(ArticuloDeposito::class);
  118.         foreach ($movimiento->getItems() as $item)
  119.         {
  120.             $articuloDeposito $repository->findArticuloDeposito($item->getArticulo(), $deposito);
  121.             if (!$articuloDeposito)
  122.             {
  123.                 $articuloDeposito = new ArticuloDeposito();
  124.                 $articuloDeposito->setArticulo($item->getArticulo())
  125.                                  ->setDeposito($deposito);
  126.                 $em->persist($articuloDeposito);
  127.             }
  128.             $articuloDeposito->updateStock($item->getCantidad());
  129.         }
  130.         $movimiento->setYaProcesada(true);
  131.         $em->flush();
  132.         $this->addFlash('success''Remito de entrega procesado exitosamente');
  133.         return $this->redirectToRoute('app_movimientos_remito_entrega_index');
  134.     }
  135.     /**
  136.      * @Route("/{id}/procesar/ingreso", name="app_movimientos_item_movimiento_procesar_ingreso", methods={"GET", "POST"})
  137.      */
  138.     public function procesarIngreso(MovimientoStock $movimientoRequest $requestLoggerInterface $logger): Response
  139.     {
  140.         $flag $movimiento->getInstance();
  141.         if ($movimiento->isYaProcesada())
  142.         {
  143.             if ($flag == 'oc')
  144.             {
  145.                 return new JsonResponse(['ok' => false'msg' => 'La orden de compra ya ha sido procesada']);
  146.             }
  147.             else
  148.             {
  149.                 if ($movimiento->getIsDevuelta())
  150.                 {
  151.                     return new JsonResponse(['ok' => false'msg' => 'La devolucion ya ha sido procesada']);
  152.                 }
  153.             }
  154.         }
  155.         $fields $request->request->all();
  156.      //   return new JsonResponse($fields);
  157.         $em $this->getDoctrine()->getManager();
  158.         $deposito $movimiento->getDeposito(); //$em->find(Deposito::class, $fields['deposito']);
  159.         if (!$fields['recepcion'])
  160.         {
  161.             if ($flag == 'oc')
  162.             {
  163.                 return new JsonResponse(['ok' => false'msg' => 'Debe seleccionar la fecha de recepcion de la mercaderia']);
  164.             }
  165.             else
  166.             {
  167.                 return new JsonResponse(['ok' => false'msg' => 'Debe seleccionar la fecha de devolucion']);
  168.             }
  169.         }
  170.         $repository $em->getRepository(ArticuloDeposito::class);
  171.         
  172.         if (!$deposito)
  173.         {
  174.             return new JsonResponse(['ok' => false'msg' => 'No ha seleccionado un deposito desitno']);
  175.         }
  176.         $recepcion = \DateTime::createFromFormat('Y-m-d'$fields['recepcion']);
  177.        // $repository = $em->getRepository(ItemMovimiento::class);
  178.         $query 'item';
  179.         $cacheArticulos $observaciones = array();
  180.         foreach ($fields as $k => $v
  181.         {
  182.           //  $observaciones[$k] = $v;
  183.             $field explode('-'$k);
  184.             if ($field[0] === $query)
  185.             {
  186.                 $idIt $field[1];
  187.                 $item $em->find(ItemMovimiento::class, $idIt);
  188.                 if ($item)
  189.                 {
  190.                     if (isset($fields['remito-'.$idIt]))
  191.                     {
  192.                         $item->setRemito($fields['remito-'.$idIt]);
  193.                     }
  194.                     if (isset($fields['traza-'.$idIt]))
  195.                     {
  196.                         $item->setTrazabilidad($fields['traza-'.$idIt]);
  197.                     }
  198.                     if (isset($fields['estado-'.$idIt]))
  199.                     {
  200.                         $item->setEstado($fields['estado-'.$idIt]);
  201.                     }
  202.                     if (isset($fields['descripcion-'.$idIt]))
  203.                     {
  204.                         $idDescripcion $fields['descripcion-'.$idIt];
  205.                         if ($idDescripcion)
  206.                         {
  207.                             $descripcion $em->find(Descripcion::class, $idDescripcion);
  208.                             if ($descripcion)
  209.                             {
  210.                                 $item->setDescripcion($descripcion);
  211.                             }
  212.                         }
  213.                         else
  214.                         {
  215.                             $item->setDescripcion(null);
  216.                         }
  217.                     }
  218.                     else
  219.                     {
  220.                         $item->setDescripcion(null);
  221.                     }
  222.                     $articulo $item->getArticulo();
  223.                     $finders $this->findArticuloDepositoInCache($cacheArticulos$articulo$deposito);
  224.                     $cacheArticulos $finders[1];
  225.                     $artDepo $finders[0];
  226.                     if (!$artDepo)
  227.                     {
  228.                         $artDepo $repository->findArticuloDeposito($articulo$deposito);
  229.                         if (!$artDepo)
  230.                         {
  231.                             $artDepo = new ArticuloDeposito();
  232.                             $artDepo->setArticulo($articulo)
  233.                                     ->setDeposito($deposito);
  234.                             $em->persist($artDepo);                            
  235.                         }
  236.                     }
  237.                     $artDepo->setStock($artDepo->getStock() + $v);
  238.                    // $item->setObservaciones($fields["obser-$field[1]"])
  239.                    $item->setCantidadIngresada($v)
  240.                          ->setInsumo($articulo->getInsumo())
  241.                          ->setProducto($articulo->getProducto())
  242.                          ->setTipo($articulo->getTipo());
  243.                     $cacheArticulos[uniqid()] = $artDepo;                    
  244.                 }
  245.             }
  246.         }
  247.         $movimiento->setYaProcesada(true)
  248.                     ->setDeposito($deposito)
  249.                     ->setIsDevuelta(true$recepcion);
  250.         $em->flush();
  251.         return new JsonResponse(['ok' => true]);
  252.         //throw new \Exception(print_r($fields));
  253.     }
  254.     /**
  255.      * @Route("/{id}/procesar/transferencia", name="app_movimientos_item_movimiento_procesar_transferencia", methods={"GET", "POST"})
  256.      */
  257.     public function procesarTransferencia(MovimientoStock $movimientoRequest $request): Response
  258.     {
  259.         if (!$movimiento->getItems()->count())
  260.         {
  261.             if ($request->isXmlHttpRequest())
  262.             {
  263.                 return new JsonResponse(['ok' => false'msg' => 'No se han ingresados articulos a la tranferencia']);
  264.             }
  265.             else
  266.             {
  267.                 $this->addFlash(
  268.                                     'error',
  269.                                     'No se han ingresados articulos a la tranferencia'
  270.                                 );
  271.                 return $this->redirectToRoute('app_movimientos_item_movimiento_new', ['id' => $movimiento->getId()], Response::HTTP_SEE_OTHER); 
  272.             }
  273.         }
  274.         if ($movimiento->isYaProcesada())
  275.         {
  276.             if ($request->isXmlHttpRequest())
  277.             {
  278.                 return new JsonResponse(['ok' => false'msg' => 'La transferencia ya ha sido ejecutada']);
  279.             }
  280.             else
  281.             {
  282.                 $this->addFlash(
  283.                                     'error',
  284.                                     'La transferencia ya ha sido ejecutada'
  285.                                 );
  286.                 return $this->redirectToRoute('app_movimientos_item_movimiento_new', ['id' => $movimiento->getId()], Response::HTTP_SEE_OTHER); 
  287.             }
  288.             
  289.         }
  290.         $query 'item';
  291.         $cacheArticulos = array();
  292.         $origen $movimiento->getDeposito();
  293.         $destino $movimiento->getDestino();
  294.         $em $this->getDoctrine()->getManager();
  295.         $repository $em->getRepository(ArticuloDeposito::class);
  296.         foreach ($movimiento->getItems() as $v
  297.         {
  298.             $articulo $v->getArticulo();
  299.             $finders $this->findArticuloDepositoInCache($cacheArticulos$articulo$origen);
  300.             $cacheArticulos $finders[1];
  301.             $artDepo $finders[0];
  302.             if (!$artDepo)
  303.             {
  304.                 $artDepo $repository->findArticuloDeposito($articulo$origen);
  305.                 if (!$artDepo)
  306.                 {
  307.                     $artDepo = new ArticuloDeposito();
  308.                     $artDepo->setArticulo($articulo)
  309.                             ->setDeposito($origen);
  310.                     $em->persist($artDepo);                            
  311.                 }
  312.             }
  313.             $artDepo->setStock($artDepo->getStock() - $v->getCantidad());
  314.             $cacheArticulos[uniqid()] = $artDepo;                    
  315.                 
  316.             $finders $this->findArticuloDepositoInCache($cacheArticulos$articulo$destino);
  317.             $cacheArticulos $finders[1];
  318.             $artDepo $finders[0];
  319.             if (!$artDepo)
  320.             {
  321.                 $artDepo $repository->findArticuloDeposito($articulo$destino);
  322.                 if (!$artDepo)
  323.                 {
  324.                     $artDepo = new ArticuloDeposito();
  325.                     $artDepo->setArticulo($articulo)
  326.                             ->setDeposito($destino);
  327.                     $em->persist($artDepo);                            
  328.                 }
  329.             }
  330.             $artDepo->setStock($artDepo->getStock() + $v->getCantidad());
  331.             $cacheArticulos[uniqid()] = $artDepo
  332.             
  333.         }
  334.         $movimiento->setYaProcesada(true);
  335.         $em->flush();
  336.         if ($request->isXmlHttpRequest())
  337.         {
  338.             return new JsonResponse(['ok' => true]);
  339.         }
  340.         $this->addFlash(
  341.                             'success',
  342.                             'Ajuste Stock procesado exitosamente'
  343.                         );
  344.         return $this->redirectToRoute('app_movimientos_transferencia_index'); 
  345.         
  346.     }
  347.     /**
  348.      * @Route("/{id}/procesar/prestamo", name="app_movimientos_item_movimiento_procesar_prestamo", methods={"GET", "POST"})
  349.      */
  350.     public function procesarPrestamoHerrameintas(MovimientoStock $movimientoRequest $request): Response
  351.     {
  352.         if (!$movimiento->getItems()->count())
  353.         {
  354.             if ($request->isXmlHttpRequest())
  355.             {
  356.                 return new JsonResponse(['ok' => false'msg' => 'No se han ingresados articulos al prestamo']);
  357.             }
  358.             else
  359.             {
  360.                 $this->addFlash(
  361.                                     'error',
  362.                                     'No se han ingresados articulos al prestamo'
  363.                                 );
  364.                 return $this->redirectToRoute('app_movimientos_item_movimiento_new', ['id' => $movimiento->getId()], Response::HTTP_SEE_OTHER); 
  365.             }
  366.         }
  367.         if ($movimiento->isYaProcesada())
  368.         {
  369.             if ($request->isXmlHttpRequest())
  370.             {
  371.                 return new JsonResponse(['ok' => false'msg' => 'El prestamo ya ha sido ejecutada']);
  372.             }
  373.             else
  374.             {
  375.                 $this->addFlash(
  376.                                     'error',
  377.                                     'El prestamo ya ha sido ejecutada'
  378.                                 );
  379.                 return $this->redirectToRoute('app_movimientos_item_movimiento_new', ['id' => $movimiento->getId()], Response::HTTP_SEE_OTHER); 
  380.             }
  381.             
  382.         }
  383.         $cacheArticulos = array();
  384.         $origen $movimiento->getDeposito();
  385.         $em $this->getDoctrine()->getManager();
  386.         $repository $em->getRepository(ArticuloDeposito::class);
  387.         foreach ($movimiento->getItems() as $v
  388.         {
  389.             $articulo $v->getArticulo();
  390.             $finders $this->findArticuloDepositoInCache($cacheArticulos$articulo$origen);
  391.             $cacheArticulos $finders[1];
  392.             $artDepo $finders[0];
  393.             if (!$artDepo)
  394.             {
  395.                 $artDepo $repository->findArticuloDeposito($articulo$origen);
  396.                 if (!$artDepo)
  397.                 {
  398.                     $artDepo = new ArticuloDeposito();
  399.                     $artDepo->setArticulo($articulo)
  400.                             ->setDeposito($origen);
  401.                     $em->persist($artDepo);                            
  402.                 }
  403.             }
  404.             $artDepo->setStock($artDepo->getStock() - $v->getCantidad());
  405.             $cacheArticulos[uniqid()] = $artDepo;                    
  406.                             
  407.         }
  408.         $movimiento->setYaProcesada(true);
  409.         $em->flush();
  410.         if ($request->isXmlHttpRequest())
  411.         {
  412.             return new JsonResponse(['ok' => true]);
  413.         }
  414.         $this->addFlash(
  415.                             'success',
  416.                             'Transferencia procesada exitosamente'
  417.                         );
  418.         return $this->redirectToRoute('app_movimientos_prestamo_herramienta_index'); 
  419.         
  420.     }
  421.     /**
  422.      * @Route("/{id}/procesar/orden/re", name="app_movimientos_item_movimiento_orden_reparacion_externa", methods={"GET", "POST"})
  423.      */
  424.     public function procesarOrdenReparacionExterna(MovimientoStock $movimientoRequest $request): Response
  425.     {
  426.         if (!$movimiento->getItems()->count())
  427.         {
  428.             if ($request->isXmlHttpRequest())
  429.             {
  430.                 return new JsonResponse(['ok' => false'msg' => 'No se han ingresados articulos a la orden']);
  431.             }
  432.             else
  433.             {
  434.                 $this->addFlash(
  435.                                     'error',
  436.                                     'No se han ingresados articulos a la orden'
  437.                                 );
  438.                 return $this->redirectToRoute('app_movimientos_item_movimiento_new', ['id' => $movimiento->getId()], Response::HTTP_SEE_OTHER); 
  439.             }
  440.         }
  441.         if ($movimiento->isYaProcesada())
  442.         {
  443.             if ($request->isXmlHttpRequest())
  444.             {
  445.                 return new JsonResponse(['ok' => false'msg' => 'La orden ya ha sido ejecutada']);
  446.             }
  447.             else
  448.             {
  449.                 $this->addFlash(
  450.                                     'error',
  451.                                     'La orden ya ha sido ejecutada'
  452.                                 );
  453.                 return $this->redirectToRoute('app_movimientos_item_movimiento_new', ['id' => $movimiento->getId()], Response::HTTP_SEE_OTHER); 
  454.             }
  455.             
  456.         }
  457.         $cacheArticulos = array();
  458.         $origen $movimiento->getDeposito();
  459.         $em $this->getDoctrine()->getManager();
  460.         $repository $em->getRepository(ArticuloDeposito::class);
  461.         foreach ($movimiento->getItems() as $v
  462.         {
  463.             $articulo $v->getArticulo();
  464.             $finders $this->findArticuloDepositoInCache($cacheArticulos$articulo$origen);
  465.             $cacheArticulos $finders[1];
  466.             $artDepo $finders[0];
  467.             if (!$artDepo)
  468.             {
  469.                 $artDepo $repository->findArticuloDeposito($articulo$origen);
  470.                 if (!$artDepo)
  471.                 {
  472.                     $artDepo = new ArticuloDeposito();
  473.                     $artDepo->setArticulo($articulo)
  474.                             ->setDeposito($origen);
  475.                     $em->persist($artDepo);                            
  476.                 }
  477.             }
  478.             $artDepo->setStock($artDepo->getStock() - $v->getCantidad());
  479.             $cacheArticulos[uniqid()] = $artDepo;                    
  480.                             
  481.         }
  482.         $movimiento->setYaProcesada(true);
  483.         $em->flush();
  484.         if ($request->isXmlHttpRequest())
  485.         {
  486.             return new JsonResponse(['ok' => true]);
  487.         }
  488.         $this->addFlash(
  489.                             'success',
  490.                             'Orden reparacion procesada exitosamente'
  491.                         );
  492.         return $this->redirectToRoute('app_movimientos_orden_reparacion_externa_index'); 
  493.         
  494.     }
  495.     /**
  496.      * @Route("/{id}/procesar/orden/reparacion", name="app_movimientos_item_movimiento_procesar_orden_reparacion", methods={"GET", "POST"})
  497.      */
  498.     public function procesarOrdenReparacion(MovimientoStock $movimientoRequest $request): Response
  499.     {
  500.         if (!$movimiento->getItems()->count())
  501.         {
  502.             if ($request->isXmlHttpRequest())
  503.             {
  504.                 return new JsonResponse(['ok' => false'msg' => 'No se han ingresados articulos a la orden de reparacion']);
  505.             }
  506.             else
  507.             {
  508.                 $this->addFlash(
  509.                                     'error',
  510.                                     'No se han ingresados articulos a la orden de reparacion'
  511.                                 );
  512.                 return $this->redirectToRoute('app_movimientos_item_movimiento_new', ['id' => $movimiento->getId()], Response::HTTP_SEE_OTHER); 
  513.             }
  514.         }
  515.         if ($movimiento->isYaProcesada())
  516.         {
  517.             if ($request->isXmlHttpRequest())
  518.             {
  519.                 return new JsonResponse(['ok' => false'msg' => 'La orden de reparacion ya ha sido ejecutada']);
  520.             }
  521.             else
  522.             {
  523.                 $this->addFlash(
  524.                                     'error',
  525.                                     'La orden de reparacion ya ha sido ejecutada'
  526.                                 );
  527.                 return $this->redirectToRoute('app_movimientos_item_movimiento_new', ['id' => $movimiento->getId()], Response::HTTP_SEE_OTHER); 
  528.             }
  529.             
  530.         }
  531.         $cacheArticulos = array();
  532.         $origen $movimiento->getDeposito();
  533.         $em $this->getDoctrine()->getManager();
  534.         $repository $em->getRepository(ArticuloDeposito::class);
  535.         foreach ($movimiento->getItems() as $v
  536.         {
  537.             $articulo $v->getArticulo();
  538.             $finders $this->findArticuloDepositoInCache($cacheArticulos$articulo$origen);
  539.             $cacheArticulos $finders[1];
  540.             $artDepo $finders[0];
  541.             if (!$artDepo)
  542.             {
  543.                 $artDepo $repository->findArticuloDeposito($articulo$origen);
  544.                 if (!$artDepo)
  545.                 {
  546.                     $artDepo = new ArticuloDeposito();
  547.                     $artDepo->setArticulo($articulo)
  548.                             ->setDeposito($origen);
  549.                     $em->persist($artDepo);                            
  550.                 }
  551.             }
  552.             $artDepo->setStock($artDepo->getStock() - $v->getCantidad());
  553.             $cacheArticulos[uniqid()] = $artDepo;                    
  554.                             
  555.         }
  556.         $movimiento->setYaProcesada(true);
  557.         $em->flush();
  558.         if ($request->isXmlHttpRequest())
  559.         {
  560.             return new JsonResponse(['ok' => true]);
  561.         }
  562.         $this->addFlash(
  563.                             'success',
  564.                             'Orden reparacion procesada exitosamente'
  565.                         );
  566.         return $this->redirectToRoute('app_movimientos_orden_reparacion_index'); 
  567.         
  568.     }
  569.  /**
  570.      * @Route("/{id}/procesar/oc", name="app_movimientos_item_movimiento_procesar_oc", methods={"GET", "POST"})
  571.      */
  572.     public function procesarOrdenCompra(MovimientoStock $movimientoRequest $request): Response
  573.     {
  574.         if (!$movimiento->getItems()->count())
  575.         {
  576.             if ($request->isXmlHttpRequest())
  577.             {
  578.                 return new JsonResponse(['ok' => false'msg' => 'No se han ingresados articulos a la orden de compra']);
  579.             }
  580.             else
  581.             {
  582.                 $this->addFlash(
  583.                                     'error',
  584.                                     'No se han ingresados articulos a la orden de compra'
  585.                                 );
  586.                 return $this->redirectToRoute('app_movimientos_item_movimiento_new', ['id' => $movimiento->getId()], Response::HTTP_SEE_OTHER); 
  587.             }
  588.         }
  589.         if ($movimiento->isYaProcesada())
  590.         {
  591.             if ($request->isXmlHttpRequest())
  592.             {
  593.                 return new JsonResponse(['ok' => false'msg' => 'La ordende compra ya ha sido ejecutada']);
  594.             }
  595.             else
  596.             {
  597.                 $this->addFlash(
  598.                                     'error',
  599.                                     'La orden de compra ya ha sido ejecutada'
  600.                                 );
  601.                 return $this->redirectToRoute('app_movimientos_item_movimiento_new', ['id' => $movimiento->getId()], Response::HTTP_SEE_OTHER); 
  602.             }
  603.             
  604.         }
  605.         $cacheArticulos = array();
  606.         $origen $movimiento->getDeposito();
  607.         $em $this->getDoctrine()->getManager();
  608.         $repository $em->getRepository(ArticuloDeposito::class);
  609.        /* foreach ($movimiento->getItems() as $v) 
  610.         {
  611.             $articulo = $v->getArticulo();
  612.             $finders = $this->findArticuloDepositoInCache($cacheArticulos, $articulo, $origen);
  613.             $cacheArticulos = $finders[1];
  614.             $artDepo = $finders[0];
  615.             if (!$artDepo)
  616.             {
  617.                 $artDepo = $repository->findArticuloDeposito($articulo, $origen);
  618.                 if (!$artDepo)
  619.                 {
  620.                     $artDepo = new ArticuloDeposito();
  621.                     $artDepo->setArticulo($articulo)
  622.                             ->setDeposito($origen);
  623.                     $em->persist($artDepo);                            
  624.                 }
  625.             }
  626.           //  $artDepo->setStock($artDepo->getStock() + $v->getCantidad());
  627.             $cacheArticulos[uniqid()] = $artDepo;                    
  628.                             
  629.         }*/
  630.         //$movimiento->setYaProcesada(true);
  631.         $em->flush();
  632.         if ($request->isXmlHttpRequest())
  633.         {
  634.             return new JsonResponse(['ok' => true]);
  635.         }
  636.         $this->addFlash(
  637.                             'success',
  638.                             'Orden compra procesada exitosamente'
  639.                         );
  640.         return $this->redirectToRoute('app_movimientos_orden_compra_index'); 
  641.         
  642.     }
  643.  /**
  644.      * @Route("/{id}/procesar/ajuste/stock", name="app_movimientos_item_movimiento_procesar_ajuste", methods={"GET", "POST"})
  645.      */
  646.     public function procesarAjusteStock(MovimientoStock $movimientoRequest $request): Response
  647.     {
  648.         if (!$movimiento->getItems()->count())
  649.         {
  650.             if ($request->isXmlHttpRequest())
  651.             {
  652.                 return new JsonResponse(['ok' => false'msg' => 'No se han ingresados articulos al ajuste']);
  653.             }
  654.             else
  655.             {
  656.                 $this->addFlash(
  657.                                     'error',
  658.                                     'No se han ingresados articulos al ajuste'
  659.                                 );
  660.                 return $this->redirectToRoute('app_movimientos_item_movimiento_new', ['id' => $movimiento->getId()], Response::HTTP_SEE_OTHER); 
  661.             }
  662.         }
  663.         if ($movimiento->isYaProcesada())
  664.         {
  665.             if ($request->isXmlHttpRequest())
  666.             {
  667.                 return new JsonResponse(['ok' => false'msg' => 'El ajuste ya ha sido ejecutado']);
  668.             }
  669.             else
  670.             {
  671.                 $this->addFlash(
  672.                                     'error',
  673.                                     'El ajuste ya ha sido ejecutado'
  674.                                 );
  675.                 return $this->redirectToRoute('app_movimientos_item_movimiento_new', ['id' => $movimiento->getId()], Response::HTTP_SEE_OTHER); 
  676.             }
  677.             
  678.         }
  679.         $cacheArticulos = array();
  680.         $origen $movimiento->getDeposito();
  681.         $em $this->getDoctrine()->getManager();
  682.         $repository $em->getRepository(ArticuloDeposito::class);
  683.         foreach ($movimiento->getItems() as $v
  684.         {
  685.             $articulo $v->getArticulo();
  686.             $finders $this->findArticuloDepositoInCache($cacheArticulos$articulo$origen);
  687.             $cacheArticulos $finders[1];
  688.             $artDepo $finders[0];
  689.             if (!$artDepo)
  690.             {
  691.                 $artDepo $repository->findArticuloDeposito($articulo$origen);
  692.                 if (!$artDepo)
  693.                 {
  694.                     $artDepo = new ArticuloDeposito();
  695.                     $artDepo->setArticulo($articulo)
  696.                             ->setDeposito($origen);
  697.                     $em->persist($artDepo);                            
  698.                 }
  699.             }
  700.             
  701.             if ($movimiento->getTipo() == 'IN')
  702.             {
  703.                 $artDepo->updateStock($v->getCantidad());
  704.              //   throw new \LogicException("" . $artDepo->getArticulo());
  705.             }
  706.             else
  707.             {
  708.                 $artDepo->updateStock(((-1)*$v->getCantidad()));
  709.             }
  710.             $cacheArticulos[uniqid()] = $artDepo;                    
  711.                             
  712.         }
  713.         $movimiento->setYaProcesada(true)
  714.                     ->setDeposito($origen)
  715.                     ->setIsDevuelta(true, new \DateTime());
  716.         $em->flush();
  717.         if ($request->isXmlHttpRequest())
  718.         {
  719.             return new JsonResponse(['ok' => true]);
  720.         }
  721.         $this->addFlash(
  722.                             'success',
  723.                             'Ajuste stock procesado exitosamente'
  724.                         );
  725.         return $this->redirectToRoute('app_movimientos_ajuste_stock_index'); 
  726.         
  727.     }
  728.     private function findArticuloDepositoInCache($array$articulo$deposito)
  729.     {
  730.         $element $key null;
  731.         foreach ($array as $k => $ad)
  732.         {
  733.             if (($ad->getDeposito() === $deposito) && ($ad->getArticulo() === $articulo))
  734.             {
  735.                 $element $ad;
  736.                 $key $k;
  737.             }
  738.         }
  739.         if ($key && $element)
  740.         {
  741.             unset($array[$key]);
  742.         }
  743.         return array($element$array);
  744.     }
  745.     /**
  746.      * @Route("/{id}/ingresar", name="app_movimientos_item_movimiento_ingresar", methods={"GET", "POST"})
  747.      */
  748.     public function ingresar(MovimientoStock $movimientoRequest $requestEntityManagerInterface $em): Response
  749.     {
  750.     
  751.         $type $movimiento->getInstance();
  752.         $path $pathsend $title null;
  753.         switch ($type
  754.         {
  755.             case "tr":
  756.                 $path "app_movimientos_transferencia_index"
  757.                 $pathsend="app_movimientos_item_movimiento_procesar_transferencia";
  758.                 break;
  759.             case "oc":
  760.                 $path "app_movimientos_orden_compra_index";
  761.                 break;
  762.             case "ph":
  763.                 $path "app_movimientos_prestamo_herramienta_index";
  764.                 $pathsend="app_movimientos_item_movimiento_procesar_prestamo";
  765.                 break;
  766.             case "or":
  767.                 $path "app_movimientos_orden_reparacion_index";
  768.                 break;
  769.             case "ore":
  770.                 $path "app_movimientos_orden_reparacion_externa_index";
  771.                 $pathsend"app_movimientos_item_movimiento_orden_reparacion_externa";
  772.                 break;
  773.         }
  774.         
  775.         $descripciones $em->getRepository(Descripcion::class)->findBy(['activo' => true], ['nombre' => 'ASC']);
  776.         $depositos $this->getDoctrine()->getManager()->getRepository(Deposito::class)->findAll();
  777.             //return $this->redirectToRoute('app_movimientos_item_movimiento_index', [], Response::HTTP_SEE_OTHER);
  778.         return $this->renderForm('movimientos/item_movimiento/ingresar.html.twig', [
  779.             'movimiento' => $movimiento,
  780.             'depositos' => $depositos,
  781.             'path' => $path,
  782.             'tipo' => $type,
  783.             'descripciones' => $descripciones,
  784.         ]);
  785.     }
  786.     /**
  787.      * @Route("/{id}", name="app_movimientos_item_movimiento_show", methods={"GET"})
  788.      */
  789.     public function show(ItemMovimiento $itemMovimiento): Response
  790.     {
  791.         return $this->render('movimientos/item_movimiento/show.html.twig', [
  792.             'item_movimiento' => $itemMovimiento,
  793.         ]);
  794.     }
  795.     /**
  796.      * @Route("/{id}/edit", name="app_movimientos_item_movimiento_edit", methods={"GET", "POST"})
  797.      */
  798.     public function edit(Request $requestItemMovimiento $itemMovimientoItemMovimientoRepository $itemMovimientoRepository): Response
  799.     {
  800.         $form $this->createForm(ItemMovimientoType::class, $itemMovimiento, ['user' => $this->getUser()]);
  801.         $form->handleRequest($request);
  802.         if ($form->isSubmitted() && $form->isValid()) {
  803.             $itemMovimientoRepository->add($itemMovimientotrue);
  804.             return $this->redirectToRoute('app_movimientos_item_movimiento_index', [], Response::HTTP_SEE_OTHER);
  805.         }
  806.         return $this->renderForm('movimientos/item_movimiento/edit.html.twig', [
  807.             'item_movimiento' => $itemMovimiento,
  808.             'form' => $form,
  809.         ]);
  810.     }
  811.     /**
  812.      * @Route("/{id}/delete", name="app_movimientos_item_movimiento_delete", methods={"POST"})
  813.      */
  814.     public function delete(Request $requestItemMovimiento $itemMovimientoItemMovimientoRepository $itemMovimientoRepository): Response
  815.     {
  816.         try
  817.         {
  818.             $movimiento $itemMovimiento->getMovimiento();
  819.             if (!$movimiento->isModificable())
  820.             {
  821.                 return new JsonResponse(['ok' => false'msg' => 'No es posible modificar el documento']);   
  822.             }
  823.             $itemMovimientoRepository->remove($itemMovimientotrue);
  824.             return new JsonResponse(['ok' => true]);
  825.         }
  826.         catch (\Exception $e)
  827.         {
  828.             return new JsonResponse(['ok' => false'msg' => $e->getMessage()]);
  829.         }
  830.     }
  831. }