<?php | |||||
namespace Lc\CaracoleBundle\Field\Filter\User; | |||||
use EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto; | |||||
use Lc\SovBundle\Field\Filter\AssociationFilter; | |||||
use Lc\SovBundle\Repository\RepositoryQueryInterface; | |||||
use Symfony\Component\Form\Extension\Core\Type\TextType; | |||||
use Symfony\Component\Form\FormBuilderInterface; | |||||
/** | |||||
* @author La clic ! <contact@laclic.fr> | |||||
*/ | |||||
class UserExtraInfoCityFilter extends AssociationFilter | |||||
{ | |||||
public function buildProperty(FormBuilderInterface $builder, FieldDto $fieldDto, $options = array()) | |||||
{ | |||||
$builder->add( | |||||
$this->getFieldPropertySnake($fieldDto->getProperty()), | |||||
TextType::class, | |||||
array( | |||||
'required' => false, | |||||
'attr' => array( | |||||
'class' => ' input-sm', | |||||
'form' => 'filters-form', | |||||
), | |||||
) | |||||
); | |||||
} | |||||
public function applyFilter(RepositoryQueryInterface $repositoryQuery, FieldDto $fieldDto, $filteredValue = null) | |||||
{ | |||||
if ($filteredValue !== null) { | |||||
$repositoryQuery->filterByExtraInfoCity('%' . $filteredValue . '%'); | |||||
} | |||||
} | |||||
} |
<?php | |||||
namespace Lc\CaracoleBundle\Field\Filter\User; | |||||
use EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto; | |||||
use Lc\SovBundle\Field\Filter\AssociationFilter; | |||||
use Lc\SovBundle\Repository\RepositoryQueryInterface; | |||||
use Symfony\Component\Form\Extension\Core\Type\TextType; | |||||
use Symfony\Component\Form\FormBuilderInterface; | |||||
/** | |||||
* @author La clic ! <contact@laclic.fr> | |||||
*/ | |||||
class UserExtraInfoZipFilter extends AssociationFilter | |||||
{ | |||||
public function buildProperty(FormBuilderInterface $builder, FieldDto $fieldDto, $options = array()) | |||||
{ | |||||
$builder->add( | |||||
$this->getFieldPropertySnake($fieldDto->getProperty()), | |||||
TextType::class, | |||||
array( | |||||
'required' => false, | |||||
'attr' => array( | |||||
'class' => ' input-sm', | |||||
'form' => 'filters-form', | |||||
), | |||||
) | |||||
); | |||||
} | |||||
public function applyFilter(RepositoryQueryInterface $repositoryQuery, FieldDto $fieldDto, $filteredValue = null) | |||||
{ | |||||
if ($filteredValue !== null) { | |||||
$repositoryQuery->filterByExtraInfoZip('%' . $filteredValue . '%'); | |||||
} | |||||
} | |||||
} |
parent::__construct($repository, 'productFamily', $paginator); | parent::__construct($repository, 'productFamily', $paginator); | ||||
} | } | ||||
public function resetRelationsJoin(): void | |||||
{ | |||||
$this->isJoinSections = false; | |||||
$this->isJoinProductCategories = false; | |||||
$this->isJoinProductFamilySectionProperties = false; | |||||
$this->isJoinProducts = false; | |||||
$this->isJoinQualityLabels = false; | |||||
} | |||||
public function joinProductFamilySectionProperties(bool $addSelect = true): self | public function joinProductFamilySectionProperties(bool $addSelect = true): self | ||||
{ | { | ||||
if (!$this->isJoinProductFamilySectionProperties) { | if (!$this->isJoinProductFamilySectionProperties) { | ||||
$this->innerJoin('.products', 'products'); | $this->innerJoin('.products', 'products'); | ||||
if ($addSelect) { | if ($addSelect) { | ||||
$this->addSelect('products'); | |||||
// Décommenté sinon doctrine n'hydrate pas correctement les produits liés au ProductFamily (exemple : un seul sur deux) | |||||
// $this->addSelect('products'); | |||||
} | } | ||||
} | } | ||||
return $this; | return $this; |
use MerchantRepositoryQueryTrait; | use MerchantRepositoryQueryTrait; | ||||
protected $isJoinUserMerchants = false; | protected $isJoinUserMerchants = false; | ||||
protected $isJoinAddresses = false; | |||||
public function joinUserMerchants(): self | public function joinUserMerchants(): self | ||||
return $this; | return $this; | ||||
} | } | ||||
public function joinAddresses(): self | |||||
{ | |||||
if (!$this->isJoinAddresses) { | |||||
$this->isJoinAddresses = true; | |||||
return $this | |||||
->innerJoin('.addresses', 'addresses'); | |||||
} | |||||
return $this; | |||||
} | |||||
public function filterMerchantIsActive(): self | public function filterMerchantIsActive(): self | ||||
{ | { | ||||
$this->joinUserMerchants(); | $this->joinUserMerchants(); | ||||
->andWhere('userMerchants.merchant = :merchant') | ->andWhere('userMerchants.merchant = :merchant') | ||||
->setParameter('merchant', $merchant); | ->setParameter('merchant', $merchant); | ||||
} | } | ||||
public function filterByExtraInfoZip(string $zip) | |||||
{ | |||||
$this->joinAddresses(); | |||||
return $this | |||||
->andWhere('.extraInfoZip LIKE :extraInfoZip OR addresses.zip LIKE :extraInfoZip') | |||||
->setParameter('extraInfoZip', $zip); | |||||
} | |||||
public function filterByExtraInfoCity(string $city) | |||||
{ | |||||
$this->joinAddresses(); | |||||
return $this | |||||
->andWhere('.extraInfoCity LIKE :extraInfoCity OR addresses.city LIKE :extraInfoCity') | |||||
->setParameter('extraInfoCity', $city); | |||||
} | |||||
} | } |
{% set user = entity.instance %} | |||||
{% set city = user.extraInfoCity %} | |||||
{% if city is not empty %} | |||||
<span class="badge badge-secondary">{{ city }}</span> | |||||
{% elseif user.addresses is not empty %} | |||||
{% for addresse in user.addresses %} | |||||
<span class="badge badge-secondary">{{ addresse.city }}</span> | |||||
{% endfor %} | |||||
{% else %} | |||||
<span class="badge badge-secondary">Aucun(e)</span> | |||||
{% endif %} |
{% set user = entity.instance %} | |||||
{% set zip = user.extraInfoZip %} | |||||
{% if zip is not empty %} | |||||
<span class="badge badge-secondary">{{ zip }}</span> | |||||
{% elseif user.addresses is not empty %} | |||||
{% for addresse in user.addresses %} | |||||
<span class="badge badge-secondary">{{ addresse.zip }}</span> | |||||
{% endfor %} | |||||
{% else %} | |||||
<span class="badge badge-secondary">Aucun(e)</span> | |||||
{% endif %} |