class InstallData implements InstallDataInterface
{
/**
* Sales setup factory
*
* @var SalesSetupFactory
*/
private $salesSetupFactory;
/**
* @var Builder
*/
private $sequenceBuilder;
/**
* @var SequenceConfig
*/
private $sequenceConfig;
/**
* @param SalesSetupFactory $salesSetupFactory
* @param Builder $sequenceBuilder
* @param SequenceConfig $sequenceConfig
*/
public function __construct(
SalesSetupFactory $salesSetupFactory,
Builder $sequenceBuilder,
SequenceConfig $sequenceConfig
) {
$this->salesSetupFactory = $salesSetupFactory;
$this->sequenceBuilder = $sequenceBuilder;
$this->sequenceConfig = $sequenceConfig;
}
/**
* {@inheritdoc}
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
*/
public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
/** @var \Magento\Sales\Setup\SalesSetup $salesSetup */
$salesSetup = $this->salesSetupFactory->create(['setup' => $setup]);
/**
* Install eav entity types to the eav/entity_type table
*/
$salesSetup->installEntities();
/**
* Install order statuses from config
*/
$data = [];
//New order status
$statuses = [
'new_state_code_1' => __('New state label 1'),
'new_state_code_2' => __('New state label 2'),
'new_state_code_3' =>__('New state label 3'),
'new_state_code_4' =>__('New state label 4')
];
foreach ($statuses as $code => $info) {
$data[] = ['status' => $code, 'label' => $info];
}
//create status
$setup->getConnection()->insertArray($setup->getTable('sales_order_status'), ['status', 'label'], $data);
$data = [];
//prepare data for associate status to state
foreach ($statuses as $code => $label) {
$item = [
'label' => __($label),
'statuses' => [$code => ['default' => '1'], $code => []],
'visible_on_front' => true];
$states[$code] = $item;
}
foreach ($states as $code => $info) {
if (isset($info['statuses'])) {
foreach ($info['statuses'] as $status => $statusInfo) {
$data[] = [
'status' => $status,
'state' => 'processing', //state to associate
'is_default' => is_array($statusInfo) && isset($statusInfo['default']) ? 1 : 0,
];
}
}
}
//Insert row for associate
$setup->getConnection()->insertArray(
$setup->getTable('sales_order_status_state'),
['status', 'state', 'is_default'],
$data
);
/** Update visibility for states */
$states = ['new', 'processing', 'complete', 'closed', 'canceled', 'holded', 'payment_review'];
foreach ($states as $state) {
$setup->getConnection()->update(
$setup->getTable('sales_order_status_state'),
['visible_on_front' => 1],
['state = ?' => $state]
);
}
}
}