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 @@
- +