Как программно создать налоговое правило в контроллере magento 2
Я попытался с помощью этого кода создать налоговое правило программно. но это не работает, модель не загружена. вы можете увидеть этот код:
$objectManagers = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
$fixtureTaxRule = $objectManagers->create('Magento\Tax\Model\Calculation\Rule');
Я получил эту ошибку:
Class 'Magento\TestFramework\Helper\Bootstrap' not found
Не могли бы вы подсказать, как я могу создать налоговое правило?
1
Author: Kartik Asodariya, 2016-09-20
2 answers
Наконец-то я решил эту проблему. Теперь вы можете использовать этот код, и я надеюсь, что он также полезен для вас, ребята.
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$fixtureTaxRule = $objectManager->create(\Magento\Tax\Model\Calculation\Rule::class);
$fixtureTaxRule->setCode("Test");
$fixtureTaxRule->setPriority(0);
$fixtureTaxRule->setCustomerTaxClassIds(array(3));
$fixtureTaxRule->setProductTaxClassIds(array(2));
$fixtureTaxRule->setTaxRateIds(array(3));
$fixtureTaxRule->save();
4
Author: Kartik Asodariya, 2018-03-05 11:08:58
Использование диспетчера объектов запрещено, поэтому ответ выше кажется неправильным.
Правильный ответ можно найти в setup/src/Magento/Setup/Fixtures/TaxRulesFixture.php в методе setTaxMode.
Следует использовать Taxratefactory и taxRateRepository вместе с taxrulefactory и taxRuleRepository.
//Add Tax Rate for selected Tax Mode
/** @var $taxRate TaxRateInterface */
$taxRate = $this->taxRateFactory->create();
$taxRate->setCode($taxMode)
->setRate(self::DEFAULT_TAX_RATE)
->setTaxCountryId(self::DEFAULT_TAX_COUNTRY)
->setTaxPostcode('*');
$taxRateData = $this->taxRateRepository->save($taxRate);
//Add Tax Rule for Tax Mode
/** @var $taxRuleDataObject TaxRuleInterface */
$taxRuleDataObject = $this->taxRuleFactory->create();
$taxRuleDataObject->setCode($taxMode)
->setTaxRateIds([$taxRateData->getId()])
->setCustomerTaxClassIds([self::DEFAULT_CUSTOMER_TAX_CLASS_ID])
->setProductTaxClassIds([self::DEFAULT_PRODUCT_TAX_CLASS_ID])
->setPriority(0)
->setPosition(0);
$this->taxRuleRepository->save($taxRuleDataObject);
1
Author: Hypo, 2020-02-19 13:22:29