7
7
8
8
use Magento \CatalogImportExport \Model \Import \Product as ImportProduct ;
9
9
use Magento \CatalogImportExport \Model \Import \Product \RowValidatorInterface as ValidatorInterface ;
10
+ use Magento \ImportExport \Model \Import \ErrorProcessing \ProcessingErrorAggregatorInterface ;
10
11
use Magento \Framework \App \Resource ;
11
12
12
13
/**
@@ -45,6 +46,12 @@ class AdvancedPricing extends \Magento\ImportExport\Model\Import\Entity\Abstract
45
46
46
47
const ENTITY_TYPE_CODE = 'advanced_pricing ' ;
47
48
49
+ const VALIDATOR_MAIN = 'validator ' ;
50
+
51
+ const VALIDATOR_WEBSITE = 'validator_website ' ;
52
+
53
+ const VALIDATOR_GROUP_PRICE = 'validator_group_price ' ;
54
+
48
55
/**
49
56
* Validation failure message template definitions
50
57
*
@@ -61,6 +68,31 @@ class AdvancedPricing extends \Magento\ImportExport\Model\Import\Entity\Abstract
61
68
ValidatorInterface::ERROR_INVALID_GROUP_PRICE_SITE => 'Group Price data website is invalid ' ,
62
69
ValidatorInterface::ERROR_INVALID_GROUP_PRICE_GROUP => 'Group Price customer group is invalid ' ,
63
70
ValidatorInterface::ERROR_GROUP_PRICE_DATA_INCOMPLETE => 'Group Price data is incomplete ' ,
71
+ ValidatorInterface::ERROR_INVALID_ATTRIBUTE_DECIMAL =>
72
+ 'Value for \'%s \' attribute contains incorrect value, acceptable values are in decimal format ' ,
73
+ ];
74
+
75
+ /**
76
+ * If we should check column names
77
+ *
78
+ * @var bool
79
+ */
80
+ protected $ needColumnCheck = true ;
81
+
82
+ /**
83
+ * Valid column names
84
+ *
85
+ * @array
86
+ */
87
+ protected $ validColumnNames = [
88
+ self ::COL_SKU ,
89
+ self ::COL_TIER_PRICE_WEBSITE ,
90
+ self ::COL_TIER_PRICE_CUSTOMER_GROUP ,
91
+ self ::COL_TIER_PRICE_QTY ,
92
+ self ::COL_TIER_PRICE ,
93
+ self ::COL_GROUP_PRICE_WEBSITE ,
94
+ self ::COL_GROUP_PRICE_CUSTOMER_GROUP ,
95
+ self ::COL_GROUP_PRICE ,
64
96
];
65
97
66
98
/**
@@ -96,9 +128,9 @@ class AdvancedPricing extends \Magento\ImportExport\Model\Import\Entity\Abstract
96
128
protected $ _importProduct ;
97
129
98
130
/**
99
- * @var AdvancedPricing\Validator
131
+ * @var array
100
132
*/
101
- protected $ _validator ;
133
+ protected $ _validators = [] ;
102
134
103
135
/**
104
136
* @var array
@@ -110,16 +142,6 @@ class AdvancedPricing extends \Magento\ImportExport\Model\Import\Entity\Abstract
110
142
*/
111
143
protected $ _oldSkus ;
112
144
113
- /**
114
- * @var AdvancedPricing\Validator\Website
115
- */
116
- protected $ websiteValidator ;
117
-
118
- /**
119
- * @var AdvancedPricing\Validator\GroupPrice
120
- */
121
- protected $ groupPriceValidator ;
122
-
123
145
/**
124
146
* Permanent entity columns.
125
147
*
@@ -141,12 +163,15 @@ class AdvancedPricing extends \Magento\ImportExport\Model\Import\Entity\Abstract
141
163
142
164
/**
143
165
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
144
- * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
145
166
* @param \Magento\Framework\Json\Helper\Data $jsonHelper
146
167
* @param \Magento\ImportExport\Helper\Data $importExportData
147
- * @param \Magento\ImportExport\Model\Resource\Helper $resourceHelper
148
168
* @param \Magento\ImportExport\Model\Resource\Import\Data $importData
169
+ * @param \Magento\Eav\Model\Config $config
149
170
* @param \Magento\Framework\App\Resource $resource
171
+ * @param \Magento\ImportExport\Model\Resource\Helper $resourceHelper
172
+ * @param \Magento\Framework\Stdlib\StringUtils $string
173
+ * @param ProcessingErrorAggregatorInterface $errorAggregator
174
+ * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
150
175
* @param \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceFactory $resourceFactory
151
176
* @param \Magento\Catalog\Model\Product $productModel
152
177
* @param \Magento\Catalog\Helper\Data $catalogData
@@ -155,14 +180,18 @@ class AdvancedPricing extends \Magento\ImportExport\Model\Import\Entity\Abstract
155
180
* @param AdvancedPricing\Validator $validator
156
181
* @param AdvancedPricing\Validator\Website $websiteValidator
157
182
* @param AdvancedPricing\Validator\GroupPrice $groupPriceValidator
183
+ * @SuppressWarnings(PHPMD.UnusedFormalParameter)
158
184
*/
159
185
public function __construct (
160
- \Magento \Framework \Stdlib \DateTime \TimezoneInterface $ localeDate ,
161
186
\Magento \Framework \Json \Helper \Data $ jsonHelper ,
162
187
\Magento \ImportExport \Helper \Data $ importExportData ,
163
- \Magento \ImportExport \Model \Resource \Helper $ resourceHelper ,
164
188
\Magento \ImportExport \Model \Resource \Import \Data $ importData ,
189
+ \Magento \Eav \Model \Config $ config ,
165
190
\Magento \Framework \App \Resource $ resource ,
191
+ \Magento \ImportExport \Model \Resource \Helper $ resourceHelper ,
192
+ \Magento \Framework \Stdlib \StringUtils $ string ,
193
+ ProcessingErrorAggregatorInterface $ errorAggregator ,
194
+ \Magento \Framework \Stdlib \DateTime \TimezoneInterface $ localeDate ,
166
195
\Magento \CatalogImportExport \Model \Import \Proxy \Product \ResourceFactory $ resourceFactory ,
167
196
\Magento \Catalog \Model \Product $ productModel ,
168
197
\Magento \Catalog \Helper \Data $ catalogData ,
@@ -177,17 +206,33 @@ public function __construct(
177
206
$ this ->_importExportData = $ importExportData ;
178
207
$ this ->_resourceHelper = $ resourceHelper ;
179
208
$ this ->_dataSourceModel = $ importData ;
180
- $ this ->_connection = $ resource ->getConnection ();
209
+ $ this ->_connection = $ resource ->getConnection (' write ' );
181
210
$ this ->_resourceFactory = $ resourceFactory ;
182
211
$ this ->_productModel = $ productModel ;
183
212
$ this ->_catalogData = $ catalogData ;
184
213
$ this ->_storeResolver = $ storeResolver ;
185
214
$ this ->_importProduct = $ importProduct ;
186
- $ this ->_validator = $ validator ;
215
+ $ this ->_validators [ self :: VALIDATOR_MAIN ] = $ validator-> init ( $ this ) ;
187
216
$ this ->_oldSkus = $ this ->retrieveOldSkus ();
188
- $ this ->websiteValidator = $ websiteValidator ;
189
- $ this ->groupPriceValidator = $ groupPriceValidator ;
217
+ $ this ->_validators [self ::VALIDATOR_WEBSITE ] = $ websiteValidator ;
218
+ $ this ->_validators [self ::VALIDATOR_GROUP_PRICE ] = $ groupPriceValidator ;
219
+ $ this ->errorAggregator = $ errorAggregator ;
190
220
$ this ->_catalogProductEntity = $ this ->_resourceFactory ->create ()->getTable ('catalog_product_entity ' );
221
+
222
+ foreach (array_merge ($ this ->errorMessageTemplates , $ this ->_messageTemplates ) as $ errorCode => $ message ) {
223
+ $ this ->getErrorAggregator ()->addErrorMessageTemplate ($ errorCode , $ message );
224
+ }
225
+ }
226
+
227
+ /**
228
+ * Validator object getter.
229
+ *
230
+ * @param string $type
231
+ * @return AdvancedPricing\Validator|AdvancedPricing\Validator\Website|AdvancedPricing\Validator\GroupPrice
232
+ */
233
+ protected function _getValidator ($ type )
234
+ {
235
+ return $ this ->_validators [$ type ];
191
236
}
192
237
193
238
/**
@@ -211,7 +256,7 @@ public function validateRow(array $rowData, $rowNum)
211
256
{
212
257
$ sku = false ;
213
258
if (isset ($ this ->_validatedRows [$ rowNum ])) {
214
- return !isset ( $ this ->_invalidRows [ $ rowNum] );
259
+ return !$ this ->getErrorAggregator ()-> isRowInvalid ( $ rowNum );
215
260
}
216
261
$ this ->_validatedRows [$ rowNum ] = true ;
217
262
// BEHAVIOR_DELETE use specific validation logic
@@ -222,8 +267,8 @@ public function validateRow(array $rowData, $rowNum)
222
267
}
223
268
return true ;
224
269
}
225
- if (!$ this ->_validator ->isValid ($ rowData )) {
226
- foreach ($ this ->_validator ->getMessages () as $ message ) {
270
+ if (!$ this ->_getValidator ( self :: VALIDATOR_MAIN ) ->isValid ($ rowData )) {
271
+ foreach ($ this ->_getValidator ( self :: VALIDATOR_MAIN ) ->getMessages () as $ message ) {
227
272
$ this ->addRowError ($ message , $ rowNum );
228
273
}
229
274
}
@@ -233,7 +278,7 @@ public function validateRow(array $rowData, $rowNum)
233
278
if (false === $ sku ) {
234
279
$ this ->addRowError (ValidatorInterface::ERROR_ROW_IS_ORPHAN , $ rowNum );
235
280
}
236
- return !isset ( $ this ->_invalidRows [ $ rowNum] );
281
+ return !$ this ->getErrorAggregator ()-> isRowInvalid ( $ rowNum );
237
282
}
238
283
239
284
/**
@@ -277,10 +322,14 @@ public function deleteAdvancedPricing()
277
322
$ listSku = [];
278
323
while ($ bunch = $ this ->_dataSourceModel ->getNextBunch ()) {
279
324
foreach ($ bunch as $ rowNum => $ rowData ) {
280
- if ($ this ->validateRow ($ rowData , $ rowNum )) {
325
+ $ this ->validateRow ($ rowData , $ rowNum );
326
+ if (!$ this ->getErrorAggregator ()->isRowInvalid ($ rowNum )) {
281
327
$ rowSku = $ rowData [self ::COL_SKU ];
282
328
$ listSku [] = $ rowSku ;
283
329
}
330
+ if ($ this ->getErrorAggregator ()->hasToBeTerminated ()) {
331
+ $ this ->getErrorAggregator ()->addRowToSkip ($ rowNum );
332
+ }
284
333
}
285
334
}
286
335
if ($ listSku ) {
@@ -307,6 +356,7 @@ public function replaceAdvancedPricing()
307
356
*
308
357
* @return $this
309
358
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
359
+ * @SuppressWarnings(PHPMD.NPathComplexity)
310
360
*/
311
361
protected function saveAndReplaceAdvancedPrices ()
312
362
{
@@ -323,6 +373,11 @@ protected function saveAndReplaceAdvancedPrices()
323
373
$ this ->addRowError (ValidatorInterface::ERROR_SKU_IS_EMPTY , $ rowNum );
324
374
continue ;
325
375
}
376
+ if ($ this ->getErrorAggregator ()->hasToBeTerminated ()) {
377
+ $ this ->getErrorAggregator ()->addRowToSkip ($ rowNum );
378
+ continue ;
379
+ }
380
+
326
381
$ rowSku = $ rowData [self ::COL_SKU ];
327
382
$ listSku [] = $ rowSku ;
328
383
if (!empty ($ rowData [self ::COL_TIER_PRICE_WEBSITE ])) {
@@ -359,7 +414,7 @@ protected function saveAndReplaceAdvancedPrices()
359
414
}
360
415
} elseif (\Magento \ImportExport \Model \Import::BEHAVIOR_APPEND == $ behavior ) {
361
416
$ this ->processCountExistingPrices ($ tierPrices , self ::TABLE_TIER_PRICE )
362
- ->processcountExistingPrices ($ groupPrices , self ::TABLE_GROUPED_PRICE )
417
+ ->processCountExistingPrices ($ groupPrices , self ::TABLE_GROUPED_PRICE )
363
418
->processCountNewPrices ($ tierPrices , $ groupPrices );
364
419
$ this ->saveProductPrices ($ tierPrices , self ::TABLE_TIER_PRICE )
365
420
->saveProductPrices ($ groupPrices , self ::TABLE_GROUPED_PRICE );
@@ -462,7 +517,7 @@ protected function setUpdatedAt(array $listSku)
462
517
*/
463
518
protected function getWebSiteId ($ websiteCode )
464
519
{
465
- $ result = $ websiteCode == $ this ->websiteValidator ->getAllWebsitesValue () ||
520
+ $ result = $ websiteCode == $ this ->_getValidator ( self :: VALIDATOR_WEBSITE ) ->getAllWebsitesValue () ||
466
521
$ this ->_catalogData ->isPriceGlobal () ? 0 : $ this ->_storeResolver ->getWebsiteCodeToId ($ websiteCode );
467
522
return $ result ;
468
523
}
@@ -475,7 +530,7 @@ protected function getWebSiteId($websiteCode)
475
530
*/
476
531
protected function getCustomerGroupId ($ customerGroup )
477
532
{
478
- $ customerGroups = $ this ->groupPriceValidator ->getCustomerGroups ();
533
+ $ customerGroups = $ this ->_getValidator ( self :: VALIDATOR_GROUP_PRICE ) ->getCustomerGroups ();
479
534
return $ customerGroup == self ::VALUE_ALL_GROUPS ? 0 : $ customerGroups [$ customerGroup ];
480
535
}
481
536
0 commit comments