<?php
namespace App\Controller;
use App\Entity\Red;
use App\Entity\Otro;
use App\Entity\Equipo;
use App\Entity\Impresora;
use App\Entity\Periodo;
use App\Entity\Solicitud;
use App\Entity\Ubicacion;
use App\Entity\Usuario;
use App\Form\PAMPFiltroType;
use App\Form\SolicitudType;
use App\Repository\SolicitudRepository;
use DateTime;
use Doctrine\DBAL\Exception;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
#[Route('/programacion/preventivo')]
class ProgManttoPreventivoController extends AbstractController
{
public EntityManagerInterface $entityManager;
/**
* @param EntityManagerInterface $entityManager
*/
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
#[Route('/', name: 'prog_preventivo_index')]
public function index(Request $request): Response
{
/** @var Usuario $user */
$user = $this->getUser();
$perfil = $request->getSession()->get('perfil');
$nivel = $perfil[8]['nivel'];
if ($nivel == 0) {
$this->addFlash('danger', 'El acceso al módulo de "Programación de Mantenimiento Preventivo" está restringido.');
return $this->redirectToRoute('homepage');
}
$equipo = $this->entityManager->getRepository(Equipo::class)->findBy([
'unidad' => $user->getUnidad()->getIdUni()
]);
$red = $this->entityManager->getRepository(Red::class)->findBy([
'unidad' => $user->getUnidad()->getIdUni()
]);
$impresora = $this->entityManager->getRepository(Impresora::class)->findBy([
'unidad' => $user->getUnidad()->getIdUni()
]);
$otro = $this->entityManager->getRepository(Otro::class)->findBy([
'unidad' => $user->getUnidad()->getIdUni()
]);
$solicitud = $this->entityManager->getRepository(Solicitud::class)->findBy([
'unidad' => $user->getUnidad()->getIdUni()
]);
$cTodoEquipo = $this->vistaContador();
$form = $this->createFormBuilder()
->add('ubicacion', EntityType::class, [
'class' => Ubicacion::class,
'attr' => ['class' => 'form-control'],
'placeholder' => 'Todo',
'query_builder' => function (EntityRepository $er) use ($user) {
return $er->createQueryBuilder('u')
->where('u.unidad = :unidad')
->andWhere('u.activo = :estatus')
->orderBy('u.area', 'ASC')
->setParameter('unidad', $user->getUnidad()->getIdUni())
->setParameter('estatus', 1)
;
}
])
->getForm();
$form->handleRequest($request);
if ($request->isMethod('POST')) {
if (empty($form['ubicacion']->getData())) {
$equipos = $this->entityManager->getRepository(Equipo::class)->findBy([
'unidad' => $user->getUnidad()->getIdUni()
]);
$impresoras = $this->entityManager->getRepository(Impresora::class)->findBy([
'unidad' => $user->getUnidad()->getIdUni()
]);
$redes = $this->entityManager->getRepository(Red::class)->findBy([
'unidad' => $user->getUnidad()->getIdUni()
]);
$otros = $this->entityManager->getRepository(Otro::class)->findBy([
'unidad' => $user->getUnidad()->getIdUni()
]);
} else {
$equipos = $this->entityManager->getRepository(Equipo::class)->findBy([
'unidad' => $user->getUnidad()->getIdUni(),
'ubicacion' => $form['ubicacion']->getData()
]);
$impresoras = $this->entityManager->getRepository(Impresora::class)->findBy([
'unidad' => $user->getUnidad()->getIdUni(),
'ubicacion' => $form['ubicacion']->getData()
]);
$redes = $this->entityManager->getRepository(Red::class)->findBy([
'unidad' => $user->getUnidad()->getIdUni(),
'ubicacion' => $form['ubicacion']->getData()
]);
$otros = $this->entityManager->getRepository(Otro::class)->findBy([
'unidad' => $user->getUnidad()->getIdUni(),
'ubicacion' => $form['ubicacion']->getData()
]);
}
$data = [];
foreach ($equipos as $e){
$newUrl = $this->generateUrl('prog_preventivo_solicitud_tipoa', ['id' => $e->getIdEqu()], UrlGeneratorInterface::ABSOLUTE_URL);
$viewUrl = $this->generateUrl('prog_preventivo_programada_tipoa', ['id' => $e->getIdEqu()], UrlGeneratorInterface::ABSOLUTE_URL);
$data[] = [
'tipo' => 'Equipo',
'id' => $e->getIdEqu(),
'marbete' => $e->getMarbete(),
'descripcion' => $e->getDescripcion(),
'marca' => $e->getMarca(),
'ubicacion' => substr($e->getUnidad()->getIdUni(), 3, 3) . " - " . $e->getUbicacion()->getArea(),
'usuario' => $e->getUsuario()->getNombre() . " " . $e->getUsuario()->getPapellido() . " " . $e->getUsuario()->getSapellido(),
'mpe' => 'Por hacer',
'nuevo' => $newUrl,
'ver' => $viewUrl
];
}
foreach ($impresoras as $e){
$newUrl = $this->generateUrl('prog_preventivo_solicitud_tipob', ['id' => $e->getIdImp()], UrlGeneratorInterface::ABSOLUTE_URL);
$viewUrl = $this->generateUrl('prog_preventivo_programada_tipob', ['id' => $e->getIdImp()], UrlGeneratorInterface::ABSOLUTE_URL);
$data[] = [
'tipo' => 'Impresora',
'id' => $e->getIdImp(),
'marbete' => $e->getMarbete(),
'descripcion' => $e->getDescripcion(),
'marca' => $e->getMarca(),
'ubicacion' => substr($e->getUnidad()->getIdUni(), 3, 3) . " - " . $e->getUbicacion()->getArea(),
'usuario' => $e->getUsuario()->getNombre() . " " . $e->getUsuario()->getPapellido() . " " . $e->getUsuario()->getSapellido(),
'mpe' => 'Por hacer',
'nuevo' => $newUrl,
'ver' => $viewUrl
];
}
foreach ($redes as $e){
$newUrl = $this->generateUrl('prog_preventivo_solicitud_tipoc', ['id' => $e->getIdRed()], UrlGeneratorInterface::ABSOLUTE_URL);
$viewUrl = $this->generateUrl('prog_preventivo_programada_tipoc', ['id' => $e->getIdRed()], UrlGeneratorInterface::ABSOLUTE_URL);
$data[] = [
'tipo' => 'Red',
'id' => $e->getIdRed(),
'marbete' => $e->getMarbete(),
'descripcion' => $e->getDescripcion(),
'marca' => $e->getMarca(),
'ubicacion' => substr($e->getUnidad()->getIdUni(), 3, 3) . " - " . $e->getUbicacion()->getArea(),
'usuario' => $e->getUsuario()->getNombre() . " " . $e->getUsuario()->getPapellido() . " " . $e->getUsuario()->getSapellido(),
'mpe' => 'Por hacer',
'nuevo' => $newUrl,
'ver' => $viewUrl
];
}
foreach ($otros as $e){
$newUrl = $this->generateUrl('prog_preventivo_solicitud_tipod', ['id' => $e->getIdOtro()], UrlGeneratorInterface::ABSOLUTE_URL);
$viewUrl = $this->generateUrl('prog_preventivo_programada_tipod', ['id' => $e->getIdOtro()], UrlGeneratorInterface::ABSOLUTE_URL);
$data[] = [
'tipo' => 'Otro',
'id' => $e->getIdOtro(),
'marbete' => $e->getMarbete(),
'descripcion' => $e->getDescripcion(),
'marca' => $e->getMarca(),
'ubicacion' => substr($e->getUnidad()->getIdUni(), 3, 3) . " - " . $e->getUbicacion()->getArea(),
'usuario' => $e->getUsuario()->getNombre() . " " . $e->getUsuario()->getPapellido() . " " . $e->getUsuario()->getSapellido(),
'mpe' => 'Por hacer',
'nuevo' => $newUrl,
'ver' => $viewUrl
];
}
return new JsonResponse($data, Response::HTTP_OK);
}
return $this->render('prog_preventivo/index.html.twig', [
'equipo' => $equipo,
'red' => $red,
'impresora' => $impresora,
'otro' => $otro,
'cTodoEquipo' => $cTodoEquipo,
'form' => $form->createView()
]);
}
/**
* Programa Anual de Mantenimiento Preventivo
* @throws Exception
*/
#[Route('/pamp', name: 'pamp', methods: ['GET', 'POST'])]
public function pamp(SolicitudRepository $solRep, Request $request): Response
{
# Se obtiene el nivel de acceso
$perfil = $request->getSession()->get('perfil');
$nivel = $perfil[9]["nivel"];
# Si el nivel de acceso es 0 entonces se retorna a página de inicio
if ($nivel == 0) {
$this->addFlash('danger', 'El acceso al "Programa Anual de Mantenimiento Preventivo" está restringido.');
return $this->redirectToRoute('homepage');
}
date_default_timezone_set("America/Mexico_City");
/** @var Usuario $user */
$user = $this->getUser();
$parameters = $request->request->get('pamp_filtro');
if (empty($parameters)) {
$uni = "";
$year = date('Y');
} else {
$uni = (array_key_exists('unidad', $request->request->all()['pamp_filtro'])) ? $parameters['unidad'] : "";
$year = $parameters['anio'];
}
$data = [];
if ($nivel == 2) {
$unidad = true;
$solicitud = $solRep->findByAnioUnidad($year, $uni);
$conteo = $solRep->countByUnidad($uni);
} else {
$unidad = false;
$solicitud = $solRep->findByAnioUnidad($year, $user->getUnidad()->getIdUni());
$conteo = $solRep->countByUnidad($user->getUnidad()->getIdUni());
}
if ($request->isMethod('POST')) {
$response = [];
$cont = 1;
foreach ($solicitud as $i) {
$url = $this->generateUrl('prog_preventivo_reprogramar', ['id' => $i['id_sol']]);
$mesP = date('m', strtotime($i['fatencion']));
$diaP = date('d', strtotime($i['fatencion']));
if (empty($i['fevaluacion'])) {
$mesR = "00";
$diaR = "00";
} else {
$mesR = date('m', strtotime($i['fevaluacion']));
$diaR = date('d', strtotime($i['fevaluacion']));
}
$response[] = [
'n' => $cont,
'id_sol' => $i['id_sol'],
'marbete' => $i['marbete'],
'usuario' => $i['usuario'],
'tipo_equipo' => $i['tipo_equipo'],
'falla' => $i['falla'],
'estatus' => $i['estatus'],
'emhv' => $i['emhv'],
'mesP' => $mesP,
'diaP' => $diaP,
'mesR' => $mesR,
'diaR' => $diaR,
'url' => $url
];
$cont++;
}
return new JsonResponse(['conteo' => $conteo, 'data' => $response], Response::HTTP_OK);
}
#Se construye el formulario
$anios = $solRep->obtenerAnios();
foreach ($anios as $anio) {
$data[$anio[1]] = $anio[1];
}
$form = $this->createForm(PAMPFiltroType::class, null, ['anios' => $data, 'unidad' => $unidad]);
$form->handleRequest($request);
return $this->render('prog_preventivo/pamp.html.twig', [
'solicitud' => $solicitud,
'conteo' => $conteo,
'form' => $form->createView(),
'nivel' => $nivel
]);
}
#[Route('/vista/contador', name: 'prog_preventivo_vista')]
public function vistaContador() :JsonResponse
{
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
'SELECT s.tipoEquipo, s.idEquipo, count(s) AS equipoCont
FROM App:Solicitud s
WHERE s.tipoMantenimiento = :mantenimiento
AND YEAR(s.fatencion) = :anio
GROUP BY s.idEquipo, s.tipoEquipo
'
);
$query->setParameter(':mantenimiento', 'MP');
$query->setParameter(':anio', date('Y'));
$cTodoEquipo = $query->getResult();
return new JsonResponse(['data' => $cTodoEquipo], Response::HTTP_OK);
/*$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
'SELECT s.tipoEquipo, s.idEquipo, count(s) AS equipoCont
FROM App:Solicitud s
WHERE s.tipoMantenimiento = :mantenimiento
GROUP BY s.idEquipo, s.tipoEquipo
'
);
$query->setParameter(':mantenimiento', 'MP');
$cTodoEquipo = $query->getResult();
return new JsonResponse(['data' => $cTodoEquipo], Response::HTTP_OK);*/
}
/**
* Programar solicitudes en relación con los checkbox activos, sin importar el tipo de equipo
* @Route("/solicitud/lote", name="prog_preventivo_solicitud_lote", methods={"GET", "POST"})
* @param Request $request
* @return JsonResponse
*/
public function programarSolicitudLote(Request $request) :JsonResponse
{
$a = (array)$request->request->get('equipo');
$b = (array)$request->request->get('impresora');
$c = (array)$request->request->get('red');
$d = (array)$request->request->get('otro');
$nSolicitud[count($a) + count($b) + count($c) + count($d)][] = [];
$periodo = $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1, 'actual' => 1]);
$accion = $request->request->get('accion');
$fatencion = $request->request->get('fecha');
$fecha = new DateTime($fatencion);
//$currentYear = date("d M Y");
$mensaje = '';
$ns = 0;
$estatus = Response::HTTP_OK;
if ($accion == ""){
$mensaje = 'El campo "Acción a realizar" no debe estar vacío';
$estatus = Response::HTTP_NOT_FOUND;
return new JsonResponse(['mensaje' => $mensaje], $estatus);
}
/*if (substr($fatencion, 0, 4) >= $currentYear){
$mensaje = $mensaje . ' La fecha introducida debe coincidir con el año en curso';
$estatus = Response::HTTP_NOT_FOUND;
return new JsonResponse(['mensaje' => $mensaje], $estatus);
}*/
if ($fatencion == ""){
$mensaje = $mensaje . ' El campo "Fecha de registro" no debe estar vacío';
$estatus = Response::HTTP_NOT_FOUND;
return new JsonResponse(['mensaje' => $mensaje], $estatus);
}
if ($request->request->get('equipo'))
{
$equipos = (array)$request->request->get('equipo');
$limite = count($equipos);
for ($i = 0; $i < $limite; $i++){
$equipo = $this->entityManager->getRepository(Equipo::class)->findOneBy(['idEqu' => $equipos[$i]]);
$data = [
"accion" => $accion,
"fatencion" => $fecha,
"periodo" => $periodo->getIdPrd()
];
$ids = $this->solicitudProgramacionTipoA($equipo, $data);
$reproUrl = $this->generateUrl('prog_preventivo_reprogramar', ['id' => $ids], UrlGeneratorInterface::ABSOLUTE_URL);
$nSolicitud[$ns] = [
'tipoequipo' => 'Equipo',
'idequipo' => $equipo->getIdEqu(),
'fregistro' => $fecha->format('d M Y'),
'tipomantenimiento' => 'MP',
'accion' => $accion,
'unidad' => $equipo->getUnidad()->getNombre(),
'reprogramar' => $reproUrl
];
$ns++;
}
$mensaje = $mensaje . ' Se programarón ' . $limite . ' servicios de mantenimiento a equipos de computo';
}
if ($request->request->get('impresora'))
{
$impresoras = (array)$request->request->get('impresora');
$limite = count($impresoras);
for ($i = 0; $i < $limite; $i++)
{
$impresora = $this->entityManager->getRepository(Impresora::class)->findOneBy(['idImp' => $impresoras[$i]]);
$data = [
"accion" => $accion,
"fatencion" => $fecha,
"periodo" => $periodo->getIdPrd()
];
$ids = $this->solicitudProgramacionTipoB($impresora, $data);
$reproUrl = $this->generateUrl('prog_preventivo_reprogramar', ['id' => $ids], UrlGeneratorInterface::ABSOLUTE_URL);
$nSolicitud[$ns] = [
'tipoequipo' => 'Impresora',
'idequipo' => $impresora->getIdImp(),
'fregistro' => $fecha->format('d M Y'),
'tipomantenimiento' => 'MP',
'accion' => $accion,
'unidad' => $impresora->getUnidad()->getNombre(),
'reprogramar' => $reproUrl
];
$ns++;
}
$mensaje = $mensaje . ' Se programarón ' . $limite . ' servicios de mantenimiento a impresoras';
}
if ($request->request->get('red'))
{
$redes = (array)$request->request->get('red');
$limite = count($redes);
for ($i = 0; $i < $limite; $i++)
{
$red = $this->entityManager->getRepository(Red::class)->findOneBy(['idRed' => $redes[$i]]);
$data = [
"accion" => $accion,
"fatencion" => $fecha,
"periodo" => $periodo->getIdPrd()
];
$ids = $this->solicitudProgramacionTipoC($red, $data);
$reproUrl = $this->generateUrl('prog_preventivo_reprogramar', ['id' => $ids], UrlGeneratorInterface::ABSOLUTE_URL);
$nSolicitud[$ns] = [
'tipoequipo' => 'Red',
'idequipo' => $red->getIdRed(),
'fregistro' => $fecha->format('d M Y'),
'tipomantenimiento' => 'MP',
'accion' => $accion,
'unidad' => $red->getUnidad()->getNombre(),
'reprogramar' => $reproUrl
];
$ns++;
}
$mensaje = $mensaje . ' Se programarón ' . $limite . ' servicios de mantenimiento a equipos de red';
}
if ($request->request->get('otro'))
{
$otros = (array)$request->request->get('otro');
$limite = count($otros);
for ($i = 0; $i < $limite; $i++)
{
$otro = $this->entityManager->getRepository(Otro::class)->findOneBy(['idOtro' => $otros[$i]]);
$data = [
"accion" => $accion,
"fatencion" => $fecha,
"periodo" => $periodo->getIdPrd()
];
$ids = $this->solicitudProgramacionTipoD($otro, $data);
$reproUrl = $this->generateUrl('prog_preventivo_reprogramar', ['id' => $ids], UrlGeneratorInterface::ABSOLUTE_URL);
$nSolicitud[$ns] = [
'tipoequipo' => 'Otro',
'idequipo' => $otro->getIdOtro(),
'fregistro' => $fecha->format('d M Y'),
'tipomantenimiento' => 'MP',
'accion' => $accion,
'unidad' => $otro->getUnidad()->getNombre(),
'reprogramar' => $reproUrl
];
$ns++;
}
$mensaje = $mensaje . ' Se programarón ' . $limite . ' servicios de mantenimiento a otros';
}
return new JsonResponse([
'mensaje' => $mensaje,
'info' => $nSolicitud,
], $estatus);
}
/**
* Programar solicitud por equipo, solo tipo equipo
* @Route("/solicitud/equipo/{id}", name="prog_preventivo_solicitud_tipoa", methods={"GET", "POST"})
* @param Equipo $equipo
* @param Request $request
* @return Response
*/
public function programarSolicitudTipoA(Request $request, Equipo $equipo) :Response
{
$periodo = $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1, 'actual' => 1]);
$info = [
'tipoEquipo' => 'Equipo',
'tipoMantenimiento' => 'Preventivo',
'marbete' => $equipo->getMarbete()
];
$form = $this->createForm(SolicitudType::class);
$form->remove('tipoEquipo');
$form->remove('idEquipo');
$form->remove('periodo');
$form->remove('tipoMantenimiento');
$form->remove('fregistro');
$form->remove('ffin');
$form->remove('fevaluacion');
$form->remove('refacciones');
$form->remove('estatus');
$form->remove('usuario');
$form->remove('ubicacion');
$form->remove('gestor');
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if($form->get('falla')->getData() == "" || $form->get('srealizado')->getData() == "" || $form->get('fatencion')->getData() == ""){
return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
}
$y = $form->get('fatencion')->getData()->format('Y/m/d');
$fecha = new DateTime($y);
$data = [
"accion" => $form->get('falla')->getData(),
"fatencion" => $fecha,
"periodo" => $periodo->getIdPrd()
];
$this->solicitudProgramacionTipoA($equipo, $data);
return new JsonResponse(['mensaje' => 'Se ha programado el mantenimiento para equipo de cómputo']);
}
if ($form->isSubmitted() && !$form->isValid()) {
$view = $this->renderView('prog_solicitud/programar.html.twig', [
'form' => $form->createView(),
'info' => $info
]);
$response = new JsonResponse(['form' => $view]);
$response->setStatusCode(Response::HTTP_BAD_REQUEST);
return $response;
}
return $this->renderForm('prog_solicitud/programar.html.twig', [
'form' => $form,
'info' => $info
]);
}
/**
* Programar solicitud por equipo, solo tipo impresora
* @Route("/solicitud/impresora/{id}", name="prog_preventivo_solicitud_tipob", methods={"GET", "POST"})
* @param Impresora $impresora
* @param Request $request
* @return Response
*/
public function programarSolicitudTipoB(Request $request, Impresora $impresora) :Response
{
$periodo = $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1, 'actual' => 1]);
$info = [
'tipoEquipo' => 'Impresora',
'tipoMantenimiento' => 'Preventivo',
'marbete' => $impresora->getMarbete()
];
$form = $this->createForm(SolicitudType::class);
$form->remove('tipoEquipo');
$form->remove('idEquipo');
$form->remove('periodo');
$form->remove('tipoMantenimiento');
$form->remove('fregistro');
$form->remove('ffin');
$form->remove('fevaluacion');
$form->remove('refacciones');
$form->remove('estatus');
$form->remove('usuario');
$form->remove('ubicacion');
$form->remove('gestor');
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if($form->get('falla')->getData() == "" || $form->get('srealizado')->getData() == "" || $form->get('fatencion')->getData() == null){
return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
}
$y = $form->get('fatencion')->getData()->format('Y/m/d');
$fecha = new DateTime($y);
$data = [
"accion" => $form->get('falla')->getData(),
"fatencion" => $fecha,
"periodo" => $periodo->getIdPrd()
];
$this->solicitudProgramacionTipoB($impresora, $data);
return new JsonResponse(['mensaje' => 'Se ha programado el mantenimiento para impresora']);
}
if ($form->isSubmitted() && !$form->isValid()) {
$view = $this->renderView('prog_solicitud/programar.html.twig', [
'form' => $form->createView(),
'info' => $info
]);
$response = new JsonResponse(['form' => $view]);
$response->setStatusCode(Response::HTTP_BAD_REQUEST);
return $response;
}
return $this->renderForm('prog_solicitud/programar.html.twig', [
'form' => $form,
'info' => $info
]);
}
/**
* Programar solicitud por equipo, solo tipo red
* @Route("/solicitud/red/{id}", name="prog_preventivo_solicitud_tipoc", methods={"GET", "POST"})
* @param Red $red
* @param Request $request
* @return Response
*/
public function programarSolicitudTipoC(Request $request, Red $red) :Response
{
$periodo = $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1, 'actual' => 1]);
$info = [
'tipoEquipo' => 'Red',
'tipoMantenimiento' => 'Preventivo',
'marbete' => $red->getMarbete()
];
$form = $this->createForm(SolicitudType::class);
$form->remove('tipoEquipo');
$form->remove('idEquipo');
$form->remove('periodo');
$form->remove('tipoMantenimiento');
$form->remove('fregistro');
$form->remove('ffin');
$form->remove('fevaluacion');
$form->remove('refacciones');
$form->remove('estatus');
$form->remove('usuario');
$form->remove('ubicacion');
$form->remove('gestor');
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if($form->get('falla')->getData() == "" || $form->get('srealizado')->getData() == "" || $form->get('fatencion')->getData() == null){
return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
}
$y = $form->get('fatencion')->getData()->format('Y/m/d');
$fecha = new DateTime($y);
$data = [
"accion" => $form->get('falla')->getData(),
"fatencion" => $fecha,
"periodo" => $periodo->getIdPrd()
];
$this->solicitudProgramacionTipoC($red, $data);
return new JsonResponse(['mensaje' => 'Se ha programado el mantenimiento para red']);
}
if ($form->isSubmitted() && !$form->isValid()) {
$view = $this->renderView('prog_solicitud/programar.html.twig', [
'form' => $form->createView(),
'info' => $info
]);
$response = new JsonResponse(['form' => $view]);
$response->setStatusCode(Response::HTTP_BAD_REQUEST);
return $response;
}
return $this->renderForm('prog_solicitud/programar.html.twig', [
'form' => $form,
'info' => $info
]);
}
/**
* Programar solicitud por equipo, solo tipo otro
* @Route("/solicitud/otro/{id}", name="prog_preventivo_solicitud_tipod", methods={"GET", "POST"})
* @param Otro $otro
* @param Request $request
* @return Response
*/
public function programarSolicitudTipoD(Request $request, Otro $otro) :Response
{
$periodo = $this->entityManager->getRepository(Periodo::class)->findOneBy(['activo' => 1, 'actual' => 1]);
$info = [
'tipoEquipo' => 'Otro',
'tipoMantenimiento' => 'Correctivo',
'marbete' => $otro->getMarbete()
];
$form = $this->createForm(SolicitudType::class);
$form->remove('tipoEquipo');
$form->remove('idEquipo');
$form->remove('periodo');
$form->remove('tipoMantenimiento');
$form->remove('fregistro');
$form->remove('ffin');
$form->remove('fevaluacion');
$form->remove('refacciones');
$form->remove('estatus');
$form->remove('usuario');
$form->remove('ubicacion');
$form->remove('gestor');
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if($form->get('falla')->getData() == "" || $form->get('srealizado')->getData() == "" || $form->get('fatencion')->getData() == null){
return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
}
$y = $form->get('fatencion')->getData()->format('Y/m/d');
$fecha = new DateTime($y);
$data = [
"accion" => $form->get('falla')->getData(),
"fatencion" => $fecha,
"periodo" => $periodo->getIdPrd()
];
$this->solicitudProgramacionTipoD($otro, $data);
return new JsonResponse(['mensaje' => 'Se ha programado el mantenimiento para otro tipo de equipo']);
}
if ($form->isSubmitted() && !$form->isValid()) {
$view = $this->renderView('prog_solicitud/programar.html.twig', [
'form' => $form->createView(),
'info' => $info
]);
$response = new JsonResponse(['form' => $view]);
$response->setStatusCode(Response::HTTP_BAD_REQUEST);
return $response;
}
return $this->renderForm('prog_solicitud/programar.html.twig', [
'form' => $form,
'info' => $info
]);
}
/**
* Reprogramar solicitud, solo disponibilidad de modificación para el campo falla
* @Route("/reprogramar/solicitud/{id}", name="prog_preventivo_reprogramar", methods={"GET", "POST"})
* @param Solicitud $solicitud
* @param Request $request
* @return JsonResponse
*/
public function reprogramarSolicitud(Request $request, Solicitud $solicitud) :JsonResponse
{
$a = $request->request->get($request->get('id'). '-falla');
$b = $request->request->get($request->get('id'). '-fregistro');
$solicitud->setFalla($a);
$solicitud->setFatencion(new DateTime($b));
$this->entityManager->persist($solicitud);
$this->entityManager->flush();
return new JsonResponse([
'mensaje' => 'Se ha editado la solicitud ' . $solicitud->getIdSol() . ', Acción a realizar: ' . $a . '.',
'idsol' => $solicitud->getIdSol(),
'falla' => $a,
'fregistro' => $solicitud->getFregistro()->format('d M Y'),
], Response::HTTP_OK);
}
/**
* Función para crear objeto tipo equipo e insertar en la base de datos
* @param Equipo $equipo Referencia a la entidad
* @param array $data Array con la información específica a complementar
* @return string Para creación de botón en la vista
*/
private function solicitudProgramacionTipoA(Equipo $equipo, $data)
{
date_default_timezone_set("America/Mexico_City");
/** @var Usuario $user */
$user = $this->getUser();
# Identificador de solicitud
$partA = date("y");
$partB = substr($equipo->getUnidad()->getIdUni(), 3, 3);
$partC = str_pad($equipo->getUnidad()->getConsecutivo(), 4,"0", STR_PAD_LEFT);
$idSolicitud = $partA.$partB.$partC;
$save = new Solicitud();
$save->setIdSol($idSolicitud);
$save->setIdEquipo($equipo->getIdEqu());
$save->setTipoEquipo("Equipo");
$save->setTipoMantenimiento("MP");
$save->setUnidad($equipo->getUnidad());
$save->setUsuario($equipo->getUsuario());
$save->setUbicacion($equipo->getUbicacion());
$save->setGestor($user);
$save->setPeriodo($data['periodo']);
$save->setFalla($data['accion']);
$save->setFregistro(new DateTime());
$save->setFatencion($data['fatencion']);
$save->setEstatus(1);
$this->entityManager->persist($save);
$this->entityManager->flush();
$unidad = $equipo->getUnidad();
$unidad->setConsecutivo($unidad->getConsecutivo() + 1);
$this->entityManager->persist($unidad);
$this->entityManager->flush();
return $idSolicitud;
}
/**
* Función para crear objeto tipo impresora e insertar en la base de datos
* @param Impresora $impresora Referencia a la entidad
* @param array $data Array con la información específica a complementar
* @return string Para creación de botón en la vista
*/
private function solicitudProgramacionTipoB(Impresora $impresora, $data)
{
date_default_timezone_set("America/Mexico_City");
/** @var Usuario $user */
$user = $this->getUser();
# Identificador de solicitud
$partA = date("y");
$partB = substr($impresora->getUnidad()->getIdUni(), 3, 3);
$partC = str_pad($impresora->getUnidad()->getConsecutivo(), 4,"0", STR_PAD_LEFT);
$idSolicitud = $partA.$partB.$partC;
$save = new Solicitud();
$save->setIdSol($idSolicitud);
$save->setIdEquipo($impresora->getIdImp());
$save->setTipoEquipo("Impresora");
$save->setTipoMantenimiento("MP");
$save->setUnidad($impresora->getUnidad());
$save->setUsuario($impresora->getUsuario());
$save->setUbicacion($impresora->getUbicacion());
$save->setGestor($user);
$save->setPeriodo($data['periodo']);
$save->setFalla($data['accion']);
$save->setFregistro(new DateTime());
$save->setFatencion($data['fatencion']);
$save->setEstatus(1);
$this->entityManager->persist($save);
$this->entityManager->flush();
$unidad = $impresora->getUnidad();
$unidad->setConsecutivo($unidad->getConsecutivo() + 1);
$this->entityManager->persist($unidad);
$this->entityManager->flush();
return $idSolicitud;
}
/**
* Función para crear objeto tipo red e insertar en la base de datos
* @param Red $red Referencia a la entidad
* @param array $data Array con la información específica a complementar
* @return string Para creación de botón en la vista
*/
private function solicitudProgramacionTipoC(Red $red, $data)
{
date_default_timezone_set("America/Mexico_City");
/** @var Usuario $user */
$user = $this->getUser();
# Identificador de solicitud
$partA = date("y");
$partB = substr($red->getUnidad()->getIdUni(), 3, 3);
$partC = str_pad($red->getUnidad()->getConsecutivo(), 4,"0", STR_PAD_LEFT);
$idSolicitud = $partA.$partB.$partC;
$save = new Solicitud();
$save->setIdSol($idSolicitud);
$save->setIdEquipo($red->getIdRed());
$save->setTipoEquipo("Red");
$save->setTipoMantenimiento("MP");
$save->setUnidad($red->getUnidad());
$save->setUsuario($red->getUsuario());
$save->setUbicacion($red->getUbicacion());
$save->setGestor($user);
$save->setPeriodo($data['periodo']);
$save->setFalla($data['accion']);
$save->setFregistro(new DateTime());
$save->setFatencion($data['fatencion']);
$save->setEstatus(1);
$this->entityManager->persist($save);
$this->entityManager->flush();
$unidad = $red->getUnidad();
$unidad->setConsecutivo($unidad->getConsecutivo() + 1);
$this->entityManager->persist($unidad);
$this->entityManager->flush();
return $idSolicitud;
}
/**
* Función para crear objeto tipo otro e insertar en la base de datos
* @param Otro $otro Referencia a la entidad
* @param array $data Array con la información específica a complementar
* @return string Para creación de botón en la vista
*/
private function solicitudProgramacionTipoD(Otro $otro, $data)
{
date_default_timezone_set("America/Mexico_City");
/** @var Usuario $user */
$user = $this->getUser();
# Identificador de solicitud
$partA = date("y");
$partB = substr($otro->getUnidad()->getIdUni(), 3, 3);
$partC = str_pad($otro->getUnidad()->getConsecutivo(), 4,"0", STR_PAD_LEFT);
$idSolicitud = $partA.$partB.$partC;
$save = new Solicitud();
$save->setIdSol($idSolicitud);
$save->setIdEquipo($otro->getIdOtro());
$save->setTipoEquipo("Otro");
$save->setTipoMantenimiento("MP");
$save->setUnidad($otro->getUnidad());
$save->setUsuario($otro->getUsuario());
$save->setUbicacion($otro->getUbicacion());
$save->setGestor($user);
$save->setPeriodo($data['periodo']);
$save->setFalla($data['accion']);
$save->setFregistro(new DateTime());
$save->setFatencion($data['fatencion']);
$save->setEstatus(1);
$this->entityManager->persist($save);
$this->entityManager->flush();
$unidad = $otro->getUnidad();
$unidad->setConsecutivo($unidad->getConsecutivo() + 1);
$this->entityManager->persist($unidad);
$this->entityManager->flush();
return $idSolicitud;
}
/**
* Consulta de solicitudes programadas por equipo, de tipo equipo
* @Route("/programada/consulta/equipo/{id}", name="prog_preventivo_programada_tipoa", methods={"GET", "POST"})
* @param Equipo $equipo
* @param Request $request
* @return Response
*/
public function consultaProgramadaTipoA(Request $request, Equipo $equipo) :Response
{
$info = [
'tipoEquipo' => 'Equipo',
'tipoMantenimiento' => 'Preventivo'
];
$programadas = $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($equipo->getIdEqu(), $info['tipoEquipo'], 'MP');
return $this->renderForm('prog_solicitud/programado.html.twig', [
'info' => $info,
'solicitud' => $programadas
]);
}
/**
* Consulta de solicitudes programadas por equipo, de tipo impresora
* @Route("/programada/consulta/impresora/{id}", name="prog_preventivo_programada_tipob", methods={"GET", "POST"})
* @param impresora $impresora
* @param Request $request
* @return Response
*/
public function consultaProgramadaTipoB(Request $request, Impresora $impresora) :Response
{
$info = [
'tipoEquipo' => 'Impresora',
'tipoMantenimiento' => 'Preventivo'
];
$programadas = $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($impresora->getIdImp(), $info['tipoEquipo'], 'MP');
return $this->renderForm('prog_solicitud/programado.html.twig', [
'info' => $info,
'solicitud' => $programadas
]);
}
/**
* Consulta de solicitudes programadas por equipo, de tipo red
* @Route("/programada/consulta/red/{id}", name="prog_preventivo_programada_tipoc", methods={"GET", "POST"})
* @param Red $red
* @param Request $request
* @return Response
*/
public function consultaProgramadaTipoC(Request $request, Red $red) :Response
{
$info = [
'tipoEquipo' => 'Red',
'tipoMantenimiento' => 'Preventivo'
];
$programadas = $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($red->getIdRed(), $info['tipoEquipo'], 'MP');
return $this->renderForm('prog_solicitud/programado.html.twig', [
'info' => $info,
'solicitud' => $programadas
]);
}
/**
* Consulta de solicitudes programadas por equipo, de tipo otro
* @Route("/programada/consulta/otro/{id}", name="prog_preventivo_programada_tipod", methods={"GET", "POST"})
* @param Otro $otro
* @param Request $request
* @return Response
*/
public function consultaProgramadaTipoD(Request $request, Otro $otro) :Response
{
$info = [
'tipoEquipo' => 'Otro',
'tipoMantenimiento' => 'Preventivo'
];
$programadas = $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($otro->getIdOtro(), $info['tipoEquipo'], 'MP');
return $this->renderForm('prog_solicitud/programado.html.twig', [
'info' => $info,
'solicitud' => $programadas
]);
}
}