Skip to content

Commit

Permalink
Fix checking payment method availability
Browse files Browse the repository at this point in the history
ISSUE: CS-5483
  • Loading branch information
MarijaIv committed May 28, 2024
1 parent 5f38345 commit b9ff534
Showing 1 changed file with 55 additions and 50 deletions.
105 changes: 55 additions & 50 deletions Model/Api/Builders/CreateOrderRequestBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand All @@ -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
Expand Down

0 comments on commit b9ff534

Please sign in to comment.