src/Controller/Movimientos/MovimientoStockController.php line 97

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Movimientos;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Doctrine\ORM\EntityRepository;
  8. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  9. use App\Entity\Almacen\Articulo;
  10. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  11. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  12. use App\Entity\Almacen\Deposito;
  13. use App\Entity\Movimientos\MovimientoStock;
  14. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  15. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  16. /**
  17.  * @IsGranted("IS_AUTHENTICATED_FULLY")
  18. **/
  19. class MovimientoStockController extends AbstractController
  20. {
  21.     private function getFormSelect()
  22.     {
  23.         return $this->createFormBuilder()
  24.                      ->add('articulo', 
  25.                            EntityType::class, 
  26.                            [
  27.                                 'class' => Articulo::class,
  28.                                 'query_builder' => function (EntityRepository $er) {
  29.                                                                                         return $er->createQueryBuilder('u')
  30.                                                                                                   ->andWhere('u.activo = :activo')
  31.                                                                                                   ->setParameter('activo', true)
  32.                                                                                                   ->orderBy('u.descripcion', 'ASC');
  33.                                                                                     }
  34.                             ])
  35.                     ->add('deposito', EntityType::class, 
  36.                                 [
  37.                                     'class' => Deposito::class,
  38.                                 ]
  39.                             )
  40.                     ->add('cargar', SubmitType::class)
  41.                      ->getForm();
  42.     }
  43.     private function getFormInicioMovimiento(AuthorizationCheckerInterface $authorizationChecker)
  44.     {
  45.         $movimientos = array();
  46.         if ($authorizationChecker->isGranted('ROLE_ADMIN_MOVIMIENTOS'))
  47.         {
  48.             $movimientos['Ajuste de Stock'] = 'as';
  49.         }
  50.         $movimientos = array_merge($movimientos, array(
  51.                                                                     'Orden Compra' => 'oc',
  52.                                                                     'Orden Reparacion Interna' => 'or',
  53.                                                                     'Orden Reparacion Externa' => 'ore',
  54.                                                                     'Prestamo de Herramientas' => 'ph',
  55.                                                                     'Remito de Entrega' => 're',
  56.                                                                     'Transferencia de Stock' => 'tr'                                  
  57.                                                                 ));
  58.         $form = $this->createFormBuilder()
  59.                     ->add('tipo', 
  60.                             ChoiceType::class, [
  61.                                                 'choices'  => $movimientos,
  62.                                                 ]
  63.                     )->add('next', 
  64.                             SubmitType::class, [
  65.                                 'attr' => ['class' => 'btn btn-success', 'label' => 'Siguiente >>'],
  66.                             ])
  67.                     ->getForm();
  68.         return $form;
  69.     }
  70.     /**
  71.      * @Route("/movimientos/movimiento/stock", name="app_movimientos_movimiento_stock")
  72.      */
  73.     public function index(Request $request, AuthorizationCheckerInterface $authorizationChecker): Response
  74.     {
  75.         $form = $this->getFormInicioMovimiento($authorizationChecker);
  76.         if ($request->isMethod('POST'))
  77.         {
  78.             $form->handleRequest($request);
  79.             $data = $form->getData();
  80.             $tipo = $data['tipo'];
  81.             switch ($tipo) {
  82.                 case "oc":
  83.                     return $this->redirectToRoute('app_movimientos_orden_compra_new', [], Response::HTTP_SEE_OTHER);
  84.                     break;
  85.                 case "tr":
  86.                     return $this->redirectToRoute('app_movimientos_transferencia_new', [], Response::HTTP_SEE_OTHER);
  87.                     break;
  88.                 case "or":
  89.                     return $this->redirectToRoute('app_movimientos_orden_reparacion_new', [], Response::HTTP_SEE_OTHER);
  90.                     break;
  91.                 case "ph":
  92.                     return $this->redirectToRoute('app_movimientos_prestamo_herramienta_new', [], Response::HTTP_SEE_OTHER);
  93.                     break;
  94.                 case "as":
  95.                     if ($authorizationChecker->isGranted('ROLE_ADMIN_MOVIMIENTOS'))
  96.                     {
  97.                         return $this->redirectToRoute('app_movimientos_ajuste_stock_new', [], Response::HTTP_SEE_OTHER);
  98.                     }
  99.                     break;
  100.                 case "ore":
  101.                     return $this->redirectToRoute('app_movimientos_orden_reparacion_externa_new', [], Response::HTTP_SEE_OTHER);
  102.                     break;
  103.                 case "re":
  104.                     return $this->redirectToRoute('app_movimientos_remito_entrega_new', [], Response::HTTP_SEE_OTHER);
  105.                     break;
  106.             }
  107.         }
  108.         return $this->render('movimientos/movimiento_stock/index.html.twig', 
  109.                              [
  110.                                 'controller_name' => 'MovimientoStockController',
  111.                                 'form' => $form->createView(),
  112.                              ]);
  113.     }
  114.     /**
  115.      * @Route("/movimientos/detalle", name="app_movimientos_detalle")
  116.      */
  117.     public function movimientos(Request $request): Response
  118.     {
  119.         $form = $this->getFormSelect();
  120.         if ($request->isMethod('POST'))
  121.         {
  122.             $form->handleRequest($request);
  123.             $em = $this->getDoctrine()->getManager();
  124.             $repository = $em->getRepository(MovimientoStock::class);
  125.             $data = $form->getData();
  126.             $articulo = $data['articulo'];
  127.             $deposito = $data['deposito'];
  128.             $movimientos = $repository->getAllMovimientos($deposito, $articulo);
  129.             $detalle = array();
  130.             foreach ($movimientos as $m)
  131.             {
  132.                 $artics = $m->getArticulo($articulo);
  133.                 foreach ($artics as $a)
  134.                 {
  135.                     $detalle[] = array($m->getNumero(), $m->getFecha(),    
  136.                                        $m->getDescripcion(), $m->getDeposito(), 
  137.                                        $m->getDestino(), $m->getResponsable(), $a);
  138.                 }
  139.                 
  140.             }
  141.         return $this->render('movimientos/movimiento_stock/rsumen.html.twig', 
  142.                              [
  143.                                 'form' => $form->createView(),
  144.                                 'detalle' => $detalle
  145.                              ]);
  146.         }
  147.         return $this->render('movimientos/movimiento_stock/rsumen.html.twig', 
  148.                              [
  149.                                 'form' => $form->createView(),
  150.                              ]);
  151.     }
  152. }