Commit c896942f authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Annuaire des thèses : nouveau filtre de recherche 'Année de financement'.

parent d5fb1af7
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -6,7 +6,8 @@ Journal des modifications
- [FIX] Signature de méthode setObject() modifiée en PHP8 dans Doctrine\Laminas\Hydrator\Strategy\AbstractCollectionStrategy.
- [FIX] Page de couverture : utilisation de mb_strtoupper pour mettre les noms en majuscules même si elles sont accentuées.
- [FIX] Rapports CSI : les filtres de recherche Etablissement, ED et UR ne tenaient pas compte des substitutions de structures.
- Mise en place d'une zone de dépot du pv de soutrenance sur la page de présoutenance
- Annuaire des thèses : nouveau filtre de recherche 'Année de financement'.
- Mise en place d'une zone de dépot du pv de soutenance sur la page de présoutenance
- Rapport d'activité : implémentation pour les rapports de fin de contrat du même circuit de validation/avis que les annuels.
- Affichage du nom complet d'un individu : choc de simplification en supprimant 2 options d'affichage dans le formatteur.
- Rapport activité : augmentation à 10 min du timeout CSRF dans le formulaire de création/modification.
+5 −0
Original line number Diff line number Diff line
@@ -52,6 +52,11 @@ abstract class SearchFilter implements SearchFilterInterface
     */
    protected ?string $whereField = null;

    /**
     * Indique si ce filtre doit impacter le query builder ou non.
     */
    protected bool $applyToQueryBuilder = true;

    /**
     * Constructor.
     *
+32 −0
Original line number Diff line number Diff line
<?php

namespace Application\Search\Financement;

use Application\Search\Filter\SelectSearchFilter;
use Doctrine\ORM\QueryBuilder;

class AnneeFinancementSearchFilter extends SelectSearchFilter
{
    const NAME = 'financementAnnee';

    static public function newInstance(): self
    {
        return new self(
            "Année financ.",
            self::NAME
        );
    }

    public function applyToQueryBuilder(QueryBuilder $qb): void
    {
        $alias = 'these'; // todo: rendre paramétrable

        $filterValue = $this->getValue();

        $qb
            ->join("$alias.financements", $aliasFinanc = uniqid('financ_'))
            ->andWhere("$aliasFinanc.annee = :anneeFinanc")
            ->andWhere("$aliasFinanc.histoDestruction is null")
            ->setParameter('anneeFinanc', $filterValue);
    }
}
 No newline at end of file
+21 −0
Original line number Diff line number Diff line
<?php

namespace Application\Search\Financement;

trait AnneeFinancementSearchFilterAwareTrait
{
    protected ?AnneeFinancementSearchFilter $anneeFinancementSearchFilter = null;

    public function getAnneeFinancementSearchFilter(): AnneeFinancementSearchFilter
    {
        if ($this->anneeFinancementSearchFilter === null) {
            $this->anneeFinancementSearchFilter = AnneeFinancementSearchFilter::newInstance();
        }
        return $this->anneeFinancementSearchFilter;
    }

    public function setAnneeFinancementSearchFilter(AnneeFinancementSearchFilter $anneeFinancementSearchFilter): void
    {
        $this->anneeFinancementSearchFilter = $anneeFinancementSearchFilter;
    }
}
 No newline at end of file
+22 −13
Original line number Diff line number Diff line
@@ -9,32 +9,27 @@ class OrigineFinancementSearchFilter extends SelectSearchFilter
{
    const NAME = 'financement';

    private ?AnneeFinancementSearchFilter $anneeFinancementSearchFilter = null;

    /**
     * @inheritDoc
     * Spécifie le filtre "année de financement" dont on doit utiliser la valeur.
     */
    protected function __construct(string $label, string $name, array $attributes = [], $defaultValue = null)
    public function setAnneeFinancementSearchFilter(?AnneeFinancementSearchFilter $anneeFinancementSearchFilter): self
    {
        parent::__construct($label, $name, $attributes, $defaultValue);
        $this->anneeFinancementSearchFilter = $anneeFinancementSearchFilter;
        return $this;
    }

    /**
     * @return self
     */
    static public function newInstance(): self
    {
        $instance = new self(
        return new self(
            "Orig. financ.",
            self::NAME,
            ['liveSearch' => true]
        );

        return $instance;
    }

    /**
     * @param QueryBuilder $qb
     */
    public function applyToQueryBuilder(QueryBuilder $qb)
    public function applyToQueryBuilder(QueryBuilder $qb): void
    {
        $alias = 'these'; // todo: rendre paramétrable

@@ -43,6 +38,7 @@ class OrigineFinancementSearchFilter extends SelectSearchFilter
        $qb
            ->leftJoin("$alias.financements", 'fin')
            ->leftJoin('fin.origineFinancement', 'orig')
            ->andWhere("fin.histoDestruction is null")
        ;
        if ($filterValue === 'NULL') {
            $qb
@@ -52,5 +48,18 @@ class OrigineFinancementSearchFilter extends SelectSearchFilter
                ->andWhere('orig.code = :origine')
                ->setParameter('origine', $filterValue);
        }

        //
        // Prise en compte du filtre "annee de financement" éventuel.
        //
        if ($this->anneeFinancementSearchFilter !== null) {
            if ($this->anneeFinancementSearchFilter->canApplyToQueryBuilder()) {
                $qb
                    ->andWhere('fin.annee = :anneeFinanc')
                    ->setParameter('anneeFinanc', $this->anneeFinancementSearchFilter->getValue());
                // le filtre devient redondant
                $this->anneeFinancementSearchFilter->setValue(null);
            }
        }
    }
}
 No newline at end of file
Loading