Loading module/Oscar/src/Oscar/Controller/ProjectGrantController.php +14 −2 Original line number Diff line number Diff line Loading @@ -763,6 +763,7 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif $id = $this->params()->fromRoute('id'); $doc = $this->params()->fromRoute('doc'); $baseDatas = $this->getProjectGrantService()->getBaseDataTemplate(); $baseDatas = $this->getProjectGrantService()->getBaseDataTemplate(); $activity = $this->getProjectGrantService()->getGrant($id); $documentDatas = $activity->documentDatas($baseDatas); $documentDatas["type-full"] = $this->getActivityTypeService()->getActivityTypeChainFormatted( Loading Loading @@ -2445,7 +2446,8 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif // Ajout d'un filtre sur les jalons 'aj' => 'Ayant le jalon', 'cb' => 'Impliquant le compte' 'cb' => 'Impliquant le compte', 'num' => 'Ayant une numérotation', ]; // Correspondance des champs de type date Loading Loading @@ -2822,6 +2824,15 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif } break; case 'num' : $value1 = $crit['val1'] = explode(',', $params[1]); try { $ids = $this->getActivityService()->getActivitiesWithNumerotation($value1); } catch (\Exception $e) { throw new OscarException($e->getMessage()); } break; case 'ao' : case 'so' : $organizationId[] = $value1; Loading Loading @@ -3003,7 +3014,7 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif break; } $criterias[] = $crit; if ($type == 'ap' || $type == 'ao' || $type == 'pm' || $type == 'om' if ($type == 'ap' || $type == 'ao' || $type == 'pm' || $type == 'om' || $type == 'num' || $type == 'fdt' || $type == 'cb' || $type == 'cb2' || $type == 'td') { if ($filterIds === null) { $filterIds = $ids; Loading Loading @@ -3131,6 +3142,7 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif 'sortCriteria' => $sortCriteria, 'sortDirection' => $sortDirection, 'sortIgnoreNull' => $sortIgnoreNull, 'numerotations' => $this->getOscarConfigurationService()->getNumerotationKeys(), 'types' => $this->getActivityTypeService()->getActivityTypes(true), 'documentsTypes' => $documentsTypes, 'disciplines' => $this->getActivityService()->getDisciplines(), Loading module/Oscar/src/Oscar/Entity/ActivityRepository.php +36 −2 Original line number Diff line number Diff line Loading @@ -19,14 +19,43 @@ use Oscar\Utils\DateTimeUtils; */ class ActivityRepository extends EntityRepository { /** * Retourne l'ID des activités qui impliquent une des numérotations données. * * @param array $numerotations * @return array */ public function getActivitiesIdsWithNumerotations(array $numerotations): array { $queryBuilder = $this->createQueryBuilder('a') ->select('DISTINCT a.id'); if (count($numerotations) == 0 || (in_array('null', $numerotations) && count($numerotations) == 1)) { $queryBuilder->where('a.numbers = \'a:0:{}\' OR a.numbers = \'N;\' OR a.numbers IS NULL'); } else { $where = []; foreach ($numerotations as $num) { $where[] = 'a.numbers LIKE \'%s:' . strlen($num) . ':"' . $num . '"%\''; } $queryBuilder->where(implode(' OR ', $where)); } return array_map('current', $queryBuilder->getQuery()->getArrayResult()); } /** * Retourne les IDS des activités qui impliquent un des types de documents donnés. * * @param array $idsTypeDocument * @return array */ public function getActivitiesIdsWithTypeDocument(array $idsTypeDocument): array { $queryBuilder = $this->createQueryBuilder('a') ->select('DISTINCT a.id') ->innerJoin('a.documents', 'd') ->where('d.typeDocument IN(:typesDocument)') ->setParameter('typesDocument', $idsTypeDocument) ; ->setParameter('typesDocument', $idsTypeDocument); return array_map('current', $queryBuilder->getQuery()->getArrayResult()); } Loading @@ -39,6 +68,11 @@ class ActivityRepository extends EntityRepository return $queryBuilder->getQuery()->getResult(); } /** * Retourne la liste des différents PFIs. * * @return array */ public function getDistinctPFI(): array { $queryBuilder = $this->createQueryBuilder('a') Loading module/Oscar/src/Oscar/Service/ProjectGrantService.php +6 −0 Original line number Diff line number Diff line Loading @@ -1206,6 +1206,12 @@ class ProjectGrantService implements UseGearmanJobLauncherService, UseOscarConfi return $this->getActivityRepository()->getActivitiesIdsWithTypeDocument($idsTypeDocument); } public function getActivitiesWithNumerotation( array $numerotations ) :array { $ids = $this->getActivityRepository()->getActivitiesIdsWithNumerotations($numerotations); return $ids; } /** * Renomage des clefs pour les numérotations personnalisées; * Loading module/Oscar/view/oscar/project-grant/advanced-search.phtml +24 −0 Original line number Diff line number Diff line Loading @@ -301,6 +301,25 @@ </article> </script> <script type="text/x-handlebars" id="numerotation-tpl"> <article class="criteria criteria-numerotation card"> <div class="icon-cal"></div> {{#if error}}<strong class="text-danger"><i class="icon-attention-1"></i> {{error}}</strong>{{/if}} <input type="hidden" name="criteria[]" class="criteria" value="{{criteria}}"/> <small>{{typeLabel}}</small> <select class="select2 form-control val1 changer types" id="filter_numerotation" multiple> <?php foreach( $numerotations as $num ): ?> <option value="<?= $num ?>"><?= $num ?></option> <?php endforeach; ?> </select> <nav> <a href="#" class="delete"> <i class="icon-cancel-outline"></i> </a> </nav> </article> </script> <script type="text/x-handlebars" id="milestones-criteria-tpl"> <article class="criteria criteria-{{type}} card"> <div class="icon-calendar"></div> Loading Loading @@ -794,6 +813,10 @@ datas.label = "Dépenses sur le compte"; dom = $(tplAccount(datas)); } else if(datas.type == 'num' ) { datas.label = "Numérotation"; dom = $(tplNumerotation(datas)); } // accountscode else if(datas.type == 'cb2' ) { datas.label = "Code de compte général"; Loading Loading @@ -1076,6 +1099,7 @@ tplPersons = Handlebars.compile($('#persons-criteria-tpl').html()), tplOrganizations= Handlebars.compile($('#organizations-criteria-tpl').html()), tplMilestone = Handlebars.compile($('#milestones-criteria-tpl').html()), tplNumerotation = Handlebars.compile($('#numerotation-tpl').html()), id = 1; // Loading Loading
module/Oscar/src/Oscar/Controller/ProjectGrantController.php +14 −2 Original line number Diff line number Diff line Loading @@ -763,6 +763,7 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif $id = $this->params()->fromRoute('id'); $doc = $this->params()->fromRoute('doc'); $baseDatas = $this->getProjectGrantService()->getBaseDataTemplate(); $baseDatas = $this->getProjectGrantService()->getBaseDataTemplate(); $activity = $this->getProjectGrantService()->getGrant($id); $documentDatas = $activity->documentDatas($baseDatas); $documentDatas["type-full"] = $this->getActivityTypeService()->getActivityTypeChainFormatted( Loading Loading @@ -2445,7 +2446,8 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif // Ajout d'un filtre sur les jalons 'aj' => 'Ayant le jalon', 'cb' => 'Impliquant le compte' 'cb' => 'Impliquant le compte', 'num' => 'Ayant une numérotation', ]; // Correspondance des champs de type date Loading Loading @@ -2822,6 +2824,15 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif } break; case 'num' : $value1 = $crit['val1'] = explode(',', $params[1]); try { $ids = $this->getActivityService()->getActivitiesWithNumerotation($value1); } catch (\Exception $e) { throw new OscarException($e->getMessage()); } break; case 'ao' : case 'so' : $organizationId[] = $value1; Loading Loading @@ -3003,7 +3014,7 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif break; } $criterias[] = $crit; if ($type == 'ap' || $type == 'ao' || $type == 'pm' || $type == 'om' if ($type == 'ap' || $type == 'ao' || $type == 'pm' || $type == 'om' || $type == 'num' || $type == 'fdt' || $type == 'cb' || $type == 'cb2' || $type == 'td') { if ($filterIds === null) { $filterIds = $ids; Loading Loading @@ -3131,6 +3142,7 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif 'sortCriteria' => $sortCriteria, 'sortDirection' => $sortDirection, 'sortIgnoreNull' => $sortIgnoreNull, 'numerotations' => $this->getOscarConfigurationService()->getNumerotationKeys(), 'types' => $this->getActivityTypeService()->getActivityTypes(true), 'documentsTypes' => $documentsTypes, 'disciplines' => $this->getActivityService()->getDisciplines(), Loading
module/Oscar/src/Oscar/Entity/ActivityRepository.php +36 −2 Original line number Diff line number Diff line Loading @@ -19,14 +19,43 @@ use Oscar\Utils\DateTimeUtils; */ class ActivityRepository extends EntityRepository { /** * Retourne l'ID des activités qui impliquent une des numérotations données. * * @param array $numerotations * @return array */ public function getActivitiesIdsWithNumerotations(array $numerotations): array { $queryBuilder = $this->createQueryBuilder('a') ->select('DISTINCT a.id'); if (count($numerotations) == 0 || (in_array('null', $numerotations) && count($numerotations) == 1)) { $queryBuilder->where('a.numbers = \'a:0:{}\' OR a.numbers = \'N;\' OR a.numbers IS NULL'); } else { $where = []; foreach ($numerotations as $num) { $where[] = 'a.numbers LIKE \'%s:' . strlen($num) . ':"' . $num . '"%\''; } $queryBuilder->where(implode(' OR ', $where)); } return array_map('current', $queryBuilder->getQuery()->getArrayResult()); } /** * Retourne les IDS des activités qui impliquent un des types de documents donnés. * * @param array $idsTypeDocument * @return array */ public function getActivitiesIdsWithTypeDocument(array $idsTypeDocument): array { $queryBuilder = $this->createQueryBuilder('a') ->select('DISTINCT a.id') ->innerJoin('a.documents', 'd') ->where('d.typeDocument IN(:typesDocument)') ->setParameter('typesDocument', $idsTypeDocument) ; ->setParameter('typesDocument', $idsTypeDocument); return array_map('current', $queryBuilder->getQuery()->getArrayResult()); } Loading @@ -39,6 +68,11 @@ class ActivityRepository extends EntityRepository return $queryBuilder->getQuery()->getResult(); } /** * Retourne la liste des différents PFIs. * * @return array */ public function getDistinctPFI(): array { $queryBuilder = $this->createQueryBuilder('a') Loading
module/Oscar/src/Oscar/Service/ProjectGrantService.php +6 −0 Original line number Diff line number Diff line Loading @@ -1206,6 +1206,12 @@ class ProjectGrantService implements UseGearmanJobLauncherService, UseOscarConfi return $this->getActivityRepository()->getActivitiesIdsWithTypeDocument($idsTypeDocument); } public function getActivitiesWithNumerotation( array $numerotations ) :array { $ids = $this->getActivityRepository()->getActivitiesIdsWithNumerotations($numerotations); return $ids; } /** * Renomage des clefs pour les numérotations personnalisées; * Loading
module/Oscar/view/oscar/project-grant/advanced-search.phtml +24 −0 Original line number Diff line number Diff line Loading @@ -301,6 +301,25 @@ </article> </script> <script type="text/x-handlebars" id="numerotation-tpl"> <article class="criteria criteria-numerotation card"> <div class="icon-cal"></div> {{#if error}}<strong class="text-danger"><i class="icon-attention-1"></i> {{error}}</strong>{{/if}} <input type="hidden" name="criteria[]" class="criteria" value="{{criteria}}"/> <small>{{typeLabel}}</small> <select class="select2 form-control val1 changer types" id="filter_numerotation" multiple> <?php foreach( $numerotations as $num ): ?> <option value="<?= $num ?>"><?= $num ?></option> <?php endforeach; ?> </select> <nav> <a href="#" class="delete"> <i class="icon-cancel-outline"></i> </a> </nav> </article> </script> <script type="text/x-handlebars" id="milestones-criteria-tpl"> <article class="criteria criteria-{{type}} card"> <div class="icon-calendar"></div> Loading Loading @@ -794,6 +813,10 @@ datas.label = "Dépenses sur le compte"; dom = $(tplAccount(datas)); } else if(datas.type == 'num' ) { datas.label = "Numérotation"; dom = $(tplNumerotation(datas)); } // accountscode else if(datas.type == 'cb2' ) { datas.label = "Code de compte général"; Loading Loading @@ -1076,6 +1099,7 @@ tplPersons = Handlebars.compile($('#persons-criteria-tpl').html()), tplOrganizations= Handlebars.compile($('#organizations-criteria-tpl').html()), tplMilestone = Handlebars.compile($('#milestones-criteria-tpl').html()), tplNumerotation = Handlebars.compile($('#numerotation-tpl').html()), id = 1; // Loading