Exemplo n.º 1
0
 /**
  *
  * add an article in the current cart
  * @param \Thelia\Core\Event\Cart\CartEvent $event
  */
 public function addItem(CartEvent $event)
 {
     $cart = $event->getCart();
     $newness = $event->getNewness();
     $append = $event->getAppend();
     $quantity = $event->getQuantity();
     $currency = $cart->getCurrency();
     $customer = $cart->getCustomer();
     $discount = 0;
     if (null !== $customer && $customer->getDiscount() > 0) {
         $discount = $customer->getDiscount();
     }
     $productSaleElementsId = $event->getProductSaleElementsId();
     $productId = $event->getProduct();
     // Search for an identical item in the cart
     $event->getDispatcher()->dispatch(TheliaEvents::CART_FINDITEM, $event);
     $cartItem = $event->getCartItem();
     if ($cartItem === null || $newness) {
         $productSaleElements = ProductSaleElementsQuery::create()->findPk($productSaleElementsId);
         if (null !== $productSaleElements) {
             $productPrices = $productSaleElements->getPricesByCurrency($currency, $discount);
             $cartItem = $this->doAddItem($event->getDispatcher(), $cart, $productId, $productSaleElements, $quantity, $productPrices);
         }
     } elseif ($append && $cartItem !== null) {
         $cartItem->addQuantity($quantity)->save();
     }
     $event->setCartItem($cartItem);
 }
Exemplo n.º 2
0
 public function testFormatComplexQueryWithAliases()
 {
     $aliases = ["product.id" => "pid", "product_sale_elements.id" => "pseid", "product_sale_elements.quantity" => "stock"];
     $formatterData = new FormatterData($aliases);
     $query = ProductSaleElementsQuery::create()->useProductQuery()->addAsColumn("\"" . ProductTableMap::ID . "\"", ProductTableMap::ID)->endUse()->select([ProductSaleElementsTableMap::ID, ProductSaleElementsTableMap::QUANTITY])->limit(1);
     $formattedData = $formatterData->loadModelCriteria($query)->getData();
     /** @var array $data */
     $data = $query->findOne();
     $expectedData = [["pid" => $data["product.ID"], "pseid" => $data["product_sale_elements.ID"], "stock" => $data["product_sale_elements.QUANTITY"]]];
     $this->assertEquals($expectedData, $formattedData);
 }
Exemplo n.º 3
0
 public function testQuery()
 {
     new Translator(new Container());
     $export = new ProductPricesExport(new Container());
     $data = $export->buildData(Lang::getDefaultLanguage());
     $keys = ["attributes", "currency", "ean", "id", "price", "product_id", "promo", "promo_price", "title"];
     $rawData = $data->getData();
     $max = count($rawData);
     /**
      * If there's more that 50 entries,
      * just pick 50, it would be faster and as tested as if we test 1000 entries.
      */
     if ($max > 50) {
         $max = 50;
     }
     for ($i = 0; $i < $max; ++$i) {
         $row = $rawData[$i];
         $rowKeys = array_keys($row);
         $this->assertTrue(sort($rowKeys));
         $this->assertEquals($keys, $rowKeys);
         $pse = ProductSaleElementsQuery::create()->findPk($row["id"]);
         $this->assertNotNull($pse);
         $this->assertEquals($pse->getEanCode(), $row["ean"]);
         $this->assertEquals($pse->getPromo(), $row["promo"]);
         $currency = CurrencyQuery::create()->findOneByCode($row["currency"]);
         $this->assertNotNull($currency);
         $price = $pse->getPricesByCurrency($currency);
         // The substr is a patch for php 5.4 float round
         $this->assertEquals(round($price->getPrice(), 3), round($row["price"], 3));
         $this->assertEquals(round($price->getPromoPrice(), 3), round($row["promo_price"], 3));
         $this->assertEquals($pse->getProduct()->getTitle(), $row["title"]);
         $attributeCombinations = $pse->getAttributeCombinations();
         $attributes = [];
         foreach ($attributeCombinations as $attributeCombination) {
             if (!in_array($attributeCombination->getAttributeAv()->getTitle(), $attributes)) {
                 $attributes[] = $attributeCombination->getAttributeAv()->getTitle();
             }
         }
         $rowAttributes = explode(",", $row["attributes"]);
         sort($rowAttributes);
         sort($attributes);
         $this->assertEquals($attributes, $rowAttributes);
     }
 }