Loading front/src/ActivityDocument.vue +32 −15 Original line number Diff line number Diff line Loading @@ -194,8 +194,28 @@ {{ tab.label }} <sup class="label label-default">{{ tab.total }}</sup> </div> <div class="tab" :class="{'selected': displayComputed }" @click.prevent="handlerSelectTab('computed')"> Documents générés </div> </div> <div class="tab-content" v-show="displayComputed"> <article class="card xs" v-for="doc in computedDocuments" :key="doc.key"> <div class=""> <i class="picto icon-doc"></i> <strong>{{doc.label}}</strong> <small class="text-light"> (Document généré automatiquement) </small> </div> <nav class="text-right show-over"> <a class="btn btn-default btn-xs" :href="doc.url"> <i class="icon-upload-outline"></i> Télécharger </a> </nav> </article> </div> <div class="tab-content" v-for="tab in packedDocuments" v-show="selectedTabId === tab.id"> <nav v-if="tab.manage" class="text-right"> <button v-on:click="handlerUploadNewDoc(tab.id)" class="btn btn-xs btn-default" v-if="tab.manage"> Loading Loading @@ -308,7 +328,8 @@ export default { url: {required: true}, documentTypes: {required: true}, urlDocumentType: {required: true}, moment: {require: true} moment: {require: true}, computedDocuments: { requires: false, default: [] } }, data() { Loading Loading @@ -441,6 +462,7 @@ export default { // Modification d'un document handlerEdit(document) { console.log(JSON.parse(JSON.stringify(document))); let valueTabDocument = document.tabDocument; if (valueTabDocument === null || valueTabDocument === undefined || valueTabDocument.trim === ''){ valueTabDocument = PRIVATE; Loading Loading @@ -515,20 +537,8 @@ export default { document.persons.forEach(p => { this.persons.push(p); }) // initialise objet de base this.uploadNewDocData.init = true; // Affectation valeur par défaut champ fichier lié au contexte de l'onglet choisi (tab) this.fileToDownload = null; // Tab choisis pour upload document (TabId est égal id onglet) /** this.uploadDoc = true; //Hydratation de l'url de soumission complétée (propre à cet objet) this.uploadNewDocData.baseUrlUpload = urlReupload; this.selectedIdTypeDocument = typeId; //tab.id, doc.urlReupload, doc.category.id, //Datas communes sous traite à une méthode commune (méthode "privée" nb : pas possible en JS) this.initUploadDatas(tabId, typeId); ****/ }, /** Loading Loading @@ -747,8 +757,15 @@ export default { }, handlerSelectTab(tab){ if( tab == "computed" ){ this.displayComputed = true; this.selectedTab = null; this.selectedTabId = null; } else { this.displayComputed = false; this.selectedTab = tab; this.selectedTabId = tab.id; } }, // Recup datas Docs Loading module/Oscar/src/Oscar/Controller/ContractDocumentController.php +46 −88 Original line number Diff line number Diff line Loading @@ -189,38 +189,52 @@ class ContractDocumentController extends AbstractOscarController implements UseS * @return JsonModel * @throws OscarException|\HttpException */ public function changeTypeAction(): JsonModel public function changeTypeAction() { /** @var Request $request */ $request = $this->getRequest(); if ($request->isPost()) { // Récup document $document = $this->getContractDocumentService()->getDocument($request->getPost('documentId')); if( !($this->getOscarUserContextService()->getAccessDocument($document)['write'] === true) ){ return $this->getResponseUnauthorized("Vous ne pouvez pas modifier ce document"); } $type = $this->getEntityManager()->getRepository(TypeDocument::class)->find($request->getPost('type')); if (!$type) { $this->getResponseBadRequest("Type de document invalide"); // Gestion de l'onglet $tabDest = $document->getTabDocument(); $tabDestId = intval($request->getPost()->get('tabDocument')); if( $tabDestId ){ $tabDest = $this->getContractDocumentService()->getContractTabDocument($tabDestId); if( $tabDestId != $document->getTabDocument()->getId() ){ // On regarde si on a le droit d'accès à l'onglet if( $this->getOscarUserContextService()->getAccessTabDocument($tabDest)['write'] === true ){ $document->setTabDocument($tabDest); } else { return $this->getResponseUnauthorized("Vous n'avez pas accès à l'onglet de destination"); } $privateDocument = $request->getPost('private'); $idsPersons = (trim($request->getPost('persons')) !== "") ? explode(",", $request->getPost('persons')) : []; // Passage du doc en non privé ou else -> passage en privé if (false === boolval($privateDocument)) { $tabDocument = $this->getEntityManager()->getRepository(TabDocument::class)->find( $request->getPost('tabDocument') ); $succesManageDocuments = $this->manageDocsInTab($document, $idsPersons, $tabDocument, $type, false); if (false === $succesManageDocuments) { $this->getResponseBadRequest("La gestion des documents associés a échouée !"); } } else { $succesManageDocuments = $this->manageDocsInTab($document, $idsPersons, null, $type, true); if (false === $succesManageDocuments) { $this->getResponseBadRequest("La gestion des documents associés a échouée !"); } // Type de document $type = $this->getContractDocumentService()->getContractDocumentType($request->getPost('type')); if (!$type) { return $this->getResponseBadRequest("Type de document invalide"); } // Privé $privateDocument = (bool) $request->getPost('private', false); // Personnes $idsPersons = (trim($request->getPost('persons')) !== "") ? explode(",", $request->getPost('persons')) : []; // Traitement $succesManageDocuments = $this->manageDocsInTab($document, $idsPersons, $tabDest, $type, $privateDocument); if( !$succesManageDocuments ){ return $this->getResponseBadRequest("Impossible de modifier le document"); } return new JsonModel(['response' => 'ok']); } throw new \HttpException(); Loading Loading @@ -377,76 +391,23 @@ class ContractDocumentController extends AbstractOscarController implements UseS $pathDocumentsConfig = $this->getOscarConfigurationService()->getDocumentDropLocation(); // 1 : On va chercher toutes les versions d'un même document $em = $this->getEntityManager()->getRepository(ContractDocument::class); $documents = $em->createQueryBuilder('d')->select('d'); // Params pour la requete de base $paramsQuery = [ 'fileName' => $document->getFileName(), 'grant' => $activity, ]; if (true === $document->isPrivate()) { // Documents privés $paramsQuery ['private'] = true; $documents->where( 'd.fileName = :fileName AND d.grant = :grant AND d.private = :private' $documents = $this->getContractDocumentService()->getContractDocumentRepository()->getDocumentsForFilenameAndActivity( $document ); } else { if (!is_null($document->getTabDocument())) { $paramsQuery ['tabDocument'] = $document->getTabDocument(); $documents->where( 'd.fileName = :fileName AND d.grant = :grant AND d.tabDocument = :tabDocument' ); } else { // Document version antérieur feature onglets de documents (non classés) $paramsQuery ['private'] = false; $documents->where( 'd.fileName = :fileName AND d.grant = :grant AND d.private = :private' ); } } $result = $documents->setParameters($paramsQuery)->getQuery()->getResult(); $destinationFolder = null; //2 : On gère le déplacement de doc et la privatisation /** @var ContractDocument $doc */ foreach ($result as $doc) { foreach ($documents as $doc) { //Passage d'un document en privée if (true === $docToPrivate) { $pathSource = (!is_null($doc->getTabDocument())) ? $pathDocumentsConfig . 'tab_' . $doc->getTabDocument( )->getId() . '/' . $doc->getPath() : $pathDocumentsConfig; $pathDestination = $pathDocumentsConfig . 'private/' . $doc->getPath(); $destinationFolder = $pathDocumentsConfig . 'private'; $this->createFolder($destinationFolder); //On supprime les tabDocuments $doc->setTabDocument(null); //On rend le document privé $doc->setPrivate(true); } else { if ($doc->isPrivate()) { $pathSource = $pathDocumentsConfig . 'private/' . $doc->getPath(); } else { $pathSource = (!is_null( $doc->getTabDocument() )) ? $pathDocumentsConfig . 'tab_' . $doc->getTabDocument()->getId() . '/' . $doc->getPath( ) : $pathDocumentsConfig . '/' . $doc->getPath(); } $pathDestination = $pathDocumentsConfig . 'tab_' . $tabDocument->getId() . '/' . $doc->getPath(); $destinationFolder = $pathDocumentsConfig . 'tab_' . $tabDocument->getId(); $this->createFolder($destinationFolder); //Passage d'un document dans un onglet $doc->setPrivate($docToPrivate); $doc->setTabDocument($tabDocument); $doc->setPrivate(false); } //on réinitialise les personnes foreach ($doc->getPersons() as $person) { $doc->removePerson($person); } $doc->getPersons()->clear(); //On ajoute les personnes demandées if (count($persons) > 0) { foreach ($persons as $idPerson) { Loading @@ -457,18 +418,15 @@ class ContractDocumentController extends AbstractOscarController implements UseS //Ajoute l'utilisateur courant $doc->addPerson($this->getCurrentPerson()); $doc->setTypeDocument($type); $this->getEntityManager()->persist($doc); $this->getEntityManager()->flush(); //Déplacement des fichiers dans le bon répertoire rename($pathSource, $pathDestination); } $this->getEntityManager()->flush(); $this->getActivityLogService()->addUserInfo( sprintf("a modifié le document '%s' dans l'activité %s.", $document, $document->getGrant()->log()), 'Activity', $activity->getId() ); return $isSuccess; return true; } /** Loading module/Oscar/src/Oscar/Service/ContractDocumentService.php +5 −2 Original line number Diff line number Diff line Loading @@ -119,7 +119,7 @@ class ContractDocumentService implements UseOscarConfigurationService, UseEntity */ public function deleteDocument(ContractDocument $contractDocument): void { $this->getLoggerService()->debug("# Suppression du document '$contractDocument'"); $this->getLoggerService()->debug("# Suppression du document '$contractDocument'..."); // Nom du document $documentName = $contractDocument->getFileName(); Loading @@ -127,9 +127,12 @@ class ContractDocumentService implements UseOscarConfigurationService, UseEntity // Path document pour déplacement $documentLocation = $this->getOscarConfigurationService()->getDocumentDropLocation(); $this->getLoggerService()->debug(" - Dossier : " . $documentLocation); // Récupération du document et des ces différentes versions $documents = $this->getContractDocumentRepository()->getDocumentsForFilenameAndActivity($contractDocument); $this->getLoggerService()->debug(" - Le documents et ces versions implique " . count($documents) . " document(s)"); if (count($documents) == 0) { throw new OscarException("Ce document n'existe plus"); Loading Loading @@ -219,7 +222,7 @@ class ContractDocumentService implements UseOscarConfigurationService, UseEntity //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// REPOSITORY protected function getContractDocumentRepository(): ContractDocumentRepository public function getContractDocumentRepository(): ContractDocumentRepository { return $this->getEntityManager()->getRepository(ContractDocument::class); } Loading module/Oscar/src/Oscar/Service/OscarUserContext.php +9 −0 Original line number Diff line number Diff line Loading @@ -1506,6 +1506,15 @@ class OscarUserContext implements UseOscarConfigurationService, UseLoggerService if ($ressource) { // $this->getLoggerService()->info("hasPrivilege $privilege dans $ressource non global"); $privileges = $this->getPrivileges($ressource); if( $privilege == Privileges::PROJECT_DOCUMENT_SHOW && $ressource instanceof Project ){ foreach ($ressource->getActivities() as $activity ){ if( $this->getAccessActivityDocument($activity)['read'] ){ return true; } } } if ($privilege == Privileges::ACTIVITY_DOCUMENT_SHOW || $privilege == Privileges::ACTIVITY_DOCUMENT_MANAGE) { if ($ressource instanceof Activity) { $access = $this->getAccessActivityDocument($ressource); Loading module/Oscar/src/Oscar/Service/PCRUService.php +2 −2 Original line number Diff line number Diff line Loading @@ -113,7 +113,7 @@ class PCRUService implements UseLoggerService, UseOscarConfigurationService, Use $organization->getSiret(), $organization->getTvaintra(), $organization->getDuns(), "", "1", $organization->getStreet1(), $organization->getZipCode(), $organization->getCity(), Loading Loading @@ -457,6 +457,7 @@ class PCRUService implements UseLoggerService, UseOscarConfigurationService, Use throw new OscarException("Le module PCR n'est pas activé"); } // Récupération des données $pcruInfos = $this->getPcruInfosActivity($activity); $preview = false; Loading @@ -476,7 +477,6 @@ class PCRUService implements UseLoggerService, UseOscarConfigurationService, Use $pcruValidation = new PCRUValidator($this->getOscarConfigurationService(), $this->getEntityManager()); $validation = $pcruValidation->validate($pcruInfos); $documentPath = ""; if( $pcruInfos->getDocumentId() ){ $documentPath = $this->getDocumentPath($pcruInfos->getDocumentId()); Loading Loading
front/src/ActivityDocument.vue +32 −15 Original line number Diff line number Diff line Loading @@ -194,8 +194,28 @@ {{ tab.label }} <sup class="label label-default">{{ tab.total }}</sup> </div> <div class="tab" :class="{'selected': displayComputed }" @click.prevent="handlerSelectTab('computed')"> Documents générés </div> </div> <div class="tab-content" v-show="displayComputed"> <article class="card xs" v-for="doc in computedDocuments" :key="doc.key"> <div class=""> <i class="picto icon-doc"></i> <strong>{{doc.label}}</strong> <small class="text-light"> (Document généré automatiquement) </small> </div> <nav class="text-right show-over"> <a class="btn btn-default btn-xs" :href="doc.url"> <i class="icon-upload-outline"></i> Télécharger </a> </nav> </article> </div> <div class="tab-content" v-for="tab in packedDocuments" v-show="selectedTabId === tab.id"> <nav v-if="tab.manage" class="text-right"> <button v-on:click="handlerUploadNewDoc(tab.id)" class="btn btn-xs btn-default" v-if="tab.manage"> Loading Loading @@ -308,7 +328,8 @@ export default { url: {required: true}, documentTypes: {required: true}, urlDocumentType: {required: true}, moment: {require: true} moment: {require: true}, computedDocuments: { requires: false, default: [] } }, data() { Loading Loading @@ -441,6 +462,7 @@ export default { // Modification d'un document handlerEdit(document) { console.log(JSON.parse(JSON.stringify(document))); let valueTabDocument = document.tabDocument; if (valueTabDocument === null || valueTabDocument === undefined || valueTabDocument.trim === ''){ valueTabDocument = PRIVATE; Loading Loading @@ -515,20 +537,8 @@ export default { document.persons.forEach(p => { this.persons.push(p); }) // initialise objet de base this.uploadNewDocData.init = true; // Affectation valeur par défaut champ fichier lié au contexte de l'onglet choisi (tab) this.fileToDownload = null; // Tab choisis pour upload document (TabId est égal id onglet) /** this.uploadDoc = true; //Hydratation de l'url de soumission complétée (propre à cet objet) this.uploadNewDocData.baseUrlUpload = urlReupload; this.selectedIdTypeDocument = typeId; //tab.id, doc.urlReupload, doc.category.id, //Datas communes sous traite à une méthode commune (méthode "privée" nb : pas possible en JS) this.initUploadDatas(tabId, typeId); ****/ }, /** Loading Loading @@ -747,8 +757,15 @@ export default { }, handlerSelectTab(tab){ if( tab == "computed" ){ this.displayComputed = true; this.selectedTab = null; this.selectedTabId = null; } else { this.displayComputed = false; this.selectedTab = tab; this.selectedTabId = tab.id; } }, // Recup datas Docs Loading
module/Oscar/src/Oscar/Controller/ContractDocumentController.php +46 −88 Original line number Diff line number Diff line Loading @@ -189,38 +189,52 @@ class ContractDocumentController extends AbstractOscarController implements UseS * @return JsonModel * @throws OscarException|\HttpException */ public function changeTypeAction(): JsonModel public function changeTypeAction() { /** @var Request $request */ $request = $this->getRequest(); if ($request->isPost()) { // Récup document $document = $this->getContractDocumentService()->getDocument($request->getPost('documentId')); if( !($this->getOscarUserContextService()->getAccessDocument($document)['write'] === true) ){ return $this->getResponseUnauthorized("Vous ne pouvez pas modifier ce document"); } $type = $this->getEntityManager()->getRepository(TypeDocument::class)->find($request->getPost('type')); if (!$type) { $this->getResponseBadRequest("Type de document invalide"); // Gestion de l'onglet $tabDest = $document->getTabDocument(); $tabDestId = intval($request->getPost()->get('tabDocument')); if( $tabDestId ){ $tabDest = $this->getContractDocumentService()->getContractTabDocument($tabDestId); if( $tabDestId != $document->getTabDocument()->getId() ){ // On regarde si on a le droit d'accès à l'onglet if( $this->getOscarUserContextService()->getAccessTabDocument($tabDest)['write'] === true ){ $document->setTabDocument($tabDest); } else { return $this->getResponseUnauthorized("Vous n'avez pas accès à l'onglet de destination"); } $privateDocument = $request->getPost('private'); $idsPersons = (trim($request->getPost('persons')) !== "") ? explode(",", $request->getPost('persons')) : []; // Passage du doc en non privé ou else -> passage en privé if (false === boolval($privateDocument)) { $tabDocument = $this->getEntityManager()->getRepository(TabDocument::class)->find( $request->getPost('tabDocument') ); $succesManageDocuments = $this->manageDocsInTab($document, $idsPersons, $tabDocument, $type, false); if (false === $succesManageDocuments) { $this->getResponseBadRequest("La gestion des documents associés a échouée !"); } } else { $succesManageDocuments = $this->manageDocsInTab($document, $idsPersons, null, $type, true); if (false === $succesManageDocuments) { $this->getResponseBadRequest("La gestion des documents associés a échouée !"); } // Type de document $type = $this->getContractDocumentService()->getContractDocumentType($request->getPost('type')); if (!$type) { return $this->getResponseBadRequest("Type de document invalide"); } // Privé $privateDocument = (bool) $request->getPost('private', false); // Personnes $idsPersons = (trim($request->getPost('persons')) !== "") ? explode(",", $request->getPost('persons')) : []; // Traitement $succesManageDocuments = $this->manageDocsInTab($document, $idsPersons, $tabDest, $type, $privateDocument); if( !$succesManageDocuments ){ return $this->getResponseBadRequest("Impossible de modifier le document"); } return new JsonModel(['response' => 'ok']); } throw new \HttpException(); Loading Loading @@ -377,76 +391,23 @@ class ContractDocumentController extends AbstractOscarController implements UseS $pathDocumentsConfig = $this->getOscarConfigurationService()->getDocumentDropLocation(); // 1 : On va chercher toutes les versions d'un même document $em = $this->getEntityManager()->getRepository(ContractDocument::class); $documents = $em->createQueryBuilder('d')->select('d'); // Params pour la requete de base $paramsQuery = [ 'fileName' => $document->getFileName(), 'grant' => $activity, ]; if (true === $document->isPrivate()) { // Documents privés $paramsQuery ['private'] = true; $documents->where( 'd.fileName = :fileName AND d.grant = :grant AND d.private = :private' $documents = $this->getContractDocumentService()->getContractDocumentRepository()->getDocumentsForFilenameAndActivity( $document ); } else { if (!is_null($document->getTabDocument())) { $paramsQuery ['tabDocument'] = $document->getTabDocument(); $documents->where( 'd.fileName = :fileName AND d.grant = :grant AND d.tabDocument = :tabDocument' ); } else { // Document version antérieur feature onglets de documents (non classés) $paramsQuery ['private'] = false; $documents->where( 'd.fileName = :fileName AND d.grant = :grant AND d.private = :private' ); } } $result = $documents->setParameters($paramsQuery)->getQuery()->getResult(); $destinationFolder = null; //2 : On gère le déplacement de doc et la privatisation /** @var ContractDocument $doc */ foreach ($result as $doc) { foreach ($documents as $doc) { //Passage d'un document en privée if (true === $docToPrivate) { $pathSource = (!is_null($doc->getTabDocument())) ? $pathDocumentsConfig . 'tab_' . $doc->getTabDocument( )->getId() . '/' . $doc->getPath() : $pathDocumentsConfig; $pathDestination = $pathDocumentsConfig . 'private/' . $doc->getPath(); $destinationFolder = $pathDocumentsConfig . 'private'; $this->createFolder($destinationFolder); //On supprime les tabDocuments $doc->setTabDocument(null); //On rend le document privé $doc->setPrivate(true); } else { if ($doc->isPrivate()) { $pathSource = $pathDocumentsConfig . 'private/' . $doc->getPath(); } else { $pathSource = (!is_null( $doc->getTabDocument() )) ? $pathDocumentsConfig . 'tab_' . $doc->getTabDocument()->getId() . '/' . $doc->getPath( ) : $pathDocumentsConfig . '/' . $doc->getPath(); } $pathDestination = $pathDocumentsConfig . 'tab_' . $tabDocument->getId() . '/' . $doc->getPath(); $destinationFolder = $pathDocumentsConfig . 'tab_' . $tabDocument->getId(); $this->createFolder($destinationFolder); //Passage d'un document dans un onglet $doc->setPrivate($docToPrivate); $doc->setTabDocument($tabDocument); $doc->setPrivate(false); } //on réinitialise les personnes foreach ($doc->getPersons() as $person) { $doc->removePerson($person); } $doc->getPersons()->clear(); //On ajoute les personnes demandées if (count($persons) > 0) { foreach ($persons as $idPerson) { Loading @@ -457,18 +418,15 @@ class ContractDocumentController extends AbstractOscarController implements UseS //Ajoute l'utilisateur courant $doc->addPerson($this->getCurrentPerson()); $doc->setTypeDocument($type); $this->getEntityManager()->persist($doc); $this->getEntityManager()->flush(); //Déplacement des fichiers dans le bon répertoire rename($pathSource, $pathDestination); } $this->getEntityManager()->flush(); $this->getActivityLogService()->addUserInfo( sprintf("a modifié le document '%s' dans l'activité %s.", $document, $document->getGrant()->log()), 'Activity', $activity->getId() ); return $isSuccess; return true; } /** Loading
module/Oscar/src/Oscar/Service/ContractDocumentService.php +5 −2 Original line number Diff line number Diff line Loading @@ -119,7 +119,7 @@ class ContractDocumentService implements UseOscarConfigurationService, UseEntity */ public function deleteDocument(ContractDocument $contractDocument): void { $this->getLoggerService()->debug("# Suppression du document '$contractDocument'"); $this->getLoggerService()->debug("# Suppression du document '$contractDocument'..."); // Nom du document $documentName = $contractDocument->getFileName(); Loading @@ -127,9 +127,12 @@ class ContractDocumentService implements UseOscarConfigurationService, UseEntity // Path document pour déplacement $documentLocation = $this->getOscarConfigurationService()->getDocumentDropLocation(); $this->getLoggerService()->debug(" - Dossier : " . $documentLocation); // Récupération du document et des ces différentes versions $documents = $this->getContractDocumentRepository()->getDocumentsForFilenameAndActivity($contractDocument); $this->getLoggerService()->debug(" - Le documents et ces versions implique " . count($documents) . " document(s)"); if (count($documents) == 0) { throw new OscarException("Ce document n'existe plus"); Loading Loading @@ -219,7 +222,7 @@ class ContractDocumentService implements UseOscarConfigurationService, UseEntity //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// REPOSITORY protected function getContractDocumentRepository(): ContractDocumentRepository public function getContractDocumentRepository(): ContractDocumentRepository { return $this->getEntityManager()->getRepository(ContractDocument::class); } Loading
module/Oscar/src/Oscar/Service/OscarUserContext.php +9 −0 Original line number Diff line number Diff line Loading @@ -1506,6 +1506,15 @@ class OscarUserContext implements UseOscarConfigurationService, UseLoggerService if ($ressource) { // $this->getLoggerService()->info("hasPrivilege $privilege dans $ressource non global"); $privileges = $this->getPrivileges($ressource); if( $privilege == Privileges::PROJECT_DOCUMENT_SHOW && $ressource instanceof Project ){ foreach ($ressource->getActivities() as $activity ){ if( $this->getAccessActivityDocument($activity)['read'] ){ return true; } } } if ($privilege == Privileges::ACTIVITY_DOCUMENT_SHOW || $privilege == Privileges::ACTIVITY_DOCUMENT_MANAGE) { if ($ressource instanceof Activity) { $access = $this->getAccessActivityDocument($ressource); Loading
module/Oscar/src/Oscar/Service/PCRUService.php +2 −2 Original line number Diff line number Diff line Loading @@ -113,7 +113,7 @@ class PCRUService implements UseLoggerService, UseOscarConfigurationService, Use $organization->getSiret(), $organization->getTvaintra(), $organization->getDuns(), "", "1", $organization->getStreet1(), $organization->getZipCode(), $organization->getCity(), Loading Loading @@ -457,6 +457,7 @@ class PCRUService implements UseLoggerService, UseOscarConfigurationService, Use throw new OscarException("Le module PCR n'est pas activé"); } // Récupération des données $pcruInfos = $this->getPcruInfosActivity($activity); $preview = false; Loading @@ -476,7 +477,6 @@ class PCRUService implements UseLoggerService, UseOscarConfigurationService, Use $pcruValidation = new PCRUValidator($this->getOscarConfigurationService(), $this->getEntityManager()); $validation = $pcruValidation->validate($pcruInfos); $documentPath = ""; if( $pcruInfos->getDocumentId() ){ $documentPath = $this->getDocumentPath($pcruInfos->getDocumentId()); Loading