src/Controller/Movimientos/ItemMovimientoController.php line 35

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