Skip to content
Snippets Groups Projects
Select Git revision
  • f3ef43cc01a02b77d937e762ef2de8daf1d5a954
  • master default protected
  • alc-scindage-donnees-pj
  • b24
  • ll-workflow
  • FJ_LL_Tbl_Contrat
  • alc-docker-node
  • ll-apiplatform
  • php84
  • ll-rgpd
  • b23
  • alc-filtre-type-intervenant
  • ll-sans-mdb5
  • formules-ancienne-infra
  • ll-formules
  • alc-intervenant-dmep
  • ll-suppr-v_vol-s
  • b20
  • ll-postgresql
  • b23.0.1
  • b22
  • 24.8
  • 24.7
  • 24.6
  • 24.5
  • 24.4
  • 24.3
  • 24.2
  • 24.1
  • 24.0
  • 23.15
  • 24.0-beta19
  • 24.0-beta18
  • 24.0-beta17
  • 24.0-beta16
  • 24.0-beta15
  • 24.0-beta14
  • 24.0-beta13
  • 23.14
  • 24.0-beta12
  • 24.0-beta11
41 results

ExportRhController.php

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    ExportRhController.php 9.14 KiB
    <?php
    
    namespace ExportRh\Controller;
    
    
    use Application\Controller\AbstractController;
    use Application\Entity\Db\Contrat;
    use Application\Service\Traits\ContextServiceAwareTrait;
    use Application\Service\Traits\DossierServiceAwareTrait;
    use Application\Service\Traits\IntervenantServiceAwareTrait;
    use ExportRh\Form\ExportRhForm;
    use ExportRh\Form\Traits\ExportRhFormAwareTrait;
    use ExportRh\Service\ExportRhService;
    use ExportRh\Service\ExportRhServiceAwareTrait;
    use UnicaenApp\Util;
    use UnicaenSiham\Exception\SihamException;
    use Zend\Validator\Date;
    use Zend\View\Model\ViewModel;
    
    class ExportRhController extends AbstractController
    {
    
        use ExportRhServiceAwareTrait;
        use ContextServiceAwareTrait;
        use DossierServiceAwareTrait;
        use ExportRhFormAwareTrait;
        use IntervenantServiceAwareTrait;
    
        /**
         * @var ExportRhService $exportRhService
         */
        protected $exportRhService;
    
    
    
        public function __construct(ExportRhService $exportRhService)
        {
            $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 */
            $role               = $this->getServiceContext()->getSelectedIdentityRole();
            $intervenant        = $role->getIntervenant() ?: $this->getEvent()->getParam('intervenant');
            $intervenantRh      = '';
            $form               = '';
            $nameConnecteur     = '';
            $affectationEnCours = '';
            $contratEnCours     = '';
    
    
            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();
            $renouvellement               = false;
            $priseEnCharge                = false;
    
            /*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;
                }
            }
    
            /**
             * 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
             *
             */
            try {
    
    
                if ($intervenant->getStatut()->getCode() != 'BIATSS' && $typeIntervenant != 'P') {
                    $intervenantRh = $this->exportRhService->getIntervenantRh($intervenant);
                }
    
    
                //On a trouvé un intervenant dans le SI RH
                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
                    $affectationEnCours = current($this->exportRhService->getAffectationEnCoursIntervenantRh($intervenant));
                    if (!empty($affectationEnCours)) {
                        //On regarde si il a un contrat en cours pour l'année courante
                        $contratEnCours = current($this->exportRhService->getContratEnCoursIntervenantRh($intervenant));
                    }
    
                    $renouvellement = true;
                    if (!empty($affectationEnCours)) {
                        $renouvellement = false;
                    }
                } else {
                    $priseEnCharge = true;
                }
    
    
                $nameConnecteur = $this->exportRhService->getConnecteurName();
                $form           = $this->getExportRhForm($intervenant);
            } catch (\Exception $e) {
                $this->flashMessenger()->addErrorMessage($e->getMessage());
            }
    
    
            $vm = new ViewModel();
            $vm->setTemplate('export-rh/export-rh/exporter');
            $vm->setVariables(compact('typeIntervenant',
                'intervenant',
                'intervenantRh',
                'intervenantDossier',
                'intervenantDossierValidation',
                'haveContratOse',
                'form',
                'renouvellement',
                'priseEnCharge',
                'nameConnecteur',
                'affectationEnCours',
                'contratEnCours'));
    
            return $vm;
        }
    
    
    
        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();
    
    
                    $result = $this->exportRhService->priseEnChargeIntrervenantRh($intervenant, $posts);
    
                    if ($result !== false) {
                        $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é');
                        $this->getServiceIntervenant()->updateExportDate($intervenant);
                    } else {
                        $this->flashMessenger()->addErrorMessage('Probleme prise en charge');
                    }
                }
            } catch (\Exception $e) {
    
                $this->flashMessenger()->addErrorMessage($e->getMessage());
            }
    
            return $this->exporterAction();
        }
    
    
    
        public function renouvellementAction()
        {
            try {
                if ($this->getRequest()->isPost()) {
                    $intervenant = $this->getEvent()->getParam('intervenant');
                    if (!$intervenant) {
                        throw new \LogicException('Intervenant non précisé ou inexistant');
                    }
    
                    $dateExport = new \DateTime();
                    $intervenant->setExportDate($dateExport);
                    $this->getServiceIntervenant()->save($intervenant);
                    $posts  = $this->getRequest()->getPost();
                    $result = $this->exportRhService->renouvellementIntervenantRh($intervenant, $posts);
                    if ($result !== false) {
                        $this->exportRhService->cloreDossier($intervenant);
                        $this->flashMessenger()->addSuccessMessage('Le renouvellement s\'est déroulé avec succés et le dossier a été cloturé');
                        $this->getServiceIntervenant()->updateExportDate($intervenant);
                    } else {
                        $this->flashMessenger()->addErrorMessage('Un problème est survenu lors de la tentative de renouvellement de l\'intervenant');
                    }
                }
            } catch (\Exception $e) {
                $this->flashMessenger()->addErrorMessage($e->getMessage());
            }
    
            return $this->exporterAction();
        }
    
    
    
        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();
                    $result = $this->exportRhService->synchroniserDonneesPersonnellesIntervenantRh($intervenant, $posts);
                    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());
            }
    
            return $this->exporterAction();
        }
    }