50 self::TAX_RATE_TX => [
54 'tax_postcode' =>
'*',
60 self::TAX_RATE_AUSTIN => [
70 self::TAX_RATE_SHIPPING => [
73 'tax_region_id' =>
'*',
74 'tax_postcode' =>
'*',
80 self::TAX_STORE_RATE => [
84 'tax_postcode' =>
'*',
102 self::PRODUCT_TAX_CLASS_1 =>
null,
103 self::PRODUCT_TAX_CLASS_2 =>
null,
104 self::SHIPPING_TAX_CLASS =>
null,
116 self::CUSTOMER_TAX_CLASS_1 =>
null,
136 'name' =>
'Shopping Cart Rule',
140 'simple_action' =>
'by_percent',
141 'discount_amount' => 40,
142 'discount_step' => 0,
143 'stop_rules_processing' => 1,
144 'apply_to_shipping' => 0,
145 'website_ids' => [1],
171 $this->customerRepository = $this->objectManager->create(
172 \
Magento\Customer\Api\CustomerRepositoryInterface::class
174 $this->accountManagement = $this->objectManager->create(
175 \
Magento\Customer\Api\AccountManagementInterface::class
186 foreach (array_keys($this->customerTaxClasses) as
$className) {
187 $this->customerTaxClasses[
$className] = $this->objectManager->create(\
Magento\
Tax\Model\ClassModel::class)
204 foreach (array_keys($this->productTaxClasses) as
$className) {
205 $this->productTaxClasses[
$className] = $this->objectManager->create(\
Magento\
Tax\Model\ClassModel::class)
253 foreach (array_keys($this->taxRates) as $taxRateCode) {
254 if (isset($taxRateOverrides[$taxRateCode])) {
255 $this->taxRates[$taxRateCode][
'data'][
'rate'] = $taxRateOverrides[$taxRateCode];
257 $this->taxRates[$taxRateCode][
'id'] = $this->objectManager->create(
260 ->setData($this->taxRates[$taxRateCode][
'data'])
276 if (!empty($taxRuleOverrideData[
'customer_tax_class_ids'])) {
277 $customerTaxClassIds = [];
278 foreach ($taxRuleOverrideData[
'customer_tax_class_ids'] as $customerClassCode) {
279 $customerTaxClassIds[] = $this->customerTaxClasses[$customerClassCode];
281 $taxRuleOverrideData[
'customer_tax_class_ids'] = $customerTaxClassIds;
283 if (!empty($taxRuleOverrideData[
'product_tax_class_ids'])) {
284 $productTaxClassIds = [];
285 foreach ($taxRuleOverrideData[
'product_tax_class_ids'] as $productClassCode) {
286 $productTaxClassIds[] = $this->productTaxClasses[$productClassCode];
288 $taxRuleOverrideData[
'product_tax_class_ids'] = $productTaxClassIds;
290 if (!empty($taxRuleOverrideData[
'tax_rate_ids'])) {
291 $taxRateIdsForRule = [];
292 foreach ($taxRuleOverrideData[
'tax_rate_ids'] as $taxRateCode) {
293 $taxRateIdsForRule[] = $taxRateIds[$taxRateCode];
295 $taxRuleOverrideData[
'tax_rate_ids'] = $taxRateIdsForRule;
298 return $taxRuleOverrideData;
308 $productTaxClassIds = [];
309 foreach ($this->productTaxClasses as $productTaxClassName => $productTaxClassId) {
310 if ($productTaxClassName != self::SHIPPING_TAX_CLASS) {
311 $productTaxClassIds[] = $productTaxClassId;
315 return $productTaxClassIds;
338 public function getDefaultCustomerTaxClassId()
341 $groupManagement = $this->objectManager->get(\
Magento\Customer\Api\GroupManagementInterface::class);
342 $defaultGroup = $groupManagement->getDefaultGroup();
343 return $defaultGroup->getTaxClassId();
355 foreach ($this->taxRates as $taxRateCode =>
$taxRate) {
356 $taxRateIds[$taxRateCode] =
$taxRate[
'id'];
360 $customerClassIds = [
362 $this->getDefaultCustomerTaxClassId()
367 $taxRuleDefaultData = [
368 'code' =>
'Test Rule',
371 'customer_tax_class_ids' => $customerClassIds,
377 if (empty($overrides[self::TAX_RULE_OVERRIDES])) {
379 $shippingTaxRuleData = [
380 'code' =>
'Shipping Tax Rule',
383 'customer_tax_class_ids' => $customerClassIds,
387 $this->taxRules[$shippingTaxRuleData[
'code']] = $this->objectManager
389 ->setData($shippingTaxRuleData)
394 $this->taxRules[$taxRuleDefaultData[
'code']] = $this->objectManager
396 ->setData($taxRuleDefaultData)
400 foreach ($overrides[self::TAX_RULE_OVERRIDES] as $taxRuleOverrideData) {
403 $mergedTaxRuleData = array_merge($taxRuleDefaultData, $taxRuleOverrideData);
404 $this->taxRules[$mergedTaxRuleData[
'code']] = $this->objectManager
406 ->setData($mergedTaxRuleData)
456 if (!empty($overrides[self::CONFIG_OVERRIDES])) {
457 $this->setConfig($overrides[self::CONFIG_OVERRIDES]);
469 public function createSimpleProduct($sku,
$price, $taxClassId)
472 $product = $this->objectManager->create(\
Magento\Catalog\Model\Product::class);
475 ->setAttributeSetId(4)
476 ->setName(
'Simple Product' . $sku)
479 ->setTaxClassId($taxClassId)
482 'use_config_manage_stock' => 1,
484 'is_qty_decimal' => 0,
487 )->setMetaTitle(
'meta title')
488 ->setMetaKeyword(
'meta keyword')
489 ->setMetaDescription(
'meta description')
490 ->setVisibility(\
Magento\Catalog\Model\
Product\Visibility::VISIBILITY_BOTH)
491 ->setStatus(\
Magento\Catalog\Model\
Product\Attribute\Source\Status::STATUS_ENABLED)
504 protected function createCustomerGroup($customerTaxClassId)
508 $customerGroupFactory = $this->objectManager->create(\
Magento\Customer\Api\Data\GroupInterfaceFactory::class);
509 $customerGroup = $customerGroupFactory->create()
510 ->setCode(
'custom_group')
511 ->setTaxClassId($customerTaxClassId);
513 return $customerGroupId;
521 protected function createCustomer()
523 $customerGroupId = $this->createCustomerGroup($this->customerTaxClasses[self::CUSTOMER_TAX_CLASS_1]);
525 $customer = $this->objectManager->create(\
Magento\Customer\Model\Customer::class);
529 ->setAttributeSetId(1)
531 ->setPassword(
'password')
532 ->setGroupId($customerGroupId)
535 ->setFirstname(
'Firstname')
536 ->setLastname(
'Lastname')
539 return $this->customerRepository->getById(
$customer->getId());
549 protected function createCustomerAddress($addressOverride,
$customerId)
551 $defaultAddressData = [
552 'attribute_set_id' => 2,
553 'telephone' => 3468676,
557 'company' =>
'CompanyName',
558 'street' => [
'Green str, 67'],
559 'lastname' =>
'Smith',
560 'firstname' =>
'John',
564 $addressData = array_merge($defaultAddressData, $addressOverride);
581 protected function createCartRule($ruleDataOverride)
585 $ruleData = array_merge($this->defaultShoppingCartPriceRule, $ruleDataOverride);
599 protected function createQuote($quoteData,
$customer)
602 $addressService = $this->objectManager->create(\
Magento\Customer\Api\AddressRepositoryInterface::class);
605 $shippingAddressOverride = empty($quoteData[
'shipping_address']) ? [] : $quoteData[
'shipping_address'];
614 $billingAddressOverride = empty($quoteData[
'billing_address']) ? [] : $quoteData[
'billing_address'];
619 $quoteBillingAddress = $this->objectManager->create(\
Magento\Quote\Model\Quote\Address::class);
620 $quoteBillingAddress->importCustomerAddressData($addressService->getById(
$billingAddress->getId()));
623 $quote = $this->objectManager->create(\
Magento\Quote\Model\Quote::class);
626 ->setIsMultiShipping(
false)
628 ->setCheckoutMethod(
'register')
629 ->setPasswordHash($this->accountManagement->getPasswordHash(static::CUSTOMER_PASSWORD));
643 foreach ($itemsData as $itemData) {
644 $sku = $itemData[
'sku'];
645 $price = $itemData[
'price'];
646 $qty = isset($itemData[
'qty']) ? $itemData[
'qty'] : 1;
649 $taxClassId = $this->productTaxClasses[$taxClassName];
671 if (isset($quoteData[
'shipping_method'])) {
672 $quote->getShippingAddress()->setShippingMethod($quoteData[
'shipping_method']);
673 $quote->getShippingAddress()->setCollectShippingRates(
true);
677 if (!empty($quoteData[
'shopping_cart_rules'])) {
678 foreach ($quoteData[
'shopping_cart_rules'] as
$ruleData) {
const CONFIG_XML_PATH_APPLY_AFTER_DISCOUNT
const TAX_CLASS_TYPE_CUSTOMER
addProductToQuote($quote, $itemsData)
const CONFIG_XML_PATH_APPLY_ON
createTaxRates($overrides)
const COUPON_TYPE_NO_COUPON
const CONFIG_XML_PATH_DISCOUNT_TAX
processTaxRuleOverrides($taxRuleOverrideData, $taxRateIds)
$defaultShoppingCartPriceRule
const CONFIG_XML_PATH_SHIPPING_INCLUDES_TAX
const CUSTOMER_TAX_CLASS_1
const CONFIG_XML_PATH_SHIPPING_TAX_CLASS
__construct($objectManager)
const PRODUCT_TAX_CLASS_1
const CONFIG_XML_PATH_PRICE_INCLUDES_TAX
createTaxRules($overrides)
const PRODUCT_TAX_CLASS_2
const CONFIG_XML_PATH_BASED_ON
const TAX_CLASS_TYPE_PRODUCT