ソースを参照

Merge branch 'develop' of https://gitea.laclic.fr/Laclic/LcShopBundle into develop

feature/export_comptable
Fab 4年前
コミット
9ac86a431a
2個のファイルの変更64行の追加26行の削除
  1. +22
    -3
      ShopBundle/Controller/Frontend/CartController.php
  2. +42
    -23
      ShopBundle/Services/OrderUtils.php

+ 22
- 3
ShopBundle/Controller/Frontend/CartController.php ファイルの表示

@@ -11,13 +11,18 @@ use Lc\ShopBundle\Context\OrderUtilsInterface;
use Lc\ShopBundle\Context\ProductFamilyInterface;
use Lc\ShopBundle\Context\ReductionCartInterface;
use Lc\ShopBundle\Model\OrderReductionCart;
use Lc\ShopBundle\Services\UserUtils;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGenerator;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Security;

class CartController extends BaseController
{
protected $orderUtils ;
protected $userUtils ;
protected $router ;
protected $productFamilyRepository ;
protected $orderProductRepository ;

@@ -25,21 +30,35 @@ class CartController extends BaseController
protected $orderProducts = [] ;


public function __construct(EntityManagerInterface $em, Security $security, MerchantUtilsInterface $merchantUtils, OrderUtilsInterface $orderUtils)
public function __construct(EntityManagerInterface $em, Security $security, MerchantUtilsInterface $merchantUtils, OrderUtilsInterface $orderUtils,
UserUtils $userUtils, UrlGeneratorInterface $router)
{
parent::__construct($em, $security, $merchantUtils);
$this->orderUtils = $orderUtils ;
$this->userUtils = $userUtils ;
$this->router = $router ;
$this->productFamilyRepository = $this->em->getRepository($this->em->getClassMetaData(ProductFamilyInterface::class)->getName()) ;
$this->orderProductRepository = $this->em->getRepository($this->em->getClassMetaData(OrderProductInterface::class)->getName()) ;
}

public function addProductFamily(Request $request)
{
$user = $this->security->getUser() ;
$visitor = $this->userUtils->getVisitorCurrent() ;

$return = [] ;
$data = $request->request->all() ;

if(isset($data['order_products']['id_product_family'])) {
$idProductFamily = $data['order_products']['id_product_family'] ;
$this->productFamily = $this->productFamilyRepository->find($idProductFamily) ;

// alerte si cookies non acceptés
if (!$user && !$visitor) {
$this->addFlash('error', 'Vous devez <a href="'.$this->router->generate('frontend_page', ['devAlias' => 'politique-de-confidentialite']).'">accepter les cookies</a> ou vous <a href="'.$this->router->generate('fos_user_security_login').'">connecter</a> pour ajouter un produit.');
return false ;
}

if($this->productFamily) {
$form = $this->createForm(OrderProductsType::class, ['id_product_family' => $this->productFamily->getId()]);
$form->handleRequest($request);
@@ -49,8 +68,8 @@ class CartController extends BaseController
$data = $form->getData() ;
foreach($data as $orderProduct) {
if($orderProduct instanceof OrderProductInterface) {
$this->orderUtils->addOrderProduct($orderShop, $orderProduct) ;
if($orderProduct->getQuantityOrder() > 0) {
$addOrderProduct = $this->orderUtils->addOrderProduct($orderShop, $orderProduct) ;
if($addOrderProduct && $orderProduct->getQuantityOrder() > 0) {
$this->orderProducts[] = $orderProduct ;
}
}

+ 42
- 23
ShopBundle/Services/OrderUtils.php ファイルの表示

@@ -33,10 +33,11 @@ class OrderUtils
protected $priceUtils;
protected $productFamilyUtils;
protected $documentUtils ;
protected $session ;

public function __construct(EntityManagerInterface $em, Security $security, UserUtils $userUtils,
MerchantUtilsInterface $merchantUtils, PriceUtils $priceUtils, ProductFamilyUtilsInterface $productFamilyUtils,
DocumentUtils $documentUtils)
DocumentUtils $documentUtils, SessionInterface $session)
{
$this->em = $em;
$this->security = $security;
@@ -46,6 +47,7 @@ class OrderUtils
$this->priceUtils = $priceUtils;
$this->productFamilyUtils = $productFamilyUtils;
$this->documentUtils = $documentUtils ;
$this->session = $session ;
}


@@ -73,23 +75,21 @@ class OrderUtils
}

if ($orderShopUser || $orderShopVisitor) {
if ($orderShopUser && $orderShopVisitor && $orderShopUser != $orderShopVisitor && $orderShopVisitor->getOrderProducts() && count($orderShopVisitor->getOrderProducts())) {
// merge
if ($orderShopUser && $orderShopVisitor && $orderShopUser != $orderShopVisitor
&& $orderShopVisitor->getOrderProducts() && count($orderShopVisitor->getOrderProducts())) {

$orderShop = $this->mergeOrderShops($orderShopUser, $orderShopVisitor);
$this->session->getFlashBag()->add('success', "Votre panier visiteur vient d'être fusionné avec votre panier client.");
} else {
}
else {
$orderShop = ($orderShopUser) ? $orderShopUser : $orderShopVisitor;
}
}

if (!$user && !$visitor) {
$this->session->getFlashBag()->add('error', 'Vous devez accepter les cookies ou vous connecter pour créer un panier.');
} else {
if (!$orderShop) {
$orderShop = $this->createOrderShop([
'user' => $user,
'visitor' => $visitor,
'merchant' => $this->merchantUtils->getMerchantCurrent()
]);
// set user
if($orderShop && $user && !$orderShop->getUser()) {
$orderShop->setUser($user) ;
$this->em->persist($orderShop) ;
$this->em->flush() ;
}
}

@@ -120,13 +120,26 @@ class OrderUtils
throw new \ErrorException('La commande doit être liée à un merchant.');
}

$orderShop = $this->setOrderStatus('cart', $orderShop);
$orderShop = $this->changeOrderStatus('cart', $orderShop);

return $orderShop;
}

public function addOrderProduct($orderShop, $orderProductAdd, $persist = true)
{
$return = false ;

$user = $this->security->getUser() ;
$visitor = $this->userUtils->getVisitorCurrent() ;

if(!$orderShop) {
$orderShop = $this->createOrderShop([
'user' => $user,
'visitor' => $visitor,
'merchant' => $this->merchantUtils->getMerchantCurrent()
]);
}

if ($orderProductAdd->getQuantityOrder() > 0) {
$updated = false;

@@ -160,6 +173,7 @@ class OrderUtils
}

$updated = true;
$return = true ;

break;
}
@@ -184,9 +198,12 @@ class OrderUtils
if ($persist) {
$this->em->flush();
}
}

$return = true ;
}
}
return $return ;
}

public function compareOrderProductReductionCatalog($orderProductReductionCatalog1, $orderProductReductionCatalog2)
@@ -218,14 +235,16 @@ class OrderUtils
public function getOrderProductsByParentCategory($orderShop = null)
{
$categoriesArray = [];
foreach ($orderShop->getOrderProducts() as $orderProduct) {
$productCategories = $orderProduct->getProduct()->getProductFamily()->getProductCategories();
$category = $productCategories[0]->getParentCategory();
$labelCategory = $category->getTitle();
if (!isset($categoriesArray[$labelCategory])) {
$categoriesArray[$labelCategory] = [];
if($orderShop) {
foreach ($orderShop->getOrderProducts() as $orderProduct) {
$productCategories = $orderProduct->getProduct()->getProductFamily()->getProductCategories();
$category = $productCategories[0]->getParentCategory();
$labelCategory = $category->getTitle();
if (!isset($categoriesArray[$labelCategory])) {
$categoriesArray[$labelCategory] = [];
}
$categoriesArray[$labelCategory][] = $orderProduct;
}
$categoriesArray[$labelCategory][] = $orderProduct;
}

return $categoriesArray;

読み込み中…
キャンセル
保存