123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\Multishipping\Block\Checkout;
- use Magento\Customer\Model\Address\Config as AddressConfig;
- use Magento\Framework\Exception\LocalizedException;
- use Magento\Framework\Session\SessionManagerInterface;
- use Magento\Framework\View\Element\Template\Context;
- use Magento\Multishipping\Model\Checkout\Type\Multishipping;
- use Magento\Quote\Model\Quote\Address as QuoteAddress;
- use Magento\Sales\Api\OrderRepositoryInterface;
- use Magento\Sales\Model\Order\Address as OrderAddress;
- use Magento\Theme\Block\Html\Title;
- /**
- * Multi-shipping checkout results information
- *
- * @api
- * @since 100.2.1
- */
- class Results extends Success
- {
- /**
- * @var AddressConfig
- */
- private $addressConfig;
- /**
- * @var OrderRepositoryInterface
- */
- private $orderRepository;
- /**
- * @var SessionManagerInterface
- */
- private $session;
- /**
- * @param Context $context
- * @param Multishipping $multishipping
- * @param AddressConfig $addressConfig
- * @param OrderRepositoryInterface $orderRepository
- * @param SessionManagerInterface $session
- * @param array $data
- */
- public function __construct(
- Context $context,
- Multishipping $multishipping,
- AddressConfig $addressConfig,
- OrderRepositoryInterface $orderRepository,
- SessionManagerInterface $session,
- array $data = []
- ) {
- parent::__construct($context, $multishipping, $data);
- $this->addressConfig = $addressConfig;
- $this->orderRepository = $orderRepository;
- $this->session = $session;
- }
- /**
- * Returns shipping addresses from quote.
- *
- * @return array
- * @since 100.2.1
- */
- public function getQuoteShippingAddresses(): array
- {
- return $this->_multishipping->getQuote()->getAllShippingAddresses();
- }
- /**
- * Returns all failed addresses from quote.
- *
- * @return array
- * @since 100.2.1
- */
- public function getFailedAddresses(): array
- {
- $addresses = $this->getQuoteShippingAddresses();
- if ($this->getAddressError($this->getQuoteBillingAddress())) {
- $addresses[] = $this->getQuoteBillingAddress();
- }
- return $addresses;
- }
- /**
- * Retrieve order shipping address.
- *
- * @param int $orderId
- * @return OrderAddress|null
- * @since 100.2.1
- */
- public function getOrderShippingAddress(int $orderId)
- {
- return $this->orderRepository->get($orderId)->getShippingAddress();
- }
- /**
- * Retrieve quote billing address.
- *
- * @return QuoteAddress
- * @since 100.2.1
- */
- public function getQuoteBillingAddress(): QuoteAddress
- {
- return $this->getCheckout()->getQuote()->getBillingAddress();
- }
- /**
- * Returns formatted shipping address from placed order.
- *
- * @param OrderAddress $address
- * @return string
- * @since 100.2.1
- */
- public function formatOrderShippingAddress(OrderAddress $address): string
- {
- return $this->getAddressOneline($address->getData());
- }
- /**
- * Returns formatted shipping address from quote.
- *
- * @param QuoteAddress $address
- * @return string
- * @since 100.2.1
- */
- public function formatQuoteShippingAddress(QuoteAddress $address): string
- {
- return $this->getAddressOneline($address->getData());
- }
- /**
- * Checks if address type is shipping.
- *
- * @param QuoteAddress $address
- * @return bool
- * @since 100.2.1
- */
- public function isShippingAddress(QuoteAddress $address): bool
- {
- return $address->getAddressType() === QuoteAddress::ADDRESS_TYPE_SHIPPING;
- }
- /**
- * Get unescaped address formatted as one line string.
- *
- * @param array $address
- * @return string
- */
- private function getAddressOneline(array $address): string
- {
- $renderer = $this->addressConfig->getFormatByCode('oneline')->getRenderer();
- return $renderer->renderArray($address);
- }
- /**
- * Returns address error.
- *
- * @param QuoteAddress $address
- * @return string
- * @since 100.2.1
- */
- public function getAddressError(QuoteAddress $address): string
- {
- $errors = $this->session->getAddressErrors();
- return $errors[$address->getId()] ?? '';
- }
- /**
- * Add title to block head.
- *
- * @throws LocalizedException
- * @return Success
- * @since 100.2.1
- */
- protected function _prepareLayout(): Success
- {
- /** @var Title $pageTitle */
- $pageTitle = $this->getLayout()->getBlock('page.main.title');
- if ($pageTitle) {
- $title = $this->getOrderIds() ? $pageTitle->getPartlySuccessTitle() : $pageTitle->getFailedTitle();
- $pageTitle->setPageTitle($title);
- }
- return parent::_prepareLayout();
- }
- }
|