From b9ff534ee74b9862097951c388ceda99b49335f4 Mon Sep 17 00:00:00 2001 From: Marija Date: Tue, 28 May 2024 16:44:37 +0200 Subject: [PATCH] Fix checking payment method availability ISSUE: CS-5483 --- .../Builders/CreateOrderRequestBuilder.php | 105 +++++++++--------- 1 file changed, 55 insertions(+), 50 deletions(-) diff --git a/Model/Api/Builders/CreateOrderRequestBuilder.php b/Model/Api/Builders/CreateOrderRequestBuilder.php index 9df8d2c..edb0180 100644 --- a/Model/Api/Builders/CreateOrderRequestBuilder.php +++ b/Model/Api/Builders/CreateOrderRequestBuilder.php @@ -24,6 +24,7 @@ use SeQura\Core\BusinessLogic\Domain\UIState\Services\UIStateService; use SeQura\Core\Infrastructure\ServiceRegister; use Sequra\Core\Services\BusinessLogic\ProductService; +use Throwable; /** * Class CreateOrderRequestBuilder @@ -82,19 +83,18 @@ class CreateOrderRequestBuilder implements \SeQura\Core\BusinessLogic\Domain\Ord private $orderFactory; public function __construct( - CartRepositoryInterface $quoteRepository, + CartRepositoryInterface $quoteRepository, ProductMetadataInterface $productMetadata, - ResourceInterface $moduleResource, - DeploymentConfig $deploymentConfig, - SqlVersionProvider $sqlVersionProvider, - ScopeConfigInterface $scopeConfig, - UrlInterface $urlBuilder, - string $cartId, - string $storeId, - ProductService $productService, - OrderFactory $orderFactory - ) - { + ResourceInterface $moduleResource, + DeploymentConfig $deploymentConfig, + SqlVersionProvider $sqlVersionProvider, + ScopeConfigInterface $scopeConfig, + UrlInterface $urlBuilder, + string $cartId, + string $storeId, + ProductService $productService, + OrderFactory $orderFactory + ) { $this->quoteRepository = $quoteRepository; $this->productMetadata = $productMetadata; $this->moduleResource = $moduleResource; @@ -117,54 +117,59 @@ public function build(): CreateOrderRequest public function isAllowedFor(GeneralSettingsResponse $generalSettingsResponse): bool { - $generalSettings = $generalSettingsResponse->toArray(); - $stateService = ServiceRegister::getService(UIStateService::class); - $isOnboarding = StoreContext::doWithStore($this->storeId, [$stateService, 'isOnboardingState'], [true]); - - if ($isOnboarding) { - return false; - } - - if ( - !empty($generalSettings['allowedIPAddresses']) && - !empty($ipAddress = $this->getCustomerIpAddress()) && - !in_array($ipAddress, $generalSettings['allowedIPAddresses'], true) - ) { - return false; - } - - if ( - empty($generalSettings['excludedProducts']) && - empty($generalSettings['excludedCategories']) - ) { - return true; - } - - $this->quote = $this->quoteRepository->getActive($this->cartId); - foreach ($this->quote->getAllVisibleItems() as $item) { - if ( - !empty($generalSettings['excludedProducts']) && - !empty($item->getSku()) && - (in_array($item->getProduct()->getData('sku'), $generalSettings['excludedProducts'], true) || - in_array($item->getProduct()->getSku(), $generalSettings['excludedProducts'], true)) - ) { + try { + $generalSettings = $generalSettingsResponse->toArray(); + $stateService = ServiceRegister::getService(UIStateService::class); + $isOnboarding = StoreContext::doWithStore($this->storeId, [$stateService, 'isOnboardingState'], [true]); + $this->quote = $this->quoteRepository->getActive($this->cartId); + $this->getMerchantId(); + if ($isOnboarding) { return false; } - if ($item->getIsVirtual()) { + if ( + !empty($generalSettings['allowedIPAddresses']) && + !empty($ipAddress = $this->getCustomerIpAddress()) && + !in_array($ipAddress, $generalSettings['allowedIPAddresses'], true) + ) { return false; } if ( - !empty($generalSettings['excludedCategories']) && - !empty(array_intersect($generalSettings['excludedCategories'], - $this->productService->getAllProductCategories($item->getProduct()->getCategoryIds()))) + empty($generalSettings['excludedProducts']) && + empty($generalSettings['excludedCategories']) ) { - return false; + return true; + } + + $this->quote = $this->quoteRepository->getActive($this->cartId); + foreach ($this->quote->getAllVisibleItems() as $item) { + if ( + !empty($generalSettings['excludedProducts']) && + !empty($item->getSku()) && + (in_array($item->getProduct()->getData('sku'), $generalSettings['excludedProducts'], true) || + in_array($item->getProduct()->getSku(), $generalSettings['excludedProducts'], true)) + ) { + return false; + } + + if ($item->getIsVirtual()) { + return false; + } + + if ( + !empty($generalSettings['excludedCategories']) && + !empty(array_intersect($generalSettings['excludedCategories'], + $this->productService->getAllProductCategories($item->getProduct()->getCategoryIds()))) + ) { + return false; + } } - } - return true; + return true; + } catch (Throwable $exception) { + return false; + } } private function generateCreateOrderRequest(): CreateOrderRequest