<?php
namespace App\Controller\Contador;
use DateTime;
use App\Entity\Cargo;
use App\Entity\Empresa;
use App\Entity\Empleado;
use App\Entity\Sucursal;
use App\Form\EmpleadoType;
use App\Entity\Observacion;
use App\Form\EmpleadoContadorType;
use App\Controller\ServiceController;
use App\Repository\EmpleadoRepository;
use App\Entity\EmpleadoEmpresaSucursal;
use Doctrine\ORM\EntityManagerInterface;
use App\Form\EmpleadoEmpresaSucursalType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
#[Route('/panel/contador/empleado')]
class EmpleadoController extends AbstractController
{
public function __construct(){
date_default_timezone_set("America/Buenos_Aires");
}
#[Route('/empresa/{id}/empleados', name: 'contador_empresa_empleados', methods: ['GET','POST'])]
public function empleados(Request $request, Empresa $empresa, EntityManagerInterface $em): Response
{
if (isset($_REQUEST['Editar']))
{
$empresaEmpleados = $em->getRepository(EmpleadoEmpresaSucursal::class)->findBy(array(
'empresa' => $empresa,
'isActive' => true
));
foreach ($empresaEmpleados as $empresaEmpleado) {
//cambio la fecha y guardo una observacion
if($_REQUEST['fechaIngreso'.$empresaEmpleado->getId()]){
$fechaNueva = $_REQUEST['fechaIngreso'.$empresaEmpleado->getId()];
$fecha = DateTime::createFromFormat('Y-m-d', $fechaNueva);
//pregunto si cambio la fecha que empezó a trabajar
if($empresaEmpleado->getFechaIngresoTrabajar() != null){
if($empresaEmpleado->getFechaIngresoTrabajar()->format("Y-m-d") != $fecha->format("Y-m-d")){
//creo una observacion
$observacion = new Observacion();
$observacion->setFecha(new \DateTime("now"));
$observacion->setTexto('El contador cambio la fecha de Ingreso a trabajar '.$empresaEmpleado->getFechaIngresoTrabajar()->format("d-m-Y").' por '.$fecha->format("d-m-Y"));
$observacion->setEmpleado($empresaEmpleado->getEmpleado());
$observacion->setPrivada(false);
$observacion->setUserCargo($this->getUser());
$em->persist($observacion);
$em->flush();
//guardo
$empresaEmpleado->setFechaIngresoTrabajar($fecha);
}
}else{
//guardo
$empresaEmpleado->setFechaIngresoTrabajar($fecha);
}
}
if(is_numeric($_REQUEST['remu'.$empresaEmpleado->getId()])) {
$empresaEmpleado->setRemuneracion($_REQUEST['remu'.$empresaEmpleado->getId()]);
}
$empresaEmpleado->setHorasTrabajadas($_REQUEST['horas'.$empresaEmpleado->getId()]);
//busco el cargo
if($_REQUEST['cargo'.$empresaEmpleado->getId()] != null){
$cargo = $em->getRepository(Cargo::class)->find($_REQUEST['cargo'.$empresaEmpleado->getId()]);
$empresaEmpleado->setCargo($cargo);
}
//busco la sucursal
if($_REQUEST['sucursal'.$empresaEmpleado->getId()] != null){
$sucursal = $em->getRepository(Sucursal::class)->find($_REQUEST['sucursal'.$empresaEmpleado->getId()]);
$empresaEmpleado->setSucursal($sucursal);
}
$em->flush();
}
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'success',
'title' => 'LISTO!',
'message' => 'Se actualizaron los datos para todos los empleados. Controle que los datos sean correctos.'
));
}
//CARGOS
$cargos = $em->getRepository(Cargo::class)->findBy(array(
'isActive' => true
));
$arrayCargos = Array();
foreach($cargos as $cargo){
$arrayCargos[]=[
'id' => $cargo->getId(),
'nombre' => $cargo->getNombre(),
];
}
//SUCURSALES
$sucursales = $em->getRepository(Sucursal::class)->findBy(array(
'isActive' => true,
'empresa' => $empresa,
));
$arraySucursales = Array();
foreach($sucursales as $sucursal){
$arraySucursales[]=[
'id' => $sucursal->getId(),
'nombre' => $sucursal->getNombre(),
];
}
//EMPLEADOS
$empleadosEmpresa = $em->getRepository(EmpleadoEmpresaSucursal::class)->findBy(array(
'empresa' => $empresa,
'isActive' => true
));
$arrayEmpleadosEmpresa = Array();
foreach($empleadosEmpresa as $empleadoEmpresa){
$cargoId = null;
if($empleadoEmpresa->getCargo() != null){
$cargoId = $empleadoEmpresa->getCargo()->getId();
}
$sucursalId = null;
if($empleadoEmpresa->getSucursal() != null){
$sucursalId = $empleadoEmpresa->getSucursal()->getId();
}
$arrayEmpleadosEmpresa[]=[
'id' => $empleadoEmpresa->getId(),
'fechaIngreso' => $empleadoEmpresa->getFechaIngresoTrabajar(),
'nombre' => $empleadoEmpresa->getEmpleado()->getApellido().' '.$empleadoEmpresa->getEmpleado()->getNombre(),
'cuil' => $empleadoEmpresa->getEmpleado()->getCuil(),
'remuneracion' => $empleadoEmpresa->getRemuneracion(),
'horasTrabajadas' => $empleadoEmpresa->getHorasTrabajadas(),
'cargo_id' => $cargoId,
'sucursal_id' => $sucursalId,
];
}
return $this->render('consola/panel_contador/empresa/empleado/index.html.twig', [
'empresa_id' => $empresa->getId(),
'razon_social' => $empresa->getRazonSocial(),
'arrayCargos' => $arrayCargos,
'arraySucursales' => $arraySucursales,
'arrayEmpleadosEmpresa' => $arrayEmpleadosEmpresa,
]);
}
#[Route('/{id}/empleado/new/', name: 'contador_empresa_empleado_new', methods: ['GET', 'POST'])]
public function newEmpleado(Request $request,Empresa $empresa, ServiceController $ServiceController, EntityManagerInterface $em): Response
{
$empleado = new Empleado();
$form = $this->createForm(EmpleadoContadorType::class, $empleado);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$empleado->setNombre($ServiceController->PrimeraLetraMayuscula($empleado->getNombre()));
$empleado->setApellido($ServiceController->PrimeraLetraMayuscula($empleado->getApellido()));
$empleado->setAfiliado(false);
//$empleado->setFechaIngresoSindicato(new \DateTime('now'));
$empleado->setIsActive(true);
$empleado->setUserCargo($this->getUser());
$empleado->setFechaRegister(new \DateTime('now'));
$em->persist($empleado);
$em->flush();
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'success',
'title' => 'FELICITACIONES!',
'message' => 'Ha creado un nuevo Empleado. Debe seleccionar la empresa y sucursal en la que trabaja.'
));
return $this->redirectToRoute('contador_empleado_new_datos_empresa', [
'id' => $empresa->getId(),
'empleado' => $empleado->getId(),
], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('consola/panel_contador/empresa/empleado/new.html.twig', [
'empleado_nombre' => null,
'empresa_id' => $empresa->getId(),
'form' => $form,
]);
}
#[Route('/{id}/empresa/empleado/{empleado}/datos/new/', name: 'contador_empleado_new_datos_empresa', methods: ['GET', 'POST'])]
public function datosEmpresaNew(Request $request,Empresa $empresa, Empleado $empleado, EntityManagerInterface $em): Response
{
$empleadoEmpresa = new EmpleadoEmpresaSucursal();
$empleadoEmpresa->setEmpresa($empresa);
$empleadoEmpresa->setEmpleado($empleado);
$form = $this->createForm(EmpleadoEmpresaSucursalType::class, $empleadoEmpresa, ['empresa' => $empresa]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
//pregunto si ya hay una vinculacion anterior con esa sucursal
$empleadoEmpresas = $em->getRepository(EmpleadoEmpresaSucursal::class)->findOneBy(Array(
'empleado' => $empleado,
'sucursal' => $empleadoEmpresa->getSucursal(),
'isActive' => true
));
if($empleadoEmpresas){
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'info',
'title' => 'ATENCIÓN!',
'message' => 'El empleado ya estaba en el listado de esa sucursal.'
));
}else{
$empleadoEmpresa->setIsActive(true);
$empleadoEmpresa->setUserCargo($this->getUser());
$em->persist($empleadoEmpresa);
$em->flush();
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'success',
'title' => 'FELICITACIONES!',
'message' => 'Revise los datos cargados'
));
}
return $this->redirectToRoute('contador_empresa_empleados', [
'id' => $empresa->getId(),
], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('consola/panel_contador/empresa/empleado/cargar_empresa.html.twig', [
'empleado_nombre' => $empleado->getNombre(),
'empresa_id' => $empresa->getId(),
'nombre_empresa' => $empresa->getRazonSocial(),
'form' => $form,
]);
}
/**
* @Route("/buscar-empleado-padron", name="buscar_empleado_padron", condition="request.headers.get('X-Requested-With') == 'XMLHttpRequest'")
*/
public function buscarEmpleado(Request $request, EntityManagerInterface $em): Response
{
$response = Array();
$cuil = $request->get("cuil");
if (is_numeric($cuil) and strlen($cuil) == 11) {
$empleado = $em->getRepository(Empleado::class)->findOneBy(Array(
'cuil' => $cuil
));
//si existe el empleado
if($empleado){
//me fijo si ya tiene otra empresa solo para avisar
$empleadoEmpresas = $em->getRepository(EmpleadoEmpresaSucursal::class)->findBy(Array(
'empleado' => $empleado,
'isActive' => true
));
if($empleadoEmpresas){
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'warning',
'title' => 'ATENCIÓN!',
'message' => 'El empleado ya tiene una empresa asignada. Comuníquelo al sindicato si el trabajador solo trabaja en una empresa.'
));
}
//lo mando derecho a que cargue la empresa.
$response[] = [
'status' => 'success',
'text' => 'Encontrado!',
'empleado_id' => $empleado->getId(),
];
}else{
//no se encontro lo agrego
$response[] = [
'status' => 'form',
'text' => 'No se encontro el empleado. Debe completar el formulario',
];
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'success',
'title' => 'BUSQUEDA!',
'message' => 'No se encontró el empleado con el cuil '.$cuil.' en nuestro padrón. Debe completar el formulario.'
));
}
}else{
$response[] = [
'status' => 'error',
'text' => 'El cuil que ingreso no es valido. Compruebe que este compuesto por solo 11 números.',
];
}
return new JsonResponse($response);
}
}