<?php

namespace common\models;

use common\helpers\Date;
use common\helpers\Tool;
use Yii;
use yii\db\Exception;

/**
 * This is the model class for table "{{%PERIOD_PREPARE}}".
 *
 * @property string $ID
 * @property int $PERIOD_NUM 期数
 * @property int $CALC_MONTH 所在结算月
 * @property int $CALC_YEAR 所在结算年
 * @property int $START_TIME 期数开始时间戳
 * @property int $END_TIME 期数结束时间戳
 * @property int $IS_MONTH 是否结算月节点
 * @property int $IS_YEAR 是否结算年节点
 * @property int $IS_CLOSED 是否已封期
 * @property int $IS_PERFED 是否已生成业绩单
 * @property int $IS_CALCULATED 是否已结算
 * @property int $IS_SENT 是否已发放
 * @property int $IS_PERFING 是否正在生成业绩单
 * @property int $IS_CALCING 是否正在计算状态
 * @property int $IS_SENDING 是否正在挂网状态
 * @property int $CALC_PERCENT 结算进度
 * @property int $SENT_PERCENT 发放进度
 * @property string $PERF_ADMIN_ID 生成业绩单管理员
 * @property string $CLOSE_ADMIN_ID 手动封期管理员ID
 * @property string $CALC_ADMIN_ID 结算管理员ID
 * @property string $SENT_ADMIN_ID 发放管理员ID
 * @property int $CLOSED_AT 发放管理员ID
 * @property int $PERF_STARTED_AT 生成业绩单开始时间
 * @property int $PERFED_AT 生成业绩单结束时间
 * @property int $CALCULATE_STARTED_AT 结算开始时间
 * @property int $CALCULATED_AT 结算完成时间
 * @property int $SEND_STARTED_AT 发放开始时间
 * @property int $SENT_AT 发放完成时间
 * @property int $CREATED_AT 创建时间
 */
class PeriodPrepare extends \common\components\ActiveRecord
{
    const CALCULATE_NONE = 0;
    const CALCULATE_FINISH = 1;
    const CALCULATE_FAIL = 2;

    const SEND_NONE = 0;
    const SEND_FINISH = 1;
    const SEND_FAIL = 2;

    const PERF_NONE = 0;
    const PERF_FINISH = 1;
    const PERF_FAIL = 2;

    const SYSTEM_START_PERIOD_NUM = 100;

    public $nowPeriodArr = null;
    public $periodNum = null;
    public $periodArr = null;

    public function init()
    {
        parent::init();
    }

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return '{{%PERIOD_PREPARE}}';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['PERIOD_NUM', 'CALC_MONTH', 'CALC_YEAR', 'START_TIME', 'END_TIME', 'CREATED_AT'], 'required'],
            [['PERIOD_NUM', 'CALC_MONTH', 'CALC_YEAR', 'START_TIME', 'END_TIME', 'IS_MONTH', 'IS_YEAR', 'IS_CLOSED', 'IS_PERFED', 'IS_CALCULATED', 'IS_SENT', 'IS_PERFING', 'IS_CALCING', 'IS_SENDING', 'CALC_PERCENT', 'SENT_PERCENT', 'CLOSED_AT', 'PERF_STARTED_AT', 'PERFED_AT', 'CALCULATE_STARTED_AT', 'CALCULATED_AT', 'SEND_STARTED_AT', 'SENT_AT', 'CREATED_AT'], 'integer'],
            [['ID', 'PERF_ADMIN_ID', 'CLOSE_ADMIN_ID', 'CALC_ADMIN_ID', 'SENT_ADMIN_ID'], 'string', 'max' => 32],
            [['PERIOD_NUM'], 'unique'],
            [['ID'], 'unique'],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'ID' => 'ID',
            'PERIOD_NUM' => '期数',
            'CALC_MONTH' => '所在结算月',
            'CALC_YEAR' => '所在结算年',
            'START_TIME' => '期数开始时间戳',
            'END_TIME' => '期数结束时间戳',
            'IS_MONTH' => '是否结算月节点',
            'IS_YEAR' => '是否结算年节点',
            'IS_CLOSED' => '是否已封期',
            'IS_PERFED' => '是否已生成业绩单',
            'IS_CALCULATED' => '是否已结算',
            'IS_SENT' => '是否已发放',
            'IS_PERFING' => '是否正在生成业绩单',
            'IS_CALCING' => '是否正在计算状态',
            'IS_SENDING' => '是否正在挂网状态',
            'CALC_PERCENT' => '结算进度',
            'SENT_PERCENT' => '发放进度',
            'PERF_ADMIN_ID' => '生成业绩单管理员',
            'CLOSE_ADMIN_ID' => '手动封期管理员ID',
            'CALC_ADMIN_ID' => '结算管理员ID',
            'SENT_ADMIN_ID' => '发放管理员ID',
            'CLOSED_AT' => '发放管理员ID',
            'PERF_STARTED_AT' => '生成业绩单开始时间',
            'PERFED_AT' => '生成业绩单结束时间',
            'CALCULATE_STARTED_AT' => '结算开始时间',
            'CALCULATED_AT' => '结算完成时间',
            'SEND_STARTED_AT' => '发放开始时间',
            'SENT_AT' => '发放完成时间',
            'CREATED_AT' => '创建时间',
        ];
    }

    // 获取此业绩是否已计算完成,只有计算完成,计算完成才给用户展示
    public static function isPerfed($periodNum) {
        $result = PeriodPrepare::findUseSlaves()
        ->where(
            'PERIOD_NUM=:PERIOD_NUM ', [':PERIOD_NUM' => $periodNum]
        )
        ->asArray()
        ->one();

        if (isset($result['IS_PERFED']) && $result['IS_PERFED'] == 1) {
            return true;
        }

        return false;
    }

    // 根据业绩期获取数据信息
    public static function getInfo($periodNum) {
        $result = PeriodPrepare::findUseSlaves()
        ->where(
            'PERIOD_NUM=:PERIOD_NUM ', [':PERIOD_NUM' => $periodNum]
        )
        ->asArray()
        ->one();

        return $result;
    }
}
