Exemple #1
0
 /**
  * Validate Product Rule Condition
  *
  * @param \Magento\Framework\Object $object
  * @return bool
  */
 public function validate(\Magento\Framework\Object $object)
 {
     //@todo reimplement this method when is fixed MAGETWO-5713
     /** @var \Magento\Catalog\Model\Product $product */
     $product = $object->getProduct();
     if (!$product instanceof \Magento\Catalog\Model\Product) {
         $product = $this->_productFactory->create()->load($object->getProductId());
     }
     $product->setQuoteItemQty($object->getQty())->setQuoteItemPrice($object->getPrice())->setQuoteItemRowTotal($object->getBaseRowTotal());
     return parent::validate($product);
 }
 /**
  * Retrieve identifier of block item
  *
  * @param \Magento\Framework\Object $item
  * @return int
  */
 public function getIdentifierId($item)
 {
     return $item->getProductId();
 }
Exemple #3
0
 /**
  * Prepares and render result of composite product configuration request
  *
  * The $configureResult variable holds either:
  *  - 'ok' = true, and 'product_id', 'buy_request', 'current_store_id', 'current_customer_id'
  *  - 'error' = true, and 'message' to show
  *
  * @param \Magento\Framework\Object $configureResult
  * @return \Magento\Framework\View\Result\Layout
  */
 public function renderConfigureResult(\Magento\Framework\Object $configureResult)
 {
     try {
         if (!$configureResult->getOk()) {
             throw new \Magento\Framework\Exception\LocalizedException(__($configureResult->getMessage()));
         }
         $currentStoreId = (int) $configureResult->getCurrentStoreId();
         if (!$currentStoreId) {
             $currentStoreId = $this->_storeManager->getStore()->getId();
         }
         $product = $this->productRepository->getById($configureResult->getProductId(), false, $currentStoreId);
         $this->_coreRegistry->register('current_product', $product);
         $this->_coreRegistry->register('product', $product);
         // Register customer we're working with
         $customerId = (int) $configureResult->getCurrentCustomerId();
         $this->_coreRegistry->register(RegistryConstants::CURRENT_CUSTOMER_ID, $customerId);
         // Prepare buy request values
         $buyRequest = $configureResult->getBuyRequest();
         if ($buyRequest) {
             $this->_catalogProduct->prepareProductOptions($product, $buyRequest);
         }
         $isOk = true;
         $productType = $product->getTypeId();
     } catch (\Exception $e) {
         $isOk = false;
         $productType = null;
         $this->_coreRegistry->register('composite_configure_result_error_message', $e->getMessage());
     }
     return $this->_initConfigureResultLayout($isOk, $productType);
 }
Exemple #4
0
 /**
  * Subtract ordered qty for product
  *
  * @param  \Magento\Framework\Object $item
  * @return $this
  * @throws \Magento\Framework\Model\Exception
  */
 public function registerItemSale(\Magento\Framework\Object $item)
 {
     $productId = $item->getProductId();
     if (!$productId) {
         throw new \Magento\Framework\Model\Exception(__('We cannot specify a product identifier for the order item.'));
     }
     /** @var Item $stockItem */
     $stockItem = $this->_stockItemFactory->create()->loadByProduct($productId);
     if ($this->stockItemService->isQty($this->getProductType($productId))) {
         if ($item->getStoreId()) {
             $stockItem->setStoreId($item->getStoreId());
         }
         if ($stockItem->checkQty($item->getQtyOrdered())) {
             $stockItem->subtractQty($item->getQtyOrdered());
             $stockItem->save();
         }
     }
     return $this;
 }
Exemple #5
0
 /**
  * Check availability of giftmessages for specified entity.
  *
  * @param string $type
  * @param \Magento\Framework\Object $entity
  * @param \Magento\Store\Model\Store|int|null $store
  * @return bool|string|null
  */
 public function isMessagesAvailable($type, \Magento\Framework\Object $entity, $store = null)
 {
     if ($type == 'items') {
         $items = $entity->getAllItems();
         if (!is_array($items) || empty($items)) {
             return $this->_scopeConfig->getValue(self::XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ITEMS, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $store);
         }
         if ($entity instanceof \Magento\Sales\Model\Quote) {
             $_type = $entity->getIsMultiShipping() ? 'address_item' : 'item';
         } else {
             $_type = 'order_item';
         }
         foreach ($items as $item) {
             if ($item->getParentItem()) {
                 continue;
             }
             if ($this->isMessagesAvailable($_type, $item, $store)) {
                 return true;
             }
         }
     } elseif ($type == 'item') {
         return $this->_getDependenceFromStoreConfig($entity->getProduct()->getGiftMessageAvailable(), $store);
     } elseif ($type == 'order_item') {
         return $this->_getDependenceFromStoreConfig($entity->getGiftMessageAvailable(), $store);
     } elseif ($type == 'address_item') {
         $storeId = is_numeric($store) ? $store : $this->_storeManager->getStore($store)->getId();
         if (!$this->isCached('address_item_' . $entity->getProductId())) {
             $this->setCached('address_item_' . $entity->getProductId(), $this->_productFactory->create()->setStoreId($storeId)->load($entity->getProductId())->getGiftMessageAvailable());
         }
         return $this->_getDependenceFromStoreConfig($this->getCached('address_item_' . $entity->getProductId()), $store);
     } else {
         return $this->_scopeConfig->getValue(self::XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ORDER, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $store);
     }
     return false;
 }
Exemple #6
0
 /**
  * @param \Magento\Framework\Object $row
  *
  * @return string
  */
 public function getRowUrl($row)
 {
     return $this->getUrl('catalog/product/edit', ['id' => $row->getProductId()]);
 }
Exemple #7
0
 /**
  * Prepares and render result of composite product configuration request
  *
  * The $configureResult variable holds either:
  *  - 'ok' = true, and 'product_id', 'buy_request', 'current_store_id', 'current_customer_id'
  *  - 'error' = true, and 'message' to show
  *
  * @param \Magento\Framework\Object $configureResult
  * @return void
  */
 public function renderConfigureResult(\Magento\Framework\Object $configureResult)
 {
     try {
         if (!$configureResult->getOk()) {
             throw new \Magento\Framework\Model\Exception($configureResult->getMessage());
         }
         $currentStoreId = (int) $configureResult->getCurrentStoreId();
         if (!$currentStoreId) {
             $currentStoreId = $this->_storeManager->getStore()->getId();
         }
         $product = $this->_productFactory->create()->setStoreId($currentStoreId)->load($configureResult->getProductId());
         if (!$product->getId()) {
             throw new \Magento\Framework\Model\Exception(__('The product is not loaded.'));
         }
         $this->_coreRegistry->register('current_product', $product);
         $this->_coreRegistry->register('product', $product);
         // Register customer we're working with
         $customerId = (int) $configureResult->getCurrentCustomerId();
         // TODO: Remove the customer model from the registry once all readers are refactored
         $customerModel = $this->_converter->loadCustomerModel($customerId);
         $this->_coreRegistry->register(RegistryConstants::CURRENT_CUSTOMER, $customerModel);
         $this->_coreRegistry->register(RegistryConstants::CURRENT_CUSTOMER_ID, $customerId);
         // Prepare buy request values
         $buyRequest = $configureResult->getBuyRequest();
         if ($buyRequest) {
             $this->_catalogProduct->prepareProductOptions($product, $buyRequest);
         }
         $isOk = true;
         $productType = $product->getTypeId();
     } catch (\Exception $e) {
         $isOk = false;
         $productType = null;
         $this->_coreRegistry->register('composite_configure_result_error_message', $e->getMessage());
     }
     $this->_initConfigureResultLayout($isOk, $productType);
     $this->_view->renderLayout();
 }