Passed
Push — feature/eco-574/eco-2266-check... ( efd21d )
by Aleksey
08:13
created

CaptureRequestBuilder::intToDecimalString()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * MIT License
5
 * For full license information, please view the LICENSE file that was distributed with this source code.
6
 */
7
8
namespace SprykerEco\Zed\Afterpay\Business\Payment\Transaction\Capture;
9
10
use Generated\Shared\Transfer\AfterpayCallTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfer\AfterpayCallTransfer 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\AfterpayCaptureRequestTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...yCaptureRequestTransfer 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\AfterpayRequestOrderItemTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...equestOrderItemTransfer 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\ItemTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfer\ItemTransfer 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 SprykerEco\Shared\Afterpay\AfterpayConfig;
15
use SprykerEco\Shared\Afterpay\AfterpayConstants;
16
use SprykerEco\Zed\Afterpay\Business\Payment\Mapper\OrderToRequestTransferInterface;
17
use SprykerEco\Zed\Afterpay\Dependency\Facade\AfterpayToMoneyInterface;
18
19
class CaptureRequestBuilder implements CaptureRequestBuilderInterface
20
{
21
    /**
22
     * @var \SprykerEco\Zed\Afterpay\Business\Payment\Mapper\OrderToRequestTransferInterface
23
     */
24
    protected $orderToRequestMapper;
25
26
    /**
27
     * @var \SprykerEco\Zed\Afterpay\Dependency\Facade\AfterpayToMoneyInterface
28
     */
29
    private $money;
30
31
    /**
32
     * @param \SprykerEco\Zed\Afterpay\Business\Payment\Mapper\OrderToRequestTransferInterface $orderToRequestMapper
33
     * @param \SprykerEco\Zed\Afterpay\Dependency\Facade\AfterpayToMoneyInterface $money
34
     */
35
    public function __construct(
36
        OrderToRequestTransferInterface $orderToRequestMapper,
37
        AfterpayToMoneyInterface $money
38
    ) {
39
        $this->orderToRequestMapper = $orderToRequestMapper;
40
        $this->money = $money;
41
    }
42
43
    /**
44
     * @param \Generated\Shared\Transfer\AfterpayCallTransfer $afterpayCallTransfer
45
     *
46
     * @return \Generated\Shared\Transfer\AfterpayCaptureRequestTransfer
47
     */
48
    public function buildBaseCaptureRequestForOrder(AfterpayCallTransfer $afterpayCallTransfer): AfterpayCaptureRequestTransfer
49
    {
50
        $captureRequestTransfer = $this->orderToRequestMapper
51
            ->orderToBaseCaptureRequest($afterpayCallTransfer);
52
53
        return $captureRequestTransfer;
54
    }
55
56
    /**
57
     * @param \Generated\Shared\Transfer\ItemTransfer $orderItemTransfer
58
     * @param \Generated\Shared\Transfer\AfterpayCaptureRequestTransfer $captureRequestTransfer
59
     *
60
     * @return $this
61
     */
62
    public function addOrderItemToCaptureRequest(
63
        ItemTransfer $orderItemTransfer,
64
        AfterpayCaptureRequestTransfer $captureRequestTransfer
65
    ) {
66
        $orderItemRequestTransfer = $this->orderToRequestMapper->orderItemToAfterpayItemRequest($orderItemTransfer);
67
68
        $this->addOrderItemToOrderDetails($orderItemRequestTransfer, $captureRequestTransfer);
69
        $this->increaseTotalToCaptureAmounts($orderItemRequestTransfer, $captureRequestTransfer);
70
71
        return $this;
72
    }
73
74
    /**
75
     * @param int $expenseAmount
76
     * @param \Generated\Shared\Transfer\AfterpayCaptureRequestTransfer $captureRequestTransfer
77
     *
78
     * @return $this
79
     */
80
    public function addOrderExpenseToCaptureRequest(
81
        int $expenseAmount,
82
        AfterpayCaptureRequestTransfer $captureRequestTransfer
83
    ) {
84
        $expenseItemRequestTransfer = $this->buildExpenseItemTransfer($expenseAmount);
85
        $this->addOrderItemToCaptureRequest($expenseItemRequestTransfer, $captureRequestTransfer);
86
87
        return $this;
88
    }
89
90
    /**
91
     * @param \Generated\Shared\Transfer\AfterpayRequestOrderItemTransfer $orderItemRequestTransfer
92
     * @param \Generated\Shared\Transfer\AfterpayCaptureRequestTransfer $captureRequestTransfer
93
     *
94
     * @return void
95
     */
96
    protected function addOrderItemToOrderDetails(
97
        AfterpayRequestOrderItemTransfer $orderItemRequestTransfer,
98
        AfterpayCaptureRequestTransfer $captureRequestTransfer
99
    ): void {
100
        $captureRequestTransfer->getOrderDetails()->addItem($orderItemRequestTransfer->setGrossUnitPrice(1900));
101
    }
102
103
    /**
104
     * @param \Generated\Shared\Transfer\AfterpayRequestOrderItemTransfer $orderItemRequestTransfer
105
     * @param \Generated\Shared\Transfer\AfterpayCaptureRequestTransfer $captureRequestTransfer
106
     *
107
     * @return void
108
     */
109
    protected function increaseTotalToCaptureAmounts(
110
        AfterpayRequestOrderItemTransfer $orderItemRequestTransfer,
111
        AfterpayCaptureRequestTransfer $captureRequestTransfer
112
    ): void {
113
        $this->increaseTotalNetAmount($orderItemRequestTransfer, $captureRequestTransfer);
114
        $this->increaseTotalGrossAmount($orderItemRequestTransfer, $captureRequestTransfer);
115
    }
116
117
    /**
118
     * @param int $expenseAmount
119
     *
120
     * @return \Generated\Shared\Transfer\ItemTransfer
121
     */
122
    protected function buildExpenseItemTransfer(int $expenseAmount): ItemTransfer
123
    {
124
        return (new ItemTransfer())
125
            ->setSku(AfterpayConfig::CAPTURE_EXPENSE_SKU)
126
            ->setName(AfterpayConfig::CAPTURE_EXPENSE_DESCRIPTION)
127
            ->setUnitGrossPrice($expenseAmount)
128
            ->setUnitPriceToPayAggregation($expenseAmount)
129
            ->setUnitTaxAmountFullAggregation(0)
130
            ->setQuantity(1);
131
    }
132
133
    /**
134
     * @param \Generated\Shared\Transfer\AfterpayRequestOrderItemTransfer $orderItemRequestTransfer
135
     * @param \Generated\Shared\Transfer\AfterpayCaptureRequestTransfer $captureRequestTransfer
136
     *
137
     * @return void
138
     */
139
    protected function increaseTotalNetAmount(
140
        AfterpayRequestOrderItemTransfer $orderItemRequestTransfer,
141
        AfterpayCaptureRequestTransfer $captureRequestTransfer
142
    ): void {
143
        $oldNetAmountDecimal = $this->decimalToInt((float)$captureRequestTransfer->getOrderDetails()->getTotalNetAmount());
144
        $itemNetAmountDecimal = $this->decimalToInt((float)$orderItemRequestTransfer->getNetUnitPrice());
145
146
        $newNetAmountDecimal = $oldNetAmountDecimal + $itemNetAmountDecimal;
147
        $captureRequestTransfer->getOrderDetails()->setTotalNetAmount(
148
            $this->intToDecimalString($newNetAmountDecimal)
149
        );
150
    }
151
152
    /**
153
     * @param \Generated\Shared\Transfer\AfterpayRequestOrderItemTransfer $orderItemRequestTransfer
154
     * @param \Generated\Shared\Transfer\AfterpayCaptureRequestTransfer $captureRequestTransfer
155
     *
156
     * @return void
157
     */
158
    protected function increaseTotalGrossAmount(
159
        AfterpayRequestOrderItemTransfer $orderItemRequestTransfer,
160
        AfterpayCaptureRequestTransfer $captureRequestTransfer
161
    ): void {
162
        $oldGrossAmountDecimal = $this->decimalToInt((float)$captureRequestTransfer->getOrderDetails()->getTotalGrossAmount());
163
        $itemGrossAmountDecimal = $this->decimalToInt((float)$orderItemRequestTransfer->getGrossUnitPrice());
164
165
        $newGrossAmountDecimal = $oldGrossAmountDecimal + $itemGrossAmountDecimal;
166
        $captureRequestTransfer->getOrderDetails()->setTotalGrossAmount(
167
            $this->intToDecimalString($newGrossAmountDecimal)
168
        );
169
    }
170
171
    /**
172
     * @param float $decimalValue
173
     *
174
     * @return int
175
     */
176
    protected function decimalToInt(float $decimalValue): int
177
    {
178
        return $this->money->convertDecimalToInteger($decimalValue);
179
    }
180
181
    /**
182
     * @param int $intValue
183
     *
184
     * @return string
185
     */
186
    protected function intToDecimalString(int $intValue): string
187
    {
188
        return (string)$this->money->convertIntegerToDecimal($intValue);
189
    }
190
}
191