src/Nolimit/OfficialHoliday/Admin/OfficialHolidayAdmin.php line 18

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Nolimit\OfficialHoliday\Admin;
  4. use Sonata\AdminBundle\Admin\AbstractAdmin;
  5. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  6. use Sonata\AdminBundle\Datagrid\ListMapper;
  7. use Sonata\AdminBundle\Form\FormMapper;
  8. use Sonata\AdminBundle\Route\RouteCollectionInterface;
  9. use Sonata\AdminBundle\Show\ShowMapper;
  10. use Sonata\Form\Type\DatePickerType;
  11. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  12. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  13. use Symfony\Component\Form\Extension\Core\Type\TextType;
  14. final class OfficialHolidayAdmin extends AbstractAdmin
  15. {
  16.     protected function configureRoutes(RouteCollectionInterface $collection): void
  17.     {
  18.         parent::configureRoutes($collection);
  19.         $collection->add('generate_leaves''generate_leaves');
  20.     }
  21.     protected function configure(): void
  22.     {
  23.         parent::configure();
  24.         $this->setTemplate('list''official_holiday/CRUD/list__action_generate.html.twig');
  25.     }
  26.     protected function configureQuery($query): \Sonata\AdminBundle\Datagrid\ProxyQueryInterface
  27.     {
  28.         $query parent::configureQuery($query);
  29.         $rootAlias current($query->getRootAliases());
  30.         // Default: show only current year if no filter is applied
  31.         $filters $this->getRequest()->query->get('filter', []);
  32.         if (empty($filters)) {
  33.             $query->andWhere($query->expr()->eq($rootAlias '.year'':currentYear'));
  34.             $query->setParameter('currentYear', (int) date('Y'));
  35.         }
  36.         $query->orderBy($rootAlias '.date''ASC');
  37.         return $query;
  38.     }
  39.     protected function configureDatagridFilters(DatagridMapper $filter): void
  40.     {
  41.         $filter
  42.             ->add('year'null, ['show_filter' => true])
  43.             ->add('name')
  44.             ->add('isWeekendWorkDay');
  45.     }
  46.     protected function configureListFields(ListMapper $list): void
  47.     {
  48.         $list
  49.             ->addIdentifier('name'null, ['label' => 'Name'])
  50.             ->add('date''date', ['label' => 'Date''format' => 'Y-m-d'])
  51.             ->add('year'null, ['label' => 'Year'])
  52.             ->add('isWeekendWorkDay''boolean', ['label' => 'Weekend Work Day'])
  53.             ->add(ListMapper::NAME_ACTIONSnull, [
  54.                 'actions' => [
  55.                     'edit' => [],
  56.                     'delete' => [],
  57.                 ],
  58.             ]);
  59.     }
  60.     protected function configureFormFields(FormMapper $form): void
  61.     {
  62.         $form
  63.             ->add('name'TextType::class, ['label' => 'Name'])
  64.             ->add('date'DatePickerType::class, [
  65.                 'label' => 'Date',
  66.                 'format' => 'yyyy-MM-dd',
  67.                 'required' => true,
  68.             ])
  69.             ->add('year'IntegerType::class, [
  70.                 'label' => 'Year',
  71.                 'data' => $this->getSubject()?->getYear() ?: (int) date('Y'),
  72.             ])
  73.             ->add('isWeekendWorkDay'CheckboxType::class, [
  74.                 'label' => 'Weekend Work Day',
  75.                 'required' => false,
  76.             ]);
  77.     }
  78.     protected function configureShowFields(ShowMapper $show): void
  79.     {
  80.         $show
  81.             ->add('name')
  82.             ->add('date')
  83.             ->add('year')
  84.             ->add('isWeekendWorkDay');
  85.     }
  86.     public function prePersist($object): void
  87.     {
  88.         parent::prePersist($object);
  89.         if ($object->getDate() && !$object->getYear()) {
  90.             $object->setYear((int) $object->getDate()->format('Y'));
  91.         }
  92.     }
  93.     public function preUpdate($object): void
  94.     {
  95.         parent::preUpdate($object);
  96.         if ($object->getDate() && !$object->getYear()) {
  97.             $object->setYear((int) $object->getDate()->format('Y'));
  98.         }
  99.     }
  100. }