src/Controller/Contador/BoletaController.php line 910

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Contador;
  3. use App\Entity\Cargo;
  4. use App\Entity\Boleta;
  5. use App\Entity\Empresa;
  6. use App\Entity\Concepto;
  7. use App\Entity\Empleado;
  8. use App\Form\BoletaType;
  9. use App\Entity\InformarPago;
  10. use App\Entity\EmpleadoBoleta;
  11. use App\Entity\EscalaSalarial;
  12. use App\Entity\MedioConceptoEmpresa;
  13. use App\Repository\BoletaRepository;
  14. use App\Entity\EmpleadoEmpresaSucursal;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. use Luecano\NumeroALetras\NumeroALetras;
  17. use App\Entity\MotivoLiquidacionEmpleado;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use App\Controller\Admin\Herramientas\ConceptoController;
  22. use App\Controller\Admin\Herramientas\MediosDePagoController;
  23. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  24. #[Route('/panel/contador/boleta')]
  25. class BoletaController extends AbstractController
  26. {
  27.     public function __construct(){
  28.         date_default_timezone_set("America/Buenos_Aires");
  29.     }
  30.     function limpiarMediosConceptoEmpresa($empresa,$em){
  31.         //borro si hay medio_concepto_empresa
  32.         $mediosConceptosEmpresa $em->getRepository(MedioConceptoEmpresa::class)->findBy(array(
  33.             'empresa' => $empresa
  34.         ));
  35.         if ($mediosConceptosEmpresa){
  36.             foreach($mediosConceptosEmpresa as $medio)
  37.             {
  38.                 $em->remove($medio);
  39.                 $em->flush();
  40.             } 
  41.         }
  42.         return true;
  43.     }
  44.     
  45.     #[Route('/paso1/{id}/generar-una-boleta-nueva-para-la-empresa'name'contador_boleta_paso1'methods: ['GET''POST'])]
  46.     public function paso1(Request $requestEmpresa $empresa,ConceptoController $conceptoControllerEntityManagerInterface $em): Response
  47.     {
  48.         $conceptos $em->getRepository(Concepto::class)->findBy(array('isActive' => true));
  49.         //armo el array para enviar a frontend
  50.         $arrayConceptos = Array();
  51.         foreach($conceptos as $concepto){
  52.             array_push($arrayConceptos$conceptoController->getConcepto($concepto));
  53.         }
  54.         if (isset($_GET['Continuar']))
  55.         {
  56.             $mes $request->get("mes");
  57.             $ano $request->get("ano");
  58.             //pregunto si el periodo aun no paso
  59.             $fechaPeriodoArmar $ano.'-'.$mes.'-01';
  60.             $periodo \DateTime::createFromFormat('Y-m-d H:i:s'$fechaPeriodoArmar.' 00:00:00');
  61.             //Le doy un mes por si la quiere hacer antes
  62.             $hoy = new \DateTime("now");
  63.             $hoy->modify('+1 month');
  64.             $hoy \DateTime::createFromFormat('Y-m-d H:i:s'$hoy->format("Y-m-d").' 00:00:00');
  65.             // si el periodo no es mayor que la fecha de hoy 
  66.             if($periodo <= $hoy )
  67.             {
  68.                 $this->limpiarMediosConceptoEmpresa($empresa,$em);
  69.                 
  70.                 //$conceptoUnico = $em->getRepository(Concepto::class)->find(1);
  71.                 $avanzar true;
  72.                 //ya saque los conceptos activos, los recorro
  73.                 foreach($conceptos as $concepto)
  74.                 {
  75.                     $conceptoID 'concepto'.$concepto->getId();
  76.                     //Si el checkbox conceptoID  esta tildado
  77.                     if ($request->get($conceptoID) != null && $request->get($conceptoID) == $concepto->getId()){
  78.                         $avanzar true;
  79.                         //creo el Medio Concepto Empresa y lo guardo
  80.                         $MCE = new MedioConceptoEmpresa();
  81.                         $MCE->setConcepto($concepto);
  82.                         $MCE->setEmpresa($empresa);
  83.                         $MCE->setPeriodoAno($ano);
  84.                         $MCE->setPeriodoMes($mes);
  85.                         //pregunto si ya hay generadas boletas de este concepto y periodo
  86.                         $boletasAnteriores $em->getRepository(Boleta::class)->findBy(array(
  87.                             'concepto' => $concepto,
  88.                             'fechaPeriodo' => $periodo,
  89.                             'empresa' => $empresa,
  90.                             'isActive' => true,
  91.                         ));
  92.                         //si encontro boletas anteriores
  93.                         if ($boletasAnteriores)
  94.                         {
  95.                             $MCE->setBoletasEncontradas(true);
  96.                         }else{ 
  97.                             //no encontro boletas anteriores
  98.                             $MCE->setBoletasEncontradas(false);
  99.                         }
  100.                         //guardo todo
  101.                         $em->persist($MCE);
  102.                         $em->flush();             
  103.                     }
  104.                 }//del foreach
  105.                 //pregunto si tildo al menos un concepto
  106.                 if($avanzar == true){
  107.                     //continuo
  108.                     return $this->redirectToRoute('contador_boleta_paso2', array(
  109.                         'id' => $empresa->getId(),
  110.                         'mes' => $mes,
  111.                         'ano' => $ano,
  112.                         ));
  113.                 }else{
  114.                     //hay error, no hay tildados
  115.                     $this->addFlash('notice', array(
  116.                         'type' => 'danger'
  117.                         'title' => 'ERROR!'
  118.                         'message' => 'Debe tildar al menos un concepto para poder avanzar.'
  119.                     ));
  120.                 }
  121.             }else{
  122.                 //esta mal el periodo
  123.                 $this->addFlash('notice', array(
  124.                     'type' => 'danger'
  125.                     'title' => 'ERROR!'
  126.                     'message' => 'El periodo '.$mes.'/'.$ano.' aun no paso. Corrija el periodo para continuar.'
  127.                 ));
  128.             }
  129.         }
  130.         return $this->render('consola/panel_contador/boleta/paso1.html.twig', [
  131.             'razon_social' => $empresa->getRazonSocial(),
  132.             'cuit' => $empresa->getCuit(),
  133.             'empresa_id' => $empresa->getId(),
  134.             'arrayConceptos' => $arrayConceptos,
  135.         ]);
  136.     }
  137.     function verificarMotivo($motivo,$empleado,$empresa,$ano,$mes,$em)
  138.     {
  139.         $check true;
  140.         switch ($motivo->getPeriodo()) {
  141.             case 'Total':
  142.                 //saco las boletas pagas a ese empleado con ese motivo con esa empresa
  143.                 $boletasEmpleados $em->getRepository(Boleta::class)->findByMotivosEmpleadosEnBoletas ($empleado->getId(),$motivo->getId(),$empresa->getId());
  144.                 break;
  145.             case 'Anual':
  146.                 //resto un ano
  147.                 $anio $ano-1;
  148.                 $fechaPasar $anio.'-'.$mes.'-01';
  149.                 $fechaP = new \DateTime($fechaPasar);
  150.                 //saco las boletas pagas a ese empleado con ese motivo con esa empresa
  151.                 $boletasEmpleados $em->getRepository(Boleta::class)->findByMotivosEmpleadosEnBoletasFecha (
  152.                     $empleado->getId(),$motivo->getId(),$empresa->getId(),$fechaP);
  153.                 break;
  154.             case 'Mensual':
  155.                 //resto un ano
  156.                 $mees $mes-1;
  157.                 $fechaPasar $ano.'-'.$mees.'-01';
  158.                 $fechaP = new \DateTime($fechaPasar);
  159.                 //saco las boletas pagas a ese empleado con ese motivo con esa empresa
  160.                 $boletasEmpleados $em->getRepository(Boleta::class)->findByMotivosEmpleadosEnBoletasFecha (
  161.                     $empleado->getId(),$motivo->getId(),$empresa->getId(),$fechaP);
  162.                 break;
  163.             //evaluo las cantidades
  164.             if(COUNT($boletasEmpleados) >= $motivo->getCantidadDeVeces()){
  165.                 //mensaje Flash
  166.                 $this->addFlash('notice', array(
  167.                     'type' => 'warning'
  168.                     'title' => 'IMPORTANTE!'
  169.                     'message' => 'El empleado '.$empleado->getNombre().' '.$empleado->getApellido().' ya llego a la cantidad maxima ('.$motivo->getCantidadVeces().') del motivo seleccionado ('.$motivo->getNombre().').'
  170.                 ));
  171.                 $check false;
  172.             }
  173.         }     
  174.         return $check;
  175.     }
  176.     function remuneracionEstimativa($empleadoDeclarado$escalaSalarial){
  177.         
  178.         $remuneracionEstimativa 0;
  179.         //oficial
  180.         switch($empleadoDeclarado->getCargo()->getId()){
  181.             case 1//maestro
  182.                 $remuneracionEscala $escalaSalarial->getMaestro();
  183.             break;
  184.             case 2//medio Oficial
  185.                 $remuneracionEscala $escalaSalarial->getMedioOficial();
  186.             break;
  187.             case 3//ayudante
  188.                 $remuneracionEscala $escalaSalarial->getAyudante();
  189.             break;
  190.             case 4//peon
  191.                 $remuneracionEscala $escalaSalarial->getPeon();
  192.             break;
  193.             case 5//repartidor    
  194.                 $remuneracionEscala $escalaSalarial->getRepartidor();
  195.             break;
  196.             case 6//cajera
  197.                 $remuneracionEscala $escalaSalarial->getCajera();
  198.             break;
  199.             case 7//dependiente
  200.                 $remuneracionEscala $escalaSalarial->getDependiente();
  201.             break;
  202.         }
  203.         //saco el valor hora 
  204.         $hora $remuneracionEscala 26//cantidad de dias 
  205.         $hora $hora 7;     // cantidad de horass 
  206.         $hora $hora 1.5;  // horas extras al 50% 
  207.         $hora $hora 26;   // por los dias 
  208.         //horas extras
  209.         $horas 0;
  210.         switch($empleadoDeclarado->getHorasTrabajadas()){
  211.             case 11
  212.                 if ($empleadoDeclarado->getCargo()->getHorasMinima() == 7){
  213.                     $horas $hora 4;
  214.                 }else{
  215.                     $horas $hora 3;
  216.                 }
  217.             break;
  218.             case 10
  219.                 if ($empleadoDeclarado->getCargo()->getHorasMinima() == 7){
  220.                     $horas $hora 3;
  221.                 }else{
  222.                     $horas $hora 2;
  223.                 }
  224.             break;
  225.             case 9
  226.                 if ($empleadoDeclarado->getCargo()->getHorasMinima() == 7){
  227.                     $horas $hora 2;
  228.                 }else{
  229.                     $horas $hora 1;
  230.                 }
  231.             break;
  232.             case 8
  233.                 if ($empleadoDeclarado->getCargo()->getHorasMinima() == 7){
  234.                     $horas $hora 1;
  235.                 }else{
  236.                     $horas 0;
  237.                 }
  238.             break;
  239.         }
  240.         //saco la remuneracion que deberia de ser
  241.         $remuneracionEstimativa $remuneracionEscala $horas;
  242.         return $remuneracionEstimativa;
  243.     }
  244.     #[Route('/paso2/{id}/mes/{mes}/ano/{ano}/generar-una-boleta-nueva-para-la-empresa'name'contador_boleta_paso2'methods: ['GET''POST'])]
  245.     public function paso2(Request $request,Empresa $empresa,$mes,$ano,EntityManagerInterface $em): Response
  246.     {
  247.         //saco la escala salarial de ese periodo
  248.         $fechaPeriodoArmar $ano.'-'.$mes.'-01';
  249.         $fechaPeriodo \DateTime::createFromFormat('Y-m-d H:i:s'$fechaPeriodoArmar.' 00:00:00');
  250.     
  251.         $empleadosEmpresa $em->getRepository(EmpleadoEmpresaSucursal::class)->findBy(array(
  252.             'empresa' => $empresa,
  253.             'isActive' => true
  254.         ));
  255.         if (isset($_GET['Continuar']))
  256.         {
  257.             //variable para continuar
  258.             $check_continuar true;
  259.             //recorro los empleados
  260.             foreach($empleadosEmpresa as $empleadoSucursal){
  261.                 //lo pongo asi por el cambio
  262.                 $empleado $empleadoSucursal->getEmpleado();
  263.                 //lo corto para que tire de a un error
  264.                 if($check_continuar == true){
  265.                     //armo el motivo
  266.                     $armoMotivo='motivo'.$empleado->getId();
  267.                     //MOTIVO 
  268.                     if($request->get($armoMotivo) > 0)
  269.                     { 
  270.                         //saco el motivo 
  271.                         $motivo $em->getRepository(MotivoLiquidacionEmpleado::class)->find($request->get($armoMotivo));
  272.                         //verifico 
  273.                         $check_continuar $this->verificarMotivo($motivo,$empleado,$empresa,$ano,$mes,$em);
  274.                         if($check_continuar == true){
  275.                             //agrego el motivo
  276.                             $empleado->setMotivoLiquidacionEmpleado($motivo);
  277.                         }
  278.                     }else{
  279.                         //si no selecciono no lo dejo pasar
  280.                         if($request->get($armoMotivo) == and $request->get($armoMotivo) != null)
  281.                         { 
  282.                             $check_continuar false;
  283.                             //mensaje Flash
  284.                             $this->addFlash('notice', array(
  285.                                 'type' => 'warning'
  286.                                 'title' => 'IMPORTANTE!'
  287.                                 '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.'
  288.                             ));
  289.                         }//pasa
  290.                     }
  291.                     //AGUINALDO 
  292.                     if($mes == || $mes == 12){
  293.                         $armoAguinaldo $request->get('aguinaldo'.$empleado->getId());
  294.                         //evaluo si es menor que la mitad de la remu
  295.                         $aguinaldoEstimativo $empleadoSucursal->getRemuneracion()/2;
  296.                         if ($armoAguinaldo $aguinaldoEstimativo ){ 
  297.                             //$check_continuar = false;
  298.                             //mensaje Flash
  299.                             $this->addFlash('notice', array(
  300.                                 'type' => 'warning'
  301.                                 'title' => 'IMPORTANTE!'
  302.                                 'message' => 'Parece que los Aguinaldos son menores a la mitad de la remuneraciĂ³n. Revise los montos de los Aguinaldos.'
  303.                             ));
  304.                         }
  305.                         $empleado->setAguinaldo($armoAguinaldo); 
  306.                     }
  307.                                     
  308.                     //guardo todo
  309.                     $em->persist($empleado);
  310.                     $em->flush();
  311.                 }
  312.             }
  313.             if($check_continuar == true){
  314.                 //voy al paso 3
  315.                   return $this->redirectToRoute('contador_boleta_paso3', array(
  316.                         'id' => $empresa->getId(),
  317.                         'mes' => $mes,
  318.                         'ano' => $ano,
  319.                     ));
  320.               }
  321.         }//fin CONTINUAR
  322.         //IMFO PARA DEVOLVER
  323.         //motivos
  324.         $motivosLiquidacion $em->getRepository(MotivoLiquidacionEmpleado::class)->findBy(array('isActive' => true));
  325.         $arrayMotivos = Array();
  326.         foreach($motivosLiquidacion as $motivoLiq){
  327.             $arrayMotivos[]=[
  328.                 'id' => $motivoLiq->getId(),
  329.                 'nombre' => $motivoLiq->getNombre(),
  330.             ];
  331.         }
  332.         //conceptos
  333.         $mediosConceptoEmpresa $em->getRepository(MedioConceptoEmpresa::class)->findBy(array('empresa' => $empresa));
  334.         $arrayConceptos = Array();
  335.         foreach($mediosConceptoEmpresa as $mce){
  336.             if($mce->getBoletasEncontradas() == true){
  337.                 //si esta paga
  338.                 //if($mce->getBoletasEncontradas() == true){
  339.                 //mensaje Flash
  340.                 $this->addFlash('notice', array(
  341.                     'type' => 'warning'
  342.                     'title' => 'IMPORTANTE!'
  343.                     'message' => 'Usted ya tiene generada una boleta en el periodo 
  344.                     '.$mce->getPeriodoMes().'/'.$mce->getPeriodoAno().' si continĂºa, se eliminarĂ¡ del sistema
  345.                     la boleta anterior, quedando la misma invalidada para pagar.'
  346.                 ));
  347.             }
  348.             $arrayConceptos[]=[
  349.                 'nombre' => $mce->getConcepto()->getNombre(),
  350.             ];
  351.         }
  352.         //cargos
  353.         $cargos $em->getRepository(Cargo::class)->findBy(array('isActive' => true));
  354.         $arrayCargos = Array();
  355.         foreach($cargos as $cargo){
  356.             $arrayCargos[]=[
  357.                 'id' => $cargo->getId(),
  358.                 'nombre' => $cargo->getNombre(),
  359.             ];
  360.         }
  361.         //Escala, ver que pasa cuando no hay escala.
  362.         $escalaSalarial $em->getRepository(EscalaSalarial::class)->findOneBy(array('fecha' => $fechaPeriodo));
  363.         //Empleados
  364.         $arrayEmpleados = Array();
  365.         //para seguir avanzando si no faltan datos a los empleados
  366.         $continuar true;
  367.         foreach($empleadosEmpresa as $empleadoDeclarado){
  368.             //sucursal
  369.             $sucursalEmpleado null;
  370.             if($empleadoDeclarado->getSucursal() != null){
  371.                 $sucursalEmpleado $empleadoDeclarado->getSucursal()->getNombre();
  372.             }else{
  373.                 $continuar false;
  374.             }
  375.             //Cargo
  376.             $cargoEmpleado null;
  377.             $remuneracionEstimativa 0;
  378.             $horaMinimaCargo null;
  379.             if($empleadoDeclarado->getCargo() != null){
  380.                 $cargoEmpleado $empleadoDeclarado->getCargo()->getNombre();
  381.                 $horaMinimaCargo $empleadoDeclarado->getCargo()->getHorasMinima();
  382.                 //comparar horas trabajadas con las del cargo
  383.                 $horasMinima false;
  384.                 if($empleadoDeclarado->getCargo()->getHorasMinima() <= $empleadoDeclarado->getHorasTrabajadas()){
  385.                     $horasMinima true;
  386.                 }
  387.                 //remuneracion
  388.                 //si hay escala para ese periodo y tambien cargo
  389.                 if($escalaSalarial){
  390.                     $remuneracionEstimativa $this->remuneracionEstimativa($empleadoDeclarado$escalaSalarial);
  391.                 }
  392.             }else{
  393.                 $continuar false;
  394.             }
  395.             //aguinaldo
  396.             $aguinaldo null;
  397.             if($mes == || $mes == 12){
  398.                 $aguinaldo $empleadoDeclarado->getRemuneracion() / 2;
  399.             }
  400.             if($empleadoDeclarado->getRemuneracion() != null){
  401.                 $remuneracionEmpleado $empleadoDeclarado->getRemuneracion();
  402.             }else{
  403.                 $remuneracionEmpleado 0;
  404.                 $continuar false;
  405.             }
  406.             $arrayEmpleados[]=[
  407.                 'id' => $empleadoDeclarado->getEmpleado()->getId(),
  408.                 'id_empleado_sucursal' => $empleadoDeclarado->getId(),
  409.                 'nombre' => $empleadoDeclarado->getEmpleado()->getNombre().' '.$empleadoDeclarado->getEmpleado()->getApellido(),
  410.                 'sucursal' => $sucursalEmpleado,
  411.                 'cargo' => $cargoEmpleado,
  412.                 'remuneracion' => $remuneracionEmpleado,
  413.                 'sexo' => $empleadoDeclarado->getEmpleado()->getSexo(),
  414.                 'remuneracionEstimativa' => $remuneracionEstimativa,
  415.                 'horasTrabajadas' => $empleadoDeclarado->getHorasTrabajadas(),
  416.                 'horasMinimaCargo' => $horaMinimaCargo,
  417.                 'horasMinima' => $horasMinima,
  418.                 'remuneracionEstimativa' => $remuneracionEstimativa,
  419.                 'aguinaldo' => $aguinaldo,
  420.                // 'continuar' => $continuar,
  421.             ];
  422.         }
  423.         //empresa
  424.         $arrayEmpresa = Array();
  425.         $arrayEmpresa[]=[
  426.             'id' => $empresa->getId(),
  427.             'razonSocial' => $empresa->getRazonSocial(),
  428.             'cuit' => $empresa->getCuit(),
  429.             'empleados' => $arrayEmpleados,
  430.         ];
  431.         //BOLETA
  432.         $infoBoleta= Array();
  433.         $infoBoleta[]=[
  434.             'empresa' => $arrayEmpresa,
  435.             'conceptos' => $arrayConceptos,
  436.             'cargos' => $arrayCargos,
  437.             'ano' => $ano,
  438.             'mes' => $mes,
  439.             'continuar' => $continuar,
  440.         ];
  441.         return $this->render('consola/panel_contador/boleta/paso2.html.twig', [
  442.             'infoBoleta' => $infoBoleta,
  443.             'escalaSalarial' => $escalaSalarial,
  444.             'motivos' => $arrayMotivos,
  445.         ]);
  446.     
  447.     }
  448.     #[Route('/paso3/{id}/mes/{mes}/ano/{ano}/generar-una-boleta-nueva-para-la-empresa'name'contador_boleta_paso3'methods: ['GET''POST'])]
  449.     public function paso3(Request $request,Empresa $empresa,$mes,$ano,EntityManagerInterface $em): Response
  450.     {
  451.         $empleadosEmpresa $em->getRepository(EmpleadoEmpresaSucursal::class)->findBy(array(
  452.             'empresa' => $empresa,
  453.             'isActive' => true
  454.         ));
  455.                     //saco los conceptos
  456.         $ConceptosEmpresa $em->getRepository(MedioConceptoEmpresa::class)->findBy(array('empresa' => $empresa));
  457.         if($empleadosEmpresa){  
  458.             if (isset($_GET['Continuar']))
  459.             {
  460.                 //fecha que selecciono
  461.                 $fechaDePagoSeleccionada=$request->get("fechaDePago");    
  462.                 $fechaSeleccionada \DateTime::createFromFormat('Y-m-d'$fechaDePagoSeleccionada);         
  463.                 //fecha hoy
  464.                 $fechaHoy = new \DateTime("now");
  465.                 $fechaHoy $fechaHoy->format('Y-m-d');
  466.             
  467.                 //evaluo que no sea una fecha mayor a la de hoy
  468.                 if($fechaDePagoSeleccionada >= $fechaHoy ){
  469.                    //recorro todos los conceptos
  470.                    foreach ($ConceptosEmpresa as $conceptoEmpresa
  471.                    {
  472.                        //por cada concepto lo pongo en cero
  473.                        $cantidadEmpleados 0;
  474.                        $sumaRemuneracion 0;
  475.                        $sumaAguinaldo 0;
  476.                        //pregunto si en este concepto hay trabajadores que renunciaron a este concepto
  477.                        foreach ($empleadosEmpresa as $empleadoEmpresa) {
  478.                            $sumarEmpleadoConcepto true;
  479.                            //recorro los conceptos renunciados
  480.                            foreach($empleadoEmpresa->getEmpleado()->getConcepto() as $conceptoRenunciado){
  481.                                //si renuncio a este concepto
  482.                                if($conceptoRenunciado == $conceptoEmpresa->getConcepto()){
  483.                                    //no lo sumo
  484.                                    $sumarEmpleadoConcepto false;
  485.                                }
  486.                            }
  487.                            if($sumarEmpleadoConcepto == true){
  488.                                $cantidadEmpleados $cantidadEmpleados 1;
  489.                                $sumaRemuneracion $sumaRemuneracion $empleadoEmpresa->getRemuneracion();
  490.                                $sumaAguinaldo $sumaAguinaldo $empleadoEmpresa->getEmpleado()->getAguinaldo();
  491.                            }
  492.                        }
  493.                        //vencimeinto 5 dias de corrido +2   se cambio a pedido del sindicato
  494.                        $fechaNueva $fechaSeleccionada->format('Y-m-d');                         
  495.                        $vencimeinto \DateTime::createFromFormat('Y-m-d'$fechaNueva);
  496.                        $fechaVencimiento $vencimeinto->modify('+7 day');
  497.                        $conceptoEmpresa->setFechaVencimiento(\DateTime::createFromFormat('Y-m-d H:i:s'$fechaVencimiento->format('Y-m-d').' 23:59:59'));
  498.                        //sumo el aguinaldo a la remuneracion total
  499.                        if($mes == || $mes == 12){
  500.                            $montoTotal $sumaRemuneracion $sumaAguinaldo;
  501.                        }else{
  502.                            $montoTotal $sumaRemuneracion;
  503.                        }
  504.                        
  505.                        //Aporte
  506.                        $porcentaje $conceptoEmpresa->getConcepto()->getPorcentaje();
  507.                        $aportes = ($montoTotal $porcentaje)/100;
  508.                        $conceptoEmpresa->setAporte($aportes);
  509.                        //PUNITORIOS
  510.                        //le pregunto hasta que dia al sindicato ej:16
  511.                        $dia_vencimiento 16-1//le resto 1 por que no me toma en la diff de fechas
  512.                        $punitorios=0;
  513.                        //sumo un mes al periodo ya que, se paga a contra mes
  514.                        $mesPunitorios $conceptoEmpresa->getPeriodoMes()+1;
  515.                        //veo si el ano es este
  516.                        if($mesPunitorios == 13){
  517.                            $mesPunitorios 1;
  518.                            $ano2 $conceptoEmpresa->getPeriodoAno()+1;
  519.                        }else{
  520.                            $ano2 $conceptoEmpresa->getPeriodoAno();
  521.                        }
  522.                        $fechaComparar $ano2.'-'.$mesPunitorios.'-'.$dia_vencimiento;
  523.                        $fechaComparar \DateTime::createFromFormat('Y-m-d'$fechaComparar);
  524.                        if ($fechaSeleccionada $fechaComparar){
  525.                            //saco los dias de diferencia
  526.                            $cantidadDias $fechaComparar->diff($fechaSeleccionada);
  527.                            $cantidadDias $cantidadDias->format('%a');
  528.                            $valor_dia=0.2;
  529.                            $porcentaje_punitorios $cantidadDias $valor_dia;
  530.                            $punitorios = ($aportes $porcentaje_punitorios)/100;
  531.                        }
  532.                        if($mes == || $mes == 12){
  533.                            $conceptoEmpresa->setAguinaldos($sumaAguinaldo);
  534.                        }else{
  535.                            $conceptoEmpresa->setAguinaldos(0);
  536.                        }
  537.                        $conceptoEmpresa->setSumaRemuneraciones($sumaRemuneracion);
  538.                        $conceptoEmpresa->setCantidadEmpleados($cantidadEmpleados);
  539.                        $conceptoEmpresa->setPunitorios($punitorios);
  540.                        $conceptoEmpresa->setTotalDepositado($punitorios $aportes);
  541.                        $conceptoEmpresa->setFechaSeleccionada($fechaSeleccionada);
  542.                        
  543.                        //METO TODO PROVISORIO ANTES DE GENERAR LA BOLETA
  544.                        $em->persist($conceptoEmpresa);
  545.                        $em->flush();
  546.                    }//foreach
  547.                     return $this->redirectToRoute('contador_boleta_paso4', [
  548.                         'id' => $empresa->getId(),
  549.                         'mes' => $mes,
  550.                         'ano' => $ano,
  551.                     ]);
  552.                     
  553.                 }else{
  554.                     //mensaje Flash
  555.                     $this->addFlash('notice', array(
  556.                         'type' => 'danger'
  557.                         'title' => 'ERROR!'
  558.                         'message' => 'La fecha que seleccionĂ³ ya paso! Seleccione una nueva fecha.'
  559.                     ));
  560.                 }
  561.             }//ISSET
  562.         }else{
  563.             //mensaje Flash
  564.             $this->addFlash('notice', array(
  565.                 'type' => 'danger'
  566.                 'title' => 'ERROR!'
  567.                 'message' => 'La cantidad de empleados no puede ser cero (0).'
  568.             ));
  569.         }
  570.         //conceptos
  571.         $mediosConceptoEmpresa $em->getRepository(MedioConceptoEmpresa::class)->findBy(array('empresa' => $empresa));
  572.         $arrayConceptoMediosDePago = Array();
  573.         foreach($mediosConceptoEmpresa as $mce){
  574.             if($mce->getBoletasEncontradas() == true){
  575.                 //mensaje Flash
  576.                 $this->addFlash('notice', array(
  577.                     'type' => 'warning'
  578.                     'title' => 'IMPORTANTE!'
  579.                     'message' => 'Usted ya tiene generada una boleta en el periodo 
  580.                     '.$mce->getPeriodoMes().'/'.$mce->getPeriodoAno().' en concepto de '.$mce->getConcepto()->getNombre().' Si continĂºa, se eliminarĂ¡ del sistema
  581.                     la boleta anterior, quedando la misma invalidada para pagar.'
  582.                 ));
  583.             }
  584.             //saco los medios de pagos
  585.             $arrayMediosDePago = Array();
  586.             foreach($mce->getConcepto()->getMediosDePago() as $medioDePago){
  587.                 //guardo el logo para mostrar
  588.                 $arrayMediosDePago[]=[
  589.                     'logo' => $medioDePago->getLogo(),
  590.                 ];
  591.             }
  592.             $arrayConceptoMediosDePago[]=[
  593.                 'nombre' => $mce->getConcepto()->getNombre(),
  594.                 'arrayMediosDePago' => $arrayMediosDePago,
  595.             ];
  596.         }
  597.         //empresa
  598.         $arrayEmpresa = Array();
  599.         $arrayEmpresa[]=[
  600.             'id' => $empresa->getId(),
  601.             'razonSocial' => $empresa->getRazonSocial(),
  602.             'cuit' => $empresa->getCuit(),
  603.         ];
  604.         //Empleados
  605.         $sumaRemuneraciones 0;
  606.         $sumaAguinaldos 0;
  607.         foreach($empleadosEmpresa as $empleadoDeclarado){
  608.             $sumaRemuneraciones $sumaRemuneraciones $empleadoDeclarado->getRemuneracion();
  609.             $sumaAguinaldos $sumaAguinaldos $empleadoDeclarado->getEmpleado()->getAguinaldo();
  610.         }
  611.         //BOLETA
  612.         $infoBoleta= Array();
  613.         $infoBoleta[]=[
  614.             'empresa' => $arrayEmpresa,
  615.             'ano' => $ano,
  616.             'mes' => $mes,
  617.             'cantidadEmpleados' => count($empleadosEmpresa),
  618.             'sumaRemuneraciones' => $sumaRemuneraciones,
  619.             'sumaAguinaldos' => $sumaAguinaldos,
  620.         ];
  621.         return $this->render('consola/panel_contador/boleta/paso3.html.twig', [
  622.             'infoBoleta' => $infoBoleta,
  623.             'arrayConceptoMediosDePago' => $arrayConceptoMediosDePago,
  624.         ]);
  625.     } 
  626.     #[Route('/paso4/{id}/mes/{mes}/ano/{ano}/generar-una-boleta-nueva-para-la-empresa'name'contador_boleta_paso4'methods: ['GET''POST'])]
  627.     public function paso4(Request $request,Empresa $empresa,$mes,$ano,EntityManagerInterface $em): Response
  628.     {
  629.         //saco los conceptos
  630.         $mediosConceptoEmpresa $em->getRepository(MedioConceptoEmpresa::class)->findBy(array('empresa' => $empresa));
  631.         if (isset($_GET['Generar']))
  632.         {
  633.             //recorro todos los conceptos
  634.             foreach ($mediosConceptoEmpresa as $conceptoEmpresa) {
  635.                 //DEBO CREAR UNA BOLETA POR CADA CONCEPTOO!!!!!
  636.                 $boleta = new Boleta();
  637.                 //empresa datos
  638.                 $boleta->setFechaEmision(new \DateTime("now"));
  639.                 $boleta->setIsActive(true);
  640.                 $boleta->setEmpresa($empresa);
  641.                 $boleta->setNombreEmpresa($empresa->getRazonSocial());
  642.                 $boleta->setCuit($empresa->getCuit());
  643.                 $boleta->setCantidadEmpleados($conceptoEmpresa->getCantidadEmpleados());
  644.                 $boleta->setAguinaldos($conceptoEmpresa->getAguinaldos());
  645.                 $boleta->setConcepto($conceptoEmpresa->getConcepto());
  646.                 $boleta->setFechaPago(\DateTime::createFromFormat('Y-m-d H:i:s'$conceptoEmpresa->getFechaSeleccionada()->format('Y-m-d').' 00:00:00'));
  647.                 $boleta->setFechaVencimiento(\DateTime::createFromFormat('Y-m-d H:i:s'$conceptoEmpresa->getFechaVencimiento()->format('Y-m-d').' 00:00:00'));
  648.                 $boleta->setRemuneracionTotal($conceptoEmpresa->getSumaRemuneraciones());
  649.                 $boleta->setAporte($conceptoEmpresa->getAporte());
  650.                 $boleta->setPunitorios($conceptoEmpresa->getPunitorios());
  651.                 $boleta->setTotalDepositado($conceptoEmpresa->getTotalDepositado());
  652.                 $boleta->setUserCargo($this->getUser());
  653.                 $boleta->setPagada(false);
  654.                 //letras
  655.                 $formatter = new NumeroALetras();
  656.                 $boleta->setNumerosALetras($formatter->toMoney($conceptoEmpresa->getTotalDepositado(), 2'PESOS''CENTAVOS'));
  657.                 //periodo
  658.                 $fechaPeriodo $conceptoEmpresa->getPeriodoAno().'-'.$conceptoEmpresa->getPeriodoMes().'-01';
  659.                 $date = new \DateTime($fechaPeriodo);
  660.                 $boleta->setFechaPeriodo($date);
  661.             //GENERO UNA BOLETA CON TODOS LOS MEDIOS DE PAGOS QUE TENGA ESE CONCEPTO
  662.                 //saco los medios de pago para este concepto y los recorro
  663.                 foreach ($conceptoEmpresa->getConcepto()->getMediosDePago() as $medioDePago) {
  664.                     //BANCO 
  665.                     if($medioDePago->getId() == 1){
  666.                         //genero el codigo de barras para el banco
  667.                         $boleta $em->getRepository(Boleta::class)->CodigoBarrasBanco($boleta);
  668.                     }
  669.                 }                     
  670.                 //fin codigos de barras
  671.                 
  672.                 // //pregunto sino hay ni un codigo no la guardo.
  673.                 // if($boleta->getCodigoBarras() != NULL)
  674.                 //     {                    
  675.                     //como genere boleta nueva ELIMINO las anteriores
  676.                     $boletasAnteriores $em->getRepository(Boleta::class)->findBy(array(
  677.                         'isActive' => true,
  678.                         'pagada' => false,
  679.                         'empresa' => $empresa,
  680.                         'fechaPeriodo' => $boleta->getFechaPeriodo(),
  681.                         'concepto' => $boleta->getConcepto(),
  682.                     ));
  683.                     
  684.                     //pregunto si encontro, las elimino
  685.                     if ($boletasAnteriores != false)
  686.                     {
  687.                         foreach ($boletasAnteriores as $boletaAnterior)
  688.                         {
  689.                             $boletaAnterior->setIsActive(false);
  690.                             $em->persist($boletaAnterior);
  691.                             $em->flush();
  692.                         }
  693.                     }
  694.                     //miro que no haya una boleta con el mismo codigo
  695.                     $em->persist($boleta);
  696.                     $em->flush();
  697.                     //CARGO LOS EMPLEADOS_BOLETA
  698.                     $empleadosEmpresa $em->getRepository(EmpleadoEmpresaSucursal::class)->findBy(array(
  699.                         'empresa' => $empresa,
  700.                         'isActive' => true
  701.                     ));
  702.                     foreach($empleadosEmpresa as $empleadoEmpresa)
  703.                     {
  704.                         $agregar true;
  705.                         //recorro los conceptos renunciados por el empleado
  706.                         foreach($empleadoEmpresa->getEmpleado()->getConcepto() as $conceptoRenunciado){
  707.                             //si renuncio a este concepto
  708.                             if($conceptoRenunciado == $conceptoEmpresa->getConcepto()){
  709.                                 $agregar false;
  710.                             }
  711.                         }
  712.                         if($agregar == true){
  713.                             //CREO EL EMPLEADO BOLETA
  714.                             $empleadoBoleta = new EmpleadoBoleta();
  715.                             $empleadoBoleta->setBoleta($boleta);
  716.                             $empleadoBoleta->setEmpleado($empleadoEmpresa->getEmpleado());
  717.                             $empleadoBoleta->setRemuneracion($empleadoEmpresa->getRemuneracion());
  718.                             $aporto=($empleadoEmpresa->getRemuneracion()*$boleta->getConcepto()->getPorcentaje())/100
  719.                             $empleadoBoleta->setMontoAportado(round($aporto));
  720.                             $empleadoBoleta->setCantidadHoras($empleadoEmpresa->getHorasTrabajadas());
  721.                             $empleadoBoleta->setCargo($empleadoEmpresa->getCargo());
  722.                             $empleadoBoleta->setMotivoLiquidacion($empleadoEmpresa->getEmpleado()->getMotivoLiquidacionEmpleado());
  723.                             $empleadoBoleta->setFechaPeriodo($boleta->getFechaPeriodo());
  724.                             $empleadoBoleta->setSucursal($empleadoEmpresa->getSucursal());
  725.                             $empleadoBoleta->setAguinaldo($empleadoEmpresa->getEmpleado()->getAguinaldo());
  726.                             //guardo el empleado Boleta
  727.                             $em->persist($empleadoBoleta);
  728.                             $em->flush();
  729.                         }
  730.                     }
  731.                     
  732.                     //METO EL ID BOLETA EN CONCEPTO-EMPRESA
  733.                     $conceptoEmpresa->setBoleta($boleta);
  734.                     //meto los errores de la boleta
  735.                     $conceptoEmpresa->setError($boleta->getError());
  736.                     //guardo el medio
  737.                     $em->persist($conceptoEmpresa);
  738.                     $em->flush();
  739.                     
  740.                 // }else{
  741.                 //     //si no puedo generar la boleta guardo los errores para mostrar
  742.                 //     $em->persist($conceptoEmpresa);
  743.                 //     $em->flush();
  744.                 // }
  745.                 
  746.             }//foreach
  747.             return $this->redirectToRoute('contador_boleta_paso5', [
  748.                 'id' => $empresa->getId(),
  749.             ]);
  750.         }
  751.         //conceptos
  752.         $arrayConceptoMediosDePago = Array();
  753.         foreach($mediosConceptoEmpresa as $mce){
  754.             if($mce->getBoletasEncontradas() == true){
  755.                 //mensaje Flash
  756.                 $this->addFlash('notice', array(
  757.                     'type' => 'warning'
  758.                     'title' => 'IMPORTANTE!'
  759.                     'message' => 'Usted ya tiene generada una boleta en el periodo 
  760.                     '.$mce->getPeriodoMes().'/'.$mce->getPeriodoAno().' en concepto de '.$mce->getConcepto()->getNombre().' Si continĂºa, se eliminarĂ¡ del sistema
  761.                     la boleta anterior, quedando la misma invalidada para pagar.'
  762.                 ));
  763.             }
  764.             //saco los medios de pagos
  765.             $arrayMediosDePago = Array();
  766.             foreach($mce->getConcepto()->getMediosDePago() as $medioDePago){
  767.                 //guardo el logo para mostrar
  768.                 $arrayMediosDePago[]=[
  769.                     'logo' => $medioDePago->getLogo(),
  770.                 ];
  771.             }
  772.             $arrayConceptoMediosDePago[]=[
  773.                 'nombre' => $mce->getConcepto()->getNombre(),
  774.                 'remuneraciones' => $mce->getSumaRemuneraciones(),
  775.                 'aporte' => $mce->getAporte(),
  776.                 'cantidadEmpleados' => $mce->getCantidadEmpleados(),
  777.                 'aguinaldos' => $mce->getAguinaldos(),
  778.                 'punitorios' => $mce->getPunitorios(),
  779.                 'totalDepositado' => $mce->getTotalDepositado(),
  780.                 'fechaVencimiento' => $mce->getFechaVencimiento(),
  781.                 'arrayMediosDePago' => $arrayMediosDePago,
  782.             ];
  783.         }
  784.         //empresa
  785.         $arrayEmpresa = Array();
  786.         $arrayEmpresa[]=[
  787.             'id' => $empresa->getId(),
  788.             'razonSocial' => $empresa->getRazonSocial(),
  789.             'cuit' => $empresa->getCuit(),
  790.         ];
  791.         //BOLETA
  792.         $infoBoleta= Array();
  793.         $infoBoleta[]=[
  794.             'empresa' => $arrayEmpresa,
  795.             'ano' => $ano,
  796.             'mes' => $mes,
  797.         ];
  798.         return $this->render('consola/panel_contador/boleta/paso4.html.twig', [
  799.             'infoBoleta' => $infoBoleta,
  800.             'arrayConceptoMediosDePago' => $arrayConceptoMediosDePago,
  801.         ]);       
  802.     } 
  803.     #[Route('/paso5/{id}/boletas-generadas'name'contador_boleta_paso5'methods: ['GET''POST'])]
  804.     public function paso5(Request $request,Empresa $empresa,EntityManagerInterface $em): Response
  805.     {
  806.        //saco los conceptos
  807.        $mediosConceptoEmpresa $em->getRepository(MedioConceptoEmpresa::class)->findBy(array('empresa' => $empresa));
  808.        //conceptos
  809.        $arrayBoletas = Array();
  810.        foreach($mediosConceptoEmpresa as $mce){
  811.            //saco los medios de pagos
  812.            $arrayMediosDePago = Array();
  813.            foreach($mce->getConcepto()->getMediosDePago() as $medioDePago){
  814.                //guardo el logo para mostrar
  815.                $arrayMediosDePago[]=[
  816.                    'logo' => $medioDePago->getLogo(),
  817.                ];
  818.            }
  819.            //si hay boleta
  820.            if($mce->getBoleta() != null)
  821.            {
  822.                $boleta $mce->getBoleta();
  823.                $arrayBoletas[]=[
  824.                    'id' => $boleta->getId(),
  825.                    'nombre' => $boleta->getConcepto()->getNombre(),
  826.                    'remuneraciones' => $boleta->getRemuneracionTotal(),
  827.                    'aporte' => $boleta->getAporte(),
  828.                    'cantidadEmpleados' => $boleta->getCantidadEmpleados(),
  829.                    'aguinaldo' => $boleta->getAguinaldos(),
  830.                    'punitorios' => $boleta->getPunitorios(),
  831.                    'totalDepositado' => $boleta->getTotalDepositado(),
  832.                    'fechaPeriodo' => $boleta->getFechaPeriodo(),
  833.                    'fechaVencimiento' => $boleta->getFechaVencimiento(),
  834.                    'nombre_concepto' => $boleta->getConcepto()->getNombre(),
  835.                    'error' => $boleta->getError(),
  836.                    'arrayMediosDePago' => $arrayMediosDePago,
  837.                ];
  838.            }else{
  839.                //no se genero la boleta
  840.                $this->addFlash('notice', array(
  841.                    'type' => 'danger'
  842.                    'title' => 'ERROR!'
  843.                    '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().' '
  844.                ));
  845.            }
  846.        }
  847.        //empresa
  848.        $arrayEmpresa = Array();
  849.        $arrayEmpresa[]=[
  850.            'id' => $empresa->getId(),
  851.            'razonSocial' => $empresa->getRazonSocial(),
  852.            'cuit' => $empresa->getCuit(),
  853.        ];
  854.        return $this->render('consola/panel_contador/boleta/paso5.html.twig', [
  855.            'empresa' => $arrayEmpresa,
  856.            'arrayBoletas' => $arrayBoletas,
  857.        ]);
  858.     }
  859.     #[Route('/historial/{id}/listado-de-boletas-de-la-empresa'name'contador_historial_boletas_empresa'methods: ['GET''POST'])]
  860.     public function historiaBoletasEmpresa(Request $request,Empresa $empresa,EntityManagerInterface $em): Response
  861.     {
  862.         //saco las boletas de la empresa
  863.         $boletas $em->getRepository(Boleta::class)->findBy(array(
  864.             'empresa' => $empresa,
  865.             'isActive' => true,
  866.         ),array('fechaPeriodo' => 'DESC'));
  867.         $arrayBoletas = Array();
  868.         foreach($boletas as $boleta){
  869.             //saco los medios de pagos
  870.             $arrayMediosDePago = Array();
  871.             foreach($boleta->getConcepto()->getMediosDePago() as $medioDePago){
  872.                 //guardo el logo para mostrar
  873.                 $arrayMediosDePago[]=[
  874.                     'logo' => $medioDePago->getLogo(),
  875.                 ];
  876.             }
  877.             //Me fijo si hay comprobantes relacionado con esta boleta. Deberia de haber 1 solo activo, el ultimo que cargo
  878.             $ultimoComprobante $em->getRepository(InformarPago::class)->findOneBy(array(
  879.                 'boleta' => $boleta,
  880.                 'isActive' => true,
  881.             ));
  882.             if($ultimoComprobante){
  883.                 $comprobanteActivo true;
  884.             }else{
  885.                 $comprobanteActivo false;
  886.             }
  887.             $arrayBoletas[]=[
  888.                 'id' => $boleta->getId(),
  889.                 'pagada' => $boleta->getPagada(),
  890.                 'nombre' => $boleta->getConcepto()->getNombre(),
  891.                 'remuneraciones' => $boleta->getRemuneracionTotal(),
  892.                 'aporte' => $boleta->getAporte(),
  893.                 'cantidadEmpleados' => $boleta->getCantidadEmpleados(),
  894.                 'aguinaldo' => $boleta->getAguinaldos(),
  895.                 'punitorios' => $boleta->getPunitorios(),
  896.                 'totalDepositado' => $boleta->getTotalDepositado(),
  897.                 'fechaPeriodo' => $boleta->getFechaPeriodo(),
  898.                 'fechaVencimiento' => $boleta->getFechaVencimiento(),
  899.                 'nombre_concepto' => $boleta->getConcepto()->getNombre(),
  900.                 'error' => $boleta->getError(),
  901.                 'arrayMediosDePago' => $arrayMediosDePago,
  902.                 'comprobanteActivo' => $comprobanteActivo,
  903.             ];
  904.         
  905.         }
  906.         //empresa
  907.         $arrayEmpresa = Array();
  908.         $arrayEmpresa[]=[
  909.             'id' => $empresa->getId(),
  910.             'razonSocial' => $empresa->getRazonSocial(),
  911.             'cuit' => $empresa->getCuit(),
  912.         ];
  913.         return $this->render('consola/panel_contador/empresa/historial/historialBoletas.html.twig', [
  914.             'empresa' => $arrayEmpresa,
  915.             'arrayBoletas' => $arrayBoletas,
  916.         ]);
  917.     }
  918. }