<?php
/**
 * @link      http://www.u-bo.com
 * @copyright 南京友博网络科技有限公司 
 * @license   http://www.u-bo.com/license/
 */

namespace home\modules\sale\models;

use Yii;
use yii\db\ActiveRecord;
use yii\db\Query;
use yii\helpers\Url;
use common\components\Tree;
use common\models\TreeList;

/**
 * 销售机会阶段表 ({%sale_category})
 *
 * @property integer $cat_id  (销售机会类型id)
 * @property string $name  (销售机会类型名称)
 * @property integer $parent_id  (父级id)
 * @property string $parent_ids  (父级所有类别项目id)
 * @property string $child_ids  (所有子项目类别id)
 * @property text $remark  (备注)
 * @property smallint $status  (状态  1：启用 0：禁用  99:逻辑删除 默认启用)
 * @property integer $sort  (排序 默认为0)
 * @property integer $create_time  (创建时间)
 * @property integer $update_time  (更新时间)
 * @property string $ip  (创建人ip)
 * @property integer $user_id  (创建人id)
 *
 * @author Strief http://blog.u-bo.com
 * @since 0.1
 */
class Category extends TreeList
{
    const STATUS_ENABLE = 1; //启用
    const STATUS_DISABLE = 0; //禁用

    /**
    * @inheritdoc
    */
    public static function tableName()
    {
        return '{{%sale_category}}';
    }
    
    /**
    * @inheritdoc
    */
    public function rules()
    {
        return [
            [['name', 'parent_id'], 'required'],
            [['parent_id', 'status', 'sort', 'create_time', 'update_time', 'user_id'], 'integer'],
            [['remark'], 'string'],
            [['name'], 'string', 'max' => 100],
            [['parent_ids', 'child_ids'], 'string', 'max' => 255],
            [['ip'], 'string', 'max' => 15]
        ];
    }

    /**
    * @inheritdoc
    */
    public function attributeLabels()
    {
        return [
            'cat_id' => 'ID',
            'name' => '阶段名称',
            'parent_id' => '父级ID',
            'parent_ids' => 'Parent Ids',
            'child_ids' => 'Child Ids',
            'remark' => '备注',
            'status' => '状态',
            'sort' => '排序',
            'create_time' => '创建时间',
            'update_time' => '更新时间',
            'ip' => '创建人Ip',
            'user_id' => '创建人ID',
        ];
    }

    /**
     * 列表页项目类别树形结构列表显示
     * 
     * @param  integer $curCat 默认选择节点
     * @param  [type]  $where  关键字搜索
     * @return array   $list   列表内容
     */
    public static function getIndexTree($curCat = 0, $where = [], $showFirst = 0)
    {
        $str = "<tr>
            <td>\$checkbox</td>
            <td>\$sort</td>
            <td class='theleft'>\$spacer\$name  </td>
            <td>\$str_status</td>
            <td>\$str_operation</td>
            </tr>";
        return parent::getIndexTreeList(0, [], $str, 'cat_id', 400, 280, $showFirst);
    }

    /**
     * 生成阶段下拉框
     * 
     * @param  integer $curCat      默认选择节点
     * @param  integer $disabledId  忽略节点
     * @param  boolean $isNewRecord 是否为插入操作
     * 
     * @return array   $list        上级类别下拉框内容
     */
    public static function getDropDownTree($curCat = 0, $disabledId = 0, $isNewRecord = 'true', $value='child_ids')
    {
        return parent::getDropDownTreeList($curCat, $disabledId, 'cat_id', $isNewRecord, $value);
    }

    /**
     * 返回状态列表 
     */
    public static function getStatusList()
    {
        return [
            self::STATUS_ENABLE => '正常',
            self::STATUS_DISABLE => '锁定',
        ];
    }

    /**
     * 插入更新前置操作
     */
    public function beforeSave($insert)
    {
        if (parent::beforeSave($insert)) {
            //判断是否是插入操作
            if ($this->isNewRecord) {
                $this->user_id =  Yii::$app->user->identity->user_id;
                $this->ip = Yii::$app->getRequest()->getUserIP();
                $this->create_time = time();
            }
            $this->update_time = time();
            return true;
        } else {
            return false;
        }
    }

    /**
     * 更新后更新项目类别表
     */
    public function afterSave($insert, $changedAttributes)
    {
        parent::afterSave($insert, $changedAttributes);
        //更新父级ID集，子集ID集
        parent::repairTree(self::tableName());
        //若用户修改了项目类别的状态则更新其子项目类别状态
        if ($this->status!='' && $this->status != $changedAttributes['status']) {
            parent::updateStatus(self::tableName(), $this->cat_id);
        }
        //检查更新项目类别禁用状态
        parent::updateStatusFalse(self::tableName());
    }

    /**
     * 删除后更新项目类别表
     */
    public function afterDelete()
    {
        parent::afterDelete();
        parent::repairTree(self::tableName());
    }
}