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

Filtre sur les comptes (v1)

parent 36ce4c2b
Loading
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -202,7 +202,6 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
        $typesOrganization = $this->getOrganizationService()
            ->getOrganizationTypesSelect();


        return [
            'filters' => $this->getProjectGrantService()->getActivitiesSearchCriteria(),
            'sorts' => $this->getProjectGrantService()->getActivitiesSearchSort(),
@@ -2413,7 +2412,9 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
                'ds' => 'Ayant pour discipline',

                // Ajout d'un filtre sur les jalons
                'aj' => 'Ayant le jalon'
                'aj' => 'Ayant le jalon',

                'cb' => 'Impliquant le compte'
            ];

            // Correspondance des champs de type date
@@ -2757,6 +2758,16 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
                            $crit['error'] = "Impossible de filtrer sur la personne";
                        }
                        break;
                    case 'cb':
                        // Récupération de l'organisation
                        $value1 = $crit['val1'] = explode(',', $params[1]);
                        try {
                            $codeAccounts = $value1;
                            $ids = $this->getSpentService()->getIdsActivitiesForAccounts($codeAccounts);
                        } catch (\Exception $e) {
                            die("SOUCIS");
                        }
                        break;

                    case 'ao' :
                    case 'so' :
@@ -2951,7 +2962,7 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
                        break;
                }
                $criterias[] = $crit;
                if ($type == 'ap' || $type == 'ao' || $type == 'pm' || $type == 'om' || $type == 'fdt') {
                if ($type == 'ap' || $type == 'ao' || $type == 'pm' || $type == 'om' || $type == 'fdt' || $type == 'cb') {
                    if ($filterIds === null) {
                        $filterIds = $ids;
                    } else {
@@ -3064,6 +3075,7 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
                    'typeorgas' => $this->getOrganizationService()->getOrganizationTypesSelect(),
                    'countries' => $this->getOrganizationService()->getCountriesList(),
                    'fieldsCSV' => $this->getActivityService()->getFieldsCSV(),
                    'accounts' => $this->getSpentService()->getUsedAccount(),
                    'persons' => $persons,
                    'filterJalons' => $jalonsFilters,
                    'activities' => $activities,
+10 −0
Original line number Diff line number Diff line
@@ -28,6 +28,16 @@ class ActivityRepository extends EntityRepository
        return array_map('current', $queryBuilder->getQuery()->getArrayResult());
    }

    public function getActivitiesIdsByPfis( array $pfis ) :array
    {
        $queryBuilder = $this->createQueryBuilder('a')
            ->select('a.id')
            ->where('a.codeEOTP IN(:pfis)')
            ->setParameter('pfis', $pfis)
        ;
        return array_map('current', $queryBuilder->getQuery()->getArrayResult());
    }

    /**
     * @param null $limitEnd
     * @param bool $statusActive
+13 −0
Original line number Diff line number Diff line
@@ -92,4 +92,17 @@ class SpentTypeGroupRepository extends EntityRepository{

        return array_map('current', $qb->getQuery()->getArrayResult());
    }

    public function getPfiForCodesAccounts( $codes )
    {

        $qb = $this->getEntityManager()->getRepository(SpentLine::class)
            ->createQueryBuilder('g')
            ->select('DISTINCT g.pfi')
            ->where('g.compteGeneral IN(:codes)')
            ->setParameter('codes', $codes)
        ;

        return array_map('current', $qb->getQuery()->getArrayResult());
    }
}
 No newline at end of file
+15 −15
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ use Oscar\Entity\ActivityNotification;
use Oscar\Entity\ActivityOrganization;
use Oscar\Entity\ActivityPayment;
use Oscar\Entity\ActivityPerson;
use Oscar\Entity\ActivityRepository;
use Oscar\Entity\Authentification;
use Oscar\Entity\EstimatedSpentLine;
use Oscar\Entity\Notification;
@@ -625,6 +626,18 @@ class SpentService implements UseLoggerService, UseOscarConfigurationService, Us
        return $this->getParentWithAnnexe($plan, $codeParent);
    }

    public function getIdsActivitiesForAccounts( array $codesAccounts ) :array
    {
        //$codesAccounts = array_map(function($c){ return '00'.$c; }, $codesAccounts);

        $pfis = $this->getSpentTypeRepository()->getPfiForCodesAccounts($codesAccounts);

        /** @var ActivityRepository $activityRepository */
        $activityRepository = $this->getEntityManager()->getRepository(Activity::class);
        $idsActivities = $activityRepository->getActivitiesIdsByPfis($pfis);
        return $idsActivities;
    }

    /**
     * Retourne les informations pour un compte à partir de son code : 00XXXXXXXXXX
     * Pour déterminer l'annexe budgétaire, le code cherche dans le compte, puis
@@ -635,36 +648,21 @@ class SpentService implements UseLoggerService, UseOscarConfigurationService, Us
     */
    public function getCompte($code)
    {
        $dump = function($foo){};
        $echo = function($foo){};
        $end = function(){};

        if( false ){
            $dump = function($foo){ var_dump($foo); };
            $echo = function($foo){ echo "$foo"; };
            $end = function(){ die('FIN'); };
        }

        static $cacheCompte;

        if ($cacheCompte == null) {
            $cacheCompte = [];
        }


        if (!array_key_exists($code, $cacheCompte)) {
            $echo("Construction du compte $code");
            $plan = $this->getPlanComptable();
            $find = null;
            $reduce = strval($code);
            $out = [];
            for ($i = strlen($reduce) - 1; $find == null && $i > 0; $i--) {
                if( $reduce[$i] == '0' ) continue;

                if (array_key_exists($reduce, $plan)) {

                    $parent = $this->getParentWithAnnexe($plan, $plan[$reduce]->getCode());
                    $dump($plan[$reduce]);
                    $out['id'] = $plan[$reduce]->getId();
                    $out['label'] = $plan[$reduce]->getLabel();
                    $out['code'] = $plan[$reduce]->getCode();
@@ -779,6 +777,8 @@ class SpentService implements UseLoggerService, UseOscarConfigurationService, Us
        return $accountInfos;
    }



    /**
     * Retourne les données de synthèse des dépenses pour un PFI donné sous la forme d'un tableau :
     * [
+25 −0
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@
            <nav>
                <a href="#" class="delete">
                    <i class="icon-cancel-outline"></i>
                    <i class="icon-cancel-outline"></i>
                </a>
            </nav>
        </article>
@@ -228,6 +229,25 @@
        </article>
    </script>

    <script type="text/x-handlebars" id="accounts-tpl">
        <article class="criteria criteria-account card">
            <div class="icon-bank"></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_account" multiple>
                <?php foreach( $accounts as $account ): ?>
                <option value="<?= $account["codeFull"] ?>"><?= $account["codeFull"] ?> - <?= $account["label"] ?></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="typeorga-tpl">
        <article class="criteria criteria-typeorga card">
            <div class="icon-tag"></div>
@@ -734,6 +754,10 @@
                            : "N'a pas le status";
                        dom = $(tplStatus(datas));
                    }
                    else if(datas.type == 'cb' ) {
                        datas.label = "Dépenses sur le compte";
                        dom = $(tplAccount(datas));
                    }
                    else if(datas.type == 'cnt' ) {
                        datas.label = "Pays d'une des organisations";
                        dom = $(tplCountry(datas));
@@ -990,6 +1014,7 @@

                // Gabarits pour les critères
                var tpl = Handlebars.compile($('#criteria-tpl').html()),
                    tplAccount = Handlebars.compile($('#accounts-tpl').html()),
                    tplDate = Handlebars.compile($('#date-criteria-tpl').html()),
                    tplStatus = Handlebars.compile($('#status-criteria-tpl').html()),
                    tplCountry = Handlebars.compile($('#country-tpl').html()),
Loading