1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Tax\Model\Calculation;
- use Magento\Customer\Api\Data\AddressInterface as CustomerAddress;
- class CalculatorFactory
- {
- /**
- * Identifier constant for unit based calculation
- */
- const CALC_UNIT_BASE = 'UNIT_BASE_CALCULATION';
- /**
- * Identifier constant for row based calculation
- */
- const CALC_ROW_BASE = 'ROW_BASE_CALCULATION';
- /**
- * Identifier constant for total based calculation
- */
- const CALC_TOTAL_BASE = 'TOTAL_BASE_CALCULATION';
- /**
- * @var \Magento\Framework\ObjectManagerInterface
- */
- protected $objectManager;
- /**
- * Constructor
- *
- * @param \Magento\Framework\ObjectManagerInterface $objectManager
- */
- public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager)
- {
- $this->objectManager = $objectManager;
- }
- /**
- * Create new calculator
- *
- * @param string $type Type of calculator
- * @param int $storeId
- * @param CustomerAddress $billingAddress
- * @param CustomerAddress $shippingAddress
- * @param null|int $customerTaxClassId
- * @param null|int $customerId
- * @return \Magento\Tax\Model\Calculation\AbstractCalculator
- * @throws \InvalidArgumentException
- */
- public function create(
- $type,
- $storeId,
- CustomerAddress $billingAddress = null,
- CustomerAddress $shippingAddress = null,
- $customerTaxClassId = null,
- $customerId = null
- ) {
- switch ($type) {
- case self::CALC_UNIT_BASE:
- $className = \Magento\Tax\Model\Calculation\UnitBaseCalculator::class;
- break;
- case self::CALC_ROW_BASE:
- $className = \Magento\Tax\Model\Calculation\RowBaseCalculator::class;
- break;
- case self::CALC_TOTAL_BASE:
- $className = \Magento\Tax\Model\Calculation\TotalBaseCalculator::class;
- break;
- default:
- throw new \InvalidArgumentException('Unknown calculation type: ' . $type);
- }
- /** @var \Magento\Tax\Model\Calculation\AbstractCalculator $calculator */
- $calculator = $this->objectManager->create($className, ['storeId' => $storeId]);
- if (null != $shippingAddress) {
- $calculator->setShippingAddress($shippingAddress);
- }
- if (null != $billingAddress) {
- $calculator->setBillingAddress($billingAddress);
- }
- if (null != $customerTaxClassId) {
- $calculator->setCustomerTaxClassId($customerTaxClassId);
- }
- if (null != $customerId) {
- $calculator->setCustomerId($customerId);
- }
- return $calculator;
- }
- }
|