Loading module/Oscar/src/Oscar/Controller/ProjectGrantController.php +5 −43 Original line number Diff line number Diff line Loading @@ -2545,39 +2545,6 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif ->leftJoin('a.persons', 'm2') ->where('m1.person in(:ids) OR m2.person in (:ids)'); $queryOrganisationNoRole = $this->getEntityManager()->createQueryBuilder() ->select('a.id') ->from(Activity::class, 'a', 'a.id') ->leftJoin('a.project', 'p') ->leftJoin('p.partners', 'o1') ->leftJoin('a.organizations', 'o2') ->leftJoin('p.members', 'm1') ->leftJoin('a.persons', 'm2') ->where('(o1.organization = :id OR o2.organization = :id)'); $queryOrganisationRole = $this->getEntityManager()->createQueryBuilder() ->select('a.id') ->from(Activity::class, 'a', 'a.id') ->leftJoin('a.project', 'p') ->leftJoin('p.partners', 'o1') ->leftJoin('a.organizations', 'o2') ->leftJoin('p.members', 'm1') ->leftJoin('a.persons', 'm2') ->where( '((o1.organization = :id AND o1.roleObj = :roleObj) OR (o2.organization = :id AND o2.roleObj = :roleObj))' ); $queryOrganisationRoleNorOrg = $this->getEntityManager()->createQueryBuilder() ->select('a.id') ->from(Activity::class, 'a', 'a.id') ->leftJoin('a.project', 'p') ->leftJoin('p.partners', 'o1') ->leftJoin('a.organizations', 'o2') ->leftJoin('p.members', 'm1') ->leftJoin('a.persons', 'm2') ->where( '(o1.roleObj = :roleObj OR o2.roleObj = :roleObj)' ); $queryOrganisations = $this->getEntityManager()->createQueryBuilder() ->select('a.id') Loading Loading @@ -2728,10 +2695,8 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif )->getQuery()->getArrayResult() ); break; // Organisations (plusieurs) case 'om' : case 'om' : $value1 = explode(',', $params[1]); $crit['val1'] = $value1; $organisationsRequire = $this->getOrganizationService()->getOrganizationsByIds($value1); Loading @@ -2741,14 +2706,10 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif $filterOrganizations[$organisation->getId()] = (string)$organisation; } $ids = array_keys( $queryOrganisations->setParameter( 'ids', $value1 )->getQuery()->getArrayResult() ); $ids = $this->getActivityService()->getActivityRepository()->getIdsWithOneOfOrganizationsRoled($value1); break; case 'ap' : case 'sp' : try { Loading @@ -2759,7 +2720,8 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif $crit['val1Label'] = $person->getDisplayName(); $crit['val2Label'] = $value2 > 0 ? $this->getOscarUserContextService()->getAllRoleIdPerson( )[$value2] : ''; $ids = $this->getActivityService()->getActivityRepository()->getIdsForPersonWithRole($person->getId(), $value2 ? $value2 : 0); $ids = $this->getActivityService()->getActivityRepository() ->getIdsForPersonWithRole($person->getId(), $value2 ? $value2 : 0); } catch (\Exception $e) { $crit['error'] = "Impossible de filtrer sur la personne"; } Loading module/Oscar/src/Oscar/Controller/TimesheetController.php +2 −1 Original line number Diff line number Diff line Loading @@ -1361,7 +1361,8 @@ class TimesheetController extends AbstractOscarController if ($action == "export2") { $out = $this->params()->fromQuery('out', 'pdf'); $datas = $timesheetService->getPersonTimesheetsDatas($person, $period); $restrictedActivity = $this->params()->fromQuery('activityid', 0); $datas = $timesheetService->getPersonTimesheetsDatas($person, $period, false, $restrictedActivity); $datas['format'] = $out; if ($out == 'pdf') { Loading module/Oscar/src/Oscar/Entity/ActivityRepository.php +17 −7 Original line number Diff line number Diff line Loading @@ -106,9 +106,14 @@ class ActivityRepository extends EntityRepository return array_map('current', $queryBuilder->getQuery()->getArrayResult()); } public function getIdsWithOrganizationAndRole(int $organizationId = 0, int $roleObjId = 0) :array /** * Retourne les IDs des activités impliquant une des organizations donnée avec le rôle spécifié * @param array $organizationsIds IDS des organisations * @param int $roleObjId ID rôle */ public function getIdsWithOneOfOrganizationsRoled( array $organizationsIds, int $roleObjId = 0 ) :array { if( $organizationId <= 0 && $roleObjId <= 0 ){ if( count($organizationsIds) == 0 && $roleObjId <= 0 ){ throw new OscarException("Vous devez préciser une organisation et/ou un rôle"); } Loading @@ -121,10 +126,10 @@ class ActivityRepository extends EntityRepository $params['roleId'] = $roleObjId; } if( $organizationId > 0 ) { $clauseA[] = 'orga1.id = :orgId'; $clauseB[] = 'orga2.id = :orgId'; $params['orgId'] = $organizationId; if( count($organizationsIds) > 0 ) { $clauseA[] = 'orga1.id IN(:orgIds)'; $clauseB[] = 'orga2.id IN(:orgIds)'; $params['orgIds'] = $organizationsIds; } $queryBuilder = $this->baseQueryWithOrganizationOf(); Loading @@ -141,6 +146,11 @@ class ActivityRepository extends EntityRepository return array_map('current', $queryBuilder->getQuery()->getArrayResult()); } public function getIdsWithOrganizationAndRole(int $organizationId = 0, int $roleObjId = 0) :array { return $this->getIdsWithOneOfOrganizationsRoled([$organizationId], $roleObjId); } /** * Retourne les IDS des activités qui impliquent un des types de documents donnés. * Loading module/Oscar/src/Oscar/Service/TimesheetService.php +42 −27 Original line number Diff line number Diff line Loading @@ -4589,10 +4589,11 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat } public function getPersonTimesheetsDatas(Person $person, $period, $validatedOnly = false) public function getPersonTimesheetsDatas(Person $person, $period, $validatedOnly = false, int $restrictedActivityId = 0) { $periodBounds = DateTimeUtils::periodBounds($period); $periodInfosObj = PeriodInfos::getPeriodInfosObj($period); $restrictedActivityAggregate = $this->getOthersWPByCode('research'); $query = $this->getEntityManager()->getRepository(TimeSheet::class) ->createQueryBuilder('t') Loading Loading @@ -4627,7 +4628,6 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat $validationsDone = []; $declarations = [ 'activities' => [], 'others' => [], Loading @@ -4650,6 +4650,7 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat } if ($timesheet->getActivity()) { if( $restrictedActivityId == 0 || $timesheet->getActivity()->getId() == $restrictedActivityId ){ if (!in_array($timesheet->getActivity()->getCodeEOTP(), $pfi)) { $pfi[] = $timesheet->getActivity()->getCodeEOTP(); } Loading @@ -4663,6 +4664,7 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat $activities[] = $timesheet->getActivity(); } } } $group = 'Projet inconnue'; $acronym = ''; Loading @@ -4674,6 +4676,7 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat $day = $timesheet->getDateFrom()->format('d'); if ($timesheet->getActivity() && $timesheet->getWorkpackage()) { if( $restrictedActivityId == 0 || $timesheet->getActivity()->getId() == $restrictedActivityId ){ $path = 'activities'; $group = $timesheet->getActivity()->getAcronym() . " : " . $timesheet->getActivity()->getLabel(); $groupType = 'activity'; Loading @@ -4688,6 +4691,18 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat $subGroupType = "wp"; $label = $subGroup; $acronym = $timesheet->getActivity()->getAcronym(); } else { $path = 'others'; $group = $restrictedActivityAggregate['label']; $groupId = -1; $groupType = 'others'; $groupFamily = $restrictedActivityAggregate['group']; $subGroupId = $restrictedActivityAggregate['label']; $subGroupType = $restrictedActivityAggregate['label']; $label = $restrictedActivityAggregate['label']; $subGroup = $restrictedActivityAggregate['group']; $acronym = "ACRONYM"; } } if (array_key_exists($timesheet->getLabel(), $others)) { Loading Loading
module/Oscar/src/Oscar/Controller/ProjectGrantController.php +5 −43 Original line number Diff line number Diff line Loading @@ -2545,39 +2545,6 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif ->leftJoin('a.persons', 'm2') ->where('m1.person in(:ids) OR m2.person in (:ids)'); $queryOrganisationNoRole = $this->getEntityManager()->createQueryBuilder() ->select('a.id') ->from(Activity::class, 'a', 'a.id') ->leftJoin('a.project', 'p') ->leftJoin('p.partners', 'o1') ->leftJoin('a.organizations', 'o2') ->leftJoin('p.members', 'm1') ->leftJoin('a.persons', 'm2') ->where('(o1.organization = :id OR o2.organization = :id)'); $queryOrganisationRole = $this->getEntityManager()->createQueryBuilder() ->select('a.id') ->from(Activity::class, 'a', 'a.id') ->leftJoin('a.project', 'p') ->leftJoin('p.partners', 'o1') ->leftJoin('a.organizations', 'o2') ->leftJoin('p.members', 'm1') ->leftJoin('a.persons', 'm2') ->where( '((o1.organization = :id AND o1.roleObj = :roleObj) OR (o2.organization = :id AND o2.roleObj = :roleObj))' ); $queryOrganisationRoleNorOrg = $this->getEntityManager()->createQueryBuilder() ->select('a.id') ->from(Activity::class, 'a', 'a.id') ->leftJoin('a.project', 'p') ->leftJoin('p.partners', 'o1') ->leftJoin('a.organizations', 'o2') ->leftJoin('p.members', 'm1') ->leftJoin('a.persons', 'm2') ->where( '(o1.roleObj = :roleObj OR o2.roleObj = :roleObj)' ); $queryOrganisations = $this->getEntityManager()->createQueryBuilder() ->select('a.id') Loading Loading @@ -2728,10 +2695,8 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif )->getQuery()->getArrayResult() ); break; // Organisations (plusieurs) case 'om' : case 'om' : $value1 = explode(',', $params[1]); $crit['val1'] = $value1; $organisationsRequire = $this->getOrganizationService()->getOrganizationsByIds($value1); Loading @@ -2741,14 +2706,10 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif $filterOrganizations[$organisation->getId()] = (string)$organisation; } $ids = array_keys( $queryOrganisations->setParameter( 'ids', $value1 )->getQuery()->getArrayResult() ); $ids = $this->getActivityService()->getActivityRepository()->getIdsWithOneOfOrganizationsRoled($value1); break; case 'ap' : case 'sp' : try { Loading @@ -2759,7 +2720,8 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif $crit['val1Label'] = $person->getDisplayName(); $crit['val2Label'] = $value2 > 0 ? $this->getOscarUserContextService()->getAllRoleIdPerson( )[$value2] : ''; $ids = $this->getActivityService()->getActivityRepository()->getIdsForPersonWithRole($person->getId(), $value2 ? $value2 : 0); $ids = $this->getActivityService()->getActivityRepository() ->getIdsForPersonWithRole($person->getId(), $value2 ? $value2 : 0); } catch (\Exception $e) { $crit['error'] = "Impossible de filtrer sur la personne"; } Loading
module/Oscar/src/Oscar/Controller/TimesheetController.php +2 −1 Original line number Diff line number Diff line Loading @@ -1361,7 +1361,8 @@ class TimesheetController extends AbstractOscarController if ($action == "export2") { $out = $this->params()->fromQuery('out', 'pdf'); $datas = $timesheetService->getPersonTimesheetsDatas($person, $period); $restrictedActivity = $this->params()->fromQuery('activityid', 0); $datas = $timesheetService->getPersonTimesheetsDatas($person, $period, false, $restrictedActivity); $datas['format'] = $out; if ($out == 'pdf') { Loading
module/Oscar/src/Oscar/Entity/ActivityRepository.php +17 −7 Original line number Diff line number Diff line Loading @@ -106,9 +106,14 @@ class ActivityRepository extends EntityRepository return array_map('current', $queryBuilder->getQuery()->getArrayResult()); } public function getIdsWithOrganizationAndRole(int $organizationId = 0, int $roleObjId = 0) :array /** * Retourne les IDs des activités impliquant une des organizations donnée avec le rôle spécifié * @param array $organizationsIds IDS des organisations * @param int $roleObjId ID rôle */ public function getIdsWithOneOfOrganizationsRoled( array $organizationsIds, int $roleObjId = 0 ) :array { if( $organizationId <= 0 && $roleObjId <= 0 ){ if( count($organizationsIds) == 0 && $roleObjId <= 0 ){ throw new OscarException("Vous devez préciser une organisation et/ou un rôle"); } Loading @@ -121,10 +126,10 @@ class ActivityRepository extends EntityRepository $params['roleId'] = $roleObjId; } if( $organizationId > 0 ) { $clauseA[] = 'orga1.id = :orgId'; $clauseB[] = 'orga2.id = :orgId'; $params['orgId'] = $organizationId; if( count($organizationsIds) > 0 ) { $clauseA[] = 'orga1.id IN(:orgIds)'; $clauseB[] = 'orga2.id IN(:orgIds)'; $params['orgIds'] = $organizationsIds; } $queryBuilder = $this->baseQueryWithOrganizationOf(); Loading @@ -141,6 +146,11 @@ class ActivityRepository extends EntityRepository return array_map('current', $queryBuilder->getQuery()->getArrayResult()); } public function getIdsWithOrganizationAndRole(int $organizationId = 0, int $roleObjId = 0) :array { return $this->getIdsWithOneOfOrganizationsRoled([$organizationId], $roleObjId); } /** * Retourne les IDS des activités qui impliquent un des types de documents donnés. * Loading
module/Oscar/src/Oscar/Service/TimesheetService.php +42 −27 Original line number Diff line number Diff line Loading @@ -4589,10 +4589,11 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat } public function getPersonTimesheetsDatas(Person $person, $period, $validatedOnly = false) public function getPersonTimesheetsDatas(Person $person, $period, $validatedOnly = false, int $restrictedActivityId = 0) { $periodBounds = DateTimeUtils::periodBounds($period); $periodInfosObj = PeriodInfos::getPeriodInfosObj($period); $restrictedActivityAggregate = $this->getOthersWPByCode('research'); $query = $this->getEntityManager()->getRepository(TimeSheet::class) ->createQueryBuilder('t') Loading Loading @@ -4627,7 +4628,6 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat $validationsDone = []; $declarations = [ 'activities' => [], 'others' => [], Loading @@ -4650,6 +4650,7 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat } if ($timesheet->getActivity()) { if( $restrictedActivityId == 0 || $timesheet->getActivity()->getId() == $restrictedActivityId ){ if (!in_array($timesheet->getActivity()->getCodeEOTP(), $pfi)) { $pfi[] = $timesheet->getActivity()->getCodeEOTP(); } Loading @@ -4663,6 +4664,7 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat $activities[] = $timesheet->getActivity(); } } } $group = 'Projet inconnue'; $acronym = ''; Loading @@ -4674,6 +4676,7 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat $day = $timesheet->getDateFrom()->format('d'); if ($timesheet->getActivity() && $timesheet->getWorkpackage()) { if( $restrictedActivityId == 0 || $timesheet->getActivity()->getId() == $restrictedActivityId ){ $path = 'activities'; $group = $timesheet->getActivity()->getAcronym() . " : " . $timesheet->getActivity()->getLabel(); $groupType = 'activity'; Loading @@ -4688,6 +4691,18 @@ class TimesheetService implements UseOscarUserContextService, UseOscarConfigurat $subGroupType = "wp"; $label = $subGroup; $acronym = $timesheet->getActivity()->getAcronym(); } else { $path = 'others'; $group = $restrictedActivityAggregate['label']; $groupId = -1; $groupType = 'others'; $groupFamily = $restrictedActivityAggregate['group']; $subGroupId = $restrictedActivityAggregate['label']; $subGroupType = $restrictedActivityAggregate['label']; $label = $restrictedActivityAggregate['label']; $subGroup = $restrictedActivityAggregate['group']; $acronym = "ACRONYM"; } } if (array_key_exists($timesheet->getLabel(), $others)) { Loading