Browse Source

Merge branch 'develop' of https://forge.laclic.fr/Laclic/CaracoleBundle into develop

packProduct
Fabien Normand 2 years ago
parent
commit
ec51ce2dc2
6 changed files with 139 additions and 1 deletions
  1. +38
    -0
      Field/Filter/User/UserExtraInfoCityFilter.php
  2. +38
    -0
      Field/Filter/User/UserExtraInfoZipFilter.php
  3. +11
    -1
      Repository/Product/ProductFamilyRepositoryQuery.php
  4. +30
    -0
      Repository/User/UserRepositoryQuery.php
  5. +11
    -0
      Resources/views/admin/user/field/extra_infos_city.html.twig
  6. +11
    -0
      Resources/views/admin/user/field/extra_infos_zip.html.twig

+ 38
- 0
Field/Filter/User/UserExtraInfoCityFilter.php View File

<?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 . '%');
}
}

}

+ 38
- 0
Field/Filter/User/UserExtraInfoZipFilter.php View File

<?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 . '%');
}
}

}

+ 11
- 1
Repository/Product/ProductFamilyRepositoryQuery.php View File

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;

+ 30
- 0
Repository/User/UserRepositoryQuery.php View File

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);
}
} }

+ 11
- 0
Resources/views/admin/user/field/extra_infos_city.html.twig View File

{% 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 %}

+ 11
- 0
Resources/views/admin/user/field/extra_infos_zip.html.twig View File

{% 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 %}

Loading…
Cancel
Save