<?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\Route\RouteCollection;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\Form\Type\DatePickerType;
use Sonata\Form\Type\DateRangePickerType;
final class FluxoCaixaAdmin extends BaseAdmin
{
protected $perPageOptions = [64, 128, 256, 2000];
protected $datagridValues = [
'_page' => 1,
'_sort_order' => 'ASC',
'_sort_by' => 'dataExtrato',
'_per_page' => 2000
];
protected $maxPerPage = 2000;
public function getExportFields()
{
return array(
'Data' =>'dataExtrato',
'Descrição'=>'descricao',
'NF/Comprovante' => 'tipoDocumento',
'Conta' => 'classificacao',
'Valor' => 'valor',
);
}
public function getDataSourceIterator()
{
$datasourceit = parent::getDataSourceIterator();
$datasourceit->setDateTimeFormat('d/m/Y'); //change this to suit your needs
return $datasourceit;
}
// public function getExportFormats()
// {
// return ['html'];
// }
public function createQuery($context = 'list')
{
$query = parent::createQuery($context);
if(!isset($_GET['filter'])){
$today = new \DateTime('now');
$fromTime = new \DateTime( $today->format('Y') . '-' . $today->format('m') . '-01');
$toTime = new \DateTime($fromTime->format('Y-m-d') . ' first day of next month');
$fromTime->setTime(0,0,0);
$toTime->setTime(0,0,0);
$query->andWhere($query->getRootAliases()[0] . '.dataExtrato >= :fromTime');
$query->andWhere($query->getRootAliases()[0] . '.dataExtrato <= :toTime');
// $query->andWhere($query->expr()->notIn($query->getRootAliases()[0] . '.classificacao', '175,174,173,167,160,159,158'));
$query->setParameter('fromTime', $fromTime->format('Y-m-d'));
$query->setParameter('toTime', $toTime->format('Y-m-d'));
}
return $query;
}
// protected function configureDefaultFilterValues(array &$filterValues)
// {
// parent::configureDefaultFilterValues($filterValues); // TODO: Change the autogenerated stub
//
// // display the first page (default = 1)
// $filterValues['_page'] = 1;
//
// // reverse order (default = 'ASC')
// $filterValues['_sort_order'] = 'ASC';
//
// // name of the ordered field (default = the model's id field, if any)
// $filterValues['_sort_by'] = 'ordem';
//
// $filterValues['_per_page'] = 'All';
//
// }
// public function getFilterParameters()
// {
// $this->datagridValues = array_merge([
// 'ordem' => ['value' => 1],
// ], $this->datagridValues);
//
// return parent::getFilterParameters();
// }
protected function configureRoutes(RouteCollection $collection)
{
parent::configureRoutes($collection); // TODO: Change the autogenerated stub
$collection->remove("create");
$collection->remove("delete");
$collection->add('relatorioContabilidade');
$collection->add('ordenarFluxo');
}
protected function configureBatchActions($actions)
{
return parent::configureBatchActions($actions); // TODO: Change the autogenerated stub
unset($actions['edit']);
unset($actions['delete']);
}
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
$datagridMapper
//->add('tipo')
->add('dataExtrato', 'doctrine_orm_datetime_range', ['field_type'=> DateRangePickerType::class])
->add('ordem')
;
}
protected function configureListFields(ListMapper $listMapper): void
{
$this->setTemplate('list', 'FluxoCaixa/list.html.twig');
$listMapper
->add('ordem', null, ['label'=>'Ordem', 'template'=>'FluxoCaixa/input_ordem_list.html.twig'])
->add('dataExtrato', null, ['label'=>'Data'])
->add('descricao', null, ['label'=>'Descrição','template'=>'FluxoCaixa/descricao_list.html.twig'])
->add('tipoDocumento', null, ['label'=>'N.F/Comprovante'])
->add('classificacao', null, ['label'=>'Conta'])
->add('valorFormatado', null, ['label'=>'Valor','template'=>'FluxoCaixa/valor_list.html.twig'])
->add('id', null, ['label'=>'ID'])
->add('link', null, ['label'=>'Link','template'=>'FluxoCaixa/link_financeiro.html.twig'])
->add('_action', null, [
'actions' => [
'show' => [],
'edit' => [],
//'delete' => [],
],
]);
}
protected function configureFormFields(FormMapper $formMapper): void
{
$formMapper
->add('ordem')
->add('dataExtrato', DatePickerType::class,['label'=>'Data do extrato', 'required'=>true])
;
}
protected function configureShowFields(ShowMapper $showMapper): void
{
$showMapper
->add('id')
->add('tipo')
->add('createdAt')
->add('dataExtrato')
;
}
public function preUpdate($object)
{
$object->setUserUltimaAlteracao($this->getUserLogado());
parent::preUpdate($object); // TODO: Change the autogenerated stub
}
}