Passed
Pull Request — master (#45)
by
unknown
03:36
created

PayPalExpressCompleteResponseSaver::save()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 26
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 15
c 1
b 0
f 0
dl 0
loc 26
rs 9.7666
cc 2
nc 2
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\ComputopPaymentComputopOrderItemCollectionTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...rItemCollectionTransfer 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\ComputopPaymentComputopTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...PaymentComputopTransfer 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 Generated\Shared\Transfer\ComputopSalesOrderItemTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...pSalesOrderItemTransfer 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 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...
15
use Spryker\Zed\Kernel\Persistence\EntityManager\TransactionTrait;
16
use SprykerEco\Zed\Computop\ComputopConfig;
17
use SprykerEco\Zed\Computop\Persistence\ComputopEntityManagerInterface;
18
use SprykerEco\Zed\Computop\Persistence\ComputopRepositoryInterface;
19
20
class PayPalExpressCompleteResponseSaver implements PayPalExpressCompleteResponseSaverInterface
21
{
22
    use TransactionTrait;
23
24
    /**
25
     * @var \SprykerEco\Zed\Computop\ComputopConfig
26
     */
27
    protected $computopConfig;
28
29
    /**
30
     * @var \SprykerEco\Zed\Computop\Persistence\ComputopEntityManagerInterface
31
     */
32
    protected $computopEntityManager;
33
34
    /**
35
     * @var \SprykerEco\Zed\Computop\Persistence\ComputopRepositoryInterface
36
     */
37
    protected $computopRepository;
38
39
    /**
40
     * @param \SprykerEco\Zed\Computop\ComputopConfig $computopConfig
41
     * @param \SprykerEco\Zed\Computop\Persistence\ComputopEntityManagerInterface $computopEntityManager
42
     * @param \SprykerEco\Zed\Computop\Persistence\ComputopRepositoryInterface $computopRepository
43
     */
44
    public function __construct(
45
        ComputopConfig $computopConfig,
46
        ComputopEntityManagerInterface $computopEntityManager,
47
        ComputopRepositoryInterface $computopRepository
48
    ) {
49
        $this->computopConfig = $computopConfig;
50
        $this->computopEntityManager = $computopEntityManager;
51
        $this->computopRepository = $computopRepository;
52
    }
53
54
    /**
55
     * @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
56
     *
57
     * @return \Generated\Shared\Transfer\QuoteTransfer
58
     */
59
    public function save(QuoteTransfer $quoteTransfer): QuoteTransfer
60
    {
61
        $payPalExpressCompleteResponseTransfer = $quoteTransfer->getPaymentOrFail()
62
            ->getComputopPayPalExpressOrFail()
63
            ->getPayPalExpressCompleteResponseOrFail();
64
65
        $computopPaymentTransfer = $this
66
            ->computopRepository
67
            ->findComputopPaymentByComputopTransId(
68
                $payPalExpressCompleteResponseTransfer->getHeader()->getTransId(),
69
            );
70
71
        if ($computopPaymentTransfer === null) {
72
            return $quoteTransfer;
73
        }
74
75
        $this->getTransactionHandler()->handleTransaction(
76
            function () use ($payPalExpressCompleteResponseTransfer, $computopPaymentTransfer) {
77
                $this->executeSavePaymentComputopDataTransaction(
78
                    $payPalExpressCompleteResponseTransfer,
79
                    $computopPaymentTransfer,
80
                );
81
            },
82
        );
83
84
        return $quoteTransfer;
85
    }
86
87
    /**
88
     * @param \Generated\Shared\Transfer\ComputopApiPayPalExpressCompleteResponseTransfer $payPalExpressCompleteResponseTransfer
89
     * @param \Generated\Shared\Transfer\ComputopPaymentComputopTransfer $computopPaymentTransfer
90
     *
91
     * @return void
92
     */
93
    protected function executeSavePaymentComputopDataTransaction(
94
        ComputopApiPayPalExpressCompleteResponseTransfer $payPalExpressCompleteResponseTransfer,
95
        ComputopPaymentComputopTransfer $computopPaymentTransfer
96
    ): void {
97
        $this->savePaymentComputopDetail($payPalExpressCompleteResponseTransfer, $computopPaymentTransfer);
98
        $this->savePaymentComputop($payPalExpressCompleteResponseTransfer, $computopPaymentTransfer);
99
        $this->savePaymentComputopOrderItems($payPalExpressCompleteResponseTransfer, $computopPaymentTransfer);
100
    }
101
102
    /**
103
     * @param \Generated\Shared\Transfer\ComputopApiPayPalExpressCompleteResponseTransfer $computopApiPayPalExpressCompleteResponseTransfer
104
     * @param \Generated\Shared\Transfer\ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
105
     *
106
     * @return void
107
     */
108
    protected function savePaymentComputop(
109
        ComputopApiPayPalExpressCompleteResponseTransfer $computopApiPayPalExpressCompleteResponseTransfer,
110
        ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
111
    ): void {
112
        $computopPaymentComputopTransfer->setPayId($computopApiPayPalExpressCompleteResponseTransfer->getHeader()->getPayId());
113
        $computopPaymentComputopTransfer->setXId($computopApiPayPalExpressCompleteResponseTransfer->getHeader()->getXId());
114
115
        $this->computopEntityManager->updateComputopPayment($computopPaymentComputopTransfer);
116
    }
117
118
    /**
119
     * @param \Generated\Shared\Transfer\ComputopApiPayPalExpressCompleteResponseTransfer $payPalExpressCompleteResponseTransfer
120
     * @param \Generated\Shared\Transfer\ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
121
     *
122
     * @return void
123
     */
124
    protected function savePaymentComputopDetail(
125
        ComputopApiPayPalExpressCompleteResponseTransfer $payPalExpressCompleteResponseTransfer,
126
        ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
127
    ): void {
128
        $computopPaymentComputopDetailTransfer = $this
129
            ->computopRepository
130
            ->findComputopPaymentDetail($computopPaymentComputopTransfer);
131
132
        if ($computopPaymentComputopDetailTransfer === null) {
133
            return;
134
        }
135
136
        $computopPaymentComputopDetailTransfer->fromArray($payPalExpressCompleteResponseTransfer->toArray(), true);
137
138
        $this->computopEntityManager->updateComputopPaymentDetail($computopPaymentComputopDetailTransfer);
139
    }
140
141
    /**
142
     * @param \Generated\Shared\Transfer\ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer
143
     * @param \Generated\Shared\Transfer\ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
144
     *
145
     * @return void
146
     */
147
    protected function savePaymentComputopOrderItems(
148
        ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer,
149
        ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
150
    ): void {
151
        $computopSalesOrderItemCollectionTransfer = $this->computopRepository
152
            ->getComputopSalesOrderItemCollection($computopPaymentComputopTransfer);
153
154
        $computopPaymentComputopOrderItemCollectionTransfer = $this->computopRepository
155
            ->getComputopPaymentComputopOrderItemCollection($computopPaymentComputopTransfer);
156
157
        foreach ($computopSalesOrderItemCollectionTransfer->getComputopSalesOrderItems() as $computopSalesOrderItemTransfer) {
158
            $this->updatePaymentComputopOrderItem(
159
                $computopPaymentComputopOrderItemCollectionTransfer,
160
                $computopSalesOrderItemTransfer,
161
                $completeResponseTransfer,
162
            );
163
        }
164
    }
165
166
    /**
167
     * @param \Generated\Shared\Transfer\ComputopPaymentComputopOrderItemCollectionTransfer $computopPaymentComputopOrderItemsCollection
168
     * @param \Generated\Shared\Transfer\ComputopSalesOrderItemTransfer $computopSalesOrderItemTransfer
169
     * @param \Generated\Shared\Transfer\ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer
170
     *
171
     * @return void
172
     */
173
    protected function updatePaymentComputopOrderItem(
174
        ComputopPaymentComputopOrderItemCollectionTransfer $computopPaymentComputopOrderItemsCollection,
175
        ComputopSalesOrderItemTransfer $computopSalesOrderItemTransfer,
176
        ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer
177
    ): void {
178
        foreach ($computopPaymentComputopOrderItemsCollection->getComputopPaymentComputopOrderItems() as $computopPaymentComputopOrderItemTransfer) {
179
            if ($computopPaymentComputopOrderItemTransfer->getFkSalesOrderItem() !== $computopSalesOrderItemTransfer->getIdSalesOrderItem()) {
180
                continue;
181
            }
182
            $isPaymentConfirmed = $completeResponseTransfer->getHeader()->getIsSuccess();
183
            $computopPaymentComputopOrderItemTransfer->setStatus(
184
                $isPaymentConfirmed ? $this->computopConfig->getOmsStatusAuthorized() : $this->computopConfig->getOmsStatusAuthorizationFailed(),
185
            );
186
            $computopPaymentComputopOrderItemTransfer->setIsPaymentConfirmed($isPaymentConfirmed);
187
188
            $this->computopEntityManager->updateComputopPaymentComputopOrderItem($computopPaymentComputopOrderItemTransfer);
189
        }
190
    }
191
}
192