77
88use Magento \CatalogImportExport \Model \Import \Product \Type \AbstractType ;
99use Magento \Tax \Model \ClassModel ;
10+ use Magento \Tax \Model \ClassModelFactory ;
11+ use Magento \Tax \Model \ResourceModel \TaxClass \Collection ;
12+ use Magento \Tax \Model \ResourceModel \TaxClass \CollectionFactory ;
1013
14+ /**
15+ * Imported products tax class processor
16+ */
1117class TaxClassProcessor
1218{
19+ /**
20+ * Empty tax class name
21+ */
22+ private const CLASS_NONE_NAME = 'none ' ;
23+
24+ /**
25+ * Empty tax class ID
26+ */
27+ private const CLASS_NONE_ID = 0 ;
28+
1329 /**
1430 * Tax attribute code.
1531 */
@@ -25,24 +41,24 @@ class TaxClassProcessor
2541 /**
2642 * Instance of tax class collection factory.
2743 *
28- * @var \Magento\Tax\Model\ResourceModel\TaxClass\ CollectionFactory
44+ * @var CollectionFactory
2945 */
3046 protected $ collectionFactory ;
3147
3248 /**
3349 * Instance of tax model factory.
3450 *
35- * @var \Magento\Tax\Model\ ClassModelFactory
51+ * @var ClassModelFactory
3652 */
3753 protected $ classModelFactory ;
3854
3955 /**
40- * @param \Magento\Tax\Model\ResourceModel\TaxClass\ CollectionFactory $collectionFactory
41- * @param \Magento\Tax\Model\ ClassModelFactory $classModelFactory
56+ * @param CollectionFactory $collectionFactory
57+ * @param ClassModelFactory $classModelFactory
4258 */
4359 public function __construct (
44- \ Magento \ Tax \ Model \ ResourceModel \ TaxClass \ CollectionFactory $ collectionFactory ,
45- \ Magento \ Tax \ Model \ ClassModelFactory $ classModelFactory
60+ CollectionFactory $ collectionFactory ,
61+ ClassModelFactory $ classModelFactory
4662 ) {
4763 $ this ->collectionFactory = $ collectionFactory ;
4864 $ this ->classModelFactory = $ classModelFactory ;
@@ -59,9 +75,9 @@ protected function initTaxClasses()
5975 if (empty ($ this ->taxClasses )) {
6076 $ collection = $ this ->collectionFactory ->create ();
6177 $ collection ->addFieldToFilter ('class_type ' , ClassModel::TAX_CLASS_TYPE_PRODUCT );
62- /* @var $collection \Magento\Tax\Model\ResourceModel\TaxClass\ Collection */
78+ /* @var $collection Collection */
6379 foreach ($ collection as $ taxClass ) {
64- $ this ->taxClasses [$ taxClass ->getClassName ()] = $ taxClass ->getId ();
80+ $ this ->taxClasses [mb_strtolower ( $ taxClass ->getClassName () )] = $ taxClass ->getId ();
6581 }
6682 }
6783 return $ this ;
@@ -76,7 +92,7 @@ protected function initTaxClasses()
7692 */
7793 protected function createTaxClass ($ taxClassName , AbstractType $ productTypeModel )
7894 {
79- /** @var \Magento\Tax\Model\ ClassModelFactory $taxClass */
95+ /** @var ClassModelFactory $taxClass */
8096 $ taxClass = $ this ->classModelFactory ->create ();
8197 $ taxClass ->setClassType (ClassModel::TAX_CLASS_TYPE_PRODUCT );
8298 $ taxClass ->setClassName ($ taxClassName );
@@ -98,10 +114,22 @@ protected function createTaxClass($taxClassName, AbstractType $productTypeModel)
98114 */
99115 public function upsertTaxClass ($ taxClassName , AbstractType $ productTypeModel )
100116 {
101- if (!isset ($ this ->taxClasses [$ taxClassName ])) {
102- $ this ->taxClasses [$ taxClassName ] = $ this ->createTaxClass ($ taxClassName , $ productTypeModel );
117+ $ normalizedTaxClassName = mb_strtolower ($ taxClassName );
118+
119+ if ($ normalizedTaxClassName === (string ) self ::CLASS_NONE_ID ) {
120+ $ normalizedTaxClassName = self ::CLASS_NONE_NAME ;
121+ }
122+
123+ if (!isset ($ this ->taxClasses [$ normalizedTaxClassName ])) {
124+ $ this ->taxClasses [$ normalizedTaxClassName ] = $ normalizedTaxClassName === self ::CLASS_NONE_NAME
125+ ? self ::CLASS_NONE_ID
126+ : $ this ->createTaxClass ($ taxClassName , $ productTypeModel );
127+ }
128+ if ($ normalizedTaxClassName === self ::CLASS_NONE_NAME ) {
129+ // Add None option to tax_class_id options.
130+ $ productTypeModel ->addAttributeOption (self ::ATRR_CODE , self ::CLASS_NONE_ID , self ::CLASS_NONE_ID );
103131 }
104132
105- return $ this ->taxClasses [$ taxClassName ];
133+ return $ this ->taxClasses [$ normalizedTaxClassName ];
106134 }
107135}
0 commit comments