Commit b6841261 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

UP : Le critère "Recherche par type de document" permet maintenant

 - Laissé vide (affiche les activités avec au moins 1 document
Option inversé
 - Filtre les activités qui n'ont pas le type de document renseigné
 - (Vide) Filtre les activités SANS document

Le filtre peut être combiné, ex : Filtrer les activités ayant un contrat signé, mais pas d'annexe financière
parent 3be671c6
Loading
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -2816,9 +2816,17 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
                        break;

                    case 'td':
                        if( $crit['val1'] == "null" || !$crit['val1'] ){
                            $value1 = [];
                        } else {
                            $value1 = $crit['val1'] = explode(',', $params[1]);
                        }

                        try {
                            $ids = $this->getActivityService()->getActivitiesIdsWithTypeDocument($value1);
                            $reverse = $value2 == "1";

                            $ids = $this->getActivityService()
                                ->getActivitiesIdsWithTypeDocument($value1, $reverse);
                        } catch (\Exception $e) {
                            throw new OscarException($e->getMessage());
                        }
+28 −8
Original line number Diff line number Diff line
@@ -93,7 +93,8 @@ class ActivityRepository extends EntityRepository
     * @param array $organizationTypeIds ID des types d'organisation
     * @return array
     */
    public function getIdsWithOrganizationOfCountry( array $countries ): array {
    public function getIdsWithOrganizationOfCountry(array $countries): array
    {
        $queryBuilder = $this->baseQueryWithOrganizationOf()
            ->where('orga1.country IN (:countries) OR orga2.country IN (:countries)');

@@ -111,15 +112,34 @@ class ActivityRepository extends EntityRepository
     * @param array $idsTypeDocument
     * @return array
     */
    public function getActivitiesIdsWithTypeDocument(array $idsTypeDocument): array
    public function getActivitiesIdsWithTypeDocument(array $typeDocumentIds, bool $reverse = false): array
    {
        $queryBuilder = $this->createQueryBuilder('a')
            ->select('DISTINCT a.id')
            ->innerJoin('a.documents', 'd')
            ->where('d.typeDocument IN(:typesDocument)')
            ->setParameter('typesDocument', $idsTypeDocument);
            ->innerJoin('a.documents', 'd');

        return array_map('current', $queryBuilder->getQuery()->getArrayResult());
        $parameters = [];

        if (count($typeDocumentIds) > 0) {
            $queryBuilder->where('d.typeDocument IN(:typesDocument)');
            $parameters['typesDocument'] = $typeDocumentIds;
            $queryBuilder->setParameter('typesDocument', $typeDocumentIds);
        }

        $ids = array_map('current', $queryBuilder->getQuery()->getArrayResult());

        if ($reverse) {
            $queryBuilder = $this->createQueryBuilder('a')
                ->select('DISTINCT a.id');
            if (count($ids) > 0) {
                $queryBuilder->where('a.id NOT IN(:ids)')
                    ->setParameter('ids', $ids);
            }

            $ids = array_map('current', $queryBuilder->getQuery()->getArrayResult());
        }

        return $ids;
    }

    public function getActivitiesWithNumber(string $key): array
+2 −2
Original line number Diff line number Diff line
@@ -1202,8 +1202,8 @@ class ProjectGrantService implements UseGearmanJobLauncherService, UseOscarConfi
        ];
    }

    public function getActivitiesIdsWithTypeDocument( array $idsTypeDocument ):array {
        return $this->getActivityRepository()->getActivitiesIdsWithTypeDocument($idsTypeDocument);
    public function getActivitiesIdsWithTypeDocument( array $idsTypeDocument, bool $reverse = false ):array {
        return $this->getActivityRepository()->getActivitiesIdsWithTypeDocument($idsTypeDocument, $reverse);
    }

    public function getActivitiesWithNumerotation( array $numerotations ) :array
+20 −2
Original line number Diff line number Diff line
@@ -287,12 +287,21 @@
            <div class="icon-docs"></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>
            <small>
                <strong></p>Ayant au moins un des types de document</strong>
                (Laisser vide pour n'importe quel type de document)
            </small>
            <select class="select2 form-control val1 changer types" id="filter_typeorga" multiple>
                <?php foreach( $documentsTypes as $typeDocId=>$typeDoc ): ?>
                <option value="<?= $typeDocId ?>"><?= $typeDoc ?></option>
                <?php endforeach; ?>
            </select>
            <div class="progression val2-options">
                <label for="<?php $uniq = uniqid('doc'); echo $uniq ?>">
                    <input id="<?= $uniq ?>" type="checkbox" value="1" class="val2 changer" />
                    N'ayant pas
                </label>
            </div>
            <nav>
                <a href="#" class="delete">
                    <i class="icon-cancel-outline"></i>
@@ -903,7 +912,7 @@
                        } else {
                            var val2Elem = filter.find('.val2');
                            if( val2Elem ){
                                val2 = val2Elem.val();
                                val2 = val2Elem[0].checked ? "1" : "0";
                            }

                        }
@@ -1009,6 +1018,15 @@
                        dom.find('.val2').val(datas.val2);
                    }

                    if(datas.type == 'td' && datas.val2 != null ){
                        if( datas.val2 == "1" ){
                            console.log('VAL2', datas.val2);
                            console.log('>>>>', dom.find('.val2'), dom.find('.val2').checked);
                            dom.find('.val2')[0].checked = true;
                        }
                    }


                    if(datas.type == 'aj' && datas.val2 != null ){

                        var option = dom.find('option[value="'+ datas.val1 +'"]');