Browse Source

switch merchant

feature/ticket
Guillaume 3 years ago
parent
commit
7ea54bdbef
8 changed files with 106 additions and 37 deletions
  1. +10
    -0
      Controller/Dashboard/DashboardAdminController.php
  2. +35
    -0
      Controller/Merchant/SwitchMerchantController.php
  3. +22
    -6
      Form/Merchant/SwitchMerchantFormType.php
  4. +5
    -5
      Model/User/UserModel.php
  5. +6
    -0
      Resources/assets/app/switchmerchant/app.switchmerchant.js
  6. +11
    -0
      Resources/assets/app/switchmerchant/switchmerchant.js
  7. +4
    -0
      Resources/config/routes.yaml
  8. +13
    -26
      Twig/TwigExtension.php

+ 10
- 0
Controller/Dashboard/DashboardAdminController.php View File



namespace Lc\CaracoleBundle\Controller\Dashboard; namespace Lc\CaracoleBundle\Controller\Dashboard;


use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use Lc\SovBundle\Controller\Dashboard\DashboardController as SovDashboardController ; use Lc\SovBundle\Controller\Dashboard\DashboardController as SovDashboardController ;


return $crud ; return $crud ;
} }


public function configureAssets(): Assets
{
$assets = parent::configureAssets(); // TODO: Change the autogenerated stub

$assets->addWebpackEncoreEntry('common-switch-merchant') ;

return $assets ;
}

} }

+ 35
- 0
Controller/Merchant/SwitchMerchantController.php View File

<?php

namespace Lc\CaracoleBundle\Controller\Merchant;

use Lc\CaracoleBundle\Form\Merchant\SwitchMerchantFormType;
use Lc\SovBundle\Doctrine\EntityManager;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Security;

class SwitchMerchantController extends AbstractController
{

public function switchMerchant(Request $request, Security $security, EntityManager $em)
{
$user = $security->getUser() ;

if($user) {
$form = $this->createForm(SwitchMerchantFormType::class);
$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {
$merchant = $form->get('merchants')->getData();
$user->setFavoriteMerchant($merchant) ;
$em->update($user) ;
$em->flush() ;

return $this->redirectToRoute('admin_dashboard') ;
}
}
else {

}
}
}

+ 22
- 6
Form/Merchant/SwitchMerchantFormType.php View File

namespace Lc\CaracoleBundle\Form\Merchant; namespace Lc\CaracoleBundle\Form\Merchant;


use Lc\CaracoleBundle\Model\Merchant\MerchantInterface; use Lc\CaracoleBundle\Model\Merchant\MerchantInterface;
use Lc\SovBundle\DataTransformer\FileManagerTypeToDataTransformer;
use Lc\CaracoleBundle\Resolver\MerchantResolver;
use Lc\SovBundle\Doctrine\EntityManager; use Lc\SovBundle\Doctrine\EntityManager;
use Lc\SovBundle\Model\User\UserInterface;
use Lc\SovBundle\Translation\TranslatorAdmin; use Lc\SovBundle\Translation\TranslatorAdmin;
use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;


class SwitchMerchantFormType extends AbstractType class SwitchMerchantFormType extends AbstractType
{ {
protected $em; protected $em;
protected $translatorAdmin; protected $translatorAdmin;
protected $merchantResolver;


public function __construct(EntityManager $em, TranslatorAdmin $translatorAdmin)
public function __construct(EntityManager $em, TranslatorAdmin $translatorAdmin, MerchantResolver $merchantResolver)
{ {
$this->em = $em; $this->em = $em;
$this->translatorAdmin = $translatorAdmin; $this->translatorAdmin = $translatorAdmin;
$this->merchantResolver = $merchantResolver;
} }


public function buildForm(FormBuilderInterface $builder, array $options) public function buildForm(FormBuilderInterface $builder, array $options)
{ {
$entityName = $this->em->getEntityName(MerchantInterface::class);

$builder->add( $builder->add(
'merchants', 'merchants',
EntityType::class, EntityType::class,
[ [
'class' => $entityName,
'choice_label' => 'title'
'class' => $this->em->getEntityName(MerchantInterface::class),
'choice_label' => 'title',
'data' => $options['current_merchant']
]
);
}

/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(
[
'current_merchant' => $this->merchantResolver->getCurrent(),
] ]
); );
} }

} }

+ 5
- 5
Model/User/UserModel.php View File

/** /**
* @ORM\ManyToOne(targetEntity="Lc\CaracoleBundle\Model\Merchant\MerchantInterface") * @ORM\ManyToOne(targetEntity="Lc\CaracoleBundle\Model\Merchant\MerchantInterface")
*/ */
protected $merchant;
protected $favoriteMerchant;


/** /**
* @ORM\OneToMany(targetEntity="Lc\CaracoleBundle\Model\Address\AddressInterface", mappedBy="user", cascade={"persist"}) * @ORM\OneToMany(targetEntity="Lc\CaracoleBundle\Model\Address\AddressInterface", mappedBy="user", cascade={"persist"})
return $this; return $this;
} }


public function getMerchant(): ?MerchantInterface
public function getFavoriteMerchant(): ?MerchantInterface
{ {
return $this->merchant;
return $this->favoriteMerchant;
} }


public function setMerchant(?MerchantInterface $merchant): self
public function setFavoriteMerchant(?MerchantInterface $merchant): self
{ {
$this->merchant = $merchant;
$this->favoriteMerchant = $merchant;


return $this; return $this;
} }

+ 6
- 0
Resources/assets/app/switchmerchant/app.switchmerchant.js View File


import './switchmerchant.js' ;





+ 11
- 0
Resources/assets/app/switchmerchant/switchmerchant.js View File


$(document).ready(function() {
initSwitchMerchant() ;
}) ;

function initSwitchMerchant() {
let $form = $('form.switch-merchant') ;
$form.find('select').change(function() {
$form.submit() ;
}) ;
}

+ 4
- 0
Resources/config/routes.yaml View File

carac_switch_merchant:
path: /switch-merchant
controller: Lc\CaracoleBundle\Controller\Merchant\SwitchMerchantController::switchMerchant


+ 13
- 26
Twig/TwigExtension.php View File

use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\KernelInterface; use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\Routing\Generator\UrlGenerator;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Contracts\Translation\TranslatorInterface; use Symfony\Contracts\Translation\TranslatorInterface;
use Twig\Extension\AbstractExtension; use Twig\Extension\AbstractExtension;


class TwigExtension extends AbstractExtension class TwigExtension extends AbstractExtension
{ {
protected $em;
protected $kernel;
protected $parameterBag;
protected $cacheManager;
protected $requestStack;
protected $router;
protected $translator;
protected $translatorAdmin;
protected $merchantRepository; protected $merchantRepository;
protected $sectionRepository; protected $sectionRepository;
protected $formFactory; protected $formFactory;
protected $urlGenerator;


public function __construct( public function __construct(
KernelInterface $kernel,
ParameterBagInterface $parameterBag,
CacheManager $cacheManager,
EntityManagerInterface $entityManager,
RequestStack $requestStack,
UrlGeneratorInterface $router,
TranslatorInterface $translator,
TranslatorAdmin $translatorAdmin,
MerchantRepository $merchantRepository, MerchantRepository $merchantRepository,
SectionRepository $sectionRepository, SectionRepository $sectionRepository,
FormFactoryInterface $formFactory
FormFactoryInterface $formFactory,
UrlGeneratorInterface $urlGenerator
) { ) {
$this->kernel = $kernel;
$this->parameterBag = $parameterBag;
$this->cacheManager = $cacheManager;
$this->em = $entityManager;
$this->requestStack = $requestStack;
$this->router = $router;
$this->translator = $translator;
$this->translatorAdmin = $translatorAdmin;
$this->merchantRepository = $merchantRepository; $this->merchantRepository = $merchantRepository;
$this->sectionRepository = $sectionRepository; $this->sectionRepository = $sectionRepository;
$this->formFactory = $formFactory; $this->formFactory = $formFactory;
$this->urlGenerator = $urlGenerator;
} }


public function getFunctions() public function getFunctions()


public function getFormSwitchMerchant() public function getFormSwitchMerchant()
{ {
$form = $this->formFactory->create(SwitchMerchantFormType::class, null, ['action' => '#']);
$form = $this->formFactory->create(
SwitchMerchantFormType::class,
null,
[
'action' => $this->urlGenerator->generate('carac_switch_merchant'),
'attr' => ['class' => 'switch-merchant']
]
);
return $form->createView(); return $form->createView();
} }
} }

Loading…
Cancel
Save