<?php
namespace App\Controller\Movimientos;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\ORM\EntityRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use App\Entity\Almacen\Articulo;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use App\Entity\Almacen\Deposito;
use App\Entity\Movimientos\MovimientoStock;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
/**
* @IsGranted("IS_AUTHENTICATED_FULLY")
**/
class MovimientoStockController extends AbstractController
{
private function getFormSelect()
{
return $this->createFormBuilder()
->add('articulo',
EntityType::class,
[
'class' => Articulo::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u')
->andWhere('u.activo = :activo')
->setParameter('activo', true)
->orderBy('u.descripcion', 'ASC');
}
])
->add('deposito', EntityType::class,
[
'class' => Deposito::class,
]
)
->add('cargar', SubmitType::class)
->getForm();
}
private function getFormInicioMovimiento(AuthorizationCheckerInterface $authorizationChecker)
{
$movimientos = array();
if ($authorizationChecker->isGranted('ROLE_ADMIN_MOVIMIENTOS'))
{
$movimientos['Ajuste de Stock'] = 'as';
}
$movimientos = array_merge($movimientos, array(
'Orden Compra' => 'oc',
'Orden Reparacion Interna' => 'or',
'Orden Reparacion Externa' => 'ore',
'Prestamo de Herramientas' => 'ph',
'Transferencia de Stock' => 'tr'
));
$form = $this->createFormBuilder()
->add('tipo',
ChoiceType::class, [
'choices' => $movimientos,
]
)->add('next',
SubmitType::class, [
'attr' => ['class' => 'btn btn-success', 'label' => 'Siguiente >>'],
])
->getForm();
return $form;
}
/**
* @Route("/movimientos/movimiento/stock", name="app_movimientos_movimiento_stock")
*/
public function index(Request $request, AuthorizationCheckerInterface $authorizationChecker): Response
{
$form = $this->getFormInicioMovimiento($authorizationChecker);
if ($request->isMethod('POST'))
{
$form->handleRequest($request);
$data = $form->getData();
$tipo = $data['tipo'];
switch ($tipo) {
case "oc":
return $this->redirectToRoute('app_movimientos_orden_compra_new', [], Response::HTTP_SEE_OTHER);
break;
case "tr":
return $this->redirectToRoute('app_movimientos_transferencia_new', [], Response::HTTP_SEE_OTHER);
break;
case "or":
return $this->redirectToRoute('app_movimientos_orden_reparacion_new', [], Response::HTTP_SEE_OTHER);
break;
case "ph":
return $this->redirectToRoute('app_movimientos_prestamo_herramienta_new', [], Response::HTTP_SEE_OTHER);
break;
case "as":
if ($authorizationChecker->isGranted('ROLE_ADMIN_MOVIMIENTOS'))
{
return $this->redirectToRoute('app_movimientos_ajuste_stock_new', [], Response::HTTP_SEE_OTHER);
}
break;
case "ore":
return $this->redirectToRoute('app_movimientos_orden_reparacion_externa_new', [], Response::HTTP_SEE_OTHER);
break;
}
}
return $this->render('movimientos/movimiento_stock/index.html.twig',
[
'controller_name' => 'MovimientoStockController',
'form' => $form->createView(),
]);
}
/**
* @Route("/movimientos/detalle", name="app_movimientos_detalle")
*/
public function movimientos(Request $request): Response
{
$form = $this->getFormSelect();
if ($request->isMethod('POST'))
{
$form->handleRequest($request);
$em = $this->getDoctrine()->getManager();
$repository = $em->getRepository(MovimientoStock::class);
$data = $form->getData();
$articulo = $data['articulo'];
$deposito = $data['deposito'];
$movimientos = $repository->getAllMovimientos($deposito, $articulo);
$detalle = array();
foreach ($movimientos as $m)
{
$artics = $m->getArticulo($articulo);
foreach ($artics as $a)
{
$detalle[] = array($m->getNumero(), $m->getFecha(),
$m->getDescripcion(), $m->getDeposito(),
$m->getDestino(), $m->getResponsable(), $a);
}
}
return $this->render('movimientos/movimiento_stock/rsumen.html.twig',
[
'form' => $form->createView(),
'detalle' => $detalle
]);
}
return $this->render('movimientos/movimiento_stock/rsumen.html.twig',
[
'form' => $form->createView(),
]);
}
}