<?php

/**
 * This is the model class for table "prestamos.conf_credito_abono".
 *
 * The followings are the available columns in table 'prestamos.conf_credito_abono':
 * @property integer $id
 * @property string $id_tipo_nomina
 * @property integer $dias_habiles
 * @property boolean $afecta_administrador
 * @property boolean $blnborrado
 *
 * The followings are the available model relations:
 * @property TipoNomina $idTipoNomina
 */
class ConfCreditoAbono extends CActiveRecord
{
	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'prestamos.conf_credito_abono';
	}

	/**
	 * @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_tipo_nomina, dias_habiles_administrador', 'required','on'=>'registro'),
			// array('dias_habiles', 'numerical', 'integerOnly'=>true),
			array('dias_habiles_administrador', 'length', 'min'=>1, 'max'=>2),
			array('dias_habiles_administrador', 'filter', 'filter'=>'trim','on'=>'formato_variable'),
			// array('dias_habiles,', 'validarDias'),
			array('dias_habiles_administrador,', 'validarDiasAdministrador'),
			// array('id_tipo_nomina,dias_habiles,', 'validarDisponibilidad'),
			array('id_tipo_nomina,dias_habiles_administrador,', 'validarDisponibilidadAdministrador'),
			array('id_tipo_nomina, afecta_administrador, blnborrado, id_estatus_cuota', 'safe'),
			// The following rule is used by search().
			// @todo Please remove those attributes that should not be searched.
			array('id, id_tipo_nomina, dias_habiles, afecta_administrador, blnborrado', '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(
			'idTipoNomina' => array(self::BELONGS_TO, 'TipoNomina', 'id_tipo_nomina'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id' => 'ID',
			'dias_habiles' => $this->scenario =='registro'?'Los primeros ':'Días disponibles',
			'id_tipo_nomina' => 'Tipo de nómina',
			'afecta_administrador' => 'Afecta Administrador',
			'blnborrado' => 'Blnborrado',
			'dias_habiles_administrador' => 'Días',
		);
	}

	/**
	 * 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('id_tipo_nomina',$this->id_tipo_nomina,true);
		$criteria->compare('dias_habiles',$this->dias_habiles);
		$criteria->compare('afecta_administrador',$this->afecta_administrador);
		$criteria->compare('blnborrado',$this->blnborrado);

		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}
	public function validarDias(){
		if(!$this->hasErrors('dias_habiles') && !$this->hasErrors('id_tipo_nomina')){
			$error = false;
			if($this->id_tipo_nomina==1){
				//MENSUAL
				if($this->dias_habiles> 30)
					$error=true;
			}
			elseif ($this->id_tipo_nomina==2) {
				//QUINCENAL
				if($this->dias_habiles> 14)
					$error=true;
			}
			else{
				//semanal
				if($this->dias_habiles> 6)
					$error=true;
				
			}
			if($error)
				$this->addError('dias_habiles','cantidad de dias no permitidos');
		}
	}
	public function validarDiasAdministrador(){
		if(!$this->hasErrors('dias_habiles_administrador') && !$this->hasErrors('id_tipo_nomina')){
			$error = false;
			if($this->id_tipo_nomina==1){
				//MENSUAL
				if($this->dias_habiles> 30)
					$error=true;
			}
			elseif ($this->id_tipo_nomina==2) {
				//QUINCENAL
				if($this->dias_habiles> 14)
					$error=true;
			}
			else{
				//semanal
				if($this->dias_habiles> 6)
					$error=true;
				
			}
			if($error)
				$this->addError('dias_habiles_administrador','cantidad de dias no permitidos');
		}
	}
	public function validarDisponibilidad(){
		if(!$this->hasErrors('dias_habiles') && !$this->hasErrors('id_tipo_nomina')){
			$error = false;
			$sql=$this->isNewRecord?'':' AND id !='.$this->id;
			$cantidadRegistro = self::model()->count('id_tipo_nomina=:id_tipo_nomina AND afecta_administrador=:afecta_administrador AND blnborrado= false'.$sql,
					[':id_tipo_nomina'=>$this->id_tipo_nomina,':afecta_administrador'=>$this->afecta_administrador]);
			if($cantidadRegistro>0){
				//MENSUAL
				if($this->id_tipo_nomina==1 && $cantidadRegistro==1){
					$error=true;
				}
				//QUINCENAL
				elseif ($this->id_tipo_nomina==2 && $cantidadRegistro==2) {
					$error=true;
				}
				//semanal
				elseif($this->id_tipo_nomina==3 && $cantidadRegistro==4){
					$error=true;
				}
				
			}
			if($error)
				$this->addError('id_tipo_nomina','Ya se ha configurado este tipo de nomina');
		}
	}
	public function validarDisponibilidadAdministrador(){
		if(!$this->hasErrors('dias_habiles_administrador') && !$this->hasErrors('id_tipo_nomina')){
			$error = false;
			$sql=$this->isNewRecord?'':' AND id !='.$this->id;
			$cantidadRegistro = self::model()->count('id_tipo_nomina=:id_tipo_nomina AND blnborrado= false'.$sql,
					[':id_tipo_nomina'=>$this->id_tipo_nomina]);
			if($cantidadRegistro>0){
				//MENSUAL
				if($this->id_tipo_nomina==1 && $cantidadRegistro==1){
					$error=true;
				}
				//QUINCENAL
				elseif ($this->id_tipo_nomina==2 && $cantidadRegistro==2) {
					$error=true;
				}
				//semanal
				elseif($this->id_tipo_nomina==3 && $cantidadRegistro==4){
					$error=true;
				}
				
			}
			if($error)
				$this->addError('id_tipo_nomina','Ya se ha configurado este tipo de nomina');
		}
	}
	public function diasHabilesPago(){
		$dias_habiles= $this->dias_habiles - 1;
    	$hasta = date ("Y-m-d");
    	$date = strtotime(date("Y-m-d"));

    	//MENSUAL
		if($this->id_tipo_nomina==1){
			$from = new DateTime(date('Y-m-d'));
			$from->modify('first day of this month'); 
		}
		//QUINCENAL
		elseif ($this->id_tipo_nomina==2) {
			$from = new DateTime(date('Y-m-d'));
			$from->modify('first day of this month'); 

			if(date('d') > 15)
				$from = date('Y-m-d', strtotime($from->format('Y-m-d').' 15 day'));
		}
		//semanal
		else{
			$first = strtotime('Sunday -7 days');
			$from = new DateTime(date('Y-m-d', $first));
			// $last = strtotime('Saturday');
		}

	    $to = new DateTime($hasta);
	    $interval = $to->diff($from, true);
	    $error = false;
	    if($interval->m==0){
	    	if($interval->d >$dias_habiles)
	    		$error = true;
	    }
	    else
	    	$error = true;

	    if($error){
	    	return 1; 
	    }
	    return 0;
	}
	public function diasHabilesPagoAdministrador(){
		$dias_habiles= $this->dias_habiles_administrador - 1;
    	$hasta = date ("Y-m-d");
    	$date = strtotime(date("Y-m-d"));

    	//MENSUAL
		if($this->id_tipo_nomina==1){
			$from = new DateTime(date('Y-m-d'));
			$from->modify('first day of this month'); 
		}
		//QUINCENAL
		elseif ($this->id_tipo_nomina==2) {
			$from = new DateTime(date('Y-m-d'));
			$from->modify('first day of this month'); 

			if(date('d') > 15){
				$from = date('Y-m-d', strtotime($from->format('Y-m-d').' 15 day'));
                        $from = new DateTime($from);
			}
		}
		//semanal
		else{
			$first = strtotime('Sunday -7 days');
			$from = new DateTime(date('Y-m-d', $first));
			// $last = strtotime('Saturday');
		}

	    $to = new DateTime($hasta);
	    $interval = $to->diff($from, true);
	    $error = false;
	    if($interval->m==0){
	    	if($interval->d >$dias_habiles)
	    		$error = true;
	    }
	    else
	    	$error = true;

	    if($error){
	    	return 1; 
	    }
	    return 0;
	}

	public function getCondicionCuotasCredito($id)
    {
        $modelConf = self::model()->find('id_tipo_nomina=:id', [':id' => $id]);
        $sql = ' AND (';

        if ($modelConf) {
            if ($modelConf->id_estatus_cuota != '') {
                if (strpos($modelConf->id_estatus_cuota, '0') !== false) {
                    $sql .= 'id_estatus_cuota IS NULL OR ';
                }
                $sql .= 'id_estatus_cuota in ('.$modelConf->id_estatus_cuota.')';
            } else {
                $sql .= 'id_estatus_cuota IS NULL';
            }
        } else {
            $sql .= 'id_estatus_cuota IS NULL';
        }

        $sql .= ')';

        return $sql;
    }

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