Commit 059bb16f authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

- UP : Mode edition pour les données PCRU

parent 6ff8ef69
Loading
Loading
Loading
Loading
Loading
+36 −3
Original line number Diff line number Diff line
@@ -2987,6 +2987,11 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
        // Accès
        $this->getOscarUserContextService()->check(Privileges::ACTIVITY_PCRU, $activity);

        if( $this->params()->fromQuery("a") == "reset" ){
            $this->getProjectGrantService()->getPCRUService()->resetTmpPcruInfos($activity);
            $this->redirect()->toRoute('contract/pcru-infos', ['id' => $activity->getId()]);
        }

        if( $this->params()->fromQuery("a") == "activate" ){

            // Formulaire
@@ -3016,6 +3021,37 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
            return $view;
        }

        if( $this->params()->fromQuery("a") == "edit" ){


            // Formulaire
            $form = new ActivityInfosPcruForm($this->getProjectGrantService(), $activity);
            $preview = $this->getProjectGrantService()->getPCRUService()->getPreview($activity);
            $pcruInfos = $preview['infos'];
            $form->init();
            $form->bind($pcruInfos);

            if( $this->getRequest()->getMethod() == "POST" ){

                $posted = $this->getRequest()->getPost();
                $form->setData($posted);
                if( $form->isValid() ){
                    $this->getProjectGrantService()->getPCRUService()->updatePcruInfos($activity, $pcruInfos);
                    return $this->redirect()->toRoute('contract/pcru-infos', ['id' => $activity->getId() ]);
                } else {

                }
            }

            $preview['form'] = $form;
            $preview['mode'] = "edit";
            $preview['activity'] = $activity;
            $view = new ViewModel($preview);
            $view->setTemplate('oscar/activity/pcruinfos-form.phtml');

            return $view;
        }



        $method = $this->getHttpXMethod();
@@ -3042,9 +3078,6 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
            return $this->redirect()->toRoute('contract/pcru-infos', ['id' => $activity->getId() ]);
        }

        // Droit d'accès
        $this->getOscarUserContextService()->check(Privileges::ACTIVITY_PCRU, $activity);

        $return = $this->getProjectGrantService()->getPCRUService()->getPreview($activity);

        /** @var ActivityPcruInfos $pcruInfos */
+4 −1
Original line number Diff line number Diff line
@@ -193,6 +193,7 @@ class ActivityPcruInfos
    private $poleCompetivite = "";

    const STATUS_PREVIEW = "preview"; // Aperçu
    const STATUS_DRAFT = "draft"; // Aperçu
    const STATUS_ERROR_DATA = "error_data"; // Erreur dans les données
    const STATUS_SEND_READY = "send_ready"; // Prêt pour envoi
    const STATUS_FILE_READY = "file_wait"; // En attente d'envoi
@@ -339,6 +340,7 @@ class ActivityPcruInfos

    public function validation()
    {
        $this->error = [];
        $datas = $this->toArray();

        $out = [];
@@ -404,7 +406,7 @@ class ActivityPcruInfos
        if( $datas['NumContratTutelleGestionnaire'] )
            $out['NumContratTutelleGestionnaire'] = self::VALIDATION_VALID;

        if( $datas['TypeContrat'] )
        if( $datas['TypeContrat'] != 'Aucun' )
            $out['TypeContrat'] = self::VALIDATION_VALID;

        if( $datas['Acronyme'] )
@@ -471,6 +473,7 @@ class ActivityPcruInfos
        if( self::$messages === null ) {
            self::$messages = [];
            self::$messages['SourceFinancement'] = "La source de financement est manquante, vous pouvez la renseigner depuis la fiche activité";
            self::$messages['TypeContrat'] = "Le type de contrat est manquant. Vous pouvez automatiser la correspondance Oscar/PCRU depuis l'interface d'administration et éditer le type manuellement";
            self::$messages['DateDerniereSignature'] = "La date de signature est manquante, vous pouvez la renseigner depuis la fiche activité";
            self::$messages['CodeUniteLabintel'] = "Le code de l'unité de recherche (Labintel) est manquant, il peut être complété depuis la fiche organisation (type UMR XXXX)";
        }
+4 −0
Original line number Diff line number Diff line
@@ -482,6 +482,10 @@ class ActivityInfosPcruForm extends \Zend\Form\Form implements InputFilterProvid

            'dateEnd'=> [
                'required' => false,
            ],

            'polecompetivite'=> [
                'required' => false,
            ]
        ];
    }
+1 −1
Original line number Diff line number Diff line
@@ -100,7 +100,7 @@ class ActivityInfosPCRUFormHydrator implements HydratorInterface
            "employeurresponsablescientifique" => $object->getEmployeurResponsableScientifique(),
            "coordinateurconsortium" => $object->isCoordinateurConsortium(),
            "partenaires" => $object->getPartenaires(),
            "partenaireprincipal" => "",
            "partenaireprincipal" => $object->getIdPartenairePrincipal(),
            "idpartenaireprincipal" => $object->getIdPartenairePrincipal(),
            "sourcefinancement" => $object->getSourceFinancement(),
            "datedernieresignature" => $object->getDateDerniereSignatureStr(),
+36 −1
Original line number Diff line number Diff line
@@ -174,6 +174,29 @@ class PCRUService implements UseLoggerService, UseOscarConfigurationService, Use
        }
    }

    public function updatePcruInfos(Activity $activity, ?ActivityPcruInfos $pcruInfos = null, $json = false): void
    {
        if (!$this->getOscarConfigurationService()->getPcruEnabled()) {
            throw new OscarException("Le module PCR n'est pas activé");
        }

        if( $pcruInfos == null ) {
            $factory = new ActivityPcruInfoFromActivityFactory($this->getOscarConfigurationService(), $this->getEntityManager());
            $pcruInfos = $factory->createNew($activity);
        }

        try {

            $pcruInfos->setStatus(ActivityPcruInfos::STATUS_DRAFT);
            $pcruInfos->validation();

            $this->getEntityManager()->persist($pcruInfos);
            $this->getEntityManager()->flush($pcruInfos);
        } catch (UniqueConstraintViolationException $e) {
            throw new OscarException("Les donnèes PCRU de cette activité existent déjà");
        }
    }


    /**
     * @return bool
@@ -368,6 +391,15 @@ class PCRUService implements UseLoggerService, UseOscarConfigurationService, Use
        return $this->getActivityPCRUInfoRepository()->findOneBy(['numContratTutelleGestionnaire' => $numOscar]);
    }

    public function resetTmpPcruInfos(Activity $activity) :void
    {
        $pcruInfos = $this->getPcruInfosActivity($activity);
        if( $pcruInfos ){
            $this->getEntityManager()->remove($pcruInfos);
            $this->getEntityManager()->flush();
        }
    }


    /**
     * Affichage des donnèes PCRU :
@@ -387,9 +419,11 @@ class PCRUService implements UseLoggerService, UseOscarConfigurationService, Use

        // Récupération des données
        $pcruInfos = $this->getPcruInfosActivity($activity);
        $preview = false;


        if (!$pcruInfos) {
            $preview = true;
            $factory = new ActivityPcruInfoFromActivityFactory(
                $this->getOscarConfigurationService(),
                $this->getEntityManager()
@@ -411,7 +445,8 @@ class PCRUService implements UseLoggerService, UseOscarConfigurationService, Use
            'documentPath' => $documentPath,
            'infos' => $pcruInfos,
            'errors' => $pcruInfos->getError(),
            'status' => $pcruInfos->getStatus()
            'status' => $pcruInfos->getStatus(),
            'preview' => $preview
        ];
    }

Loading