Passed
Push — feature/eco-574/eco-2266-check... ( 8cf5ab...290cb9 )
by Aleksey
05:34
created

increaseTotalToCaptureAmounts()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 2
dl 0
loc 6
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\Zed\AfterPay\Business\Payment\Mapper\OrderToRequestTransferInterface;
16
use SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToMoneyFacadeInterface;
17
18
class CaptureRequestBuilder implements CaptureRequestBuilderInterface
19
{
20
    /**
21
     * @var \SprykerEco\Zed\AfterPay\Business\Payment\Mapper\OrderToRequestTransferInterface
22
     */
23
    protected $orderToRequestMapper;
24
25
    /**
26
     * @var \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToMoneyFacadeInterface
27
     */
28
    protected $money;
29
30
    /**
31
     * @param \SprykerEco\Zed\AfterPay\Business\Payment\Mapper\OrderToRequestTransferInterface $orderToRequestMapper
32
     * @param \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToMoneyFacadeInterface $money
33
     */
34
    public function __construct(
35
        OrderToRequestTransferInterface $orderToRequestMapper,
36
        AfterPayToMoneyFacadeInterface $money
37
    ) {
38
        $this->orderToRequestMapper = $orderToRequestMapper;
39
        $this->money = $money;
40
    }
41
42
    /**
43
     * @param \Generated\Shared\Transfer\AfterPayCallTransfer $afterPayCallTransfer
44
     *
45
     * @return \Generated\Shared\Transfer\AfterPayCaptureRequestTransfer
46
     */
47
    public function buildBaseCaptureRequestForOrder(AfterPayCallTransfer $afterPayCallTransfer): AfterPayCaptureRequestTransfer
48
    {
49
        $captureRequestTransfer = $this->orderToRequestMapper
50
            ->orderToBaseCaptureRequest($afterPayCallTransfer);
51
52
        return $captureRequestTransfer;
53
    }
54
55
    /**
56
     * @param \Generated\Shared\Transfer\ItemTransfer $orderItemTransfer
57
     * @param \Generated\Shared\Transfer\AfterPayCaptureRequestTransfer $captureRequestTransfer
58
     *
59
     * @return $this
60
     */
61
    public function addOrderItemToCaptureRequest(
62
        ItemTransfer $orderItemTransfer,
63
        AfterPayCaptureRequestTransfer $captureRequestTransfer
64
    ) {
65
        $orderItemRequestTransfer = $this->orderToRequestMapper->orderItemToAfterPayItemRequest($orderItemTransfer);
66
67
        $captureRequestTransfer->getOrderDetails()->addItem($orderItemRequestTransfer);
68
        $this->increaseTotalNetAmount($orderItemRequestTransfer, $captureRequestTransfer);
69
        $this->increaseTotalGrossAmount($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 int $expenseAmount
92
     *
93
     * @return \Generated\Shared\Transfer\ItemTransfer
94
     */
95
    protected function buildExpenseItemTransfer(int $expenseAmount): ItemTransfer
96
    {
97
        return (new ItemTransfer())
98
            ->setSku(AfterPayConfig::CAPTURE_EXPENSE_SKU)
99
            ->setName(AfterPayConfig::CAPTURE_EXPENSE_DESCRIPTION)
100
            ->setUnitGrossPrice($expenseAmount)
101
            ->setUnitPriceToPayAggregation($expenseAmount)
102
            ->setUnitTaxAmountFullAggregation(0)
103
            ->setQuantity(1);
104
    }
105
106
    /**
107
     * @param \Generated\Shared\Transfer\AfterPayRequestOrderItemTransfer $orderItemRequestTransfer
108
     * @param \Generated\Shared\Transfer\AfterPayCaptureRequestTransfer $captureRequestTransfer
109
     *
110
     * @return void
111
     */
112
    protected function increaseTotalNetAmount(
113
        AfterPayRequestOrderItemTransfer $orderItemRequestTransfer,
114
        AfterPayCaptureRequestTransfer $captureRequestTransfer
115
    ): void {
116
        $oldNetAmountDecimal = $this->decimalToInt((float)$captureRequestTransfer->getOrderDetails()->getTotalNetAmount());
117
        $itemNetAmountDecimal = $this->decimalToInt((float)$orderItemRequestTransfer->getNetUnitPrice());
118
119
        $newNetAmountDecimal = $oldNetAmountDecimal + $itemNetAmountDecimal;
120
        $captureRequestTransfer->getOrderDetails()->setTotalNetAmount(
121
            $this->intToDecimalString($newNetAmountDecimal)
122
        );
123
    }
124
125
    /**
126
     * @param \Generated\Shared\Transfer\AfterPayRequestOrderItemTransfer $orderItemRequestTransfer
127
     * @param \Generated\Shared\Transfer\AfterPayCaptureRequestTransfer $captureRequestTransfer
128
     *
129
     * @return void
130
     */
131
    protected function increaseTotalGrossAmount(
132
        AfterPayRequestOrderItemTransfer $orderItemRequestTransfer,
133
        AfterPayCaptureRequestTransfer $captureRequestTransfer
134
    ): void {
135
        $oldGrossAmountDecimal = $this->decimalToInt((float)$captureRequestTransfer->getOrderDetails()->getTotalGrossAmount());
136
        $itemGrossAmountDecimal = $this->decimalToInt((float)$orderItemRequestTransfer->getGrossUnitPrice());
137
138
        $newGrossAmountDecimal = $oldGrossAmountDecimal + $itemGrossAmountDecimal;
139
        $captureRequestTransfer->getOrderDetails()->setTotalGrossAmount(
140
            $this->intToDecimalString($newGrossAmountDecimal)
141
        );
142
    }
143
144
    /**
145
     * @param float $decimalValue
146
     *
147
     * @return int
148
     */
149
    protected function decimalToInt(float $decimalValue): int
150
    {
151
        return $this->money->convertDecimalToInteger($decimalValue);
152
    }
153
154
    /**
155
     * @param int $intValue
156
     *
157
     * @return string
158
     */
159
    protected function intToDecimalString(int $intValue): string
160
    {
161
        return (string)$this->money->convertIntegerToDecimal($intValue);
162
    }
163
}
164