<?php

class Operacion extends CActiveRecord
{
    public $cuenta_contable;
    public $cuenta_descripcion;

    public function tableName()
    {
        return 'pagos.conceptos_operacion';
    }

    public function rules()
    {
        return [
            ['descripcion, id_cuenta', 'required'],
            ['reverso', 'boolean'],
            ['descripcion, id_cuenta, id_concepto, cuenta_contable', 'safe', 'on' => 'search'],
        ];
    }

    public function relations()
    {
        return [
            'cuenta' => [self::BELONGS_TO, 'CuentasConsolidada', 'id_cuenta'],
        ];
    }

    public function attributeLabels()
    {
        return [
            'descripcion' => 'Descripción',
            'id_cuenta' => 'Cuenta contable',
            'cuenta_descripcion' => 'Cuenta contable',
            'cuenta_contable' => 'Cuenta contable',
        ];
    }

    public function search()
    {
        $criteria = new CDbCriteria();
        $criteria->select = 't.*,
                             CASE WHEN cc.codigo_cuenta is not null then concat(cc.codigo_cuenta, \' - \', cc.descripcion)
                                  ELSE \'Sin cuenta contable definida\'
                             END as cuenta_contable';
        $criteria->join = 'LEFT JOIN contable.cuentas_consolidada cc on t.id_cuenta=cc.id';

        $criteria->compare('t.id', $this->id);
        $criteria->compare('LOWER(t.descripcion)::text', strtolower($this->descripcion), true);
        $criteria->compare('LOWER(case WHEN cc.codigo_cuenta is not null then concat(cc.codigo_cuenta, \' - \', cc.descripcion)
                                       else \'Sin cuenta contable definida\'
                                  end)', strtolower($this->cuenta_contable), true);
        $criteria->addCondition('t.blnborrado is false');
        $criteria->order = 't.descripcion ASC';

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

    public function getCuentaContable()
    {
        if (! $this->id_cuenta) {
            return null;
        }

        return $this->cuenta->codigo_cuenta.'-'.$this->cuenta->descripcion;
    }

    public function setCuentaContable($descripcion)
    {
        $codigo = explode('-', $descripcion);
        $cuenta = CuentasConsolidada::model()->find('"codigo_cuenta"=:id', [':id' => $codigo[0]]);

        if (! $cuenta) {
            return;
        }

        $this->id_cuenta = $cuenta->id;
    }

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

    public function getAll()
    {
        return CHtml::listData(
            self::model()->findAllByAttributes([
                'blnborrado' => false,
                'reverso' => false
            ])
        , 'id', 'descripcion');
    }

    public function getForReverso()
    {
        return CHtml::listData(
            self::model()->findAllByAttributes([
                'blnborrado' => false, 
                'reverso' => true
            ])
        , 'id', 'descripcion');
    }

    public static function getCuentaContableFromConcepto($concepto)
    {
        return self::model()->findByPk($concepto)->getAttribute('id_cuenta');
    }
}
