ExportRhController.php 9.21 KB
Newer Older
1
2
3
4
5
6
<?php

namespace ExportRh\Controller;


use Application\Controller\AbstractController;
7
use Application\Entity\Db\Contrat;
8
9
use Application\Service\Traits\ContextServiceAwareTrait;
use Application\Service\Traits\DossierServiceAwareTrait;
10
use Application\Service\Traits\IntervenantServiceAwareTrait;
11
12
use ExportRh\Form\ExportRhForm;
use ExportRh\Form\Traits\ExportRhFormAwareTrait;
13
14
use ExportRh\Service\ExportRhService;
use ExportRh\Service\ExportRhServiceAwareTrait;
15
use UnicaenApp\Util;
16
use UnicaenSiham\Exception\SihamException;
17
use Zend\Validator\Date;
18
use Zend\View\Model\ViewModel;
19
20
21
22
23
24
25

class ExportRhController extends AbstractController
{

    use ExportRhServiceAwareTrait;
    use ContextServiceAwareTrait;
    use DossierServiceAwareTrait;
26
    use ExportRhFormAwareTrait;
27
    use IntervenantServiceAwareTrait;
28
29
30
31
32
33
34
35
36
37

    /**
     * @var ExportRhService $exportRhService
     */
    protected $exportRhService;



    public function __construct(ExportRhService $exportRhService)
    {
38

39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
        $this->exportRhService = $exportRhService;
    }



    public function indexAction()
    {
        return [];
    }



    public function chercherIntervenantRhAction(): array
    {
        $connecteurRh = $this->getExportRhService();

        $params = [
            'nomUsuel' => '',
            'prenom'   => '',
        ];

        $listIntervenantRh = [];

        try {

            if ($this->getRequest()->isPost()) {

                $nomUsuel          = $this->getRequest()->getPost('nomUsuel');
                $prenom            = $this->getRequest()->getPost('prenom');
                $insee             = $this->getRequest()->getPost('insee');
                $listIntervenantRh = $connecteurRh->getListIntervenantRh($nomUsuel, $prenom, $insee);
            }
        } catch (SihamException $e) {
            $this->flashMessenger()->addErrorMessage($e->getMessage());
        }

        return compact('listIntervenantRh');
    }



    public function exporterAction()
    {

        /* Initialisation */
Antony Le Courtes's avatar
Antony Le Courtes committed
84
85
86
87
88
89
        $role               = $this->getServiceContext()->getSelectedIdentityRole();
        $intervenant        = $role->getIntervenant() ?: $this->getEvent()->getParam('intervenant');
        $intervenantRh      = '';
        $form               = '';
        $nameConnecteur     = '';
        $affectationEnCours = '';
90
91
        $contratEnCours     = '';

92
93
94
95
96
97
98
99
100

        if (!$intervenant) {
            throw new \LogicException('Intervenant non précisé ou inexistant');
        }
        /* Récupération du dossier de l'intervenant */
        $intervenantDossier = $this->getServiceDossier()->getByIntervenant($intervenant);
        /* Récupération de la validation du dossier si elle existe */
        $intervenantDossierValidation = $this->getServiceDossier()->getValidation($intervenant);
        $typeIntervenant              = $intervenant->getStatut()->getTypeIntervenant()->getCode();
Antony Le Courtes's avatar
Antony Le Courtes committed
101
102
103
        $renouvellement               = false;
        $priseEnCharge                = false;

104
105
106
107
108
109
110
111
112
113
114
115
        /*Vérification si contrat avec date de retour*/
        $haveContratOse = false;
        $contratsOse    = $intervenant->getContrat();
        foreach ($contratsOse as $contrat) {
            /**
             * @var Contrat $contrat
             */
            if (!empty($contrat->getDateRetourSigne())) {
                $haveContratOse = true;
            }
        }

Antony Le Courtes's avatar
Antony Le Courtes committed
116
117
118
119
120
121
        /**
         * Etape 1 : On cherche si l'intervenant est déjà dans le SI RH
         * Etape 2 : Si pas dans le SI RH alors c'est une prise en charge
         * Etape 3 : Si il est déjà dans le SI RH alors on regarde si il a une affectation en cours pour l'année en cours
         * Etape 4 : Si il a une affectation en cours alors on propose uniquement la mise à jour des données personnelles
         * Etape 5 : Si il n'a pas encore d'affectation on propose alors un renouvellement de l'intervenant
122
         *
Antony Le Courtes's avatar
Antony Le Courtes committed
123
         */
124
        try {
125

126
127
            $excludeStatut = $this->exportRhService->getExcludeStatutOse();

128

129
            if (!array_key_exists($intervenant->getStatut()->getCode(), $this->exportRhService->getExcludeStatutOse()) && $typeIntervenant != 'P') {
130
131
                $intervenantRh = $this->exportRhService->getIntervenantRh($intervenant);
            }
Antony Le Courtes's avatar
divers    
Antony Le Courtes committed
132

133

134
            //On a trouvé un intervenant dans le SI RH
135
136
            if (!empty($intervenantRh)) {
                //On regarde si il a une affectation en cours pour l'année courante si oui alors on propose uniquement une synchronisation des données personnelles
137
                $affectationEnCours = current($this->exportRhService->getAffectationEnCoursIntervenantRh($intervenant));
138
139
                $contratEnCours     = current($this->exportRhService->getContratEnCoursIntervenantRh($intervenant));
             
140
141
                $renouvellement = true;
                if (!empty($affectationEnCours)) {
142
                    $renouvellement = false;
143
144
145
                }
            } else {
                $priseEnCharge = true;
Antony Le Courtes's avatar
Antony Le Courtes committed
146
            }
147
148


149
            $nameConnecteur = $this->exportRhService->getConnecteurName();
150
            $form           = $this->getExportRhForm($intervenant);
151
            $form->bind($intervenantDossier);
152
        } catch (\Exception $e) {
153
154
            $this->flashMessenger()->addErrorMessage($e->getMessage());
        }
155

Antony Le Courtes's avatar
Antony Le Courtes committed
156

157
158
159
        $vm = new ViewModel();
        $vm->setTemplate('export-rh/export-rh/exporter');
        $vm->setVariables(compact('typeIntervenant',
160
161
162
163
            'intervenant',
            'intervenantRh',
            'intervenantDossier',
            'intervenantDossierValidation',
164
            'haveContratOse',
165
            'form',
Antony Le Courtes's avatar
Antony Le Courtes committed
166
167
            'renouvellement',
            'priseEnCharge',
168
            'nameConnecteur',
169
            'affectationEnCours',
170
171
            'contratEnCours',
            'excludeStatut'));
172
173

        return $vm;
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
    }



    public function priseEnChargeAction()
    {
        try {
            if ($this->getRequest()->isPost()) {
                $intervenant = $this->getEvent()->getParam('intervenant');

                if (!$intervenant) {
                    throw new \LogicException('Intervenant non précisé ou inexistant');
                }

                $posts = $this->getRequest()->getPost();
189
190


191
                $result = $this->exportRhService->priseEnChargeIntrervenantRh($intervenant, $posts);
192

193
                if ($result !== false) {
194
195
                    $this->exportRhService->cloreDossier($intervenant);
                    $this->flashMessenger()->addSuccessMessage('La prise en charge s\'est déroulée avec succés et le dossier a été cloturé');
196
                    $this->getServiceIntervenant()->updateExportDate($intervenant);
197
198
199
200
201
                } else {
                    $this->flashMessenger()->addErrorMessage('Probleme prise en charge');
                }
            }
        } catch (\Exception $e) {
202

203
204
205
            $this->flashMessenger()->addErrorMessage($e->getMessage());
        }

206
        return $this->exporterAction();
207
208
    }

209
210
211
212
213
214
215
216
217
218
219


    public function renouvellementAction()
    {
        try {
            if ($this->getRequest()->isPost()) {
                $intervenant = $this->getEvent()->getParam('intervenant');
                if (!$intervenant) {
                    throw new \LogicException('Intervenant non précisé ou inexistant');
                }

220
221
222
                $dateExport = new \DateTime();
                $intervenant->setExportDate($dateExport);
                $this->getServiceIntervenant()->save($intervenant);
223
224
225
                $posts  = $this->getRequest()->getPost();
                $result = $this->exportRhService->renouvellementIntervenantRh($intervenant, $posts);
                if ($result !== false) {
226
227
                    $this->exportRhService->cloreDossier($intervenant);
                    $this->flashMessenger()->addSuccessMessage('Le renouvellement s\'est déroulé avec succés et le dossier a été cloturé');
228
                    $this->getServiceIntervenant()->updateExportDate($intervenant);
229
                } else {
230
                    $this->flashMessenger()->addErrorMessage('Un problème est survenu lors de la tentative de renouvellement de l\'intervenant');
231
232
233
234
235
236
                }
            }
        } catch (\Exception $e) {
            $this->flashMessenger()->addErrorMessage($e->getMessage());
        }

237
        return $this->exporterAction();
238
    }
239
240
241
242
243
244
245
246
247
248
249
250
251



    public function synchroniserAction()
    {
        try {
            if ($this->getRequest()->isPost()) {
                $intervenant = $this->getEvent()->getParam('intervenant');
                if (!$intervenant) {
                    throw new \LogicException('Intervenant non précisé ou inexistant');
                }

                $posts  = $this->getRequest()->getPost();
Antony Le Courtes's avatar
divers    
Antony Le Courtes committed
252
                $result = $this->exportRhService->synchroniserDonneesPersonnellesIntervenantRh($intervenant, $posts);
253
254
255
256
257
258
259
260
261
262
                if ($result !== false) {
                    $this->flashMessenger()->addSuccessMessage('Les données personnelles ont bien été synchronisé');
                } else {
                    $this->flashMessenger()->addErrorMessage('Un problème est survenu lors de la synchronisation des données personnelles');
                }
            }
        } catch (\Exception $e) {
            $this->flashMessenger()->addErrorMessage($e->getMessage());
        }

263
        return $this->exporterAction();
264
    }
265
}