Страница 1 из 1
Как сделать переходы для статуса
Добавлено: 2018.09.12, 17:15
Fixpix
Привет, есть ли возможность сделать правила (переходы) для статуса? Есть статусы [новый, оптала, отправлен, завершен, отменен]. Как сделать, если стоит статус "новый", можно было выбрать только статусы оплата и отправлен или если стоит статус "отправлен", можно было бы только поставить статус "завершен".
что-то типо этого:
[новый=>[оптала, отправлен, завершен, отменен]]
[оптала=>[отправлен, завершен, отменен]]
[отправлен=>[завершен]]
Re: Как сделать переходы для статуса
Добавлено: 2018.09.12, 17:22
carono
Re: Как сделать переходы для статуса
Добавлено: 2018.09.14, 11:22
Fixpix
Сделал вот так:
view
Код: Выделить всё
'editableOptions' => function($model) {
/** @var $model Orders*/
return [
'placement' => 'left',
'asPopover' => true,
'header'=>'Статус',
'inputType'=>Editable::INPUT_DROPDOWN_LIST,
'data' => Orders::getAvailableState($model->Status),
'options' => ['class'=>'form-control', 'prompt'=>'Статус...'],
'submitOnEnter' => false,
];
}
model
Код: Выделить всё
public static function getTransitionsState()
{
$transitions = array(
self::STATUS_NEW => [self::STATUS_PAYMENT, self::STATUS_PACKAGING, self::STATUS_CANCELED],
self::STATUS_PAYMENT => [self::STATUS_PACKAGING, self::STATUS_SENT, self::STATUS_CANCELED],
self::STATUS_PACKAGING => [self::STATUS_SENT, self::STATUS_CANCELED],
self::STATUS_SENT => [self::STATUS_FINISHED],
self::STATUS_FINISHED => [self::STATUS_PAYMENT],
self::STATUS_CANCELED => [self::STATUS_FINISHED],
);
return $transitions;
}
public static function getAvailableState($state)
{
$transitions = self::getTransitionsState();
return $transitions[$state];
}
Изначально выводиться все правильно и показывает нужные мне статусы, но проблема в том, что если я выбираю другой статус и сохраняю, сохраняется индекс 0, 1... но не название статуса... Как решить проблему?
Re: Как сделать переходы для статуса
Добавлено: 2018.09.14, 12:32
andku83
carono писал(а): ↑2018.09.12, 17:22
...сохраняется индекс 0, 1... но не название статуса... Как решить проблему?
Код: Выделить всё
public static function getTransitionsState()
{
$transitions = array(
self::STATUS_NEW => [
self::STATUS_PAYMENT => self::STATUS_PAYMENT,
self::STATUS_PACKAGING => self::STATUS_PACKAGING,
self::STATUS_CANCELED => self::STATUS_CANCELED
],
...
);
return $transitions;
}
Ваше решение только ограничивает отображаемый список статусов, но если вручную в инспекторе браузера поменять значения в select, то можно перескакивать как угодно, все-таки посмотрите предложенный выше пакет.
Re: Как сделать переходы для статуса
Добавлено: 2018.09.14, 16:17
Fixpix
andku83 писал(а): ↑2018.09.14, 12:32
Ваше решение только ограничивает отображаемый список статусов, но если вручную в инспекторе браузера поменять значения в select, то можно перескакивать как угодно, все-таки посмотрите предложенный выше пакет.
Я обязательно попробую Yii 2 lifecycle behavior. Просто хотел знать что я не так делаю, чего не хватает, в общем разобраться самому...