<?php

/**
 * This is the model class for table "prestamos.pre_nomina_tabla_amortizacion".
 *
 * The followings are the available columns in table 'prestamos.pre_nomina_tabla_amortizacion':
 * @property string $id_tabla_amortizacion
 * @property string $id_pre_nomina_credito
 * @property string $fecha_registro
 * @property boolean $actual
 */
class PreNominaTablaAmortizacion extends CActiveRecord
{
    public  $cedula,$nombre, $apellido, $id_unidad, $id_titulo_credito, $numero_cuota, $monto_cuota, $id_tipo_credito, $id_estatus;
    public $fecha_vencimiento_range = array();
    public $monto_capital;
    public $monto_interes;
    public $nombre_unidad;
    public $nombre_titulo;
    public $tipo_credito;
    public $nombre_estatus;

    /**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'prestamos.pre_nomina_tabla_amortizacion';
	}

	/**
	 * @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('id_tabla_amortizacion, id_pre_nomina_credito', 'required'),
			array('id_estatus_cuota_excluida', 'required', 'on'=>'DefinicionEstatus'),
			array('actual', 'safe'),
			// The following rule is used by search().
			// @todo Please remove those attributes that should not be searched.
			array('cedula,nombre,fecha_vencimiento_range,numero_cuota,monto_cuota, apellido, id_unidad,id_titulo_credito,
                id_tipo_credito, id_tabla_amortizacion, id_pre_nomina_credito, fecha_registro, actual,id_estatus, observaciones,
                id_estatus_cuota_excluida, id_titulo_tipo_credito', '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(
                    'idTablaAmortizacion' => array(self::BELONGS_TO, 'CreditoTablaAmortizacion', 'id_tabla_amortizacion'),
                    'idDatosTxtTablaAmortizacion' => array(self::BELONGS_TO, 'DatosTxtTablaAmortizacion', 'id_tabla_amortizacion'),
                    'idEstatusCuotaExcluida' => array(self::BELONGS_TO, 'EstatusCuotaTablaAmortizacionDiferido', 'id_estatus_cuota_excluida'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id_tabla_amortizacion' => 'Id Tabla Amortizacion',
			'id_pre_nomina_credito' => 'Id Pre Nomina Credito',
			'fecha_registro' => 'Fecha Registro',
			'cedula' => 'Cédula',
			'id_unidad' => 'Unidad',
			'id_titulo_credito' => 'Tipo de préstamo',
			'id_tipo_credito' => 'Plazo del préstamo',
			'fecha_vencimineto' => 'Fecha de vencimiento',
			'numero_cuota' => 'Número de la cuota',
			'monto_cuota' => 'Monto de la cuota',
			'id_estatus' => 'Estatus',
			'id_estatus_cuota_excluida' => 'Estatus',
		);
	}

	/**
	 * 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($id)
    {
        if (isset($this->cedula)) {
            $this->cedula = (int) $this->cedula;
        }

        if ($this->cedula < 1) {
            $this->cedula = null;
        }

        $criteria = new CDbCriteria();
        $criteria->with = ['idTablaAmortizacion.idCredito.idAsociado', 'idTablaAmortizacion.idCredito.idTipoCredito'];
        $criteria->together = true;
        $criteria->compare('t.id_tabla_amortizacion', $this->id_tabla_amortizacion);
        $criteria->compare('id_pre_nomina_credito', $id);
        $criteria->compare('cedula', $this->cedula);
        $criteria->compare('UPPER(nombre)', strtoupper($this->nombre), true);
        $criteria->compare('UPPER(observaciones)', strtoupper($this->observaciones), true);
        $criteria->compare('UPPER(apellidos)', strtoupper($this->apellido), true);
        $criteria->compare('fecha_registro', $this->fecha_registro, true);
        $criteria->compare('id_tipo_credito', $this->id_tipo_credito);
        $criteria->compare('id_titulo_tipo_credito', $this->id_titulo_credito);
        $criteria->compare('id_estatus_cuota_excluida', $this->id_estatus_cuota_excluida);
        $criteria->compare('t.actual', true);
        $criteria->compare('t.cuota_excluida', true);
        $criteria->addCondition('t.blnborrado IS FALSE');
        $criteria->order = 'id_estatus_cuota_excluida in(1) desc';

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

	public function searchCuitaExcluidaView($id)
	{
		$criteria=new CDbCriteria;
        $criteria->select = 't.id,
                             a.cedula,
                             u.descripcion as nombre_unidad,
                             ttc.nombre_titulo as nombre_titulo,
                             tc.descripcion as tipo_credito,
                             cta.monto_cuota,
                             cta.monto_capital,
                             cta.monto_interes,
                             ectad.nombre_estatus,
                             t.observaciones';
        $criteria->join = 'left join prestamos.credito_tabla_amortizacion cta on cta.id=t.id_tabla_amortizacion
                           left join prestamos.credito c on c.id=cta.idcredito
                           left join asociado a on a.idasociado=c.idasociado
                           left join unidad u on u.idunidad=a.idunidad
                           left join prestamos.tipo_credito tc on tc.id=c.id_tipo_credito
                           left join prestamos.titulo_tipo_credito ttc on ttc.id=tc.id_titulo_tipo_credito
                           left join prestamos.estatus_cuota_tabla_amortizacion_diferido ectad on ectad.id=t.id_estatus_cuota_excluida';
		$criteria->condition = '(SELECT coalesce(count(*), 0)
                                FROM prestamos.datos_txt_tabla_amortizacion
                                WHERE id_tabla_amortizacion=t.id_tabla_amortizacion
                                    AND actual= true)=0';
		$criteria->compare('id_pre_nomina_credito',$id);
        $criteria->compare('t.id_tabla_amortizacion',$this->id_tabla_amortizacion);
		$criteria->compare('fecha_registro',$this->fecha_registro,true);
		$criteria->compare('t.actual',true);
		$criteria->compare('t.cuota_excluida',true);

		return self::model()->findAll($criteria);
	}
	public function searchCuotasPorReclamar($id)
	{
		// @todo Please modify the following code to remove attributes that should not be searched.
		$criteria=new CDbCriteria;
		$criteria->condition = 'id_estatus_cuota_excluida=8';
		$criteria->compare('t.id_tabla_amortizacion',$this->id_tabla_amortizacion);
		$criteria->compare('id_pre_nomina_credito',$id);
		$criteria->compare('fecha_registro',$this->fecha_registro,true);
		$criteria->compare('t.actual',true);
		$criteria->compare('t.cuota_excluida',true);

		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}
	public function searchCuotasExcluidas($id)
	{
		// @todo Please modify the following code to remove attributes that should not be searched.

		$criteria=new CDbCriteria;

		// $criteria->with = array('idTablaAmortizacion.idCredito.idAsociado','idTablaAmortizacion.idCredito.idTipoCredito','idDatosTxtTablaAmortizacion');//array('idTablaAmortizacion.idCredito.idAsociado','idTablaAmortizacion.idCredito.idTipoCredito');
		$criteria->compare('id_tabla_amortizacion',$this->id_tabla_amortizacion);
		$criteria->compare('id_estatus_amortizacion_diferida',$this->id_estatus);
		$criteria->compare('id_txt',$id);
		$criteria->compare('fecha_registro',$this->fecha_registro,true);
		$criteria->addCondition('aporte_excluido = TRUE AND id_estatus_amortizacion_diferida != 1');

//		$criteria->compare('id_tabla_amortizacion',$this->id_tabla_amortizacion);
//		$criteria->compare('fecha_registro',$this->fecha_registro,true);
                if(!is_numeric($this->cedula) ||  strlen($this->cedula)>10)
                    $this->cedula = NUll;

                if(!is_numeric($this->numero_cuota) ||  strlen($this->numero_cuota)>3)
                    $this->numero_cuota = NUll;

                if(!is_numeric($this->monto_cuota))
                    $this->monto_cuota = NUll;

		$criteria->compare('cedula',$this->cedula);
		$criteria->compare('lower(nombre)',  strtolower($this->nombre),true);
		$criteria->compare('lower(apellidos)',strtolower($this->apellido),true);
		$criteria->compare('idunidad',$this->id_unidad);
		$criteria->compare('id_titulo_tipo_credito',$this->id_titulo_credito);
		$criteria->compare('id_tipo_credito',$this->id_tipo_credito);
		$criteria->compare('numero_cuota',$this->numero_cuota);
		$criteria->compare('monto_cuota',$this->monto_cuota);

                 $from = $to = '';
		if (count($this->fecha_vencimiento_range)>=1) {
			if (isset($this->fecha_vencimiento_range['from'])) {
				$from = $this->fecha_vencimiento_range['from'];
			}
			if (isset($this->fecha_vencimiento_range['to'])) {
				$to= $this->fecha_vencimiento_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_vencimiento',">= $from",false);
				$criteria->compare('fecha_vencimiento',"<= $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_vencimiento', "$creation_time" ,false);
			}
		}


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


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

            return parent::beforeSave();
        }

    public function searchCorreccionClave($cedula, $id_pre_nomina_credito){
    	$criteria = new CDbCriteria();
    	if(isset($_GET['cedula'])){//echo $_GET['cedula'];exit;
            if(is_numeric($_GET['cedula'])){
                $cedula=$_GET['cedula'];
            }
            else {
                $cedula = 0;
            }
        }
    	$criteria->with=['idTablaAmortizacion.idCredito.idAsociado'];
    	$criteria->condition ='"idAsociado".id_estatus in (1,3,4)';
    	$criteria->join  ='LEFT OUTER JOIN "prestamos"."datos_txt_tabla_amortizacion" "idDatosTxtTablaAmortizacion" ON ("t"."id_tabla_amortizacion"="idDatosTxtTablaAmortizacion"."id_tabla_amortizacion" AND "idDatosTxtTablaAmortizacion".actual=true ) ';
    	$criteria->addCondition('"idDatosTxtTablaAmortizacion".id_tabla_amortizacion IS NULL');
    	$criteria->compare('cedula',(int)$cedula);
    	$criteria->compare('id_pre_nomina_credito',$id_pre_nomina_credito);
    	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 PreNominaTablaAmortizacion the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}
}
