Passed
Pull Request — feature/eco-3656/dev-paypal-ex... (#40)
by
unknown
17:08 queued 08:59
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\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->getPayment()
62
            ->getComputopPayPalExpress()
63
            ->getPayPalExpressCompleteResponse();
64
65
        $computopPaymentTransfer = $this
66
            ->computopRepository
67
            ->getComputopPaymentByComputopTransId(
68
                $payPalExpressCompleteResponseTransfer->getHeader()->getTransId()
69
            );
70
71
        $this->getTransactionHandler()->handleTransaction(
72
            function () use ($payPalExpressCompleteResponseTransfer, $computopPaymentTransfer) {
73
                $this->executeSavePaymentComputopDataTransaction(
74
                    $payPalExpressCompleteResponseTransfer,
75
                    $computopPaymentTransfer
76
                );
77
            }
78
        );
79
80
        return $quoteTransfer;
81
    }
82
83
    /**
84
     * @param \Generated\Shared\Transfer\ComputopApiPayPalExpressCompleteResponseTransfer $payPalExpressCompleteResponseTransfer
85
     * @param \Generated\Shared\Transfer\ComputopPaymentComputopTransfer $computopPaymentTransfer
86
     *
87
     * @return void
88
     */
89
    protected function executeSavePaymentComputopDataTransaction(
90
        ComputopApiPayPalExpressCompleteResponseTransfer $payPalExpressCompleteResponseTransfer,
91
        ComputopPaymentComputopTransfer $computopPaymentTransfer
92
    ): void {
93
        $this->savePaymentComputopDetail($payPalExpressCompleteResponseTransfer, $computopPaymentTransfer);
94
        $this->savePaymentComputop($payPalExpressCompleteResponseTransfer, $computopPaymentTransfer);
95
        $this->savePaymentComputopOrderItems($payPalExpressCompleteResponseTransfer, $computopPaymentTransfer);
96
    }
97
98
    /**
99
     * @param \Generated\Shared\Transfer\ComputopApiPayPalExpressCompleteResponseTransfer $computopApiPayPalExpressCompleteResponseTransfer
100
     * @param \Generated\Shared\Transfer\ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
101
     *
102
     * @return void
103
     */
104
    protected function savePaymentComputop(
105
        ComputopApiPayPalExpressCompleteResponseTransfer $computopApiPayPalExpressCompleteResponseTransfer,
106
        ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
107
    ): void {
108
        $computopPaymentComputopTransfer->setPayId($computopApiPayPalExpressCompleteResponseTransfer->getHeader()->getPayId());
109
        $computopPaymentComputopTransfer->setXId($computopApiPayPalExpressCompleteResponseTransfer->getHeader()->getXId());
110
111
        $this->computopEntityManager->saveComputopPayment($computopPaymentComputopTransfer);
112
    }
113
114
    /**
115
     * @param \Generated\Shared\Transfer\ComputopApiPayPalExpressCompleteResponseTransfer $payPalExpressCompleteResponseTransfer
116
     * @param \Generated\Shared\Transfer\ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
117
     *
118
     * @return void
119
     */
120
    protected function savePaymentComputopDetail(
121
        ComputopApiPayPalExpressCompleteResponseTransfer $payPalExpressCompleteResponseTransfer,
122
        ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
123
    ): void {
124
        $computopPaymentComputopDetailTransfer = $this
125
            ->computopRepository
126
            ->getComputopPaymentDetail($computopPaymentComputopTransfer);
127
128
        $computopPaymentComputopDetailTransfer->fromArray($payPalExpressCompleteResponseTransfer->toArray(), true);
129
130
        $this->computopEntityManager->updateComputopPaymentDetail($computopPaymentComputopDetailTransfer);
131
    }
132
133
    /**
134
     * @param \Generated\Shared\Transfer\ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer
135
     * @param \Generated\Shared\Transfer\ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
136
     *
137
     * @return void
138
     */
139
    protected function savePaymentComputopOrderItems(
140
        ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer,
141
        ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
142
    ): void {
143
        $salesOrderItemsCollection = $this->computopRepository
144
            ->getComputopSalesOrderItemsCollection($computopPaymentComputopTransfer);
145
146
        $computopPaymentComputopOrderItemsCollection = $this->computopRepository
147
            ->getComputopPaymentComputopOrderItemsCollection($computopPaymentComputopTransfer);
148
149
        foreach ($salesOrderItemsCollection->getComputopSalesOrderItems() as $computopSalesOrderItemTransfer) {
150
            $this->updatePaymentComputopOrderItem(
151
                $computopPaymentComputopOrderItemsCollection,
152
                $computopSalesOrderItemTransfer,
153
                $completeResponseTransfer
154
            );
155
        }
156
    }
157
158
    /**
159
     * @param \Generated\Shared\Transfer\ComputopPaymentComputopOrderItemCollectionTransfer $computopPaymentComputopOrderItemsCollection
160
     * @param \Generated\Shared\Transfer\ComputopSalesOrderItemTransfer $computopSalesOrderItemTransfer
161
     * @param \Generated\Shared\Transfer\ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer
162
     *
163
     * @return void
164
     */
165
    protected function updatePaymentComputopOrderItem(
166
        ComputopPaymentComputopOrderItemCollectionTransfer $computopPaymentComputopOrderItemsCollection,
167
        ComputopSalesOrderItemTransfer $computopSalesOrderItemTransfer,
168
        ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer
169
    ): void {
170
        foreach ($computopPaymentComputopOrderItemsCollection->getComputopPaymentComputopOrderItems() as $computopPaymentComputopOrderItemTransfer) {
171
            if ($computopPaymentComputopOrderItemTransfer->getFkSalesOrderItem() !== $computopSalesOrderItemTransfer->getIdSalesOrderItem()) {
172
                continue;
173
            }
174
            $isPaymentConfirmed = $completeResponseTransfer->getHeader()->getIsSuccess();
175
            $computopPaymentComputopOrderItemTransfer->setStatus(
176
                $isPaymentConfirmed ? $this->computopConfig->getOmsStatusAuthorized() : $this->computopConfig->getOmsStatusAuthorizationFailed()
177
            );
178
            $computopPaymentComputopOrderItemTransfer->setIsPaymentConfirmed($isPaymentConfirmed);
179
180
            $this->computopEntityManager->updateComputopPaymentComputopOrderItem($computopPaymentComputopOrderItemTransfer);
181
        }
182
    }
183
}
184