ImpotRepository.php 2,12 ko
Newer Older
<?php

namespace App\Repository;

use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use App\Entity\Impot;

class ImpotRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Impot::class);
    }

    public function findAllYears(){
        $AllYears = $this->createQueryBuilder('i')
            ->select('i.year')
            ->groupBy('i.year')
            ->getQuery()
            ->getResult();
        return $AllYears;
    }

    public function findAllTypes(){
        $AllTypes = $this->createQueryBuilder('i')
                    ->select('i.type')
                    ->groupBy('i.type')
                    ->getQuery()
                    ->getResult();
        return $AllTypes;
    }


    public function findVolumeByTypeAndYear(string $type, int $year)
    {
        // Volume par région
        $regionsData = $this->createQueryBuilder('i')
            ->select('i.region, SUM(i.volumeCollected) as volume')
            ->where('i.type = :type')
            ->andWhere('i.year = :year')
            ->setParameter('type', $type)
            ->setParameter('year', $year)
            ->groupBy('i.region')
            ->getQuery()
            ->getResult();

        // Volume total de toutes les régions
        $totalVolume = $this->createQueryBuilder('i')
            ->select('SUM(i.volumeCollected) as totalVolume')
            ->where('i.type = :type')
            ->andWhere('i.year = :year')
            ->setParameter('type', $type)
            ->setParameter('year', $year)
            ->getQuery()
            ->getSingleScalarResult();

        // Ajoute le pourcentage à la réponse chaque région
        foreach ($regionsData as $regionData) {
            $regionData['percentage'] = ($regionData['volume'] / $totalVolume) * 100;
            $result[] = [
                'region' => $regionData['region'],
                'percentage' => $regionData['percentage']
            ];
        }

        // 4. Retourner les résultats avec les pourcentages
        return $result;
    }

}