Skip to content

Commit

Permalink
ECO-3623 - Changes after CR.
Browse files Browse the repository at this point in the history
  • Loading branch information
sadkivskyi committed Oct 15, 2021
1 parent 183c0a1 commit bac6c7f
Show file tree
Hide file tree
Showing 9 changed files with 224 additions and 173 deletions.
5 changes: 5 additions & 0 deletions config/Zed/Oms/ComputopPayuCeeSingle01.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@
<target>authorized</target>
</transition>

<transition condition="Computop/IsAuthorized" happy="true">
<source>new</source>
<target>authorized</target>
</transition>

<transition condition="Computop/IsAuthorized" happy="true">
<source>authorize request</source>
<target>authorized</target>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,10 @@ public function savePaydirektInitResponse(QuoteTransfer $quoteTransfer);
/**
* Specification:
* - Saves PayU CEE Single init response to the database.
* - Requires QuoteTransfer::payment to be set.
* - Requires QuoteTransfer::payment::computopPayuCeeSingle to be set.
* - Requires QuoteTransfer::payment::computopPayuCeeSingle::payuCeeSingleInitResponse to be set.
* - Requires QuoteTransfer::payment::computopPayuCeeSingle::payuCeeSingleInitResponse::header to be set.
*
* @api
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ protected function getPaymentEntity()
*
* @return string
*/
protected function getOrderItemPaymentStatusFromComputopApiResponseHeaderTransfer(
protected function getOrderItemPaymentStatusFromResponseHeader(
ComputopApiResponseHeaderTransfer $computopApiResponseHeaderTransfer
): string {
if ($computopApiResponseHeaderTransfer->getStatus() === null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
namespace SprykerEco\Zed\Computop\Business\Payment\Handler\Saver\Init;

use Generated\Shared\Transfer\ComputopPayuCeeSingleInitResponseTransfer;
use Generated\Shared\Transfer\ComputopPayuCeeSinglePaymentTransfer;
use Generated\Shared\Transfer\QuoteTransfer;
use SprykerEco\Zed\Computop\ComputopConfig;
use SprykerEco\Zed\Computop\Dependency\Facade\ComputopToOmsFacadeInterface;
Expand Down Expand Up @@ -44,66 +45,97 @@ public function __construct(
*/
public function save(QuoteTransfer $quoteTransfer): QuoteTransfer
{
if (
!$quoteTransfer->getPayment() ||
!$quoteTransfer->getPayment()->getComputopPayuCeeSingle() ||
!$quoteTransfer->getPayment()->getComputopPayuCeeSingle()->getPayuCeeSingleInitResponse()
) {
$computopPayuCeeSingleInitResponse = $this->getPayuCeeSingleInitResponseFromQuoteTransfer($quoteTransfer);
if (!$computopPayuCeeSingleInitResponse) {
return $quoteTransfer;
}

$computopPayuCeeSingleInitResponse = $quoteTransfer->getPayment()->getComputopPayuCeeSingle()->getPayuCeeSingleInitResponse();
if ($computopPayuCeeSingleInitResponse->getHeader()->getIsSuccess()) {
$orderItemStatus = $this->getOrderItemPaymentStatusFromInitResponse($computopPayuCeeSingleInitResponse);
$this->handleSaveTransaction($computopPayuCeeSingleInitResponse, $orderItemStatus);
$computopApiResponseHeaderTransfer = $computopPayuCeeSingleInitResponse->getHeaderOrFail()
->requireTransId()
->requirePayId()
->requireXid();

if (!$computopApiResponseHeaderTransfer->getIsSuccess()) {
return $quoteTransfer;
}

$this->setPaymentEntity($computopApiResponseHeaderTransfer->getTransId());
if (!$this->getPaymentEntity()) {
return $quoteTransfer;
}

$this->handleSaveTransaction($computopPayuCeeSingleInitResponse);

return $quoteTransfer;
}

/**
* @param \Generated\Shared\Transfer\ComputopPayuCeeSingleInitResponseTransfer $computopPayuCeeSingleInitResponseTransfer
* @param string $orderItemsStatus
*
* @return void
*/
protected function handleSaveTransaction(
ComputopPayuCeeSingleInitResponseTransfer $computopPayuCeeSingleInitResponseTransfer,
string $orderItemsStatus
ComputopPayuCeeSingleInitResponseTransfer $computopPayuCeeSingleInitResponseTransfer
): void {
$this->getTransactionHandler()->handleTransaction(function () use ($computopPayuCeeSingleInitResponseTransfer, $orderItemsStatus) {
$this->executeSavePaymentResponseTransaction($computopPayuCeeSingleInitResponseTransfer, $orderItemsStatus);
$this->getTransactionHandler()->handleTransaction(function () use ($computopPayuCeeSingleInitResponseTransfer) {
$this->executeSavePaymentResponseTransaction($computopPayuCeeSingleInitResponseTransfer);
});
}

/**
* @param \Generated\Shared\Transfer\ComputopPayuCeeSingleInitResponseTransfer $computopPayuCeeSingleInitResponseTransfer
* @param string $orderItemsStatus
*
* @return void
*/
protected function executeSavePaymentResponseTransaction(
ComputopPayuCeeSingleInitResponseTransfer $computopPayuCeeSingleInitResponseTransfer,
string $orderItemsStatus
ComputopPayuCeeSingleInitResponseTransfer $computopPayuCeeSingleInitResponseTransfer
): void {
$this->computopEntityManager->saveComputopPayuCeeSingleInitResponse(
$computopPayuCeeSingleInitResponseTransfer,
$orderItemsStatus
$this->computopEntityManager->updatePaymentComputopEntityByComputopApiResponseHeaderTransfer(
$computopPayuCeeSingleInitResponseTransfer->getHeader(),
$this->getPaymentEntity()
);

if ($this->getPaymentEntity()->getSpyPaymentComputopDetail()) {
$this->computopEntityManager->updatePaymentComputopDetailEntityByComputopApiResponseHeaderTransfer(
$this->getPaymentEntity()->getSpyPaymentComputopDetail(),
$computopPayuCeeSingleInitResponseTransfer
);
}

$this->computopEntityManager->updatePaymentComputopOrderItemsStatus(
$this->getPaymentEntity()->getSpyPaymentComputopOrderItems(),
$this->getOrderItemPaymentStatusFromResponseHeader($computopPayuCeeSingleInitResponseTransfer->getHeader())
);
}

/**
* @param \Generated\Shared\Transfer\ComputopPayuCeeSingleInitResponseTransfer $computopPayuCeeSingleInitResponseTransfer
* @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
*
* @return \Generated\Shared\Transfer\ComputopPayuCeeSingleInitResponseTransfer|null
*/
protected function getPayuCeeSingleInitResponseFromQuoteTransfer(QuoteTransfer $quoteTransfer): ?ComputopPayuCeeSingleInitResponseTransfer
{
$computopPayuCeeSinglePaymentTransfer = $this->getComputopPayuCeeSinglePaymentTransferFromQuote($quoteTransfer);
if (!($computopPayuCeeSinglePaymentTransfer && $computopPayuCeeSinglePaymentTransfer->getPayuCeeSingleInitResponse())) {
return null;
}

return $computopPayuCeeSinglePaymentTransfer->getPayuCeeSingleInitResponse();
}

/**
* @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
*
* @return string
* @return \Generated\Shared\Transfer\ComputopPayuCeeSinglePaymentTransfer|null
*/
protected function getOrderItemPaymentStatusFromInitResponse(ComputopPayuCeeSingleInitResponseTransfer $computopPayuCeeSingleInitResponseTransfer): string
protected function getComputopPayuCeeSinglePaymentTransferFromQuote(QuoteTransfer $quoteTransfer): ?ComputopPayuCeeSinglePaymentTransfer
{
$computopApiResponseHeaderTransfer = $computopPayuCeeSingleInitResponseTransfer->getHeader();
if ($computopApiResponseHeaderTransfer === null) {
return $this->config->getOmsStatusNew();
foreach ($quoteTransfer->getPayments() as $paymentTransfer) {
if ($paymentTransfer->getComputopPayuCeeSingle()) {
return $paymentTransfer->getComputopPayuCeeSingle();
}
}

return $this->getOrderItemPaymentStatusFromComputopApiResponseHeaderTransfer($computopApiResponseHeaderTransfer);
return $quoteTransfer->getPayment() ? $quoteTransfer->getPayment()->getComputopPayuCeeSingle() : null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -66,18 +66,15 @@ protected function isComputopAvailableMethod(
string $currencyCode,
array $availableCurrencies
): bool {
if (strpos($paymentMethodTransfer->getPaymentMethodKey(), static::COMPUTOP_PAYMENT_METHOD) === false) {
if (substr($paymentMethodTransfer->getPaymentMethodKey(), 0, 8) !== static::COMPUTOP_PAYMENT_METHOD) {
return true;
}

if (!isset($availableCurrencies[$paymentMethodTransfer->getPaymentMethodKey()])) {
$availableCurrencyForSelectedPaymentMethod = $availableCurrencies[$paymentMethodTransfer->getPaymentMethodKey()] ?? null;
if (!$availableCurrencyForSelectedPaymentMethod) {
return true;
}

if (in_array(strtoupper($currencyCode), $availableCurrencies[$paymentMethodTransfer->getPaymentMethodKey()], true)) {
return true;
}

return false;
return in_array(strtoupper($currencyCode), $availableCurrencyForSelectedPaymentMethod, true);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ protected function executeSaveComputopNotificationTransaction(
/**
* @param \Generated\Shared\Transfer\ComputopNotificationTransfer $computopNotificationTransfer
*
* @return string
* @return string|null
*/
protected function getCurrentOrderItemEntityStatus(ComputopNotificationTransfer $computopNotificationTransfer): ?string
{
Expand Down
47 changes: 18 additions & 29 deletions src/SprykerEco/Zed/Computop/Persistence/ComputopEntityManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@

namespace SprykerEco\Zed\Computop\Persistence;

use Generated\Shared\Transfer\ComputopApiResponseHeaderTransfer;
use Generated\Shared\Transfer\ComputopNotificationTransfer;
use Generated\Shared\Transfer\ComputopPayuCeeSingleInitResponseTransfer;
use Orm\Zed\Computop\Persistence\SpyPaymentComputop;
use Orm\Zed\Computop\Persistence\SpyPaymentComputopDetail;
use Propel\Runtime\Collection\ObjectCollection;
use Spryker\Zed\Kernel\Persistence\AbstractEntityManager;
Expand All @@ -32,10 +34,9 @@ public function savePaymentComputopNotification(ComputopNotificationTransfer $co
->filterByXId($computopNotificationTransfer->getXId())
->findOneOrCreate();

$paymentComputopNotificationEntity->fromArray(
$computopNotificationTransfer->modifiedToArray()
);
$paymentComputopNotificationEntity->save();
$paymentComputopNotificationEntity
->fromArray($computopNotificationTransfer->modifiedToArray())
->save();
}

/**
Expand All @@ -46,7 +47,7 @@ public function savePaymentComputopNotification(ComputopNotificationTransfer $co
*/
public function updatePaymentComputopOrderItemPaymentConfirmation(
ComputopNotificationTransfer $computopNotificationTransfer,
?string $orderItemsStatus
?string $orderItemsStatus = null
): bool {
/** @var \Orm\Zed\Computop\Persistence\SpyPaymentComputopOrderItem[]|\Propel\Runtime\Collection\ObjectCollection $paymentComputopOrderItemEntities */
$paymentComputopOrderItemEntities = $this->getFactory()
Expand All @@ -72,25 +73,20 @@ public function updatePaymentComputopOrderItemPaymentConfirmation(
}

/**
* @param \Generated\Shared\Transfer\ComputopPayuCeeSingleInitResponseTransfer $computopPayuCeeSingleInitResponseTransfer
* @param string $orderItemsStatus
* @param \Generated\Shared\Transfer\ComputopApiResponseHeaderTransfer $computopApiResponseHeaderTransfer
* @param \Orm\Zed\Computop\Persistence\SpyPaymentComputop|null $paymentComputopEntity
*
* @return void
*/
public function saveComputopPayuCeeSingleInitResponse(
ComputopPayuCeeSingleInitResponseTransfer $computopPayuCeeSingleInitResponseTransfer,
string $orderItemsStatus
public function updatePaymentComputopEntityByComputopApiResponseHeaderTransfer(
ComputopApiResponseHeaderTransfer $computopApiResponseHeaderTransfer,
?SpyPaymentComputop $paymentComputopEntity = null
): void {
$computopApiResponseHeaderTransfer = $computopPayuCeeSingleInitResponseTransfer->requireHeader()
->getHeader()
->requireTransId()
->requirePayId()
->requireXid();

$paymentComputopEntity = $this->getFactory()
->createPaymentComputopQuery()
->filterByTransId($computopApiResponseHeaderTransfer->getTransId())
->findOne();
if (!isset($paymentComputopEntity)) {
$paymentComputopEntity = $this->getFactory()->createPaymentComputopQuery()
->filterByTransId($computopApiResponseHeaderTransfer->getTransId())
->findOne();
}

if (!$paymentComputopEntity) {
return;
Expand All @@ -100,13 +96,6 @@ public function saveComputopPayuCeeSingleInitResponse(
->setPayId($computopApiResponseHeaderTransfer->getPayId())
->setXId($computopApiResponseHeaderTransfer->getXId())
->save();

$this->savePaymentComputopDetailEntity(
$paymentComputopEntity->getSpyPaymentComputopDetail(),
$computopPayuCeeSingleInitResponseTransfer
);

$this->savePaymentComputopOrderItems($paymentComputopEntity->getSpyPaymentComputopOrderItems(), $orderItemsStatus);
}

/**
Expand All @@ -115,7 +104,7 @@ public function saveComputopPayuCeeSingleInitResponse(
*
* @return void
*/
protected function savePaymentComputopDetailEntity(
public function updatePaymentComputopDetailEntityByComputopApiResponseHeaderTransfer(
SpyPaymentComputopDetail $paymentComputopDetailEntity,
ComputopPayuCeeSingleInitResponseTransfer $computopPayuCeeSingleInitResponseTransfer
): void {
Expand All @@ -134,7 +123,7 @@ protected function savePaymentComputopDetailEntity(
*
* @return void
*/
public function savePaymentComputopOrderItems(ObjectCollection $paymentComputopOrderItemEntities, string $paymentStatus): void
public function updatePaymentComputopOrderItemsStatus(ObjectCollection $paymentComputopOrderItemEntities, string $paymentStatus): void
{
foreach ($paymentComputopOrderItemEntities as $paymentComputopOrderItem) {
$paymentComputopOrderItem->setStatus($paymentStatus);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,12 @@

namespace SprykerEco\Zed\Computop\Persistence;

use Generated\Shared\Transfer\ComputopApiResponseHeaderTransfer;
use Generated\Shared\Transfer\ComputopNotificationTransfer;
use Generated\Shared\Transfer\ComputopPayuCeeSingleInitResponseTransfer;
use Orm\Zed\Computop\Persistence\SpyPaymentComputop;
use Orm\Zed\Computop\Persistence\SpyPaymentComputopDetail;
use Propel\Runtime\Collection\ObjectCollection;

interface ComputopEntityManagerInterface
{
Expand All @@ -27,17 +31,36 @@ public function savePaymentComputopNotification(ComputopNotificationTransfer $co
*/
public function updatePaymentComputopOrderItemPaymentConfirmation(
ComputopNotificationTransfer $computopNotificationTransfer,
?string $orderItemsStatus
?string $orderItemsStatus = null
): bool;

/**
* @param \Generated\Shared\Transfer\ComputopApiResponseHeaderTransfer $computopApiResponseHeaderTransfer
* @param \Orm\Zed\Computop\Persistence\SpyPaymentComputop|null $paymentComputopEntity
*
* @return void
*/
public function updatePaymentComputopEntityByComputopApiResponseHeaderTransfer(
ComputopApiResponseHeaderTransfer $computopApiResponseHeaderTransfer,
?SpyPaymentComputop $paymentComputopEntity = null
): void;

/**
* @param \Orm\Zed\Computop\Persistence\SpyPaymentComputopDetail $paymentComputopDetailEntity
* @param \Generated\Shared\Transfer\ComputopPayuCeeSingleInitResponseTransfer $computopPayuCeeSingleInitResponseTransfer
* @param string $orderItemsStatus
*
* @return void
*/
public function saveComputopPayuCeeSingleInitResponse(
ComputopPayuCeeSingleInitResponseTransfer $computopPayuCeeSingleInitResponseTransfer,
string $orderItemsStatus
public function updatePaymentComputopDetailEntityByComputopApiResponseHeaderTransfer(
SpyPaymentComputopDetail $paymentComputopDetailEntity,
ComputopPayuCeeSingleInitResponseTransfer $computopPayuCeeSingleInitResponseTransfer
): void;

/**
* @param \Orm\Zed\Computop\Persistence\SpyPaymentComputopOrderItem[]|\Propel\Runtime\Collection\ObjectCollection $paymentComputopOrderItemEntities
* @param string $paymentStatus
*
* @return void
*/
public function updatePaymentComputopOrderItemsStatus(ObjectCollection $paymentComputopOrderItemEntities, string $paymentStatus): void;
}
Loading

0 comments on commit bac6c7f

Please sign in to comment.