diff --git a/app/Resources/views/base_app.html.twig b/app/Resources/views/base_app.html.twig index d8ae377..ca30c60 100644 --- a/app/Resources/views/base_app.html.twig +++ b/app/Resources/views/base_app.html.twig @@ -61,6 +61,16 @@
  • Rechazadas
  • + + + {% endif %} {% if is_granted('ROLE_ADSCRITO') %} {% endif %} @@ -124,5 +134,41 @@ + + + + + diff --git a/app/Resources/views/base_memo.html.twig b/app/Resources/views/base_memo.html.twig new file mode 100644 index 0000000..ed77165 --- /dev/null +++ b/app/Resources/views/base_memo.html.twig @@ -0,0 +1,39 @@ + + + + + {% block title %}CEA | UBV!{% endblock %} + {% block stylesheets %} + + + {% endblock %} + + + + {% block encabezado %} +
    +
    +
    + +
    +
    +

    República Bolivariana de Venezuela

    +

    Universidad Bolivariana de Venezuela

    +

    Rectorado

    +

    Dirección General de Apoyo Socio Administrativo

    +
    +
    +
    + {% endblock %} + {% block body %} + + {% block principal %} {% endblock %} + + {% endblock %} + + {% block javascripts %} + + + {% endblock %} + + diff --git a/app/Resources/views/cea/servicios.html.twig b/app/Resources/views/cea/servicios.html.twig new file mode 100644 index 0000000..828e595 --- /dev/null +++ b/app/Resources/views/cea/servicios.html.twig @@ -0,0 +1,57 @@ +{% extends 'base_app.html.twig' %} + +{%block body %} +
    +
    +
    +

    Solicitudes de {{ tipo }}: Estatus {{ estatus_servicio }}

    +
    + +
    + + + + + + + + + + + + + {% for servicio in servicios %} + + + + + + + + + + + {% endfor %} + + +
    Id Datos del Docente Area de Adscripción Eje Adscripción Estado Acciones
    {{servicio.id}} + {{servicio.idRolInstitucion.idRol.idPersona.PrimerNombre}} + {{servicio.idRolInstitucion.idRol.idPersona.PrimerApellido}} + ( {{servicio.idRolInstitucion}} ) + + + + {{servicio.idRolInstitucion.IdRol.IdAreaPersona.nombre}} + + {{servicio.idRolInstitucion.idInstitucion.idEjeParroquia.IdEje}} + {{servicio.idRolInstitucion.idInstitucion.idEjeParroquia.idParroquia.idMunicipio.idEstado}} + + +
    +
    + +
    + +
    + +{% endblock %} diff --git a/app/Resources/views/cea/servicios_mostar.html.twig b/app/Resources/views/cea/servicios_mostar.html.twig new file mode 100644 index 0000000..8a453ac --- /dev/null +++ b/app/Resources/views/cea/servicios_mostar.html.twig @@ -0,0 +1,121 @@ +{% extends 'base_app.html.twig' %} +{% block stylesheets %} + {{ parent() }} + +{% endblock %} + +{%block body %} + +
    +
    + {% for message in app.session.flashBag.get('notice') %} +

    {{ message }}

    + + {%endfor %} +
    +
    +

    Servicio número {{servicio.id}}: + {{ servicio.idRolInstitucion.idRol.idPersona.primerNombre }}, + {{ servicio.idRolInstitucion.idRol.idPersona.primerApellido }} +

    +
    +
    + {% if servicio.idEstatus.id == 1 %} +

    Estatus {{servicio.idEstatus}} + {% elseif servicio.idEstatus.id == 3 %} +

    Estatus {{servicio.idEstatus}} + {% else %} +

    Estatus {{servicio.idEstatus}} + {% endif %} +

    +
    + +
    +
    + +
    + +
    + +
    + +
    + +
    + +
    + + +
    + +
    + + {{servicio.idServicioCe.Nombre}} +
    + + {% if servicio.idServicioCe.id == 1 %} +
    + + {{ adscripcion.fechaIngreso|date('d/m/Y') }} +
    + +
    + + {{ oposicion.fechaEscala|date('d/m/Y') }} +
    + + + {% endif %} + + + +  Aprobar +  Rechazar +
    +
    +
    +
    + +
    +

    Documentos Para confirmar

    +
    + + + +
    +
    + + + +
    +

    Constancia de Trabajo

    +
    +
    +
    + +
    +
    + + + +
    +

    Concurso Oposición

    +
    +
    +
    + + +
    +
    + +
    +
    +
    + +{% endblock %} + + +{% block javascripts %} + {{ parent() }} + + {% endblock %} \ No newline at end of file diff --git a/app/Resources/views/memorando/antiguedad.html.twig b/app/Resources/views/memorando/antiguedad.html.twig new file mode 100644 index 0000000..ef770e9 --- /dev/null +++ b/app/Resources/views/memorando/antiguedad.html.twig @@ -0,0 +1,3 @@ +{% extends 'base_memo.html.twig' %} + + diff --git a/app/Resources/views/solicitudes/index.html.twig b/app/Resources/views/solicitudes/index.html.twig new file mode 100644 index 0000000..51fb6df --- /dev/null +++ b/app/Resources/views/solicitudes/index.html.twig @@ -0,0 +1,51 @@ +{% extends 'base_app.html.twig' %} + +{% block body %} +
    + +
    +
    + + {% for message in app.session.flashBag.get('notice') %} +
    {{ message }}
    + {%endfor %} + +
    +
    +

    Mis Servicios Solicitados

    +
    +
    + + + + + + + + + + + + {% for servicio in servicios %} + + + + + + + + {% endfor %} + +
    Solicitud N° Descripción Fecha Solicitud Estatus Solicitud Acciones
    {{servicio.id}}{{servicio.idServicioCe.Nombre}}{{servicio.fechaSolicitud | date('Y-m-d')}}{{servicio.idEstatus}} + + + +
    +
    +
    +
    +
    +
    + + +{% endblock %} \ No newline at end of file diff --git a/app/Resources/views/solicitudes/reconocimiento_antiguedad.html.twig b/app/Resources/views/solicitudes/reconocimiento_antiguedad.html.twig new file mode 100644 index 0000000..58ca4c7 --- /dev/null +++ b/app/Resources/views/solicitudes/reconocimiento_antiguedad.html.twig @@ -0,0 +1,36 @@ +{% extends 'base_app.html.twig' %} +{% block body %} +
    +
    +
    + {% for message in app.session.flashBag.get('notice') %} +

    {{ message }}

    + {%endfor %} +
    +
    +

    CEA@UBV Reconocimiento de Antiguedad

    +
    +
    +
    +
    +
    + A través de esta solicitud, el Centro de Estudios ambientales, previa verificación de la documentación enviada, + reconocerá su antigüedad con fines de ascenso en escalafones de la carrera universitaria en esta Institución + tomando en cuenta la resolución de Consejo Universitario Nº11-42-2015 de fecha 08/07/2015 + que establece en su primer resuelve “Aprobar que la antigüedad administrativa total, acumulada en el lapso + transcurrido entre el primer contrato como trabajador académico y el Concurso de Oposición. +
    + +
    + +
    +
    +
    +
    +
    +
    + +{% endblock %} diff --git a/src/AppBundle/Controller/AppController.php b/src/AppBundle/Controller/AppController.php index 75c835c..6ab39c4 100644 --- a/src/AppBundle/Controller/AppController.php +++ b/src/AppBundle/Controller/AppController.php @@ -14,6 +14,7 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; use Symfony\Component\HttpFoundation\Request; use AppBundle\Entity\Adscripcion; +use AppBundle\Entity\DocenteServicio; /** @@ -49,13 +50,13 @@ class AppController extends Controller { } /** - * Pagina principal de inicio de la session Docente. + * Muestra las Solicitudes de Adscripción. Por defecto las creadas (estatus = 2) * * @Route("/solicitudes/adscripcion/{estatus}", name="cea_adscripciones") * @Method({"GET", "POST"}) * @Security("has_role('ROLE_COORDINADOR_NACIONAL')") */ - public function verSolicitudesAction($estatus = 2, Request $request) + public function verSolicitudesAdscripcionAction($estatus = 2, Request $request) { if ($request->getMethod() != 'POST') { @@ -111,7 +112,7 @@ class AppController extends Controller { * @Route("/solicitudes/{id}", name="cea_solicitudes_show") * @Method("GET") */ - public function solicitudesShowAction(Adscripcion $adscripcion) + public function solicitudesAdscripcionShowAction(Adscripcion $adscripcion) { //$deleteForm = $this->createDeleteForm($usuario); $escala = $this->getDoctrine()->getRepository('AppBundle:DocenteEscala')->findBy(array( @@ -131,7 +132,7 @@ class AppController extends Controller { * @Route("/solicitudes/actualizar/{id}/{estatus}", name="cea_solicitudes_actualizar") * @Method({"GET", "POST"}) */ - public function solicitudesEditAction(Adscripcion $adscripcion, $estatus) + public function solicitudesAdscripcionEditAction(Adscripcion $adscripcion, $estatus) { $adscripciones = $this->getDoctrine()->getRepository('AppBundle:Adscripcion')->findOneById($adscripcion->getId()); @@ -182,5 +183,237 @@ class AppController extends Controller { } + + /** + * Muestra la página Puede ver los estatus de las solicitudes realizadas + * y permite realizar la solicitud + * + * @Route("/servicios/{tipo}/{estatus}", name="cea_servicios") + * @Method({"GET", "POST"}) + */ + public function verServiciosAction(Request $request, $tipo="antiguedad", $estatus=2){ + + if ($tipo == "antiguedad") $tipo_servicio = 1; + if ($request->getMethod() != 'POST') { + $servicios = $this->getDoctrine()->getRepository('AppBundle:DocenteServicio')->findBy(array( + 'idEstatus' => $estatus, + 'idServicioCe' => $tipo_servicio, + )); + switch ($estatus){ + case 1: + $mensaje = "activas"; + break; + case 2: + $mensaje = "en espera"; + break; + case 3: + $mensaje = "rechazadas"; + break; + } + }else{ + + $persona = $this->getDoctrine()->getRepository('AppBundle:Persona') + ->findOneByCedulaPasaporte($request->get('docente')); + + if (!$persona) { + $this->addFlash('danger', 'Docente ' . $request->get('docente') . ' no Registrado en la Base de Datos del Centro de Estudios.'); + return $this->render('cea/index.html.twig', array ( + 'adscrito' => true + )); + } + + //1. obtener el rol-institucion-persona + $rol = $this->getDoctrine()->getRepository( + 'AppBundle:RolInstitucion')->findOneByIdRol( + $this->getDoctrine()->getRepository( + 'AppBundle:Rol')->findOneByIdPersona($persona)); + + //si no existe el rol del docente, enviar correo al encargado de la región para verificar. + if (!$rol) { + $this->addFlash('danger', 'Docente no Registrado en la Base de Datos del Centro de Estudios. Por Favor'); + return $this->render('cea/index.html.twig'); + } + + + $servicios = $this->getDoctrine()->getRepository('AppBundle:DocenteServicio')->findByIdRolInstitucion($rol->getId()); + $mensaje = "Busqueda : " . $request->get('docente'); + } + return $this->render('cea/servicios.html.twig', array( + 'servicios' => $servicios, + 'estatus_servicio' => $mensaje, + 'tipo' => $tipo + )); + + + } + + + /** + * Encuentra y muestra una entidad de tipo Servicios Docente. + * + * @Route("/ver_servicio/{id}", name="cea_servicio_show") + * @Method("GET") + */ + public function serviciosShowAction(DocenteServicio $servicio) + { + $adscripcion = $this->getDoctrine()->getRepository('AppBundle:Adscripcion')->findOneByIdRolInstitucion($servicio->getIdRolInstitucion()); + $escala = $this->getDoctrine()->getRepository('AppBundle:DocenteEscala')->findOneBy(array( + 'idRolInstitucion' => $servicio->getIdRolInstitucion(), + 'idTipoEscala' => 1 + )); + return $this->render('cea/servicios_mostar.html.twig', array( + 'servicio' => $servicio, + 'oposicion' => $escala, + 'adscripcion' => $adscripcion + )); + } + + + /** + * Muestra la página donde explica brevemente el reconocimiento de Antiguedad + * y permite realizar la solicitud + * + * @Route("/mis_servicios/", name="servicios_index") + * @Method({"GET", "POST"}) + */ + public function serviciosIndexAction(){ + + $servicios = $this->getDoctrine()->getRepository('AppBundle:DocenteServicio')->findByIdRolInstitucion($this->getUser()->getIdRolInstitucion()); + $adscripcion = $this->getDoctrine()->getRepository('AppBundle:Adscripcion')->findByIdRolInstitucion($this->getUser()->getIdRolInstitucion()); + + + return $this->render('solicitudes/index.html.twig', array( + 'servicios' => $servicios, + 'adscripcion' => $adscripcion + )); + } + + + /** + * Encuentra y muestra una entidad de tipo Adscripción. + * + * @Route("/servicios/actualizar/{id}/{estatus}", name="cea_servicios_actualizar") + * @Method({"GET", "POST"}) + */ + public function serviciosEditAction(DocenteServicio $servicios, $estatus) + { + + $servicio = $this->getDoctrine()->getRepository('AppBundle:DocenteServicio')->findOneById($servicios->getId()); + + if($estatus == "true") { + $servicio->setIdEstatus($this->getDoctrine()->getRepository('AppBundle:Estatus')->findOneById(1)); + + }else{ + $servicio->setIdEstatus($this->getDoctrine()->getRepository('AppBundle:Estatus')->findOneById(3)); + } + + $em = $this->getDoctrine()->getManager(); + $em->persist($servicio); + $em->flush(); + + $user = $this->getDoctrine()->getRepository('AppBundle:Usuarios')->findOneByIdRolInstitucion($servicio->getIdRolInstitucion()); + + $message = \Swift_Message::newInstance() + ->setSubject('Resultado Adscripcion CEA@UBV') + ->setFrom('wilmer.ramones@gmail.com') + ->setTo($user->getEmail()) + ->setBody( + $this->renderView( + 'correos/actualizar_adscripcion.html.twig', + array( + 'nombres' => $user->getUserName(), + 'estatus' => $servicio->getIdEstatus() + ) + ), + 'text/html' + ) + ; + $this->get('mailer')->send($message); + + $this->addFlash('notice', 'Servicio Actualizada Correctamente, hemos enviado un correo al docente notificandole los cambios.'); + + $escala = $this->getDoctrine()->getRepository('AppBundle:DocenteEscala')->findOneBy(array( + 'idRolInstitucion' => $servicio->getIdRolInstitucion(), + 'idTipoEscala' => 1 + )); + + $adscripcion = $this->getDoctrine()->getRepository('AppBundle:Adscripcion')->findOneByIdRolInstitucion($servicio->getIdRolInstitucion()); + return $this->render('cea/servicios_mostar.html.twig', array( + 'servicio' => $servicio, + 'oposicion' => $escala, + 'adscripcion' => $adscripcion + )); + + } + + + /** + * Muestra la página donde explica brevemente el reconocimiento de Antiguedad + * y permite realizar la solicitud + * + * @Route("/solicitudes/antiguedad/", name="cea_solicitudes_recocimiento_antiguedad") + * @Method({"GET", "POST"}) + */ + public function solicitudesAntiguedadIndexAction(){ + + $servicio = $this->getDoctrine()->getRepository('AppBundle:DocenteServicio')->findOneByIdRolInstitucion($this->getUser()->getIdRolInstitucion()); + + if(!$servicio){ + return $this->render('solicitudes/reconocimiento_antiguedad.html.twig'); + }else{ + $this->addFlash('notice', 'Ya usted ha realizado la solicitud de reconocimiento de antiguedad.'); + return $this->redirect($this->generateUrl('servicios_index')); + } + + + + } + + + /** + * Muestra la página donde explica brevemente el reconocimiento de Antiguedad + * y permite realizar la solicitud + * + * @Route("/mis_servicios/antiguedad/imprimir", name="servicio_antiguedad_imprimir") + * @Method({"GET", "POST"}) + */ + public function solicitudesAntiguedadImprimirAction(){ + + return $this->render('memorando/antiguedad.html.twig'); + + + + } + + + + + /** + * Muestra la página donde explica brevemente el reconocimiento de Antiguedad + * y permite realizar la solicitud + * + * @Route("/solicitudes/antiguedad/crear/", name="cea_crear_servicio_antiguedad") + * @Method({"GET", "POST"}) + */ + public function solicitudesAntiguedadCrearAction(){ + + $servicios = new DocenteServicio(); + + $servicios->setIdRolInstitucion($this->getUser()->getIdRolInstitucion()); + $servicios->setIdServicioCe($this->getDoctrine()->getRepository('AppBundle:ServiciosCe')->findOneById(1)); + $servicios->setIdEstatus($this->getDoctrine()->getRepository('AppBundle:estatus')->findOneById(2)); + + $em = $this->getDoctrine()->getManager(); + $em->persist($servicios); + $em->flush(); + + $this->addFlash('notice', 'Solicitud Creada Correctamente, en lo que la solicitud sea aprobada, se le notificará por correo.'); + + return $this->render('solicitudes/reconocimiento_antiguedad.html.twig'); + + } + + + } \ No newline at end of file diff --git a/src/AppBundle/Entity/Adscripcion.php b/src/AppBundle/Entity/Adscripcion.php index cd4d515..e85a071 100644 --- a/src/AppBundle/Entity/Adscripcion.php +++ b/src/AppBundle/Entity/Adscripcion.php @@ -22,7 +22,7 @@ use Doctrine\Common\Collections\ArrayCollection; class Adscripcion { - /** + /** * @var integer * * @ORM\Column(name="id", type="integer", nullable=false, options={"comment" = "Identificador de la Adscripcion"}) diff --git a/src/AppBundle/Entity/DocenteServicio.php b/src/AppBundle/Entity/DocenteServicio.php new file mode 100644 index 0000000..188faf8 --- /dev/null +++ b/src/AppBundle/Entity/DocenteServicio.php @@ -0,0 +1,194 @@ +. + */ + +namespace AppBundle\Entity; +use Doctrine\ORM\Mapping as ORM; +use Symfony\Component\Validator\Constraints as Assert; + +/** + * DocenteServicio + * + * @ORM\Table(name="docente_servicio", uniqueConstraints={@ORM\UniqueConstraint(name="docente_servicio_id_rol_institucion_key", columns={"id_rol_institucion"})}) + * @ORM\Entity + * @ORM\HasLifecycleCallbacks() + */ +class DocenteServicio { + + /** + * @var integer + * + * @ORM\Column(name="id", type="integer", nullable=false, options={"comment" = "Identificador de la Adscripcion"}) + * @ORM\Id + * @ORM\GeneratedValue(strategy="IDENTITY") + * @ORM\SequenceGenerator(sequenceName="adscripcion_id_seq", allocationSize=1, initialValue=1) + */ + private $id; + + + + /** + * @var \AppBundle\Entity\RolInstitucion + * + * @ORM\ManyToOne(targetEntity="AppBundle\Entity\RolInstitucion") + * @ORM\JoinColumns({ + * @ORM\JoinColumn(name="id_rol_institucion", referencedColumnName="id", nullable=false) + * }) + */ + protected $idRolInstitucion; + + + /** + * @var \AppBundle\Entity\ServiciosCe + * + * @ORM\ManyToOne(targetEntity="AppBundle\Entity\ServiciosCe") + * @ORM\JoinColumns({ + * @ORM\JoinColumn(name="id_servicio_ce", referencedColumnName="id", nullable=false) + * }) + */ + protected $idServicioCe; + + /** @ORM\Column(type="date", nullable=false, options={"comment" = "Fecha de creación de la solicitud"}) + /** + * @Assert\Date() + */ + private $fecha_solicitud; + + /** @ORM\Column(type="date", nullable=false, options={"comment" = "Fecha de actualizada la solicitud"}) + /** + * @Assert\Date() + */ + private $fecha_ultima_actualizacion; + + + /** + * @var \AppBundle\Entity\Estatus + * + * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Estatus") + * @ORM\JoinColumns({ + * @ORM\JoinColumn(name="id_estatus", referencedColumnName="id", nullable=false) + * }) + */ + protected $idEstatus; + + + /** + * Get id + * + * @return integer + */ + public function getId() + { + return $this->id; + } + + + /** + * Set idRolInstitucion + * + * @param \AppBundle\Entity\RolInstitucion $idRolInstitucion + * @return Usuarios + */ + public function setIdRolInstitucion(\AppBundle\Entity\RolInstitucion $idRolInstitucion = null) + { + $this->idRolInstitucion = $idRolInstitucion; + + return $this; + } + + /** + * Get idRolInstitucion + * + * @return \AppBundle\Entity\RolInstitucion + */ + public function getIdRolInstitucion() + { + return $this->idRolInstitucion; + } + + + /** + * @ORM\PrePersist + */ + public function setFechaSolicitud() + { + $this->fecha_solicitud = new \DateTime(); + $this->fecha_ultima_actualizacion = new \DateTime(); + } + + public function getFechaSolicitud() + { + return $this->fecha_solicitud; + } + + /** + * @ORM\PreUpdate + */ + public function setFechaUltimaActualizacion() + { + $this->fecha_utlima_actualizacion = new \DateTime(); + } + + + /** + * Set idEstatus + * + * @param \AppBundle\Entity\Estatus $idEstatus + * @return Estatus + */ + public function setIdEstatus(\AppBundle\Entity\Estatus $idEstatus = null) + { + $this->idEstatus = $idEstatus; + + return $this; + } + + /** + * Get idEstatus + * + * @return \AppBundle\Entity\Estatus + */ + public function getIdEstatus() + { + return $this->idEstatus; + } + + + /** + * Set $idServicioCe + * + * @param \AppBundle\Entity\ServiciosCe $idEstatus + * @return ServicioCe + */ + public function setIdServicioCe(\AppBundle\Entity\ServiciosCe $idServicioCe = null) + { + $this->idServicioCe = $idServicioCe; + + return $this; + } + + /** + * Get $idServicioCe + * + * @return \AppBundle\Entity\ServiciosCe + */ + public function getIdServicioCe() + { + return $this->idServicioCe; + } +} diff --git a/src/AppBundle/Entity/ServiciosCe.php b/src/AppBundle/Entity/ServiciosCe.php new file mode 100644 index 0000000..c49040e --- /dev/null +++ b/src/AppBundle/Entity/ServiciosCe.php @@ -0,0 +1,117 @@ +. + */ + +namespace AppBundle\Entity; + +use Doctrine\ORM\Mapping as ORM; + +/** + * Description of ServiciosCe + * + * @author ubv-cipee + * @ORM\Table(name="servicios_ce", uniqueConstraints={@ORM\UniqueConstraint(name="uq_servjcios_ce", columns={"nombre"})}, indexes={@ORM\Index(name="fki_centro_estudio_servicios", columns={"id_centro_estudio"})}) + * @ORM\Entity + */ +class ServiciosCe { + + /** + * @var string + * + * @ORM\Column(name="nombre", type="string", length=100, nullable=false, options={"comment" = "Nombre del servicio prestado por el Centro de Estudios"}) + */ + private $nombre; + + /** + * @var integer + * + * @ORM\Column(name="id", type="integer", nullable=false, options={"comment" = "Identificador del servicio"}) + * @ORM\Id + * @ORM\GeneratedValue(strategy="IDENTITY") + * @ORM\SequenceGenerator(sequenceName="servicio_id_seq", allocationSize=1, initialValue=1) + */ + private $id; + + /** + * @var \AppBundle\Entity\CentroEstudios + * + * @ORM\ManyToOne(targetEntity="AppBundle\Entity\CentroEstudios") + * @ORM\JoinColumns({ + * @ORM\JoinColumn(name="id_centro_estudio", referencedColumnName="id", nullable=false) + * }) + */ + private $idCentroEstudio; + + + /** + * Set nombre + * + * @param string $nombre + * @return ServiciosCe + */ + public function setNombre($nombre) + { + $this->nombre = $nombre; + + return $this; + } + + /** + * Get nombre + * + * @return string + */ + public function getNombre() + { + return $this->nombre; + } + + + /** + * Get id + * + * @return integer + */ + public function getId() + { + return $this->id; + } + + /** + * Set idCentroEstudio + * + * @param \AppBundle\Entity\CentroEstudios $idEstado + * @return CentroEstudios + */ + public function setIdEstado(\AppBundle\Entity\CentroEstudios $idCentroEstudio = null) + { + $this->idCentroEstudio = $idCentroEstudio; + + return $this; + } + + /** + * Get idCentroEstudio + * + * @return \AppBundle\Entity\CentroEstudios + */ + public function getIdCentroEstudio() + { + return $this->idCentroEstudio; + } +}