Resolve "Extraction de la liste des tiers au format CSV"

This commit is contained in:
2025-02-19 11:37:46 +00:00
committed by Julien Fastré
parent 8de63de6d6
commit 08207b656a
6 changed files with 190 additions and 5 deletions

View File

@@ -12,6 +12,7 @@ declare(strict_types=1);
namespace Chill\ThirdPartyBundle\Repository;
use Chill\ThirdPartyBundle\Entity\ThirdParty;
use Doctrine\DBAL\Connection;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query;
@@ -22,11 +23,63 @@ class ThirdPartyRepository implements ObjectRepository
{
private readonly EntityRepository $repository;
public function __construct(EntityManagerInterface $em)
public function __construct(EntityManagerInterface $em, private readonly Connection $connection)
{
$this->repository = $em->getRepository(ThirdParty::class);
}
public function findThirdpartiesWithContacts(string $lang): iterable
{
$sql = "
SELECT
parent.id AS Id,
CASE
WHEN parent.kind = 'company' THEN 'Personne morale'
ELSE 'Personne physique'
END AS kind,
parent_civility.name->>? AS civility,
parent.firstname AS firstname,
parent.name AS name,
parent.profession AS profession,
parent.telephone AS telephone,
parent.email AS email,
CONCAT_WS(' ', parent_address.street, parent_address.streetnumber, parent_postal.code, parent_postal.label) AS address,
parent.comment AS comment,
parent.parent_id AS parent,
parent.name_company AS name_company,
parent.acronym AS acronym,
CASE WHEN parent.active THEN 'X' ELSE '' END AS active,
-- Contact (child third-party) details
contact.id AS contact_id,
contact.name AS contact_name,
contact.firstname AS contact_firstname,
contact.telephone AS contact_phone,
contact.email AS contact_email,
contact.profession AS contact_profession,
CONCAT_WS(' ', contact_address.street, contact_address.streetnumber, contact_postal.code, contact_postal.label) AS contact_address
FROM chill_3party.third_party parent
LEFT JOIN chill_main_civility parent_civility ON parent.civility_id = parent_civility.id
LEFT JOIN chill_main_address parent_address ON parent.address_id = parent_address.id
LEFT JOIN chill_main_postal_code parent_postal ON parent_address.postcode_id = parent_postal.id
-- Join contacts (child third parties)
LEFT JOIN chill_3party.third_party contact ON contact.parent_id = parent.id
LEFT JOIN chill_main_address contact_address ON contact.address_id = contact_address.id
LEFT JOIN chill_main_postal_code contact_postal ON contact_address.postcode_id = contact_postal.id
-- Exclude contacts from appearing as standalone rows
WHERE parent.parent_id IS NULL
-- Sorting order
ORDER BY parent.name ASC, parent.name_company ASC, parent.id ASC,
contact.name ASC, contact.firstname ASC, contact.id ASC
";
return $this->connection->iterateAssociative($sql, [$lang]);
}
/**
* count amongst parties associated to $centers, with $terms parameters.
*/