<?php

class ReporteCreditosController 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
                        'postOnly + delete',
                         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','ReporteCreditos','CargarTipocre'),
		'users'=>array('@'),
	),
	array('allow', // allow admin user to perform 'admin' and 'delete' actions
	'actions'=>array('admin','delete'),
	'users'=>array('admin'),
),
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)
{
	$this->render('view',array(
		'model'=>$this->loadModel($id),
	));
}

         public function actionCargarTipocre()
        {
            $data= TipoCredito::model()->findAllBySql("select * from prestamos.tipo_credito where id_titulo_tipo_credito
        =:keyword and blnborrado='f' order by descripcion asc",array(':keyword'=>$_POST['ReporteCreditos']['id_titulo']));

            $data=CHtml::listData($data,'id','descripcion');
            echo "<option value=''>Seleccione tipo</option>";
            foreach($data as $value=>$name)
            {
                    echo CHtml::tag('option', array('value'=>$value),CHtml::encode($name),true);
            }
}

/**
* Creates a new model.
* If creation is successful, the browser will be redirected to the 'view' page.
*/
public function actionCreate()
{
	$model=new ReporteCreditos;

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

	if(isset($_POST['ReporteCreditos']))
	{
		$model->attributes=$_POST['ReporteCreditos'];
		if($model->save())
		$this->redirect(array('view','id'=>$model->idcredito));
	}

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

/**
* 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);

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

	if(isset($_POST['ReporteCreditos']))
	{
		$model->attributes=$_POST['ReporteCreditos'];
		if($model->save())
		$this->redirect(array('view','id'=>$model->idcredito));
	}

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

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

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

	$this->render('admin',array(
		'model'=>$model,
	));
}
public function actionReporteCreditos()
{
	$model=new ReporteCreditos();
	// echo "<pre>";print_r($model->attributes);exit;
	$model->unsetAttributes();  // clear any default values
	if(isset($_POST['ReporteCreditos'])){
		$rutaArchivo = "doc/ReporteCreditos_".Yii::app()->user->id.".xlsx";
		// echo "<pre>";print_r($_POST);exit;
		if(isset($_POST['yt1'])){

			$model->attributes = $_POST['ReporteCreditos'];
			if($model->validate()){
				$modelResultado = $model->searchReporteCreditos();
				// $modelResultado = $model->search()->getData();
				$total = count($modelResultado);
				if($total>0){
					// echo "<pre>";	var_dump($modelResultado[1]);exit;
					$this->render('reporteCreditos',array('model'=>$model));
					echo "<script type=\"text/javascript\">
					$('#carga').show();
					$('#formulario').hide();
					</script>";
					$this->mensajeCarga($mensaje = "<b>Generando Resumen:</b> .....");

					$filas=array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
					'AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');

					$phpExcelPath = Yii::getPathOfAlias('ext.Excel.PHPExcel.Classes');
					$phpExcelPath2 = Yii::getPathOfAlias('application.extensions.Excel.PHPExcel.Classes.PHPExcel');

					spl_autoload_unregister(array('YiiBase','autoload'));

					include($phpExcelPath . DIRECTORY_SEPARATOR . 'PHPExcel.php');
					include($phpExcelPath2 . DIRECTORY_SEPARATOR . 'IOFactory.php');
					spl_autoload_register(array('YiiBase','autoload'));

					$objPHPExcel = new PHPExcel();

					$objPHPExcel->getProperties()->setCreator("RORAIMASOFTWARE")
																			->setLastModifiedBy("RORAIMASOFTWARE")
																			->setTitle("RORAIMASOFTWARE")
																			->setSubject("RORAIMASOFTWARE")
																			->setDescription("RORAIMASOFTWARE")
																			->setKeywords("RORAIMASOFTWARE")
																			->setCategory("RORAIMASOFTWARE");

					$objPHPExcel->setActiveSheetIndex(0);
					$camposExcel = $model->configuracionCampo2();

					$this->mensajeCarga($mensaje = "<b>Creando Cintillo:</b> .....");
					$numtemo=0;
					$inicioDetalle = count(array_filter($camposExcel,function($v) {return ((array_key_exists('resumen',$v))?$v['resumen']:false);}))+5;
					$ultimaLinea = ($inicioDetalle + $total)-1;
					/////////////////////////////////////////////////////////// Inicio de Tabla de Resumen  ///////////////////////////////////////////////////////////
					$numfila = 1;
					$objPHPExcel->getActiveSheet()->freezePaneByColumnAndRow(0,($inicioDetalle));

					$objPHPExcel->getActiveSheet()->getStyle('A'.($numfila).':B'.($numfila))->getFont()->setBold(true);					//stylo
					$objPHPExcel->getActiveSheet()->getStyle('A'.($numfila).':B'.($numfila))->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
					$objPHPExcel->getActiveSheet()->getStyle('A'.($numfila).':B'.($numfila))->getFill()->getStartColor()->setARGB('C00000');
					$objPHPExcel->getActiveSheet()->getStyle('A'.($numfila).':B'.($numfila))->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
					$objPHPExcel->getActiveSheet()->getStyle('A'.($numfila).':B'.($numfila))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
					$objPHPExcel->getActiveSheet()->setCellValue('A'.($numfila),'CONCEPTOS');
					$objPHPExcel->getActiveSheet()->setCellValue('B'.($numfila),'TOTALES');
					$numfila ++;
					$i = 0;
					foreach ($camposExcel as $key => $value) {
						if((array_key_exists('resumen',$value))&&$value['resumen']==1){
							$objPHPExcel->getActiveSheet()->setCellValue('A'.($numfila),$model->getAttributeLabel($key));
							$objPHPExcel->getActiveSheet()->getStyle('B'.($numfila))->getAlignment()->setHorizontal($value['alineacion']);
							$objPHPExcel->getActiveSheet()->getStyle('B'.($numfila))->getNumberFormat()->setFormatCode($value['formato']);
							$objPHPExcel->getActiveSheet()->setCellValue('B'.($numfila),'=SUM('.$filas[$i].$inicioDetalle.':'.$filas[$i].($ultimaLinea).')');
							$numfila ++;
						}
						$i++;
					}
					$numfila +=2;

					foreach($camposExcel as $key=>$value) {
							$objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila, $model->getAttributeLabel($key));
							$objPHPExcel->getActiveSheet()->getColumnDimension($filas[$numtemo])->setAutoSize(true);

							$objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getFont()->setBold(true);					//stylo
							$objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
							$objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getFill()->getStartColor()->setARGB($value['color']);
							$objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
							$objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

							$numtemo=$numtemo+1;
					}
					$numfila ++;
					$objPHPExcel->setActiveSheetIndex(0);
				//echo count($resultadomegareporte); exit;
					$this->mensajeCarga($mensaje = "<b>Registrando datos en la celda</b> .....");

					foreach($modelResultado as $i=>$data) {

						$numtemo=0;
                                           
						foreach ($camposExcel as $keyCampoExcel => $valueCampoExcel) {
							if($keyCampoExcel == 'idunidad'){
								$data->$keyCampoExcel =($data->unidad)?$data->unidad->descripcion:"";
							}

							if($keyCampoExcel == 'id_tipo_credito')
								$data->$keyCampoExcel =($data->tipoCredito)?$data->tipoCredito->descripcion:"";

							if($keyCampoExcel == 'tipo_cuota')
								$data->$keyCampoExcel =$model->getTipoCuota($data->$keyCampoExcel);

							if(array_key_exists('alineacion',$valueCampoExcel))
							$objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getAlignment()->setHorizontal($valueCampoExcel['alineacion']);
							if(array_key_exists('formato',$valueCampoExcel))
							$objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode($valueCampoExcel['formato']);

							$objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$data->$keyCampoExcel);
							$numtemo=$numtemo+1;

						}



						$progreso = 0;
						if($i!=0)
						$progreso = (($i*100)/($total-1));

						$this->barraProgreso($progreso);
						$this->mensajeCarga($mensaje = "<b>".floor($progreso)."%</b>", $contenedorMensajeId='barraProgreso');
						$numfila=$numfila+1;
					}
					$this->barraProgreso(100);
					$this->mensajeCarga($mensaje = "<b>100% Completado</b>", $contenedorMensajeId='barraProgreso');

					$this->mensajeCarga($mensaje = "<b>Guardando los datos</b> .....");
					echo "<script type=\"text/javascript\">
					$('#resultado').show();
					$('#barraEstado').show();
					</script>";
					$this->barraProgreso(0, $barraProgresoId='barraEstado');
						$this->mensajeCarga($mensaje = "<b>Datos guardados</b> .....");
					// Rename sheet
					$objPHPExcel->getActiveSheet()->setTitle('Reporte de Créditos');
					$objPHPExcel->setActiveSheetIndex(0);

					$this->barraProgreso(33,$barraProgresoId = 'barraEstado');

					$this->mensajeCarga($mensaje = "<b>Generando Resumen:</b>  Generado.", $contenedorMensajeId='mensajeResultado');
					$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
					$objWriter->save($rutaArchivo);

					$this->mensajeCarga($mensaje = "<b>Guardando Archivo</b> .....", $contenedorMensajeId='mensajeResultado');
					$this->barraProgreso(66,$barraProgresoId = 'barraEstado');


					echo "<script type=\"text/javascript\">
					$('#archivos').append('<b></b> Descargar Excel <b>".CHtml::link('aquí', $rutaArchivo,array('target'=>'_blank'))."</b><br>');
					$('#boton').show();
					</script>";
					$this->mensajeCarga($mensaje = "<b>Archivo listo</b> .....", $contenedorMensajeId='mensajeResultado');
					$this->barraProgreso(100,$barraProgresoId = 'barraEstado');
					flush();ob_flush();flush();ob_flush();
					exit;
				}
				else{
					Yii::app()->user->setFlash('error', "<b>No hay datos para generar el reporte</b>");
				}
			}

		}
		elseif(isset($_POST['yt0'])){
					unlink($rutaArchivo);

		}

	}
	$this->render('reporteCreditos',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=ReporteCreditos::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']==='reporte-creditos-form')
	{
		echo CActiveForm::validate($model);
		Yii::app()->end();
	}
}

protected function mensajeCarga($mensaje, $contenedorMensajeId=''){
	if($contenedorMensajeId=='')
	$contenedorMensajeId ='mensajes';

	echo "	<script type=\"text/javascript\">
	$('#".$contenedorMensajeId."').html('".$mensaje."');
	</script>";
	flush();ob_flush();flush();ob_flush();
}
protected function barraProgreso($count, $barraProgresoId= ''){
	if($barraProgresoId=='')
	$barraProgresoId ='barraProgreso';

	echo "<script type=\"text/javascript\">
	$('#".$barraProgresoId."').css('width','".$count."%' );
	</script>";
	flush();ob_flush();
}
}
