<?php

class ClientesSituacoes extends GxActiveRecord
{
	const DEMONSTRACAO_REALIZADA = 1;
	const DEMONSTRACAO_NAO_REALIZADA = 2;

	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	public function tableName()
	{
		return 'clientes_situacoes';
	}

	public static function label($n = 1) {
        return Yii::t('app', 'Status Cliente|Status Clientes', $n);
    }

	public static function representingColumn() {
        return 'CST_ID';
    }

    public function behaviors() {
        return array('datetimeI18NBehavior' => array('class' => 'ext.DateTimeI18NBehavior'));
    }

	public function rules()
	{
		return array(
			array('CST_IDCLIENTE, CST_IDFUNCIONARIO, CST_DESCRICAO, CST_DATA, CST_SITUACAO', 'required'),
			array('CST_IDMOTIVO_FN', 'verificaMotivoFn'),
			array('CST_DEMONSTRACAO, CST_IDMOTIVO_FN, CST_ID', 'safe'),
		);
	}

	public function relations()
	{
		return array(
            'Cliente' 					=> array(self::BELONGS_TO, 'Clientes', 'CST_IDCLIENTE'),
            'Autor'       				=> array(self::BELONGS_TO, 'Funcionarios', 'CST_IDFUNCIONARIO'),
            'MotivoFechamentoNegativo'	=> array(self::BELONGS_TO, 'Motivos', 'CST_IDMOTIVO_FN'),
        );
	}

	public function attributeLabels()
	{
		return array(
			'CST_ID' 			=> 'Código',
			'CST_SITUACAO' 		=> 'Status',
			'CST_IDMOTIVO_FN' 	=> 'Motivo Fechamento Negativo',
			'CST_DEMONSTRACAO' 	=> 'Realizada demonstração?',
			'CST_DESCRICAO'		=> 'Descrição',
			'CST_DATA' 			=> 'Data',
			'CST_IDFUNCIONARIO' => 'Autor',
			'CST_IDCLIENTE' 	=> 'Cliente',
			'Autor' 			=> 'Autor',
			'Cliente' 			=> 'Cliente',
		);
	}

	public function beforeSave() {
		if($this->CST_SITUACAO != "FN") {
			$this->CST_IDMOTIVO_FN = null;
		}
		return parent::beforeSave();
	}

	public function afterSave() {
		$cliente = Clientes::model()->findByPk($this->CST_IDCLIENTE);
		$cliente->atualizaStatus($this->CST_SITUACAO);

        if($this->CST_DEMONSTRACAO == ClientesSituacoes::DEMONSTRACAO_REALIZADA) {
        	$cliente->realizadaDemonstracao();
        }

        $cliente->atualizaMotivoFn($this->CST_IDMOTIVO_FN);
		return parent::afterSave();
	}

	public function verificaMotivoFn($attribute, $params) {
		if(empty($this->{$attribute}) && $this->CST_SITUACAO == 'FN') {
			$this->addError($attribute, 'Motivo de fechamento negativado é obrigatório!');
		}
	}

	public function getRealizadaDemonstracao() {
		return $this->CST_DEMONSTRACAO == ClientesSituacoes::DEMONSTRACAO_REALIZADA ? 'Sim' : 'Não';
	}

	public function getStatus() {
		return Util::getStatusCliente($this->CST_SITUACAO);
	}

	public function getMotivosFN() {
		return CHtml::listData(Motivos::model()->findAll('MOT_TIPO = '. Motivos::TIPO_FECHAMENTO_NEGATIVO . ' order by MOT_DESCRICAO ASC'), 'MOT_IDMOTIVO', 'MOT_DESCRICAO');
	}

	public function search() {
		$criteria = new CDbCriteria();
		$criteria->compare('CST_IDCLIENTE', $this->CST_IDCLIENTE);

		return new CActiveDataProvider($this, array(
		    'criteria' => $criteria,
		    'sort' => array(
		        'defaultOrder' => 'CST_DATA DESC, CST_ID DESC',
		        ),
            'pagination' => false
		    )
		);
	}
}
