Newer
Older
TillQliro / Model / Quote / Address / Total / Fee.php
@Jonas Jonsson Jonas Jonsson on 2 Apr 2024 3 KB Initial
<?php
/**
 * Copyright © Qliro AB. All rights reserved.
 * See LICENSE.txt for license details.
 */

namespace Qliro\QliroOne\Model\Quote\Address\Total;

use Magento\Checkout\Model\Session;
use Magento\Quote\Api\Data\PaymentInterface;
use Magento\Quote\Api\Data\ShippingAssignmentInterface;
use Magento\Quote\Model\Quote;
use Magento\Quote\Model\Quote\Address\Total;
use Magento\Quote\Model\Quote\Address\Total\AbstractTotal;
use Magento\Quote\Model\QuoteValidator;
use Qliro\QliroOne\Model\Config;
use Magento\Quote\Model\Quote\Address;

class Fee extends AbstractTotal
{
    /**
     * @var string
     */
    protected $_code = Config::TOTALS_FEE_CODE;

    /**
     * @var Session
     */
    private $checkoutSession;

    /**
     * Collect grand total address amount
     */
    private $quoteValidator = null;
    
    /**
     * @var \Qliro\QliroOne\Model\Fee
     */
    private $fee;

    /**
     * Fee constructor.
     *
     * @param QuoteValidator $quoteValidator
     * @param Session $checkoutSession
     * @param PaymentInterface $payment
     * @param \Qliro\QliroOne\Model\Fee $fee
     */
    public function __construct(
        QuoteValidator $quoteValidator,
        Session $checkoutSession,
        PaymentInterface $payment,
        \Qliro\QliroOne\Model\Fee $fee
    ) {
        $this->quoteValidator = $quoteValidator;
        $this->checkoutSession = $checkoutSession;
        $this->fee = $fee;
    }

    /**
     * Collect totals
     *
     * @param Quote $quote
     * @param ShippingAssignmentInterface $shippingAssignment
     * @param Total $total
     * @return $this
     */
    public function collect(
        Quote $quote,
        ShippingAssignmentInterface $shippingAssignment,
        Total $total
    ) {
        parent::collect($quote, $shippingAssignment, $total);

        $total->setQlirooneFee(0);
        $total->setBaseQlirooneFee(0);
        $total->setQlirooneFeeExclTax(0);
        $total->setBaseQlirooneFeeExclTax(0);

        $total->setTotalAmount(Config::TOTALS_FEE_CODE, 0);
        $total->setBaseTotalAmount(Config::TOTALS_BASE_FEE_CODE, 0);

        if ($quote->isVirtual()) {
            if ($shippingAssignment->getShipping()->getAddress()->getAddressType() != Address::TYPE_BILLING) {
                return $this;
            }
        } else {
            if (!count($shippingAssignment->getItems())) {
                return $this;
            }
        }

        $fee = $this->fee->getQlirooneFeeInclTax($quote);
        $baseFee = $this->fee->getBaseQlirooneFeeInclTax($quote);

        $feeExclTax = $this->fee->getQlirooneFeeExclTax($quote);
        $baseFeeExclTax = $this->fee->getBaseQlirooneFeeExclTax($quote);

        $total->setQlirooneFee($fee);
        $total->setBaseQlirooneFee($baseFee);
        $total->setQlirooneFeeExclTax($feeExclTax);
        $total->setBaseQlirooneFeeExclTax($baseFeeExclTax);

        $total->setTotalAmount(Config::TOTALS_FEE_CODE, $feeExclTax);
        $total->setBaseTotalAmount(Config::TOTALS_BASE_FEE_CODE, $baseFeeExclTax);

        return $this;
    }

    /**
     * Assign subtotal amount and label to address object
     *
     * @param Quote $quote
     * @param Total $total
     * @return array
     */
    public function fetch(Quote $quote, Total $total)
    {
        return $this->fee->getFeeArray($quote, $total->getQlirooneFee());
    }

    /**
     * Get Subtotal label. Doubt this is ever used...
     *
     * @return \Magento\Framework\Phrase
     */
    public function getLabel()
    {
        return __('Payment Fee');
    }
}