<?php
namespace App\Controller\Admin;
use App\Entity\Persona;
use App\Form\PersonaPreinscritaType;
use Doctrine\ORM\EntityManagerInterface;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
use EasyCorp\Bundle\EasyAdminBundle\Field\Field;
use EasyCorp\Bundle\EasyAdminBundle\Field\HiddenField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ImageField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
use EasyCorp\Bundle\EasyAdminBundle\Router\CrudUrlGenerator;
use Symfony\Component\HttpFoundation\Request;
use Vich\UploaderBundle\Form\Type\VichImageType;
use DateTime;
class PersonaCrudController extends AbstractCrudController
{
public static function getEntityFqcn(): string
{
return Persona::class;
}
public function configureFields(string $pageName): iterable
{
if ($pageName === Crud::PAGE_EDIT) {
$tipoEntidadField = HiddenField::new('tipoEntidad', 'Tipo de entidad');
} else {
$tipoEntidadField = ChoiceField::new('tipoEntidad', 'Tipo de entidad')->setChoices(['-Seleccione-' => '', 'Personal contratado' => '1', 'Personal contratista' => '2', 'Persona externa' => '3']);
}
return [
Field::new('fullRut', 'RUT')->onlyOnIndex(),
Field::new('fullName', 'Nombre')->onlyOnIndex(),
//Step 0
$tipoEntidadField,
//Step 1
Field::new('rut', 'Id empleado')->hideOnIndex(),
Field::new('dv', 'Dígito verificador')->hideOnIndex(),
ChoiceField::new('situacion', 'Situación')->setChoices(['-Seleccione-' => '', 'Activo' => 'A', 'Finiquito' => 'F', 'Pendiente' => 'P'])->setValue('')->hideOnIndex(),
Field::new('nombre', 'Nombres')->hideOnIndex(),
Field::new('paterno', 'Apellido Paterno')->hideOnIndex(),
Field::new('materno', 'Apellido Materno')->hideOnIndex(),
ChoiceField::new('sexo', 'Sexo')->setChoices(['-Seleccione-' => '', 'M' => 'M', 'F' => 'F'])->setValue('')->hideOnIndex(),
Field::new('fechaNacimiento', 'Fecha de nacimiento')->hideOnIndex(),
Field::new('marcaAsistencia','Marca asistencia')->hideOnIndex(),
ChoiceField::new('estadoCivil', 'Estado civil')
->setChoices([
'-Seleccione-' => '',
'Soltero' => 'S',
'Casado' => 'C',
'Viudo' => 'V',
'Divorciado' => 'D',
'Conviviente Civil' => 'U'])->hideOnIndex(),
Field::new('numeroTelefono1', 'Número de teléfono 1')->hideOnIndex(),
Field::new('numeroTelefono2', 'Número de teléfono 2')->hideOnIndex(),
Field::new('emailInstitucional', 'Email institucional')->hideOnIndex(),
Field::new('emailPersonal', 'Email personal')->hideOnIndex(),
ChoiceField::new('nivelEstudio', 'Nivel de estudio')->setChoices([
'-Seleccione-' => '',
'Ninguno' => '0',
'Básico' => '1',
'Medio' => '2',
'Técnico' => '3',
'Universitario' => '4',
'Postgraduado' => '5'
])->hideOnIndex(),
Field::new('profesion', 'Profesión')->hideOnIndex(),
ChoiceField::new('licenciaConducir', 'Licencia de conducir')->setChoices([
'-Seleccione-' => '',
'Sin licencia' => 'N',
'A1' => 'A1',
'A2' => 'A2',
'A3' => 'A3',
'A4' => 'A4',
'A5' => 'A5',
'B' => 'B',
'C' => 'C',
'D' => 'D',
'E' => 'E',
'F' => 'F',
])->hideOnIndex(),
ImageField::new('foto')->onlyOnIndex()->setBasePath('/files/foto_persona')->hideOnIndex(),
TextField::new('fotoFile')->onlyOnForms()->setFormType(VichImageType::class)->setLabel('Foto'),
AssociationField::new('grupo'),
AssociationField::new('grupomenu', 'Grupo Menú')->hideOnIndex(),
Field::new('pin')->hideOnIndex(),
Field::new('activo', 'Activo')->setPermission('ROLE_ADMIN'),
ChoiceField::new('localizacion','Localización')->setChoices(['Geoservice' => 'geoservice'])->hideOnIndex(),
//Field::new('localizacion','Localización')->hideOnIndex(),
//Field::new('horario','Horario')->hideOnIndex(),
ChoiceField::new('horario','Horario')->setChoices(['08:00h_18:00h' => '08:00h_18:00h'])->hideOnIndex(),
//Step 2
Field::new('direccion', 'Dirección')->hideOnIndex(),
Field::new('ciudadId', 'Id ciudad')->hideOnIndex(),
Field::new('regionId', 'Id región')->hideOnIndex(),
ChoiceField::new('nacionId', 'Id nación')->setChoices([
'-Seleccione-' => '',
'Alemania' => 'alemania',
'Argentina' => 'argentina',
'Australia' => 'australia',
'Austria' => 'austria',
'Bélgica' => 'belgica',
'Bolivia' => 'bolivia',
'Brasil' => 'brasil',
'Bulgaria' => 'bulgaria',
'Canadá' => 'canada',
'República Checa' => 'checa',
'Chile' => 'chile',
'China' => 'china',
'Colombia' => 'colombia',
'Costa Rica' => 'costarica',
'Croacia' => 'croacia',
'Cuba' => 'cuba',
'Dinamarca' => 'cinamarca',
'República Dominicana' => 'dominicana',
'Ecuador' => 'ecuador',
'Egipto' => 'egipto',
'España' => 'espana',
'Francia' => 'francia',
'Grecia' => 'grecia',
'Guatemala' => 'guatemala',
'Haití' => 'haiti',
'Israel' => 'israel',
'Italia' => 'italia',
'Jamaica' => 'jamaica',
'Japón' => 'japon',
'México' => 'mexico',
'Palestina' => 'palestina',
'Perú' => 'peru',
'Portugal' => 'portugal',
'Rusia' => 'rusia',
'Salvador' => 'salvador',
'Siria' => 'siria',
'Suecia' => 'suecia',
'Suiza' => 'suiza',
'Turquía' => 'turquia',
'Reino Unido' => 'uk',
'Uruguay' => 'uruguay',
'Estados Unidos' => 'usa',
'Venezuela' => 'venezuela'
])->hideOnIndex(),
//Step 3
ChoiceField::new('bancoId', 'Id banco')->setChoices([
'-Seleccione-' => '',
'Sin banco' => 'nobanco',
'Itaú' => 'itau',
'Crédito e inversiones' => 'bci',
'Chile / Edwards' => 'chile',
'Internacional' => 'internacional',
'Estado' => 'estado',
'BICE' => 'bice',
'Santander' => 'santander',
'Security' => 'security',
'Falabella' => 'falabella',
'Ripley' => 'ripley',
'BBVA' => 'bbva',
'Scotiabank' => 'scotia',
'Consorcio' => 'consorcio',
])->hideOnIndex(),
Field::new('cuentaBanco', 'Cuenta del banco')->hideOnIndex(),
ChoiceField::new('formaPagoId', 'Id forma de pago ')->setChoices([
'-Seleccione-' => '',
'Efectivo o directo' => 'directo',
'Efectivo en el banco' => 'efectivo',
'Abono en cuenta corriente' => 'actacorr',
'Abono en cuenta de ahorro' => 'actaaho',
'Vale vista' => 'valevista',
'Vale vista por correo' => 'valevistaCorr',
'Vale vista entregado a la empresa' => 'valevistaEmpr',
'Cheque electrónico' => 'chequeElec',
'Servipag' => 'Servipag'
])
->hideOnIndex(),
//Step 4
ChoiceField::new('afpId', 'Id AFP')->setChoices([
'-Seleccione-' => '',
'Capital' => 'capital',
'Cuprum' => 'cuprum',
'Habitat' => 'habitat',
'PlanVital' => 'planvital',
'Provida' => 'provida',
'Modelo' => 'modelo',
'Servicio de seguro social' => 'SSS',
'Empart' => 'empart'
])->hideOnIndex(),
ChoiceField::new('estadoJubilacion', 'Estado de jubilación')->setChoices([
'-Seleccione-' => '',
'Activo (No pensionado)' => '0',
'Pensionado y cotiza' => '1',
'Pensionado y NO cotiza' => '2',
'Activo mayor a 65 años (No pensionado)' => '3'
])->hideOnIndex(),
ChoiceField::new('expatriado', '¿Es expatriado?')->setChoices([
'-Seleccione-' => '',
'Si, No cotiza' => 'X',
'No' => 'N',
'Solo salud' => 'S',
'Si cotiza salud y AFP' => 'T',
'Solo AFP' => 'A'
])->hideOnIndex(),
ChoiceField::new('sistemaPensiones', 'Sistema de pensiones')->setChoices([
'-Seleccione-' => '',
'Sistema nuevo' => 'N',
'Antiguo con isapre' => 'C',
'Antiguo con FONASA' => 'T'
])->hideOnIndex(),
ChoiceField::new('intitucionSaludId', 'Id institución de salud')->setChoices([
'-Seleccione-' => '',
'Fondo nacional de salud' => 'fonasa',
'Banmédica' => 'banmedica',
'Consalud' => 'consalud',
'Vida Tres' => 'vidatres',
'Colmena Golden Cross' => 'colmena',
'Cruz Blanca' => 'cruzblanca',
'Nueva Mas Vida' => 'nuevamasvida',
'Mas Vida' => 'masvida'
])->hideOnIndex(),
Field::new('montoCotizadoIsapre', 'Monto cotizado en la Isapre en UF')->hideOnIndex(),
ChoiceField::new('tramoAsignacionFamiliar', 'Tramo de asignación familiar')->setChoices([
'-Seleccione-' => '',
'A' => 'A',
'B' => 'B',
'C' => 'C',
'D' => 'D'])->hideOnIndex(),
//Step 5
Field::new('numeroContrato', 'Número del contrato')->hideOnIndex(),
ChoiceField::new('tipoContrato', 'Tipo del contrato')->setChoices([
'-Seleccione-' => '',
'Pendiente' => 'P',
'Indefinido' => 'I',
'Plazo fijo' => 'F',
'Por obra o faena' => 'O'
])->hideOnIndex(),
Field::new('fechaInicioContrato', 'Fecha de inicio del contrato')->hideOnIndex(),
Field::new('fechaFinContrato', 'Fecha de término del contrato')->hideOnIndex(),
Field::new('sueldoBase', 'Sueldo base')->hideOnIndex(),
Field::new('cargo', 'Cargo')->hideOnIndex(),
Field::new('horasTrabajoSemanales', 'Horas de trabajo semanales')->hideOnIndex(),
ChoiceField::new('distribucionJornada', 'Distribución de jornada')->setChoices([
'5: lunes a viernes' => '5',
'6: lunes a sábado' => '6'
])->hideOnIndex(),
ChoiceField::new('cotizaSeguroCesantia', '¿Cotiza seguro de cesantía?')->setChoices(['SI' => 'SI', 'NO' => 'NO'])->hideOnIndex(),
Field::new('area', 'Área')->hideOnIndex(),
ChoiceField::new('descansaDomingos', '¿Descansa domingos?')->setChoices(['SI' => 'SI', 'NO' => 'NO'])->hideOnIndex(),
ChoiceField::new('cotizaPrevisionYSalud', '¿Cotiza previsión y salud?')->setChoices(['SI' => 'SI', 'NO' => 'NO'])->hideOnIndex(),
AssociationField::new('turno'),
ChoiceField::new('bloqueo', 'Bloqueo')->setChoices([
'-Seleccione-' => '',
'Conducta' => 'Conducta',
'Otro' => 'Otro',
])->hideOnIndex(),
];
}
public function configureActions(Actions $actions): Actions
{
$verqr = Action::new('Ver qr','Ver QR', 'fa fa-qrcode')->linkToRoute('qr_generator', function (Persona $persona) {
return [
'id' => $persona->getId(),
];
});
$descargarPersonas = Action::new('descargarPersonas')->addCssClass('action-new btn btn-primary')->displayAsLink()->createAsGlobalAction()->linkToRoute('descarga_personas');
$cloneAction = Action::new('Preinscrito', 'Pre-inscrito')->addCssClass('action-new btn btn-primary')->displayAsLink()->createAsGlobalAction()->linkToCrudAction('preinscritoAction');
return $actions
->add(Crud::PAGE_INDEX, $descargarPersonas)
->add(Crud::PAGE_INDEX, $cloneAction)
->add(Crud::PAGE_INDEX,Action::DETAIL)
->add(Crud::PAGE_INDEX, $verqr)
->setPermission(Action::EDIT, 'ROLE_ADMIN')
->setPermission(Action::DETAIL,'ROLE_GUARDIA')
->disable(Action::DELETE)
;
}
public function preinscritoAction (AdminContext $context, Request $request) {
$persona = new Persona();
$form = $this->createForm(PersonaPreinscritaType::class, $persona);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$persona->setActivo(null);
$persona->setTipoEntidad(0);
$entityManager->persist($persona);
$entityManager->flush();
if (isset($request->request->get('persona_preinscrita')['save'])) {
return $this->redirect($this->get(CrudUrlGenerator::class)->build()->setAction(Action::INDEX)->generateUrl());
} else {
return $this->redirect($this->get(CrudUrlGenerator::class)->build()->setAction('preinscritoAction')->generateUrl());
}
}
return $this->render('admin/personapreinscrita/new.html.twig', [
'persona' => $persona,
'form' => $form->createView(),
]);
}
public function createEntity(string $entityFqcn)
{
$persona = new Persona();
//$persona->setActivo(true);
return $persona;
}
public function updateEntity(EntityManagerInterface $entityManager, $entityInstance): void
{
if ($entityInstance->getTipoEntidad() == 0) {
$entityInstance->setTipoEntidad(1);
}
$entityInstance->setUpdatedAt(new DateTime('now'));
$entityManager->persist($entityInstance);
$entityManager->flush();
}
public function configureCrud(Crud $crud): Crud
{
return $crud
->overrideTemplates([
'crud/new' => 'admin/persona/new.html.twig',
'crud/index' => 'admin/persona/index.html.twig',
'crud/edit' => 'admin/persona/edit.html.twig'
])
;
}
public function configureAssets(Assets $assets): Assets
{
return $assets
->addCssFile('assets/smart-wizard/css/smart_wizard_all.css')
->addJsFile('assets/smart-wizard/js/jquery.smartWizard.js');
}
}