Commit 1f2fdc37 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

UP : Ajout d'un filtre sur l'usage des numérotations personnalisées

parent 9bcfb6b7
Loading
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -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(
@@ -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
@@ -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;
@@ -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;
@@ -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(),
+36 −2
Original line number Diff line number Diff line
@@ -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());
    }
@@ -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')
+6 −0
Original line number Diff line number Diff line
@@ -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;
     *
+24 −0
Original line number Diff line number Diff line
@@ -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>
@@ -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";
@@ -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;

                //