Как программно создать налоговое правило в контроллере magento 2


Я попытался с помощью этого кода создать налоговое правило программно. но это не работает, модель не загружена. вы можете увидеть этот код:

$objectManagers = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
$fixtureTaxRule = $objectManagers->create('Magento\Tax\Model\Calculation\Rule');

Я получил эту ошибку:

Class 'Magento\TestFramework\Helper\Bootstrap' not found

Не могли бы вы подсказать, как я могу создать налоговое правило?

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