<?php

class ConfRetiroParcialController extends Controller
{
	/**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
	public $layout='//layouts/column2';

	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
                        array('CrugeAccessControlFilter')
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view'),
				'users'=>array('@'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('create','update', 'periodicidad'),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete'),
				'users'=>array('@'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}

	/**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */
	public function actionView()
	{
		$this->render('view',array(
			'model'=>ConfRetiroParcial::model()->find('blnborrado= false'),
		));
	}

	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate()
	{
		$model = ConfRetiroParcial::model()->find('blnborrado= false');
        if($model){
            $this->redirect(array('update'));
        }
        $model=new ConfRetiroParcial;
        $modelPeriodicidad[] = new PeriodicidadRetiroParcial();
        foreach (TipoCredito::model()->findAll('blnborrado = false') as $key => $value) {
			$prestamos = new RetiroParcialPrestamo('RegistroRetiroParcial');
			$prestamos->descripcion = (($value->idTituloTipoCredito)?$value->idTituloTipoCredito->nombre_titulo:"").' "'.$value->descripcion.'"';
			$prestamos->porcentajeAdm = NULL;
			$prestamos->porcentajeAs = NULL;
			$modelPrestamos[$value->id]=$prestamos;
		}

        $modelPagarPrestamosRetiro = TipoCredito::model()->findAll('blnborrado = false');

        $modelConfSolicitudes = [];
        for($i=0;$i<=6;$i++){
          $modelConf= new ConfiguracionSolicitudRetiroParcialAperturaCierre();
          $modelConfSolicitudes[$i] =  $modelConf;
        }

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['ConfRetiroParcial']))
		{

                    unset($modelPeriodicidad);$modelPeriodicidad=array();
                    unset($modelPrestamos);$modelPrestamos=[];
                    $valido = TRUE;
                    $scenario = '';

                    $model->attributes=$_POST['ConfRetiroParcial'];
                    $model->scenario = $model->metodo_evaluacion_solicitud ==1 ? 'EvalucionUltimoEstatus' :'';
                    $valido=$model->validate()&&$valido;
                    if(isset($_POST['PeriodicidadRetiroParcial'])){
                        if($model->periodicidad==1){
                          $scenario = 'Diarias';
                        } //Semanal
                        elseif($model->periodicidad==2){
                            $scenario = 'Semanal';
                        }
                        else{ //Monto
                            $scenario = 'Monto';
                        }
                        foreach($_POST['PeriodicidadRetiroParcial'] as $iSolicitud=>$dataSolicitud){
                            $item = new PeriodicidadRetiroParcial($scenario);
                            $item->attributes=$dataSolicitud;
                            $item->numeroDia = $iSolicitud;

                            $valido =$item->validate()&&$valido;
                            $modelPeriodicidad[] = $item;

                            unset($item);
                        }

                    }
                    if(isset($_POST['RetiroParcialPrestamo'])){
                        foreach($_POST['RetiroParcialPrestamo'] as $id=>$data){
                            $item = new RetiroParcialPrestamo('RegistroRetiroParcial');
                            $item->attributes=$data;
                            $mTC = TipoCredito::model()->findByPk($id);
                            $item->descripcion = (($mTC->idTituloTipoCredito)?$mTC->idTituloTipoCredito->nombre_titulo:"").' "'.$mTC->descripcion.'"';
                            $valido =$item->validate()&&$valido;
                            $modelPrestamos[$id] = $item;

                            unset($item);
                        }

                    }
                    if(isset($_POST['ConfiguracionSolicitudRetiroParcialAperturaCierre'])){
                        foreach($_POST['ConfiguracionSolicitudRetiroParcialAperturaCierre'] as $id=>$data){
                            $item = new ConfiguracionSolicitudRetiroParcialAperturaCierre();
                            $item->attributes=$data;
                            if($model->restriccion_solicitud_hora){
                                $valido =$item->validate()&&$valido;
                            }
                            $modelConfSolicitudes[$id] = $item;
                            unset($item);
                        }
                    }

                    if($valido){
                        $transaction = Yii::app()->db->beginTransaction();
                        try {
                                $prestamosPermitidos = [];
                                foreach($modelPrestamos as $key=>$value) {
                                	if($value->opcionAdm > 0 || $value->opcionAs > 0){
	                                    $prestamos=[
	                                    	'opcionAdm'=>$value->opcionAdm,
	                                    	'porcentajeAdm'=>$value->porcentajeAdm,
	                                    	'opcionAs'=>$value->opcionAs,
	                                    	'porcentajeAs'=>$value->porcentajeAs,
	                                    ];
	                                    $prestamosPermitidos[$key]=$prestamos;
                                	}
                                }
                                $solicitudesRP = [];
                                foreach ($modelConfSolicitudes as $key => $value) {
                                    $solicitudesRP[$key] = ['dia'=>$value->dia,
                                                            'h_apertura_asociado'=>$value->h_apertura_asociado,
                                                            'h_cierre_asociado'=>$value->h_cierre_asociado,
                                                            'h_apertura_adm'=>$value->h_apertura_adm,
                                                            'h_cierre_adm'=>$value->h_cierre_adm];

                                }

                                $model->creditos_permitidos =json_encode($prestamosPermitidos);
                                $model->solicitudes_apertura_cierre =json_encode($solicitudesRP);
                                $model->save();
                                if($model->periodicidad!=''){
                                    foreach($modelPeriodicidad as $keySolicitudes=>$valueSolicitudes) {
                                        if($valueSolicitudes->dia ==1 || $valueSolicitudes->cantidad_peticiones!='' ||$valueSolicitudes->monto_ofertado !=''){
                                            $valueSolicitudes->id_conf_retiro_parcial =$model->id;
                                            $valueSolicitudes->id_periodicidad = $model->periodicidad;
                                            $valueSolicitudes->dia = $valueSolicitudes->numeroDia;
                                            $valueSolicitudes->save();
                                        }
                                    }
                                }

                                $transaction->commit();
                                $this->redirect(array('admin'));
                            } catch (Exception $e){//echo "<pre>";print_r($e);exit;
				throw new CHttpException(400,$e->getMessage());
				$transaction->rollBack();

                            }
				//$this->redirect(array('view','id'=>$model->id));
                        }
		}

		$this->render('create',array(
			'model'=>$model,
			'modelPeriodicidad'=>$modelPeriodicidad,
            'modelPrestamos'=>$modelPrestamos,
			'modelConfSolicitudes'=>$modelConfSolicitudes,

		));
	}

	/**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     *
     * @param int $id the ID of the model to be updated
     */
    public function actionUpdate()
    {
        $model = ConfRetiroParcial::model()->find('blnborrado = false');
        $modelPrestamos = [];
        $prestamosPermitidos = [];

        if ('' != $model->creditos_permitidos) {
            $prestamosPermitidos = json_decode($model->creditos_permitidos, true);
        }

        foreach (TipoCredito::model()->findAll('blnborrado = false') as $key => $value) {
            $prestamos = new RetiroParcialPrestamo('RegistroRetiroParcial');
            $prestamos->descripcion = (($value->idTituloTipoCredito) ? $value->idTituloTipoCredito->nombre_titulo : '').' "'.$value->descripcion.'"';
            $prestamos->porcentajeAdm = null;
            $prestamos->porcentajeAs = null;
            if (array_key_exists($value->id, $prestamosPermitidos)) {
                if ($prestamosPermitidos[$value->id]['opcionAdm']) {
                    $prestamos->opcionAdm = 1;
                    $prestamos->porcentajeAdm = $prestamosPermitidos[$value->id]['porcentajeAdm'];
                }
                if ($prestamosPermitidos[$value->id]['opcionAs']) {
                    $prestamos->opcionAs = 1;
                    $prestamos->porcentajeAs = $prestamosPermitidos[$value->id]['porcentajeAs'];
                }
            }
            $modelPrestamos[$value->id] = $prestamos;
        }

        $model->porcentaje_tope = number_format($model->porcentaje_tope, 2, ',', '.');

        if (isset($model->solicitudes[0])) {
            $model->periodicidad = $model->solicitudes[0]->id_periodicidad;

            if (1 == $model->periodicidad) {
                $items = 6;
            } else {
                $items = 0;
            }

            for ($i = 0; $i <= $items; ++$i) {
                $modelPeriodicidad[$i] = new PeriodicidadRetiroParcial();
            }

            foreach ($model->solicitudes as $keySolicitudes => $valueSolicitudes) {
                $modelPeriodicidad[$valueSolicitudes->dia]->cantidad_peticiones = $valueSolicitudes->cantidad_peticiones;
                $modelPeriodicidad[$valueSolicitudes->dia]->monto_ofertado = $valueSolicitudes->monto_ofertado;
                $modelPeriodicidad[$valueSolicitudes->dia]->dia = 1;
            }
        } else {
            $modelPeriodicidad[] = new PeriodicidadRetiroParcial();
        }

        $modelConfSolicitudes = [];
        if ('' != $model->solicitudes_apertura_cierre) {
            foreach (json_decode($model->solicitudes_apertura_cierre, true) as $key => $value) {
                $modelConf = new ConfiguracionSolicitudRetiroParcialAperturaCierre();
                $modelConf->dia = $value['dia'];
                $modelConf->h_apertura_asociado = $value['h_apertura_asociado'];
                $modelConf->h_cierre_asociado = $value['h_cierre_asociado'];
                $modelConf->h_apertura_adm = $value['h_apertura_adm'];
                $modelConf->h_cierre_adm = $value['h_cierre_adm'];
                $modelConfSolicitudes[$key] = $modelConf;
            }
        } else {
            for ($i = 0; $i <= 6; ++$i) {
                $modelConf = new ConfiguracionSolicitudRetiroParcialAperturaCierre();
                $modelConfSolicitudes[$i] = $modelConf;
            }
        }

        $modelPagarPrestamosRetiro = TipoCredito::model()->findAll('blnborrado = false ORDER BY id_titulo_tipo_credito asc');

        $pagarPrestamosRetiroAdm = $pagarPrestamosRetiroAsc = [];
        
        foreach (explode(",", $model->pagar_prestamo_retiro_adm.',') as $key => $value) {
            
            if(!empty($value))
                
                 $pagarPrestamosRetiroAdm[$value] = 1;

        }
        
        foreach (explode(",", $model->pagar_prestamo_retiro_asc.',') as $key => $value) {
            
            if(!empty($value))
                
                 $pagarPrestamosRetiroAsc[$value] = 1;

        }
                    // print_r( $model->pagar_prestamo_retiro_adm);exit;

        if (isset($_POST['ConfRetiroParcial'])) {
            unset($modelPeriodicidad);
            $modelPeriodicidad = [];
            unset($modelPrestamos);
            $modelPrestamos = [];
            unset($modelConfSolicitudes);
            $modelConfSolicitudes = [];
            $valido = true;
            $scenario = '';

            $model->attributes = $_POST['ConfRetiroParcial'];
            $model->scenario = 1 == $model->metodo_evaluacion_solicitud ? 'EvalucionUltimoEstatus' : '';

            $model->setGastoAdministrativo($_POST['ConfRetiroParcial']);
            $model->setComisionBancaria($_POST['ConfRetiroParcial']);

            $valido = $model->validate() && $valido;
            if (isset($_POST['PeriodicidadRetiroParcial'])) {
                if (1 == $model->periodicidad) {
                    $scenario = 'Diarias';
                } //Semanal
                elseif (2 == $model->periodicidad) {
                    $scenario = 'Semanal';
                } else { //Monto
                    $scenario = 'Monto';
                }

                foreach ($_POST['PeriodicidadRetiroParcial'] as $iSolicitud => $dataSolicitud) {
                    $item = new PeriodicidadRetiroParcial($scenario);
                    $item->attributes = $dataSolicitud;
                    $item->numeroDia = $iSolicitud;

                    $valido = $item->validate() && $valido;
                    $modelPeriodicidad[] = $item;

                    unset($item);
                }
            }
            if (isset($_POST['RetiroParcialPrestamo'])) {
                foreach ($_POST['RetiroParcialPrestamo'] as $id => $data) {
                    $item = new RetiroParcialPrestamo('RegistroRetiroParcial');
                    $item->attributes = $data;
                    $mTC = TipoCredito::model()->findByPk($id);
                    $item->descripcion = (($mTC->idTituloTipoCredito) ? $mTC->idTituloTipoCredito->nombre_titulo : '').' "'.$mTC->descripcion.'"';
                    $valido = $item->validate() && $valido;
                    $modelPrestamos[$id] = $item;

                    unset($item);
                }
            }
            if (isset($_POST['ConfiguracionSolicitudRetiroParcialAperturaCierre'])) {
                foreach ($_POST['ConfiguracionSolicitudRetiroParcialAperturaCierre'] as $id => $data) {
                    $item = new ConfiguracionSolicitudRetiroParcialAperturaCierre();
                    $item->attributes = $data;
                    if ($model->restriccion_solicitud_hora) {
                        $valido = $item->validate() && $valido;
                    }
                    $modelConfSolicitudes[$id] = $item;
                    unset($item);
                }
            }

            if ( $model->pagar_prestamo_retiro_adm !='') {

                $pagar_prestamo_retiro_adm =$model->pagar_prestamo_retiro_adm ;
                $model->pagar_prestamo_retiro_adm ='';

                foreach (explode(',', $pagar_prestamo_retiro_adm ) as $keyCpA) {

                    $modelCPA = TipoCredito::model()->findByPk($keyCpA);

                    if($modelCPA){

                        $pagarPrestamosRetiroAdm[$keyCpA] = 1;

                        $model->pagar_prestamo_retiro_adm .=$keyCpA.',';
                        
                    }


                }

            }

            if ( $model->pagar_prestamo_retiro_asc !='') {

                $pagar_prestamo_retiro_asc =$model->pagar_prestamo_retiro_asc ;
                $model->pagar_prestamo_retiro_asc ='';

                foreach (explode(',', $pagar_prestamo_retiro_asc ) as $keyCpA) {

                    $modelCPA = TipoCredito::model()->findByPk($keyCpA);

                    if($modelCPA){

                        $pagarPrestamosRetiroAsc[$keyCpA] = 1;

                        $model->pagar_prestamo_retiro_asc .=$keyCpA.',';
                        
                    }


                }

            }

            if ($valido) {
                $transaction = Yii::app()->db->beginTransaction();
                try {
                    $model->pagar_prestamo_retiro_adm = trim( $model->pagar_prestamo_retiro_adm,',');
                    $model->pagar_prestamo_retiro_asc = trim( $model->pagar_prestamo_retiro_asc,',');

                    $prestamosPermitidos = [];
                    foreach ($modelPrestamos as $key => $value) {
                        if ($value->opcionAdm > 0 || $value->opcionAs > 0) {
                            $prestamos = [
                                'opcionAdm' => $value->opcionAdm,
                                'porcentajeAdm' => $value->porcentajeAdm,
                                'opcionAs' => $value->opcionAs,
                                'porcentajeAs' => $value->porcentajeAs,
                            ];
                            $prestamosPermitidos[$key] = $prestamos;
                        }
                    }
                    $solicitudesRP = [];
                    foreach ($modelConfSolicitudes as $key => $value) {
                        $solicitudesRP[$key] = [
                            'dia' => $value->dia,
                            'h_apertura_asociado' => $value->h_apertura_asociado,
                            'h_cierre_asociado' => $value->h_cierre_asociado,
                            'h_apertura_adm' => $value->h_apertura_adm,
                            'h_cierre_adm' => $value->h_cierre_adm,
                        ];
                    }

                    $model->creditos_permitidos = json_encode($prestamosPermitidos);
                    $model->solicitudes_apertura_cierre = json_encode($solicitudesRP);

                    $model->save();
                    if ('' != $model->periodicidad) {
                        PeriodicidadRetiroParcial::model()->deleteAll('id_conf_retiro_parcial=:id_conf_retiro_parcial', [':id_conf_retiro_parcial' => $model->id]);
                        foreach ($modelPeriodicidad as $keySolicitudes => $valueSolicitudes) {
                            if (1 == $valueSolicitudes->dia || '' != $valueSolicitudes->cantidad_peticiones || '' != $valueSolicitudes->monto_ofertado) {
                                $modelPeriodicidadActualizada = new PeriodicidadRetiroParcial();
                                $modelPeriodicidadActualizada->id_periodicidad = $model->periodicidad;
                                $modelPeriodicidadActualizada->cantidad_peticiones = $valueSolicitudes->cantidad_peticiones;
                                $modelPeriodicidadActualizada->monto_ofertado = $valueSolicitudes->monto_ofertado;
                                $modelPeriodicidadActualizada->id_conf_retiro_parcial = $model->id;
                                $modelPeriodicidadActualizada->dia = $valueSolicitudes->numeroDia;
                                $modelPeriodicidadActualizada->save();
                            }
                        }
                    }

                    $transaction->commit();
                    $this->redirect(['admin']);
                } catch (Exception $e) {//echo "<pre>";print_r($e);exit;
                    throw new CHttpException(400, $e);
                    $transaction->rollBack();
                }
            }
        }


        $this->render('update', [
            'model' => $model,
            'modelPeriodicidad' => $modelPeriodicidad,
            'modelPrestamos' => $modelPrestamos,
            'modelConfSolicitudes' => $modelConfSolicitudes,
            'modelPagarPrestamosRetiro' => $modelPagarPrestamosRetiro,
            'pagarPrestamosRetiroAdm' => $pagarPrestamosRetiroAdm,
            'pagarPrestamosRetiroAsc' => $pagarPrestamosRetiroAsc,
        ]);
    }

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
		if(Yii::app()->request->isPostRequest)
		{
			// we only allow deletion via POST request
			$this->loadModel($id)->delete();

			// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
			if(!isset($_GET['ajax']))
				$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
		}
		else
			throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
	}

	/**
	 * Lists all models.
	 */
	public function actionIndex()
	{
		$dataProvider=new CActiveDataProvider('ConfRetiroParcial');
		$this->render('index',array(
			'dataProvider'=>$dataProvider,
		));
	}

	/**
	 * Manages all models.
	 */
	public function actionAdmin()
	{
		$model=new ConfRetiroParcial('search');
		$model->unsetAttributes();  // clear any default values
		if(isset($_GET['ConfRetiroParcial']))
			$model->attributes=$_GET['ConfRetiroParcial'];

		$this->render('admin',array(
			'model'=>$model,
		));
	}

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer the ID of the model to be loaded
	 */
	public function loadModel($id)
	{
		$model=ConfRetiroParcial::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

	/**
	 * Performs the AJAX validation.
	 * @param CModel the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='conf-retiro-parcial-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
        public function actionPeriodicidad(){

            if(isset($_POST['periodicidad']) && $_POST['periodicidad']!=''){
                $id= $_POST['periodicidad'];
                $items = 0;
                if($id==1){
                  $scenario = 'Diarias';
                  $items = 6;
                } //Semanal
                elseif($id==2){
                    $scenario = 'Semanal';
                }
                else{ //Monto
                    $scenario = 'Monto';
                }

                for($i=0;$i<=$items;$i++){
                  $model[$i]= new PeriodicidadRetiroParcial($scenario);
                }
                $this->renderPartial('_form_periodicidad',array(
			'model'=>$model,
                        'id'=>$id
		));


            }

        }
}
