Loading module/Oscar/src/Oscar/Controller/ProjectGrantController.php +15 −3 Original line number Diff line number Diff line Loading @@ -202,7 +202,6 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif $typesOrganization = $this->getOrganizationService() ->getOrganizationTypesSelect(); return [ 'filters' => $this->getProjectGrantService()->getActivitiesSearchCriteria(), 'sorts' => $this->getProjectGrantService()->getActivitiesSearchSort(), Loading Loading @@ -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 Loading Loading @@ -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' : Loading Loading @@ -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 { Loading Loading @@ -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, Loading module/Oscar/src/Oscar/Entity/ActivityRepository.php +10 −0 Original line number Diff line number Diff line Loading @@ -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 Loading module/Oscar/src/Oscar/Entity/SpentTypeGroupRepository.php +13 −0 Original line number Diff line number Diff line Loading @@ -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 module/Oscar/src/Oscar/Service/SpentService.php +15 −15 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading @@ -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(); Loading Loading @@ -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 : * [ Loading module/Oscar/view/oscar/project-grant/advanced-search.phtml +25 −0 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ <nav> <a href="#" class="delete"> <i class="icon-cancel-outline"></i> <i class="icon-cancel-outline"></i> </a> </nav> </article> Loading Loading @@ -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> Loading Loading @@ -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)); Loading Loading @@ -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 Loading
module/Oscar/src/Oscar/Controller/ProjectGrantController.php +15 −3 Original line number Diff line number Diff line Loading @@ -202,7 +202,6 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif $typesOrganization = $this->getOrganizationService() ->getOrganizationTypesSelect(); return [ 'filters' => $this->getProjectGrantService()->getActivitiesSearchCriteria(), 'sorts' => $this->getProjectGrantService()->getActivitiesSearchSort(), Loading Loading @@ -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 Loading Loading @@ -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' : Loading Loading @@ -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 { Loading Loading @@ -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, Loading
module/Oscar/src/Oscar/Entity/ActivityRepository.php +10 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
module/Oscar/src/Oscar/Entity/SpentTypeGroupRepository.php +13 −0 Original line number Diff line number Diff line Loading @@ -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
module/Oscar/src/Oscar/Service/SpentService.php +15 −15 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading @@ -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(); Loading Loading @@ -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 : * [ Loading
module/Oscar/view/oscar/project-grant/advanced-search.phtml +25 −0 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ <nav> <a href="#" class="delete"> <i class="icon-cancel-outline"></i> <i class="icon-cancel-outline"></i> </a> </nav> </article> Loading Loading @@ -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> Loading Loading @@ -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)); Loading Loading @@ -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