Saver::createPaymentAmazonpay()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 24
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 14
nc 1
nop 1
dl 0
loc 24
rs 9.7998
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\Order;
9
10
use ArrayObject;
11
use Generated\Shared\Transfer\AmazonpayPaymentTransfer;
12
use Generated\Shared\Transfer\QuoteTransfer;
13
use Generated\Shared\Transfer\SaveOrderTransfer;
14
use Orm\Zed\AmazonPay\Persistence\SpyPaymentAmazonpay;
15
use Orm\Zed\AmazonPay\Persistence\SpyPaymentAmazonpaySalesOrderItem;
16
use SprykerEco\Shared\AmazonPay\AmazonPayConfig;
17
18
class Saver implements SaverInterface
19
{
20
    /**
21
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
22
     * @param \Generated\Shared\Transfer\SaveOrderTransfer $saveOrderTransfer
23
     *
24
     * @return void
25
     */
26
    public function saveOrderPayment(QuoteTransfer $quoteTransfer, SaveOrderTransfer $saveOrderTransfer)
27
    {
28
        if ($quoteTransfer->getAmazonpayPayment() === null) {
29
            return;
30
        }
31
32
        $paymentAmazonpayEntity = $this->createPaymentAmazonpay($quoteTransfer->getAmazonpayPayment());
33
34
        $this->assignPaymentEntityToItems(
35
            $paymentAmazonpayEntity,
36
            $saveOrderTransfer->getOrderItems()
37
        );
38
    }
39
40
    /**
41
     * @param \Orm\Zed\AmazonPay\Persistence\SpyPaymentAmazonpay $paymentEntity
42
     * @param \ArrayObject|\Generated\Shared\Transfer\ItemTransfer[] $orderItems
43
     *
44
     * @return void
45
     */
46
    protected function assignPaymentEntityToItems(SpyPaymentAmazonpay $paymentEntity, ArrayObject $orderItems)
47
    {
48
        foreach ($orderItems as $itemTransfer) {
49
            $this->assignPaymentToOrderItem($paymentEntity->getIdPaymentAmazonpay(), $itemTransfer->getIdSalesOrderItem());
50
        }
51
    }
52
53
    /**
54
     * @param int $idPayment
55
     * @param int $orderItem
56
     *
57
     * @return \Orm\Zed\AmazonPay\Persistence\SpyPaymentAmazonpaySalesOrderItem
58
     */
59
    protected function assignPaymentToOrderItem($idPayment, $orderItem)
60
    {
61
        $entity = new SpyPaymentAmazonpaySalesOrderItem();
62
        $entity->setFkPaymentAmazonpay($idPayment)
63
            ->setFkSalesOrderItem($orderItem);
64
65
        $entity->save();
66
67
        return $entity;
68
    }
69
70
    /**
71
     * @param \Generated\Shared\Transfer\AmazonpayPaymentTransfer $paymentTransfer
72
     *
73
     * @return \Orm\Zed\AmazonPay\Persistence\SpyPaymentAmazonpay
74
     */
75
    protected function createPaymentAmazonpay(AmazonpayPaymentTransfer $paymentTransfer)
76
    {
77
        $paymentEntity = new SpyPaymentAmazonpay();
78
        $paymentEntity->setOrderReferenceId($paymentTransfer->getOrderReferenceId());
79
        $status = $this->getOrderStatus($paymentTransfer);
80
        $paymentEntity->setStatus($status);
81
        $paymentEntity->setSellerOrderId($paymentTransfer->getSellerOrderId());
82
83
        $paymentEntity->setAuthorizationReferenceId(
84
            $paymentTransfer->getAuthorizationDetails()->getAuthorizationReferenceId()
85
        );
86
87
        $paymentEntity->setAmazonAuthorizationId(
88
            $paymentTransfer->getAuthorizationDetails()->getAmazonAuthorizationId()
89
        );
90
91
        $paymentEntity->setRequestId(
92
            $paymentTransfer->getResponseHeader()->getRequestId()
93
        );
94
95
        $paymentEntity->setIsSandbox($paymentTransfer->getIsSandbox());
96
        $paymentEntity->save();
97
98
        return $paymentEntity;
99
    }
100
101
    /**
102
     * @param \Generated\Shared\Transfer\AmazonpayPaymentTransfer $paymentTransfer
103
     *
104
     * @return string
105
     */
106
    protected function getOrderStatus(AmazonpayPaymentTransfer $paymentTransfer)
107
    {
108
        if ($paymentTransfer->getAuthorizationDetails()->getIdList()) {
109
            return AmazonPayConfig::STATUS_COMPLETED;
110
        }
111
112
        return $paymentTransfer->getOrderReferenceStatus()->getState();
113
    }
114
}
115