Commit 49b932ee authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

Contrôle des contrats signés (PCRU)

parent 2bc32aec
Loading
Loading
Loading
Loading
+10 −1
Changes for module/Oscar/src/Oscar/Controller/ProjectGrantController.php: 10 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -2800,21 +2800,30 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
        if( !$this->getOscarConfigurationService()->getPcruEnabled() ){
            throw new OscarException("Le module PCR n'est pas activé");
        }

        /** @var Activity $activity */
        $activity = $this->getActivityFromRoute();

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


        $factory = new ActivityPcruInfoFromActivityFactory($this->getOscarConfigurationService(), $this->getEntityManager());
        $pcruInfos = $factory->createNew($activity);
        $headers = $factory->getHeaders();
        $datas = $pcruInfos->toArray();
        $validation = $pcruInfos->validation();
        $documentPath = $this->getOscarConfigurationService()->getDocumentDropLocation().'/'.$pcruInfos->getDocumentPath();

//        $valid = $pcruInfos->isValidToSend();

        return [
            //'form' => $form,
            'validations' => $validation,
            'headers' => $headers,
            'datas' => $datas,
            'activity' => $activity
            'activity' => $activity,
            'documentPath' => $documentPath
        ];
    }

+46 −0
Changes for module/Oscar/src/Oscar/Entity/ActivityPcruInfos.php: 46 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -231,6 +231,13 @@ class ActivityPcruInfos
     */
    private $PresencePartenaireIndustriel = "Indéfini";

    /**
     * @var integer Identifiant du document "Contrat Signé"
     * @ORM\Column(type="integer", nullable=true)
     */
    private $documentId = null;


    public function toArray() :array {
        $out = [];
        $out['Objet'] = $this->getObjet();
@@ -305,6 +312,7 @@ class ActivityPcruInfos
        $out['Cifre'] = self::VALIDATION_EMPTY;
        $out['ChaireIndustrielle'] = self::VALIDATION_EMPTY;
        $out['PresencePartenaireIndustriel'] = self::VALIDATION_EMPTY;
        $out['contract_signed'] = self::VALIDATION_ERROR;

        $disabledFields = [
            'Equipe','ContratsAssocies', 'EmployeurResponsableScientifique',
@@ -379,6 +387,10 @@ class ActivityPcruInfos
        if( $datas['Reference'] )
            $out['Reference'] = self::VALIDATION_VALID;

        if( $this->getDocumentPath() ){
            $out['document_signed'] = self::VALIDATION_VALID;
        }


        return $out;
    }
@@ -943,6 +955,23 @@ class ActivityPcruInfos
        return $this->PresencePartenaireIndustriel;
    }

    /**
     * @return int
     */
    public function getDocumentId(): ?int
    {
        return $this->documentId;
    }

    /**
     * @param int $documentId
     */
    public function setDocumentId(?int $documentId): self
    {
        $this->documentId = $documentId;
        return $this;
    }

    /**
     * @param string $PresencePartenaireIndustriel
     */
@@ -951,4 +980,21 @@ class ActivityPcruInfos
        $this->PresencePartenaireIndustriel = $PresencePartenaireIndustriel;
        return $this;
    }

    public function getSignedFileName()
    {
        return $this->getNumContratTutelleGestionnaire()."pdf";
    }

    private $documentPath = null;

    public function setDocumentPath($path){
        $this->documentPath = $path;
        return $this;
    }

    public function getDocumentPath()
    {
        return $this->documentPath;
    }
}
 No newline at end of file
+26 −2
Changes for module/Oscar/src/Oscar/Factory/ActivityPcruInfoFromActivityFactory.php: 26 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ use Oscar\Entity\Activity;
use Oscar\Entity\ActivityOrganization;
use Oscar\Entity\ActivityPcruInfos;
use Oscar\Entity\ActivityPerson;
use Oscar\Entity\ContractDocument;
use Oscar\Exception\OscarException;
use Oscar\Service\OscarConfigurationService;

@@ -36,11 +37,16 @@ class ActivityPcruInfoFromActivityFactory
    {
        $activityPcruInfos = new ActivityPcruInfos();

        // Recherche automatique de l'Unité (Laboratoire)
        // --- Recherche automatique de l'Unité (Laboratoire)

        // Intitulé du rôle "Laboratoire" pour PCRU
        $roleStructureToFind = $this->oscarConfigurationService->getOptionalConfiguration('pcru_unite_role', 'Laboratoire');

        // Donnèes trouvées
        $codeUniteLabintel = "";
        $sigleUnit = "";

        // Récupération des laboratoires
        $structures = $activity->getOrganizationsWithRole($roleStructureToFind);
        if( count($structures) == 0 ){
            throw new OscarException("Aucune structure $roleStructureToFind pour cette activité.");
@@ -62,7 +68,8 @@ class ActivityPcruInfoFromActivityFactory
        }

        // Recherche automatique du responsable scientifique
        $roleRSToFind = $this->oscarConfigurationService->getOptionalConfiguration('pcru_respscien_role', 'Responsable Scientifique');
        $roleRSToFind = $this->oscarConfigurationService
            ->getOptionalConfiguration('pcru_respscien_role', 'Responsable Scientifique');
        $responsable = "";

        /** @var ActivityPerson $personActivity */
@@ -70,7 +77,23 @@ class ActivityPcruInfoFromActivityFactory
            $responsable = $personActivity->getPerson()->getFirstname() . " " . strtoupper($personActivity->getPerson()->getLastname());
        }

        // Document signé
        $typeDocumentSigne = "Contrat Version Définitive Signée";
        $documentSigned = null;

        /** @var ContractDocument $document */
        foreach ($activity->getDocuments() as $document){
            if( $document->getTypeDocument()->getLabel() == $typeDocumentSigne ){
                // Test sur les versions
                if(  $documentSigned != null ){
                    throw new OscarException("Il y'a plusieurs $typeDocumentSigne sur cette activité");
                }
                $documentSigned = $document->getPath();
            }
        }

        $activityPcruInfos->setActivity($activity)
            ->setDocumentPath($documentSigned)
            ->setSigleUnite($sigleUnit)
            ->setPoleCompetivite($activity->getPcruPoleCompetitiviteStr())
            ->setNumContratTutelleGestionnaire($activity->getOscarNum())
@@ -85,6 +108,7 @@ class ActivityPcruInfoFromActivityFactory
            ->setDateFin($activity->getDateEnd())
            ->setDateDerniereSignature($activity->getDateSigned())
            ->setReference($activity->getOscarNum());

        return $activityPcruInfos;
    }

+21 −0
Changes for module/Oscar/src/Oscar/Service/OscarConfigurationService.php: 21 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ class OscarConfigurationService implements ServiceLocatorAwareInterface
    const spents_account_filter = 'spents_account_filter';
    const activity_request_limit = 'activity_request_limit';
    const document_use_version_in_name = 'document_use_version_in_name';
    const document_location = 'document_location';


    const theme = 'theme';

@@ -458,4 +460,23 @@ class OscarConfigurationService implements ServiceLocatorAwareInterface
    {
        return $this->getOptionalConfiguration("autorefreshspents", false);
    }

    /**
     * @return array|object
     * @throws OscarException
     */
    public function getDocumentDropLocation(){
        static $documentDropLocation;
        if( $documentDropLocation == null ){
            $path = realpath($this->getConfiguration('paths.document_oscar'));
            if( !file_exists($path) ){
                throw new OscarException(_("L'emplacement de stockage des documents est manquant."));
            }
            if( !is_readable($path) ){
                throw new OscarException(_("L'emplacement de stockage des documents est mal configuré."));
            }
            $documentDropLocation = $path;
        }
        return $documentDropLocation;
    }
}
 No newline at end of file
+8 −0
Changes for module/Oscar/view/oscar/project-grant/pcru-infos.phtml: 8 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -6,6 +6,14 @@
        <h3><?= $activity ?></h3>
    </header>

    <?php if( !$documentPath ): ?>
    <div class="alert alert-danger">
        <i class="icon-attention"></i> Pas de document signé pour cette activité
    </div>
    <?php else: ?>
    <code><?= $documentPath ?></code>
    <?php endif; ?>

    <table class="table table-bordered card xs">
        <thead>
            <tr>