Loading module/Oscar/src/Oscar/Controller/ProjectGrantController.php +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 Loading @@ -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 ]; } Loading module/Oscar/src/Oscar/Entity/ActivityPcruInfos.php +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 Loading @@ -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(); Loading Loading @@ -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', Loading Loading @@ -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; } Loading Loading @@ -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 */ Loading @@ -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 module/Oscar/src/Oscar/Factory/ActivityPcruInfoFromActivityFactory.php +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 Loading @@ -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; Loading Loading @@ -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é."); Loading @@ -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 */ Loading @@ -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()) Loading @@ -85,6 +108,7 @@ class ActivityPcruInfoFromActivityFactory ->setDateFin($activity->getDateEnd()) ->setDateDerniereSignature($activity->getDateSigned()) ->setReference($activity->getOscarNum()); return $activityPcruInfos; } Loading module/Oscar/src/Oscar/Service/OscarConfigurationService.php +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 Loading @@ -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'; Loading Loading @@ -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 module/Oscar/view/oscar/project-grant/pcru-infos.phtml +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 Loading @@ -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> Loading Loading
module/Oscar/src/Oscar/Controller/ProjectGrantController.php +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 Loading @@ -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 ]; } Loading
module/Oscar/src/Oscar/Entity/ActivityPcruInfos.php +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 Loading @@ -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(); Loading Loading @@ -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', Loading Loading @@ -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; } Loading Loading @@ -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 */ Loading @@ -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
module/Oscar/src/Oscar/Factory/ActivityPcruInfoFromActivityFactory.php +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 Loading @@ -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; Loading Loading @@ -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é."); Loading @@ -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 */ Loading @@ -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()) Loading @@ -85,6 +108,7 @@ class ActivityPcruInfoFromActivityFactory ->setDateFin($activity->getDateEnd()) ->setDateDerniereSignature($activity->getDateSigned()) ->setReference($activity->getOscarNum()); return $activityPcruInfos; } Loading
module/Oscar/src/Oscar/Service/OscarConfigurationService.php +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 Loading @@ -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'; Loading Loading @@ -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
module/Oscar/view/oscar/project-grant/pcru-infos.phtml +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 Loading @@ -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> Loading