Purchase.php 1.45 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\InstantPurchase\Model\QuoteManagement;

use Magento\Framework\Exception\LocalizedException;
use Magento\Quote\Api\CartManagementInterface;
use Magento\Quote\Api\CartRepositoryInterface;
use Magento\Quote\Model\Quote;

/**
 * Purchase products from quote.
 *
 * @api May be used for pluginization.
 * @since 100.2.0
 */
class Purchase
{
    /**
     * @var CartRepositoryInterface
     */
    private $quoteRepository;

    /**
     * @var CartManagementInterface
     */
    private $quoteManagement;

    /**
     * Purchase constructor.
     * @param CartRepositoryInterface $quoteRepository
     * @param CartManagementInterface $quoteManagement
     */
    public function __construct(
        CartRepositoryInterface $quoteRepository,
        CartManagementInterface $quoteManagement
    ) {
        $this->quoteRepository = $quoteRepository;
        $this->quoteManagement = $quoteManagement;
    }

    /**
     * Summarize quote and place order.
     *
     * @param Quote $quote
     * @return int Order id
     * @throws LocalizedException if order can not be placed for a quote.
     * @since 100.2.0
     */
    public function purchase(Quote $quote): int
    {
        $quote->collectTotals();
        $this->quoteRepository->save($quote);
        $orderId = $this->quoteManagement->placeOrder($quote->getId());
        return $orderId;
    }
}