Skip to content

Commit 5d93087

Browse files
committed
MAGETWO-97203: [GitHub] Next generated increment id based on the highest increment number from all stores after migration #615 #607
1 parent 080333d commit 5d93087

File tree

4 files changed

+46
-16
lines changed

4 files changed

+46
-16
lines changed

src/Migration/Step/SalesIncrement/Data.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ protected function createSequenceTable(array $entityType, $storeId)
149149
$columnOptions
150150
);
151151
$adapter->createTable($table);
152-
$incrementMaxNumber = $this->helper->getMaxIncrementForEntityType($entityType['entity_type_id']);
152+
$incrementMaxNumber = $this->helper->getMaxIncrementForEntityType($entityType['entity_type_id'], $storeId);
153153
if ($incrementMaxNumber !== false) {
154154
$adapter->insert($tableName, [$entityType['column'] => $incrementMaxNumber]);
155155
}

src/Migration/Step/SalesIncrement/Delta.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,14 @@ protected function transformData($data, $sourceDocument, $destDocument, $recordT
7575
/** @var \Magento\Framework\DB\Adapter\Pdo\Mysql $adapter */
7676
$adapter = $this->destination->getAdapter()->getSelect()->getAdapter();
7777
$entityType = $this->helper->getEntityTypeData('entity_type_id', $data['entity_type_id']);
78-
$incrementMaxNumber = $this->helper->getMaxIncrementForEntityType($data['entity_type_id']);
78+
$incrementMaxNumber = $this->helper->getMaxIncrementForEntityType(
79+
$data['entity_type_id'],
80+
$data['store_id']
81+
);
7982
if ($incrementMaxNumber === false || empty($entityType)) {
8083
return;
8184
}
82-
foreach ($this->helper->getStoreIds() as $storeId) {
85+
foreach ($this->helper->getStoreIdsOfStoreGroup($data['store_id']) as $storeId) {
8386
$tableName = $this->helper->getTableName($entityType['entity_type_table'], $storeId);
8487
$adapter->insertOnDuplicate($tableName, [$entityType['column'] => $incrementMaxNumber]);
8588
}

src/Migration/Step/SalesIncrement/Helper.php

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,27 @@ class Helper
1717
/**
1818
* @var Source
1919
*/
20-
protected $source;
20+
private $source;
2121

2222
/**
2323
* @var Destination
2424
*/
25-
protected $destination;
25+
private $destination;
2626

2727
/**
2828
* @var string
2929
*/
30-
protected $eavEntityStore = 'eav_entity_store';
30+
private $eavEntityStoreTable = 'eav_entity_store';
3131

3232
/**
3333
* @var string
3434
*/
35-
protected $storeTable = 'core_store';
35+
private $storeTable = 'core_store';
3636

3737
/**
3838
* @var array
3939
*/
40-
protected $sequenceMetaTable = [
40+
private $sequenceMetaTable = [
4141
'name' => 'sales_sequence_meta',
4242
'structure' => [
4343
'meta_id',
@@ -50,7 +50,7 @@ class Helper
5050
/**
5151
* @var array
5252
*/
53-
protected $sequenceProfileTable = [
53+
private $sequenceProfileTable = [
5454
'name' => 'sales_sequence_profile',
5555
'structure' => [
5656
'profile_id',
@@ -68,7 +68,7 @@ class Helper
6868
/**
6969
* @var array
7070
*/
71-
protected $entityTypeTablesMap = [
71+
private $entityTypeTablesMap = [
7272
[
7373
'entity_type_code' => 'order',
7474
'entity_type_table' => 'sequence_order',
@@ -106,24 +106,48 @@ public function __construct(
106106

107107
/**
108108
* @param int $entityTypeId
109+
* @param int $storeId
109110
* @return bool|int
110111
*/
111-
public function getMaxIncrementForEntityType($entityTypeId)
112+
public function getMaxIncrementForEntityType($entityTypeId, $storeId)
112113
{
113114
/** @var \Migration\ResourceModel\Adapter\Mysql $adapter */
114115
$adapter = $this->source->getAdapter();
115116
$query = $adapter->getSelect()->from(
116-
$this->source->addDocumentPrefix($this->eavEntityStore),
117+
$this->source->addDocumentPrefix($this->eavEntityStoreTable),
117118
['increment_prefix', 'increment_last_id']
118-
)->where('entity_type_id = ?', $entityTypeId);
119+
)->where('entity_type_id = ?', $entityTypeId
120+
)->where('store_id IN (?)', $this->getStoreIdsOfStoreGroup($storeId));
119121
$data = $query->getAdapter()->fetchAll($query);
120122
if (!$data) {
121123
return false;
122124
}
123125
$cutPrefixFunction = function (array $data) {
124126
return (int) substr($data['increment_last_id'], strlen($data['increment_prefix']));
125127
};
126-
return max(array_map($cutPrefixFunction, $data));
128+
$maxIncrement = max(array_map($cutPrefixFunction, $data));
129+
return $maxIncrement;
130+
}
131+
132+
/**
133+
* Return store ids of store group
134+
*
135+
* @param $storeId
136+
* @return array
137+
*/
138+
public function getStoreIdsOfStoreGroup($storeId)
139+
{
140+
/** @var \Migration\ResourceModel\Adapter\Mysql $adapter */
141+
$adapter = $this->source->getAdapter();
142+
$select = $adapter->getSelect()->from(
143+
['cs' => $this->source->addDocumentPrefix($this->storeTable)],
144+
['store_id']
145+
)->join(
146+
['css' => $this->source->addDocumentPrefix($this->storeTable)],
147+
'css.group_id = cs.group_id',
148+
[]
149+
)->where('css.store_id = ?', $storeId);
150+
return $select->getAdapter()->fetchCol($select);
127151
}
128152

129153
/**
@@ -200,7 +224,7 @@ public function getTableName($table, $storeId = false)
200224
* @param array $entityTypeCodes
201225
* @return array
202226
*/
203-
protected function getEntityTypeIdByCode($entityTypeCodes)
227+
private function getEntityTypeIdByCode($entityTypeCodes)
204228
{
205229
/** @var Mysql $adapter */
206230
$adapter = $this->destination->getAdapter();

src/Migration/Step/SalesIncrement/Volume.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,10 @@ public function perform()
5959
$adapter = $this->destination->getAdapter()->getSelect()->getAdapter();
6060
foreach ($this->helper->getEntityTypeTablesMap() as $entityType) {
6161
foreach ($this->helper->getStoreIds() as $storeId) {
62-
$incrementMaxNumber = $this->helper->getMaxIncrementForEntityType($entityType['entity_type_id']);
62+
$incrementMaxNumber = $this->helper->getMaxIncrementForEntityType(
63+
$entityType['entity_type_id'],
64+
$storeId
65+
);
6366
$select = $adapter->select()
6467
->from($this->helper->getTableName($entityType['entity_type_table'], $storeId))
6568
->order("{$entityType['column']} DESC")

0 commit comments

Comments
 (0)