Как сделать переходы для статуса

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Fixpix
Сообщения: 25
Зарегистрирован: 2018.07.31, 15:33

Как сделать переходы для статуса

Сообщение Fixpix » 2018.09.12, 17:15

Привет, есть ли возможность сделать правила (переходы) для статуса? Есть статусы [новый, оптала, отправлен, завершен, отменен]. Как сделать, если стоит статус "новый", можно было выбрать только статусы оплата и отправлен или если стоит статус "отправлен", можно было бы только поставить статус "завершен".

что-то типо этого:
[новый=>[оптала, отправлен, завершен, отменен]]
[оптала=>[отправлен, завершен, отменен]]
[отправлен=>[завершен]]

Аватара пользователя
carono
Сообщения: 21
Зарегистрирован: 2018.04.28, 11:05

Re: Как сделать переходы для статуса

Сообщение carono » 2018.09.12, 17:22

Посмотри этот пакет https://github.com/cebe/yii2-lifecycle-behavior

Fixpix
Сообщения: 25
Зарегистрирован: 2018.07.31, 15:33

Re: Как сделать переходы для статуса

Сообщение Fixpix » 2018.09.14, 11:22

Сделал вот так:

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... но не название статуса... Как решить проблему?

andku83
Сообщения: 727
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Как сделать переходы для статуса

Сообщение andku83 » 2018.09.14, 12:32

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, то можно перескакивать как угодно, все-таки посмотрите предложенный выше пакет.

Fixpix
Сообщения: 25
Зарегистрирован: 2018.07.31, 15:33

Re: Как сделать переходы для статуса

Сообщение Fixpix » 2018.09.14, 16:17

andku83 писал(а):
2018.09.14, 12:32
Ваше решение только ограничивает отображаемый список статусов, но если вручную в инспекторе браузера поменять значения в select, то можно перескакивать как угодно, все-таки посмотрите предложенный выше пакет.
Я обязательно попробую Yii 2 lifecycle behavior. Просто хотел знать что я не так делаю, чего не хватает, в общем разобраться самому...

Ответить