Passed
Pull Request — feature/eco-3656/dev-paypal-ex... (#40)
by
unknown
10:31 queued 04:54
created

PayPalExpressCompleteResponseSaver::save()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 22
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

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