<?php

namespace common\models;

use common\helpers\snowflake\SnowFake;
use common\helpers\Tool;
use Yii;
use yii\base\Exception;

/**
 * This is the model class for table "{{%PERF_ORDER}}".
 *
 * @property string $ID
 * @property string $SN 业绩单编号
 * @property string $DEC_SN 报单编号
 * @property string $DEC_TYPE 报单类型
 * @property int $DEC_STATUS 业绩单状态
 * @property string $USER_ID 产生业绩会员ID
 * @property string $LAST_DEC_LV 结算时会员级别
 * @property string $LAST_EMP_LV 结算时会员聘级
 * @property int $LAST_STATUS 结算时状态
 * @property string $LAST_REC_USER_NAME 结算时开拓者编号
 * @property string $LAST_REC_REAL_NAME 结算时开拓者姓名
 * @property string $PV 业绩单PV
 * @property string $DEC_AMOUNT 报单金额
 * @property string $LAST_SUB_COM_ID 结算时所属分公司
 * @property int $LAST_PROVINCE 结算时省份
 * @property int $LAST_CITY 结算时城市
 * @property int $LAST_COUNTY 结算时地区
 * @property string $DEC_USER_ID 报单主体ID
 * @property string $LAST_DEC_DEC_LV 结算时报单主体级别
 * @property string $LAST_DEC_SUB_COM_ID 结算时报单主体所属分公司
 * @property int $LAST_DEC_PROVINCE 结算时报单主体省份
 * @property int $LAST_DEC_CITY 结算时报单主体城市
 * @property int $LAST_DEC_COUNTY 结算时报单主体地区
 * @property int $PERIOD_NUM 所在期数
 * @property int $CALC_MONTH 结算月
 * @property string $P_CALC_MONTH 分区结算月
 * @property int $CREATED_AT 创建时间
 * @property int $CLOSED_AT 置废时间
 */
class PerfOrder extends \common\components\ActiveRecord
{
    //业绩单状态
    const STATUS_NORMAL = 1; //正常
    const STATUS_CLOSED = 2; //置废
    const STATUS_NAME = [
      self::STATUS_NORMAL=>'Audited',//已审核
      self::STATUS_CLOSED=>'置废',
    ];
    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return '{{%PERF_ORDER}}';
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['SN', 'DEC_TYPE', 'USER_ID', 'PERIOD_NUM', 'CALC_MONTH', 'P_CALC_MONTH', 'CREATED_AT', 'CLOSED_AT'], 'required'],
            [['LAST_STATUS', 'DEC_STATUS', 'LAST_PROVINCE', 'LAST_CITY', 'LAST_COUNTY', 'LAST_DEC_PROVINCE', 'LAST_DEC_CITY', 'LAST_DEC_COUNTY', 'PERIOD_NUM', 'CALC_MONTH', 'CREATED_AT', 'CLOSED_AT'], 'integer'],
            [['PV', 'DEC_AMOUNT'], 'number'],
            [['ID', 'USER_ID', 'LAST_DEC_LV','LAST_EMP_LV', 'LAST_SUB_COM_ID', 'DEC_USER_ID', 'LAST_DEC_DEC_LV', 'LAST_DEC_SUB_COM_ID'], 'string', 'max' => 32],
            [['SN', 'DEC_SN', 'DEC_TYPE'], 'string', 'max' => 32],
            [['LAST_REC_USER_NAME'], 'string', 'max' => 16],
            [['LAST_REC_REAL_NAME'], 'string', 'max' => 128],
            [['P_CALC_MONTH'], 'string', 'max' => 7],
            [['SN'], 'unique'],
            [['ID'], 'unique'],
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'ID' => 'ID',
            'SN' => '业绩单编号',
            'DEC_SN' => '报单编号',
            'DEC_TYPE' => '报单类型',
            'DEC_STATUS' => '业绩单状态',
            'USER_ID' => '产生业绩会员ID',
            'LAST_DEC_LV' => '结算时会员级别',
            'LAST_EMP_LV' => '结算时会员聘级',
            'LAST_STATUS' => '结算时状态',
            'LAST_REC_USER_NAME' => '结算时开拓者编号',
            'LAST_REC_REAL_NAME' => '结算时开拓者姓名',
            'PV' => '业绩单BV',
            'DEC_AMOUNT' => '报单金额',
            'LAST_SUB_COM_ID' => '结算时所属分公司',
            'LAST_PROVINCE' => '结算时省份',
            'LAST_CITY' => '结算时城市',
            'LAST_COUNTY' => '结算时地区',
            'DEC_USER_ID' => '报单主体ID',
            'LAST_DEC_DEC_LV' => '结算时报单主体级别',
            'LAST_DEC_SUB_COM_ID' => '结算时报单主体所属分公司',
            'LAST_DEC_PROVINCE' => '结算时报单主体省份',
            'LAST_DEC_CITY' => '结算时报单主体城市',
            'LAST_DEC_COUNTY' => '结算时报单主体地区',
            'PERIOD_NUM' => '所在期数',
            'CALC_MONTH' => '结算月',
            'P_CALC_MONTH' => '分区结算月',
            'CREATED_AT' => '创建时间',
            'CLOSED_AT' => '置废时间',
        ];
    }

    /**
     * 获取当前最大的订单编号
     * @return mixed
     */
    public static function getMaxSn(){
        return static::find()->where('1=1')->max('SN');
    }

    /**
     * 生成sn
     * @return string
     */
    public static function generateSN() {
        return  SnowFake::instance()->generateId();
    }
}
