FEATURE [genericDoc][calendar] use metadatas

This commit is contained in:
Julie Lenaerts 2023-05-30 17:50:32 +02:00
parent d09e5d33db
commit bd074ebade

View File

@ -21,6 +21,7 @@ use Chill\DocStoreBundle\GenericDoc\GenericDocForAccompanyingPeriodProviderInter
use Chill\PersonBundle\Entity\AccompanyingPeriod; use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Doctrine\DBAL\Types\Types; use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Mapping\MappingException;
use Symfony\Component\Security\Core\Security; use Symfony\Component\Security\Core\Security;
final class AccompanyingPeriodCalendarGenericDocProvider implements GenericDocForAccompanyingPeriodProviderInterface final class AccompanyingPeriodCalendarGenericDocProvider implements GenericDocForAccompanyingPeriodProviderInterface
@ -39,6 +40,9 @@ final class AccompanyingPeriodCalendarGenericDocProvider implements GenericDocFo
$this->em = $entityManager; $this->em = $entityManager;
} }
/**
* @throws MappingException
*/
public function buildFetchQueryForAccompanyingPeriod(AccompanyingPeriod $accompanyingPeriod, ?\DateTimeImmutable $startDate = null, ?\DateTimeImmutable $endDate = null, ?string $content = null, ?string $origin = null): FetchQueryInterface public function buildFetchQueryForAccompanyingPeriod(AccompanyingPeriod $accompanyingPeriod, ?\DateTimeImmutable $startDate = null, ?\DateTimeImmutable $endDate = null, ?string $content = null, ?string $origin = null): FetchQueryInterface
{ {
$classMetadata = $this->em->getClassMetadata(CalendarDoc::class); $classMetadata = $this->em->getClassMetadata(CalendarDoc::class);
@ -52,15 +56,23 @@ final class AccompanyingPeriodCalendarGenericDocProvider implements GenericDocFo
$classMetadata->getSchemaName().'.'.$classMetadata->getTableName().' AS cd' $classMetadata->getSchemaName().'.'.$classMetadata->getTableName().' AS cd'
); );
$query->addJoinClause( $query->addJoinClause(
'JOIN chill_doc.stored_object doc_store ON doc_store.id = cd.storedobject_id' sprintf('JOIN %s doc_store ON doc_store.%s = cd.%s',
); $storedObjectMetadata->getSchemaName().'.'.$storedObjectMetadata->getTableName(),
$storedObjectMetadata->getColumnName('id'),
$classMetadata->getSingleAssociationJoinColumnName('storedObject')
));
$query->addJoinClause( $query->addJoinClause(
'JOIN chill_calendar.calendar calendar ON calendar.id = cd.calendar_id' sprintf('JOIN %s calendar ON calendar.%s = cd.%s',
$calendarMetadata->getSchemaName().'.'.$calendarMetadata->getTableName(),
$calendarMetadata->getColumnName('id'),
$classMetadata->getSingleAssociationJoinColumnName('calendar')
)
); );
$query->addWhereClause( $query->addWhereClause(
'calendar.accompanyingperiod_id = ?', sprintf('calendar.%s = ?',
$calendarMetadata->getAssociationMapping('accompanyingPeriod')['joinColumns'][0]['name']),
[$accompanyingPeriod->getId()], [$accompanyingPeriod->getId()],
[Types::INTEGER] [Types::INTEGER]
); );
@ -83,7 +95,7 @@ final class AccompanyingPeriodCalendarGenericDocProvider implements GenericDocFo
if (null !== $content) { if (null !== $content) {
$query->addWhereClause( $query->addWhereClause(
'doc_store.title ilike ?', sprintf('doc_store.%s ilike ?', $storedObjectMetadata->getColumnName('title')),
['%' . $content . '%'], ['%' . $content . '%'],
[Types::STRING] [Types::STRING]
); );