<?php

class TipoCreditoController 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($id)
    {
            $model = $this->loadModel($id);
            $modelGastosAdministrativo = TipoCreditoGastosAdministrativo::model()->findAll('id_tipo_credito=:id_tipo_credito',array(':id_tipo_credito'=>$model->id));
        if(!$modelGastosAdministrativo){
                    $model->gastos_administrativo=1;
                }
                else{

                    foreach ($modelGastosAdministrativo as $key => $value) {
                        if($value-> porcentaje !='')
                            $model->gastos_administrativo=2;
                        else
                            $model->gastos_administrativo=3;

                        $value-> porcentaje= number_format($value->porcentaje,3,',','.');
                        $value-> rango_uno= number_format($value->rango_uno,2,',','.');
                        $value-> rango_dos= number_format($value->rango_dos,2,',','.');
                        $value-> garantia= number_format($value->garantia,2,',','.');

                    }

                }

                $modelCapacidadPago = TipoCreditoCapacidadPago::model()->findAll('id_tipo_credito=:id_tipo_credito',array(':id_tipo_credito'=>$model->id));
        if(!$modelCapacidadPago)
                    $modelCapacidadPago[] = new TipoCreditoCapacidadPago();

                if(isset($model->solicitudes[0])){

                    $model->periodicidad = $model->solicitudes[0]->id_periodicidad;
                    //echo "<pre>";print_r($model->periodicidad);exit;
                    if($model->periodicidad ==1)
                        $items = 6;
                    else
                        $items = 0;

                    for($i = 0; $i <= $items; $i++)
                        $modelPeriodicidad[$i] = new PeriodicidadTipoCredito();

                    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;
                           // echo "<pre>";print_r($modelPeriodicidad[$valueSolicitudes->dia]->attributes);exit;
                    }
                }
                else{
                    $modelPeriodicidad[]= new PeriodicidadTipoCredito;
                }

                $modelCuotasEspeciales = $model->idCuotasEspeciales;
        if($modelCuotasEspeciales){
                    foreach ($modelCuotasEspeciales as $key => $value) {
                       $value->fecha_cuota = date('d/m',  strtotime($value->fecha_cuota));
                    }
                    $model->cuotasEspeciales=1;
                }
                else{
                    $modelCuotasEspeciales[] = new TipoCreditoCuotasEspeciales();
                    $model->cuotasEspeciales=0;
                }

                /*

                $model-> monto_minimo_credito= number_format($model->monto_minimo_credito,2,',','.');
                $model-> monto_maximo_credito= number_format($model->monto_maximo_credito,2,',','.');
                $model-> porcentaje_refinanciamiento= number_format($model->porcentaje_refinanciamiento,2,',','.');
                $model-> porcentaje_disponibilidad= number_format($model->porcentaje_disponibilidad,2,',','.');
                $model-> taza_interes= number_format($model->taza_interes,2,',','.');

                */

        $this->render('view',array(
            'model'=>$model,
            'modelGastosAdministrativo'=>$modelGastosAdministrativo,
            'modelPeriodicidad'=>$modelPeriodicidad,
            'modelCuotasEspeciales'=>$modelCuotasEspeciales,
        ));
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate($id = null)
    {
        $tituloPrestamo = TituloTipoCredito::model()->findByPk($id);
        $model = new TipoCredito('Registro');
        $modelGastosAdministrativo[] = new TipoCreditoGastosAdministrativo('Porcentaje');
        $modelPeriodicidad[] = new  PeriodicidadTipoCredito();
        $modelCuotasEspeciales[] = new TipoCreditoCuotasEspeciales();
        $modelCapacidadPago = [];

        foreach (ConceptoCapacidadPago::model()->findAll(['order'=>'asignacion desc']) as $key => $value) {
            $capacidadPago= new TipoCreditoCapacidadPago('RegistroTipo');
            $capacidadPago->id_capacidad_pago = $value->id;
            $capacidadPago->asignacion = ($value->asignacion)?1:0;
            $modelCapacidadPago[]=$capacidadPago;
        }

        $model->gastos_administrativo=1;
        $model->descontar_grantia_afianzadora=1;
        $model->id_titulo_tipo_credito = $id;
        $model->porcentaje_cancelado = number_format(100, 2, ',', '.');

        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;
        }

        if (isset($_POST['TipoCredito'])) {
            unset($modelCuotasEspeciales);
            $modelCuotasEspeciales=[];
            unset($modelPeriodicidad);
            $modelPeriodicidad=[];
            unset($modelGastosAdministrativo);
            $modelGastosAdministrativo=[];
            unset($modelCapacidadPago);
            $modelCapacidadPago=[];
            unset($modelPrestamos);
            $modelPrestamos=[];
            $valido = true;
            $model->attributes=$_POST['TipoCredito'];

            if (isset($_POST['PeriodicidadTipoCredito'])) {
                if ($model->periodicidad==1) {
                    $scenario = 'Diarias';
                } //Semanal
                elseif ($model->periodicidad==2) {
                    $scenario = 'Semanal';
                } else { //Monto
                    $scenario = 'Monto';
                }
                foreach ($_POST['PeriodicidadTipoCredito'] as $iSolicitud=>$dataSolicitud) {
                    $item = new PeriodicidadTipoCredito($scenario);
                    $item->attributes=$dataSolicitud;
                    $item->numeroDia = $iSolicitud;

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

                    unset($item);
                }
            }

            $porcentaje =0;
            if (isset($_POST['TipoCreditoCuotasEspeciales'])) {
                $model->scenario='RegistroCuotasEspeciales';
                $cuotas = [];
                $i = 0;
                foreach ($_POST['TipoCreditoCuotasEspeciales'] as $keyCuotas=>$valueCuotas) {
                    $item = new TipoCreditoCuotasEspeciales();
                    $item->attributes=$valueCuotas;
                    $porcentaje += (float) $item->porcentaje;

                    if ($model->cuotasEspeciales) {
                        $valido =$item->validate()&&$valido;

                        if ($porcentaje>100) {
                            $item->addError('porcentaje', 'la suma de porcentaje no puede exceder el 100%');
                            $valido= false;
                        }
                    }

                    $modelCuotasEspeciales[] = $item;
                    $cuotas[$keyCuotas]=$item->fecha_cuota;
                    $i++;
                    unset($item);
                }

                if ($model->cuotasEspeciales) {
                    $anterior =0;
                    foreach ($cuotas as $key => $value) {
                        $valor = str_replace('/', '', $value);
                        if ($valor > $anterior) {
                            $anterior  = $valor;
                        } else {
                            $valido= false;
                            $modelCuotasEspeciales[$key]->addError('fecha_cuota', 'La fecha de la cuota debe ser menor a la anterior');
                        }
                    }
                    $model->scenario='RegistroCuotasEspeciales';
                    if ($porcentaje<100) {
                        $valido= false;
                        $modelCuotasEspeciales[0]->addError('porcentaje', 'la suma de todos los porcentajes debe ser 100%');
                    }
                } else {
                    $model->scenario='Registro';
                }
            }

            if (isset($_POST['TipoCreditoGastosAdministrativo'])) {
                //si el gasto administrativo es por porcentaje
                if ($model->gastos_administrativo==2) {
                    $item = new TipoCreditoGastosAdministrativo('Porcentaje');
                    $item->attributes=$_POST['TipoCreditoGastosAdministrativo'][0];
                    $item->rango_uno=null;
                    $item->rango_dos=null;
                    $item->garantia=null;
                    $valido =$item->validate()&&$valido;
                    $modelGastosAdministrativo[] = $item;
                    unset($item);
                }//si el gasto administrativo es por rango de valor
                elseif ($model->gastos_administrativo==3) {
                    foreach ($_POST['TipoCreditoGastosAdministrativo'] as $keyCuotas=>$valueCuotas) {
                        $item = new TipoCreditoGastosAdministrativo('RangoValor');
                        $item->attributes=$valueCuotas;
                        $item->porcentaje=null;
                        $valido =$item->validate()&&$valido;
                        $modelGastosAdministrativo[] = $item;
                        unset($item);
                    }
                } else {
                    $modelGastosAdministrativo[] = new TipoCreditoGastosAdministrativo('Porcentaje');
                }
            }

            $capacidadPagoAsignacion = false;
            $scenario =(! $model->capacidad_pago_sueldo_aporte)?'RegistroTipo':'';

            if (isset($_POST['TipoCreditoCapacidadPago'])) {
                foreach ($_POST['TipoCreditoCapacidadPago'] as $keyCuotas=>$valueCuotas) {
                    $item = new TipoCreditoCapacidadPago($scenario);
                    $item->attributes=$valueCuotas;
                    $item->id_capacidad_pago=$keyCuotas;
                    $valido =$item->validate()&&$valido;
                    $modelCapacidadPago[] = $item;
                    if ($item->asignacion) {
                        $capacidadPagoAsignacion = true;
                    }
                    unset($item);
                }
            }

            if (! $capacidadPagoAsignacion && ! $model->capacidad_pago_sueldo_aporte) {
                $model->addError('capacidad_pago_sueldo_aporte', 'No ha registrado concepto para las asignaciones');
                $valido = false;
            }

            $valido=$model->validate()&&$valido;

            if ($model->id_refinanciamiento_seleccionados!='') {
                $model->refinanciamiento_conversion_tipo = $model->id_refinanciamiento_seleccionados;
            }

            if ($model->id_reestructuracion_seleccionados!='') {
                $model->reestructuracion_conversion_tipo = $model->id_reestructuracion_seleccionados;
            }

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

                    unset($item);
                }
            }

            if ($valido) {
                $transaction = Yii::app()->db->beginTransaction();
                try {
                    if ($model->id_refinanciamiento_seleccionados!='') {
                        $conversion  = explode(",", $model->id_refinanciamiento_seleccionados);
                        $model->refinanciamiento_conversion_tipo = json_encode($conversion);
                    } else {
                        $model->refinanciamiento_conversion_tipo='';
                    }

                    if ($model->id_reestructuracion_seleccionados!='') {
                        $conversion  = explode(",", $model->id_reestructuracion_seleccionados);
                        $model->reestructuracion_conversion_tipo = json_encode($conversion);
                    } else {
                        $model->reestructuracion_conversion_tipo ='';
                    }

                    $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;
                        }
                    }
                    $model->creditos_permitidos=json_encode($prestamosPermitidos);

                    if (! $model->save()) {
                        throw new Exception('No se pudo guardar el nuevo tipo de préstamo.');
                    }

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

                    if (count($modelCuotasEspeciales)>0) {
                        foreach ($modelCuotasEspeciales as $key=>$value) {
                            if ($value->fecha_cuota!='') {
                                $value->id_tipo_credito =$model->id;
                                $value->numero_cuota = $key+1;
                                $value->fecha_cuota =$value->fecha_cuota.'/'.date('Y');
                                $value->save();
                            }
                        }
                    }

                    if (count($modelGastosAdministrativo)>0) {
                        foreach ($modelGastosAdministrativo as $key=>$value) {
                            $value->id_tipo_credito =$model->id;
                            $value->descontar = $model->descuento_gastos_administrativo;
                            $value->save();
                        }
                    }

                    if (count($modelCapacidadPago)>0) {
                        foreach ($modelCapacidadPago as $key=>$value) {
                            $value->id_tipo_credito =$model->id;
                            if ($value->solicitar_concepto) {
                                $value->save();
                            }
                        }
                    }

                    $transaction->commit();
                    $this->redirect(['tituloTipoCredito/view','id' => $id]);
                } catch (Exception $e) {
                    throw new CHttpException(400, $e->getMessage());
                    $transaction->rollBack();
                }
            }
        }

        $this->render('create', [
            'model'=>$model,
            'modelGastosAdministrativo'=>$modelGastosAdministrativo,
            'modelPeriodicidad'=>$modelPeriodicidad,
            'modelCuotasEspeciales'=>$modelCuotasEspeciales,
            'modelCapacidadPago'=>$modelCapacidadPago,
            'tituloPrestamo'=>$tituloPrestamo,
            'modelPrestamos'=>$modelPrestamos,
        ]);
    }

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id the ID of the model to be updated
     */
    public function actionUpdate($id)
    {
        $model=$this->loadModel($id);
        $model->scenario='Registro';

        $modelGastosAdministrativo = TipoCreditoGastosAdministrativo::model()->findAll('id_tipo_credito=:id_tipo_credito', [':id_tipo_credito'=>$model->id]);
        if (! $modelGastosAdministrativo) {
            $modelGastosAdministrativo[] = new TipoCreditoGastosAdministrativo('Registro');
            $model->gastos_administrativo=1;
        } else {
            foreach ($modelGastosAdministrativo as $key => $value) {
                if ($value->porcentaje !='') {
                    $model->gastos_administrativo=2;
                } else {
                    $model->gastos_administrativo=3;
                }

                $value->porcentaje= number_format($value->porcentaje, 3, ',', '.');
                $value->rango_uno= number_format($value->rango_uno, 2, ',', '.');
                $value->rango_dos= number_format($value->rango_dos, 2, ',', '.');
                $value->garantia= number_format($value->garantia, 2, ',', '.');

                $model->descuento_gastos_administrativo = ($value-> descontar)?1:0;
            }
        }

        $model->generar_tabla_cuotas_especiales = ($model->generar_tabla_cuotas_especiales)?1:0;
        $model->descontar_grantia_afianzadora = ($model->descontar_grantia_afianzadora)?1:0;
        $model->publicar_tienda_virtual = ($model->publicar_tienda_virtual)?1:0;
        $model->prela_tienda_virtual = ($model->prela_tienda_virtual)?1:0;
        $model->metodo_calculo_garantia_afianzadora = ($model->metodo_calculo_garantia_afianzadora=='')?1:$model->metodo_calculo_garantia_afianzadora;
        $model->metodo_calculo_garantia_monto_gasto = ($model->metodo_calculo_garantia_monto_gasto)?1:0;
        $model->reestructuracion = ($model->reestructuracion)?1:0;

        if ($model->refinanciamiento_conversion_tipo!='') {
            $model->refinanciamiento_conversion_tipo = implode(",", json_decode($model->refinanciamiento_conversion_tipo, true));
        }

        if ($model->reestructuracion_conversion_tipo!='') {
            $model->reestructuracion_conversion_tipo = implode(",", json_decode($model->reestructuracion_conversion_tipo, true));
        }

        $modelCapacidadPago= [];
        foreach (ConceptoCapacidadPago::model()->findAll(['order'=>'asignacion desc']) as $key => $value) {
            $capacidadPago= new TipoCreditoCapacidadPago('RegistroTipo');
            $capacidadPago->id_capacidad_pago = $value->id;
            $capacidadPago->asignacion = ($value->asignacion)?1:0;
            $modelCapacidad = TipoCreditoCapacidadPago::model()->count('id_tipo_credito=:id_tipo_credito AND id_capacidad_pago=:id_capacidad_pago AND solicitar_concepto = TRUE', [
                'id_capacidad_pago' => $value->id,
                'id_tipo_credito' => $id
            ]);
            $capacidadPago->solicitar_concepto=$modelCapacidad;

            $modelCapacidadPago[]=$capacidadPago;
        }

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

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

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

            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 PeriodicidadTipoCredito;
        }

        $modelCuotasEspeciales = $model->idCuotasEspeciales;
        if ($modelCuotasEspeciales) {
            foreach ($modelCuotasEspeciales as $key => $value) {
                $value->fecha_cuota = date('d/m', strtotime($value->fecha_cuota));
            }
            $model->cuotasEspeciales=1;
        } else {
            $modelCuotasEspeciales[] = new TipoCreditoCuotasEspeciales();
            $model->cuotasEspeciales=0;
        }

        $model->monto_minimo_credito= number_format($model->monto_minimo_credito, 2, ',', '.');
        $model->monto_maximo_credito= number_format($model->monto_maximo_credito, 2, ',', '.');
        $model->porcentaje_refinanciamiento= number_format($model->porcentaje_refinanciamiento, 2, ',', '.');
        $model->porcentaje_disponibilidad= number_format($model->porcentaje_disponibilidad, 2, ',', '.');
        $model->taza_interes= number_format($model->taza_interes, 2, ',', '.');
        $model->capacidad_pago_sueldo_aporte= ($model->capacidad_pago_sueldo_aporte)?1:0;
        $model->porcentaje_cancelado= number_format($model->porcentaje_cancelado, 2, ',', '.');

        $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;
        }

        if (isset($_POST['TipoCredito'])) {
            unset($modelCuotasEspeciales);
            $modelCuotasEspeciales=[];
            unset($modelPeriodicidad);
            $modelPeriodicidad=[];
            unset($modelGastosAdministrativo);
            $modelGastosAdministrativo=[];
            unset($modelCapacidadPago);
            $modelCapacidadPago=[];
            unset($modelPrestamos);
            $modelPrestamos=[];
            $valido = true;
            $model->attributes=$_POST['TipoCredito'];
            $valido=$model->validate()&&$valido;

            if ($model->afecta_disponibilidad_haberes == 0) {
                $model->metodo_liberacion_capital = 2;
            }

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

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

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

                    unset($item);
                }
            }

            $porcentaje =0;
            if (isset($_POST['TipoCreditoCuotasEspeciales'])) {
                $cuotas = [];
                $i = 0;
                foreach ($_POST['TipoCreditoCuotasEspeciales'] as $keyCuotas=>$valueCuotas) {
                    $item = new TipoCreditoCuotasEspeciales();
                    $item->attributes=$valueCuotas;

                    $porcentaje += (int) $item->porcentaje;

                    if ($model->cuotasEspeciales) {
                        $valido =$item->validate()&&$valido;

                        if ($porcentaje>100) {
                            $item->addError('porcentaje', 'la suma de porcentaje no puede exceder el 100%');
                            $valido= false;
                        }
                    }
                    $modelCuotasEspeciales[] = $item;
                    $cuotas[$i]=$item->fecha_cuota;
                    $i++;
                    unset($item);
                }

                if ($model->cuotasEspeciales) {
                    $anterior =0;
                    foreach ($cuotas as $key => $value) {
                        $valor = str_replace('/', '', $value);
                        if ($valor > $anterior) {
                            $anterior  = $valor;
                        } else {
                            $valido= false;
                            $modelCuotasEspeciales[$key]->addError('fecha_cuota', 'La fecha de la cuota debe ser menor a la anterior');
                        }
                    }
                    $model->scenario='RegistroCuotasEspeciales';
                    if ($porcentaje<100) {
                        $valido= false;
                        $modelCuotasEspeciales[0]->addError('porcentaje', 'la suma de todos los porcentajes debe ser 100%');
                    }
                } else {
                    $model->scenario='Registro';
                }
            }
            if (isset($_POST['TipoCreditoGastosAdministrativo'])) {
                //si el gasto administrativo es por porcentaje
                if ($model->gastos_administrativo==2) {
                    $item = new TipoCreditoGastosAdministrativo('Porcentaje');
                    $item->attributes=$_POST['TipoCreditoGastosAdministrativo'][0];
                    $item->rango_uno=null;
                    $item->rango_dos=null;
                    $item->garantia=null;
                    $valido =$item->validate()&&$valido;
                    $modelGastosAdministrativo[] = $item;
                    unset($item);
                }//si el gasto administrativo es por rango de valor
                elseif ($model->gastos_administrativo==3) {
                    foreach ($_POST['TipoCreditoGastosAdministrativo'] as $keyCuotas=>$valueCuotas) {
                        $item = new TipoCreditoGastosAdministrativo('RangoValor');
                        $item->attributes=$valueCuotas;
                        $item->porcentaje=null;
                        $valido =$item->validate()&&$valido;
                        $modelGastosAdministrativo[] = $item;
                        unset($item);
                    }
                } else {
                    $modelGastosAdministrativo[] = new TipoCreditoGastosAdministrativo('Registro');
                }
            }

            $capacidadPagoAsignacion = false;
            $scenario =(! $model->capacidad_pago_sueldo_aporte)?'RegistroTipo':'';

            if (isset($_POST['TipoCreditoCapacidadPago'])) {
                foreach ($_POST['TipoCreditoCapacidadPago'] as $keyCuotas=>$valueCuotas) {
                    $item = new TipoCreditoCapacidadPago($scenario);
                    $item->attributes=$valueCuotas;
                    $item->id_capacidad_pago=$keyCuotas;
                    $valido =$item->validate()&&$valido;

                    if ($item->asignacion) {
                        $capacidadPagoAsignacion = true;
                    }

                    $modelCapacidadPago[] = $item;
                    unset($item);
                }
            }

            if (! $capacidadPagoAsignacion && ! $model->capacidad_pago_sueldo_aporte) {
                $model->addError('capacidad_pago_sueldo_aporte', 'No ha registrado concepto para las asignaciones');
                $valido = false;
            }
            $valido=$model->validate()&&$valido;

            if ($model->id_refinanciamiento_seleccionados!='') {
                $model->refinanciamiento_conversion_tipo = $model->id_refinanciamiento_seleccionados;
            }

            if ($model->id_reestructuracion_seleccionados!='') {
                $model->reestructuracion_conversion_tipo = $model->id_reestructuracion_seleccionados;
            }

            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 ($valido) {
                $transaction = Yii::app()->db->beginTransaction();
                try {
                    if ($model->cuotasEspeciales!=1) {
                        $model->porcentaje_cuotas_especiales=0;
                        $model->generar_tabla_cuotas_especiales=0;
                    }

                    if ($model->id_refinanciamiento_seleccionados!='') {
                        $conversion  = explode(",", $model->id_refinanciamiento_seleccionados);
                        $model->refinanciamiento_conversion_tipo = json_encode($conversion);
                    } else {
                        $model->refinanciamiento_conversion_tipo='';
                    }

                    if ($model->id_reestructuracion_seleccionados!='') {
                        $conversion  = explode(",", $model->id_reestructuracion_seleccionados);
                        $model->reestructuracion_conversion_tipo = json_encode($conversion);
                    } else {
                        $model->reestructuracion_conversion_tipo ='';
                    }

                    $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;
                        }
                    }
                    $model->creditos_permitidos=json_encode($prestamosPermitidos);

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

                        TipoCreditoCuotasEspeciales::model()->deleteAll('id_tipo_credito=:id_tipo_credito', [':id_tipo_credito'=>$model->id]);
                        if ($model->cuotasEspeciales==1) {
                            if (count($modelCuotasEspeciales)>0) {
                                foreach ($modelCuotasEspeciales as $key=>$value) {
                                    if ($value->fecha_cuota!='') {
                                        $value->id_tipo_credito =$model->id;
                                        $value->numero_cuota = $key+1;
                                        $value->fecha_cuota =$value->fecha_cuota.'/'.date('Y');
                                        $value->save();
                                    }
                                }
                            }
                        }

                        TipoCreditoGastosAdministrativo::model()->deleteAll('id_tipo_credito=:id_tipo_credito', [':id_tipo_credito'=>$model->id]);
                        if ($model->gastos_administrativo!=1) {
                            foreach ($modelGastosAdministrativo as $key=>$value) {
                                $value->id_tipo_credito =$model->id;
                                $value->descontar = $model->descuento_gastos_administrativo;
                                $value->save();
                            }
                        }

                        if (count($modelCapacidadPago)>0 && ! $model->capacidad_pago_sueldo_aporte) {
                            foreach ($modelCapacidadPago as $key=>$value) {
                                $value->id_tipo_credito =$model->id;
                                $modelItemCapacidad = TipoCreditoCapacidadPago::model()->find('id_tipo_credito=:id_tipo_credito AND id_capacidad_pago=:id_capacidad_pago', [
                                    ':id_tipo_credito'=>$model->id,
                                    ':id_capacidad_pago'=>$value->id_capacidad_pago
                                ]);
                                if ($modelItemCapacidad) {
                                    $modelItemCapacidad->solicitar_concepto;
                                    $modelItemCapacidad->save();
                                } else {
                                    if ($value->solicitar_concepto==1) {
                                        $value->save();
                                    }
                                }
                            }
                        }

                        $transaction->commit();
                        $this->redirect(['tituloTipoCredito/view','id'=>$model->id_titulo_tipo_credito]);
                    }
                } catch (Exception $e) {
                    throw new CHttpException(400, $e->getMessage());
                    $transaction->rollBack();
                }
            }
        }

        $this->render('update', [
            'model'=>$model,
            'modelGastosAdministrativo'=>$modelGastosAdministrativo,
            'modelPeriodicidad'=>$modelPeriodicidad,
            'modelCuotasEspeciales'=>$modelCuotasEspeciales,
            'modelPrestamos'=>$modelPrestamos,
            'modelCapacidadPago'=>$modelCapacidadPago,
        ]);
    }

    /**
     * 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('TipoCredito');
        $this->render('index',array(
            'dataProvider'=>$dataProvider,
        ));
    }

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

        $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=TipoCredito::model()->findByPk($id);
        if($model===null)
            throw new CHttpException(404,'The requested page does not exist.');
        return $model;
    }
        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 PeriodicidadTipoCredito($scenario);
                }
                $this->renderPartial('_form_periodicidad',array(
            'model'=>$model,
                        'id'=>$id
        ));


            }

        }

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