Loading module/Oscar/src/Oscar/Controller/ProjectGrantController.php +27 −10 Original line number Diff line number Diff line Loading @@ -1110,31 +1110,27 @@ class ProjectGrantController extends AbstractOscarController 'ap' => "Impliquant la personne", 'sp' => "N'impliquant pas la personne", 'pm' => "Impliquant une de ces personnes", 'ao' => "Impliquant l'organisation", 'so' => "N'impliquant pas l'organisation", 'as' => 'Ayant le statut', 'ss' => 'N\'ayant pas le statut', 'cnt' => "Pays (d'une organisation)", 'af' => 'Ayant comme incidence financière', 'sf' => 'N\'ayant pas comme incidence financière', 'mp' => 'Montant prévu', 'at' => 'est de type', 'st' => 'n\'est pas de type', 'add' => 'Date de début', 'adf' => 'Date de fin', 'adc' => 'Date de création', 'adm' => 'Date de dernière mise à jour', 'ads' => 'Date de signature', 'adp' => 'Date d\'ouverture du PFI dans SIFAC', 'pp' => 'Activités sans projet', // Ajout d'un filtre sur les jalons 'aj' => 'Ayant le jalon' ]; // Correspondance des champs de type date Loading @@ -1157,6 +1153,21 @@ class ProjectGrantController extends AbstractOscarController 'dateOpened' => "Date d'ouverture du PFI dans SIFAC", ]; $milestonesCriterias = [ ]; $jalonsFilters = []; $jalons = $this->getEntityManager()->getRepository(DateType::class)->findAll(); /** @var DateType $jalon */ foreach ($jalons as $jalon) { $jalonsFilters[] = [ 'id' => $jalon->getId(), 'label' => $jalon->getLabel(), 'finishable' => $jalon->isFinishable() ]; } // Trie $sortDirections = [ 'desc' => 'Décroissant', Loading Loading @@ -1256,13 +1267,14 @@ class ProjectGrantController extends AbstractOscarController // Requêtes de base /** @var QueryBuilder $qb */ $qb = $this->getEntityManager()->createQueryBuilder() ->select('c, m1, p1, pr, m2, p2, d1, t1, orga1, orga2, pers1, pers2, dis') ->select('c, m1, p1, pr, m2, p2, d1, t1, orga1, orga2, pers1, pers2, dis, ml') ->from(Activity::class, 'c') ->leftJoin('c.persons', 'm1') ->leftJoin('m1.person', 'pers1') ->leftJoin('c.disciplines', 'dis') ->leftJoin('c.activityType', 't1') ->leftJoin('c.organizations', 'p1') ->leftJoin('c.milestones', 'ml') ->leftJoin('p1.organization', 'orga1') ->leftJoin('c.documents', 'd1') ->leftJoin('c.project', 'pr') Loading Loading @@ -1493,6 +1505,10 @@ class ProjectGrantController extends AbstractOscarController $parameters['countries'] = $value1; } break; case 'aj': $filterIds = $this->getActivityService()->getActivityIdsByJalon($crit['val1']); break; case 'add' : case 'adf' : case 'adm' : Loading Loading @@ -1600,7 +1616,6 @@ class ProjectGrantController extends AbstractOscarController $activities = new UnicaenDoctrinePaginator($qb, $page); } $view = new ViewModel([ 'projectview' => $projectview, 'exportIds' => implode(',', $ids), Loading @@ -1610,6 +1625,7 @@ class ProjectGrantController extends AbstractOscarController 'countries' => $this->getOrganizationService()->getCountriesList(), 'fieldsCSV' => $this->getActivityService()->getFieldsCSV(), 'persons' => $persons, 'filterJalons' => $jalonsFilters, 'activities' => $activities, 'search' => $search, 'filterPersons' => $filterPersons, Loading Loading @@ -1832,6 +1848,7 @@ class ProjectGrantController extends AbstractOscarController 'contracts' => $paginator, 'search' => $search, 'filterStatus' => $filterStatus, 'filterJalons' => $jalons, 'filterType' => $filterType, 'filterYear' => $filterYears, 'sorts' => $sortCriteria, Loading module/Oscar/src/Oscar/Service/ProjectGrantService.php +11 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,17 @@ class ProjectGrantService implements ServiceLocatorAwareInterface, EntityManager } public function getActivityIdsByJalon( $jalonTypeId ){ $q = $this->getActivityRepository()->createQueryBuilder('c') ->select('c.id') ->innerJoin('c.milestones', 'm') ->where('m.type = :jalonId') ->setParameter('jalonId', $jalonTypeId); $activities = $q->getQuery()->getResult(); return array_map('current', $activities); } /** * @param $ids * @param int $page Loading module/Oscar/view/oscar/project-grant/advanced-search.phtml +30 −0 Original line number Diff line number Diff line Loading @@ -138,6 +138,8 @@ </article> </script> <?php /* --------------------------------------------- TEMPLATE des critères des types de convention Loading Loading @@ -183,6 +185,30 @@ </article> </script> <script type="text/x-handlebars" id="milestones-criteria-tpl"> <article class="criteria criteria-{{type}} card"> <div class="icon-calendar"></div> <small>{{typeLabel}}</small> {{#if error}}<strong class="text-danger"><i class="icon-attention-1"></i> {{error}}</strong>{{/if}} <select class="select2 form-control val1 changer types" id="filter_jalon"> <?php foreach( $filterJalons as $jalon ): ?> <option value="<?= $jalon['id'] ?>"><?= $jalon['label'] ?></option> <?php endforeach; ?> </select> <input type="hidden" name="criteria[]" class="criteria" value="{{criteria}}"/> <!-- <strong>Annnée</strong> <small>Optionnel</small> <input type="text" value="{{val2}}"class=" changer val2"> --> <nav> <a href="#" class="delete"> <i class="icon-cancel-outline"></i> </a> </nav> </article> </script> <script type="text/x-handlebars" id="static-criteria-tpl"> <article class="criteria criteria-static card"> <div class="icon-tag"></div> Loading Loading @@ -634,6 +660,9 @@ else if(datas.type == 'pm' ) { dom = $(tplPersons(datas)); } else if(datas.type == 'aj' ){ dom = $(tplMilestone(datas)); } else { console.error("le type", datas.type, "n'est pas pris en charge", datas); return; Loading Loading @@ -760,6 +789,7 @@ tplStatic = Handlebars.compile($('#static-criteria-tpl').html()), tplNumber = Handlebars.compile($('#number-criteria-tpl').html()), tplPersons = Handlebars.compile($('#persons-criteria-tpl').html()), tplMilestone = Handlebars.compile($('#milestones-criteria-tpl').html()), id = 1; // Loading Loading
module/Oscar/src/Oscar/Controller/ProjectGrantController.php +27 −10 Original line number Diff line number Diff line Loading @@ -1110,31 +1110,27 @@ class ProjectGrantController extends AbstractOscarController 'ap' => "Impliquant la personne", 'sp' => "N'impliquant pas la personne", 'pm' => "Impliquant une de ces personnes", 'ao' => "Impliquant l'organisation", 'so' => "N'impliquant pas l'organisation", 'as' => 'Ayant le statut', 'ss' => 'N\'ayant pas le statut', 'cnt' => "Pays (d'une organisation)", 'af' => 'Ayant comme incidence financière', 'sf' => 'N\'ayant pas comme incidence financière', 'mp' => 'Montant prévu', 'at' => 'est de type', 'st' => 'n\'est pas de type', 'add' => 'Date de début', 'adf' => 'Date de fin', 'adc' => 'Date de création', 'adm' => 'Date de dernière mise à jour', 'ads' => 'Date de signature', 'adp' => 'Date d\'ouverture du PFI dans SIFAC', 'pp' => 'Activités sans projet', // Ajout d'un filtre sur les jalons 'aj' => 'Ayant le jalon' ]; // Correspondance des champs de type date Loading @@ -1157,6 +1153,21 @@ class ProjectGrantController extends AbstractOscarController 'dateOpened' => "Date d'ouverture du PFI dans SIFAC", ]; $milestonesCriterias = [ ]; $jalonsFilters = []; $jalons = $this->getEntityManager()->getRepository(DateType::class)->findAll(); /** @var DateType $jalon */ foreach ($jalons as $jalon) { $jalonsFilters[] = [ 'id' => $jalon->getId(), 'label' => $jalon->getLabel(), 'finishable' => $jalon->isFinishable() ]; } // Trie $sortDirections = [ 'desc' => 'Décroissant', Loading Loading @@ -1256,13 +1267,14 @@ class ProjectGrantController extends AbstractOscarController // Requêtes de base /** @var QueryBuilder $qb */ $qb = $this->getEntityManager()->createQueryBuilder() ->select('c, m1, p1, pr, m2, p2, d1, t1, orga1, orga2, pers1, pers2, dis') ->select('c, m1, p1, pr, m2, p2, d1, t1, orga1, orga2, pers1, pers2, dis, ml') ->from(Activity::class, 'c') ->leftJoin('c.persons', 'm1') ->leftJoin('m1.person', 'pers1') ->leftJoin('c.disciplines', 'dis') ->leftJoin('c.activityType', 't1') ->leftJoin('c.organizations', 'p1') ->leftJoin('c.milestones', 'ml') ->leftJoin('p1.organization', 'orga1') ->leftJoin('c.documents', 'd1') ->leftJoin('c.project', 'pr') Loading Loading @@ -1493,6 +1505,10 @@ class ProjectGrantController extends AbstractOscarController $parameters['countries'] = $value1; } break; case 'aj': $filterIds = $this->getActivityService()->getActivityIdsByJalon($crit['val1']); break; case 'add' : case 'adf' : case 'adm' : Loading Loading @@ -1600,7 +1616,6 @@ class ProjectGrantController extends AbstractOscarController $activities = new UnicaenDoctrinePaginator($qb, $page); } $view = new ViewModel([ 'projectview' => $projectview, 'exportIds' => implode(',', $ids), Loading @@ -1610,6 +1625,7 @@ class ProjectGrantController extends AbstractOscarController 'countries' => $this->getOrganizationService()->getCountriesList(), 'fieldsCSV' => $this->getActivityService()->getFieldsCSV(), 'persons' => $persons, 'filterJalons' => $jalonsFilters, 'activities' => $activities, 'search' => $search, 'filterPersons' => $filterPersons, Loading Loading @@ -1832,6 +1848,7 @@ class ProjectGrantController extends AbstractOscarController 'contracts' => $paginator, 'search' => $search, 'filterStatus' => $filterStatus, 'filterJalons' => $jalons, 'filterType' => $filterType, 'filterYear' => $filterYears, 'sorts' => $sortCriteria, Loading
module/Oscar/src/Oscar/Service/ProjectGrantService.php +11 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,17 @@ class ProjectGrantService implements ServiceLocatorAwareInterface, EntityManager } public function getActivityIdsByJalon( $jalonTypeId ){ $q = $this->getActivityRepository()->createQueryBuilder('c') ->select('c.id') ->innerJoin('c.milestones', 'm') ->where('m.type = :jalonId') ->setParameter('jalonId', $jalonTypeId); $activities = $q->getQuery()->getResult(); return array_map('current', $activities); } /** * @param $ids * @param int $page Loading
module/Oscar/view/oscar/project-grant/advanced-search.phtml +30 −0 Original line number Diff line number Diff line Loading @@ -138,6 +138,8 @@ </article> </script> <?php /* --------------------------------------------- TEMPLATE des critères des types de convention Loading Loading @@ -183,6 +185,30 @@ </article> </script> <script type="text/x-handlebars" id="milestones-criteria-tpl"> <article class="criteria criteria-{{type}} card"> <div class="icon-calendar"></div> <small>{{typeLabel}}</small> {{#if error}}<strong class="text-danger"><i class="icon-attention-1"></i> {{error}}</strong>{{/if}} <select class="select2 form-control val1 changer types" id="filter_jalon"> <?php foreach( $filterJalons as $jalon ): ?> <option value="<?= $jalon['id'] ?>"><?= $jalon['label'] ?></option> <?php endforeach; ?> </select> <input type="hidden" name="criteria[]" class="criteria" value="{{criteria}}"/> <!-- <strong>Annnée</strong> <small>Optionnel</small> <input type="text" value="{{val2}}"class=" changer val2"> --> <nav> <a href="#" class="delete"> <i class="icon-cancel-outline"></i> </a> </nav> </article> </script> <script type="text/x-handlebars" id="static-criteria-tpl"> <article class="criteria criteria-static card"> <div class="icon-tag"></div> Loading Loading @@ -634,6 +660,9 @@ else if(datas.type == 'pm' ) { dom = $(tplPersons(datas)); } else if(datas.type == 'aj' ){ dom = $(tplMilestone(datas)); } else { console.error("le type", datas.type, "n'est pas pris en charge", datas); return; Loading Loading @@ -760,6 +789,7 @@ tplStatic = Handlebars.compile($('#static-criteria-tpl').html()), tplNumber = Handlebars.compile($('#number-criteria-tpl').html()), tplPersons = Handlebars.compile($('#persons-criteria-tpl').html()), tplMilestone = Handlebars.compile($('#milestones-criteria-tpl').html()), id = 1; // Loading