Exemplo n.º 1
0
 protected function getTestOrder($new_order = false)
 {
     xdebug_stop_code_coverage(false);
     if ($this->order && !$new_order) {
         return $this->order;
     }
     \XLite\Core\Auth::getInstance()->logoff();
     $this->testOrder['date'] = time();
     $order = \XLite\Core\Database::getRepo('XLite\\Model\\Order')->insert($this->testOrder);
     $order->setCurrency(\XLite\Core\Database::getRepo('XLite\\Model\\Currency')->find(840));
     if ($this->orderProducts) {
         foreach ($this->orderProducts as $sku) {
             $product = $this->getProductBySku($sku);
             $this->assertNotNull($product, 'Product with SKU ' . $sku . ' not found!');
             $item = new \XLite\Model\OrderItem();
             $item->setProduct($product);
             $item->setAmount(1);
             $order->addItem($item);
         }
     } else {
         $item = new \XLite\Model\OrderItem();
         $item->setProduct($this->getProduct());
         $item->setAmount(1);
         $order->addItem($item);
     }
     $list = \XLite\Core\Database::getRepo('XLite\\Model\\Profile')->findAll();
     $found = false;
     foreach ($list as $p) {
         if (!$p->getOrder() && $p->getLogin() == '*****@*****.**') {
             $order->setProfileCopy($p);
             $found = true;
             break;
         }
     }
     $this->assertTrue($found, 'test order\'s profile is not found');
     $order->calculate();
     \XLite\Core\Database::getRepo('XLite\\Model\\Order')->update($order);
     if (!$this->order || $new_order) {
         $this->orders[] = $order;
     }
     $this->order = $order;
     xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE);
     return $order;
 }
Exemplo n.º 2
0
 /**
  * Define specific data structure which will be sent in the triggering event (model.selected)
  *
  * @param mixed $item Model item
  *
  * @return string
  */
 protected function defineDataItem($item)
 {
     $data = parent::defineDataItem($item);
     $orderItem = new \XLite\Model\OrderItem();
     $orderItem->setProduct($item);
     if ($item->hasEditableAttributes()) {
         $orderItem->setAttributeValues($item->prepareAttributeValues());
     }
     $orderItem = $this->postprocessOrderItem($orderItem);
     $orderItem->setItemNetPrice(null);
     $orderItem->setPrice(null);
     $orderItem->calculate();
     $orderItem->renew();
     $data['clear_price'] = $orderItem->getClearPrice();
     $data['selected_price'] = $orderItem->getDisplayPrice();
     $data['max_qty'] = $orderItem->getProductAvailableAmount();
     $data['server_price_control'] = $orderItem->isPriceControlledServer();
     if ($item->hasEditableAttributes()) {
         // SKU may differ after attributes selection
         $data['selected_sku'] = $orderItem->getSku();
         $data['presentation'] = $this->formatItem($orderItem);
         $data['clear_price'] = $orderItem->getClearPrice();
         $data['server_price_control'] = $orderItem->isPriceControlledServer();
         if ($data['server_price_control']) {
             $data['selected_price'] = $orderItem->getDisplayPrice();
         }
         $widget = new \XLite\View\OrderItemAttributes(array('orderItem' => $orderItem, 'idx' => \XLite\Core\Request::getInstance()->idx ?: $orderItem->getItemId()));
         $widget->init();
         $data['selected_attributes'] = $widget->getContent();
         $widget = new \XLite\View\InvoiceAttributeValues(array('item' => $orderItem, 'displayVariative' => 1));
         $widget->init();
         $data['attributes_widget'] = $widget->getContent();
     }
     $this->orderItem = $orderItem;
     return $data;
 }
Exemplo n.º 3
0
Arquivo: Cart.php Projeto: kingsj/core
 /**
  * Prepare order item class for adding to cart.
  * This method takes \XLite\Model\Product class and amount and creates \XLite\Model\OrderItem.
  * This order item container will be added to cart in $this->addItem() method.
  *
  * @param \XLite\Model\Product $product Product class to add to cart
  * @param integer              $amount  Amount of product to add to cart
  *
  * @return \XLite\Model\OrderItem
  */
 protected function prepareOrderItem(\XLite\Model\Product $product, $amount)
 {
     $item = null;
     if ($product) {
         $item = new \XLite\Model\OrderItem();
         $item->setOrder($this->getCart());
         $item->setProduct($product);
         // We make amount correction if there is no such product with additional specifications
         // which are provided in order item container
         $newAmount = $this->correctAmountToAdd($item, $amount);
         if ($newAmount > 0) {
             $item->setAmount($newAmount);
         } else {
             $item->setOrder(null);
             $item = null;
         }
     }
     return $item;
 }
Exemplo n.º 4
0
 /**
  * Prepare order item class for adding to cart.
  * This method takes \XLite\Model\Product class and amount and creates \XLite\Model\OrderItem.
  * This order item container will be added to cart in $this->addItem() method.
  *
  * @param \XLite\Model\Product $product Product class to add to cart OPTIOANL
  * @param integer              $amount  Amount of product to add to cart OPTIONAL
  *
  * @return \XLite\Model\OrderItem
  */
 protected function prepareOrderItem(\XLite\Model\Product $product = null, $amount = null)
 {
     $item = null;
     if ($product) {
         $item = new \XLite\Model\OrderItem();
         $item->setOrder($this->getCart());
         $item->setAttributeValues($product->prepareAttributeValues(\XLite\Core\Request::getInstance()->attribute_values));
         $item->setProduct($product);
         // We make amount correction if there is no such product with additional specifications
         // which are provided in order item container
         $newAmount = $this->correctAmountToAdd($item, $amount);
         if (0 < $newAmount) {
             $item->setAmount($newAmount);
         } else {
             $item->setOrder(null);
             $item = null;
         }
     }
     return $item;
 }
Exemplo n.º 5
0
 /**
  * Get prepared order item by product ID
  *
  * @return array
  */
 protected function getPreparedItemByProductId()
 {
     $order = $this->getOrder();
     $request = \XLite\Core\Request::getInstance();
     $item = new \XLite\Model\OrderItem();
     $item->setOrder($order);
     $item->setProduct(\XLite\Core\Database::getRepo('XLite\\Model\\Product')->find($request->product_id));
     $attributes = $request->new;
     $attributes = reset($attributes);
     $attributeValues = array();
     if (!empty($attributes['attribute_values'])) {
         $attributeValues = $attributes['attribute_values'];
     }
     return array($item, $attributeValues);
 }
Exemplo n.º 6
0
 public function testGetEventFingerprint()
 {
     $order = $this->getTestOrder();
     $product = $this->getProduct();
     $product->getInventory()->setEnabled(false);
     $etalon = array('items' => array(array('item_id' => $order->getItems()->get(0)->getItemId(), 'key' => 'product.' . $product->getProductId(), 'object_type' => 'product', 'object_id' => $product->getProductId(), 'options' => array(), 'quantity' => 1)));
     $this->assertEquals($etalon, $order->getEventFingerprint(), 'check fingerprint');
     $item = new \XLite\Model\OrderItem();
     $item->setProduct($product);
     $item->setAmount(2);
     $item->setPrice($product->getPrice());
     $this->assertTrue($order->addItem($item), 'check add item');
     $etalon['items'][0]['quantity'] = 3;
     $this->assertEquals($etalon, $order->getEventFingerprint(), 'check fingerprint #2');
     $order->getItems()->clear();
     $etalon['items'] = array();
     $this->assertEquals($etalon, $order->getEventFingerprint(), 'check fingerprint (empty)');
 }
Exemplo n.º 7
0
 /**
  * prepareCart
  *
  * @return void
  * @access protected
  * @see    ____func_see____
  * @since  1.0.0
  */
 protected function prepareCart()
 {
     $cart = \XLite\Model\Cart::getInstance();
     $cart->setItems(new \Doctrine\Common\Collections\ArrayCollection());
     $item = new \XLite\Model\OrderItem();
     $item->setProduct($this->getProductWithInventory());
     $item->setAmount(self::CART_AMOUNT_WITH_INVENTORY);
     $cart->addItem($item);
     $item = new \XLite\Model\OrderItem();
     $item->setProduct($this->getProductWithoutInventory());
     $item->setAmount(self::CART_AMOUNT_WITHOUT_INVENTORY);
     $cart->addItem($item);
 }