Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 0 additions & 12 deletions src/Dto/SignalementAffectationListView.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@ public function __construct(
private readonly ?string $referenceInjonction = null,
private readonly ?\DateTimeImmutable $createdAt = null,
private readonly ?SignalementStatus $statut = null,
private readonly ?string $score = null,
private readonly ?bool $isNotOccupant = null,
private readonly ?string $nomOccupant = null,
private readonly ?string $prenomOccupant = null,
private readonly ?string $adresseOccupant = null,
Expand Down Expand Up @@ -87,16 +85,6 @@ public function getStatut(): ?SignalementStatus
return $this->statut;
}

public function getScore(): ?string
{
return $this->score;
}

public function getIsNotOccupant(): ?bool
{
return $this->isNotOccupant;
}

public function getNomOccupant(): ?string
{
return $this->nomOccupant;
Expand Down
2 changes: 0 additions & 2 deletions src/Factory/SignalementAffectationListViewFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,6 @@ public function createInstanceFrom(User $user, array $data): SignalementAffectat
referenceInjonction: $data['referenceInjonction'],
createdAt: $data['createdAt'],
statut: $status,
score: $data['score'],
isNotOccupant: $data['isNotOccupant'],
nomOccupant: $data['nomOccupant'],
prenomOccupant: $data['prenomOccupant'],
adresseOccupant: $data['adresseOccupant'],
Expand Down
28 changes: 25 additions & 3 deletions src/Factory/SignalementExportFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,33 @@ class SignalementExportFactory
*/
public function createInstanceFrom(User $user, array $data): SignalementExport
{
// on s'assure que les clés attendues sont présentes dans le tableau de données pour éviter les erreurs d'accès aux clés manquantes.
$data += array_fill_keys([
'createdAt', 'modifiedAt', 'closedAt', 'motifCloture', 'profileDeclarant',
'profileOccupant', 'statut', 'geoloc', 'interventionScheduledAt', 'interventionStatus',
'interventionOccupantPresent', 'typeCompositionLogement', 'nbEnfantsM6',
'nbEnfantsP6', 'proprioAvertiAt', 'informationProcedure', 'autresOccupantsDesordre',
'reference', 'details', 'nomOccupant', 'prenomOccupant', 'telOccupant',
'telOccupantBis', 'mailOccupant', 'adresseOccupant', 'cpOccupant',
'villeOccupant', 'inseeOccupant', 'epciNom', 'etageOccupant',
'escalierOccupant', 'numAppartOccupant', 'adresseAutreOccupant',
'listDesordreCategories', 'oldSituations', 'listDesordreCriteres', 'oldCriteres',
'score', 'debutDesordres', 'etiquettes', 'photosName', 'documentsName',
'nomProprio', 'prenomProprio', 'denominationProprio', 'adresseProprio',
'codePostalProprio', 'villeProprio', 'telProprio', 'telProprioSecondaire',
'mailProprio', 'isProprioAverti', 'nbOccupantsLogement', 'autreSituationVulnerabilite',
'isAllocataire', 'numAllocataire', 'natureLogement', 'superficie',
'isLogementSocial', 'isPreavisDepart', 'isRelogement', 'isNotOccupant',
'nomDeclarant', 'matriculeDeclarant', 'mailDeclarant', 'structureDeclarant',
'lienDeclarantOccupant', 'interventionNbVisites', 'interventionConcludeProcedure',
'interventionDetails', 'comCloture',
], null);

$createdAt = $data['createdAt'] instanceof \DateTimeImmutable
? $data['createdAt']->format(self::DATE_FORMAT)
: null;

$modifiedAt = $data['modifiedAt'] instanceof \DateTimeImmutable
$modifiedAt = $data['modifiedAt'] && $data['modifiedAt'] instanceof \DateTimeImmutable
? $data['modifiedAt']->format(self::DATE_FORMAT)
: null;

Expand Down Expand Up @@ -119,8 +141,8 @@ public function createInstanceFrom(User $user, array $data): SignalementExport
score: $data['score'],
debutDesordres: $this->mapData($data, 'debutDesordres'),
etiquettes: $data['etiquettes'] ?? null,
photos: '-',
documents: '-',
photos: $data['photosName'] ?? self::NON,
documents: $data['documentsName'] ?? self::NON,
nomProprio: $data['nomProprio'] ?? '-',
prenomProprio: $data['prenomProprio'] ?? '-',
denominationProprio: $data['denominationProprio'] ?? '-',
Expand Down
30 changes: 23 additions & 7 deletions src/Manager/SignalementManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
use App\Repository\DesordrePrecisionRepository;
use App\Repository\PartnerRepository;
use App\Repository\Query\SignalementList\ExportIterableQuery;
use App\Repository\Query\SignalementList\ListPaginatorQuery;
use App\Repository\Query\SignalementList\QueryBuilderFactory;
use App\Service\Gouv\Ban\Response\Address;
use App\Service\Signalement\CriticiteCalculator;
use App\Service\Signalement\DesordreTraitement\DesordreCompositionLogementLoader;
Expand Down Expand Up @@ -78,7 +78,7 @@ public function __construct(
private readonly SignalementAddressUpdater $signalementAddressUpdater,
private readonly ZipcodeProvider $zipcodeProvider,
private readonly ExportIterableQuery $exportIterableQuery,
private readonly ListPaginatorQuery $listPaginatorQuery,
private readonly QueryBuilderFactory $queryBuilderFactory,
#[Autowire(service: 'html_sanitizer.sanitizer.app.message_sanitizer')]
private readonly HtmlSanitizerInterface $htmlSanitizer,
#[Autowire(env: 'FEATURE_SCHS_DISPATCH_SISH_ENABLE')]
Expand Down Expand Up @@ -909,12 +909,27 @@ public function findSignalementAffectationList(User $user, array $options, bool
$maxListPagination = $options['maxItemsPerPage'] ?? SignalementAffectationListView::MAX_LIST_PAGINATION;
$signalementAffectationList = [];

$paginator = $this->listPaginatorQuery->paginate($user, $options);
$total = $paginator->count();
$total = $this->queryBuilderFactory->create($user, $options, false)->select('COUNT(DISTINCT s.id)')->resetDQLPart('groupBy')->getQuery()->getSingleScalarResult();
if ($count) {
return $total;
return (int) $total;
}
$maxResult = $options['maxItemsPerPage'] ?? SignalementAffectationListView::MAX_LIST_PAGINATION;
$page = \array_key_exists('page', $options) ? (int) $options['page'] : 1;
$firstResult = (max($page, 1) - 1) * $maxResult;

// Passe 1 : récupérer uniquement les IDs paginés (requête légère)
$idsResult = $this->queryBuilderFactory->create($user, $options, false)->setFirstResult($firstResult)->setMaxResults($maxResult)->getQuery()->getArrayResult();
$ids = array_column($idsResult, 'id');

if (!empty($ids)) {
// Passe 2 : charger les données complètes uniquement pour ces 25 IDs
$dataResultList = $this->queryBuilderFactory->createForIds($ids, $options)->getQuery()->getResult();
// Réordonner selon l'ordre de la passe 1
$dataById = array_column($dataResultList, null, 'id');
$dataResultList = array_filter(array_map(static fn ($id) => $dataById[$id] ?? null, $ids));
} else {
$dataResultList = [];
}
$dataResultList = $paginator->getQuery()->getResult();
/** @var User $user */
$user = $this->security->getUser();
foreach ($dataResultList as $dataResultItem) {
Expand Down Expand Up @@ -944,8 +959,9 @@ public function findSignalementAffectationList(User $user, array $options, bool
public function findSignalementAffectationIterable(
User $user,
?array $options = null,
array $selectedColumns = [],
): \Generator {
foreach ($this->exportIterableQuery->stream($user, $options) as $row) {
foreach ($this->exportIterableQuery->stream($user, $options ?? [], $selectedColumns) as $row) {
yield $this->signalementExportFactory->createInstanceFrom(
$user,
$row,
Expand Down
Loading
Loading