Passed
Pull Request — master (#44)
by Michael
12:21 queued 08:36
created

savePaymentComputop()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 4
c 3
b 0
f 0
dl 0
loc 10
rs 10
cc 1
nc 1
nop 2
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->getHeaderOrFail()->getTransIdOrFail(),
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
        $computopApiResponseHeaderTransfer = $computopApiPayPalExpressCompleteResponseTransfer->getHeaderOrFail();
113
114
        $computopPaymentComputopTransfer->setPayId($computopApiResponseHeaderTransfer->getPayIdOrFail())
115
            ->setXId($computopApiResponseHeaderTransfer->getXIdOrFail());
116
117
        $this->computopEntityManager->updateComputopPayment($computopPaymentComputopTransfer);
118
    }
119
120
    /**
121
     * @param \Generated\Shared\Transfer\ComputopApiPayPalExpressCompleteResponseTransfer $payPalExpressCompleteResponseTransfer
122
     * @param \Generated\Shared\Transfer\ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
123
     *
124
     * @return void
125
     */
126
    protected function savePaymentComputopDetail(
127
        ComputopApiPayPalExpressCompleteResponseTransfer $payPalExpressCompleteResponseTransfer,
128
        ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
129
    ): void {
130
        $computopPaymentComputopDetailTransfer = $this
131
            ->computopRepository
132
            ->findComputopPaymentDetail($computopPaymentComputopTransfer);
133
134
        if ($computopPaymentComputopDetailTransfer === null) {
135
            return;
136
        }
137
138
        $computopPaymentComputopDetailTransfer->fromArray($payPalExpressCompleteResponseTransfer->toArray(), true);
139
140
        $this->computopEntityManager->updateComputopPaymentDetail($computopPaymentComputopDetailTransfer);
141
    }
142
143
    /**
144
     * @param \Generated\Shared\Transfer\ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer
145
     * @param \Generated\Shared\Transfer\ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
146
     *
147
     * @return void
148
     */
149
    protected function savePaymentComputopOrderItems(
150
        ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer,
151
        ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
152
    ): void {
153
        $computopSalesOrderItemCollectionTransfer = $this->computopRepository
154
            ->getComputopSalesOrderItemCollection($computopPaymentComputopTransfer);
155
156
        $computopPaymentComputopOrderItemCollectionTransfer = $this->computopRepository
157
            ->getComputopPaymentComputopOrderItemCollection($computopPaymentComputopTransfer);
158
159
        foreach ($computopSalesOrderItemCollectionTransfer->getComputopSalesOrderItems() as $computopSalesOrderItemTransfer) {
160
            $this->updatePaymentComputopOrderItem(
161
                $computopPaymentComputopOrderItemCollectionTransfer,
162
                $computopSalesOrderItemTransfer,
163
                $completeResponseTransfer,
164
            );
165
        }
166
    }
167
168
    /**
169
     * @param \Generated\Shared\Transfer\ComputopPaymentComputopOrderItemCollectionTransfer $computopPaymentComputopOrderItemsCollection
170
     * @param \Generated\Shared\Transfer\ComputopSalesOrderItemTransfer $computopSalesOrderItemTransfer
171
     * @param \Generated\Shared\Transfer\ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer
172
     *
173
     * @return void
174
     */
175
    protected function updatePaymentComputopOrderItem(
176
        ComputopPaymentComputopOrderItemCollectionTransfer $computopPaymentComputopOrderItemsCollection,
177
        ComputopSalesOrderItemTransfer $computopSalesOrderItemTransfer,
178
        ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer
179
    ): void {
180
        foreach ($computopPaymentComputopOrderItemsCollection->getComputopPaymentComputopOrderItems() as $computopPaymentComputopOrderItemTransfer) {
181
            if ($computopPaymentComputopOrderItemTransfer->getFkSalesOrderItem() !== $computopSalesOrderItemTransfer->getIdSalesOrderItem()) {
182
                continue;
183
            }
184
185
            $isPaymentConfirmed = $completeResponseTransfer->getHeaderOrFail()->getIsSuccess();
186
            $status = $isPaymentConfirmed ? $this->computopConfig->getOmsStatusAuthorized() : $this->computopConfig->getOmsStatusAuthorizationFailed();
187
188
            $computopPaymentComputopOrderItemTransfer->setStatus($status)
189
                ->setIsPaymentConfirmed($isPaymentConfirmed);
190
191
            $this->computopEntityManager->updateComputopPaymentComputopOrderItem($computopPaymentComputopOrderItemTransfer);
192
        }
193
    }
194
}
195