<?php

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

    public function tableName()
    {
        return 'ajuste_haberes.concepto_ajuste';
    }

    public function rules()
    {
        return [
            ['descripcion', 'required'],
            ['descripcion, asignacion, deduccion', 'safe'],
            ['descripcion, cuenta_contable', 'safe', 'on'=>'search'],
        ];
    }

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

    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'descripcion' => 'Descripcion',
            'cuenta_descripcion' => 'Cuenta contable',
        ];
    }

    public function search()
    {
        $criteria=new CDbCriteria;
        $criteria->select = 't.id, t.descripcion, t.asignacion, t.deduccion, concat(cc.codigo_cuenta, \' - \', cc.descripcion) as cuenta_contable';
        $criteria->join = 'LEFT JOIN contable.cuentas_consolidada cc on cc.id=t.id_cuenta';
        $criteria->compare('id', $this->id);
        $criteria->compare('concat(cc.codigo_cuenta, \' - \', cc.descripcion)', $this->cuenta_contable, true);
        $criteria->compare('descripcion', $this->descripcion, true);
        $criteria->compare('blnborrado', false);
        $criteria->order = 't.descripcion';

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

    public function beforeSave()
    {
        $this->fecha_registro= date('d-m-Y h:m:s');
        $this->id_usuario = Yii::app()->user->id;
        return parent::beforeSave();
    }

    public function getCuentaContable()
    {
        Yii::import('application.modules.contable.models.*');
        if ($this->isNewRecord || ! $this->cuenta) {
            return '';
        }

        $this->cuenta_descripcion = $this->cuenta->getCuenta();
    }

    public function setCuentaContable()
    {
        Yii::import('application.modules.contable.models.*');
        $codigo = explode('-', $this->cuenta_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 static function getAllHtml()
    {
        return json_encode(
            (new Warp(
                self::model()->findAll('blnborrado=false and deduccion is true')
            ))->map(function ($concepto) {
                return CHtml::tag('option', ['value' => $concepto->id], CHtml::encode($concepto->descripcion));
            })
        );
    }

    public function all()
    {
        return CHtml::listData(
            self::model()->findAll('blnborrado=false'),
            'id',
            'descripcion'
        );
    }

    public static function getAll()
    {
        return CHtml::listData(
            self::model()->findAll('blnborrado=false and deduccion is true'),
            'id',
            'descripcion'
        );
    }

    public static function getAllAsignaciones()
    {
        return CHtml::listData(
            self::model()->findAll('blnborrado=false and asignacion is true'),
            'id',
            'descripcion'
        );
    }

    public static function getAllDeducciones()
    {
        return CHtml::listData(
            self::model()->findAll('blnborrado=false and deduccion is true'),
            'id',
            'descripcion'
        );
    }
}
