@@ -43,6 +43,7 @@ class AdminController extends EasyAdminController | |||
protected $orderUtils; | |||
protected $mailUtils ; | |||
protected $translator; | |||
protected $utilsProcess; | |||
protected $filtersForm = null; | |||
public function __construct(Security $security, UserManagerInterface $userManager, EntityManagerInterface $em, | |||
@@ -56,6 +57,7 @@ class AdminController extends EasyAdminController | |||
$this->merchantUtils = $utilsManager->getMerchantUtils(); | |||
$this->orderUtils = $utilsManager->getOrderUtils();; | |||
$this->mailUtils = $utilsManager->getMailUtils() ; | |||
$this->utilsProcess = $utilsManager->getUtilsProcess() ; | |||
$this->translator = $translator; | |||
} | |||
@@ -598,14 +600,7 @@ class AdminController extends EasyAdminController | |||
$entity= $this->em->getRepository($easyadmin['entity']['class'])->find($id); | |||
$newEntity = clone $entity ; | |||
if($newEntity instanceof ImageInterface){ | |||
$newEntity->setImage(null); | |||
} | |||
$this->em->persist($newEntity) ; | |||
$this->em->flush() ; | |||
$newEntity = $this->utilsProcess->duplicateEntity($entity); | |||
return $this->redirectToRoute('easyadmin', ['entity' => $easyadmin['entity']['name'], 'action' => 'edit', 'id' =>$newEntity->getId(), 'referer' =>$refererUrl ]) ; | |||
} | |||
@@ -622,25 +617,26 @@ class AdminController extends EasyAdminController | |||
$entity= $this->em->getRepository($easyadmin['entity']['class'])->find($id); | |||
$hub= $this->em->getRepository(MerchantInterface::class)->findOneByDevAlias($hubAlias); | |||
$newEntity = clone $entity ; | |||
$newEntity = $this->utilsProcess->duplicateEntityToOtherHub($entity,$hub); | |||
if($newEntity instanceof ImageInterface){ | |||
$newEntity->setImage(null); | |||
} | |||
$user->setMerchant($hub); | |||
$this->em->persist($user); | |||
$this->em->flush(); | |||
$redirectUrl = $this->generateUrl('easyadmin', ['entity' => $easyadmin['entity']['name'], 'action' => 'edit', 'id' =>$newEntity->getId(), 'referer' =>$refererUrl ]).'&hubredirection=true'; | |||
if ($hub) { | |||
$newEntity->setMerchant($hub); | |||
$user->setMerchant($hub); | |||
$this->em->persist($user); | |||
} | |||
$this->em->persist($newEntity) ; | |||
$this->em->flush() ; | |||
return $this->redirectToOtherHub($hub, $redirectUrl) ; | |||
} | |||
$redirectUrl = $hub->getMerchantConfig('url').substr($this->generateUrl('easyadmin', ['entity' => $easyadmin['entity']['name'], 'action' => 'edit', 'id' =>$newEntity->getId(), 'referer' =>$refererUrl ]),1).'&hubredirection=true'; | |||
public function redirectToOtherHub($hub, $url){ | |||
if(strpos($_SERVER['HTTP_HOST'], 'localhost')!==false){ | |||
return $this->redirect($url); | |||
}else{ | |||
return $this->redirect($hub->getMerchantConfig('url').substr($url,1)); | |||
} | |||
return $this->redirect($redirectUrl) ; | |||
} | |||
} | |||
@@ -100,7 +100,7 @@ class MerchantController extends AdminController | |||
$em->persist($user); | |||
$em->flush(); | |||
return $this->redirect($merchant->getMerchantConfig('url').'admin/dashboard?hubredirection=true') ; | |||
return $this->redirectToOtherHub($merchant, '/admin/dashboard?hubredirection=true') ; | |||
} | |||
} | |||
@@ -34,6 +34,7 @@ class ProductFamilyController extends AdminController | |||
private $choicesTaxRateParam; | |||
private $choicesSupplierTaxRateParam; | |||
private $parameterBag ; | |||
private $productFamilyUtils ; | |||
public function __construct(Security $security, UserManagerInterface $userManager, EntityManagerInterface $em, | |||
MailjetTransport $mailjetTransport, UtilsManager $utilsManager, TranslatorInterface $translator, | |||
@@ -41,6 +42,7 @@ class ProductFamilyController extends AdminController | |||
{ | |||
parent::__construct($security, $userManager, $em, $mailjetTransport, $utilsManager, $translator); | |||
$this->parameterBag = $parameterBag ; | |||
$this->productFamilyUtils = $utilsManager->getProductFamilyUtils() ; | |||
} | |||
public function createEntityFormBuilder($entity, $view, $override = true) | |||
@@ -188,10 +190,7 @@ class ProductFamilyController extends AdminController | |||
public function updateProductFamilyEntity($entity, $editForm = false) | |||
{ | |||
if ($editForm) { | |||
$this->processReductionCatalog($entity, $editForm); | |||
$this->processCategories($entity); | |||
$this->processProducts($entity); | |||
$this->processPrice($entity); | |||
$entity = $this->productFamilyUtils->processBeforePersistProductFamily($entity, $editForm); | |||
} | |||
parent::updateEntity($entity); | |||
@@ -201,84 +200,13 @@ class ProductFamilyController extends AdminController | |||
public function persistProductFamilyEntity($entity, $newForm) | |||
{ | |||
$this->processReductionCatalog($entity, $newForm); | |||
$this->processCategories($entity); | |||
$this->processProducts($entity); | |||
$this->processPrice($entity); | |||
$entity = $this->productFamilyUtils->processBeforePersistProductFamily($entity, $newForm); | |||
$this->em->persist($entity); | |||
$this->em->flush(); | |||
} | |||
protected function processReductionCatalog($entity, $editForm) | |||
{ | |||
$reductionCatalog = $editForm->get('reductionCatalog')->getData(); | |||
if ($reductionCatalog instanceof ReductionCatalogInterface) { | |||
if ($reductionCatalog->getValue() && $reductionCatalog->getBehaviorTaxRate() && $reductionCatalog->getUnit()) { | |||
$reductionCatalog->setMerchant($entity->getMerchant()); | |||
$reductionCatalog->setStatus($editForm->get('activeReductionCatalog')->getData()); | |||
$reductionCatalog->setProductFamily($entity); | |||
$this->em->persist($reductionCatalog); | |||
} | |||
} | |||
} | |||
protected function processPrice($entity) | |||
{ | |||
if ($entity->getBehaviorPrice() == 'by-piece') { | |||
$entity->setPriceByRefUnit(null); | |||
$entity->setBuyingPriceByRefUnit(null); | |||
} else if ($entity->getBehaviorPrice() == 'by-reference-unit') { | |||
$entity->setPrice(null); | |||
$entity->setBuyingPrice(null); | |||
} | |||
} | |||
protected function processProducts($entity, $clone = false) | |||
{ | |||
//si il existe un et un seul produit pour ce product family n'ajoute rien supprime rien | |||
if (count($entity->getProducts()) == 0) { | |||
$product = new Product(); | |||
$product->setProductFamily($entity); | |||
$this->em->persist($product); | |||
$entity->addProduct($product); | |||
} else { | |||
foreach ($entity->getProducts() as $i => $product) { | |||
if ($clone) { | |||
$newProduct = clone $product; | |||
$newProduct->setProductFamily($entity); | |||
$this->em->persist($newProduct); | |||
$entity->addProduct($newProduct); | |||
} else { | |||
$product->setProductFamily($entity); | |||
$this->em->persist($product); | |||
$entity->addProduct($product); | |||
} | |||
} | |||
} | |||
} | |||
protected function processCategories(ProductFamilyInterface $entity) | |||
{ | |||
$productCategoryRepository = $this->getDoctrine()->getRepository(ProductCategoryInterface::class); | |||
$productCategories = $entity->getProductCategories(); | |||
$entity->initProductCategories(); | |||
foreach ($productCategories as $key => $bool) { | |||
if (is_bool($bool) && $bool) { | |||
if (strpos($key, 'category_children_') !== false) { | |||
$idCategory = (int)str_replace('category_children_', '', $key); | |||
} else { | |||
$idCategory = (int)str_replace('category_', '', $key); | |||
} | |||
$category = $productCategoryRepository->find($idCategory); | |||
$entity->addProductCategory($category); | |||
} | |||
} | |||
} | |||
protected function editAction() | |||
{ | |||
@@ -411,7 +339,7 @@ class ProductFamilyController extends AdminController | |||
return $this->executeDynamicMethod('render<EntityName>Template', ['new', $this->entity['templates']['new'], $parameters]); | |||
} | |||
public function duplicateAction() | |||
/*public function duplicateAction() | |||
{ | |||
$id = $this->request->query->get('id'); | |||
$refererUrl = $this->request->query->get('referer', ''); | |||
@@ -422,21 +350,14 @@ class ProductFamilyController extends AdminController | |||
$newProductFamily = clone $entity; | |||
if ($easyadmin['entity']['name'] == "ProductFamily") { | |||
$this->processProducts($newProductFamily, true); | |||
} | |||
if($newProductFamily instanceof ImageInterface) { | |||
$basePath = $this->parameterBag->get('kernel.project_dir').'/public/uploads/images/' ; | |||
$imageProductFamily = 'produits/'.md5(time()).'.jpg' ; | |||
copy($basePath.$entity->getImage(), $basePath.$imageProductFamily) ; | |||
$newProductFamily->setImage($imageProductFamily); | |||
} | |||
$this->em->persist($newProductFamily); | |||
$this->em->flush(); | |||
return $this->redirectToRoute('easyadmin', ['entity' => $easyadmin['entity']['name'], 'action' => 'edit', 'id' => $newProductFamily->getId(), 'referer' => $refererUrl]); | |||
} | |||
}*/ | |||
@@ -38,7 +38,6 @@ abstract class AbstractEntity | |||
*/ | |||
protected $updatedBy; | |||
public function getCreatedAt(): ?\DateTimeInterface | |||
{ | |||
return $this->createdAt; |
@@ -2,16 +2,23 @@ | |||
namespace Lc\ShopBundle\Services ; | |||
use App\Entity\Product; | |||
use Doctrine\ORM\EntityManagerInterface; | |||
use Lc\ShopBundle\Context\PriceUtilsInterface; | |||
use Lc\ShopBundle\Context\ProductCategoryInterface; | |||
use Lc\ShopBundle\Context\ProductFamilyInterface; | |||
use Lc\ShopBundle\Context\ReductionCatalogInterface; | |||
use Lc\ShopBundle\Model\ProductFamily; | |||
class ProductFamilyUtils | |||
{ | |||
protected $priceUtils ; | |||
protected $em ; | |||
public function __construct(PriceUtilsInterface $priceUtils) | |||
public function __construct(PriceUtilsInterface $priceUtils, EntityManagerInterface $em) | |||
{ | |||
$this->priceUtils = $priceUtils ; | |||
$this->em = $em; | |||
} | |||
public function getCheapestProduct($productFamily) | |||
@@ -53,4 +60,87 @@ class ProductFamilyUtils | |||
} | |||
} | |||
public function processBeforePersistProductFamily($productFamily, $editForm=false, $clone =false){ | |||
if($editForm){ | |||
$this->processReductionCatalog($productFamily, $editForm); | |||
$this->processCategories($productFamily); | |||
} | |||
$this->processProducts($productFamily, $clone); | |||
$this->processPrice($productFamily); | |||
return $productFamily; | |||
} | |||
protected function processReductionCatalog($entity, $editForm) | |||
{ | |||
$reductionCatalog = $editForm->get('reductionCatalog')->getData(); | |||
if ($reductionCatalog instanceof ReductionCatalogInterface) { | |||
if ($reductionCatalog->getValue() && $reductionCatalog->getBehaviorTaxRate() && $reductionCatalog->getUnit()) { | |||
$reductionCatalog->setMerchant($entity->getMerchant()); | |||
$reductionCatalog->setStatus($editForm->get('activeReductionCatalog')->getData()); | |||
$reductionCatalog->setProductFamily($entity); | |||
$this->em->persist($reductionCatalog); | |||
} | |||
} | |||
} | |||
protected function processPrice($entity) | |||
{ | |||
if ($entity->getBehaviorPrice() == 'by-piece') { | |||
$entity->setPriceByRefUnit(null); | |||
$entity->setBuyingPriceByRefUnit(null); | |||
} else if ($entity->getBehaviorPrice() == 'by-reference-unit') { | |||
$entity->setPrice(null); | |||
$entity->setBuyingPrice(null); | |||
} | |||
} | |||
protected function processProducts($entity, $clone = false) | |||
{ | |||
//si il existe un et un seul produit pour ce product family n'ajoute rien supprime rien | |||
if (count($entity->getProducts()) == 0) { | |||
$product = new Product(); | |||
$product->setProductFamily($entity); | |||
$this->em->persist($product); | |||
$entity->addProduct($product); | |||
} else { | |||
foreach ($entity->getProducts() as $i => $product) { | |||
if ($clone) { | |||
$newProduct = clone $product; | |||
$newProduct->setProductFamily($entity); | |||
$this->em->persist($newProduct); | |||
$entity->addProduct($newProduct); | |||
} else { | |||
$product->setProductFamily($entity); | |||
$this->em->persist($product); | |||
$entity->addProduct($product); | |||
} | |||
} | |||
} | |||
} | |||
protected function processCategories(ProductFamilyInterface $entity) | |||
{ | |||
$productCategoryRepository = $this->em->getRepository(ProductCategoryInterface::class); | |||
$productCategories = $entity->getProductCategories(); | |||
$entity->initProductCategories(); | |||
foreach ($productCategories as $key => $bool) { | |||
if (is_bool($bool) && $bool) { | |||
if (strpos($key, 'category_children_') !== false) { | |||
$idCategory = (int)str_replace('category_children_', '', $key); | |||
} else { | |||
$idCategory = (int)str_replace('category_', '', $key); | |||
} | |||
$category = $productCategoryRepository->find($idCategory); | |||
$entity->addProductCategory($category); | |||
} | |||
} | |||
} | |||
} |
@@ -9,9 +9,12 @@ use Geocoder\Model\Coordinates; | |||
use Geocoder\Provider\Addok\Addok; | |||
use Geocoder\Query\GeocodeQuery; | |||
use Geocoder\Query\ReverseQuery; | |||
use Lc\ShopBundle\Context\ImageInterface; | |||
use Lc\ShopBundle\Context\MerchantUtilsInterface; | |||
use Lc\ShopBundle\Context\PageInterface; | |||
use Lc\ShopBundle\Context\PointSaleInterface; | |||
use Lc\ShopBundle\Context\ProductFamilyInterface; | |||
use Lc\ShopBundle\Context\ProductFamilyUtilsInterface; | |||
use Lc\ShopBundle\Context\ReminderInterface; | |||
use Lc\ShopBundle\Context\TaxRateInterface; | |||
use Lc\ShopBundle\Context\UnitInterface; | |||
@@ -502,4 +505,47 @@ class Utils | |||
return $this->parameterBag->get('app.path.images'); | |||
} | |||
public function duplicateEntity($entity){ | |||
$newEntity = clone $entity ; | |||
if($newEntity instanceof ImageInterface){ | |||
$this->duplicateImage($entity); | |||
$newEntity->setImage(null); | |||
} | |||
if($newEntity instanceof ProductFamilyInterface){ | |||
$this->productFamilyUtils->processBeforePersistProductFamily($newEntity); | |||
} | |||
$this->em->persist($newEntity) ; | |||
$this->em->flush(); | |||
return $newEntity; | |||
} | |||
public function duplicateImage($entity, $folder = false){ | |||
$basePath = $this->parameterBag->get('kernel.project_dir').'/public/uploads/images/' ; | |||
if($entity->getImage() && file_exists($basePath.$entity->getImage())) { | |||
dump(pathinfo($basePath.$entity->getImage())); | |||
} | |||
die(); | |||
$newImage = md5(uniqid()).'.jpg'; | |||
if($folder) $newImage = $folder.'/'.$newImage; | |||
if($entity->getImage() && file_exists($basePath.$entity->getImage())) { | |||
copy($basePath.$entity->getImage(), $basePath . $newImage); | |||
$entity->setImage($newImage); | |||
}else{ | |||
$entity->setImage(null); | |||
} | |||
return $entity; | |||
} | |||
} |
@@ -8,6 +8,7 @@ use Lc\ShopBundle\Context\OrderUtilsInterface; | |||
use Lc\ShopBundle\Context\PriceUtilsInterface; | |||
use Lc\ShopBundle\Context\ProductFamilyUtilsInterface; | |||
use Lc\ShopBundle\Context\Services\StatisticsUtilsInterface; | |||
use League\Flysystem\Util; | |||
class UtilsManager | |||
{ | |||
@@ -37,7 +38,8 @@ class UtilsManager | |||
DocumentUtils $documentUtils, | |||
MailUtils $mailUtils, | |||
TicketUtils $ticketUtils, | |||
PointLocationUtils $pointLocationUtils | |||
PointLocationUtils $pointLocationUtils, | |||
UtilsProcess $utilsProcess | |||
) | |||
{ | |||
$this->utils = $utils ; | |||
@@ -52,6 +54,7 @@ class UtilsManager | |||
$this->mailUtils = $mailUtils ; | |||
$this->ticketUtils = $ticketUtils ; | |||
$this->pointLocationUtils = $pointLocationUtils ; | |||
$this->utilsProcess = $utilsProcess ; | |||
} | |||
public function getUtils(): Utils | |||
@@ -114,4 +117,9 @@ class UtilsManager | |||
return $this->pointLocationUtils ; | |||
} | |||
public function getUtilsProcess(): UtilsProcess | |||
{ | |||
return $this->utilsProcess ; | |||
} | |||
} |
@@ -0,0 +1,107 @@ | |||
<?php | |||
namespace Lc\ShopBundle\Services; | |||
use Cocur\Slugify\Slugify; | |||
use Doctrine\ORM\EntityManagerInterface; | |||
use EasyCorp\Bundle\EasyAdminBundle\Configuration\ConfigManager; | |||
use Geocoder\Model\Coordinates; | |||
use Geocoder\Provider\Addok\Addok; | |||
use Geocoder\Query\GeocodeQuery; | |||
use Geocoder\Query\ReverseQuery; | |||
use Lc\ShopBundle\Context\ImageInterface; | |||
use Lc\ShopBundle\Context\MerchantUtilsInterface; | |||
use Lc\ShopBundle\Context\PageInterface; | |||
use Lc\ShopBundle\Context\PointSaleInterface; | |||
use Lc\ShopBundle\Context\ProductFamilyInterface; | |||
use Lc\ShopBundle\Context\ProductFamilyUtilsInterface; | |||
use Lc\ShopBundle\Context\ReminderInterface; | |||
use Lc\ShopBundle\Context\TaxRateInterface; | |||
use Lc\ShopBundle\Context\UnitInterface; | |||
use Lc\ShopBundle\Context\UserInterface; | |||
use Lc\ShopBundle\Context\UserPointSaleInterface; | |||
use Liip\ImagineBundle\Imagine\Cache\CacheManager; | |||
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; | |||
use Symfony\Component\HttpClient\HttplugClient; | |||
use Symfony\Component\HttpFoundation\ParameterBag; | |||
use Symfony\Component\HttpFoundation\Session\SessionInterface; | |||
use Symfony\Contracts\Translation\TranslatorInterface; | |||
class UtilsProcess | |||
{ | |||
protected $em; | |||
protected $parameterBag; | |||
protected $merchantUtils; | |||
protected $productFamilyUtils; | |||
public function __construct(EntityManagerInterface $em, ParameterBagInterface $parameterBag, ProductFamilyUtilsInterface $productFamilyUtils) | |||
{ | |||
$this->em = $em; | |||
$this->parameterBag = $parameterBag; | |||
$this->productFamilyUtils = $productFamilyUtils; | |||
} | |||
public function duplicateEntity($entity, $flush = true) | |||
{ | |||
$newEntity = clone $entity; | |||
if ($newEntity instanceof ImageInterface) { | |||
$newEntity = $this->duplicateImage($newEntity); | |||
} | |||
if ($newEntity instanceof ProductFamilyInterface) { | |||
$newEntity = $this->productFamilyUtils->processBeforePersistProductFamily($newEntity, false, true); | |||
} | |||
if(method_exists($newEntity, 'getAddress') && is_object($newEntity->getAddress())){ | |||
$address = $newEntity->getAddress(); | |||
$newAddress = $this->duplicateEntity($address); | |||
$newEntity->setAddress($newAddress); | |||
$this->em->persist($newAddress); | |||
} | |||
$this->em->persist($newEntity); | |||
if($flush){ | |||
$this->em->flush(); | |||
} | |||
return $newEntity; | |||
} | |||
public function duplicateEntityToOtherHub($entity, $hub){ | |||
$newEntity = $this->duplicateEntity($entity); | |||
if ($hub) { | |||
$newEntity->setMerchant($hub); | |||
} | |||
$this->em->persist($newEntity) ; | |||
$this->em->flush() ; | |||
return $newEntity; | |||
} | |||
public function duplicateImage($entity, $folder = false) | |||
{ | |||
$basePath = $this->parameterBag->get('kernel.project_dir') . '/public/uploads/images/'; | |||
if ($entity->getImage() && file_exists($basePath . $entity->getImage())) { | |||
$extension = (pathinfo($basePath . $entity->getImage(), PATHINFO_EXTENSION)); | |||
if ($extension == "jpg" || $extension == "png" || $extension == "gif") { | |||
$newImage = md5(uniqid()) . '.' . $extension; | |||
if ($folder) $newImage = $folder . '/' . $newImage; | |||
copy($basePath . $entity->getImage(), $basePath . $newImage); | |||
$entity->setImage($newImage); | |||
} | |||
} else { | |||
$entity->setImage(null); | |||
} | |||
return $entity; | |||
} | |||
} |