namespace Lc\CaracoleBundle\Controller; | namespace Lc\CaracoleBundle\Controller; | ||||
use Doctrine\ORM\EntityManagerInterface; | |||||
use Doctrine\ORM\QueryBuilder; | use Doctrine\ORM\QueryBuilder; | ||||
use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection; | use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection; | ||||
use EasyCorp\Bundle\EasyAdminBundle\Collection\FilterCollection; | use EasyCorp\Bundle\EasyAdminBundle\Collection\FilterCollection; | ||||
use EasyCorp\Bundle\EasyAdminBundle\Config\Action; | |||||
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions; | |||||
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; | |||||
use EasyCorp\Bundle\EasyAdminBundle\Config\KeyValueStore; | use EasyCorp\Bundle\EasyAdminBundle\Config\KeyValueStore; | ||||
use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext; | |||||
use EasyCorp\Bundle\EasyAdminBundle\Exception\ForbiddenActionException; | |||||
use EasyCorp\Bundle\EasyAdminBundle\Exception\InsufficientEntityPermissionException; | |||||
use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator; | |||||
use EasyCorp\Bundle\EasyAdminBundle\Security\Permission; | |||||
use Lc\CaracoleBundle\Doctrine\Extension\FilterMerchantInterface; | use Lc\CaracoleBundle\Doctrine\Extension\FilterMerchantInterface; | ||||
use Lc\CaracoleBundle\Doctrine\Extension\FilterMultipleMerchantsInterface; | use Lc\CaracoleBundle\Doctrine\Extension\FilterMultipleMerchantsInterface; | ||||
use Lc\CaracoleBundle\Doctrine\Extension\FilterSectionInterface; | use Lc\CaracoleBundle\Doctrine\Extension\FilterSectionInterface; | ||||
use Lc\CaracoleBundle\Factory\User\UserMerchantFactory; | use Lc\CaracoleBundle\Factory\User\UserMerchantFactory; | ||||
use Lc\CaracoleBundle\Form\Merchant\DuplicateToOtherMerchantFormType; | |||||
use Lc\CaracoleBundle\Form\Section\DuplicateToOtherSectionFormType; | |||||
use Lc\CaracoleBundle\Resolver\MerchantResolver; | use Lc\CaracoleBundle\Resolver\MerchantResolver; | ||||
use Lc\CaracoleBundle\Resolver\SectionResolver; | use Lc\CaracoleBundle\Resolver\SectionResolver; | ||||
use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto; | use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto; | ||||
use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto; | use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto; | ||||
use Lc\SovBundle\Component\EntityComponent; | |||||
use Lc\SovBundle\Factory\User\UserFactory; | use Lc\SovBundle\Factory\User\UserFactory; | ||||
use Lc\SovBundle\Translation\TranslatorAdmin; | |||||
use Symfony\Component\HttpFoundation\Response; | |||||
trait AdminControllerTrait | trait AdminControllerTrait | ||||
public static function getSubscribedServices() | public static function getSubscribedServices() | ||||
{ | { | ||||
return array_merge(parent::getSubscribedServices(), [ | |||||
'merchant_resolver' => MerchantResolver::class, | |||||
'section_resolver' => SectionResolver::class, | |||||
'user_factory' => UserFactory::class, | |||||
'user_merchant_factory' => UserMerchantFactory::class, | |||||
]); | |||||
return array_merge( | |||||
parent::getSubscribedServices(), | |||||
[ | |||||
'merchant_resolver' => MerchantResolver::class, | |||||
'section_resolver' => SectionResolver::class, | |||||
'user_factory' => UserFactory::class, | |||||
'user_merchant_factory' => UserMerchantFactory::class, | |||||
] | |||||
); | |||||
} | } | ||||
public function configureResponseParameters(KeyValueStore $responseParameters): KeyValueStore | public function configureResponseParameters(KeyValueStore $responseParameters): KeyValueStore | ||||
$responseParameters = parent::configureResponseParameters($responseParameters); | $responseParameters = parent::configureResponseParameters($responseParameters); | ||||
// affichage du filtre sur section | // affichage du filtre sur section | ||||
if($this->isInstanceOf(FilterSectionInterface::class)) { | |||||
if ($this->isInstanceOf(FilterSectionInterface::class)) { | |||||
$responseParameters->set('display_switch_section', true); | $responseParameters->set('display_switch_section', true); | ||||
} | } | ||||
} | } | ||||
public function duplicateToOtherMerchant( | |||||
AdminContext $context, | |||||
EntityComponent $entityComponent, | |||||
TranslatorAdmin $translatorAdmin, | |||||
EntityManagerInterface $em | |||||
) { | |||||
if (!$this->isGranted( | |||||
Permission::EA_EXECUTE_ACTION, | |||||
['action' => "duplicate", 'entity' => $context->getEntity()] | |||||
)) { | |||||
throw new ForbiddenActionException($context); | |||||
} | |||||
if (!$context->getEntity()->isAccessible()) { | |||||
throw new InsufficientEntityPermissionException($context); | |||||
} | |||||
if (!$this->isInstanceOf(FilterMerchantInterface::class)) { | |||||
throw new \ErrorException('L\entité n\'est pas lié à un merchant.'); | |||||
} | |||||
$duplicateOtherMerchantForm = $this->createForm( | |||||
DuplicateToOtherMerchantFormType::class, | |||||
null, | |||||
array( | |||||
'entityClass' => $context->getEntity()->getFqcn(), | |||||
'entityId' => $context->getEntity()->getInstance()->getId(), | |||||
'action' => $context->getRequest()->getUri(), | |||||
'attr' => ['id'=> 'duplicate-other-merchant-form'], | |||||
) | |||||
); | |||||
$duplicateOtherMerchantForm->handleRequest($context->getRequest()); | |||||
if ($duplicateOtherMerchantForm->isSubmitted() && $duplicateOtherMerchantForm->isValid()) { | |||||
$newEntity = $entityComponent->duplicateEntity($context->getEntity()->getInstance()); | |||||
$em->create($newEntity); | |||||
$merchant = $duplicateOtherMerchantForm->get('merchants')->getData(); | |||||
$newEntity->setMerchant($merchant); | |||||
$em->update($newEntity); | |||||
$em->flush(); | |||||
$url = $this->get(AdminUrlGenerator::class) | |||||
->setAction(Action::EDIT) | |||||
->setEntityId($newEntity->getId()) | |||||
->generateUrl(); | |||||
$this->addFlash( | |||||
'success', | |||||
$translatorAdmin->transFlashMessage( | |||||
'duplicateToOtherMerchant', | |||||
['%merchant%' => $merchant->getTitle()] | |||||
), | |||||
array() | |||||
); | |||||
//TODO switch merchant route | |||||
return $this->redirect($url); | |||||
} | |||||
if ($context->getRequest()->isXmlHttpRequest()) { | |||||
$response['data'] = $this->renderView( | |||||
'@LcCaracole/admin/merchant/modal/duplicate_entity_to_other_merchant.html.twig', | |||||
array( | |||||
'form_duplicate_entity_to_other_merchant' => $duplicateOtherMerchantForm->createView(), | |||||
) | |||||
); | |||||
return new Response(json_encode($response)); | |||||
}else{ | |||||
throw new \ErrorException('La requête doit être effectué en ajax'); | |||||
} | |||||
} | |||||
public function duplicateToOtherSection( | |||||
AdminContext $context, | |||||
EntityComponent $entityComponent, | |||||
TranslatorAdmin $translatorAdmin, | |||||
EntityManagerInterface $em | |||||
) { | |||||
if (!$this->isGranted( | |||||
Permission::EA_EXECUTE_ACTION, | |||||
['action' => "duplicate", 'entity' => $context->getEntity()] | |||||
)) { | |||||
throw new ForbiddenActionException($context); | |||||
} | |||||
if (!$context->getEntity()->isAccessible()) { | |||||
throw new InsufficientEntityPermissionException($context); | |||||
} | |||||
if (!$this->isInstanceOf(FilterSectionInterface::class)) { | |||||
throw new \ErrorException('L\entité n\'est pas lié à un merchant.'); | |||||
} | |||||
$duplicateOtherSectionForm = $this->createForm( | |||||
DuplicateToOtherSectionFormType::class, | |||||
null, | |||||
array( | |||||
'entityClass' => $context->getEntity()->getFqcn(), | |||||
'entityId' => $context->getEntity()->getInstance()->getId(), | |||||
'action' => $context->getRequest()->getUri(), | |||||
'attr' => ['id'=> 'duplicate-other-section-form'], | |||||
) | |||||
); | |||||
$duplicateOtherSectionForm->handleRequest($context->getRequest()); | |||||
if ($duplicateOtherSectionForm->isSubmitted() && $duplicateOtherSectionForm->isValid()) { | |||||
$newEntity = $entityComponent->duplicateEntity($context->getEntity()->getInstance()); | |||||
$em->create($newEntity); | |||||
$section = $duplicateOtherSectionForm->get('sections')->getData(); | |||||
$newEntity->setSection($section); | |||||
$em->update($newEntity); | |||||
$em->flush(); | |||||
$url = $this->get(AdminUrlGenerator::class) | |||||
->setAction(Action::EDIT) | |||||
->setEntityId($newEntity->getId()) | |||||
->generateUrl(); | |||||
$this->addFlash( | |||||
'success', | |||||
$translatorAdmin->transFlashMessage( | |||||
'duplicateToOtherSection', | |||||
['%section%' => $section->getTitle()] | |||||
), | |||||
array() | |||||
); | |||||
//TODO switch merchant route | |||||
return $this->redirect($url); | |||||
} | |||||
if ($context->getRequest()->isXmlHttpRequest()) { | |||||
$response['data'] = $this->renderView( | |||||
'@LcCaracole/admin/merchant/modal/duplicate_entity_to_other_section.html.twig', | |||||
array( | |||||
'form_duplicate_entity_to_other_section' => $duplicateOtherSectionForm->createView(), | |||||
) | |||||
); | |||||
return new Response(json_encode($response)); | |||||
}else{ | |||||
throw new \ErrorException('La requête doit être effectué en ajax'); | |||||
} | |||||
} | |||||
public function buildIndexActions(Actions $actions): void | |||||
{ | |||||
parent::buildIndexActions($actions); | |||||
if ($this->isInstanceOf(FilterMerchantInterface::class)) { | |||||
$actions->add(Crud::PAGE_INDEX, $this->getDuplicateToOhterMerchantAction()); | |||||
} | |||||
if ($this->isInstanceOf(FilterSectionInterface::class)) { | |||||
$actions->add(Crud::PAGE_INDEX, $this->getDuplicateToOhterSectionAction()); | |||||
} | |||||
} | |||||
public function getDuplicateToOhterMerchantAction(): Action | |||||
{ | |||||
$duplicateAction = Action::new( | |||||
'duplicateToOtherMerchant', | |||||
$this->get('translator_admin')->transAction('duplicateToOtherMerchant'), | |||||
'fa fa-fw fa-copy' | |||||
) | |||||
->linkToCrudAction('duplicateToOtherMerchant') | |||||
->setCssClass('text-info in-dropdown duplicate-to-other-merchant duplicate-modal-action'); | |||||
return $duplicateAction; | |||||
} | |||||
public function getDuplicateToOhterSectionAction(): Action | |||||
{ | |||||
$duplicateAction = Action::new( | |||||
'duplicateToOtherSection', | |||||
$this->get('translator_admin')->transAction('duplicateToOtherSection'), | |||||
'fa fa-fw fa-copy' | |||||
) | |||||
->linkToCrudAction('duplicateToOtherSection') | |||||
->setCssClass('text-info in-dropdown duplicate-to-other-section duplicate-modal-action'); | |||||
return $duplicateAction; | |||||
} | |||||
} | } | ||||
$assets->addWebpackEncoreEntry('carac-common'); | $assets->addWebpackEncoreEntry('carac-common'); | ||||
$assets->addWebpackEncoreEntry('carac-switch-merchant'); | $assets->addWebpackEncoreEntry('carac-switch-merchant'); | ||||
$assets->addWebpackEncoreEntry('carac-duplicate'); | |||||
return $assets; | return $assets; | ||||
} | } |
<?php | |||||
namespace Lc\CaracoleBundle\EventSubscriber\Address; | |||||
use Doctrine\ORM\EntityManagerInterface; | |||||
use Lc\CaracoleBundle\Model\Address\AddressInterface; | |||||
use Lc\SovBundle\Doctrine\EntityInterface; | |||||
use Lc\SovBundle\Doctrine\Extension\SluggableInterface; | |||||
use Lc\SovBundle\Doctrine\Extension\SortableInterface; | |||||
use Lc\SovBundle\Doctrine\Extension\StatusInterface; | |||||
use Lc\SovBundle\Doctrine\Extension\TreeInterface; | |||||
use Lc\SovBundle\Event\EntityComponentEvent; | |||||
use Lc\SovBundle\Event\EntityManager\EntityManagerEvent; | |||||
use Lc\SovBundle\Repository\AbstractRepositoryInterface; | |||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface; | |||||
class DuplicateAddressEventSubscriber implements EventSubscriberInterface | |||||
{ | |||||
protected $em; | |||||
protected $adminUrlGenerator; | |||||
public function __construct(EntityManagerInterface $entityManager) | |||||
{ | |||||
$this->em = $entityManager; | |||||
} | |||||
public static function getSubscribedEvents() | |||||
{ | |||||
return [ | |||||
EntityComponentEvent::DUPLICATE_EVENT => ['duplicateAddressOnDuplicateEvent'], | |||||
]; | |||||
} | |||||
public function duplicateAddressOnDuplicateEvent(EntityComponentEvent $event) | |||||
{ | |||||
$entity = $event->getEntity(); | |||||
$classMetadata = $this->em->getClassMetadata(get_class($entity)); | |||||
foreach ($classMetadata->getAssociationMappings() as $associationMapping){ | |||||
if(in_array(AddressInterface::class, class_implements($associationMapping['targetEntity']))){ | |||||
$methodGet = 'get'.ucfirst($associationMapping['fieldName']); | |||||
$methodSet = 'set'.ucfirst($associationMapping['fieldName']); | |||||
if(method_exists($entity, $methodGet) && method_exists($entity, $methodSet)){ | |||||
$newAddress = clone $entity->$methodGet(); | |||||
$entity->$methodSet($newAddress); | |||||
$this->em->persist($newAddress); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} |
<?php | |||||
namespace Lc\CaracoleBundle\EventSubscriber\Product; | |||||
use Doctrine\ORM\EntityManagerInterface; | |||||
use Lc\CaracoleBundle\Model\Address\AddressInterface; | |||||
use Lc\CaracoleBundle\Model\Product\ProductInterface; | |||||
use Lc\SovBundle\Doctrine\EntityInterface; | |||||
use Lc\SovBundle\Doctrine\Extension\SluggableInterface; | |||||
use Lc\SovBundle\Doctrine\Extension\SortableInterface; | |||||
use Lc\SovBundle\Doctrine\Extension\StatusInterface; | |||||
use Lc\SovBundle\Doctrine\Extension\TreeInterface; | |||||
use Lc\SovBundle\Event\EntityComponentEvent; | |||||
use Lc\SovBundle\Event\EntityManager\EntityManagerEvent; | |||||
use Lc\SovBundle\Repository\AbstractRepositoryInterface; | |||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface; | |||||
class DuplicateProductEventSubscriber implements EventSubscriberInterface | |||||
{ | |||||
protected $em; | |||||
protected $adminUrlGenerator; | |||||
public function __construct(EntityManagerInterface $entityManager) | |||||
{ | |||||
$this->em = $entityManager; | |||||
} | |||||
public static function getSubscribedEvents() | |||||
{ | |||||
return [ | |||||
EntityComponentEvent::DUPLICATE_EVENT => ['duplicateProductOnDuplicateEvent'], | |||||
]; | |||||
} | |||||
public function duplicateProductOnDuplicateEvent(EntityComponentEvent $event) | |||||
{ | |||||
$entity = $event->getEntity(); | |||||
$classMetadata = $this->em->getClassMetadata(get_class($entity)); | |||||
/*foreach ($classMetadata->getAssociationMappings() as $associationMapping){ | |||||
if(in_array(ProductInterface::class, class_implements($associationMapping['targetEntity']))){ | |||||
/*foreach ($productFamily->getProducts() as $i => $product) { | |||||
$newProduct = clone $product; | |||||
$newProduct->setProductFamily($productFamily); | |||||
$this->em->persist($newProduct); | |||||
$productFamily->addProduct($newProduct); | |||||
} | |||||
$methodGet = 'get'.ucfirst($associationMapping['fieldName']); | |||||
$methodSet = 'set'.ucfirst($associationMapping['fieldName']); | |||||
if(method_exists($entity, $methodGet) && method_exists($entity, $methodSet)){ | |||||
$newAddress = clone $entity->$methodGet(); | |||||
$entity->$methodSet($newAddress); | |||||
$this->em->persist($newAddress); | |||||
} | |||||
} | |||||
}*/ | |||||
} | |||||
} |
<?php | |||||
namespace Lc\CaracoleBundle\Form\Merchant; | |||||
use Lc\CaracoleBundle\Model\Merchant\MerchantInterface; | |||||
use Lc\CaracoleBundle\Resolver\MerchantResolver; | |||||
use Lc\SovBundle\Doctrine\EntityManager; | |||||
use Lc\SovBundle\Model\User\UserInterface; | |||||
use Lc\SovBundle\Translation\TranslatorAdmin; | |||||
use Symfony\Bridge\Doctrine\Form\Type\EntityType; | |||||
use Symfony\Component\Form\AbstractType; | |||||
use Symfony\Component\Form\Extension\Core\Type\HiddenType; | |||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType; | |||||
use Symfony\Component\Form\FormBuilderInterface; | |||||
use Symfony\Component\OptionsResolver\OptionsResolver; | |||||
class DuplicateToOtherMerchantFormType extends AbstractType | |||||
{ | |||||
protected $em; | |||||
protected $translatorAdmin; | |||||
protected $merchantResolver; | |||||
public function __construct(EntityManager $em, TranslatorAdmin $translatorAdmin, MerchantResolver $merchantResolver) | |||||
{ | |||||
$this->em = $em; | |||||
$this->translatorAdmin = $translatorAdmin; | |||||
$this->merchantResolver = $merchantResolver; | |||||
} | |||||
public function buildForm(FormBuilderInterface $builder, array $options) | |||||
{ | |||||
//TODO tester si l'utilisateur à les droits sur ce merchant | |||||
$builder->add( | |||||
'merchants', | |||||
EntityType::class, | |||||
[ | |||||
'class' => $this->em->getEntityName(MerchantInterface::class), | |||||
'choice_label' => 'title' | |||||
] | |||||
); | |||||
$builder->add( | |||||
'EntityId', | |||||
HiddenType::class, | |||||
[ | |||||
'data' => $options['entityId'] | |||||
] | |||||
); | |||||
$builder->add( | |||||
'EntityClass', | |||||
HiddenType::class, | |||||
[ | |||||
'data' => $options['entityClass'] | |||||
] | |||||
); | |||||
} | |||||
/** | |||||
* {@inheritdoc} | |||||
*/ | |||||
public function configureOptions(OptionsResolver $resolver) | |||||
{ | |||||
$resolver->setDefaults( | |||||
[ | |||||
'entityId' => null, | |||||
'entityClass' => null, | |||||
] | |||||
); | |||||
} | |||||
} |
<?php | |||||
namespace Lc\CaracoleBundle\Form\Section; | |||||
use Lc\CaracoleBundle\Model\Merchant\MerchantInterface; | |||||
use Lc\CaracoleBundle\Model\Section\SectionInterface; | |||||
use Lc\CaracoleBundle\Resolver\MerchantResolver; | |||||
use Lc\SovBundle\Doctrine\EntityManager; | |||||
use Lc\SovBundle\Model\User\UserInterface; | |||||
use Lc\SovBundle\Translation\TranslatorAdmin; | |||||
use Symfony\Bridge\Doctrine\Form\Type\EntityType; | |||||
use Symfony\Component\Form\AbstractType; | |||||
use Symfony\Component\Form\Extension\Core\Type\HiddenType; | |||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType; | |||||
use Symfony\Component\Form\FormBuilderInterface; | |||||
use Symfony\Component\OptionsResolver\OptionsResolver; | |||||
class DuplicateToOtherSectionFormType extends AbstractType | |||||
{ | |||||
protected $em; | |||||
protected $translatorAdmin; | |||||
protected $merchantResolver; | |||||
public function __construct(EntityManager $em, TranslatorAdmin $translatorAdmin, MerchantResolver $merchantResolver) | |||||
{ | |||||
$this->em = $em; | |||||
$this->translatorAdmin = $translatorAdmin; | |||||
$this->merchantResolver = $merchantResolver; | |||||
} | |||||
public function buildForm(FormBuilderInterface $builder, array $options) | |||||
{ | |||||
//TODO tester si l'utilisateur à les droits sur ce merchant | |||||
$builder->add( | |||||
'sections', | |||||
EntityType::class, | |||||
[ | |||||
'class' => $this->em->getEntityName(SectionInterface::class), | |||||
'choice_label' => 'title' | |||||
] | |||||
); | |||||
$builder->add( | |||||
'EntityId', | |||||
HiddenType::class, | |||||
[ | |||||
'data' => $options['entityId'] | |||||
] | |||||
); | |||||
$builder->add( | |||||
'EntityClass', | |||||
HiddenType::class, | |||||
[ | |||||
'data' => $options['entityClass'] | |||||
] | |||||
); | |||||
} | |||||
/** | |||||
* {@inheritdoc} | |||||
*/ | |||||
public function configureOptions(OptionsResolver $resolver) | |||||
{ | |||||
$resolver->setDefaults( | |||||
[ | |||||
'entityId' => null, | |||||
'entityClass' => null, | |||||
] | |||||
); | |||||
} | |||||
} |
import './duplicate.js' ; | |||||
import './duplicate.scss' ; | |||||
$(document).ready(function () { | |||||
initDuplicateOtherToOtherMerchant(); | |||||
}); | |||||
function initDuplicateOtherToOtherMerchant() { | |||||
$('.duplicate-modal-action').on('click', function (e) { | |||||
$btn = $(this); | |||||
e.preventDefault(); | |||||
$.ajax({ | |||||
url: $btn.prop('href'), | |||||
method: "POST", | |||||
dataType: "json", | |||||
success: function (response) { | |||||
$('body').append(response.data); | |||||
SovTools.log($('#carac-modal-duplicate')); | |||||
$('#carac-modal-duplicate').modal('show'); | |||||
//initDuplicateModal(); | |||||
} | |||||
}); | |||||
}); | |||||
} | |||||
function initDuplicateModal(){ | |||||
$('#carac-button-visit-merchant').on('click', function (e){ | |||||
SovTools.log($('form[name="duplicate_to_other_merchant_form"]')); | |||||
$.ajax({ | |||||
url: $btn.prop('href'), | |||||
data: $('form[name="duplicate_to_other_merchant_form"]').serialize(), | |||||
method: "POST", | |||||
dataType: "json", | |||||
success: function (response) { | |||||
} | |||||
}); | |||||
}); | |||||
} |
// switch dans la navbar | |||||
.nav-switch-merchant { | |||||
width: 220px ; | |||||
text-align: right ; | |||||
.fa { | |||||
position: relative; | |||||
top: 3px; | |||||
right: 7px; | |||||
} | |||||
form.switch-merchant { | |||||
display: inline-block ; | |||||
width: 180px ; | |||||
position: relative ; | |||||
top: 7px ; | |||||
text-align: left ; | |||||
label, .select2-selection__clear { | |||||
display: none ; | |||||
} | |||||
button { | |||||
display: none ; | |||||
} | |||||
} | |||||
} | |||||
// modal | |||||
#carac-modal-switch-merchant { | |||||
form.switch-merchant { | |||||
.form-group:first-child { | |||||
display: none ; | |||||
} | |||||
} | |||||
} |
flash_message: | flash_message: | ||||
settings_saved: Paramètres mis à jour | settings_saved: Paramètres mis à jour | ||||
duplicateToOtherMerchant: "Le document a bien été dupliqué sur le marchand : %merchant%" | |||||
duplicateToOtherSection: "Le document a bien été dupliqué sur la section : %section%" | |||||
action: | action: | ||||
favorite: Définir comme favoris | favorite: Définir comme favoris | ||||
duplicateToOtherMerchant: Dupliquer sur un autre marchand | |||||
duplicateToOtherSection: Dupliquer sur une autre section | |||||
setting_definition: | setting_definition: | ||||
merchant: | merchant: | ||||
address: Adresse | address: Adresse | ||||
merchant: Marchand | merchant: Marchand | ||||
taxRate: Règle de taxe | taxRate: Règle de taxe | ||||
merchants: Marchands | |||||
sections: Sections | |||||
behaviorTaxRate: Avec ou sans TVA | behaviorTaxRate: Avec ou sans TVA | ||||
behaviorTaxRateChoices: | behaviorTaxRateChoices: | ||||
tax-excluded: TVA exclue | tax-excluded: TVA exclue |
{% embed '@LcSov/adminlte/embed/modal.twig' %} | |||||
{% block id %}carac-modal-duplicate{% endblock %} | |||||
{% block title %} | |||||
Dupliquer l'entité sur un autre marchand | |||||
{% endblock %} | |||||
{% block body %} | |||||
{% form_theme form_duplicate_entity_to_other_merchant '@LcSov/adminlte/crud/form_theme.html.twig' %} | |||||
{{ form(form_duplicate_entity_to_other_merchant) }} | |||||
{% endblock %} | |||||
{% block footer %} | |||||
<button type="submit" class="btn btn-default" data-dismiss="modal">{{ "cancel"|sov_trans_admin_action }}</button> | |||||
<button type="submit" class="btn btn-primary" form="{{ form_duplicate_entity_to_other_merchant.vars.attr.id }}">{{ "duplicate"|sov_trans_admin_action }}</button> | |||||
{% endblock %} | |||||
{% endembed %} |
{% embed '@LcSov/adminlte/embed/modal.twig' %} | |||||
{% block id %}carac-modal-duplicate{% endblock %} | |||||
{% block title %} | |||||
Dupliquer l'entité sur une autre section | |||||
{% endblock %} | |||||
{% block body %} | |||||
{% form_theme form_duplicate_entity_to_other_section '@LcSov/adminlte/crud/form_theme.html.twig' %} | |||||
{{ form(form_duplicate_entity_to_other_section) }} | |||||
{% endblock %} | |||||
{% block footer %} | |||||
<button class="btn btn-default" data-dismiss="modal">{{ "cancel"|sov_trans_admin_action }}</button> | |||||
<button type="submit" class="btn btn-primary" form="{{ form_duplicate_entity_to_other_section.vars.attr.id }}">{{ "duplicate"|sov_trans_admin_action }}</button> | |||||
{% endblock %} | |||||
{% endembed %} |
{% embed '@LcSov/adminlte/embed/modal.twig' %} | |||||
{% block id %}carac-modal-switch-merchant{% endblock %} | |||||
{% block size %}modal-lg{% endblock %} | |||||
{% block title %} | |||||
Bienvenue sur le marchand <i>{{ merchant_current.getTitle() }}</i> | |||||
{% endblock %} | |||||
{% block body %} | |||||
{% if not user.favoriteMerchant %} | |||||
<p>Vous n'avez pas de marchand favoris.</p> | |||||
{% endif %} | |||||
{% if user.favoriteMerchant and user.favoriteMerchant != merchant_current %} | |||||
<p>Vous n'êtes pas sur votre marchand par favoris.</p> | |||||
{% endif %} | |||||
<p>Vous pouvez soit définir le marchand <strong>{{ merchant_current.getTitle() }}</strong> | |||||
comme marchand favoris ou simplement indiquer que vous visitez ce marchand pour aujourd'hui.</p> | |||||
{% endblock %} | |||||
{% block footer %} | |||||
{% set form_switch_merchant = carac_form_switch_merchant('admin', 'carac_merchant_favorite') %} | |||||
{% form_theme form_switch_merchant '@LcSov/adminlte/crud/form_theme.html.twig' %} | |||||
{{ form_start(form_switch_merchant) }} | |||||
{{ form(form_switch_merchant) }} | |||||
{{ form_end(form_switch_merchant) }} | |||||
<button id="carac-button-visit-merchant" type="button" class="btn btn-default" | |||||
data-dismiss="modal">Visiter</button> | |||||
{% endblock %} | |||||
{% endembed %} |
{% if(user.favoriteMerchant != merchant_current) %} | {% if(user.favoriteMerchant != merchant_current) %} | ||||
{# modal affichée uniquement si la sessionStorage.visit_merchant n'est pas défini (js) #} | {# modal affichée uniquement si la sessionStorage.visit_merchant n'est pas défini (js) #} | ||||
{% embed '@LcSov/adminlte/embed/modal.twig' %} | |||||
{% block id %}carac-modal-switch-merchant{% endblock %} | |||||
{% block size %}modal-lg{% endblock %} | |||||
{% block title %} | |||||
Bienvenue sur le marchand <i>{{ merchant_current.getTitle() }}</i> | |||||
{% endblock %} | |||||
{% block body %} | |||||
{% if not user.favoriteMerchant %} | |||||
<p>Vous n'avez pas de marchand favoris.</p> | |||||
{% endif %} | |||||
{% if user.favoriteMerchant and user.favoriteMerchant != merchant_current %} | |||||
<p>Vous n'êtes pas sur votre marchand par favoris.</p> | |||||
{% endif %} | |||||
<p>Vous pouvez soit définir le marchand <strong>{{ merchant_current.getTitle() }}</strong> | |||||
comme marchand favoris ou simplement indiquer que vous visitez ce marchand pour aujourd'hui.</p> | |||||
{% endblock %} | |||||
{% block footer %} | |||||
{% set form_switch_merchant = carac_form_switch_merchant('admin', 'carac_merchant_favorite') %} | |||||
{% form_theme form_switch_merchant '@LcSov/adminlte/crud/form_theme.html.twig' %} | |||||
{{ form_start(form_switch_merchant) }} | |||||
{{ form(form_switch_merchant) }} | |||||
{{ form_end(form_switch_merchant) }} | |||||
<button id="carac-button-visit-merchant" type="button" class="btn btn-default" | |||||
data-dismiss="modal">Visiter</button> | |||||
{% endblock %} | |||||
{% endembed %} | |||||
{% include '@LcCaracole/admin/merchant/modal/switch_merchant.html.twig' %} | |||||
{% endif %} | {% endif %} | ||||
{% endblock %} | {% endblock %} |