diff --git a/config/Zed/Oms/ComputopPayuCeeSingle01.xml b/config/Zed/Oms/ComputopPayuCeeSingle01.xml
index 0717ba674..3157c3844 100644
--- a/config/Zed/Oms/ComputopPayuCeeSingle01.xml
+++ b/config/Zed/Oms/ComputopPayuCeeSingle01.xml
@@ -42,6 +42,11 @@
authorized
+
+ new
+ authorized
+
+
authorize request
authorized
diff --git a/src/SprykerEco/Zed/Computop/Business/ComputopFacadeInterface.php b/src/SprykerEco/Zed/Computop/Business/ComputopFacadeInterface.php
index 30b4bcce3..563d7c566 100644
--- a/src/SprykerEco/Zed/Computop/Business/ComputopFacadeInterface.php
+++ b/src/SprykerEco/Zed/Computop/Business/ComputopFacadeInterface.php
@@ -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
*
diff --git a/src/SprykerEco/Zed/Computop/Business/Payment/Handler/Saver/Init/AbstractResponseSaver.php b/src/SprykerEco/Zed/Computop/Business/Payment/Handler/Saver/Init/AbstractResponseSaver.php
index 5bfa5f670..f31c455ed 100644
--- a/src/SprykerEco/Zed/Computop/Business/Payment/Handler/Saver/Init/AbstractResponseSaver.php
+++ b/src/SprykerEco/Zed/Computop/Business/Payment/Handler/Saver/Init/AbstractResponseSaver.php
@@ -76,7 +76,7 @@ protected function getPaymentEntity()
*
* @return string
*/
- protected function getOrderItemPaymentStatusFromComputopApiResponseHeaderTransfer(
+ protected function getOrderItemPaymentStatusFromResponseHeader(
ComputopApiResponseHeaderTransfer $computopApiResponseHeaderTransfer
): string {
if ($computopApiResponseHeaderTransfer->getStatus() === null) {
diff --git a/src/SprykerEco/Zed/Computop/Business/Payment/Handler/Saver/Init/PayuCeeSingleResponseSaver.php b/src/SprykerEco/Zed/Computop/Business/Payment/Handler/Saver/Init/PayuCeeSingleResponseSaver.php
index 4cb7cd26f..eeb607ee4 100644
--- a/src/SprykerEco/Zed/Computop/Business/Payment/Handler/Saver/Init/PayuCeeSingleResponseSaver.php
+++ b/src/SprykerEco/Zed/Computop/Business/Payment/Handler/Saver/Init/PayuCeeSingleResponseSaver.php
@@ -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;
@@ -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;
}
}
diff --git a/src/SprykerEco/Zed/Computop/Business/Payment/PaymentMethodByCurrencyFilter.php b/src/SprykerEco/Zed/Computop/Business/Payment/PaymentMethodByCurrencyFilter.php
index 7a659b5bf..4ef07f70c 100644
--- a/src/SprykerEco/Zed/Computop/Business/Payment/PaymentMethodByCurrencyFilter.php
+++ b/src/SprykerEco/Zed/Computop/Business/Payment/PaymentMethodByCurrencyFilter.php
@@ -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);
}
}
diff --git a/src/SprykerEco/Zed/Computop/Business/Processor/NotificationProcessor.php b/src/SprykerEco/Zed/Computop/Business/Processor/NotificationProcessor.php
index 18a18fff9..92ab3803c 100644
--- a/src/SprykerEco/Zed/Computop/Business/Processor/NotificationProcessor.php
+++ b/src/SprykerEco/Zed/Computop/Business/Processor/NotificationProcessor.php
@@ -73,7 +73,7 @@ protected function executeSaveComputopNotificationTransaction(
/**
* @param \Generated\Shared\Transfer\ComputopNotificationTransfer $computopNotificationTransfer
*
- * @return string
+ * @return string|null
*/
protected function getCurrentOrderItemEntityStatus(ComputopNotificationTransfer $computopNotificationTransfer): ?string
{
diff --git a/src/SprykerEco/Zed/Computop/Persistence/ComputopEntityManager.php b/src/SprykerEco/Zed/Computop/Persistence/ComputopEntityManager.php
index a3893fc9a..85890adaa 100644
--- a/src/SprykerEco/Zed/Computop/Persistence/ComputopEntityManager.php
+++ b/src/SprykerEco/Zed/Computop/Persistence/ComputopEntityManager.php
@@ -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;
@@ -32,10 +34,9 @@ public function savePaymentComputopNotification(ComputopNotificationTransfer $co
->filterByXId($computopNotificationTransfer->getXId())
->findOneOrCreate();
- $paymentComputopNotificationEntity->fromArray(
- $computopNotificationTransfer->modifiedToArray()
- );
- $paymentComputopNotificationEntity->save();
+ $paymentComputopNotificationEntity
+ ->fromArray($computopNotificationTransfer->modifiedToArray())
+ ->save();
}
/**
@@ -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()
@@ -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;
@@ -100,13 +96,6 @@ public function saveComputopPayuCeeSingleInitResponse(
->setPayId($computopApiResponseHeaderTransfer->getPayId())
->setXId($computopApiResponseHeaderTransfer->getXId())
->save();
-
- $this->savePaymentComputopDetailEntity(
- $paymentComputopEntity->getSpyPaymentComputopDetail(),
- $computopPayuCeeSingleInitResponseTransfer
- );
-
- $this->savePaymentComputopOrderItems($paymentComputopEntity->getSpyPaymentComputopOrderItems(), $orderItemsStatus);
}
/**
@@ -115,7 +104,7 @@ public function saveComputopPayuCeeSingleInitResponse(
*
* @return void
*/
- protected function savePaymentComputopDetailEntity(
+ public function updatePaymentComputopDetailEntityByComputopApiResponseHeaderTransfer(
SpyPaymentComputopDetail $paymentComputopDetailEntity,
ComputopPayuCeeSingleInitResponseTransfer $computopPayuCeeSingleInitResponseTransfer
): void {
@@ -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);
diff --git a/src/SprykerEco/Zed/Computop/Persistence/ComputopEntityManagerInterface.php b/src/SprykerEco/Zed/Computop/Persistence/ComputopEntityManagerInterface.php
index ec970a8e6..0478cd9e1 100644
--- a/src/SprykerEco/Zed/Computop/Persistence/ComputopEntityManagerInterface.php
+++ b/src/SprykerEco/Zed/Computop/Persistence/ComputopEntityManagerInterface.php
@@ -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
{
@@ -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;
}
diff --git a/src/SprykerEco/Zed/Computop/Persistence/Propel/Schema/spy_payment_computop.schema.xml b/src/SprykerEco/Zed/Computop/Persistence/Propel/Schema/spy_payment_computop.schema.xml
index 9b2de9ef5..04112d2ad 100644
--- a/src/SprykerEco/Zed/Computop/Persistence/Propel/Schema/spy_payment_computop.schema.xml
+++ b/src/SprykerEco/Zed/Computop/Persistence/Propel/Schema/spy_payment_computop.schema.xml
@@ -5,13 +5,13 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -31,90 +31,91 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -123,14 +124,14 @@
-
-
+
+
-
-
-
-
-
+
+
+
+
+
@@ -143,14 +144,14 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
+
@@ -164,7 +165,7 @@