Страница 1 из 1

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

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

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

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

Добавлено: 2018.09.12, 17:22
carono
Посмотри этот пакет https://github.com/cebe/yii2-lifecycle-behavior

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. Просто хотел знать что я не так делаю, чего не хватает, в общем разобраться самому...