<?php

/**
 * This is the model class for table "ajuste_haberes.ajuste_haberes".
 *
 * The followings are the available columns in table 'ajuste_haberes.ajuste_haberes':
 * @property integer $id
 * @property string $idasociado
 * @property integer $id_tipo_ajuste
 * @property integer $id_concepto_ajuste
 * @property double $monto_asociado
 * @property double $monto_patrono
 * @property string $observacion
 * @property string $fecha_operacion
 * @property string $numero_operacion
 * @property integer $id_tipo_movimiento
 * @property string $id_nomina_ajuste_haberes
 * @property string $num_comprobante
 * @property string $fecha_comprobante
 * @property string $observacion_comprobante
 *
 * The followings are the available model relations:
 * @property AjusteHaberesSeguimiento[] $ajusteHaberesSeguimientos
 * @property Asociado $idasociado
 * @property ConceptoAjuste $idConceptoAjuste
 * @property TipoAjuste $idTipoAjuste
 * @property TipoMovimiento $idTipoMovimiento
 * @property DatosNominaAjusteHaberes $idNominaAjusteHaberes
 */
class AjusteHaberes extends CActiveRecord
{
	public $fecha_operacion_range = array();
	public $fecha_estatus_range = array();
	public $cedula, $nombre, $idUnidad, $fecha_estatus,
            $id_estatus,
            $nombre_estatus;
	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'ajuste_haberes.ajuste_haberes';
	}

	/**
	 * @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('cedula, id_tipo_ajuste, id_concepto_ajuste, observacion, fecha_operacion, numero_operacion, id_tipo_movimiento', 'required', 'on'=>'RegistroIndividual'),
			array(' id_tipo_movimiento', 'validarTipoOperacion', 'on'=>'RegistroIndividual'),
			array(' cedula', 'validarCedula', 'on'=>'RegistroIndividual'),
			array('monto_patrono, monto_asociado', 'match',  //PARA VALIDAR CAMPOS CON FORMATO MONEDA
					'pattern' => '/^[0-9]\d{0,2}(\.[0-9]\d{2,2})*(\,\d{1,2})?$/',
 					'message' => 'El valor del campo debe tener un formato 100.000,00', 'on'=>'RegistroIndividual'),

			array('id_tipo_ajuste, id_concepto_ajuste, id_tipo_movimiento', 'numerical', 'integerOnly'=>true),
			// array('monto_asociado, monto_patrono', 'numerical'),
			array('cedula,idasociado, observacion, fecha_operacion, numero_operacion, id_nomina_ajuste_haberes, num_comprobante, fecha_comprobante, observacion_comprobante, monto_asociado, monto_patrono, id_liquidacion', 'safe'),
			// The following rule is used by search().
			// @todo Please remove those attributes that should not be searched.
			array('cedula, nombre, id, idasociado, id_tipo_ajuste, id_concepto_ajuste, monto_asociado,fecha_operacion_range,id_estatus, fecha_estatus_range, monto_patrono, observacion, fecha_operacion, numero_operacion, id_tipo_movimiento, id_nomina_ajuste_haberes, num_comprobante, fecha_comprobante, observacion_comprobante', '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(
			'ajusteHaberesSeguimientos' => array(self::HAS_MANY, 'AjusteHaberesSeguimiento', 'id_ajuste_haberes'),
			'idAsociado' => array(self::BELONGS_TO, 'Asociado', 'idasociado'),
			'idConceptoAjuste' => array(self::BELONGS_TO, 'ConceptoAjuste', 'id_concepto_ajuste'),
			'idTipoAjuste' => array(self::BELONGS_TO, 'TipoAjuste', 'id_tipo_ajuste'),
			'idTipoMovimiento' => array(self::BELONGS_TO, 'TipoMovimiento', 'id_tipo_movimiento'),
			'idNominaAjusteHaberes' => array(self::BELONGS_TO, 'DatosNominaAjusteHaberes', 'id_nomina_ajuste_haberes'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id' => 'ID',
			'cedula' => 'Cédula',
			'idasociado' => 'Idasociado',
			'id_tipo_ajuste' => 'Tipo de ajuste',
			'id_concepto_ajuste' => 'Concepto del ajuste',
			'monto_asociado' => 'Monto asociado',
			'monto_patrono' => 'Monto patrono',
			'observacion' => 'Observación',
			'fecha_operacion' => 'Fecha de la operación',
			'numero_operacion' => 'Número de la operación',
			'id_tipo_movimiento' => 'Tipo de movimiento',
			'id_nomina_ajuste_haberes' => 'Id Nomina Ajuste Haberes',
			'num_comprobante' => 'Num Comprobante',
			'fecha_comprobante' => 'Fecha de comprobante',
			'observacion_comprobante' => 'Observacion Comprobante',
			'idUnidad' => 'Unidad',
			'id_estatus' => 'Estatus',
		);
	}
	public function validarTipoOperacion(){
		if (!$this->hasErrors('id_tipo_movimiento')) {
			if($this->id_tipo_movimiento==1 && $this->monto_asociado ==''){
                $this->addErrors('monto_asociado','EL monto asociado no puede ser nulo');
                $this->monto_patrono =NULL;
            }
            else if($this->id_tipo_movimiento==2 && $this->monto_patrono ==''){
                $this->addErrors('monto_patrono','EL monto patrono no puede ser nulo');
                $this->monto_asociado =NULL;
            }
            else if($this->id_tipo_movimiento==3){
            	if($this->monto_asociado =='')
                	$this->addErrors('monto_asociado','EL monto asociado no puede ser nulo');

                if($this->monto_patrono =='')
                	$this->addErrors('monto_patrono','EL monto patrono no puede ser nulo');
            }
		}
	}
	public function validarCedula(){
        if (!$this->hasErrors('cedula')) {
            $model = Asociado::model()->find('cedula=:cedula AND blnborrado= false AND id_estatus in(1,4) ORDER BY idasociado desc',array(':cedula'=>$this->cedula));
            if($model){
                $this->idasociado =  $model->idasociado;
                if($model->id_estatus ==2 ||$model->id_estatus ==5 ){
                	$this->addError('cedula','La cédula suministrada esta <b>"'.$model->idEstatus->nombre_estatus.'"</b>');
	            }
	            $modelLiquidacion=  EstatusLiquidacion::model()->with('idLiquidacion')->find('idasociado=:idasociado AND actual = true AND id_estatus_liquidacion !=3',array(':idasociado'=>$model->idasociado));
	            if ($modelLiquidacion) {
	                $this->addError('cedula','El asociado posee una SOLICITUD de  liquidación'.(($modelLiquidacion->id_estatus_liquidacion!=1)?' "'.$modelLiquidacion->idEstatusLiquidacion->nombre_estatus.'"':"").', realizada el día '. date('d-m-Y',  strtotime($modelLiquidacion->fecha_registro)));
	            }

            }
            else{
                $this->addError('cedula','No se encontraron registros asociados a la cédula');
            }

        }
    }

	/**
	 * 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->with ='idAsociado';
    $criteria->condition = 'id_nomina_ajuste_haberes is null';
    $criteria->compare('id',$this->id);
    $criteria->compare('cedula',$this->cedula);
    $criteria->compare('UPPER(nombre||apellidos)',strtoupper($this->nombre),true);
    $criteria->compare('id_tipo_ajuste',$this->id_tipo_ajuste);
    $criteria->compare('id_concepto_ajuste',$this->id_concepto_ajuste);
    $criteria->compare('monto_asociado',$this->monto_asociado);
    $criteria->compare('monto_patrono',$this->monto_patrono);
    $criteria->compare('observacion',$this->observacion,true);
    $criteria->compare('numero_operacion',$this->numero_operacion,true);
    $criteria->compare('id_tipo_movimiento',$this->id_tipo_movimiento);
    $criteria->compare('id_nomina_ajuste_haberes',$this->id_nomina_ajuste_haberes);
    $criteria->compare('num_comprobante',$this->num_comprobante,true);
    $criteria->compare('fecha_comprobante',$this->fecha_comprobante,true);
    $criteria->compare('observacion_comprobante',$this->observacion_comprobante,true);

    $from = $to = '';
          if (count($this->fecha_operacion_range)>=1) {
              if (isset($this->fecha_operacion_range['from'])) {
                  $from = $this->fecha_operacion_range['from'];
              }
              if (isset($this->fecha_operacion_range['to'])) {
                  $to= $this->fecha_operacion_range['to'];
              }
          }
          if ($from!='' || $to !='') {
              if ($from!='' && $to!='') {
                  $from = date("d-m-Y", strtotime($from));
                  $to = date("d-m-Y", strtotime($to));
                  $criteria->compare('fecha_operacion',">= $from",false);
                  $criteria->compare('fecha_operacion',"<= $to",false);
              }else {
                  if ($from!='') $creation_time = $from;
                  if ($to != '') $creation_time = $to;
                  $creation_time = date("d-m-Y", strtotime($creation_time));
                  $criteria->compare('fecha_operacion', "$creation_time" ,false);
              }
          }

        $from = $to = '';
        if (count($this->fecha_estatus_range)>=1) {
            if (isset($this->fecha_estatus_range['from'])) {
                $from = $this->fecha_estatus_range['from'];
            }
            if (isset($this->fecha_estatus_range['to'])) {
                $to= $this->fecha_estatus_range['to'];
            }
        }
          //CONSULTA PARA FILTRAR POR ESTATUS EN ADMIN
        if((isset($this->id_estatus) && $this->id_estatus !='')||($from!='' || $to !='')){
            $criteria->join = 'JOIN ajuste_haberes.ajuste_haberes_seguimiento AS c on c.id_ajuste_haberes = t.id';
        }
    if(isset($this->id_estatus) && $this->id_estatus !=''){
            $criteria->addCondition('c.id_estatus_ajuste_haberes ='.$this->id_estatus.' AND c.actual = true');
        }
    //Filtro para fecha de estatus
        if ($from!='' || $to !='') {
            if ($from!='' && $to!='') {
                $from = date("d-m-Y", strtotime($from));
                $to = date("d-m-Y", strtotime($to));

                if(isset($this->id_estatus) && $this->id_estatus !=''){
                    $criteria->addCondition('c.fecha_registro::DATE >=\''.$from.'\' AND c.fecha_registro::DATE <=\''.$to.'\'');
                }else{
                    $criteria->addCondition('c.actual = true AND c.fecha_registro::DATE >=\''.$from.'\' AND c.fecha_registro::DATE <=\''.$to.'\'');
                }
            }
            else {
                if ($from!='') $creation_time = $from;
                if ($to != '') $creation_time = $to;
                $creation_time = date("d-m-Y", strtotime($creation_time));

                if(isset($this->id_estatus) && $this->id_estatus !=''){
                    $criteria->addCondition('c.fecha_registro::DATE =\''.$creation_time.'\'');
                }else{
                    $criteria->addCondition('c.actual = true AND c.fecha_registro::DATE =\''.$creation_time.'\'');
                }
            }
        }
        $criteria->order = 't.id DESC';

    $_SESSION['datos_filtrados'] = new CActiveDataProvider($this, array(
                                                    'criteria'=>$criteria,
                                                    'pagination'=>false,
                                                ));
    return new CActiveDataProvider($this, array(
      'criteria'=>$criteria,
    ));
  }

  public function searchAjusteMasivo($id)
	{
		// @todo Please modify the following code to remove attributes that should not be searched.

		$criteria=new CDbCriteria;
		$criteria->with ='idAsociado';

    if(!is_numeric($this->cedula))
            $this->cedula = NULL;

		$criteria->compare('id',$this->id);
		$criteria->compare('cedula',$this->cedula);
		$criteria->compare('UPPER(nombre||apellidos)',strtoupper($this->nombre),true);
		$criteria->compare('id_tipo_ajuste',$this->id_tipo_ajuste);
		$criteria->compare('id_concepto_ajuste',$this->id_concepto_ajuste);
		$criteria->compare('monto_asociado',$this->monto_asociado);
		$criteria->compare('monto_patrono',$this->monto_patrono);
		$criteria->compare('observacion',$this->observacion,true);
		$criteria->compare('numero_operacion',$this->numero_operacion,true);
		$criteria->compare('id_tipo_movimiento',$this->id_tipo_movimiento);
		$criteria->compare('id_nomina_ajuste_haberes',$id);
		$criteria->compare('num_comprobante',$this->num_comprobante,true);
		$criteria->compare('fecha_comprobante',$this->fecha_comprobante,true);
		$criteria->compare('observacion_comprobante',$this->observacion_comprobante,true);

		$from = $to = '';
          if (count($this->fecha_operacion_range)>=1) {
              if (isset($this->fecha_operacion_range['from'])) {
                  $from = $this->fecha_operacion_range['from'];
              }
              if (isset($this->fecha_operacion_range['to'])) {
                  $to= $this->fecha_operacion_range['to'];
              }
          }
          if ($from!='' || $to !='') {
              if ($from!='' && $to!='') {
                  $from = date("d-m-Y", strtotime($from));
                  $to = date("d-m-Y", strtotime($to));
                  $criteria->compare('fecha_operacion',">= $from",false);
                  $criteria->compare('fecha_operacion',"<= $to",false);
              }else {
                  if ($from!='') $creation_time = $from;
                  if ($to != '') $creation_time = $to;
                  $creation_time = date("d-m-Y", strtotime($creation_time));
                  $criteria->compare('fecha_operacion', "$creation_time" ,false);
              }
          }

        $from = $to = '';
        if (count($this->fecha_estatus_range)>=1) {
            if (isset($this->fecha_estatus_range['from'])) {
                $from = $this->fecha_estatus_range['from'];
            }
            if (isset($this->fecha_estatus_range['to'])) {
                $to= $this->fecha_estatus_range['to'];
            }
        }
          //CONSULTA PARA FILTRAR POR ESTATUS EN ADMIN
        if((isset($this->id_estatus) && $this->id_estatus !='')||($from!='' || $to !='')){
            $criteria->join = 'JOIN ajuste_haberes.ajuste_haberes_seguimiento AS c on c.id_ajuste_haberes = t.id';
        }
		if(isset($this->id_estatus) && $this->id_estatus !=''){
            $criteria->addCondition('c.id_estatus_ajuste_haberes ='.$this->id_estatus.' AND c.actual = true');
        }
		//Filtro para fecha de estatus
        if ($from!='' || $to !='') {
            if ($from!='' && $to!='') {
                $from = date("d-m-Y", strtotime($from));
                $to = date("d-m-Y", strtotime($to));

                if(isset($this->id_estatus) && $this->id_estatus !=''){
                    $criteria->addCondition('c.fecha_registro::DATE >=\''.$from.'\' AND c.fecha_registro::DATE <=\''.$to.'\'');
                }else{
                    $criteria->addCondition('c.actual = true AND c.fecha_registro::DATE >=\''.$from.'\' AND c.fecha_registro::DATE <=\''.$to.'\'');
                }
            }
            else {
                if ($from!='') $creation_time = $from;
                if ($to != '') $creation_time = $to;
                $creation_time = date("d-m-Y", strtotime($creation_time));

                if(isset($this->id_estatus) && $this->id_estatus !=''){
                    $criteria->addCondition('c.fecha_registro::DATE =\''.$creation_time.'\'');
                }else{
                    $criteria->addCondition('c.actual = true AND c.fecha_registro::DATE =\''.$creation_time.'\'');
                }
            }
        }
		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}

    public function criteriaAjusteSocio($id)
    {
        $criteria = new CDbCriteria();
        if (isset($_GET['cedula'])) {
            if (is_numeric($_GET['cedula'])) {
                $id = 0;
                $model = Asociado::model()->find('cedula=:cedula AND blnborrado= FALSE AND id_estatus in(1,2,4) ORDER BY idasociado desc', [':cedula' => $_GET['cedula']]);

                if ($model) {
                    $id = $model->idasociado;
                }
            } else {
                $id = 0;
            }
        }
        $criteria->condition = 'idasociado='.(int) $id;
        $criteria->compare('id_tipo_ajuste', $this->id_tipo_ajuste);
        $criteria->compare('id_concepto_ajuste', $this->id_concepto_ajuste);
        $criteria->compare('monto_asociado', $this->monto_asociado);
        $criteria->compare('monto_patrono', $this->monto_patrono);
        $criteria->compare('observacion', $this->observacion, true);
        $criteria->compare('numero_operacion', $this->numero_operacion, true);
        $criteria->compare('id_tipo_movimiento', $this->id_tipo_movimiento);
        $criteria->compare('id_nomina_ajuste_haberes', $this->id_nomina_ajuste_haberes);
        $criteria->compare('num_comprobante', $this->num_comprobante, true);
        $criteria->compare('fecha_comprobante', $this->fecha_comprobante, true);
        $criteria->compare('observacion_comprobante', $this->observacion_comprobante, true);

        $from = $to = '';
        if (count($this->fecha_operacion_range) >= 1) {
            if (isset($this->fecha_operacion_range['from'])) {
                $from = $this->fecha_operacion_range['from'];
            }
            if (isset($this->fecha_operacion_range['to'])) {
                $to = $this->fecha_operacion_range['to'];
            }
        }
        if ($from != '' || $to != '') {
            if ($from != '' && $to != '') {
                $from = date('d-m-Y', strtotime($from));
                $to = date('d-m-Y', strtotime($to));
                $criteria->compare('fecha_operacion', ">= ${from}", false);
                $criteria->compare('fecha_operacion', "<= ${to}", false);
            } else {
                if ($from != '') {
                    $creation_time = $from;
                }
                if ($to != '') {
                    $creation_time = $to;
                }
                $creation_time = date('d-m-Y', strtotime($creation_time));
                $criteria->compare('fecha_operacion', "${creation_time}", false);
            }
        }

        $from = $to = '';
        if (count($this->fecha_estatus_range) >= 1) {
            if (isset($this->fecha_estatus_range['from'])) {
                $from = $this->fecha_estatus_range['from'];
            }
            if (isset($this->fecha_estatus_range['to'])) {
                $to = $this->fecha_estatus_range['to'];
            }
        }
        //CONSULTA PARA FILTRAR POR ESTATUS EN ADMIN
        if ((isset($this->id_estatus) && $this->id_estatus != '') || ($from != '' || $to != '')) {
            $criteria->join = 'JOIN ajuste_haberes.ajuste_haberes_seguimiento AS c on c.id_ajuste_haberes = t.id';
        }
        if (isset($this->id_estatus) && $this->id_estatus != '') {
            $criteria->addCondition('c.id_estatus_ajuste_haberes ='.$this->id_estatus.' AND c.actual = true');
        }
        //Filtro para fecha de estatus
        if ($from != '' || $to != '') {
            if ($from != '' && $to != '') {
                $from = date('d-m-Y', strtotime($from));
                $to = date('d-m-Y', strtotime($to));

                if (isset($this->id_estatus) && $this->id_estatus != '') {
                    $criteria->addCondition('c.fecha_registro::DATE >=\''.$from.'\' AND c.fecha_registro::DATE <=\''.$to.'\'');
                } else {
                    $criteria->addCondition('c.actual = true AND c.fecha_registro::DATE >=\''.$from.'\' AND c.fecha_registro::DATE <=\''.$to.'\'');
                }
            } else {
                if ($from != '') {
                    $creation_time = $from;
                }
                if ($to != '') {
                    $creation_time = $to;
                }
                $creation_time = date('d-m-Y', strtotime($creation_time));

                if (isset($this->id_estatus) && $this->id_estatus != '') {
                    $criteria->addCondition('c.fecha_registro::DATE =\''.$creation_time.'\'');
                } else {
                    $criteria->addCondition('c.actual = true AND c.fecha_registro::DATE =\''.$creation_time.'\'');
                }
            }
        }

        return $criteria;
    }

	public function searchAjusteSocio($id)
	{
        $criteria = $this->criteriaAjusteSocio($id);

		$_SESSION['datos_filtrados'] = new CActiveDataProvider($this, [
            'criteria'=>$criteria,
            'pagination'=>false,
        ]);

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

    public function searchAjusteSocioFichaLiquidacion($id, $options = [], $params)
    {
        $criteria = $this->criteriaAjusteSocio($id);
        $criteria->join .= ' inner join ajuste_haberes.ajuste_haberes_seguimiento ahs ON ahs.id_ajuste_haberes=t.id AND ahs.actual IS TRUE';
        $criteria->addCondition('ahs.id_estatus_ajuste_haberes<>3');
        $criteria->addColumnCondition([
            'id_tipo_ajuste' => $options['id_tipo_ajuste'],
        ]);
        $criteria->addInCondition('id_tipo_movimiento', $options['id_tipo_movimiento']);

        return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
            'pagination' => [
                'pageSize' => 10,
                'params'  => $params,
            ],
        ));
    }

    public function ajusteSocioFichaLiquidacion($id, $options = [])
    {
        $criteria = $this->criteriaAjusteSocio($id);
        $criteria->join .= ' inner join ajuste_haberes.ajuste_haberes_seguimiento ahs ON ahs.id_ajuste_haberes=t.id AND ahs.actual IS TRUE';
        $criteria->addCondition('ahs.id_estatus_ajuste_haberes<>3');
        $criteria->addColumnCondition([
            'id_tipo_ajuste' => $options['id_tipo_ajuste'],
        ]);
        $criteria->addInCondition('id_tipo_movimiento', $options['id_tipo_movimiento']);

        $datos = self::model()->findAll($criteria);

        return (new Warp($datos))->map(function ($ajuste) {
            return [
                'id' => $ajuste->id,
                'numero_operacion' => $ajuste->numero_operacion,
                'fecha_operacion' => $ajuste->fecha_operacion != '' ? Yii::app()->format->date($ajuste->fecha_operacion) : '',
                'concepto_ajuste' => $ajuste->idConceptoAjuste->descripcion,
                'tipo_ajuste' => $ajuste->idTipoAjuste->descripcion,
                'tipo_movimiento' => $ajuste->idTipoMovimiento->descripcion,
                'monto_asociado' => $ajuste->monto_asociado,
                'monto_patrono' => $ajuste->monto_patrono ? $ajuste->monto_patrono : 0,
                'observacion' => $ajuste->observacion,
                'fecha_estatus' => $ajuste->fecha_estatus,
                'estatus' => $ajuste->nombre_estatus,
            ];
        });
    }

	public function afterFind(){
      $model = AjusteHaberesSeguimiento::model()->find('id_ajuste_haberes=:id AND actual =  TRUE',array(':id'=>  $this->id));
      if($model){
          $this->nombre_estatus = $model->idEstatusAjusteHaberes->descripcion;
          $this->id_estatus = $model->id_estatus_ajuste_haberes;
          $this->fecha_estatus = date('d-m-Y',strtotime($model->fecha_registro));
      }

      if(isset($this->idNominaAjusteHaberes)){
        // $this->numero_operacion = $this->idNominaAjusteHaberes->id_concepto_ajuste;
        $this->fecha_operacion = $this->idNominaAjusteHaberes->fecha_referencia;
        $this->id_concepto_ajuste = $this->idNominaAjusteHaberes->id_concepto_ajuste;
        // $this->id_tipo_movimiento = $this->idNominaAjusteHaberes->id_tipo_movimiento;
        // $this->id_tipo_movimiento = $this->idNominaAjusteHaberes->id_tipo_movimiento;
      }

      return parent::afterFind();
  }
         public function beforeSave(){
            if($this->monto_asociado !=''){
                if (strpos((string) $this->monto_asociado, ',')) {
                    $this->monto_asociado = str_replace('.', '', $this->monto_asociado);
                    $this->monto_asociado = str_replace(',', '.', $this->monto_asociado);
                }
            }
            else
              $this->monto_asociado =NULL;

            if($this->monto_patrono !=''){
                if (strpos((string) $this->monto_patrono, ',')) {
                    $this->monto_patrono = str_replace('.', '', $this->monto_patrono);
                    $this->monto_patrono = str_replace(',', '.', $this->monto_patrono);
                }
            }
            else
              $this->monto_patrono =NULL;

            return parent::beforeSave();
        }

    public function totalAjuste()
    {
        return $this->monto_asociado + $this->monto_patrono;
    }
    
	/**
	 * 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 AjusteHaberes the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
    }

    /**
     * Generador de ajuste de haberes
     * @param  array  $datos   datos del ajuste
     * @param  integer $estatus estatus del ajuste de haberes
     * @return boolean|Exception
     */
    public static function generar($datos = [], $estatus = 1, $returnId = false)
    {
        $model = new self();
        $model->attributes = $datos;

        if (! $model->validate()) {
            throw new Exception('Error al validar ajuste de haberes.');
        }

        if (! $model->save()) {
            throw new Exception('Error al guardar ajuste de haberes.');
        }

        $seguimiento = new AjusteHaberesSeguimiento();
        $seguimiento->id_ajuste_haberes = $model->id;
        $seguimiento->id_estatus_ajuste_haberes = $estatus;
        if (! $seguimiento->save()) {
            throw new Exception('Error al guardar el seguimiento del ajuste de haberes');
        }

        return $returnId ? $model->getPrimaryKey() : true;
    }
}
