![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/cartforge.co/vendor/magento/module-sales/Block/Adminhtml/Order/Create/Items/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Sales\Block\Adminhtml\Order\Create\Items; use Magento\Catalog\Model\Product\Attribute\Source\Status as ProductStatus; use Magento\CatalogInventory\Api\StockRegistryInterface; use Magento\CatalogInventory\Api\StockStateInterface; use Magento\Framework\App\ObjectManager; use Magento\Framework\Pricing\PriceCurrencyInterface; use Magento\Framework\Session\SessionManagerInterface; use Magento\Quote\Model\Quote\Item; use Magento\Catalog\Helper\Data as CatalogHelper; /** * Adminhtml sales order create items grid block * @api * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @since 100.0.2 */ class Grid extends \Magento\Sales\Block\Adminhtml\Order\Create\AbstractCreate { /** * Flag to check can items be move to customer storage * * @var bool */ protected $_moveToCustomerStorage = true; /** * @var \Magento\Tax\Helper\Data */ protected $_taxData; /** * @var \Magento\Wishlist\Model\WishlistFactory */ protected $_wishlistFactory; /** * @var \Magento\GiftMessage\Model\Save */ protected $_giftMessageSave; /** * @var \Magento\Tax\Model\Config */ protected $_taxConfig; /** * @var \Magento\GiftMessage\Helper\Message */ protected $_messageHelper; /** * @var StockRegistryInterface */ protected $stockRegistry; /** * @var StockStateInterface */ protected $stockState; /** * @param \Magento\Backend\Block\Template\Context $context * @param \Magento\Backend\Model\Session\Quote $sessionQuote * @param \Magento\Sales\Model\AdminOrder\Create $orderCreate * @param PriceCurrencyInterface $priceCurrency * @param \Magento\Wishlist\Model\WishlistFactory $wishlistFactory * @param \Magento\GiftMessage\Model\Save $giftMessageSave * @param \Magento\Tax\Model\Config $taxConfig * @param \Magento\Tax\Helper\Data $taxData * @param \Magento\GiftMessage\Helper\Message $messageHelper * @param StockRegistryInterface $stockRegistry * @param StockStateInterface $stockState * @param array $data * @param CatalogHelper|null $catalogHelper * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Backend\Block\Template\Context $context, \Magento\Backend\Model\Session\Quote $sessionQuote, \Magento\Sales\Model\AdminOrder\Create $orderCreate, PriceCurrencyInterface $priceCurrency, \Magento\Wishlist\Model\WishlistFactory $wishlistFactory, \Magento\GiftMessage\Model\Save $giftMessageSave, \Magento\Tax\Model\Config $taxConfig, \Magento\Tax\Helper\Data $taxData, \Magento\GiftMessage\Helper\Message $messageHelper, StockRegistryInterface $stockRegistry, StockStateInterface $stockState, array $data = [], ?CatalogHelper $catalogHelper = null ) { $this->_messageHelper = $messageHelper; $this->_wishlistFactory = $wishlistFactory; $this->_giftMessageSave = $giftMessageSave; $this->_taxConfig = $taxConfig; $this->_taxData = $taxData; $this->stockRegistry = $stockRegistry; $this->stockState = $stockState; $data['catalogHelper'] = $catalogHelper ?? ObjectManager::getInstance()->get(CatalogHelper::class); parent::__construct($context, $sessionQuote, $orderCreate, $priceCurrency, $data); } /** * Constructor * * @return void */ protected function _construct() { parent::_construct(); $this->setId('sales_order_create_search_grid'); } /** * Get items * * @return Item[] */ public function getItems() { $items = $this->getParentBlock()->getItems(); $oldSuperMode = $this->getQuote()->getIsSuperMode(); $this->getQuote()->setIsSuperMode(false); foreach ($items as $item) { // To dispatch inventory event sales_quote_item_qty_set_after, set item qty $item->setQty($item->getQty()); if (!$item->getMessage()) { //Getting product ids for stock item last quantity validation before grid display $stockItemToCheck = []; $childItems = $item->getChildren(); if (count($childItems)) { foreach ($childItems as $childItem) { $stockItemToCheck[] = $childItem->getProduct()->getId(); } } else { $stockItemToCheck[] = $item->getProduct()->getId(); } foreach ($stockItemToCheck as $productId) { $check = $this->stockState->checkQuoteItemQty( $productId, $item->getQty(), $item->getQty(), $item->getQty(), $this->getQuote()->getStore()->getWebsiteId() ); $item->setMessage($check->getMessage()); $item->setHasError($check->getHasError()); } } if ($item->getProduct()->getStatus() == ProductStatus::STATUS_DISABLED) { $item->setMessage(__('This product is disabled.')); $item->setHasError(true); } } $this->getQuote()->setIsSuperMode($oldSuperMode); return $items; } /** * Get session * * @return SessionManagerInterface */ public function getSession() { return $this->getParentBlock()->getSession(); } /** * Get item editable price * * @param Item $item * @return float */ public function getItemEditablePrice($item) { return $item->getCalculationPrice() * 1; } /** * Get original editable price * * @param Item $item * @return float */ public function getOriginalEditablePrice($item) { if ($item->hasOriginalCustomPrice()) { $result = $item->getOriginalCustomPrice() * 1; } elseif ($item->hasCustomPrice()) { $result = $item->getCustomPrice() * 1; } else { if ($this->_taxData->priceIncludesTax($this->getStore())) { $result = $item->getPriceInclTax() * 1; } else { $result = $item->getOriginalPrice() * 1; } } return $result; } /** * Get item original price * * @param Item $item * @return float */ public function getItemOrigPrice($item) { return $this->convertPrice($item->getPrice()); } /** * Check gift messages availability * * @param Item|null $item * @return bool|null|string */ public function isGiftMessagesAvailable($item = null) { if ($item === null) { return $this->_messageHelper->isMessagesAllowed('items', $this->getQuote(), $this->getStore()); } return $this->_messageHelper->isMessagesAllowed('item', $item, $this->getStore()); } /** * Check if allowed for gift message * * @param Item $item * @return bool */ public function isAllowedForGiftMessage($item) { return $this->_giftMessageSave->getIsAllowedQuoteItem($item); } /** * Check if we need display grid totals include tax * * @return bool */ public function displayTotalsIncludeTax() { $result = $this->_taxConfig->displayCartSubtotalInclTax($this->getStore()) || $this->_taxConfig->displayCartSubtotalBoth($this->getStore()); return $result; } /** * Get subtotal * * @return false|float */ public function getSubtotal() { $address = $this->getQuoteAddress(); if (!$this->displayTotalsIncludeTax()) { return $address->getSubtotal(); } if ($address->getSubtotalInclTax()) { return $address->getSubtotalInclTax(); } return $address->getSubtotal() + $address->getTaxAmount(); } /** * Get subtotal with discount * * @return float */ public function getSubtotalWithDiscount() { $address = $this->getQuoteAddress(); if ($this->displayTotalsIncludeTax()) { return $address->getSubtotal() + $address->getTaxAmount() + $address->getDiscountAmount() + $address->getDiscountTaxCompensationAmount(); } else { return $address->getSubtotal() + $address->getDiscountAmount(); } } /** * Get discount amount * * @return float */ public function getDiscountAmount() { return $this->getQuote()->getShippingAddress()->getDiscountAmount(); } /** * Retrieve quote address * * @return \Magento\Quote\Model\Quote\Address */ public function getQuoteAddress() { if ($this->getQuote()->isVirtual()) { return $this->getQuote()->getBillingAddress(); } else { return $this->getQuote()->getShippingAddress(); } } /** * Define if specified item has already applied custom price * * @param Item $item * @return bool */ public function usedCustomPriceForItem($item) { return $item->hasCustomPrice(); } /** * Define if custom price can be applied for specified item * * @param Item $item * @return bool */ public function canApplyCustomPrice($item) { return !$item->isChildrenCalculated(); } /** * Get qty title * * @param Item $item * @return \Magento\Framework\Phrase|string */ public function getQtyTitle($item) { $prices = $item->getProduct() ->getPriceInfo() ->getPrice(\Magento\Catalog\Pricing\Price\TierPrice::PRICE_CODE) ->getTierPriceList(); if ($prices) { $info = []; foreach ($prices as $data) { $price = $this->convertPrice($data['price']); $info[] = __('Buy %1 for price %2', $data['price_qty'], $price); } return implode(', ', $info); } else { return __('Item ordered qty'); } } /** * Get tier price html * * @param Item $item * @return string */ public function getTierHtml($item) { $html = ''; $prices = $item->getProduct()->getTierPrice(); if ($prices) { if ($item->getProductType() == \Magento\Catalog\Model\Product\Type::TYPE_BUNDLE) { $info = $this->_getBundleTierPriceInfo($prices); } else { $info = $this->_getTierPriceInfo($prices); } $html = implode('<br />', $info); } return $html; } /** * Get tier price info to display in grid for Bundle product * * @param array $prices * @return string[] */ protected function _getBundleTierPriceInfo($prices) { $info = []; foreach ($prices as $data) { $qty = $data['price_qty'] * 1; $info[] = __('%1 with %2 discount each', $qty, $data['price'] * 1 . '%'); } return $info; } /** * Get tier price info to display in grid * * @param array $prices * @return string[] */ protected function _getTierPriceInfo($prices) { $info = []; foreach ($prices as $data) { $qty = $data['price_qty'] * 1; $price = $this->convertPrice($data['price']); $info[] = __('%1 for %2', $qty, $price); } return $info; } /** * Get Custom Options of item * * @param Item $item * @return string * * @deprecated 101.0.0 */ public function getCustomOptions(Item $item) { $optionStr = ''; $this->_moveToCustomerStorage = true; if ($optionIds = $item->getOptionByCode('option_ids')) { foreach (explode(',', $optionIds->getValue() ?? '') as $optionId) { $option = $item->getProduct()->getOptionById($optionId); if ($option) { $optionStr .= $option->getTitle() . ':'; $quoteItemOption = $item->getOptionByCode('option_' . $option->getId()); $group = $option->groupFactory($option->getType()) ->setOption($option) ->setQuoteItemOption($quoteItemOption); $optionStr .= $group->getEditableOptionValue($quoteItemOption->getValue()); $optionStr .= "\n"; } } } return $optionStr; } /** * Get flag for rights to move items to customer storage * * @return bool * @SuppressWarnings(PHPMD.BooleanGetMethodName) */ public function getMoveToCustomerStorage() { return $this->_moveToCustomerStorage; } /** * Display subtotal including tax * * @param Item $item * @return string */ public function displaySubtotalInclTax($item) { if ($item->getTaxBeforeDiscount()) { $tax = $item->getTaxBeforeDiscount(); } else { $tax = $item->getTaxAmount() ? $item->getTaxAmount() : 0; } return $this->formatPrice($item->getRowTotal() + $tax); } /** * Display original price including tax * * @param Item $item * @return float */ public function displayOriginalPriceInclTax($item) { $tax = 0; if ($item->getTaxPercent()) { $tax = $item->getPrice() * ($item->getTaxPercent() / 100); } return $this->convertPrice($item->getPrice() + $tax / $item->getQty()); } /** * Display row total with discount including tax * * @param Item $item * @return string */ public function displayRowTotalWithDiscountInclTax($item) { $tax = $item->getTaxAmount() ? $item->getTaxAmount() : 0; return $this->formatPrice($item->getRowTotal() - $item->getDiscountAmount() + $tax); } /** * Get including/excluding tax message * * @return \Magento\Framework\Phrase */ public function getInclExclTaxMessage() { if ($this->_taxData->priceIncludesTax($this->getStore())) { return __('* - Enter custom price including tax'); } else { return __('* - Enter custom price excluding tax'); } } /** * Get store * * @return \Magento\Store\Model\Store */ public function getStore() { return $this->getQuote()->getStore(); } /** * Return html button which calls configure window * * @param Item $item * @return string */ public function getConfigureButtonHtml($item) { $product = $item->getProduct(); $options = ['label' => $this->escapeHtmlAttr(__('Configure'))]; if ($product->canConfigure()) { $options['onclick'] = sprintf('order.showQuoteItemConfiguration(%s)', $item->getId()); } else { $options['class'] = ' disabled'; $options['title'] = $this->escapeHtmlAttr(__('This product does not have any configurable options')); } return $this->getLayout()->createBlock( \Magento\Backend\Block\Widget\Button::class )->setData($options)->toHtml(); } /** * Get order item extra info block * * @param Item $item * @return \Magento\Framework\View\Element\AbstractBlock */ public function getItemExtraInfo($item) { return $this->getLayout()->getBlock('order_item_extra_info')->setItem($item); } /** * Returns whether moving to wishlist is allowed for this item * * @param Item $item * @return bool */ public function isMoveToWishlistAllowed($item) { return $item->getProduct()->isVisibleInSiteVisibility(); } /** * Retrieve collection of customer wishlists * * @return \Magento\Wishlist\Model\ResourceModel\Wishlist\Collection */ public function getCustomerWishlists() { return $this->_wishlistFactory->create()->getCollection()->filterByCustomerId($this->getCustomerId()); } /** * Get the item unit price html * * @param Item $item * @return string */ public function getItemUnitPriceHtml(Item $item) { $block = $this->getLayout()->getBlock('item_unit_price'); $block->setItem($item); return $block->toHtml(); } /** * Get the item row total html * * @param Item $item * @return string */ public function getItemRowTotalHtml(Item $item) { $block = $this->getLayout()->getBlock('item_row_total'); $block->setItem($item); return $block->toHtml(); } /** * Return html for row total with discount * * @param Item $item * @return string */ public function getItemRowTotalWithDiscountHtml(Item $item) { $block = $this->getLayout()->getBlock('item_row_total_with_discount'); $block->setItem($item); return $block->toHtml(); } }