src/Controller/Admin/PersonaCrudController.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\Persona;
  4. use App\Form\PersonaPreinscritaType;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  7. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  8. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  9. use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext;
  10. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
  11. use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
  12. use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
  13. use EasyCorp\Bundle\EasyAdminBundle\Field\Field;
  14. use EasyCorp\Bundle\EasyAdminBundle\Field\HiddenField;
  15. use EasyCorp\Bundle\EasyAdminBundle\Field\ImageField;
  16. use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
  17. use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
  18. use EasyCorp\Bundle\EasyAdminBundle\Router\CrudUrlGenerator;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Vich\UploaderBundle\Form\Type\VichImageType;
  21. use DateTime;
  22. class PersonaCrudController extends AbstractCrudController
  23. {
  24.     public static function getEntityFqcn(): string
  25.     {
  26.         return Persona::class;
  27.     }
  28.     public function configureFields(string $pageName): iterable
  29.     {
  30.         if ($pageName === Crud::PAGE_EDIT) {
  31.             $tipoEntidadField HiddenField::new('tipoEntidad''Tipo de entidad');
  32.         } else {
  33.             $tipoEntidadField ChoiceField::new('tipoEntidad''Tipo de entidad')->setChoices(['-Seleccione-' => '''Personal contratado' => '1''Personal contratista' => '2''Persona externa' => '3']);
  34.         }
  35.         return [
  36.             Field::new('fullRut''RUT')->onlyOnIndex(),
  37.             Field::new('fullName''Nombre')->onlyOnIndex(),
  38.             //Step 0
  39.             $tipoEntidadField,
  40.             //Step 1
  41.             Field::new('rut''Id empleado')->hideOnIndex(),
  42.             Field::new('dv''Dígito verificador')->hideOnIndex(),
  43.             ChoiceField::new('situacion''Situación')->setChoices(['-Seleccione-' => '''Activo' => 'A''Finiquito' => 'F''Pendiente' => 'P'])->setValue('')->hideOnIndex(),
  44.             Field::new('nombre''Nombres')->hideOnIndex(),
  45.             Field::new('paterno''Apellido Paterno')->hideOnIndex(),
  46.             Field::new('materno''Apellido Materno')->hideOnIndex(),
  47.             ChoiceField::new('sexo''Sexo')->setChoices(['-Seleccione-' => '''M' => 'M''F' => 'F'])->setValue('')->hideOnIndex(),
  48.             Field::new('fechaNacimiento''Fecha de nacimiento')->hideOnIndex(),
  49.             Field::new('marcaAsistencia','Marca asistencia')->hideOnIndex(),
  50.             ChoiceField::new('estadoCivil''Estado civil')
  51.                 ->setChoices([
  52.                     '-Seleccione-' => '',
  53.                     'Soltero' => 'S',
  54.                     'Casado' => 'C',
  55.                     'Viudo' => 'V',
  56.                     'Divorciado' => 'D',
  57.                     'Conviviente Civil' => 'U'])->hideOnIndex(),
  58.             Field::new('numeroTelefono1''Número de teléfono 1')->hideOnIndex(),
  59.             Field::new('numeroTelefono2''Número de teléfono 2')->hideOnIndex(),
  60.             Field::new('emailInstitucional''Email institucional')->hideOnIndex(),
  61.             Field::new('emailPersonal''Email personal')->hideOnIndex(),
  62.             ChoiceField::new('nivelEstudio''Nivel de estudio')->setChoices([
  63.                 '-Seleccione-' => '',
  64.                 'Ninguno' => '0',
  65.                 'Básico' => '1',
  66.                 'Medio' => '2',
  67.                 'Técnico' => '3',
  68.                 'Universitario' => '4',
  69.                 'Postgraduado' => '5'
  70.             ])->hideOnIndex(),
  71.             Field::new('profesion''Profesión')->hideOnIndex(),
  72.             ChoiceField::new('licenciaConducir''Licencia de conducir')->setChoices([
  73.                 '-Seleccione-' => '',
  74.                 'Sin licencia' => 'N',
  75.                 'A1' => 'A1',
  76.                 'A2' => 'A2',
  77.                 'A3' => 'A3',
  78.                 'A4' => 'A4',
  79.                 'A5' => 'A5',
  80.                 'B' => 'B',
  81.                 'C' => 'C',
  82.                 'D' => 'D',
  83.                 'E' => 'E',
  84.                 'F' => 'F',
  85.                 ])->hideOnIndex(),
  86.             ImageField::new('foto')->onlyOnIndex()->setBasePath('/files/foto_persona')->hideOnIndex(),
  87.             TextField::new('fotoFile')->onlyOnForms()->setFormType(VichImageType::class)->setLabel('Foto'),
  88.             AssociationField::new('grupo'),
  89.             AssociationField::new('grupomenu''Grupo Menú')->hideOnIndex(),
  90.             Field::new('pin')->hideOnIndex(),
  91.             Field::new('activo''Activo')->setPermission('ROLE_ADMIN'),
  92.             ChoiceField::new('localizacion','Localización')->setChoices(['Geoservice' => 'geoservice'])->hideOnIndex(),
  93.             //Field::new('localizacion','Localización')->hideOnIndex(),
  94.             //Field::new('horario','Horario')->hideOnIndex(),
  95.             ChoiceField::new('horario','Horario')->setChoices(['08:00h_18:00h' => '08:00h_18:00h'])->hideOnIndex(),
  96.             //Step 2
  97.             Field::new('direccion''Dirección')->hideOnIndex(),
  98.             Field::new('ciudadId''Id ciudad')->hideOnIndex(),
  99.             Field::new('regionId''Id región')->hideOnIndex(),
  100.             ChoiceField::new('nacionId''Id nación')->setChoices([
  101.                 '-Seleccione-' => '',
  102.                 'Alemania' => 'alemania',
  103.                 'Argentina' => 'argentina',
  104.                 'Australia' => 'australia',
  105.                 'Austria' => 'austria',
  106.                 'Bélgica' => 'belgica',
  107.                 'Bolivia' => 'bolivia',
  108.                 'Brasil' => 'brasil',
  109.                 'Bulgaria' => 'bulgaria',
  110.                 'Canadá' => 'canada',
  111.                 'República Checa' => 'checa',
  112.                 'Chile' => 'chile',
  113.                 'China' => 'china',
  114.                 'Colombia' => 'colombia',
  115.                 'Costa Rica' => 'costarica',
  116.                 'Croacia' => 'croacia',
  117.                 'Cuba' => 'cuba',
  118.                 'Dinamarca' => 'cinamarca',
  119.                 'República Dominicana' => 'dominicana',
  120.                 'Ecuador' => 'ecuador',
  121.                 'Egipto' => 'egipto',
  122.                 'España' => 'espana',
  123.                 'Francia' => 'francia',
  124.                 'Grecia' => 'grecia',
  125.                 'Guatemala' => 'guatemala',
  126.                 'Haití' => 'haiti',
  127.                 'Israel' => 'israel',
  128.                 'Italia' => 'italia',
  129.                 'Jamaica' => 'jamaica',
  130.                 'Japón' => 'japon',
  131.                 'México' => 'mexico',
  132.                 'Palestina' => 'palestina',
  133.                 'Perú' => 'peru',
  134.                 'Portugal' => 'portugal',
  135.                 'Rusia' => 'rusia',
  136.                 'Salvador' => 'salvador',
  137.                 'Siria' => 'siria',
  138.                 'Suecia' => 'suecia',
  139.                 'Suiza' => 'suiza',
  140.                 'Turquía' => 'turquia',
  141.                 'Reino Unido' => 'uk',
  142.                 'Uruguay' => 'uruguay',
  143.                 'Estados Unidos' => 'usa',
  144.                 'Venezuela' => 'venezuela'
  145.             ])->hideOnIndex(),
  146.             //Step 3
  147.             ChoiceField::new('bancoId''Id banco')->setChoices([
  148.                 '-Seleccione-' => '',
  149.                 'Sin banco' => 'nobanco',
  150.                 'Itaú' => 'itau',
  151.                 'Crédito e inversiones' => 'bci',
  152.                 'Chile / Edwards' => 'chile',
  153.                 'Internacional' => 'internacional',
  154.                 'Estado' => 'estado',
  155.                 'BICE' => 'bice',
  156.                 'Santander' => 'santander',
  157.                 'Security' => 'security',
  158.                 'Falabella' => 'falabella',
  159.                 'Ripley' => 'ripley',
  160.                 'BBVA' => 'bbva',
  161.                 'Scotiabank' => 'scotia',
  162.                 'Consorcio' => 'consorcio',
  163.                 ])->hideOnIndex(),
  164.             Field::new('cuentaBanco''Cuenta del banco')->hideOnIndex(),
  165.             ChoiceField::new('formaPagoId''Id forma de pago ')->setChoices([
  166.                 '-Seleccione-' => '',
  167.                 'Efectivo o directo' => 'directo',
  168.                 'Efectivo en el banco' => 'efectivo',
  169.                 'Abono en cuenta corriente' => 'actacorr',
  170.                 'Abono en cuenta de ahorro' => 'actaaho',
  171.                 'Vale vista' => 'valevista',
  172.                 'Vale vista por correo' => 'valevistaCorr',
  173.                 'Vale vista entregado a la empresa' => 'valevistaEmpr',
  174.                 'Cheque electrónico' => 'chequeElec',
  175.                 'Servipag' => 'Servipag'
  176.                 ])
  177.                 ->hideOnIndex(),
  178.             //Step 4
  179.             ChoiceField::new('afpId''Id AFP')->setChoices([
  180.                 '-Seleccione-' => '',
  181.                 'Capital' => 'capital',
  182.                 'Cuprum' => 'cuprum',
  183.                 'Habitat' => 'habitat',
  184.                 'PlanVital' => 'planvital',
  185.                 'Provida' => 'provida',
  186.                 'Modelo' => 'modelo',
  187.                 'Servicio de seguro social' => 'SSS',
  188.                 'Empart' => 'empart'
  189.             ])->hideOnIndex(),
  190.             ChoiceField::new('estadoJubilacion''Estado de jubilación')->setChoices([
  191.                 '-Seleccione-' => '',
  192.                 'Activo (No pensionado)' => '0',
  193.                 'Pensionado y cotiza' => '1',
  194.                 'Pensionado y NO cotiza' => '2',
  195.                 'Activo mayor a 65 años (No pensionado)' => '3'
  196.             ])->hideOnIndex(),
  197.             ChoiceField::new('expatriado''¿Es expatriado?')->setChoices([
  198.                 '-Seleccione-' => '',
  199.                 'Si, No cotiza' => 'X',
  200.                 'No' => 'N',
  201.                 'Solo salud' => 'S',
  202.                 'Si cotiza salud y AFP' => 'T',
  203.                 'Solo AFP' => 'A'
  204.             ])->hideOnIndex(),
  205.             ChoiceField::new('sistemaPensiones''Sistema de pensiones')->setChoices([
  206.                 '-Seleccione-' => '',
  207.                 'Sistema nuevo' => 'N',
  208.                 'Antiguo con isapre' => 'C',
  209.                 'Antiguo con FONASA' => 'T'
  210.                 ])->hideOnIndex(),
  211.             ChoiceField::new('intitucionSaludId''Id institución de salud')->setChoices([
  212.                 '-Seleccione-' => '',
  213.                 'Fondo nacional de salud' => 'fonasa',
  214.                 'Banmédica' => 'banmedica',
  215.                 'Consalud' => 'consalud',
  216.                 'Vida Tres' => 'vidatres',
  217.                 'Colmena Golden Cross' => 'colmena',
  218.                 'Cruz Blanca' => 'cruzblanca',
  219.                 'Nueva Mas Vida' => 'nuevamasvida',
  220.                 'Mas Vida' => 'masvida'
  221.             ])->hideOnIndex(),
  222.             Field::new('montoCotizadoIsapre''Monto cotizado en la Isapre en UF')->hideOnIndex(),
  223.             ChoiceField::new('tramoAsignacionFamiliar''Tramo de asignación familiar')->setChoices([
  224.                 '-Seleccione-' => '',
  225.                 'A' => 'A',
  226.                 'B' => 'B',
  227.                 'C' => 'C',
  228.                 'D' => 'D'])->hideOnIndex(),
  229.             //Step 5
  230.             Field::new('numeroContrato''Número del contrato')->hideOnIndex(),
  231.             ChoiceField::new('tipoContrato''Tipo del contrato')->setChoices([
  232.                 '-Seleccione-' => '',
  233.                 'Pendiente' => 'P',
  234.                 'Indefinido' => 'I',
  235.                 'Plazo fijo' => 'F',
  236.                 'Por obra o faena' => 'O'
  237.             ])->hideOnIndex(),
  238.             Field::new('fechaInicioContrato''Fecha de inicio del contrato')->hideOnIndex(),
  239.             Field::new('fechaFinContrato''Fecha de término del contrato')->hideOnIndex(),
  240.             Field::new('sueldoBase''Sueldo base')->hideOnIndex(),
  241.             Field::new('cargo''Cargo')->hideOnIndex(),
  242.             Field::new('horasTrabajoSemanales''Horas de trabajo semanales')->hideOnIndex(),
  243.             ChoiceField::new('distribucionJornada''Distribución de jornada')->setChoices([
  244.                 '5: lunes a viernes' => '5',
  245.                 '6: lunes a sábado' => '6'
  246.             ])->hideOnIndex(),
  247.             ChoiceField::new('cotizaSeguroCesantia''¿Cotiza seguro de cesantía?')->setChoices(['SI' => 'SI''NO' => 'NO'])->hideOnIndex(),
  248.             Field::new('area''Área')->hideOnIndex(),
  249.             ChoiceField::new('descansaDomingos''¿Descansa domingos?')->setChoices(['SI' => 'SI''NO' => 'NO'])->hideOnIndex(),
  250.             ChoiceField::new('cotizaPrevisionYSalud''¿Cotiza previsión y salud?')->setChoices(['SI' => 'SI''NO' => 'NO'])->hideOnIndex(),
  251.             AssociationField::new('turno'),
  252.             ChoiceField::new('bloqueo''Bloqueo')->setChoices([
  253.                 '-Seleccione-' => '',
  254.                 'Conducta' => 'Conducta',
  255.                 'Otro' => 'Otro',
  256.             ])->hideOnIndex(),
  257.         ];
  258.     }
  259.     public function configureActions(Actions $actions): Actions
  260.     {
  261.         $verqr Action::new('Ver qr','Ver QR''fa fa-qrcode')->linkToRoute('qr_generator', function (Persona $persona) {
  262.             return [
  263.                 'id' => $persona->getId(),
  264.             ];
  265.         });
  266.         $descargarPersonas Action::new('descargarPersonas')->addCssClass('action-new btn btn-primary')->displayAsLink()->createAsGlobalAction()->linkToRoute('descarga_personas');
  267.         $cloneAction Action::new('Preinscrito''Pre-inscrito')->addCssClass('action-new btn btn-primary')->displayAsLink()->createAsGlobalAction()->linkToCrudAction('preinscritoAction');
  268.         return $actions
  269.             ->add(Crud::PAGE_INDEX$descargarPersonas)
  270.             ->add(Crud::PAGE_INDEX$cloneAction)
  271.             ->add(Crud::PAGE_INDEX,Action::DETAIL)
  272.             ->add(Crud::PAGE_INDEX$verqr)
  273.             ->setPermission(Action::EDIT'ROLE_ADMIN')
  274.             ->setPermission(Action::DETAIL,'ROLE_GUARDIA')
  275.             ->disable(Action::DELETE)
  276.             ;
  277.     }
  278.     public function preinscritoAction (AdminContext $contextRequest $request) {
  279.         $persona = new Persona();
  280.         $form $this->createForm(PersonaPreinscritaType::class, $persona);
  281.         $form->handleRequest($request);
  282.         if ($form->isSubmitted() && $form->isValid()) {
  283.             $entityManager $this->getDoctrine()->getManager();
  284.             $persona->setActivo(null);
  285.             $persona->setTipoEntidad(0);
  286.             $entityManager->persist($persona);
  287.             $entityManager->flush();
  288.             if (isset($request->request->get('persona_preinscrita')['save'])) {
  289.                 return $this->redirect($this->get(CrudUrlGenerator::class)->build()->setAction(Action::INDEX)->generateUrl());
  290.             } else {
  291.                 return $this->redirect($this->get(CrudUrlGenerator::class)->build()->setAction('preinscritoAction')->generateUrl());
  292.             }
  293.         }
  294.         return $this->render('admin/personapreinscrita/new.html.twig', [
  295.             'persona' => $persona,
  296.             'form' => $form->createView(),
  297.         ]);
  298.     }
  299.     public function createEntity(string $entityFqcn)
  300.     {
  301.         $persona = new Persona();
  302.         //$persona->setActivo(true);
  303.         return $persona;
  304.     }
  305.     public function updateEntity(EntityManagerInterface $entityManager$entityInstance): void
  306.     {
  307.         if ($entityInstance->getTipoEntidad() == 0) {
  308.             $entityInstance->setTipoEntidad(1);
  309.         }
  310.         $entityInstance->setUpdatedAt(new DateTime('now'));
  311.         $entityManager->persist($entityInstance);
  312.         $entityManager->flush();
  313.     }
  314.     public function configureCrud(Crud $crud): Crud
  315.     {
  316.         return $crud
  317.             ->overrideTemplates([
  318.                 'crud/new' => 'admin/persona/new.html.twig',
  319.                 'crud/index' => 'admin/persona/index.html.twig',
  320.                 'crud/edit' => 'admin/persona/edit.html.twig'
  321.             ])
  322.             ;
  323.     }
  324.     public function configureAssets(Assets $assets): Assets
  325.     {
  326.         return $assets
  327.             ->addCssFile('assets/smart-wizard/css/smart_wizard_all.css')
  328.             ->addJsFile('assets/smart-wizard/js/jquery.smartWizard.js');
  329.     }
  330. }