Passed
Pull Request — feature/eco-3656/dev-paypal-ex... (#40)
by
unknown
07:17
created

setPaymentEntity()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 1
dl 0
loc 3
rs 10
c 1
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
/**
4
 * MIT License
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace SprykerEco\Zed\Computop\Business\Payment\Handler\Saver\Complete;
9
10
use Generated\Shared\Transfer\ComputopApiPayPalExpressCompleteResponseTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...ompleteResponseTransfer was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
11
use Generated\Shared\Transfer\ComputopPayPalExpressInitResponseTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...essInitResponseTransfer was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
12
use Generated\Shared\Transfer\QuoteTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfer\QuoteTransfer was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
13
use Orm\Zed\Computop\Persistence\SpyPaymentComputop;
0 ignored issues
show
Bug introduced by
The type Orm\Zed\Computop\Persistence\SpyPaymentComputop was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
14
use Spryker\Zed\Kernel\Persistence\EntityManager\TransactionTrait;
15
use SprykerEco\Zed\Computop\ComputopConfig;
16
use SprykerEco\Zed\Computop\Dependency\Facade\ComputopToOmsFacadeInterface;
17
use SprykerEco\Zed\Computop\Persistence\ComputopQueryContainerInterface;
18
19
class PayPalExpressCompleteResponseSaver implements CompleteResponseSaverInterface
20
{
21
    use TransactionTrait;
22
23
    /**
24
     * @var \SprykerEco\Zed\Computop\Persistence\ComputopQueryContainerInterface $queryContainer
25
     */
26
    protected $queryContainer;
27
28
    /**
29
     * @var \SprykerEco\Zed\Computop\Dependency\Facade\ComputopToOmsFacadeInterface
30
     */
31
    protected $omsFacade;
32
33
    /**
34
     * @var \Orm\Zed\Computop\Persistence\SpyPaymentComputop
35
     */
36
    protected $paymentEntity;
37
38
    /**
39
     * @var \SprykerEco\Zed\Computop\ComputopConfig
40
     */
41
    protected $config;
42
43
    /**
44
     * @param \SprykerEco\Zed\Computop\Persistence\ComputopQueryContainerInterface $queryContainer
45
     * @param \SprykerEco\Zed\Computop\Dependency\Facade\ComputopToOmsFacadeInterface $omsFacade
46
     * @param \SprykerEco\Zed\Computop\ComputopConfig $config
47
     */
48
    public function __construct(
49
        ComputopQueryContainerInterface $queryContainer,
50
        ComputopToOmsFacadeInterface $omsFacade,
51
        ComputopConfig $config
52
    ) {
53
        $this->queryContainer = $queryContainer;
54
        $this->omsFacade = $omsFacade;
55
        $this->config = $config;
56
    }
57
58
    /**
59
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
60
     *
61
     * @return \Generated\Shared\Transfer\QuoteTransfer
62
     */
63
    public function save(QuoteTransfer $quoteTransfer): QuoteTransfer
64
    {
65
        $payPalExpressCompleteResponseTransfer = $quoteTransfer
66
            ->getPayment()
67
            ->getComputopPayPalExpress()
68
            ->getPayPalExpressCompleteResponse();
69
        $this->setPaymentEntity($payPalExpressCompleteResponseTransfer->getHeader()->getTransId());
70
        $this->getTransactionHandler()->handleTransaction(
71
            function () use ($payPalExpressCompleteResponseTransfer): void {
72
                $this->savePaymentComputopOrderItemsEntities($payPalExpressCompleteResponseTransfer);
73
            }
74
        );
75
76
        return $quoteTransfer;
77
    }
78
79
    /**
80
     * @param string $transactionId
81
     *
82
     * @return void
83
     */
84
    protected function setPaymentEntity(string $transactionId): void
85
    {
86
        $this->paymentEntity = $this->queryContainer->queryPaymentByTransactionId($transactionId)->findOne();
87
    }
88
89
    /**
90
     * @return \Orm\Zed\Computop\Persistence\SpyPaymentComputop
91
     */
92
    protected function getPaymentEntity(): SpyPaymentComputop
93
    {
94
        return $this->paymentEntity;
95
    }
96
97
    /**
98
     * @param \Generated\Shared\Transfer\ComputopPayPalExpressInitResponseTransfer $responseTransfer
99
     *
100
     * @return void
101
     */
102
    protected function savePaymentComputopEntity(ComputopPayPalExpressInitResponseTransfer $responseTransfer): void
103
    {
104
        $paymentEntity = $this->getPaymentEntity();
105
        $paymentEntity->setPayId($responseTransfer->getHeader()->getPayId());
106
        $paymentEntity->setXId($responseTransfer->getHeader()->getXId());
107
        $paymentEntity->save();
108
    }
109
110
    /**
111
     * @param \Generated\Shared\Transfer\ComputopPayPalExpressInitResponseTransfer $responseTransfer
112
     *
113
     * @return void
114
     */
115
    protected function savePaymentComputopDetailEntity(ComputopPayPalExpressInitResponseTransfer $responseTransfer): void
116
    {
117
        $paymentEntityDetails = $this->getPaymentEntity()->getSpyPaymentComputopDetail();
118
        $paymentEntityDetails->fromArray($responseTransfer->toArray());
119
        $paymentEntityDetails->save();
120
    }
121
122
    /**
123
     * @param \Generated\Shared\Transfer\ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer
124
     *
125
     * @return void
126
     */
127
    protected function savePaymentComputopOrderItemsEntities(ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer): void
128
    {
129
        $orderItems = $this
130
            ->queryContainer
131
            ->getSpySalesOrderItemsById($this->getPaymentEntity()->getFkSalesOrder())
132
            ->find();
133
134
        foreach ($orderItems as $selectedItem) {
135
            foreach ($this->getPaymentEntity()->getSpyPaymentComputopOrderItems() as $item) {
136
                if ($item->getFkSalesOrderItem() !== $selectedItem->getIdSalesOrderItem()) {
137
                    continue;
138
                }
139
                $item->setStatus($this->config->getOmsStatusInitialized());
140
                $item->setIsPaymentConfirmed($completeResponseTransfer->getHeader()->getIsSuccess());
141
                $item->save();
142
            }
143
        }
144
    }
145
}
146