src/Controller/Movimientos/ItemMovimientoController.php line 539

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