<?php

/**
 * This is the model class for table "contable.param_contables".
 *
 * The followings are the available columns in table 'contable.param_contables':
 * @property integer $id
 * @property integer $rp_pagar_dism_ap
 * @property integer $rp_pagar_dism_ae
 */
class ParametrosContables extends CActiveRecord
{


    public $rp_pagar_dism_ap_cta;
    public $cuenta_descripcion;
	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'contable.param_contables';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
                        array('clave, valor,descripcion,naturaleza','required'),
                        array('clave','unique'),
                        //array('rp_pagar_dism_ap, rp_pagar_dism_ae, lq_pagar_dism_ap,lq_pagar_dism_ae', 'required'),
			//array('rp_pagar_dism_ap, rp_pagar_dism_ae, lq_pagar_dism_ap, lq_pagar_dism_ae', 'numerical', 'integerOnly'=>true),
			// The following rule is used by search().
                        //
                        //array('rp_pagar_dism_ap, rp_pagar_dism_ae, lq_pagar_dism_ap,lq_pagar_dism_ae', 'safe'),
			// @todo Please remove those attributes that should not be searched.
			array('clave, valor,naturaleza,id_escenario,descripcion', 'safe'),
                        //array('id, rp_pagar_dism_ap, rp_pagar_dism_ae', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
            'cuenta_padre' => array(self::BELONGS_TO, 'CuentasConsolidada', 'valor'),
            'escenarios' => array(self::BELONGS_TO, 'ParamEscenarios', 'id_escenario'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id' => 'ID',
			'rp_pagar_dism_ap' => 'Cuenta contable de disminucion de aporte patronal al pagar retiros parciales',
			'rp_pagar_dism_ae' => 'Cuenta contable de disminucion de aporte del empleador al pagar retiros parciales',
                        'lq_pagar_dism_ap' => 'Cuenta contable de disminución de aporte patronal al pagar liquidaciones',
                        'lq_pagar_dism_ae' => 'Cuenta contable de disminución de aporte del empleado al pagar liquidaciones',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 *
	 * Typical usecase:
	 * - Initialize the model fields with values from filter form.
	 * - Execute this method to get CActiveDataProvider instance which will filter
	 * models according to data in model fields.
	 * - Pass data provider to CGridView, CListView or any similar widget.
	 *
	 * @return CActiveDataProvider the data provider that can return the models
	 * based on the search/filter conditions.
	 */
	public function search()
	{
		// @todo Please modify the following code to remove attributes that should not be searched.

		$criteria=new CDbCriteria;

		$criteria->compare('id',$this->id);
		$criteria->compare('rp_pagar_dism_ap',$this->rp_pagar_dism_ap);
		$criteria->compare('rp_pagar_dism_ae',$this->rp_pagar_dism_ae);

		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}

	/**
	 * Returns the static model of the specified AR class.
	 * Please note that you should have this exact method in all your CActiveRecord descendants!
	 * @param string $className active record class name.
	 * @return ParametrosContables the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

        public function getValorCta()
        {
            if (! $this->valor) {
                return;
            }

            $cuenta = CuentasConsolidada::model()->findByPk($this->valor);

            if (is_null($cuenta)) {
                return;
            }

            return "<b>{$cuenta->codigo_cuenta}</b> - <i>{$cuenta->descripcion}</i>";
        }

        public function getValorCta2()
        {
            if (! $this->valor) {
                return;
            }

            $cuenta = CuentasConsolidada::model()->findByPk($this->valor);

            if (is_null($cuenta)) {
                return;
            }

            return "{$cuenta->codigo_cuenta} - {$cuenta->descripcion}";
        }

    /**
     * Optiene la cuenta contable desde "param_unidad" basandose en si esta contabilizando con cuentas mayores o auxiliares
     * @param  array $datos
     * @return string|boolean
     */
    public static function config($datos)
    {
        $config = Yii::app()->getDb()->createCommand('
            SELECT CASE pc.conf_unidad
                    WHEN FALSE THEN pc.valor::varchar
                    WHEN TRUE THEN
                        (SELECT cc.id
                        FROM contable.parametros p
                        INNER JOIN contable.cuentas_consolidada cc ON cc.id=p.id_cuenta
                        WHERE p.id_clave=pc.id
                          AND p.id_escenario=:escenario
                          AND p.id_tipo_parametro=:tipo_parametro
                          AND p.id_proceso=:proceso
                          AND p.blnborrado IS FALSE)::varchar
                END AS valor
            FROM contable.param_contables pc
            WHERE pc.clave=:clave;

        ')->bindValues($datos)->queryRow();

        if (! $config['valor']) {
            $unidad = Unidad::model()->findByPk($datos['unidad']);
            $escenario = ParamEscenarios::model()->findByPk($datos['escenario']);
            throw new Exception("Error: la unidad <strong>{$unidad->descripcion}</strong> no tiene una cuenta auxiliar definidad para el escenario <strong>{$escenario->descripcion}</strong> con la clave <strong>{$datos['clave']}</strong>.");
        }

        return $config['valor'];
    }

       public function getColor() {
        if (isset($_GET['id'])){
        if ($this->id == $_GET['id'])   {
                $statuscolor='naranja';
        }
          else {
            $statuscolor='white';

          }
            return $statuscolor;
        }
    }

    public function hasParamsDefined()
    {
        return Yii::app()->getDb()->createCommand("
            SELECT EXISTS
              (SELECT 1
               FROM contable.parametros
               WHERE id_clave=:id AND blnborrado IS FALSE) AS res
        ")->bindValue('id', $this->id)->queryRow()['res'];
    }

    public function getCuentaFromConfUnidad()
    {
        $res = Yii::app()->getDb()->createCommand('
            SELECT cc.codigo_cuenta,
                   cc.descripcion
            FROM contable.param_unidad pu
            INNER JOIN contable.cuentas_consolidada cc ON cc.id=pu.clvcuenta
            WHERE pu.id_clave=:id AND pu.blnborrado IS FALSE
        ')->bindValue('id', $this->id)->queryRow();

        if (is_null($res)) {
            return '';
        }

        return "<span><strong>{$res['codigo_cuenta']}</span></strong> - <i>{$res['descripcion']}</i>";
    }

    public function hasParams()
    {
        return Yii::app()->getDb()->createCommand("
            SELECT EXISTS(
                    SELECT 1
                    FROM contable.parametros p
                    INNER JOIN contable.cuentas_consolidada cc ON cc.id=p.id_cuenta
                    WHERE p.id_clave=:id AND p.blnborrado IS FALSE
            ) as res
        ")->bindValue('id', $this->id)->queryRow()['res'];
    }

    public static function getClaves($request)
    {
        $datos = Yii::app()->getDb()->createCommand('
            SELECT pc.id,
                   pc.id_escenario,
                   pc.clave,
                   pc.conf_unidad,
                   cc.id AS id_cuenta,
                   concat(cc.codigo_cuenta, \' \', cc.descripcion) AS nombre_cuenta,
                   p.id_cuenta AS id_cuenta_parametros,
                   concat(ccp.codigo_cuenta, \'-\', ccp.descripcion) AS codigo_cuenta_parametros,
                   pc.naturaleza
            FROM contable.param_contables pc
            INNER JOIN contable.cuentas_consolidada cc ON cc.id=pc.valor::integer
            LEFT JOIN contable.parametros p ON p.id_tipo_parametro=:tipo_parametro
                AND p.id_proceso=:proceso
                AND p.id_clave=pc.id
                AND p.blnborrado IS FALSE
            LEFT JOIN contable.cuentas_consolidada ccp ON ccp.id=p.id_cuenta
            WHERE pc.blnborrado IS FALSE
              AND pc.id_escenario=:escenario
            ORDER BY pc.naturaleza, cc.id, pc.id
        ')->bindValues([
            'escenario' => $request['id_escenario'],
            'tipo_parametro' => $request['id_tipo_parametro'],
            'proceso' => $request['id_proceso'],
        ])->queryAll();

        if (! $datos) {
            return;
        }

        return $datos;
    }
}
