/** * 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(); }
/** * 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); }
/** * 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; }
/** * 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; }
/** * @param \Magento\Framework\Object $row * * @return string */ public function getRowUrl($row) { return $this->getUrl('catalog/product/edit', ['id' => $row->getProductId()]); }
/** * 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(); }