Loading module/Oscar/src/Oscar/Controller/EnrollController.php +22 −43 Original line number Diff line number Diff line Loading @@ -56,45 +56,6 @@ class EnrollController extends AbstractOscarController implements UsePersonServi { use UsePersonServiceTrait, UseProjectServiceTrait, UseProjectGrantServiceTrait, UseNotificationServiceTrait, UseActivityServiceTrait, UseOrganizationServiceTrait; private function closeEnroll($class) { $this->getOscarUserContextService()->check(Privileges::PERSON_EDIT); /** @var OrganizationPerson $enroll */ $enroll = $this->getEntityManager()->getRepository($class)->find($this->params()->fromRoute('idenroll')); $date = $this->params()->fromPost('at'); if (!$date || !$enroll) { throw new OscarException("Erreur, données manquantes, veuillez reessayer"); } switch ($class) { case OrganizationPerson::class : $route = 'organization/show'; $routeOpt = ['id' => $enroll->getOrganization()->getId()]; break; default: return $this->getResponseInternalError("Objet $class non pris en charge"); } try { $datet = new \DateTime($date); } catch (\Exception $e) { throw new OscarException("Erreur, données inconhérente"); } try { $enroll->setDateEnd($datet); $this->getEntityManager()->flush($enroll); $this->redirect()->toRoute($route, $routeOpt); } catch (\Exception $e) { $msg = sprinf("Impossible de mettre le rôle de la person à jour : %s", $e->getMessage()); $this->getActivityLogService()->addUserInfo($msg, "organizationperson", $enroll->getId()); throw new OscarException($msg); } } private function getProjectEntity(): Project { $idProject = $this->params()->fromRoute('idenroller'); Loading Loading @@ -684,12 +645,30 @@ class EnrollController extends AbstractOscarController implements UsePersonServi } } //////////////////////////////////////////////////////////////////////////// // Fin des rôles /** * @throws OscarException */ public function organizationPersonCloseAction() { $this->getOscarUserContextService()->check(Privileges::ORGANIZATION_EDIT, $this->getActivityEntity()); return $this->closeEnroll(OrganizationPerson::class); $this->getOscarUserContextService()->check(Privileges::ORGANIZATION_EDIT); /** @var OrganizationPerson $enroll */ $enroll = $this->getEntityManager()->getRepository(OrganizationPerson::class)->find($this->params()->fromRoute('idenroll')); $organization = $enroll->getOrganization(); $date = $this->getPostedDateTime('at'); if (!$date || !$enroll) { throw new OscarException("Erreur, données manquantes, veuillez reessayer"); } try { $this->getOrganizationService()->closeOrganizationPerson($enroll, $date); $this->redirect()->toRoute('organization/show', ['id' => $organization->getId()]); } catch (\Exception $e) { $msg = "Impossible de cloturer le rôle de la personne dans l'organisation"; throw new OscarException($e->getMessage()); } } } Loading module/Oscar/src/Oscar/Service/GearmanJobLauncherService.php +19 −0 Original line number Diff line number Diff line Loading @@ -4,9 +4,11 @@ namespace Oscar\Service; use Oscar\Entity\Activity; use Oscar\Entity\ActivityOrganization; use Oscar\Entity\Organization; use Oscar\Entity\Person; use Oscar\Entity\Project; use Oscar\Entity\ProjectPartner; use Oscar\Traits\UseLoggerService; use Oscar\Traits\UseLoggerServiceTrait; use Oscar\Traits\UseOscarConfigurationService; Loading Loading @@ -68,6 +70,23 @@ class GearmanJobLauncherService implements UseOscarConfigurationService, UseLogg $this->sendBackgroundTask($task, $params, $key); } public function triggerUpdateNotificationOrganization(Organization $organization): void { /** @var ActivityOrganization $activityOrganization */ foreach ($organization->getActivities() as $activityOrganization) { if( $activityOrganization->isPrincipal() ){ $this->triggerUpdateNotificationActivity($activityOrganization->getActivity()); } } /** @var ProjectPartner $projectPartner */ foreach ($organization->getProjects() as $projectPartner) { if( $projectPartner->isPrincipal() ){ $this->triggerUpdateNotificationProject($projectPartner->getProject()); } } } /** * Mise à jour des notifications des activités d'un projet de recherche. * Loading module/Oscar/src/Oscar/Service/OrganizationService.php +34 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ use Oscar\Entity\ActivityOrganization; use Oscar\Entity\Country3166; use Oscar\Entity\Country3166Repository; use Oscar\Entity\Organization; use Oscar\Entity\OrganizationPerson; use Oscar\Entity\OrganizationRole; use Oscar\Entity\OrganizationRoleRepository; use Oscar\Entity\OrganizationType; Loading Loading @@ -592,6 +593,39 @@ class OrganizationService implements UseOscarConfigurationService, UseEntityMana } } public function closeOrganizationPerson(OrganizationPerson $organizationPerson, \DateTime $dateEnd) :void { $person = $organizationPerson->getPerson(); $organization = $organizationPerson->getOrganization(); $role = $organizationPerson->getRoleObj(); $msg = sprintf( "Résiliation du rôle '%s' de '%s' dans l'organisation '%s'", $role->getRoleId(), $person, $organization ); $this->getLoggerService()->notice($msg); try { $updateNotification = $role->isPrincipal(); $organizationPerson->setDateEnd($dateEnd); $this->getEntityManager()->flush(); if($updateNotification ){ $this->getPersonService()->getGearmanJobLauncherService()->triggerUpdateNotificationOrganization($organization); } $this->getPersonService()->getGearmanJobLauncherService()->triggerUpdateSearchIndexPerson($person); $this->getPersonService()->getGearmanJobLauncherService()->triggerUpdateSearchIndexOrganization($organization); } catch (\Exception $e){ } } //////////////////////////////////////////////////////////////////////////// /** Loading Loading
module/Oscar/src/Oscar/Controller/EnrollController.php +22 −43 Original line number Diff line number Diff line Loading @@ -56,45 +56,6 @@ class EnrollController extends AbstractOscarController implements UsePersonServi { use UsePersonServiceTrait, UseProjectServiceTrait, UseProjectGrantServiceTrait, UseNotificationServiceTrait, UseActivityServiceTrait, UseOrganizationServiceTrait; private function closeEnroll($class) { $this->getOscarUserContextService()->check(Privileges::PERSON_EDIT); /** @var OrganizationPerson $enroll */ $enroll = $this->getEntityManager()->getRepository($class)->find($this->params()->fromRoute('idenroll')); $date = $this->params()->fromPost('at'); if (!$date || !$enroll) { throw new OscarException("Erreur, données manquantes, veuillez reessayer"); } switch ($class) { case OrganizationPerson::class : $route = 'organization/show'; $routeOpt = ['id' => $enroll->getOrganization()->getId()]; break; default: return $this->getResponseInternalError("Objet $class non pris en charge"); } try { $datet = new \DateTime($date); } catch (\Exception $e) { throw new OscarException("Erreur, données inconhérente"); } try { $enroll->setDateEnd($datet); $this->getEntityManager()->flush($enroll); $this->redirect()->toRoute($route, $routeOpt); } catch (\Exception $e) { $msg = sprinf("Impossible de mettre le rôle de la person à jour : %s", $e->getMessage()); $this->getActivityLogService()->addUserInfo($msg, "organizationperson", $enroll->getId()); throw new OscarException($msg); } } private function getProjectEntity(): Project { $idProject = $this->params()->fromRoute('idenroller'); Loading Loading @@ -684,12 +645,30 @@ class EnrollController extends AbstractOscarController implements UsePersonServi } } //////////////////////////////////////////////////////////////////////////// // Fin des rôles /** * @throws OscarException */ public function organizationPersonCloseAction() { $this->getOscarUserContextService()->check(Privileges::ORGANIZATION_EDIT, $this->getActivityEntity()); return $this->closeEnroll(OrganizationPerson::class); $this->getOscarUserContextService()->check(Privileges::ORGANIZATION_EDIT); /** @var OrganizationPerson $enroll */ $enroll = $this->getEntityManager()->getRepository(OrganizationPerson::class)->find($this->params()->fromRoute('idenroll')); $organization = $enroll->getOrganization(); $date = $this->getPostedDateTime('at'); if (!$date || !$enroll) { throw new OscarException("Erreur, données manquantes, veuillez reessayer"); } try { $this->getOrganizationService()->closeOrganizationPerson($enroll, $date); $this->redirect()->toRoute('organization/show', ['id' => $organization->getId()]); } catch (\Exception $e) { $msg = "Impossible de cloturer le rôle de la personne dans l'organisation"; throw new OscarException($e->getMessage()); } } } Loading
module/Oscar/src/Oscar/Service/GearmanJobLauncherService.php +19 −0 Original line number Diff line number Diff line Loading @@ -4,9 +4,11 @@ namespace Oscar\Service; use Oscar\Entity\Activity; use Oscar\Entity\ActivityOrganization; use Oscar\Entity\Organization; use Oscar\Entity\Person; use Oscar\Entity\Project; use Oscar\Entity\ProjectPartner; use Oscar\Traits\UseLoggerService; use Oscar\Traits\UseLoggerServiceTrait; use Oscar\Traits\UseOscarConfigurationService; Loading Loading @@ -68,6 +70,23 @@ class GearmanJobLauncherService implements UseOscarConfigurationService, UseLogg $this->sendBackgroundTask($task, $params, $key); } public function triggerUpdateNotificationOrganization(Organization $organization): void { /** @var ActivityOrganization $activityOrganization */ foreach ($organization->getActivities() as $activityOrganization) { if( $activityOrganization->isPrincipal() ){ $this->triggerUpdateNotificationActivity($activityOrganization->getActivity()); } } /** @var ProjectPartner $projectPartner */ foreach ($organization->getProjects() as $projectPartner) { if( $projectPartner->isPrincipal() ){ $this->triggerUpdateNotificationProject($projectPartner->getProject()); } } } /** * Mise à jour des notifications des activités d'un projet de recherche. * Loading
module/Oscar/src/Oscar/Service/OrganizationService.php +34 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ use Oscar\Entity\ActivityOrganization; use Oscar\Entity\Country3166; use Oscar\Entity\Country3166Repository; use Oscar\Entity\Organization; use Oscar\Entity\OrganizationPerson; use Oscar\Entity\OrganizationRole; use Oscar\Entity\OrganizationRoleRepository; use Oscar\Entity\OrganizationType; Loading Loading @@ -592,6 +593,39 @@ class OrganizationService implements UseOscarConfigurationService, UseEntityMana } } public function closeOrganizationPerson(OrganizationPerson $organizationPerson, \DateTime $dateEnd) :void { $person = $organizationPerson->getPerson(); $organization = $organizationPerson->getOrganization(); $role = $organizationPerson->getRoleObj(); $msg = sprintf( "Résiliation du rôle '%s' de '%s' dans l'organisation '%s'", $role->getRoleId(), $person, $organization ); $this->getLoggerService()->notice($msg); try { $updateNotification = $role->isPrincipal(); $organizationPerson->setDateEnd($dateEnd); $this->getEntityManager()->flush(); if($updateNotification ){ $this->getPersonService()->getGearmanJobLauncherService()->triggerUpdateNotificationOrganization($organization); } $this->getPersonService()->getGearmanJobLauncherService()->triggerUpdateSearchIndexPerson($person); $this->getPersonService()->getGearmanJobLauncherService()->triggerUpdateSearchIndexOrganization($organization); } catch (\Exception $e){ } } //////////////////////////////////////////////////////////////////////////// /** Loading