<?php
namespace App\Controller;
use App\Entity\Bitacora;
use App\Entity\BitacoraMovimientos;
use App\Entity\CatComponentes;
use App\Entity\CatTiposMovimientos;
use App\Entity\Equipo;
use App\Entity\Impresora;
use App\Entity\Inventario;
use App\Entity\Otro;
use App\Entity\Periodo;
use App\Entity\Red;
use App\Entity\Solicitud;
use App\Entity\Unidad;
use App\Entity\Usuario;
use App\Form\SolicitudType;
use App\Repository\SolicitudRepository;
use App\Security\EmailVerifier;
use App\Service\VistaTipoEquipo;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
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\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
#[Route('/solicitud')]
class SolicitudController extends AbstractController
{
private $mailer;
private EmailVerifier $emailVerifier;
public function __construct(EntityManagerInterface $entityManager, MailerInterface $mailer)
{
$this->entityManager = $entityManager;
$this->mailer = $mailer;
}
public EntityManagerInterface $entityManager;
/**
* @param EntityManagerInterface $entityManager
*/
#[Route('/', name: 'app_solicitud_index', methods: ['GET', 'POST'])]
public function index(SolicitudRepository $solicitudRepository, Request $request): Response
{
//Seccion filtro
date_default_timezone_set('America/Mexico_City');
setlocale(LC_ALL, 'es_MX');
/** @var Usuario $user */
$user = $this->getUser();
//Seccion filtro
$perfil = $request->getSession()->get('perfil');
$nivel = $perfil[12]["nivel"];
if($user->getRol()->getIdRol() == 3){
$solicitudes = $this->entityManager->getRepository(Solicitud::class)->registroTipoEquipoUsuario(0, 6, $user->getUnidad()->getIdUni());
}
//dump($solicitudes);
//die();
return $this->render('solicitud/index.html.twig', [
'solicitudes' => $solicitudes
]);
}
#[Route('/{idSol}/edit', name: 'app_solicitud_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, Solicitud $solicitud, SolicitudRepository $solicitudRepository, EntityManagerInterface $entityManager): Response
{
/** @var Usuario $user */
$user = $this->getUser();
if ($user) {
dump($user->getUsername());
dump($user->getEmail());
} else {
dump('No hay usuario autenticado.');
}
date_default_timezone_set('America/Mexico_City');
setlocale(LC_ALL, 'es_MX');
$factual = new DateTime();
$form = $this->createForm(SolicitudType::class, $solicitud);
$form->remove('fregistro');
$form->remove('fatencion');
$form->remove('ffin');
$form->remove('gestor');
$form->remove('usuario');
$form->remove('ubicacion');
$form->remove('periodo');
$form->remove('idEquipo');
if ($solicitud ->getTipoMantenimiento() == 'MP'){
$form->remove('tipoMantenimiento');
}
$form->handleRequest($request);
if ($solicitud->getEstatus()==1){
$estatus="Pendiente";
}else if ($solicitud->getEstatus()==2){
$estatus="En proceso";
}else if ($solicitud->getEstatus()==3){
$estatus="Atendido";
// Modificación para enviar correo a una dirección específica
$correoDestino = $solicitud->getUsuario()->getCorreo();
$gestor = $solicitud->getGestor();
$tecnicoResponsable = $gestor ? sprintf(
'%s %s %s',
$gestor->getNombre() ?? '',
$gestor->getPapellido() ?? '',
$gestor->getSApellido() ?? ''
) : 'No tiene un técnico responsable';
$email = (new TemplatedEmail())
->from(new Address('no-reply-ti@conalepmex.edu.mx', 'Sistema de Gestión de Mantenimiento para Equipos de Computo'))
->to($correoDestino)
->subject('Solicitud Atendida')
->htmlTemplate('solicitud/estatus.html.twig')
->context([
'solicitud' => $solicitud,
'usuarioNombre' => sprintf(
'%s %s %s',
$solicitud->getUsuario()->getNombre(),
$solicitud->getUsuario()->getPapellido(),
$solicitud->getUsuario()->getSApellido()
),
'numeroSolicitud' => $solicitud->getIdSol(),
'fechaSolicitud' => $solicitud->getFregistro()->format('d-m-Y'),
'descripcionProblema' => $solicitud->getFalla(),
'tecnicoResponsable' => $tecnicoResponsable,
'enlaceEncuesta' => 'https://ti.conalepmex.edu.mx/sigmec/login',
]);
$this->mailer->send($email);
}else if ($solicitud->getEstatus()==4){
$estatus="Evaluado";
}
$equipo = $entityManager->getRepository(Equipo::class)->findOneBy(['idEqu' => $solicitud->getIdEquipo()]);
if($form->isSubmitted() && !$form->isValid()){
$view = $this->renderView('solicitud/modal.html.twig', [
'solicitud' => $solicitud,
'form' => $form->createView()
]);
$response = new JsonResponse(['form' => $view]);
$response->setStatusCode(Response::HTTP_UNPROCESSABLE_ENTITY);
return $response;
}
if ($form->isSubmitted() && $form->isValid()) {
if ($request->request->has('componente')){
date_default_timezone_set('America/Mexico_City');
$condicion = implode(',',$request->request->get('componente'));
$usuario = $this->entityManager->getRepository(Usuario::class)->findOneBy(['idUsu' => $user->getIdUsu()]);
$unidad = $this->entityManager->getRepository(Unidad::class)->findOneBy(['idUni' => $user->getUnidad()]);
$tMovimiento = $this->entityManager->getRepository(CatTiposMovimientos::class)->findOneBy(['idMov' => 5]);
$conn = $this->entityManager->getConnection();
$sql = "SELECT *
FROM inventario i
JOIN cat_componentes cc ON i.id_componente = cc.id_componente WHERE i.id_inventario IN (" . $condicion . ")
";
$stmt = $conn->prepare($sql);
$resultSet = $stmt->executeQuery();
$componentes = $resultSet->fetchAll();
$factual = new DateTime();
foreach ($componentes as $componente){
$comp = $entityManager->getRepository(CatComponentes::class)->findOneBy(['idComponente' => $componente['id_componente']]);
if($componente['id_componente'] == 2){
$equipo->setNucleos($componente['nucleos']);
$equipo->setCpuVelocidad($componente['velocidad']);
}
if($componente['id_componente'] == 4){
$equipo->setRam($componente['capacidad_memoria']);
}
if($componente['id_componente'] == 5){
$equipo->setHhd($componente['capacidad_memoria']);
}if($componente['id_componente'] == 6){
$equipo->setSsd($componente['capacidad_memoria']);
}
if($componente['id_componente'] == 12){
$equipo->setTecladoMarca($componente['marca']);
$equipo->setTecladoModelo($componente['modelo']);
}
if($componente['id_componente'] == 13){
$equipo->setMouseMarca($componente['marca']);
$equipo->setMouseModelo($componente['modelo']);
}if($componente['id_componente'] == 14){
$equipo->setMonitorMarca($componente['marca']);
$equipo->setMonitorModelo($componente['modelo']);
}
$c = new BitacoraMovimientos();
$c->setTipoMov($tMovimiento);
$c->setFechaMov($factual);
$c->setIdUsu($usuario);
$c->setIdComponente($comp);
$c->setIdUni($unidad);
$c->setIdSolicitud($solicitud);
$c->setTipoEquipo($solicitud->getTipoEquipo());
$c->setIdEqu($solicitud->getIdEquipo());
$entityManager->persist($c);
$entityManager->flush();
// Actualizar el campo en_uso en el registro de inventario
$inventario = $entityManager->getRepository(Inventario::class)->find($componente['id_inventario']);
if ($inventario) {
$inventario->setEnUso(0);
$entityManager->persist($inventario);
$entityManager->flush();
}
}
}
if ($solicitud->getEstatus() == 3){
$solicitud->setGestor($user);
$solicitud->setFfin($factual);
}
$entityManager->persist($solicitud);
$entityManager->flush();
//dump($solicitud); die();
//$solicitudRepository->add($solicitud, true);
switch ($solicitud->getTipoEquipo()){
case 'Equipo':
$info = $entityManager->getRepository(Equipo::class)->findOneBy([
'idEqu' => $solicitud->getIdEquipo()
]);
break;
case 'Impresora':
$info = $entityManager->getRepository(Impresora::class)->findOneBy([
'idImp' => $solicitud->getIdEquipo()
]);
break;
case 'Red':
$info = $entityManager->getRepository(Red::class)->findOneBy([
'idRed' => $solicitud->getIdEquipo()
]);
break;
case 'Otro':
$info = $entityManager->getRepository(Otro::class)->findOneBy([
'idOtro' => $solicitud->getIdEquipo()
]);
break;
}
$data = array(
'idSol' => $solicitud->getIdSol(),
'tipoEquipo' => $solicitud->getTipoEquipo(),
'idEquipo' => $info->getMarbete(),
'marca' => $info->getMarca(),
'modelo' => $info->getModelo(),
'tipoMantenimiento' => $solicitud->getTipoMantenimiento(),
'falla' => $solicitud->getFalla(),
'estatus' => $estatus,
'mensaje' => 'Se actualizo correctamente',
);
return new JsonResponse($data);
//return $this->redirectToRoute('app_solicitud_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('solicitud/modal.html.twig', [
'solicitud' => $solicitud,
'equipo' => $equipo,
'form' => $form
]);
}
#[Route('/new', name: 'app_solicitud_new', methods: ['GET', 'POST'])]
public function new(Request $request, SolicitudRepository $solicitudRepository): Response
{
$solicitud = new Solicitud();
$form = $this->createForm(SolicitudType::class, $solicitud);
$form->remove('fregistro');
$form->remove('fatencion');
$form->remove('ffin');
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$solicitudRepository->add($solicitud, true);
return $this->redirectToRoute('app_solicitud_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('solicitud/new.html.twig', [
'solicitud' => $solicitud,
'form' => $form,
]);
}
#[Route('/{idSol}', name: 'app_solicitud_show', methods: ['GET'])]
public function show(Request $request, Solicitud $solicitud, SolicitudRepository $solicitudRepository, EntityManagerInterface $entityManager): Response
{
return $this->render('solicitud/show.html.twig', [
'solicitud' => $solicitud,
]);
}
#[Route('/{idSol}', name: 'app_solicitud_delete', methods: ['POST'])]
public function delete(Request $request, Solicitud $solicitud, SolicitudRepository $solicitudRepository): Response
{
if ($this->isCsrfTokenValid('delete'.$solicitud->getIdSol(), $request->request->get('_token'))) {
$solicitudRepository->remove($solicitud, true);
}
return $this->redirectToRoute('app_solicitud_index', [], Response::HTTP_SEE_OTHER);
}
#[Route('/modal/componente', name: 'app_solicitud_modal')]
public function modalComponente(Request $request) :JsonResponse
{
/** @var Usuario $user */
// $user = $this->getUser();
// if($user->getRol()->getIdRol() == 3) {
$conn = $this->entityManager->getConnection();
$sql = "SELECT cc.*, i.*
FROM inventario i
LEFT JOIN cat_componentes cc ON cc.id_componente = i.id_componente
WHERE i.en_uso = 1
ORDER BY cc.tipo ASC
";
$stmt = $conn->prepare($sql);
$resultSet = $stmt->executeQuery();
// }
return new JsonResponse(['catComponente' => $resultSet->fetchAll()], Response::HTTP_OK);
}
#[Route('/vista/contador', name: 'app_solicitud_vista')]
public function vistaContador() :JsonResponse
{
/** @var Usuario $user */
$user = $this->getUser();
if($user->getRol()->getIdRol() == 3) {
$cTodoEquipo = $this->entityManager->getRepository(Solicitud::class)->conteoEstatusTipoEquipoUsuario(0, 5, $user->getUnidad()->getIdUni());
}
return new JsonResponse(['data' => $cTodoEquipo], Response::HTTP_OK);
}
#[Route('/vista/solicitud/{id}', name: 'app_solicitud_vista_detalle')]
public function vistaSolicitud(Request $request, Solicitud $solicitud,EntityManagerInterface $entityManager) :Response
{
$a = $this->entityManager->getRepository(Solicitud::class)->findOneBy(['idSol' => $request->get('id')]);
if ($a->getEstatus() == 1) {
$a->setEstatus(2);
$this->entityManager->persist($a);
$this->entityManager->flush();
}
$solicitud = $this->entityManager->getRepository(Solicitud::class)->detalleTipoEquipoSolicitud($request->get('id'));
return $this->render('prog_solicitud/informacion_solicitud.html.twig', ['info' => $solicitud]);
}
#[Route('/registro/vista', name: 'app_solicitud_actualiza_vista', methods: ['GET', 'POST'])]
public function infoSolicitud(EntityManagerInterface $entityManager): Response
{
$solicitudes = $entityManager->getRepository(Solicitud::class)->findAll();
$data = [];
$i = 0;
foreach ($solicitudes as $s) {
$data[$i]['ver_equipo'] = $this->generateUrl('prog_correctivo_vista_tipo', ['tipo' => $s['tipo_equipo'], 'id' => $s['id_equipo']], UrlGeneratorInterface::ABSOLUTE_URL);
$data[$i]['ver_solicitud'] = $this->generateUrl('consulta_solicitud_vista_solicitud', ['id' => $s['id_sol']], UrlGeneratorInterface::ABSOLUTE_URL);
$data[$i]['editar'] = $this->generateUrl('app_solicitud_edit', ['idSol' => $s['id_sol']], UrlGeneratorInterface::ABSOLUTE_URL);
$data[$i]['id_sol'] = $s['id_sol'];
$data[$i]['tipo_equipo'] = $s['tipo_equipo'];
$data[$i]['marbete'] = $s['marbete'];
$data[$i]['marca'] = $s['marca'];
$data[$i]['modelo'] = $s['modelo'];
$data[$i]['tipo_mantenimiento'] = $s['tipo_mantenimiento'];
$data[$i]['falla'] = $s['falla'];
$data[$i]['estatus'] = $s['estatus'];
$data[$i]['id_equipo'] = $s['id_equipo'];
$i++;
}
return new JsonResponse($data);
}
/**
* Vista detallada por tipo, equipo, impresora, red, otro
* @Route("/vista/{tipo}/{id}", name="app_solicitud_vista_tipo", methods={"GET", "POST"})
* @param Request $request
* @return Response
*/
public function vistaTipo(Request $request) :Response
{
$service = new VistaTipoEquipo($this->entityManager);
$info = $service->consultaInformacion($request->get('tipo'), $request->get('id'));
return $this->render('prog_solicitud/informacion_tipo.html.twig', ['tipo' => $request->get('tipo'),'info' => $info]);
}
/**
* Consulta de solicitudes programadas por equipo, de tipo equipo
* @Route("/programada/consulta/equipo/{id}", name="prog_correctivo_programada_tipoa", methods={"GET", "POST"})
* @param Equipo $equipo
* @return Response
*/
public function consultaProgramadaTipoA(Equipo $equipo) :Response
{
$info = [
'tipoEquipo' => 'Equipo',
'tipoMantenimiento' => 'Correctivo',
'siglasMantenimiento' => 'MC'
];
$programadas = $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($equipo->getIdEqu(), $info['tipoEquipo'], $info['siglasMantenimiento']);
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_correctivo_programada_tipob", methods={"GET", "POST"})
* @param impresora $impresora
* @return Response
*/
public function consultaProgramadaTipoB(Impresora $impresora) :Response
{
$info = [
'tipoEquipo' => 'Impresora',
'tipoMantenimiento' => 'Correctivo',
'siglasMantenimiento' => 'MC'
];
$programadas = $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($impresora->getIdImp(), $info['tipoEquipo'], $info['siglasMantenimiento']);
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_correctivo_programada_tipoc", methods={"GET", "POST"})
* @param Red $red
* @return Response
*/
public function consultaProgramadaTipoC(Red $red) :Response
{
$info = [
'tipoEquipo' => 'Red',
'tipoMantenimiento' => 'Correctivo',
'siglasMantenimiento' => 'MC'
];
$programadas = $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($red->getIdRed(), $info['tipoEquipo'], $info['siglasMantenimiento']);
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_correctivo_programada_tipod", methods={"GET", "POST"})
* @param Otro $otro
* @return Response
*/
public function consultaProgramadaTipoD(Otro $otro) :Response
{
$info = [
'tipoEquipo' => 'Otro',
'tipoMantenimiento' => 'Correctivo',
'siglasMantenimiento' => 'MC'
];
$programadas = $this->entityManager->getRepository(Solicitud::class)->registroEquipoSolicitud($otro->getIdOtro(), $info['tipoEquipo'], $info['siglasMantenimiento']);
return $this->renderForm('prog_solicitud/programado.html.twig', [
'info' => $info,
'solicitud' => $programadas
]);
}
/**
* Programar solicitud por equipo, solo tipo equipo
* @Route("/solicitud/equipo/{id}", name="app_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' => 'Correctivo',
'marbete' => $equipo->getMarbete()
];
$form = $this->createForm(SolicitudType::class);
$form->remove('tipoEquipo');
$form->remove('idEquipo');
$form->remove('periodo');
$form->remove('tipoMantenimiento');
$form->remove('srealizado');
$form->remove('fregistro');
$form->remove('fatencion');
$form->remove('ffin');
$form->remove('evaluacion');
$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('falla') == null){
return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
}
$equipo->incrementMantenimientoCount();
$data = [
"tipo" => $info['tipoEquipo'],
"id" => $equipo->getIdEqu(),
"marbete" => $equipo->getMarbete(),
"iduni" => $equipo->getUnidad()->getIdUni(),
"consuni" => $equipo->getUnidad()->getConsecutivo(),
"unidad" => $equipo->getUnidad(),
"usuario" => $equipo->getUsuario(),
"ubicacion" => $equipo->getUbicacion(),
"accion" => $form->get('falla')->getData(),
"periodo" => $periodo
];
$info = $this->solicitudProgramacion($data);
return new JsonResponse($info);
}
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="app_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' => 'Correctivo',
'marbete' => $impresora->getMarbete()
];
$form = $this->createForm(SolicitudType::class);
$form->remove('tipoEquipo');
$form->remove('idEquipo');
$form->remove('periodo');
$form->remove('tipoMantenimiento');
$form->remove('srealizado');
$form->remove('fregistro');
$form->remove('fatencion');
$form->remove('ffin');
$form->remove('evaluacion');
$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('falla') == null){
return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
}
$impresora->incrementMantenimientoCount();
$data = [
"tipo" => $info['tipoEquipo'],
"id" => $impresora->getIdImp(),
"marbete" => $impresora->getMarbete(),
"iduni" => $impresora->getUnidad()->getIdUni(),
"consuni" => $impresora->getUnidad()->getConsecutivo(),
"unidad" => $impresora->getUnidad(),
"usuario" => $impresora->getUsuario(),
"ubicacion" => $impresora->getUbicacion(),
"accion" => $form->get('falla')->getData(),
"periodo" => $periodo
];
$info = $this->solicitudProgramacion($data);
return new JsonResponse($info);
}
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="app_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' => 'Correctivo',
'marbete' => $red->getMarbete()
];
$form = $this->createForm(SolicitudType::class);
$form->remove('tipoEquipo');
$form->remove('idEquipo');
$form->remove('periodo');
$form->remove('tipoMantenimiento');
$form->remove('srealizado');
$form->remove('fregistro');
$form->remove('fatencion');
$form->remove('ffin');
$form->remove('evaluacion');
$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('falla') == null){
return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
}
$red->incrementMantenimientoCount();
$data = [
"tipo" => $info['tipoEquipo'],
"id" => $red->getIdRed(),
"marbete" => $red->getMarbete(),
"iduni" => $red->getUnidad()->getIdUni(),
"consuni" => $red->getUnidad()->getConsecutivo(),
"unidad" => $red->getUnidad(),
"usuario" => $red->getUsuario(),
"ubicacion" => $red->getUbicacion(),
"accion" => $form->get('falla')->getData(),
"fatencion" => null,
"periodo" => $periodo
];
$info = $this->solicitudProgramacion($data);
return new JsonResponse($info);
}
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="app_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('srealizado');
$form->remove('fregistro');
$form->remove('fatencion');
$form->remove('ffin');
$form->remove('evaluacion');
$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('falla') == null){
return new JsonResponse(['mensaje' => 'El campo no debe estar vacío'], Response::HTTP_BAD_REQUEST);
}
$otro->incrementMantenimientoCount();
$data = [
"tipo" => $info['tipoEquipo'],
"id" => $otro->getIdOtro(),
"marbete" => $otro->getMarbete(),
"iduni" => $otro->getUnidad()->getIdUni(),
"consuni" => $otro->getUnidad()->getConsecutivo(),
"unidad" => $otro->getUnidad(),
"usuario" => $otro->getUsuario(),
"ubicacion" => $otro->getUbicacion(),
"accion" => $form->get('falla')->getData(),
"periodo" => $periodo
];
$info = $this->solicitudProgramacion($data);
return new JsonResponse($info);
}
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
]);
}
/**
* Función para crear objeto tipo equipo especificado e insertar en la base de datos
* @param array $data Array con la información específica a complementar
* @return array Para creación de botón en la vista
*/
private function solicitudProgramacion($data)
{
date_default_timezone_set("America/Mexico_City");
$factual = new DateTime();
# Identificador de solicitud
$partA = date("y");
$partB = substr($data['iduni'], 3, 3);
$partC = str_pad($data['consuni'], 4,"0", STR_PAD_LEFT);
$idSolicitud = $partA.$partB.$partC;
$save = new Solicitud();
$save->setIdSol($idSolicitud);
$save->setIdEquipo($data['id']);
$save->setTipoEquipo($data['tipo']);
$save->setTipoMantenimiento("MC");
$save->setUnidad($data['unidad']);
$save->setUsuario($data['usuario']);
$save->setUbicacion($data['ubicacion']);
$save->setPeriodo($data['periodo']);
$save->setFalla($data['accion']);
$save->setFregistro($factual);
$save->setFatencion($factual);
$save->setEstatus(1);
$this->entityManager->persist($save);
$this->entityManager->flush();
$unidad = $data['unidad'];
$unidad->setConsecutivo($unidad->getConsecutivo() + 1);
$this->entityManager->persist($unidad);
$this->entityManager->flush();
$info = [
'mensaje' => 'Se ha generado la solicitud de mantenimiento, con el identificador ' . $save->getIdSol(),
'ver_solicitud' => $this->generateUrl('prog_correctivo_vista_solicitud', ['id' => $save->getIdSol()], UrlGeneratorInterface::ABSOLUTE_URL),
'solicitud' => $save->getIdSol(),
'tipo_equipo' => $save->getTipoEquipo(),
'equipo' => $save->getIdEquipo(),
'marbete' => $data['marbete'],
'marca' => $data['marca'],
'modelo' => $data['modelo'],
'falla' => $save->getFalla(),
'tipo_mantenimiento' => $save->getTipoMantenimiento(),
'mantenimiento_count' => $data->getMantenimientoCount(),
'fregistro' => $save->getFregistro()->format("d M Y, H:m"),
'estatus' => $save->getEstatus()
];
return $info;
}
//Para subir formulario
}