@@ -321,6 +321,20 @@ abstract class ProductFamily extends AbstractDocumentEntity implements ProductPr | |||
return $this->products; | |||
} | |||
public function getProductsOnline(): Collection | |||
{ | |||
$products = $this->getProducts() ; | |||
$productsOnlineArray = new ArrayCollection() ; | |||
foreach($products as $product) { | |||
if($product->getStatus() == 1) { | |||
$productsOnlineArray[] = $product ; | |||
} | |||
} | |||
return $productsOnlineArray ; | |||
} | |||
public function addProduct(ProductInterface $product): self | |||
{ | |||
if (!$this->products->contains($product)) { | |||
@@ -759,11 +773,13 @@ abstract class ProductFamily extends AbstractDocumentEntity implements ProductPr | |||
$products = $this->getProducts(); | |||
foreach ($products as $product) { | |||
$titleProduct = $product->getTitleInherited(); | |||
if (!isset($arrayProductsGroupByTitle[$titleProduct])) { | |||
$arrayProductsGroupByTitle[$titleProduct] = []; | |||
if($product->getStatus() == 1) { | |||
$titleProduct = $product->getTitleInherited(); | |||
if (!isset($arrayProductsGroupByTitle[$titleProduct])) { | |||
$arrayProductsGroupByTitle[$titleProduct] = []; | |||
} | |||
$arrayProductsGroupByTitle[$titleProduct][] = $product; | |||
} | |||
$arrayProductsGroupByTitle[$titleProduct][] = $product; | |||
} | |||
return $arrayProductsGroupByTitle; |
@@ -40,6 +40,7 @@ class ProductFamilyRepository extends BaseRepository implements DefaultRepositor | |||
{ | |||
$query = $this->findByMerchantQuery() ; | |||
$query->andWhere('e.slug = :slug')->setParameter('slug',$slug) ; | |||
$query->andWhere('e.status = 1'); | |||
return $query->getQuery()->getOneOrNullResult() ; | |||
} | |||
@@ -69,7 +69,6 @@ class OrderUtils | |||
public function createOrderShop($params) | |||
{ | |||
//TODO vérifier que l'utilisateur n'a pas déjà une commande en cours | |||
$orderShop = new OrderShop(); | |||
@@ -78,7 +77,7 @@ class OrderUtils | |||
$orderShopBelongTo = true; | |||
$orderShop->setUser($params['user']); | |||
} | |||
if (isset($params['visitor']) && $params['visitor']) { | |||
if (isset($params['visitor']) && $params['visitor'] && !$orderShop->getUser()) { | |||
$orderShopBelongTo = true; | |||
$orderShop->setVisitor($params['visitor']); | |||
} | |||
@@ -296,7 +295,17 @@ class OrderUtils | |||
if ($orderShop1 && $orderShop2) { | |||
foreach ($orderShop2->getOrderProducts() as $orderProduct) { | |||
$this->addOrderProduct($orderShop1, $orderProduct); | |||
$orderProductAlreadyInCart = $this->hasOrderProductAlreadyInCart($orderShop1, $orderProduct) ; | |||
if($orderProductAlreadyInCart) { | |||
if($orderProduct->getQuantityOrder() > $orderProductAlreadyInCart->getQuantityOrder()) { | |||
$orderShop1->removeOrderProduct($orderProductAlreadyInCart) ; | |||
$this->addOrderProduct($orderShop1, $orderProduct); | |||
} | |||
} | |||
else { | |||
$this->addOrderProduct($orderShop1, $orderProduct); | |||
} | |||
if($persist) { | |||
$this->em->remove($orderProduct); | |||
@@ -314,6 +323,17 @@ class OrderUtils | |||
} | |||
public function hasOrderProductAlreadyInCart($orderShop, $orderProductTest) | |||
{ | |||
foreach($orderShop->getOrderProducts() as $orderProduct) { | |||
if($orderProduct->getProduct() == $orderProductTest->getProduct()) { | |||
return $orderProduct ; | |||
} | |||
} | |||
return false ; | |||
} | |||
public function groupOrderProductsByProductFamily($orderProducts) | |||
{ | |||
$orderProductsByProductFamily = []; |
@@ -3,6 +3,8 @@ | |||
namespace Lc\ShopBundle\Services\Order; | |||
use Lc\ShopBundle\Model\OrderStatus; | |||
trait OrderUtilsCartTrait | |||
{ | |||
public function getCartCurrent() | |||
@@ -31,7 +33,8 @@ trait OrderUtilsCartTrait | |||
if ($orderShopUser || $orderShopVisitor) { | |||
// merge | |||
if ($orderShopUser && $orderShopVisitor && $orderShopUser != $orderShopVisitor | |||
&& $orderShopVisitor->getOrderProducts() && count($orderShopVisitor->getOrderProducts())) { | |||
&& $orderShopVisitor->getOrderProducts() && count($orderShopVisitor->getOrderProducts()) | |||
&& $orderShopUser->getOrderStatus()->getAlias() == OrderStatus::ALIAS_CART) { | |||
$orderShop = $this->mergeOrderShops($orderShopUser, $orderShopVisitor); | |||
$this->utils->addFlash('success', "Votre panier visiteur vient d'être fusionné avec votre panier client."); | |||
} else { | |||
@@ -40,6 +43,7 @@ trait OrderUtilsCartTrait | |||
// set user | |||
if ($orderShop && $user && !$orderShop->getUser()) { | |||
$orderShop->setUser($user); | |||
$orderShop->setVisitor(null) ; | |||
$this->em->persist($orderShop); | |||
$this->em->flush(); | |||
} |
@@ -59,6 +59,10 @@ trait OrderUtilsStockTrait | |||
public function isProductAvailable(Product $product, $quantityOrder = 0, $checkCart = false, $orderShop = null) | |||
{ | |||
if($product->getStatus() != 1) { | |||
return false ; | |||
} | |||
if(!$orderShop) { | |||
$orderShop = $this->getCartCurrent() ; | |||
} |
@@ -40,7 +40,7 @@ class ProductFamilyUtils | |||
private function getCheapestOrMostExpensiveProduct($productFamily, $comparisonFunction, $returnSelfIfNotActiveProducts) | |||
{ | |||
$products = $productFamily->getProducts()->getValues() ; | |||
$products = $productFamily->getProductsOnline()->getValues() ; | |||
if (count($products) > 0) { | |||
usort($products, $comparisonFunction); | |||
return $products[0]; |