mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-08-27 18:13:48 +00:00
Resolve "Extraction de la liste des tiers au format CSV"
This commit is contained in:
@@ -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.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user