7
7
8
8
use Magento \CatalogImportExport \Model \Import \Product \Type \AbstractType ;
9
9
use 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 ;
10
13
14
+ /**
15
+ * Imported products tax class processor
16
+ */
11
17
class TaxClassProcessor
12
18
{
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
+
13
29
/**
14
30
* Tax attribute code.
15
31
*/
@@ -25,24 +41,24 @@ class TaxClassProcessor
25
41
/**
26
42
* Instance of tax class collection factory.
27
43
*
28
- * @var \Magento\Tax\Model\ResourceModel\TaxClass\ CollectionFactory
44
+ * @var CollectionFactory
29
45
*/
30
46
protected $ collectionFactory ;
31
47
32
48
/**
33
49
* Instance of tax model factory.
34
50
*
35
- * @var \Magento\Tax\Model\ ClassModelFactory
51
+ * @var ClassModelFactory
36
52
*/
37
53
protected $ classModelFactory ;
38
54
39
55
/**
40
- * @param \Magento\Tax\Model\ResourceModel\TaxClass\ CollectionFactory $collectionFactory
41
- * @param \Magento\Tax\Model\ ClassModelFactory $classModelFactory
56
+ * @param CollectionFactory $collectionFactory
57
+ * @param ClassModelFactory $classModelFactory
42
58
*/
43
59
public function __construct (
44
- \ Magento \ Tax \ Model \ ResourceModel \ TaxClass \ CollectionFactory $ collectionFactory ,
45
- \ Magento \ Tax \ Model \ ClassModelFactory $ classModelFactory
60
+ CollectionFactory $ collectionFactory ,
61
+ ClassModelFactory $ classModelFactory
46
62
) {
47
63
$ this ->collectionFactory = $ collectionFactory ;
48
64
$ this ->classModelFactory = $ classModelFactory ;
@@ -59,9 +75,9 @@ protected function initTaxClasses()
59
75
if (empty ($ this ->taxClasses )) {
60
76
$ collection = $ this ->collectionFactory ->create ();
61
77
$ collection ->addFieldToFilter ('class_type ' , ClassModel::TAX_CLASS_TYPE_PRODUCT );
62
- /* @var $collection \Magento\Tax\Model\ResourceModel\TaxClass\ Collection */
78
+ /* @var $collection Collection */
63
79
foreach ($ collection as $ taxClass ) {
64
- $ this ->taxClasses [$ taxClass ->getClassName ()] = $ taxClass ->getId ();
80
+ $ this ->taxClasses [mb_strtolower ( $ taxClass ->getClassName () )] = $ taxClass ->getId ();
65
81
}
66
82
}
67
83
return $ this ;
@@ -76,7 +92,7 @@ protected function initTaxClasses()
76
92
*/
77
93
protected function createTaxClass ($ taxClassName , AbstractType $ productTypeModel )
78
94
{
79
- /** @var \Magento\Tax\Model\ ClassModelFactory $taxClass */
95
+ /** @var ClassModelFactory $taxClass */
80
96
$ taxClass = $ this ->classModelFactory ->create ();
81
97
$ taxClass ->setClassType (ClassModel::TAX_CLASS_TYPE_PRODUCT );
82
98
$ taxClass ->setClassName ($ taxClassName );
@@ -98,10 +114,22 @@ protected function createTaxClass($taxClassName, AbstractType $productTypeModel)
98
114
*/
99
115
public function upsertTaxClass ($ taxClassName , AbstractType $ productTypeModel )
100
116
{
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 );
103
131
}
104
132
105
- return $ this ->taxClasses [$ taxClassName ];
133
+ return $ this ->taxClasses [$ normalizedTaxClassName ];
106
134
}
107
135
}
0 commit comments