CotisationAdmin.php 6.48 KB
Newer Older
Julien Jorry committed
1 2 3 4
<?php

namespace App\Admin;

5
use App\Entity\Adherent;
Julien Jorry committed
6
use App\Entity\GlobalParameter;
7
use App\Entity\Prestataire;
8
use App\Entity\Siege;
9
use App\Entity\User;
10
use App\Enum\MoyenEnum;
11
use App\Tools\RoleCheck;
Julien Jorry committed
12
use Doctrine\ORM\EntityManagerInterface;
Julien Jorry committed
13
use Sonata\AdminBundle\Admin\AbstractAdmin;
14
use Sonata\AdminBundle\Datagrid\DatagridMapper;
Julien Jorry committed
15 16
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
Julien Jorry committed
17
use Sonata\AdminBundle\Route\RouteCollection;
Julien Jorry committed
18
use Sonata\AdminBundle\Show\ShowMapper;
19
use Symfony\Component\DependencyInjection\ContainerInterface;
20 21
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
22
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
23
use Symfony\Component\Form\Extension\Core\Type\DateType;
24 25
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\MoneyType;
26
use Symfony\Component\Intl\DateFormatter\IntlDateFormatter;
27
use Symfony\Component\Security\Core\Security;
Julien Jorry committed
28

29 30 31
/**
 * Administration des cotisations
 *
Julien Jorry committed
32
 * KOHINOS : Outil de gestion de Monnaie Locale Complémentaire
33 34
 * @author Julien Jorry <julien.jorry@gmail.com>
 */
Julien Jorry committed
35 36
class CotisationAdmin extends AbstractAdmin
{
Julien Jorry committed
37 38
    protected $baseRouteName = 'cotisation';
    protected $baseRoutePattern = 'cotisation';
39
    protected $security;
40
    protected $rolecheck;
Julien Jorry committed
41

42 43 44 45 46 47
    protected $translator;
    protected $datagridValues = [
        '_sort_order' => 'DESC',
        '_sort_by' => 'createdAt',
    ];

48
    public function setSecurity(Security $security)
Julien Jorry committed
49
    {
50
        $this->security = $security;
Julien Jorry committed
51 52
    }

53 54 55 56 57
    public function setRoleCheck(RoleCheck $rolecheck)
    {
        $this->rolecheck = $rolecheck;
    }

58 59 60 61 62 63
    /**
    * {@inheritdoc}
    */
    protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
    {
        $datagridMapper
64
            ->add('cotisationInfos.annee', null, array('label' => 'Année'))
65
            ->add('montant', null, array('label' => 'Montant'))
66 67 68 69 70
            ->add('cotisationInfos.recu', null, [
                'label' => "Recu ?",
                'show_filter' => true,
                'advanced_filter' => false
            ])
71 72 73
        ;
    }

Julien Jorry committed
74 75 76 77 78 79
    /**
    * {@inheritdoc}
    */
    protected function configureFormFields(FormMapper $formMapper)
    {
        $cotisation = $this->getSubject();
80
        $now = new \DateTime();
81
        $em = $this->getConfigurationPool()->getContainer()->get('doctrine')->getManager();
Julien Jorry committed
82 83
        $formMapper
            ->with('Cotisation', ['class' => 'col-md-8'])
84 85 86
                ->add('parenttype', HiddenType::class, array(
                    'data' => 'cotisation'
                ))
87 88 89 90 91 92 93 94 95
                ->add('operateur', HiddenType::class, array(
                    'data' => $this->security->getUser()->getId(),
                    'data_class' => null,
                    'entity_class' => User::class,
                    'em' => $em
                ))
                ->add('role', HiddenType::class, array(
                    'data' => $this->rolecheck->getCurrentRole()->__toString()
                ))
96
                ->add('destinataire', HiddenType::class, array(
97
                    'data' => $em->getRepository(Prestataire::class)->findOneBy(array('mlc' => true))->getId(),
98
                    'data_class' => null,
99 100
                    'entity_class' => Prestataire::class,
                    'em' => $em
101
                ))
102 103 104 105 106 107
                ->add('moyen', ChoiceType::class, array(
                    'required' => true,
                    'choices' => MoyenEnum::getAvailableTypes(),
                    'choice_label' => function ($choice) {
                        return MoyenEnum::getTypeName($choice);
                    },
108 109
                ))
        ;
110
        if ($this->security->getUser() != null && ($this->security->getUser()->isGranted('ROLE_SUPER_ADMIN') || $this->security->getUser()->isGranted('ROLE_TRESORIER'))) {
111
            $formMapper
112 113 114 115
                ->add('cotisationInfos.recu', CheckboxType::class, array(
                    'label' => 'Reçu',
                    'required' => false
                ));
116
        }
117
        $formMapper->end()
Julien Jorry committed
118
            ->with('Date', ['class' => 'col-md-4'])
119 120 121 122 123
                ->add('cotisationInfos.annee', null, array(
                    'label' => 'Année',
                    'required' => false
                ))
                ->add('cotisationInfos.debut', DateType::class, array(
Julien Jorry committed
124 125
                    'label' => 'Date de début',
                    'widget' => 'single_text',
126
                    'required' => true,
127
                    // 'html5' => false,
128 129
                    'format' => IntlDateFormatter::SHORT,
                    'attr' => ['class' => 'js-datepicker'],
130
                ))
131
                ->add('cotisationInfos.fin', DateType::class, array(
Julien Jorry committed
132 133
                    'label' => 'Date de fin',
                    'widget' => 'single_text',
134
                    // 'html5' => false,
135 136
                    'format' => IntlDateFormatter::SHORT,
                    'attr' => ['class' => 'js-datepicker'],
137
                ))
Julien Jorry committed
138 139 140 141 142 143 144
            ->end()
        ;
    }

    protected function configureRoutes(RouteCollection $collection)
    {
        $collection->remove('delete');
145 146
        if ($this->security->getUser() != null && !($this->security->getUser()->isGranted('ROLE_TRESORIER') || $this->security->getUser()->isGranted('ROLE_SUPER_ADMIN') || $this->security->getUser()->isGranted('ROLE_COMPTOIR'))) {
            $collection->clearExcept(array('list', 'export'));
147
        }
Julien Jorry committed
148 149 150 151 152 153 154
    }

    /**
    * {@inheritdoc}
    */
    protected function configureListFields(ListMapper $listMapper)
    {
Julien Jorry committed
155 156
        unset($this->listModes['mosaic']);
        $listMapper
157
            ->add('cotisationInfos.annee', null, array(
158 159
                'label' => 'Année'
            ))
160
            ->add('montant', null, array(
161 162
                'label' => 'Montant'
            ))
163
            ->add('moyen', null, array(
164 165
                'label' => 'Moyen'
            ))
166
            ->add('cotisationInfos.debut', null, array(
167 168
                'label' => 'Crée le'
            ))
169 170 171 172 173 174 175 176
            ->add('cotisationInfos.fin', null, array(
                'label' => 'Expire le'
            ))
            ->add('cotisationInfos.recu', null, array(
                'label' => 'Reçu ?'
            ))
            ->add('operateurAndRole', null, array(
                'label' => 'Opérateur'
177
            ))
178 179 180 181 182
            ->add('_action', null, [
                'actions' => [
                    'edit' => [],
                ]
            ])
Julien Jorry committed
183
        ;
Julien Jorry committed
184 185
    }
}