Skip to content

Commit 249aa90

Browse files
committed
optimize calc price
1 parent cccead7 commit 249aa90

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

src/Traits/CartPay.php

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use Bavix\Wallet\Services\AssistantServiceInterface;
2222
use Bavix\Wallet\Services\AtomicServiceInterface;
2323
use Bavix\Wallet\Services\BasketServiceInterface;
24+
use Bavix\Wallet\Services\CastServiceInterface;
2425
use Bavix\Wallet\Services\ConsistencyServiceInterface;
2526
use Bavix\Wallet\Services\PrepareServiceInterface;
2627
use Bavix\Wallet\Services\PurchaseServiceInterface;
@@ -107,27 +108,32 @@ public function safePayCart(CartInterface $cart, bool $force = false): array
107108
public function payCart(CartInterface $cart, bool $force = false): array
108109
{
109110
return app(AtomicServiceInterface::class)->block($this, function () use ($cart, $force) {
111+
$basketDto = $cart->getBasketDto();
110112
$basketService = app(BasketServiceInterface::class);
111113
$availabilityAssembler = app(AvailabilityDtoAssemblerInterface::class);
112-
if (!$basketService->availability($availabilityAssembler->create($this, $cart->getBasketDto(), $force))) {
114+
if (!$basketService->availability($availabilityAssembler->create($this, $basketDto, $force))) {
113115
throw new ProductEnded(
114116
app(TranslatorServiceInterface::class)->get('wallet::errors.product_stock'),
115117
ExceptionInterface::PRODUCT_ENDED
116118
);
117119
}
118120

121+
$prices = [];
119122
$transfers = [];
120-
$basketDto = $cart->getBasketDto();
123+
$castService = app(CastServiceInterface::class);
121124
$prepareService = app(PrepareServiceInterface::class);
122125
$assistantService = app(AssistantServiceInterface::class);
123126
foreach ($cart->getBasketDto()->items() as $item) {
124-
foreach ($item->getItems() as $_item) {
125-
$product = $item->getProduct();
127+
foreach ($item->getItems() as $product) {
128+
$productId = $product::class.':'.$castService->getModel($product)->getKey();
129+
$prices[$productId] = $item->getPricePerItem()
130+
?? $prices[$productId]
131+
?? $product->getAmountProduct($this);
126132
$transfers[] = $prepareService->transferLazy(
127133
$this,
128134
$product,
129135
Transfer::STATUS_PAID,
130-
$item->getPricePerItem() ?? $product->getAmountProduct($this),
136+
$prices[$productId],
131137
$assistantService->getMeta($basketDto, $product)
132138
);
133139
}

0 commit comments

Comments
 (0)