CheckoutValidator.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Paypal\Helper\Shortcut;
  7. class CheckoutValidator implements ValidatorInterface
  8. {
  9. /**
  10. * @var \Magento\Checkout\Model\Session
  11. */
  12. private $_checkoutSession;
  13. /**
  14. * @var \Magento\Payment\Helper\Data
  15. */
  16. private $_paymentData;
  17. /**
  18. * @var ShortcutCheckoutValidator
  19. */
  20. private $_shortcutValidator;
  21. /**
  22. * @param \Magento\Checkout\Model\Session $checkoutSession
  23. * @param Validator $shortcutValidator
  24. * @param \Magento\Payment\Helper\Data $paymentData
  25. */
  26. public function __construct(
  27. \Magento\Checkout\Model\Session $checkoutSession,
  28. Validator $shortcutValidator,
  29. \Magento\Payment\Helper\Data $paymentData
  30. ) {
  31. $this->_checkoutSession = $checkoutSession;
  32. $this->_paymentData = $paymentData;
  33. $this->_shortcutValidator = $shortcutValidator;
  34. }
  35. /**
  36. * Validates shortcut
  37. *
  38. * @param string $code
  39. * @param bool $isInCatalog
  40. * @return bool
  41. */
  42. public function validate($code, $isInCatalog)
  43. {
  44. return $this->_shortcutValidator->isContextAvailable($code, $isInCatalog)
  45. && $this->_shortcutValidator->isPriceOrSetAvailable($isInCatalog)
  46. && $this->isMethodQuoteAvailable($code, $isInCatalog)
  47. && $this->isQuoteSummaryValid($isInCatalog);
  48. }
  49. /**
  50. * Checks payment method and quote availability
  51. *
  52. * @param string $paymentCode
  53. * @param bool $isInCatalog
  54. * @return bool
  55. */
  56. public function isMethodQuoteAvailable($paymentCode, $isInCatalog)
  57. {
  58. $quote = $isInCatalog ? null : $this->_checkoutSession->getQuote();
  59. // check payment method availability
  60. /** @var \Magento\Payment\Model\Method\AbstractMethod $methodInstance */
  61. $methodInstance = $this->_paymentData->getMethodInstance($paymentCode);
  62. if (!$methodInstance->isAvailable($quote)) {
  63. return false;
  64. }
  65. return true;
  66. }
  67. /**
  68. * Validates minimum quote amount and zero grand total
  69. *
  70. * @param bool $isInCatalog
  71. * @return bool
  72. */
  73. public function isQuoteSummaryValid($isInCatalog)
  74. {
  75. $quote = $isInCatalog ? null : $this->_checkoutSession->getQuote();
  76. // validate minimum quote amount and validate quote for zero grandtotal
  77. if (null !== $quote && (!$quote->validateMinimumAmount() || !$quote->getGrandTotal())) {
  78. return false;
  79. }
  80. return true;
  81. }
  82. }