<?php
namespace App\Controller\Contador;
use App\Entity\Cargo;
use App\Entity\Boleta;
use App\Entity\Empresa;
use App\Entity\Concepto;
use App\Entity\Empleado;
use App\Form\BoletaType;
use App\Entity\InformarPago;
use App\Entity\EmpleadoBoleta;
use App\Entity\EscalaSalarial;
use App\Entity\MedioConceptoEmpresa;
use App\Repository\BoletaRepository;
use App\Entity\EmpleadoEmpresaSucursal;
use Doctrine\ORM\EntityManagerInterface;
use Luecano\NumeroALetras\NumeroALetras;
use App\Entity\MotivoLiquidacionEmpleado;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Controller\Admin\Herramientas\ConceptoController;
use App\Controller\Admin\Herramientas\MediosDePagoController;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
#[Route('/panel/contador/boleta')]
class BoletaController extends AbstractController
{
public function __construct(){
date_default_timezone_set("America/Buenos_Aires");
}
function limpiarMediosConceptoEmpresa($empresa,$em){
//borro si hay medio_concepto_empresa
$mediosConceptosEmpresa = $em->getRepository(MedioConceptoEmpresa::class)->findBy(array(
'empresa' => $empresa
));
if ($mediosConceptosEmpresa){
foreach($mediosConceptosEmpresa as $medio)
{
$em->remove($medio);
$em->flush();
}
}
return true;
}
#[Route('/paso1/{id}/generar-una-boleta-nueva-para-la-empresa', name: 'contador_boleta_paso1', methods: ['GET', 'POST'])]
public function paso1(Request $request, Empresa $empresa,ConceptoController $conceptoController, EntityManagerInterface $em): Response
{
$conceptos = $em->getRepository(Concepto::class)->findBy(array('isActive' => true));
//armo el array para enviar a frontend
$arrayConceptos = Array();
foreach($conceptos as $concepto){
array_push($arrayConceptos, $conceptoController->getConcepto($concepto));
}
if (isset($_GET['Continuar']))
{
$mes = $request->get("mes");
$ano = $request->get("ano");
//pregunto si el periodo aun no paso
$fechaPeriodoArmar = $ano.'-'.$mes.'-01';
$periodo = \DateTime::createFromFormat('Y-m-d H:i:s', $fechaPeriodoArmar.' 00:00:00');
//Le doy un mes por si la quiere hacer antes
$hoy = new \DateTime("now");
$hoy->modify('+1 month');
$hoy = \DateTime::createFromFormat('Y-m-d H:i:s', $hoy->format("Y-m-d").' 00:00:00');
// si el periodo no es mayor que la fecha de hoy
if($periodo <= $hoy )
{
$this->limpiarMediosConceptoEmpresa($empresa,$em);
//$conceptoUnico = $em->getRepository(Concepto::class)->find(1);
$avanzar = true;
//ya saque los conceptos activos, los recorro
foreach($conceptos as $concepto)
{
$conceptoID = 'concepto'.$concepto->getId();
//Si el checkbox conceptoID esta tildado
if ($request->get($conceptoID) != null && $request->get($conceptoID) == $concepto->getId()){
$avanzar = true;
//creo el Medio Concepto Empresa y lo guardo
$MCE = new MedioConceptoEmpresa();
$MCE->setConcepto($concepto);
$MCE->setEmpresa($empresa);
$MCE->setPeriodoAno($ano);
$MCE->setPeriodoMes($mes);
//pregunto si ya hay generadas boletas de este concepto y periodo
$boletasAnteriores = $em->getRepository(Boleta::class)->findBy(array(
'concepto' => $concepto,
'fechaPeriodo' => $periodo,
'empresa' => $empresa,
'isActive' => true,
));
//si encontro boletas anteriores
if ($boletasAnteriores)
{
$MCE->setBoletasEncontradas(true);
}else{
//no encontro boletas anteriores
$MCE->setBoletasEncontradas(false);
}
//guardo todo
$em->persist($MCE);
$em->flush();
}
}//del foreach
//pregunto si tildo al menos un concepto
if($avanzar == true){
//continuo
return $this->redirectToRoute('contador_boleta_paso2', array(
'id' => $empresa->getId(),
'mes' => $mes,
'ano' => $ano,
));
}else{
//hay error, no hay tildados
$this->addFlash('notice', array(
'type' => 'danger',
'title' => 'ERROR!',
'message' => 'Debe tildar al menos un concepto para poder avanzar.'
));
}
}else{
//esta mal el periodo
$this->addFlash('notice', array(
'type' => 'danger',
'title' => 'ERROR!',
'message' => 'El periodo '.$mes.'/'.$ano.' aun no paso. Corrija el periodo para continuar.'
));
}
}
return $this->render('consola/panel_contador/boleta/paso1.html.twig', [
'razon_social' => $empresa->getRazonSocial(),
'cuit' => $empresa->getCuit(),
'empresa_id' => $empresa->getId(),
'arrayConceptos' => $arrayConceptos,
]);
}
function verificarMotivo($motivo,$empleado,$empresa,$ano,$mes,$em)
{
$check = true;
switch ($motivo->getPeriodo()) {
case 'Total':
//saco las boletas pagas a ese empleado con ese motivo con esa empresa
$boletasEmpleados = $em->getRepository(Boleta::class)->findByMotivosEmpleadosEnBoletas ($empleado->getId(),$motivo->getId(),$empresa->getId());
break;
case 'Anual':
//resto un ano
$anio = $ano-1;
$fechaPasar = $anio.'-'.$mes.'-01';
$fechaP = new \DateTime($fechaPasar);
//saco las boletas pagas a ese empleado con ese motivo con esa empresa
$boletasEmpleados = $em->getRepository(Boleta::class)->findByMotivosEmpleadosEnBoletasFecha (
$empleado->getId(),$motivo->getId(),$empresa->getId(),$fechaP);
break;
case 'Mensual':
//resto un ano
$mees = $mes-1;
$fechaPasar = $ano.'-'.$mees.'-01';
$fechaP = new \DateTime($fechaPasar);
//saco las boletas pagas a ese empleado con ese motivo con esa empresa
$boletasEmpleados = $em->getRepository(Boleta::class)->findByMotivosEmpleadosEnBoletasFecha (
$empleado->getId(),$motivo->getId(),$empresa->getId(),$fechaP);
break;
//evaluo las cantidades
if(COUNT($boletasEmpleados) >= $motivo->getCantidadDeVeces()){
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'warning',
'title' => 'IMPORTANTE!',
'message' => 'El empleado '.$empleado->getNombre().' '.$empleado->getApellido().' ya llego a la cantidad maxima ('.$motivo->getCantidadVeces().') del motivo seleccionado ('.$motivo->getNombre().').'
));
$check = false;
}
}
return $check;
}
function remuneracionEstimativa($empleadoDeclarado, $escalaSalarial){
$remuneracionEstimativa = 0;
//oficial
switch($empleadoDeclarado->getCargo()->getId()){
case 1: //maestro
$remuneracionEscala = $escalaSalarial->getMaestro();
break;
case 2: //medio Oficial
$remuneracionEscala = $escalaSalarial->getMedioOficial();
break;
case 3: //ayudante
$remuneracionEscala = $escalaSalarial->getAyudante();
break;
case 4: //peon
$remuneracionEscala = $escalaSalarial->getPeon();
break;
case 5: //repartidor
$remuneracionEscala = $escalaSalarial->getRepartidor();
break;
case 6: //cajera
$remuneracionEscala = $escalaSalarial->getCajera();
break;
case 7: //dependiente
$remuneracionEscala = $escalaSalarial->getDependiente();
break;
}
//saco el valor hora
$hora = $remuneracionEscala / 26; //cantidad de dias
$hora = $hora / 7; // cantidad de horass
$hora = $hora * 1.5; // horas extras al 50%
$hora = $hora * 26; // por los dias
//horas extras
$horas = 0;
switch($empleadoDeclarado->getHorasTrabajadas()){
case 11:
if ($empleadoDeclarado->getCargo()->getHorasMinima() == 7){
$horas = $hora * 4;
}else{
$horas = $hora * 3;
}
break;
case 10:
if ($empleadoDeclarado->getCargo()->getHorasMinima() == 7){
$horas = $hora * 3;
}else{
$horas = $hora * 2;
}
break;
case 9:
if ($empleadoDeclarado->getCargo()->getHorasMinima() == 7){
$horas = $hora * 2;
}else{
$horas = $hora * 1;
}
break;
case 8:
if ($empleadoDeclarado->getCargo()->getHorasMinima() == 7){
$horas = $hora * 1;
}else{
$horas = 0;
}
break;
}
//saco la remuneracion que deberia de ser
$remuneracionEstimativa = $remuneracionEscala + $horas;
return $remuneracionEstimativa;
}
#[Route('/paso2/{id}/mes/{mes}/ano/{ano}/generar-una-boleta-nueva-para-la-empresa', name: 'contador_boleta_paso2', methods: ['GET', 'POST'])]
public function paso2(Request $request,Empresa $empresa,$mes,$ano,EntityManagerInterface $em): Response
{
//saco la escala salarial de ese periodo
$fechaPeriodoArmar = $ano.'-'.$mes.'-01';
$fechaPeriodo = \DateTime::createFromFormat('Y-m-d H:i:s', $fechaPeriodoArmar.' 00:00:00');
$empleadosEmpresa = $em->getRepository(EmpleadoEmpresaSucursal::class)->findBy(array(
'empresa' => $empresa,
'isActive' => true
));
if (isset($_GET['Continuar']))
{
//variable para continuar
$check_continuar = true;
//recorro los empleados
foreach($empleadosEmpresa as $empleadoSucursal){
//lo pongo asi por el cambio
$empleado = $empleadoSucursal->getEmpleado();
//lo corto para que tire de a un error
if($check_continuar == true){
//armo el motivo
$armoMotivo='motivo'.$empleado->getId();
//MOTIVO
if($request->get($armoMotivo) > 0)
{
//saco el motivo
$motivo = $em->getRepository(MotivoLiquidacionEmpleado::class)->find($request->get($armoMotivo));
//verifico
$check_continuar = $this->verificarMotivo($motivo,$empleado,$empresa,$ano,$mes,$em);
if($check_continuar == true){
//agrego el motivo
$empleado->setMotivoLiquidacionEmpleado($motivo);
}
}else{
//si no selecciono no lo dejo pasar
if($request->get($armoMotivo) == 0 and $request->get($armoMotivo) != null)
{
$check_continuar = false;
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'warning',
'title' => 'IMPORTANTE!',
'message' => 'Usted debe seleccionar el motivo de por quĂ©, le estĂ¡n pagando al trabajador por debajo de la escala salarial, o consulte la escala y rectifique la remuneraciĂ³n.'
));
}//pasa
}
//AGUINALDO
if($mes == 6 || $mes == 12){
$armoAguinaldo = $request->get('aguinaldo'.$empleado->getId());
//evaluo si es menor que la mitad de la remu
$aguinaldoEstimativo = $empleadoSucursal->getRemuneracion()/2;
if ($armoAguinaldo < $aguinaldoEstimativo ){
//$check_continuar = false;
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'warning',
'title' => 'IMPORTANTE!',
'message' => 'Parece que los Aguinaldos son menores a la mitad de la remuneraciĂ³n. Revise los montos de los Aguinaldos.'
));
}
$empleado->setAguinaldo($armoAguinaldo);
}
//guardo todo
$em->persist($empleado);
$em->flush();
}
}
if($check_continuar == true){
//voy al paso 3
return $this->redirectToRoute('contador_boleta_paso3', array(
'id' => $empresa->getId(),
'mes' => $mes,
'ano' => $ano,
));
}
}//fin CONTINUAR
//IMFO PARA DEVOLVER
//motivos
$motivosLiquidacion = $em->getRepository(MotivoLiquidacionEmpleado::class)->findBy(array('isActive' => true));
$arrayMotivos = Array();
foreach($motivosLiquidacion as $motivoLiq){
$arrayMotivos[]=[
'id' => $motivoLiq->getId(),
'nombre' => $motivoLiq->getNombre(),
];
}
//conceptos
$mediosConceptoEmpresa = $em->getRepository(MedioConceptoEmpresa::class)->findBy(array('empresa' => $empresa));
$arrayConceptos = Array();
foreach($mediosConceptoEmpresa as $mce){
if($mce->getBoletasEncontradas() == true){
//si esta paga
//if($mce->getBoletasEncontradas() == true){
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'warning',
'title' => 'IMPORTANTE!',
'message' => 'Usted ya tiene generada una boleta en el periodo
'.$mce->getPeriodoMes().'/'.$mce->getPeriodoAno().' si continĂºa, se eliminarĂ¡ del sistema
la boleta anterior, quedando la misma invalidada para pagar.'
));
}
$arrayConceptos[]=[
'nombre' => $mce->getConcepto()->getNombre(),
];
}
//cargos
$cargos = $em->getRepository(Cargo::class)->findBy(array('isActive' => true));
$arrayCargos = Array();
foreach($cargos as $cargo){
$arrayCargos[]=[
'id' => $cargo->getId(),
'nombre' => $cargo->getNombre(),
];
}
//Escala, ver que pasa cuando no hay escala.
$escalaSalarial = $em->getRepository(EscalaSalarial::class)->findOneBy(array('fecha' => $fechaPeriodo));
//Empleados
$arrayEmpleados = Array();
//para seguir avanzando si no faltan datos a los empleados
$continuar = true;
foreach($empleadosEmpresa as $empleadoDeclarado){
//sucursal
$sucursalEmpleado = null;
if($empleadoDeclarado->getSucursal() != null){
$sucursalEmpleado = $empleadoDeclarado->getSucursal()->getNombre();
}else{
$continuar = false;
}
//Cargo
$cargoEmpleado = null;
$remuneracionEstimativa = 0;
$horaMinimaCargo = null;
if($empleadoDeclarado->getCargo() != null){
$cargoEmpleado = $empleadoDeclarado->getCargo()->getNombre();
$horaMinimaCargo = $empleadoDeclarado->getCargo()->getHorasMinima();
//comparar horas trabajadas con las del cargo
$horasMinima = false;
if($empleadoDeclarado->getCargo()->getHorasMinima() <= $empleadoDeclarado->getHorasTrabajadas()){
$horasMinima = true;
}
//remuneracion
//si hay escala para ese periodo y tambien cargo
if($escalaSalarial){
$remuneracionEstimativa = $this->remuneracionEstimativa($empleadoDeclarado, $escalaSalarial);
}
}else{
$continuar = false;
}
//aguinaldo
$aguinaldo = null;
if($mes == 6 || $mes == 12){
$aguinaldo = $empleadoDeclarado->getRemuneracion() / 2;
}
if($empleadoDeclarado->getRemuneracion() != null){
$remuneracionEmpleado = $empleadoDeclarado->getRemuneracion();
}else{
$remuneracionEmpleado = 0;
$continuar = false;
}
$arrayEmpleados[]=[
'id' => $empleadoDeclarado->getEmpleado()->getId(),
'id_empleado_sucursal' => $empleadoDeclarado->getId(),
'nombre' => $empleadoDeclarado->getEmpleado()->getNombre().' '.$empleadoDeclarado->getEmpleado()->getApellido(),
'sucursal' => $sucursalEmpleado,
'cargo' => $cargoEmpleado,
'remuneracion' => $remuneracionEmpleado,
'sexo' => $empleadoDeclarado->getEmpleado()->getSexo(),
'remuneracionEstimativa' => $remuneracionEstimativa,
'horasTrabajadas' => $empleadoDeclarado->getHorasTrabajadas(),
'horasMinimaCargo' => $horaMinimaCargo,
'horasMinima' => $horasMinima,
'remuneracionEstimativa' => $remuneracionEstimativa,
'aguinaldo' => $aguinaldo,
// 'continuar' => $continuar,
];
}
//empresa
$arrayEmpresa = Array();
$arrayEmpresa[]=[
'id' => $empresa->getId(),
'razonSocial' => $empresa->getRazonSocial(),
'cuit' => $empresa->getCuit(),
'empleados' => $arrayEmpleados,
];
//BOLETA
$infoBoleta= Array();
$infoBoleta[]=[
'empresa' => $arrayEmpresa,
'conceptos' => $arrayConceptos,
'cargos' => $arrayCargos,
'ano' => $ano,
'mes' => $mes,
'continuar' => $continuar,
];
return $this->render('consola/panel_contador/boleta/paso2.html.twig', [
'infoBoleta' => $infoBoleta,
'escalaSalarial' => $escalaSalarial,
'motivos' => $arrayMotivos,
]);
}
#[Route('/paso3/{id}/mes/{mes}/ano/{ano}/generar-una-boleta-nueva-para-la-empresa', name: 'contador_boleta_paso3', methods: ['GET', 'POST'])]
public function paso3(Request $request,Empresa $empresa,$mes,$ano,EntityManagerInterface $em): Response
{
$empleadosEmpresa = $em->getRepository(EmpleadoEmpresaSucursal::class)->findBy(array(
'empresa' => $empresa,
'isActive' => true
));
//saco los conceptos
$ConceptosEmpresa = $em->getRepository(MedioConceptoEmpresa::class)->findBy(array('empresa' => $empresa));
if($empleadosEmpresa){
if (isset($_GET['Continuar']))
{
//fecha que selecciono
$fechaDePagoSeleccionada=$request->get("fechaDePago");
$fechaSeleccionada = \DateTime::createFromFormat('Y-m-d', $fechaDePagoSeleccionada);
//fecha hoy
$fechaHoy = new \DateTime("now");
$fechaHoy = $fechaHoy->format('Y-m-d');
//evaluo que no sea una fecha mayor a la de hoy
if($fechaDePagoSeleccionada >= $fechaHoy ){
//recorro todos los conceptos
foreach ($ConceptosEmpresa as $conceptoEmpresa)
{
//por cada concepto lo pongo en cero
$cantidadEmpleados = 0;
$sumaRemuneracion = 0;
$sumaAguinaldo = 0;
//pregunto si en este concepto hay trabajadores que renunciaron a este concepto
foreach ($empleadosEmpresa as $empleadoEmpresa) {
$sumarEmpleadoConcepto = true;
//recorro los conceptos renunciados
foreach($empleadoEmpresa->getEmpleado()->getConcepto() as $conceptoRenunciado){
//si renuncio a este concepto
if($conceptoRenunciado == $conceptoEmpresa->getConcepto()){
//no lo sumo
$sumarEmpleadoConcepto = false;
}
}
if($sumarEmpleadoConcepto == true){
$cantidadEmpleados = $cantidadEmpleados + 1;
$sumaRemuneracion = $sumaRemuneracion + $empleadoEmpresa->getRemuneracion();
$sumaAguinaldo = $sumaAguinaldo + $empleadoEmpresa->getEmpleado()->getAguinaldo();
}
}
//vencimeinto 5 dias de corrido +2 se cambio a pedido del sindicato
$fechaNueva = $fechaSeleccionada->format('Y-m-d');
$vencimeinto = \DateTime::createFromFormat('Y-m-d', $fechaNueva);
$fechaVencimiento = $vencimeinto->modify('+7 day');
$conceptoEmpresa->setFechaVencimiento(\DateTime::createFromFormat('Y-m-d H:i:s', $fechaVencimiento->format('Y-m-d').' 23:59:59'));
//sumo el aguinaldo a la remuneracion total
if($mes == 6 || $mes == 12){
$montoTotal = $sumaRemuneracion + $sumaAguinaldo;
}else{
$montoTotal = $sumaRemuneracion;
}
//Aporte
$porcentaje = $conceptoEmpresa->getConcepto()->getPorcentaje();
$aportes = ($montoTotal * $porcentaje)/100;
$conceptoEmpresa->setAporte($aportes);
//PUNITORIOS
//le pregunto hasta que dia al sindicato ej:16
$dia_vencimiento = 16-1; //le resto 1 por que no me toma en la diff de fechas
$punitorios=0;
//sumo un mes al periodo ya que, se paga a contra mes
$mesPunitorios = $conceptoEmpresa->getPeriodoMes()+1;
//veo si el ano es este
if($mesPunitorios == 13){
$mesPunitorios = 1;
$ano2 = $conceptoEmpresa->getPeriodoAno()+1;
}else{
$ano2 = $conceptoEmpresa->getPeriodoAno();
}
$fechaComparar = $ano2.'-'.$mesPunitorios.'-'.$dia_vencimiento;
$fechaComparar = \DateTime::createFromFormat('Y-m-d', $fechaComparar);
if ($fechaSeleccionada > $fechaComparar){
//saco los dias de diferencia
$cantidadDias = $fechaComparar->diff($fechaSeleccionada);
$cantidadDias = $cantidadDias->format('%a');
$valor_dia=0.2;
$porcentaje_punitorios = $cantidadDias * $valor_dia;
$punitorios = ($aportes * $porcentaje_punitorios)/100;
}
if($mes == 6 || $mes == 12){
$conceptoEmpresa->setAguinaldos($sumaAguinaldo);
}else{
$conceptoEmpresa->setAguinaldos(0);
}
$conceptoEmpresa->setSumaRemuneraciones($sumaRemuneracion);
$conceptoEmpresa->setCantidadEmpleados($cantidadEmpleados);
$conceptoEmpresa->setPunitorios($punitorios);
$conceptoEmpresa->setTotalDepositado($punitorios + $aportes);
$conceptoEmpresa->setFechaSeleccionada($fechaSeleccionada);
//METO TODO PROVISORIO ANTES DE GENERAR LA BOLETA
$em->persist($conceptoEmpresa);
$em->flush();
}//foreach
return $this->redirectToRoute('contador_boleta_paso4', [
'id' => $empresa->getId(),
'mes' => $mes,
'ano' => $ano,
]);
}else{
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'danger',
'title' => 'ERROR!',
'message' => 'La fecha que seleccionĂ³ ya paso! Seleccione una nueva fecha.'
));
}
}//ISSET
}else{
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'danger',
'title' => 'ERROR!',
'message' => 'La cantidad de empleados no puede ser cero (0).'
));
}
//conceptos
$mediosConceptoEmpresa = $em->getRepository(MedioConceptoEmpresa::class)->findBy(array('empresa' => $empresa));
$arrayConceptoMediosDePago = Array();
foreach($mediosConceptoEmpresa as $mce){
if($mce->getBoletasEncontradas() == true){
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'warning',
'title' => 'IMPORTANTE!',
'message' => 'Usted ya tiene generada una boleta en el periodo
'.$mce->getPeriodoMes().'/'.$mce->getPeriodoAno().' en concepto de '.$mce->getConcepto()->getNombre().' Si continĂºa, se eliminarĂ¡ del sistema
la boleta anterior, quedando la misma invalidada para pagar.'
));
}
//saco los medios de pagos
$arrayMediosDePago = Array();
foreach($mce->getConcepto()->getMediosDePago() as $medioDePago){
//guardo el logo para mostrar
$arrayMediosDePago[]=[
'logo' => $medioDePago->getLogo(),
];
}
$arrayConceptoMediosDePago[]=[
'nombre' => $mce->getConcepto()->getNombre(),
'arrayMediosDePago' => $arrayMediosDePago,
];
}
//empresa
$arrayEmpresa = Array();
$arrayEmpresa[]=[
'id' => $empresa->getId(),
'razonSocial' => $empresa->getRazonSocial(),
'cuit' => $empresa->getCuit(),
];
//Empleados
$sumaRemuneraciones = 0;
$sumaAguinaldos = 0;
foreach($empleadosEmpresa as $empleadoDeclarado){
$sumaRemuneraciones = $sumaRemuneraciones + $empleadoDeclarado->getRemuneracion();
$sumaAguinaldos = $sumaAguinaldos + $empleadoDeclarado->getEmpleado()->getAguinaldo();
}
//BOLETA
$infoBoleta= Array();
$infoBoleta[]=[
'empresa' => $arrayEmpresa,
'ano' => $ano,
'mes' => $mes,
'cantidadEmpleados' => count($empleadosEmpresa),
'sumaRemuneraciones' => $sumaRemuneraciones,
'sumaAguinaldos' => $sumaAguinaldos,
];
return $this->render('consola/panel_contador/boleta/paso3.html.twig', [
'infoBoleta' => $infoBoleta,
'arrayConceptoMediosDePago' => $arrayConceptoMediosDePago,
]);
}
#[Route('/paso4/{id}/mes/{mes}/ano/{ano}/generar-una-boleta-nueva-para-la-empresa', name: 'contador_boleta_paso4', methods: ['GET', 'POST'])]
public function paso4(Request $request,Empresa $empresa,$mes,$ano,EntityManagerInterface $em): Response
{
//saco los conceptos
$mediosConceptoEmpresa = $em->getRepository(MedioConceptoEmpresa::class)->findBy(array('empresa' => $empresa));
if (isset($_GET['Generar']))
{
//recorro todos los conceptos
foreach ($mediosConceptoEmpresa as $conceptoEmpresa) {
//DEBO CREAR UNA BOLETA POR CADA CONCEPTOO!!!!!
$boleta = new Boleta();
//empresa datos
$boleta->setFechaEmision(new \DateTime("now"));
$boleta->setIsActive(true);
$boleta->setEmpresa($empresa);
$boleta->setNombreEmpresa($empresa->getRazonSocial());
$boleta->setCuit($empresa->getCuit());
$boleta->setCantidadEmpleados($conceptoEmpresa->getCantidadEmpleados());
$boleta->setAguinaldos($conceptoEmpresa->getAguinaldos());
$boleta->setConcepto($conceptoEmpresa->getConcepto());
$boleta->setFechaPago(\DateTime::createFromFormat('Y-m-d H:i:s', $conceptoEmpresa->getFechaSeleccionada()->format('Y-m-d').' 00:00:00'));
$boleta->setFechaVencimiento(\DateTime::createFromFormat('Y-m-d H:i:s', $conceptoEmpresa->getFechaVencimiento()->format('Y-m-d').' 00:00:00'));
$boleta->setRemuneracionTotal($conceptoEmpresa->getSumaRemuneraciones());
$boleta->setAporte($conceptoEmpresa->getAporte());
$boleta->setPunitorios($conceptoEmpresa->getPunitorios());
$boleta->setTotalDepositado($conceptoEmpresa->getTotalDepositado());
$boleta->setUserCargo($this->getUser());
$boleta->setPagada(false);
//letras
$formatter = new NumeroALetras();
$boleta->setNumerosALetras($formatter->toMoney($conceptoEmpresa->getTotalDepositado(), 2, 'PESOS', 'CENTAVOS'));
//periodo
$fechaPeriodo = $conceptoEmpresa->getPeriodoAno().'-'.$conceptoEmpresa->getPeriodoMes().'-01';
$date = new \DateTime($fechaPeriodo);
$boleta->setFechaPeriodo($date);
//GENERO UNA BOLETA CON TODOS LOS MEDIOS DE PAGOS QUE TENGA ESE CONCEPTO
//saco los medios de pago para este concepto y los recorro
foreach ($conceptoEmpresa->getConcepto()->getMediosDePago() as $medioDePago) {
//BANCO
if($medioDePago->getId() == 1){
//genero el codigo de barras para el banco
$boleta = $em->getRepository(Boleta::class)->CodigoBarrasBanco($boleta);
}
}
//fin codigos de barras
// //pregunto sino hay ni un codigo no la guardo.
// if($boleta->getCodigoBarras() != NULL)
// {
//como genere boleta nueva ELIMINO las anteriores
$boletasAnteriores = $em->getRepository(Boleta::class)->findBy(array(
'isActive' => true,
'pagada' => false,
'empresa' => $empresa,
'fechaPeriodo' => $boleta->getFechaPeriodo(),
'concepto' => $boleta->getConcepto(),
));
//pregunto si encontro, las elimino
if ($boletasAnteriores != false)
{
foreach ($boletasAnteriores as $boletaAnterior)
{
$boletaAnterior->setIsActive(false);
$em->persist($boletaAnterior);
$em->flush();
}
}
//miro que no haya una boleta con el mismo codigo
$em->persist($boleta);
$em->flush();
//CARGO LOS EMPLEADOS_BOLETA
$empleadosEmpresa = $em->getRepository(EmpleadoEmpresaSucursal::class)->findBy(array(
'empresa' => $empresa,
'isActive' => true
));
foreach($empleadosEmpresa as $empleadoEmpresa)
{
$agregar = true;
//recorro los conceptos renunciados por el empleado
foreach($empleadoEmpresa->getEmpleado()->getConcepto() as $conceptoRenunciado){
//si renuncio a este concepto
if($conceptoRenunciado == $conceptoEmpresa->getConcepto()){
$agregar = false;
}
}
if($agregar == true){
//CREO EL EMPLEADO BOLETA
$empleadoBoleta = new EmpleadoBoleta();
$empleadoBoleta->setBoleta($boleta);
$empleadoBoleta->setEmpleado($empleadoEmpresa->getEmpleado());
$empleadoBoleta->setRemuneracion($empleadoEmpresa->getRemuneracion());
$aporto=($empleadoEmpresa->getRemuneracion()*$boleta->getConcepto()->getPorcentaje())/100;
$empleadoBoleta->setMontoAportado(round($aporto));
$empleadoBoleta->setCantidadHoras($empleadoEmpresa->getHorasTrabajadas());
$empleadoBoleta->setCargo($empleadoEmpresa->getCargo());
$empleadoBoleta->setMotivoLiquidacion($empleadoEmpresa->getEmpleado()->getMotivoLiquidacionEmpleado());
$empleadoBoleta->setFechaPeriodo($boleta->getFechaPeriodo());
$empleadoBoleta->setSucursal($empleadoEmpresa->getSucursal());
$empleadoBoleta->setAguinaldo($empleadoEmpresa->getEmpleado()->getAguinaldo());
//guardo el empleado Boleta
$em->persist($empleadoBoleta);
$em->flush();
}
}
//METO EL ID BOLETA EN CONCEPTO-EMPRESA
$conceptoEmpresa->setBoleta($boleta);
//meto los errores de la boleta
$conceptoEmpresa->setError($boleta->getError());
//guardo el medio
$em->persist($conceptoEmpresa);
$em->flush();
// }else{
// //si no puedo generar la boleta guardo los errores para mostrar
// $em->persist($conceptoEmpresa);
// $em->flush();
// }
}//foreach
return $this->redirectToRoute('contador_boleta_paso5', [
'id' => $empresa->getId(),
]);
}
//conceptos
$arrayConceptoMediosDePago = Array();
foreach($mediosConceptoEmpresa as $mce){
if($mce->getBoletasEncontradas() == true){
//mensaje Flash
$this->addFlash('notice', array(
'type' => 'warning',
'title' => 'IMPORTANTE!',
'message' => 'Usted ya tiene generada una boleta en el periodo
'.$mce->getPeriodoMes().'/'.$mce->getPeriodoAno().' en concepto de '.$mce->getConcepto()->getNombre().' Si continĂºa, se eliminarĂ¡ del sistema
la boleta anterior, quedando la misma invalidada para pagar.'
));
}
//saco los medios de pagos
$arrayMediosDePago = Array();
foreach($mce->getConcepto()->getMediosDePago() as $medioDePago){
//guardo el logo para mostrar
$arrayMediosDePago[]=[
'logo' => $medioDePago->getLogo(),
];
}
$arrayConceptoMediosDePago[]=[
'nombre' => $mce->getConcepto()->getNombre(),
'remuneraciones' => $mce->getSumaRemuneraciones(),
'aporte' => $mce->getAporte(),
'cantidadEmpleados' => $mce->getCantidadEmpleados(),
'aguinaldos' => $mce->getAguinaldos(),
'punitorios' => $mce->getPunitorios(),
'totalDepositado' => $mce->getTotalDepositado(),
'fechaVencimiento' => $mce->getFechaVencimiento(),
'arrayMediosDePago' => $arrayMediosDePago,
];
}
//empresa
$arrayEmpresa = Array();
$arrayEmpresa[]=[
'id' => $empresa->getId(),
'razonSocial' => $empresa->getRazonSocial(),
'cuit' => $empresa->getCuit(),
];
//BOLETA
$infoBoleta= Array();
$infoBoleta[]=[
'empresa' => $arrayEmpresa,
'ano' => $ano,
'mes' => $mes,
];
return $this->render('consola/panel_contador/boleta/paso4.html.twig', [
'infoBoleta' => $infoBoleta,
'arrayConceptoMediosDePago' => $arrayConceptoMediosDePago,
]);
}
#[Route('/paso5/{id}/boletas-generadas', name: 'contador_boleta_paso5', methods: ['GET', 'POST'])]
public function paso5(Request $request,Empresa $empresa,EntityManagerInterface $em): Response
{
//saco los conceptos
$mediosConceptoEmpresa = $em->getRepository(MedioConceptoEmpresa::class)->findBy(array('empresa' => $empresa));
//conceptos
$arrayBoletas = Array();
foreach($mediosConceptoEmpresa as $mce){
//saco los medios de pagos
$arrayMediosDePago = Array();
foreach($mce->getConcepto()->getMediosDePago() as $medioDePago){
//guardo el logo para mostrar
$arrayMediosDePago[]=[
'logo' => $medioDePago->getLogo(),
];
}
//si hay boleta
if($mce->getBoleta() != null)
{
$boleta = $mce->getBoleta();
$arrayBoletas[]=[
'id' => $boleta->getId(),
'nombre' => $boleta->getConcepto()->getNombre(),
'remuneraciones' => $boleta->getRemuneracionTotal(),
'aporte' => $boleta->getAporte(),
'cantidadEmpleados' => $boleta->getCantidadEmpleados(),
'aguinaldo' => $boleta->getAguinaldos(),
'punitorios' => $boleta->getPunitorios(),
'totalDepositado' => $boleta->getTotalDepositado(),
'fechaPeriodo' => $boleta->getFechaPeriodo(),
'fechaVencimiento' => $boleta->getFechaVencimiento(),
'nombre_concepto' => $boleta->getConcepto()->getNombre(),
'error' => $boleta->getError(),
'arrayMediosDePago' => $arrayMediosDePago,
];
}else{
//no se genero la boleta
$this->addFlash('notice', array(
'type' => 'danger',
'title' => 'ERROR!',
'message' => 'Por alguna razon no se pudo generar la boleta para el concepto de '.$mce->getConcepto()->getNombre().' en el periodo '.$mce->getPeriodoMes().'/'.$mce->getPeriodoAno().'.'.$mce->getError().' '
));
}
}
//empresa
$arrayEmpresa = Array();
$arrayEmpresa[]=[
'id' => $empresa->getId(),
'razonSocial' => $empresa->getRazonSocial(),
'cuit' => $empresa->getCuit(),
];
return $this->render('consola/panel_contador/boleta/paso5.html.twig', [
'empresa' => $arrayEmpresa,
'arrayBoletas' => $arrayBoletas,
]);
}
#[Route('/historial/{id}/listado-de-boletas-de-la-empresa', name: 'contador_historial_boletas_empresa', methods: ['GET', 'POST'])]
public function historiaBoletasEmpresa(Request $request,Empresa $empresa,EntityManagerInterface $em): Response
{
//saco las boletas de la empresa
$boletas = $em->getRepository(Boleta::class)->findBy(array(
'empresa' => $empresa,
'isActive' => true,
),array('fechaPeriodo' => 'DESC'));
$arrayBoletas = Array();
foreach($boletas as $boleta){
//saco los medios de pagos
$arrayMediosDePago = Array();
foreach($boleta->getConcepto()->getMediosDePago() as $medioDePago){
//guardo el logo para mostrar
$arrayMediosDePago[]=[
'logo' => $medioDePago->getLogo(),
];
}
//Me fijo si hay comprobantes relacionado con esta boleta. Deberia de haber 1 solo activo, el ultimo que cargo
$ultimoComprobante = $em->getRepository(InformarPago::class)->findOneBy(array(
'boleta' => $boleta,
'isActive' => true,
));
if($ultimoComprobante){
$comprobanteActivo = true;
}else{
$comprobanteActivo = false;
}
$arrayBoletas[]=[
'id' => $boleta->getId(),
'pagada' => $boleta->getPagada(),
'nombre' => $boleta->getConcepto()->getNombre(),
'remuneraciones' => $boleta->getRemuneracionTotal(),
'aporte' => $boleta->getAporte(),
'cantidadEmpleados' => $boleta->getCantidadEmpleados(),
'aguinaldo' => $boleta->getAguinaldos(),
'punitorios' => $boleta->getPunitorios(),
'totalDepositado' => $boleta->getTotalDepositado(),
'fechaPeriodo' => $boleta->getFechaPeriodo(),
'fechaVencimiento' => $boleta->getFechaVencimiento(),
'nombre_concepto' => $boleta->getConcepto()->getNombre(),
'error' => $boleta->getError(),
'arrayMediosDePago' => $arrayMediosDePago,
'comprobanteActivo' => $comprobanteActivo,
];
}
//empresa
$arrayEmpresa = Array();
$arrayEmpresa[]=[
'id' => $empresa->getId(),
'razonSocial' => $empresa->getRazonSocial(),
'cuit' => $empresa->getCuit(),
];
return $this->render('consola/panel_contador/empresa/historial/historialBoletas.html.twig', [
'empresa' => $arrayEmpresa,
'arrayBoletas' => $arrayBoletas,
]);
}
}