<?php
namespace App\Controller\Admin;
use DateTime;
use App\Entity\Boleta;
use App\Entity\Empresa;
use App\Entity\Concepto;
use App\Entity\Empleado;
use App\Entity\Familiar;
use App\Entity\Sucursal;
use App\Form\EmpleadoType;
use App\Entity\Observacion;
use App\Entity\DatosSindicato;
use App\Entity\EmpleadoBoleta;
use App\Form\EmpleadoBajaType;
use App\Controller\ServiceController;
use App\Repository\EmpleadoRepository;
use App\Entity\EmpleadoEmpresaSucursal;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Filesystem\Filesystem;
use App\Controller\QrCodeGeneratorController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use App\Controller\Admin\Empleado\EmpleadoEmpresaSucursalController;
#[Route('/panel/admin/empleado')]
class EmpleadoController extends AbstractController
{
public function __construct(){
date_default_timezone_set("America/Buenos_Aires");
}
/**
* @return string
*/
public function generateUniqueFileName()
{
return md5(uniqid());
}
public function verificarEstadoEmpleado($empleado,$em)
{
$arrayEstado = Array();
$estado = 'Afiliado';
$mensaje_qr = 'El trabajador esta afiliado. Goza de los beneficios.';
$mensaje = 'El trabajador esta afiliado con empresa.';
$color = 'primary';
//Baja
if($empleado->getIsActive() != true){
$estado = 'Baja';
$mensaje_qr = 'El trabajador fue dado de baja.';
$mensaje = 'El trabajador fue dado de baja. No puede operar en el sistema.';
$color = 'danger';
}else{
//Afiliado
if($empleado->getAfiliado() != true){
$estado = 'Sin Afiliar';
$mensaje_qr = 'El trabajador esta Sin Afiliar por lo cual no goza de beneficios.';
$mensaje = 'El Trabajador esta Sin Afiliar por lo cual no goza de algunos beneficios. Es posible que lo haya cargado un contador y nunca fue a afiliarse. ';
$color = 'secondary';
}else{
//empresa o sucursal
$sucursalesEmpleado = $em->getRepository(EmpleadoEmpresaSucursal::class)->findBy(array(
'empleado' => $empleado,
'isActive' => true
));
//si no encontro la empresa
if(!$sucursalesEmpleado){
$estado = 'Sin Empresa';
$mensaje_qr = 'El trabajador esta afiliado, falta que le asignen la empresa donde trabaja.';
$mensaje = 'El trabajador esta afiliado pero no tiene empresa asignada. Es posible que no le estén aportando. Debería de Estar des-afiliado e Inactivo';
$color = 'primary';
}else{
//encontro al menos 1
foreach($sucursalesEmpleado as $empleadoSucursal){
//si no tiene sucursal
if($empleadoSucursal->getSucursal() == null){
$estado = 'Afiliado (Sin Sucursal) ';
$mensaje_qr = 'El trabajador esta afiliado, falta que le asignen la sucursal donde trabaja.';
$mensaje = 'El trabajador esta afiliado pero esta sin sucursal asignada. Es posible que no le estén aportando correctamente.';
$color = 'primary';
}
}
}
}
}
// <!-- pregunto cuando fue la ultima vez que cobro -->
// {% if ultimoCobro != false %}
// <!-- veo si hace mas de dos meses que no aporta. 61 dias son dos meses pero cuenta 3 -->
// {% set modify = '61' %}
// {% set date = "now"|date("m/d/Y") %}
// {% set date2 = date|date_modify("-" ~ modify ~ " day")|date("m/01/Y") %}
// {% if ultimoCobro|date('U') < date2|date('U') %}
// <div class="alert alert-danger" role="alert">IMPORTANTE! El trabajador NO tiene el ultimo periodo aportando. La ultima boleta que figura paga es del periodo {{ ultimoCobro ? ultimoCobro|date('m-Y') : '' }}. Controle los periodos entrando en COBROS, puede ser que el empleador no este aportando al sindicato. </div>
// {% endif %}
// {% else %}
// <div class="alert alert-danger" role="alert">El trabajador no tienen ningún pago. O al menos la empresa no le esta aportando al sindicato. </div>
// {% endif %}
$arrayEstado[]=[
'estado' => $estado,
'mensaje_qr' => $mensaje_qr,
'mensaje' => $mensaje,
'color' => $color
];
return $arrayEstado;
}
function edad($fecha_nacimiento)
{
if($fecha_nacimiento != null){
$ahora = new DateTime("now");
$diferencia = $ahora->diff($fecha_nacimiento);
$anios = $diferencia->format("%y");
}else{
$anios = null;
}
return $anios;
}
function getArraySucursalesEmpleado($empleado,$em,$EmpleadoEmpresaSucursalController)
{
$arraySucursales = Array();
$sucursalesEmpleado = $em->getRepository(EmpleadoEmpresaSucursal::class)->findBy(array(
'empleado' => $empleado,
'isActive' => true
));
foreach($sucursalesEmpleado as $sucursalEmpleado){
array_push($arraySucursales,$EmpleadoEmpresaSucursalController->getEmpleadoEmpresa($sucursalEmpleado));
}
return $arraySucursales;
}
function getConceptosDesvinculados($empleado)
{
$arrayConceptos = Array();
foreach($empleado->getConcepto() as $concepto){
$arrayConceptos[]=[
'id' => $concepto->getId(),
'nombre' => $concepto->getNombre(),
];
}
return $arrayConceptos;
}
public function getArrayEmpleado($empleado,$em,$EmpleadoEmpresaSucursalController)
{
if($empleado->getUserCargo() != null){
$userCargo = $empleado->getUserCargo()->getNombre().' '.$empleado->getUserCargo()->getApellido();
}else{
$userCargo = null;
}
if($empleado->getLocalidad() != null){
$localidad = $empleado->getLocalidad()->getNombre();
}else{
$localidad = null;
}
$arrayEmpleado = Array();
$arrayEmpleado[]=[
'id' => $empleado->getId(),
'nombre' => $empleado->getNombre(),
'apellido' =>$empleado->getApellido(),
'dni' =>$empleado->getDni(),
'cuil' =>$empleado->getCuil(),
'sexo' =>$empleado->getSexo(),
'foto' => $empleado->getFoto(),
'email' => $empleado->getEmail(),
'telefono' => $empleado->getTelefono(),
'domicilio' => $empleado->getDomicilio(),
'localidad' => $localidad,
'provincia' => $empleado->getProvincia(),
'nacionalidad' => $empleado->getNacionalidad(),
'estadoCivil' => $empleado->getEstadoCivil(),
'afiliado' => $empleado->getAfiliado(),
'horasTrabajadasDeclaradaPorEmpleado' => $empleado->getHorasTrabajadasDeclaradaPorEmpleado(),
'harina' => $empleado->getHarina(),
'caja' => $empleado->getCaja(),
'otra_obra_social' => $empleado->getOtraObraSocial(),
'fecha_alta' => $empleado->getFechaAltaAfip(),
'fecha_ingreso_sindicato' => $empleado->getFechaIngresoSindicato(),
'fecha_nacimiento' => $empleado->getFechaNacimiento(),
'edad' => $this->edad($empleado->getFechaNacimiento()),
'fecha_limite_obra_social' => $empleado->getFechaLimiteObraSocial(),
'fecha_limite_mutual' => $empleado->getFechaLimiteMutual(),
'fecha_register' => $empleado->getFechaRegister(),
'fecha_ingreso_trabajar' => $empleado->getFechaIngresoTrabajar(),
'fecha_alta_temprana' => $empleado->getFechaAltaTemprana(),
'isActive' => $empleado->getIsActive(),
'estado' => $this->verificarEstadoEmpleado($empleado,$em),
'userCargo' => $userCargo,
'arraySucursales' => $this->getArraySucursalesEmpleado($empleado,$em,$EmpleadoEmpresaSucursalController),
'arrayConceptos' => $this->getConceptosDesvinculados($empleado),
];
return $arrayEmpleado;
}
#[Route('/', name: 'app_empleado_index', methods: ['GET'])]
public function index(EmpleadoRepository $empleadoRepository, EntityManagerInterface $em): Response
{
$arrayEmpleados = Array();
foreach($empleadoRepository->findAll() as $empleado){
$arrayEmpleados[]=[
'id' => $empleado->getId(),
'nombre' => $empleado->getApellido().' '.$empleado->getNombre(),
'cuil' =>$empleado->getCuil(),
'estado' => $this->verificarEstadoEmpleado($empleado,$em),
];
}
return $this->render('consola/panel_admin/empleado/index.html.twig', [
'arrayEmpleados' => $arrayEmpleados,
]);
}
//INFORMES
#[Route('/informe/menu', name: 'empleado_informe_menu')]
public function informe_menu(): Response
{
return $this->render('consola/panel_admin/empleado/informes/menu.html.twig');
}
#[Route('/informe/general', name: 'empleado_informe_general', methods: ['GET'])]
public function informeGeneral(EmpleadoRepository $empleadoRepository,EmpleadoEmpresaSucursalController $EmpleadoEmpresaSucursalController,EntityManagerInterface $em): Response
{
$arrayEmpleados = Array();
foreach($empleadoRepository->findAll() as $empleado){
array_push($arrayEmpleados,$this->getArrayEmpleado($empleado,$em,$EmpleadoEmpresaSucursalController));
}
return $this->render('consola/panel_admin/empleado/informes/empleados.html.twig', [
'arrayEmpleados' => $arrayEmpleados,
]);
}
#[Route('/informe/edades', name: 'empleado_informe_edades', methods: ['GET','POST'])]
public function informeEdades(Request $request,EntityManagerInterface $em): Response
{
$arrayFamiliares = Array();
//pregunto si hay envio
if (isset($_GET['Buscar']))
{
$desde = $request->get("desde");
$hasta = $request->get("hasta");
}else{
$desde = 17;
$hasta = 15;
}
if($desde >= $hasta){
//fecha mas vieja 17
$anio = date("Y") - $desde;
$fechaDesde = $anio.'-01-01';
$fechaDesde =\DateTime::createFromFormat('Y-m-d', $fechaDesde);
//15
$anioHasta = date("Y") - $hasta;
$fechaHasta = $anioHasta.'-12-31';
$fechaHasta =\DateTime::createFromFormat('Y-m-d', $fechaHasta);
$familiares = $em->getRepository(Familiar::class)->findByEdades($fechaDesde,$fechaHasta);
foreach($familiares as $familiar){
//tiene que estar afiliado y activo el titular
if($familiar->getEmpleado()->getIsActive() == true AND $familiar->getEmpleado()->getAfiliado() == true){
$arrayFamiliares[]=[
'id' => $familiar->getId(),
'nombre' => $familiar->getApellido().' '.$familiar->getNombre(),
'fecha_nacimiento' => $familiar->getFechaNacimiento(),
'edad' => $this->edad($familiar->getFechaNacimiento()),
'dni' => $familiar->getDni(),
];
}
}
}else{
//error
$this->addFlash('notice', array(
'type' => 'danger',
'title' => 'Error!',
'message' => 'El año desde debe ser menor que el año hasta.'
));
}
return $this->render('consola/panel_admin/empleado/informes/edades.html.twig', [
'arrayFamiliares' => $arrayFamiliares,
'desde' => $desde,
'hasta' => $hasta,
]);
}
#[Route('/informe/afiliados-y-familiares', name: 'empleado_informe_afiliados_familiares', methods: ['GET'])]
public function informeAfiliadosFamiliares(EntityManagerInterface $em): Response
{
$arrayEmpleadosFamiliares = Array();
$empleados = $em->getRepository(Empleado::class)->findBy(array(
'isActive' => true,
'afiliado' => true
));
foreach($empleados as $empleado){
$empresaSucursal = $em->getRepository(EmpleadoEmpresaSucursal::class)->findBy(array(
'empleado' => $empleado,
'isActive' => true
));
//pregunto si tiene empresa asignada
if($empresaSucursal){
//guardo
$arrayEmpleadosFamiliares[]=[
'nombre' => $empleado->getApellido().' '.$empleado->getNombre(),
'dni' => $empleado->getDni(),
'rol' => 'TITULAR',
'estado' => 'ACTIVO',
];
//saco los familiares
$familiares = $em->getRepository(Familiar::class)->findBy(array(
'isActive' => true,
'empleado' => $empleado
));
foreach($familiares as $familiar){
$arrayEmpleadosFamiliares[]=[
'nombre' => $familiar->getApellido().' '.$familiar->getNombre(),
'dni' => $familiar->getDni(),
'rol' => 'FAMILIAR',
'estado' => 'ACTIVO',
];
}
}
}
return $this->render('consola/panel_admin/empleado/informes/empleadosFamiliares.html.twig', [
'arrayEmpleadosFamiliares' => $arrayEmpleadosFamiliares,
]);
}
//FIN INFORMES
#[Route('/{id}/menu', name: 'empleado_menu', methods: ['GET'])]
public function menu(Empleado $empleado,EntityManagerInterface $em): Response
{
$arrayEmpleado = Array();
$arrayEmpleado[]=[
'id' => $empleado->getId(),
'nombre' => $empleado->getNombre().' '.$empleado->getApellido(),
'isActive' =>$empleado->getIsActive(),
'afiliado' =>$empleado->getAfiliado(),
'estado' => $this->verificarEstadoEmpleado($empleado,$em),
];
return $this->render('consola/panel_admin/empleado/menu.html.twig', [
'empleado' => $arrayEmpleado,
]);
}
#[Route('/{id}/carnet', name: 'empleado_carnet', methods: ['GET'])]
public function carnet(Empleado $empleado,QrCodeGeneratorController $QrCodeGeneratorController,EntityManagerInterface $em): Response
{
// if($empleado->getAfiliado() == true){
// if($empleado->getEmpresa() != null and $empleado->getSucursal() != null){
$datoSindicato = $em->getRepository(DatosSindicato::class)->find(1);
$infoMostrar = Array();
$infoMostrar[]=[
'nombreCarne' => $datoSindicato->getNombreCarnet(),
'domicilio' => $datoSindicato->getDomicilio(),
'telefono' => $datoSindicato->getTelefono(),
'cuit' => $datoSindicato->getCuit(),
'nombreSecretarioGeneral' => $datoSindicato->getNombreSecretarioGeneral(),
'nombre' => $empleado->getNombre(),
'apellido' => $empleado->getApellido(),
'foto' =>$empleado->getFoto(),
'dni' =>$empleado->getDni(),
'titular' => null,
];
return $this->render('consola/panel_admin/empleado/imprimir/carnet.html.twig', [
'infoMostrar' => $infoMostrar,
'codigo_qr' => $QrCodeGeneratorController->getQrEmpleado($empleado->getDni()),
]);
// }else{
// //mensaje Flash
// $this->addFlash('notice', array(
// 'type' => 'danger',
// 'title' => 'ERROR!',
// 'message' => 'No se puede imprimir el carnet porque debe tener una empresa asignada y la sucursal en la que trabaja.'
// ));
// }
// }else{
// //mensaje Flash
// $this->addFlash('notice', array(
// 'type' => 'danger',
// 'title' => 'ERROR!',
// 'message' => 'No se puede imprimir el carnet porque no figura como afiliado. Debe afiliarse primero.'
// ));
// }
// return $this->redirectToRoute('empleado_menu', [
// 'id' => $empleado->getId(),
// ]);
}
#[Route('/imprimir/ficha/{id}', name: 'empleado_imprimir_ficha', methods: ['GET'])]
public function imprimirFicha(Empleado $empleado,EmpleadoEmpresaSucursalController $EmpleadoEmpresaSucursalController,EntityManagerInterface $em): Response
{
if($empleado->getAfiliado() == true){
//FAMILIARES
$familiares = $em->getRepository(Familiar::class)->findBy(array(
'empleado' => $empleado
));
$arrayFamiliares = Array();
foreach($familiares as $familiar){
$arrayFamiliares[]=[
'nombre' => $familiar->getNombre().' '.$familiar->getApellido(),
'parentesco' => $familiar->getParentesco(),
];
}
//fin familiares
$datoSindicato = $em->getRepository(DatosSindicato::class)->find(1);
$infoMostrar = Array();
$infoMostrar[]=[
'nombre' => $datoSindicato->getNombre(),
'personeriaGremial' => $datoSindicato->getPersoneriaGremial(),
'domicilio' => $datoSindicato->getDomicilio(),
'localidad' => $datoSindicato->getLocalidad(),
'telefono' => $datoSindicato->getTelefono(),
'cuit' => $datoSindicato->getCuit(),
'nombreSecretarioGeneral' => $datoSindicato->getNombreSecretarioGeneral(),
'empleado' => $this->getArrayEmpleado($empleado,$em,$EmpleadoEmpresaSucursalController),
'familiares' =>$arrayFamiliares,
];
return $this->render('consola/panel_admin/empleado/imprimir/ficha.html.twig', [
'infoMostrar' => $infoMostrar
]);
}else{
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'danger',
'title' => 'ERROR!',
'message' => 'No se puede imprimir el carnet porque no figura como afiliado. Debe afiliarse primero.'
));
}
return $this->redirectToRoute('empleado_menu', [
'id' => $empleado->getId(),
]);
}
#[Route('/new', name: 'app_empleado_new', methods: ['GET', 'POST'])]
public function new(Request $request, EmpleadoRepository $empleadoRepository,ServiceController $ServiceController): Response
{
$empleado = new Empleado();
$form = $this->createForm(EmpleadoType::class, $empleado);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$empleado->setNombre($ServiceController->PrimeraLetraMayuscula($empleado->getNombre()));
$empleado->setApellido($ServiceController->PrimeraLetraMayuscula($empleado->getApellido()));
//foto
$file = $form->get('foto')->getData();
if ($file) {
$fileName = $this->generateUniqueFileName().'.'.$file->guessExtension();
try {
$file->move($this->getParameter('directory_empleado_img'),$fileName);
} catch (FileException $e) {
}
$empleado->setFoto($fileName);
}
$empleado->setAfiliado(true);
$empleado->setFechaIngresoSindicato(new \DateTime('now'));
$empleado->setIsActive(true);
$empleado->setUserCargo($this->getUser());
$empleado->setFechaRegister(new \DateTime('now'));
$empleadoRepository->add($empleado);
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'success',
'title' => 'FELICITACIONES!',
'message' => 'He creado un nuevo Empleado. Debe seleccionar la empresa y sucursal en la que trabaja.'
));
return $this->redirectToRoute('empleado_seleccionar_empresa', [
'id' => $empleado->getId(),
], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('consola/panel_admin/empleado/new.html.twig', [
'empleado' => $empleado,
'form' => $form,
]);
}
#[Route('/{id}', name: 'app_empleado_show', methods: ['GET'])]
public function show(Empleado $empleado,EmpleadoEmpresaSucursalController $EmpleadoEmpresaSucursalController,EntityManagerInterface $em): Response
{
return $this->render('consola/panel_admin/empleado/show.html.twig', [
'empleado' => $this->getArrayEmpleado($empleado,$em,$EmpleadoEmpresaSucursalController),
]);
}
#[Route('/{id}/edit', name: 'app_empleado_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, Empleado $empleado, EmpleadoRepository $empleadoRepository,ServiceController $ServiceController): Response
{
//foto
$img = $empleado->getFoto();
if($img != NULL){
$empleado->setFoto(
new File($this->getParameter('directory_empleado_img').'/'.$empleado->getFoto())
);
}
//fin foto
$form = $this->createForm(EmpleadoType::class, $empleado);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$empleado->setNombre($ServiceController->PrimeraLetraMayuscula($empleado->getNombre()));
$empleado->setApellido($ServiceController->PrimeraLetraMayuscula($empleado->getApellido()));
//foto
$file = $form->get('foto')->getData();
if ($file) {
//borro
if($img != NULL){
$filesystem = new Filesystem();
$ruta=$this->getParameter('directory_empleado_img').'/'.$img;
$filesystem->remove($ruta);
}
$fileName = $this->generateUniqueFileName().'.'.$file->guessExtension();
try {
$file->move($this->getParameter('directory_empleado_img'),$fileName);
} catch (FileException $e) {
}
$empleado->setFoto($fileName);
}else{
//es igual a null, dejo lo que esta.
if($img != NULL){
$empleado->setFoto($img);
}
}
$empleadoRepository->add($empleado);
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'success',
'title' => 'MODIFICADO!',
'message' => 'Se actualizaron los datos del empleado.'
));
return $this->redirectToRoute('app_empleado_show', [
'id' => $empleado->getId()
], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('consola/panel_admin/empleado/edit.html.twig', [
'empleado' => $empleado,
'form' => $form,
]);
}
#[Route('/{id}/seleccionar-empresa-sucursal', name: 'empleado_seleccionar_empresa',methods: ['GET', 'POST'])]
public function seleccionarEmpresa(Request $request, Empleado $empleado, EntityManagerInterface $entityManager): Response
{
//solo las que estan aprobadas
$empresas = $entityManager->getRepository(Empresa::class)->findBy(array(
'enabled' => true
));
$arrayEmpresas = Array();
foreach($empresas as $empresa){
$arrayEmpresas[]=[
'id' => $empresa->getId(),
'razonSocial' => $empresa->getRazonSocial(),
'cuit' => $empresa->getCuit(),
'localidad' => $empresa->getLocalidad()->getNombre(),
'nombreFantasia' => $empresa->getNombreFantasia(),
];
}
return $this->render('consola/panel_admin/empleado/empresa_sucursal/empresa/index.html.twig', [
'empresas' => $arrayEmpresas,
'empleado_id' => $empleado->getId(),
'empleado_nombre' => $empleado->getNombre().' '.$empleado->getApellido(),
]);
}
#[Route('/{id}/baja', name: 'empleado_baja',methods: ['GET', 'POST'])]
public function baja(Request $request, Empleado $empleado, EmpleadoRepository $empleadoRepository, EntityManagerInterface $entityManager): Response
{
$empleado->setMotivo(null);
$form = $this->createForm(EmpleadoBajaType::class, $empleado);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$empleado->setIsActive(false);
$empleado->setAfiliado(false);
$empleadoRepository->add($empleado);
//lo desvinculo de las empresas
$empleadoEmpresas = $entityManager->getRepository(EmpleadoEmpresaSucursal::class)->findBy(array(
'empleado' => $empleado
));
foreach($empleadoEmpresas as $empleadoEmpresa){
$entityManager->remove($empleadoEmpresa);
$entityManager->flush();
}
$alta = null;
if($empleado->getFechaIngresoSindicato() != null){
$alta = $empleado->getFechaIngresoSindicato()->format("d-m-Y");
}
$mensaje = 'Se le dio la baja al empleado (desde: '.$alta.' - hasta: '.$empleado->getFechaBaja()->format("d-m-Y").'). Motivo: '.$empleado->getMotivo();
//creo una observacion
$observacion = new Observacion();
$observacion->setFecha(new \DateTime("now"));
$observacion->setTexto($mensaje);
$observacion->setEmpleado($empleado);
$observacion->setPrivada(false);
$observacion->setUserCargo($this->getUser());
$entityManager->persist($observacion);
$entityManager->flush();
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'success',
'title' => 'BAJA!',
'message' => 'Se le dio la baja al empleado.'
));
return $this->redirectToRoute('empleado_menu', [
'id' => $empleado->getId()
], Response::HTTP_SEE_OTHER);
}
return $this->render('consola/panel_admin/empleado/baja.html.twig', [
'empleado_id' => $empleado->getId(),
'empleado_nombre' => $empleado->getNombre().' '.$empleado->getApellido(),
'form' => $form->createView(),
]);
}
#[Route('/{id}/familia', name: 'empleado_familiares', methods: ['GET'])]
public function empleadoFamiliares(Empleado $empleado): Response
{
$arrayFamiliares = Array();
foreach($empleado->getFamiliars() as $familiar){
$arrayFamiliares[]=[
'id' => $familiar->getId(),
'nombre' => $familiar->getNombre().' '.$familiar->getApellido(),
'dni' => $familiar->getDni(),
'foto' => $familiar->getFoto(),
'nombreEmpleado' => $familiar->getEmpleado()->getNombre().' '.$familiar->getEmpleado()->getApellido(),
'estado' => $familiar->getIsActive(),
'parentesco' => $familiar->getParentesco(),
];
}
return $this->render('consola/panel_admin/empleado/familiar/empleado_familiares.html.twig', [
'arrayFamiliares' => $arrayFamiliares,
'empleado_id' => $empleado->getId(),
'empleado_nombre' => $empleado->getNombre().' '.$empleado->getApellido(),
]);
}
#[Route('/{id}/cobros', name: 'empleado_cobros', methods: ['GET'])]
public function empleadoCobros(Empleado $empleado, EntityManagerInterface $em): Response
{
//$EmpleadoBoletas = $em->getRepository(EmpleadoBoleta::class)->findBybuscarBoletasPagasDelAfiliado($empleado->getId());
$empleadoBoletas = $em->getRepository(EmpleadoBoleta::class)->findBy(array(
'empleado' => $empleado,
));
$arrayPagos = Array();
foreach($empleadoBoletas as $pago){
//si la boleta no fue dada de baja
if($pago->getBoleta()->getIsActive() == true){
if($pago->getBoleta()->getPagada() == true){
$pagada = true;
}else{
$pagada = false;
}
if($pago->getMotivoLiquidacion() != null){
$motivo = $pago->getMotivoLiquidacion()->getNombre();
}else{
$motivo = null;
}
if($pago->getAcuerdoDePago() != null){
$acuerdo = $pago->getAcuerdoDePago()->getId();
}else{
$acuerdo = null;
}
if($pago->getCargo() != null){
$cargo = $pago->getCargo()->getNombre();
}else{
$cargo = null;
}
//guardo los cambios
$arrayPagos[]=[
'id' => $pago->getId(),
'pagada' => $pagada,
'periodo' => $pago->getFechaPeriodo(),
'empresa_id' => $pago->getBoleta()->getEmpresa()->getId(),
'razonSocial' => $pago->getBoleta()->getNombreEmpresa(),
'cuit' => $pago->getBoleta()->getCuit(),
'remuneracion' => $pago->getRemuneracion(),
'aportado' => $pago->getMontoAportado(),
'horas' => $pago->getCantidadHoras(),
'cargo' => $cargo,
'motivo' => $motivo,
'acuerdo' => $acuerdo,
];
}
}
$arrayEmpleado[]=[
'id' => $empleado->getId(),
'nombre' => $empleado->getNombre().' '.$empleado->getApellido(),
];
return $this->render('consola/panel_admin/empleado/cobros/empleado_cobros.html.twig', [
'empleado' => $arrayEmpleado,
'arrayPagos' => $arrayPagos,
]);
}
/**
* @Route("/empleado-alta", name="empleado_alta", condition="request.headers.get('X-Requested-With') == 'XMLHttpRequest'")
*/
public function alta(Request $request, EntityManagerInterface $em): Response
{
$response = Array();
$id = $request->get("id");
$empleado = $em->getRepository(Empleado::class)->find($id);
if($empleado){
$empleado->setAfiliado(true);
$empleado->setIsActive(true);
$empleado->setFechaIngresoSindicato(new \DateTime("now"));
$em->persist($empleado);
$em->flush();
$mensaje = 'Se le dio el alta al empleado.';
//creo una observacion
$observacion = new Observacion();
$observacion->setFecha(new \DateTime("now"));
$observacion->setTexto($mensaje);
$observacion->setEmpleado($empleado);
$observacion->setPrivada(false);
$observacion->setUserCargo($this->getUser());
$em->persist($observacion);
$em->flush();
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'success',
'title' => 'BAJA!',
'message' => 'Se le dio la baja al empleado.'
));
$response[] = [
'status' => 'success',
'text' => 'Listo! Se le dio el alta como afiliado.',
];
}else{
$response[] = [
'status' => 'error',
'text' => 'No se encontró el empleado.',
];
}
return new JsonResponse($response);
}
/**
* @Route("/empresa/buscar_sucursales", name="buscar_sucursales", condition="request.headers.get('X-Requested-With') == 'XMLHttpRequest'")
*/
public function buscar_sucursales(Request $request, EntityManagerInterface $em): Response
{
$response = Array();
$id = $request->get("id");
$empresa = $em->getRepository(Empresa::class)->find($id);
if($empresa){
$sucursales = $em->getRepository(Sucursal::class)->findBy(array(
'empresa' => $empresa
));
if($sucursales){
$arraySucursales = Array();
foreach($sucursales as $sucursal){
if($sucursal->getIsActive() == true){
$arraySucursales[] = [
'id' => $sucursal->getId(),
'nombre' => $sucursal->getNombre().' ('.$sucursal->getDireccion().' - .'.$sucursal->getLocalidad()->getNombre().')',
];
}
}
$response[] = [
'status' => 'success',
'sucursales' => $arraySucursales,
];
}else{
$response[] = [
'status' => 'error',
'text' => 'No puede vincularse porque la empresa debe tener al menos una sucursal declarada.',
];
}
}else{
$response[] = [
'status' => 'error',
'text' => 'No se encontro la empresa.',
];
}
return new JsonResponse($response);
}
/**
* @Route("/empresa/sucursal-vincular", name="vincular_empleado_sucursal", condition="request.headers.get('X-Requested-With') == 'XMLHttpRequest'")
*/
public function vincularEmpleadoEmpresa(Request $request, EntityManagerInterface $em): Response
{
$response = Array();
$sucursal_id = $request->get("sucursal_id");
$empleado_id = $request->get("empleado_id");
$sucursal = $em->getRepository(Sucursal::class)->find($sucursal_id);
if($sucursal){
$empleado = $em->getRepository(Empleado::class)->find($empleado_id);
if($empleado){
//creo una vinculacion nueva
$empleadoSucursal = new EmpleadoEmpresaSucursal();
$empleadoSucursal->setEmpleado($empleado);
$empleadoSucursal->setEmpresa($sucursal->getEmpresa());
$empleadoSucursal->setSucursal($sucursal);
$empleadoSucursal->setUserCargo($this->getUser());
$em->persist($empleadoSucursal);
$em->flush();
$response[] = [
'status' => 'success',
'text' => 'Listo! Hemos vinculado con la sucursal.',
'id' => $empleadoSucursal->getId(),
];
}else{
$response[] = [
'status' => 'error',
'text' => 'Hubo un problema con los datos del empleado.',
];
}
}else{
$response[] = [
'status' => 'error',
'text' => 'No se encontró la sucursal.',
];
}
return new JsonResponse($response);
}
#[Route('/historial/boletas/general', name: 'historial_empleados_boletas_general',methods: ['GET', 'POST'])]
public function historialEmpleadoBoletasGeneral(Request $request, EntityManagerInterface $em): Response
{
$resultado='';
$empleadosBoletas = '';
//pregunto si hay envio
if (isset($_GET['Buscar']) and $_GET['fechaDesde'] <> '' and $_GET['fechaHasta'] <> '')
{
$orden=$request->get("orden");
$escala = $request->get("escala");
$filtroPago = $request->get("filtro");
//paso a datetime
$desde=$request->get("fechaDesde");
$hasta=$request->get("fechaHasta");
$desdeTime =\DateTime::createFromFormat('Y-m-d', $desde);
$hastaTime =\DateTime::createFromFormat('Y-m-d', $hasta);
//Escala salarial todos
if ($escala == 'todos')
{
//todos, por debajo y arriba de la escala y
if ($filtroPago != 'todas')
{ //hay filtro
//pongo si es paga o impaga
if ($filtroPago != 'impagas'){
//$pagaImpaga = 'Pagas';
$filtroPagoPasar = true;
}else{
//$pagaImpaga = 'Impagas';
$filtroPagoPasar = false;
}
if ($orden != 'fechaDePago')
{
//POR PERIODO
$empleadosBoletas = $em->getRepository(EmpleadoBoleta::class)->findByEntreFechasPeriodo($desdeTime,$hastaTime,$filtroPagoPasar);
}else{
//FECHA DE PAGO
$empleadosBoletas = $em->getRepository(EmpleadoBoleta::class)->findByEntreFechasPorFechaPagos($desdeTime,$hastaTime,$filtroPagoPasar);
}
}else{
//TODAS pagas e impagas
if ($orden == 'fechaDePago')
{
//FECHA DE PAGO
$empleadosBoletas = $em->getRepository(EmpleadoBoleta::class)->findByEntreFechasPorFechaPagosPagasImpagas($desdeTime,$hastaTime);
}else{
//POR PERIODO
$empleadosBoletas = $em->getRepository(EmpleadoBoleta::class)->findByEntreFechasPeriodoPagasImpagasSinConcepto($desdeTime,$hastaTime);
}
}
}else{
//POR DEBAJO DE LA ESCALA SALARIAL
if ($filtroPago != 'todas')
{
//SELECCIONO PAGAS O IMPAGAS
if ($filtroPago != 'impagas'){
$filtroPagoPasar = true;
}else{
$filtroPagoPasar = false;
}
if ($orden != 'fechaDePago')
{
//POR PERIODO
$empleadosBoletas = $em->getRepository(EmpleadoBoleta::class)->findByEntreFechasPeriodoEscala($desdeTime,$hastaTime,$filtroPagoPasar);
}else{
//POR FECHA DE PAGO
$empleadosBoletas = $em->getRepository(EmpleadoBoleta::class)->findByEntreFechasPorFechaPagosEscala($desdeTime,$hastaTime,$filtroPagoPasar);
}
}else{
//AMBAS PAGAS E IMPAGAS
if ($orden != 'fechaDePago')
{
//POR PERIODO
$empleadosBoletas = $em->getRepository(EmpleadoBoleta::class)->findByEntreFechasPeriodoPagasImpagasEscala($desdeTime,$hastaTime);
}else{
//no hay orden y no filtro
$empleadosBoletas = $em->getRepository(EmpleadoBoleta::class)->findByEntreFechasPorFechaPagosPagasImpagasEscala($desdeTime,$hastaTime);
}
}
}
}else{
//si no viene nada pongo las pagas del ultimo a;o
$desdeTime = new \DateTime("now");
$desdeTime->modify('-1 month');
$hastaTime = new \DateTime("now");
$orden = 'fechaDePago';
$filtroPago = 'todas';
$escala = 'todos';
$conceptoSeleccionado = 'todos';
$empleadosBoletas = $em->getRepository(EmpleadoBoleta::class)->findByEntreFechasPeriodo($desdeTime,$hastaTime,true);
$desde = $desdeTime->format("Y-m-01");
$hasta = $hastaTime->format("Y-m-01");
}
$arrayEmpleadosBoletas = Array();
if($empleadosBoletas){
foreach($empleadosBoletas as $empleadoBoleta){
//periodo boleta comun
$periodo = $empleadoBoleta->getBoleta()->getFechaPeriodo()->format("m-Y");
//si es un pago de un acuerdo no pongo el periodo por que ya esta en la boleta del acuerdo
if($empleadoBoleta->getBoleta()->getPagoAcuerdo() == null){
//si es un acuerdo de pago pongo desde y hasta
if($empleadoBoleta->getBoleta()->getAcuerdoDePago() != null){
$periodo = $empleadoBoleta->getBoleta()->getFechaPeriodo()->format("m-Y").' - '.$empleadoBoleta->getBoleta()->getFechaPeriodoHasta()->format("m-Y");
}
}
//acuerdo
$acuerdo = null;
if($empleadoBoleta->getBoleta()->getAcuerdoDePago() != null){
$acuerdo = $empleadoBoleta->getBoleta()->getAcuerdoDePago()->getId();
}
$numeroPago = null;
if($empleadoBoleta->getBoleta()->getPagoAcuerdo() != null){
die();
$numeroPago = $empleadoBoleta->getBoleta()->getPagoAcuerdo()->getNumeroPago();
}
//motivo
$motivo = null;
if($empleadoBoleta->getMotivoLiquidacion() != null){
$motivo = $empleadoBoleta->getMotivoLiquidacion()->getNombre();
}
if($empleadoBoleta->getCargo() != null){
$cargo = $empleadoBoleta->getCargo()->getNombre();
}else{
$cargo = null;
}
$arrayEmpleadosBoletas[]=[
'id' => $empleadoBoleta->getId(),
'nombre' => $empleadoBoleta->getEmpleado()->getNombre().' '.$empleadoBoleta->getEmpleado()->getApellido(),
'empleado_ID' => $empleadoBoleta->getEmpleado()->getId(),
'pagada' => $empleadoBoleta->getBoleta()->getPagada(),
'periodo' => $periodo,
'fechaDePago' => $empleadoBoleta->getBoleta()->getFechaPago()->format("d-m-Y"),
'acuerdo' => $acuerdo,
'numeroPago' => $numeroPago,
'empresa_ID' => $empleadoBoleta->getBoleta()->getEmpresa()->getId(),
'cuit' => $empleadoBoleta->getBoleta()->getCuit(),
'remuneracion' => $empleadoBoleta->getRemuneracion(),
'montoAportado' => $empleadoBoleta->getMontoAportado(),
'cantidadHoras' => $empleadoBoleta->getCantidadHoras(),
'cargo' => $cargo,
'motivo' => $motivo,
];
}
}
return $this->render('consola/panel_admin/historial/empleadosBoleta.html.twig', [
'arrayEmpleadosBoletas' => $arrayEmpleadosBoletas,
'desde' => $desde,
'hasta' => $hasta,
'ordenSeleccionado' => $orden,
'filtroPagoSeleccionado' => $filtroPago,
'escalaSeleccionada' => $escala,
]);
}
#[Route('/informe/aportantes-y-afiliados', name: 'empleado_afiliados_aportantes', methods: ['GET'])]
public function informeAfiliadosYaportantes(Request $request,EntityManagerInterface $em): Response
{
//Array general
$arrayEmpleados = Array();
$empleados = $em->getRepository(Empleado::class)->findAll();
foreach($empleados as $empleado){
$inserto = false;
//si esta afiliado entra
if($empleado->getAfiliado() == true){
$inserto = true;
}else{
//si no es afiliado busco si pago en los ultimos 6 meses
$empleadosBoletas = $em->getRepository(EmpleadoBoleta::class)->findByUltimosSeisMesesPagos($empleado->getId());
if($empleadosBoletas){
$inserto = true;
}
}
if($inserto == true){
$arrayEmpleados[]=[
'id' => $empleado->getId(),
'nombre' => $empleado->getNombre(),
'apellido' =>$empleado->getApellido(),
'dni' =>$empleado->getDni(),
'cuil' => $empleado->getCuil(),
'afiliado' => $empleado->getAfiliado(),
];
}
}
return $this->render('consola/panel_admin/empleado/informes/afiliados_y_aportantes.html.twig', [
'arrayEmpleados' => $arrayEmpleados,
]);
}
#[Route('/informe/aportantes', name: 'empleado_aportantes', methods: ['GET'])]
public function informeAportantes(Request $request,EntityManagerInterface $em): Response
{
//Array general
$arrayEmpleados = Array();
$empleados = $em->getRepository(Empleado::class)->findAll();
foreach($empleados as $empleado){
$inserto = false;
//si esta afiliado entra
if($empleado->getAfiliado() == true){
$inserto = true;
}else{
//si no es afiliado busco si pago en los ultimos 6 meses
// $empleadosBoletas = $em->getRepository(EmpleadoBoleta::class)->findByUltimosSeisMesesPagos($empleado->getId());
// if($empleadosBoletas){
// $inserto = true;
// }
}
if($inserto == true){
$arrayEmpleados[]=[
'id' => $empleado->getId(),
'nombre' => $empleado->getNombre(),
'apellido' =>$empleado->getApellido(),
'dni' =>$empleado->getDni(),
'cuil' => $empleado->getCuil(),
'afiliado' => $empleado->getAfiliado(),
];
}
}
return $this->render('consola/panel_admin/empleado/informes/afiliados_y_aportantes.html.twig', [
'arrayEmpleados' => $arrayEmpleados,
]);
}
#[Route('/informe/padron-electoral', name: 'empleado_padron_electoral', methods: ['GET'])]
public function informePadronElectoral(Request $request,EmpleadoEmpresaSucursalController $EmpleadoEmpresaSucursalController,EntityManagerInterface $em): Response
{
//Array general
$arrayEmpleados = Array();
$afiliados = $em->getRepository(Empleado::class)->findBy(array(
'afiliado' => true
));
$fechaTope =\DateTime::createFromFormat('Y-m-d H:i:s', '2025-03-31 00:00:00');
foreach($afiliados as $empleado){
//los que no tienen fecha de ingreso hay que invertarles una
if($empleado->getFechaIngresoSindicato() != null){
if($empleado->getFechaIngresoSindicato()->format('Y-m-d') < $fechaTope->format('Y-m-d')){
array_push($arrayEmpleados,$this->getArrayEmpleado($empleado,$em,$EmpleadoEmpresaSucursalController));
}
}else{
array_push($arrayEmpleados,$this->getArrayEmpleado($empleado,$em,$EmpleadoEmpresaSucursalController));
}
}
return $this->render('consola/panel_admin/empleado/informes/padron_electoral.html.twig', [
'arrayEmpleados' => $arrayEmpleados,
]);
}
}