Passed
Pull Request — master (#42)
by
unknown
07:32 queued 03:40
created

PayPalExpressCompleteResponseSaver   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 165
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 12
eloc 51
c 1
b 0
f 0
dl 0
loc 165
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 8 1
A save() 0 26 2
A executeSavePaymentComputopDataTransaction() 0 7 1
A savePaymentComputopOrderItems() 0 15 2
A savePaymentComputop() 0 8 1
A updatePaymentComputopOrderItem() 0 16 4
A savePaymentComputopDetail() 0 11 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
        $computopPaymentComputopDetailTransfer->fromArray($payPalExpressCompleteResponseTransfer->toArray(), true);
133
134
        $this->computopEntityManager->updateComputopPaymentDetail($computopPaymentComputopDetailTransfer);
0 ignored issues
show
Bug introduced by
It seems like $computopPaymentComputopDetailTransfer can also be of type null; however, parameter $computopPaymentComputopDetailTransfer of SprykerEco\Zed\Computop\...ComputopPaymentDetail() does only seem to accept Generated\Shared\Transfe...tComputopDetailTransfer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

134
        $this->computopEntityManager->updateComputopPaymentDetail(/** @scrutinizer ignore-type */ $computopPaymentComputopDetailTransfer);
Loading history...
135
    }
136
137
    /**
138
     * @param \Generated\Shared\Transfer\ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer
139
     * @param \Generated\Shared\Transfer\ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
140
     *
141
     * @return void
142
     */
143
    protected function savePaymentComputopOrderItems(
144
        ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer,
145
        ComputopPaymentComputopTransfer $computopPaymentComputopTransfer
146
    ): void {
147
        $salesOrderItemsCollection = $this->computopRepository
148
            ->getComputopSalesOrderItemCollection($computopPaymentComputopTransfer);
149
150
        $computopPaymentComputopOrderItemsCollection = $this->computopRepository
151
            ->getComputopPaymentComputopOrderItemCollection($computopPaymentComputopTransfer);
152
153
        foreach ($salesOrderItemsCollection->getComputopSalesOrderItems() as $computopSalesOrderItemTransfer) {
154
            $this->updatePaymentComputopOrderItem(
155
                $computopPaymentComputopOrderItemsCollection,
156
                $computopSalesOrderItemTransfer,
157
                $completeResponseTransfer
158
            );
159
        }
160
    }
161
162
    /**
163
     * @param \Generated\Shared\Transfer\ComputopPaymentComputopOrderItemCollectionTransfer $computopPaymentComputopOrderItemsCollection
164
     * @param \Generated\Shared\Transfer\ComputopSalesOrderItemTransfer $computopSalesOrderItemTransfer
165
     * @param \Generated\Shared\Transfer\ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer
166
     *
167
     * @return void
168
     */
169
    protected function updatePaymentComputopOrderItem(
170
        ComputopPaymentComputopOrderItemCollectionTransfer $computopPaymentComputopOrderItemsCollection,
171
        ComputopSalesOrderItemTransfer $computopSalesOrderItemTransfer,
172
        ComputopApiPayPalExpressCompleteResponseTransfer $completeResponseTransfer
173
    ): void {
174
        foreach ($computopPaymentComputopOrderItemsCollection->getComputopPaymentComputopOrderItems() as $computopPaymentComputopOrderItemTransfer) {
175
            if ($computopPaymentComputopOrderItemTransfer->getFkSalesOrderItem() !== $computopSalesOrderItemTransfer->getIdSalesOrderItem()) {
176
                continue;
177
            }
178
            $isPaymentConfirmed = $completeResponseTransfer->getHeader()->getIsSuccess();
179
            $computopPaymentComputopOrderItemTransfer->setStatus(
180
                $isPaymentConfirmed ? $this->computopConfig->getOmsStatusAuthorized() : $this->computopConfig->getOmsStatusAuthorizationFailed()
181
            );
182
            $computopPaymentComputopOrderItemTransfer->setIsPaymentConfirmed($isPaymentConfirmed);
183
184
            $this->computopEntityManager->updateComputopPaymentComputopOrderItem($computopPaymentComputopOrderItemTransfer);
185
        }
186
    }
187
}
188