/** * * 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); }
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); }
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); } }