<?php
declare(strict_types=1);
namespace App\Admin;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use App\Enums\TipoImportacaoEnum;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Sonata\AdminBundle\Route\RouteCollection;
final class ImportacaoDadosAdmin extends BaseAdmin
{
protected function configureRoutes(RouteCollection $collection)
{
$collection->add('processaImportacao');
}
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
$datagridMapper
->add('id')
->add('tipo')
->add('observacoes')
->add('createdAt')
;
}
protected function configureListFields(ListMapper $listMapper): void
{
$listMapper
->add('tipo')
->add('createdAt', null, ['label'=>'Data cadastro'])
//->add('processadoEm', null, ['label'=>'Data processamento'])
->add('_action', null, [
'actions' => [
'show' => [],
'edit' => [],
'delete' => [],
'processaImportacao' => [
'template' => 'Importacao/list__action_processaImportacao.html.twig',
],
],
]);
}
protected function configureFormFields(FormMapper $formMapper): void
{
$obj = $this->getSubject();
$fileFieldOptionsDocumentoImportacao = [
'data_class' => null,
'required' => false,
'label' => 'Documento para importação',
'help' => '',
];
if (!is_null($obj) && $obj->getDocumentoImportacao() != '') {
$fileFieldOptionsDocumentoImportacao['help'] = '<a href="/'.$obj->getDocumentoImportacao().'" target="_blank" class="btn btn-warning"/><i class="fa fa-eye" aria-hidden="true"></i> Visualizar</a>';
}
$formMapper
->add('tipo', ChoiceType::class, [
'label' => 'Tipo de importação',
'placeholder' => '-- Selecione --',
'choices' => TipoImportacaoEnum::getAssociatedValues(),
])
->add('documentoImportacaoFile', FileType::class, [
'constraints' => [new Assert\File([
'mimeTypes' => [
'text/csv', // Tipo mais comum
'text/plain', // Pode ser usado para alguns arquivos CSV
'application/vnd.ms-excel', // Alguns browsers mais antigos identificam CSV assim
],
'mimeTypesMessage' => 'O sistema só aceita arquivos no formato .csv'
])],
'label' => 'Documento para importacao',
'help' => $fileFieldOptionsDocumentoImportacao['help'],
'required' => false,
])
->add('observacoes', null, ['label'=>'Observações para importação'])
;
}
protected function configureShowFields(ShowMapper $showMapper): void
{
$showMapper
->add('id')
->add('tipo')
->add('observacoes')
->add('createdAt')
;
}
public function prePersist($object)
{
ini_set('upload_max_filesize', '10M');
$object->setCreatedAt(new \DateTime('now'));
//$object->setCadastradoPor($this->getUserLogado());
if($object->getDocumentoImportacaoFile()){
$this->manageFilesUploadPdfDocumentoImportacao($object);
}
return $object;
}
public function preUpdate($object)
{
ini_set('upload_max_filesize', '10M');
if($object->getDocumentoImportacaoFile()){
$this->manageFilesUploadPdfDocumentoImportacao($object);
}
return $object;
}
public function postRemove($object)
{
parent::postRemove($object); // TODO: Change the autogenerated stub
if($object->getDocumentoImportacaoFile()){
if (file_exists($object->getDocumentoImportacaoFile())) {
@unlink($object->getDocumentoImportacaoFile());
}
}
}
private function manageFilesUploadPdfDocumentoImportacao($obj)
{
$file = $obj->getDocumentoImportacaoFile();
$nameFile = $filename = md5(date('Y-m-d H:i:s:u')).".".$file->getClientOriginalExtension();
$uploadPath = "uploads/documento-importacao";
$file->move($uploadPath, $nameFile);
$obj->setDocumentoImportacao($uploadPath . "/" . $filename);
$obj->setDocumentoImportacaoOriginal($uploadPath . "/" . $filename);
}
}