161 lines
5.2 KiB
PHP
Executable File
161 lines
5.2 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Tax\Model;
|
|
|
|
use Magento\TestFramework\Helper\Bootstrap;
|
|
|
|
/**
|
|
* TaxRuleFixtureFactory is meant to help in testing tax by creating/destroying tax rules/classes/rates easily.
|
|
*/
|
|
class TaxRuleFixtureFactory
|
|
{
|
|
/**
|
|
* Object Manager
|
|
*
|
|
* @var \Magento\Framework\ObjectManagerInterface
|
|
*/
|
|
private $objectManager;
|
|
|
|
/**
|
|
* @var \Magento\Framework\Api\DataObjectHelper
|
|
*/
|
|
private $dataObjectHelper;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->objectManager = Bootstrap::getObjectManager();
|
|
$this->dataObjectHelper = $this->objectManager->create(\Magento\Framework\Api\DataObjectHelper::class);
|
|
}
|
|
|
|
/**
|
|
* Helper to create tax rules.
|
|
*
|
|
* @param array $rulesData Keys match populateWithArray
|
|
* @return array code => rule id
|
|
*/
|
|
public function createTaxRules($rulesData)
|
|
{
|
|
/** @var \Magento\Tax\Api\Data\TaxRuleInterfaceFactory $taxRuleFactory */
|
|
$taxRuleFactory = $this->objectManager->create(\Magento\Tax\Api\Data\TaxRuleInterfaceFactory::class);
|
|
/** @var \Magento\Tax\Api\TaxRuleRepositoryInterface $taxRuleService */
|
|
$taxRuleService = $this->objectManager->create(\Magento\Tax\Api\TaxRuleRepositoryInterface::class);
|
|
|
|
$rules = [];
|
|
foreach ($rulesData as $ruleData) {
|
|
$taxRule = $taxRuleFactory->create();
|
|
$this->dataObjectHelper->populateWithArray(
|
|
$taxRule,
|
|
$ruleData,
|
|
\Magento\Tax\Api\Data\TaxRuleInterface::class
|
|
);
|
|
|
|
$rules[$ruleData['code']] = $taxRuleService->save($taxRule)->getId();
|
|
}
|
|
|
|
return $rules;
|
|
}
|
|
|
|
/**
|
|
* Helper function that deletes tax rules
|
|
*
|
|
* @param int[] $ruleIds
|
|
*/
|
|
public function deleteTaxRules($ruleIds)
|
|
{
|
|
/** @var \Magento\Tax\Api\TaxRuleRepositoryInterface $taxRuleService */
|
|
$taxRuleService = $this->objectManager->create(\Magento\Tax\Api\TaxRuleRepositoryInterface::class);
|
|
|
|
foreach ($ruleIds as $ruleId) {
|
|
$taxRuleService->deleteById($ruleId);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Helper function that creates rates based on a set of input percentages.
|
|
*
|
|
* Returns a map of percentage => rate
|
|
*
|
|
* @param array $ratesData array of rate data, keys are 'country', 'region' and 'percentage'
|
|
* @return int[] Tax Rate Id
|
|
*/
|
|
public function createTaxRates($ratesData)
|
|
{
|
|
/** @var \Magento\Tax\Api\Data\TaxRateInterfaceFactory $taxRateFactory */
|
|
$taxRateFactory = $this->objectManager->create(\Magento\Tax\Api\Data\TaxRateInterfaceFactory::class);
|
|
/** @var \Magento\Tax\Api\TaxRateRepositoryInterface $taxRateService */
|
|
$taxRateService = $this->objectManager->create(\Magento\Tax\Api\TaxRateRepositoryInterface::class);
|
|
|
|
$rates = [];
|
|
foreach ($ratesData as $rateData) {
|
|
$code = "{$rateData['country']} - {$rateData['region']} - {$rateData['percentage']}";
|
|
$postcode = '*';
|
|
if (isset($rateData['postcode'])) {
|
|
$postcode = $rateData['postcode'];
|
|
$code = $code . " - " . $postcode;
|
|
}
|
|
|
|
$taxRate = $taxRateFactory->create();
|
|
$taxRate->setTaxCountryId($rateData['country'])
|
|
->setTaxRegionId($rateData['region'])
|
|
->setTaxPostcode($postcode)
|
|
->setCode($code)
|
|
->setRate($rateData['percentage']);
|
|
|
|
$rates[$code] = $taxRateService->save($taxRate)->getId();
|
|
}
|
|
return $rates;
|
|
}
|
|
|
|
/**
|
|
* Helper function that deletes tax rates
|
|
*
|
|
* @param int[] $rateIds
|
|
*/
|
|
public function deleteTaxRates($rateIds)
|
|
{
|
|
/** @var \Magento\Tax\Api\TaxRateRepositoryInterface $taxRateService */
|
|
$taxRateService = $this->objectManager->create(\Magento\Tax\Api\TaxRateRepositoryInterface::class);
|
|
foreach ($rateIds as $rateId) {
|
|
$taxRateService->deleteById($rateId);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Helper function that creates tax classes based on input.
|
|
*
|
|
* @param array $classesData Keys include 'name' and 'type'
|
|
* @return array ClassName => ClassId
|
|
*/
|
|
public function createTaxClasses($classesData)
|
|
{
|
|
$classes = [];
|
|
foreach ($classesData as $classData) {
|
|
/** @var \Magento\Tax\Model\ClassModel $class */
|
|
$class = $this->objectManager->create(\Magento\Tax\Model\ClassModel::class)
|
|
->setClassName($classData['name'])
|
|
->setClassType($classData['type'])
|
|
->save();
|
|
$classes[$classData['name']] = $class->getId();
|
|
}
|
|
return $classes;
|
|
}
|
|
|
|
/**
|
|
* Helper function that deletes tax classes
|
|
*
|
|
* @param int[] $classIds
|
|
*/
|
|
public function deleteTaxClasses($classIds)
|
|
{
|
|
/** @var \Magento\Tax\Model\ClassModel $class */
|
|
$class = $this->objectManager->create(\Magento\Tax\Model\ClassModel::class);
|
|
foreach ($classIds as $classId) {
|
|
$class->load($classId);
|
|
$class->delete();
|
|
}
|
|
}
|
|
}
|