<?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\TiposArquivosOs;
use Sonata\AdminBundle\Form\Type\ModelType;
use Sonata\Form\Type\DatePickerType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Validator\Constraints as Assert;
final class ArquivoOsAdmin extends AbstractAdmin
{
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
$datagridMapper
->add('id')
->add('createdAt')
->add('tipo')
->add('expiredAt')
->add('os')
;
}
protected function configureListFields(ListMapper $listMapper): void
{
$listMapper
->add('os.id', null, ['label'=>'ID OS'])
->add('os.proposta.numeroFormatado', null, ['label'=>'Os'])
->add('tipo')
->add('createdAt', null, ['label'=>'Data de cadastro'])
->add('expiredAt', null, ['label'=>'Data de expiração'])
->add('_action', null, [
'actions' => [
'show' => [],
'edit' => [],
'delete' => [],
],
]);
}
protected function configureFormFields(FormMapper $formMapper): void
{
/** @var ArquivoDownload $arquivo */
$arquivo = $this->getSubject();
$imgReq = false;
$fileFieldOptions = [
'data_class' => null,
'required' => $imgReq,
'label' => 'Arquivo',
'help' => ''
];
if (!is_null($arquivo) && $arquivo->getArquivo() != '') {
$fileFieldOptions['help'] = '<a href="/'.$arquivo->getArquivo().'" target="_blank" class="btn btn-warning"/><i class="fa fa-eye" aria-hidden="true"></i> Visualizar Arquivo</a>';
}
$formMapper
->add('os', ModelType::class, [
'placeholder' => '-- Selecione --',
'label' => 'OS',
'required' => true,
'expanded' => false,
'multiple' => false
], ['attr'=>['disabled'=>true]])
->add('tipo', ChoiceType::class, [
'label'=>'Tipo',
'choices' => TiposArquivosOs::getAssociatedValues(),
])
->add('expiredAt', DatePickerType::class,['label'=>'Data de expiração', 'required'=>false])
->add('arquivoFile', FileType::class, [
'constraints' => [new Assert\File([
'mimeTypes' => [
'application/pdf',
'application/x-pdf',
'image/jpeg',
'image/jpg',
'image/png'
],
'mimeTypesMessage' => 'O sistema não aceita este formato'
])],
'label' => 'Arquivo',
'help' => $fileFieldOptions['help'],
'required' => false,
])
;
}
protected function configureShowFields(ShowMapper $showMapper): void
{
$showMapper
->add('id')
->add('empresa.razaoSocial', null, ['label'=>'Cliente'])
->add('createdAt', null, ['label'=>'Data de cadastro'])
->add('tipo')
->add('expiredAt', null, ['label'=>'Data de expiração'])
;
}
public function prePersist($object)
{
/** @var ArquivoDownload $object */
ini_set('upload_max_filesize', '50M');
if($object->getArquivoFile()){
$this->manageFilesUpload($object);
}
$object->setCreatedAt(new \DateTime());
return $object;
}
public function preUpdate($object)
{
/** @var ArquivoDownload $object */
ini_set('upload_max_filesize', '50M');
if($object->getArquivoFile()){
if($object->getArquivoOriginal()){
if(file_exists($object->getArquivoOriginal())) {
@unlink($object->getArquivoOriginal());
}
}
$this->manageFilesUpload($object);
}
return $object;
}
public function postRemove($object)
{
parent::postRemove($object); // TODO: Change the autogenerated stub
if($object->getArquivo()){
if (file_exists($object->getArquivo())) {
@unlink($object->getArquivo());
}
}
}
/**
* @param ArquivoDownload $obj
* @return ArquivoDownload
*/
private function manageFilesUpload($obj)
{
$file = $obj->getArquivoFile();
$nameFile = $filename = md5(date('Y-m-d H:i:s:u')).".".$file->getClientOriginalExtension();
$uploadPath = "uploads/arquivos-os";
$file->move($uploadPath, $nameFile);
$obj->setArquivoOriginal($uploadPath . "/" . $filename);
$obj->setArquivo($uploadPath . "/" . $filename);
}
}