Passed
Pull Request — feature/ECO-948-renaming-and-r... (#7)
by Andrey
04:36 queued 01:50
created

AuthorizeTransaction::updatePaymentEntity()   C

Complexity

Conditions 7
Paths 33

Size

Total Lines 31
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
eloc 19
nc 33
nop 1
dl 0
loc 31
rs 6.7272
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Apache OSL-2
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Transaction;
9
10
use Generated\Shared\Transfer\AmazonpayCallTransfer;
11
use SprykerEco\Shared\AmazonPay\AmazonPayConfig;
12
13
class AuthorizeTransaction extends AbstractAmazonpayTransaction
14
{
15
    /**
16
     * @param \Generated\Shared\Transfer\AmazonpayCallTransfer $amazonPayCallTransfer
17
     *
18
     * @return \Generated\Shared\Transfer\AmazonpayCallTransfer
19
     */
20
    public function execute(AmazonpayCallTransfer $amazonPayCallTransfer)
21
    {
22
        $this->updateAuthorizationReferenceId($amazonPayCallTransfer);
23
24
        $amazonPayCallTransfer = parent::execute($amazonPayCallTransfer);
25
26
        $this->updatePaymentEntity($amazonPayCallTransfer);
27
28
        return $amazonPayCallTransfer;
29
    }
30
31
    /**
32
     * @param \Generated\Shared\Transfer\AmazonpayCallTransfer $amazonpayCallTransfer
33
     *
34
     * @return string
35
     */
36
    protected function buildErrorCode(AmazonpayCallTransfer $amazonpayCallTransfer)
37
    {
38
        return AmazonPayConfig::PREFIX_AMAZONPAY_PAYMENT_ERROR .
39
        $amazonpayCallTransfer->getAmazonpayPayment()
40
            ->getAuthorizationDetails()
41
            ->getAuthorizationStatus()
42
            ->getReasonCode();
43
    }
44
45
    /**
46
     * @param \Generated\Shared\Transfer\AmazonpayCallTransfer $amazonPayCallTransfer
47
     *
48
     * @return void
49
     */
50
    protected function updateAuthorizationReferenceId(AmazonpayCallTransfer $amazonPayCallTransfer)
51
    {
52
        $authReferenceId = $this->generateOperationReferenceId($amazonPayCallTransfer);
53
        $amazonPayCallTransfer->getAmazonpayPayment()
54
            ->getAuthorizationDetails()
55
            ->setAuthorizationReferenceId($authReferenceId);
56
    }
57
58
    /**
59
     * @param \Generated\Shared\Transfer\AmazonpayCallTransfer $amazonPayCallTransfer
60
     *
61
     * @return void
62
     */
63
    protected function updatePaymentEntity(AmazonpayCallTransfer $amazonPayCallTransfer)
64
    {
65
        if (!$this->isPaymentSuccess($amazonPayCallTransfer)) {
66
            return;
67
        }
68
69
        $isPartialProcessing = $this->paymentEntity && $this->isPartialProcessing($this->paymentEntity, $amazonPayCallTransfer);
70
71
        if ($isPartialProcessing) {
72
            $this->paymentEntity = $this->paymentProcessor->duplicatePaymentEntity($this->paymentEntity);
73
        }
74
75
        $statusDetails = $amazonPayCallTransfer->getAmazonpayPayment()
76
            ->getAuthorizationDetails()
77
            ->getAuthorizationStatus();
78
79
        if ($statusDetails->getState() === AmazonPayConfig::STATUS_DECLINED) {
80
            $amazonPayCallTransfer->getAmazonpayPayment()->getResponseHeader()
81
                ->setIsSuccess(false)
82
                ->setErrorCode($this->buildErrorCode($amazonPayCallTransfer));
83
        }
84
85
        if ($this->paymentEntity) {
86
            $this->paymentEntity->setStatus($statusDetails->getState());
87
            $this->paymentEntity->save();
88
        }
89
90
        if ($isPartialProcessing) {
91
            $this->paymentProcessor->assignAmazonpayPaymentToItems(
92
                $this->paymentEntity,
93
                $amazonPayCallTransfer
94
            );
95
        }
96
    }
97
}
98