public function actionStageEdit($id = null)
 {
     $model = null;
     if (null !== $id) {
         $model = OrderStage::findOne(['id' => $id]);
     }
     if (Yii::$app->request->isPost) {
         if (empty($model)) {
             $model = new OrderStage();
             $model->loadDefaultValues();
         }
         if ($model->load(Yii::$app->request->post())) {
             if ($model->validate() && $model->save()) {
                 return $this->redirect(Url::to(['', 'id' => $model->id]));
             } else {
                 Yii::$app->session->setFlash('error', 'Error saving data.');
             }
         } else {
             Yii::$app->session->setFlash('error', 'Error loading data.');
         }
     }
     $events = array_reduce(Events::find()->all(), function ($result, $item) {
         /** @var Events $item */
         $result[$item->event_name] = $item->event_name;
         return $result;
     }, ['' => '']);
     if (empty($model)) {
         $model = new OrderStage();
         $model->loadDefaultValues();
     }
     return $this->render('stage-edit', ['model' => $model, 'events' => $events]);
 }
 public function up()
 {
     $tableOptions = null;
     if ($this->db->driverName === 'mysql') {
         // http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci
         $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
     }
     $tblStage = \app\modules\shop\models\OrderStage::tableName();
     $tblStageLeaf = \app\modules\shop\models\OrderStageLeaf::tableName();
     $tblEvents = \app\modules\core\models\Events::tableName();
     $tblEventHandlers = \app\modules\core\models\EventHandlers::tableName();
     $this->insert($tblEvents, ['owner_class_name' => 'app\\modules\\shop\\ShopModule', 'event_name' => 'order_stage_final', 'event_class_name' => 'app\\modules\\shop\\events\\StageFinal', 'selector_prefix' => '', 'event_description' => '', 'documentation_link' => '']);
     $eventId = $this->db->lastInsertID;
     $this->insert($tblEventHandlers, ['event_id' => $eventId, 'sort_order' => 0, 'handler_class_name' => 'app\\modules\\shop\\helpers\\BaseOrderStageHandlers', 'handler_function_name' => 'handleStageFinal', 'is_active' => 1, 'non_deletable' => 1, 'triggering_type' => 'application_trigger']);
     $this->insert($tblEvents, ['owner_class_name' => 'app\\modules\\shop\\ShopModule', 'event_name' => 'order_stage_leaf_final', 'event_class_name' => 'app\\modules\\shop\\events\\StageLeafFinal', 'selector_prefix' => '', 'event_description' => '', 'documentation_link' => '']);
     $eventId = $this->db->lastInsertID;
     $this->insert($tblEventHandlers, ['event_id' => $eventId, 'sort_order' => 0, 'handler_class_name' => 'app\\modules\\shop\\helpers\\BaseOrderStageHandlers', 'handler_function_name' => 'handleFinal', 'is_active' => 1, 'non_deletable' => 1, 'triggering_type' => 'application_trigger']);
     $this->insert($tblStage, ['name' => 'final', 'name_frontend' => Yii::t('app', 'Order complete'), 'name_short' => 'final', 'is_initial' => 0, 'is_buyer_stage' => 0, 'become_non_temporary' => 0, 'is_in_cart' => 0, 'immutable_by_user' => 1, 'immutable_by_manager' => 1, 'immutable_by_assigned' => 1, 'reach_goal_ym' => '', 'reach_goal_ga' => '', 'event_name' => 'order_stage_final', 'view' => '']);
     $stage = $this->db->lastInsertID;
     $lastStage = \app\modules\shop\models\OrderStage::findOne(['name' => 'payment pay']);
     $lastStage = null === $lastStage ? 0 : $lastStage->id;
     $this->insert($tblStageLeaf, ['stage_from_id' => $stage, 'stage_to_id' => $lastStage, 'sort_order' => 0, 'button_label' => Yii::t('app', 'Order complete'), 'button_css_class' => 'btn btn-primary', 'notify_manager' => 0, 'notify_new_assigned_user' => 0, 'role_assignment_policy' => 'random', 'event_name' => 'order_stage_leaf_final']);
 }
 /**
  * Update order status action.
  * @param integer|null $id
  * @return array
  * @throws \yii\web\BadRequestHttpException
  */
 public function actionUpdateStage($id = null)
 {
     Yii::$app->response->format = Response::FORMAT_JSON;
     $post = Yii::$app->request->post();
     if ($id === null) {
         if (!isset($post['editableIndex'], $post['editableKey'], $post['Order'][$post['editableIndex']]['order_stage_id'])) {
             throw new BadRequestHttpException();
         }
         $id = $post['editableKey'];
         $value = $post['Order'][$post['editableIndex']]['order_stage_id'];
     } else {
         if (!isset($post['Order']['order_stage_id'])) {
             throw new BadRequestHttpException();
         }
         $value = $post['Order']['order_stage_id'];
     }
     $order = $this->findModel($id);
     $order->order_stage_id = $value;
     /** @var OrderStage $orderStage */
     $orderStage = OrderStage::findOne($value);
     if ($orderStage === null || !$order->save(true, ['order_stage_id'])) {
         return ['message' => Yii::t('app', 'Cannot change order stage')];
     }
     return ['output' => Html::tag('span', $orderStage->name_short)];
 }