<?php

class DefaultController extends Controller{

	public $layout = "panel";

	/**
	 * @return array action filters
	 */
	public function filters(){
		return array(
			'accessControl', // perform access control for CRUD operations
			'postOnly + delete', // we only allow deletion via POST request
		);
	}

	/**
	 * 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', 'guardar_nota'),
				'users' => array('@'),
			),
			[
				'allow',
				'actions' => ['cantidad_nuevas_empresas', 'empresas_excel', 'empresas_declaracion'],
				'expression' => [$this, 'permitirCantidadNuevasEmpresas']
			],
			array(
			'deny',  // deny all users
				'users' => array('*'),
			),
		);
	}

	public function actionEmpresas_excel(){
		Yii::import('application.extensions.PHPExcel1-8-2.Classes.PHPExcel');
        Yii::import('application.controllers.FuncionesController');

        $objPHPExcel = new PHPExcel();

        $objPHPExcel->getProperties()->setTitle("Reporte ".FuncionesController::obtenerFecha('Y-m-d H:i:s'));

        $styleTitulo = [
            'alignment' => ['horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER],
            'font'      => ['bold' => true],
            'borders'   => ['allborders' => ['style' => PHPExcel_Style_Border::BORDER_THIN]]
        ];

        $styleDatos = [
            //'alignment' => ['horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER]
            //'font'        => ['bold' => true],
            'borders'   => ['allborders' => ['style' => PHPExcel_Style_Border::BORDER_THIN]]
        ];

        $objPHPExcel->setActiveSheetIndex(0)->getStyle('A6:E6')->applyFromArray($styleTitulo);

        $objPHPExcel->getActiveSheet()->getStyle('A2:E2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        $objPHPExcel->setActiveSheetIndex(0)->setTitle('Empresas "J"');
        $objPHPExcel->setActiveSheetIndex(0)
        ->setCellValue('A2', 'Reporte Empresas "J"')

        // Titulos
        ->setCellValue('A6', 'Empresa')
        ->setCellValue('B6', 'Razón Social')
        ->setCellValue('C6', 'Teléfono 1')
        ->setCellValue('D6', 'Teléfono 2')
        ->setCellValue('E6', 'Correo electrónico');

        $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A2:E2');
        $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A4:E4');

        // Tamaños de las celdas
        $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(85);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(15);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(40);  

        $connection = Yii::app()->db;

        $sql = "SELECT DISTINCT apor_rif, apor_razonsocial, apor_telefono1, apor_telefono2, apor_correoelectronico FROM sidcai_aportante WHERE (esta_codigoestatus_fk = 2003 OR esta_codigoestatus_fk = 2008) AND (SELECT substring(apor_rif FROM 1 for 1)) = 'J' ORDER BY apor_rif ASC";

        $command = $connection->createCommand();
		$command->text = $sql;
		$model = $command->queryAll();

		/*$empresas = SidcaiAportante::model()->findAll([
			'distinct' => 'apor_rif',
			'select' => 'apor_razonsocial, apor_rif, apor_telefono1',
			'condition' => 'esta_codigoestatus_fk = :estatus1 OR esta_codigoestatus_fk = :estatus2',
			'params' => [
				':estatus1' => 2003,
				':estatus2' => 2008,
			],
			'order' => 'apor_rif'
		]);*/

		$numero = 1;
		for($i = 0; $i < count($model); $i++){
			$col = $i + 8;

			$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A'.$col, $model[$i]['apor_rif'])
            ->setCellValue('B'.$col, $model[$i]['apor_razonsocial'])
            ->setCellValue('C'.$col, $model[$i]['apor_telefono1'])
            ->setCellValue('D'.$col, $model[$i]['apor_telefono2'])
            ->setCellValue('E'.$col, $model[$i]['apor_correoelectronico']);

            $objPHPExcel->setActiveSheetIndex(0)->getStyle('A'.$col.':E'.$col)->applyFromArray($styleDatos);
		}


		/*********************************************************
                         Segunda Hoja "G"
        ***************************************************************/
        $objPHPExcel->createSheet();
   		$objPHPExcel->setActiveSheetIndex(1)->setTitle('Empresas "G"');
        $objPHPExcel->setActiveSheetIndex(1)->getStyle('A2:E2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        $objPHPExcel->setActiveSheetIndex(1)
        ->setCellValue('A2', 'Reporte Empresas "G"')

        // Titulos
        ->setCellValue('A6', 'Empresa')
        ->setCellValue('B6', 'Razón Social')
        ->setCellValue('C6', 'Teléfono 1')
        ->setCellValue('D6', 'Teléfono 2')
        ->setCellValue('E6', 'Correo electrónico');

         // Tamaños de las celdas
        $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(80);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(15);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(40);  


        $objPHPExcel->setActiveSheetIndex(1)->mergeCells('A2:E2');
        $objPHPExcel->setActiveSheetIndex(1)->mergeCells('A4:E4');

		$sql = "SELECT DISTINCT apor_rif, apor_razonsocial, apor_telefono1, apor_telefono2, apor_correoelectronico FROM sidcai_aportante WHERE (esta_codigoestatus_fk = 2003 OR esta_codigoestatus_fk = 2008) AND (SELECT substring(apor_rif FROM 1 for 1)) = 'G' ORDER BY apor_rif ASC";

        $command = $connection->createCommand();
		$command->text = $sql;
		$model = $command->queryAll();

		$numero = 1;
		for($i = 0; $i < count($model); $i++){
			$col = $i + 8;

			$objPHPExcel->setActiveSheetIndex(1)
            ->setCellValue('A'.$col, $model[$i]['apor_rif'])
            ->setCellValue('B'.$col, $model[$i]['apor_razonsocial'])
            ->setCellValue('C'.$col, $model[$i]['apor_telefono1'])
            ->setCellValue('D'.$col, $model[$i]['apor_telefono2'])
            ->setCellValue('E'.$col, $model[$i]['apor_correoelectronico']);

            $objPHPExcel->setActiveSheetIndex(1)->getStyle('A'.$col.':E'.$col)->applyFromArray($styleDatos);
		}

		/*********************************************************
                         Tercera Hoja "V"
        ***************************************************************/
        $objPHPExcel->createSheet();
   		$objPHPExcel->setActiveSheetIndex(2)->setTitle('Empresas V');
        $objPHPExcel->setActiveSheetIndex(2)->getStyle('A2:E2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        $objPHPExcel->setActiveSheetIndex(2)
        ->setCellValue('A2', 'Reporte Empresas "V"')

        // Titulos
        ->setCellValue('A6', 'Empresa')
        ->setCellValue('B6', 'Razón Social')
        ->setCellValue('C6', 'Teléfono 1')
        ->setCellValue('D6', 'Teléfono 2')
        ->setCellValue('E6', 'Correo electrónico');

         // Tamaños de las celdas
        $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(80);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(15);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(40);  

        $objPHPExcel->setActiveSheetIndex(2)->mergeCells('A2:E2');
        $objPHPExcel->setActiveSheetIndex(2)->mergeCells('A4:E4');

		$sql = "SELECT DISTINCT apor_rif, apor_razonsocial, apor_telefono1, apor_telefono2, apor_correoelectronico FROM sidcai_aportante WHERE (esta_codigoestatus_fk = 2003 OR esta_codigoestatus_fk = 2008) AND (SELECT substring(apor_rif FROM 1 for 1)) = 'V' ORDER BY apor_rif ASC";

        $command = $connection->createCommand();
		$command->text = $sql;
		$model = $command->queryAll();

		$numero = 1;
		for($i = 0; $i < count($model); $i++){
			$col = $i + 8;

			$objPHPExcel->setActiveSheetIndex(2)
            ->setCellValue('A'.$col, $model[$i]['apor_rif'])
            ->setCellValue('B'.$col, $model[$i]['apor_razonsocial'])
            ->setCellValue('C'.$col, $model[$i]['apor_telefono1'])
            ->setCellValue('D'.$col, $model[$i]['apor_telefono2'])
            ->setCellValue('E'.$col, $model[$i]['apor_correoelectronico']);

            $objPHPExcel->setActiveSheetIndex(2)->getStyle('A'.$col.':E'.$col)->applyFromArray($styleDatos);
		}


		/*********************************************************
                         Cuarta Hoja "E"
        ***************************************************************/
        $objPHPExcel->createSheet();
   		$objPHPExcel->setActiveSheetIndex(3)->setTitle('Empresas E');
        $objPHPExcel->setActiveSheetIndex(3)->getStyle('A2:E2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

        $objPHPExcel->setActiveSheetIndex(3)
        ->setCellValue('A2', 'Reporte Empresas "E"')

        // Titulos
        ->setCellValue('A6', 'Empresa')
        ->setCellValue('B6', 'Razón Social')
        ->setCellValue('C6', 'Teléfono 1')
        ->setCellValue('D6', 'Teléfono 2')
        ->setCellValue('E6', 'Correo electrónico');

         // Tamaños de las celdas
        $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(80);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(15);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(40);  

        $objPHPExcel->setActiveSheetIndex(3)->mergeCells('A2:E2');
        $objPHPExcel->setActiveSheetIndex(3)->mergeCells('A4:E4');

		$sql = "SELECT DISTINCT apor_rif, apor_razonsocial, apor_telefono1, apor_telefono2, apor_correoelectronico FROM sidcai_aportante WHERE (esta_codigoestatus_fk = 2003 OR esta_codigoestatus_fk = 2008) AND (SELECT substring(apor_rif FROM 1 for 1)) = 'E' ORDER BY apor_rif ASC";

        $command = $connection->createCommand();
		$command->text = $sql;
		$model = $command->queryAll();

		$numero = 1;
		for($i = 0; $i < count($model); $i++){
			$col = $i + 8;

			$objPHPExcel->setActiveSheetIndex(3)
            ->setCellValue('A'.$col, $model[$i]['apor_rif'])
            ->setCellValue('B'.$col, $model[$i]['apor_razonsocial'])
            ->setCellValue('C'.$col, $model[$i]['apor_telefono1'])
            ->setCellValue('D'.$col, $model[$i]['apor_telefono2'])
            ->setCellValue('E'.$col, $model[$i]['apor_correoelectronico']);

            $objPHPExcel->setActiveSheetIndex(3)->getStyle('A'.$col.':D'.$col)->applyFromArray($styleDatos);
		}

		// Establecer la hoja activa, para que cuando se abra el documento se muestre primero.
        $objPHPExcel->setActiveSheetIndex(0);
         
        // Se modifican los encabezados del HTTP para indicar que se envia un archivo de Excel.
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="Resumen Empresas '.FuncionesController::obtenerFecha('Y-m-d H:i:s').'.xlsx"');
        header('Cache-Control: max-age=0');
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
        $objWriter->save('php://output');
	}

	public function actionEmpresas_declaracion(){
		$connection2 = Yii::app()->db2;
		$sql = "SELECT DISTINCT a.apor_codigo_pk, a.apor_rif, a.apor_razonsocial, apor_telefono1, apor_telefono2, apor_correoelectronico FROM sidcai_declaracioncti d INNER JOIN sidcai_aportante a ON a.apor_codigo_pk = d.apor_codigo_fk WHERE d.decl_fechadeclaracion >='2017-01-01' AND d.decl_fechadeclaracion <= '2020-12-31' AND (d.esta_codigo_fk = 1001 OR d.esta_codigo_fk = 1005)";
		$command = $connection2->createCommand();
		$command->text = $sql;
		$empresas = $command->queryAll();

		$array_nuevas_empresas = [];

		for($i = 0; $i < count($empresas); $i++){
			$existe_empresa = SidcaiAportante::model()->find([
				'select' => 'apor_codigo_pk',
				'condition' => 'apor_rif = :apor_rif',
				'params' => [':apor_rif' => $empresas[$i]['apor_rif']]
			]);

			if($existe_empresa != null){
				if(!in_array($existe_empresa->apor_codigo_pk, $array_nuevas_empresas)){
					array_push($array_nuevas_empresas, $existe_empresa->apor_codigo_pk);
				}
			}
		}

		echo "De <b>".count($empresas)."</b> Empresas en al anterior sistema que están en estatus \"Editable\" y/o \"Cancelada\" del año 2020, hay <b>".count($array_nuevas_empresas)."</b> empresas en el nuevo sistema registrada<br>";

		// Se busca si tiene declaración.
		$array_empresas_sin_declaracion = [];

		for($i = 0; $i < count($array_nuevas_empresas); $i++){
			$tiene_declaracion = SidcaiDeclaracioncti::model()->find([
				'select' => 'decl_codigo_pk',
				'condition' => 'apor_codigo_fk = :apor_codigo_fk',
				'params' => [':apor_codigo_fk' => $array_nuevas_empresas[$i]]
			]);

			if($tiene_declaracion == null)
				array_push($array_empresas_sin_declaracion, $array_nuevas_empresas[$i]);
		}

		echo "De <b>".count($array_nuevas_empresas)."</b> empresas en el nuevo sistema, hay <b>".count($array_empresas_sin_declaracion)."</b> que no se le ha la declaración.<br>";
		echo "<hr>";
		echo "<b>Empresas en al anterior sistema que están en estatus \"Editable\" y/o \"Cancelada\"</b> <br>";
		echo "<table>";
		echo "<tr>";
		echo "<td>RIF</td>";
		echo "<td>RAZÓN SOCIAL</td>";
		echo "<td>TELÉFONO 1</td>";
		echo "<td>TELÉFONO 2</td>";
		echo "<td>CORREO ELECTRÓNICO</td>";
		echo "</tr>";
		for($i = 0; $i < count($empresas); $i++){
			echo "<tr>";
			echo "<td>".$empresas[$i]['apor_rif']."</td>";
			echo "<td>".$empresas[$i]['apor_razonsocial']."</td>";
			echo "<td>".$empresas[$i]['apor_telefono1']."</td>";
			echo "<td>".$empresas[$i]['apor_telefono2']."</td>";
			echo "<td>".$empresas[$i]['apor_correoelectronico']."</td>";
			echo "</tr>";
		}
		echo "</table>";

		echo "<br><br>";
		echo "<b>Empresas sin crear declaración en el nuevo sistema que han estado registrado en el anterior sistema y tiene declaración en estatus editable o cancelada</b> <br>";

		echo "<table>";
		echo "<tr>";
		echo "<td>RIF</td>";
		echo "<td>RAZÓN SOCIAL</td>";
		echo "<td>TELÉFONO 1</td>";
		echo "<td>TELÉFONO 2</td>";
		echo "<td>CORREO ELECTRÓNICO</td>";
		echo "</tr>";
		for($i = 0; $i < count($array_empresas_sin_declaracion); $i++){
			$empresa = SidcaiAportante::model()->find([
				'select' => 'apor_rif, apor_razonsocial, apor_codigo_pk, apor_telefono1, apor_telefono2, apor_correoelectronico',
				'condition' => 'apor_codigo_pk = :apor_codigo_pk',
				'params' => [':apor_codigo_pk' => $array_empresas_sin_declaracion[$i]]
			]);

			if($empresa != null){
				echo "<tr>";
				echo "<td>".$empresa->apor_rif."</td>";
				echo "<td>".$empresa->apor_razonsocial."</td>";
				echo "<td>".$empresa->apor_telefono1."</td>";
				echo "<td>".$empresa->apor_telefono2."</td>";
				echo "<td>".$empresa->apor_correoelectronico."</td>";
				echo "</tr>";
			}
		}
		echo "</table>";
	}

	public function actionCantidad_nuevas_empresas(){
		if(FuncionesController::permitirPerfil([1, 2 , 5, 6])){
			//$tiempo_inicial = microtime(true);
			///Empresas nuevas registradas por primera vez en SIDCAI
			$connection = Yii::app()->db;
			
			$array_empresas_nueva_bd = [];

			$sql = "SELECT apor_rif FROM sidcai_aportante";
			$command = $connection->createCommand();
			$command->text = $sql;
			$model = $command->queryAll();

			for($i = 0; $i < count($model); $i++){
				array_push($array_empresas_nueva_bd, $model[$i]['apor_rif']);
			}


			$connection2 = Yii::app()->db2;

			$array_empresas_vieja_bd = [];

			$sql = "SELECT apor_rif FROM sidcai_aportante WHERE esta_codigoestatus_fk = 2003";
			//$sql = "SELECT COUNT(*) FROM sidcai_aportante WHERE esta_codigoestatus_fk = 2003";
			$command = $connection2->createCommand();
			$command->text = $sql;
			$model = $command->queryAll();

			for($i = 0; $i < count($model); $i++){
				array_push($array_empresas_vieja_bd, $model[$i]['apor_rif']);
			}

			$empresas_primera_vez_en_sidcai = [];

			for($i = 0; $i < count($array_empresas_nueva_bd); $i++){
				if(!in_array($array_empresas_nueva_bd[$i], $array_empresas_vieja_bd)){
					array_push($empresas_primera_vez_en_sidcai, $array_empresas_nueva_bd[$i]);
				}
			}

			echo "Nuevas Empresas: ". number_format(count($empresas_primera_vez_en_sidcai), 0, ',', '.');

			//$tiempo_final = microtime(true);
			//$tiempo = $tiempo_final - $tiempo_inicial;
	
			//echo "El tiempo de ejecución del archivo ha sido de " . $tiempo . " segundos";
		}
	}

	public function actionIndex(){
		Yii::import('application.controllers.FuncionesController');
		$id_analista = Yii::app()->user->id;
		$connection = Yii::app()->db;

		if(FuncionesController::permitirPerfil([1, 2 , 5, 6])){
			/***************************************************************************************************
													EMPRESA
			****************************************************************************************************/
			// Total Empresas
			$datos['total_empresas'] = SidcaiAportante::model()->count([
				'condition' => '(esta_codigoestatus_fk = :estatus1 OR esta_codigoestatus_fk = :estatus2 OR esta_codigoestatus_fk = :estatus3) AND apor_habilitado = :apor_habilitado',
				'params' => [
					':estatus1' => 2010,
					':estatus2' => 2008,
					':estatus3' => 2003,
					':apor_habilitado' => TRUE
				]
			]);
			$datos['total_empresas'] = number_format($datos['total_empresas'], 0, ',', '.');
			// Total Empresas "En Registro"
			$datos['total_empresa_en_registro'] = number_format(SidcaiAportante::model()->count('esta_codigoestatus_fk = :esta_codigoestatus_fk AND apor_habilitado = :apor_habilitado' , [':esta_codigoestatus_fk' => 2008, ':apor_habilitado' => TRUE]), 0, ',', '.');
			// Total Empresas "Registrado"
			$datos['total_empresa_registrada'] = number_format(SidcaiAportante::model()->count('esta_codigoestatus_fk = :esta_codigoestatus_fk AND apor_habilitado = :apor_habilitado', [':esta_codigoestatus_fk' => 2003, ':apor_habilitado' => TRUE]), 0, ',', '.');
			// Total Empresas "Renovación"
			$datos['total_empresa_renovacion'] = number_format(SidcaiAportante::model()->count('esta_codigoestatus_fk = :esta_codigoestatus_fk AND apor_habilitado = :apor_habilitado', [':esta_codigoestatus_fk' => 2010, ':apor_habilitado' => TRUE]), 0, ',', '.');

			// Verificando Recaudo -> Empresas que se acaban de registrar y que han subido todos los recaudos obligatorios.
			//$sql = "SELECT DISTINCT a.apor_rif FROM sidcai_aportante a INNER JOIN sidcai_recaudo r ON r.apor_codigo_fk = a.apor_codigo_pk AND r.renovar = FALSE AND r.reca_codigo_constancia = '' AND r.aceptado = FALSE";
			$sql = "SELECT DISTINCT a.apor_rif FROM sidcai_aportante a INNER JOIN sidcai_recaudo r ON r.apor_codigo_fk = a.apor_codigo_pk AND (a.esta_codigoestatus_fk = 2008 OR a.esta_codigoestatus_fk = 2003 OR a.esta_codigoestatus_fk = 2010) AND a.apor_habilitado = TRUE AND r.renovar = FALSE AND r.reca_codigo_constancia = '' AND r.aceptado = FALSE";
			$command = $connection->createCommand();
			$command->text = $sql;
			$model = $command->queryAll();
			$datos['total_verificando_recaudo'] = number_format(count($model), 0, ',', '.');


			/***************************************************************************************************
												DECLARACIÓN
			****************************************************************************************************/
			// Total Declaraciones
			$datos['total_declaraciones'] = number_format(SidcaiDeclaracioncti::model()->count(), 0, ',', '.');
			// Total Editable
			$datos['total_declaraciones_editable'] = number_format(SidcaiDeclaracioncti::model()->count('esta_codigo_fk = :esta_codigo_fk', [':esta_codigo_fk' => 1001]), 0, ',', '.');
			// Total Finazalida Exitosa
			$datos['total_declaraciones_exitosa'] = number_format(SidcaiDeclaracioncti::model()->count('esta_codigo_fk = :esta_codigo_fk', [':esta_codigo_fk' => 1003]), 0, ',', '.');
			// Total Finalizada Extemporanea
			$datos['total_declaraciones_extemporanea'] = number_format(SidcaiDeclaracioncti::model()->count('esta_codigo_fk = :esta_codigo_fk', [':esta_codigo_fk' => 1004]), 0, ',', '.');
			// Total En Proceso
			$datos['total_declaraciones_en_proceso'] = number_format(SidcaiDeclaracioncti::model()->count('esta_codigo_fk = :esta_codigo_fk', [':esta_codigo_fk' => 1006]), 0, ',', '.');
			// Total Multas Por Pagar
			$datos['total_declaraciones_multas_pagar'] = number_format(SidcaiDeclaracioncti::model()->count('esta_codigo_fk = :esta_codigo_fk', [':esta_codigo_fk' => 1007]), 0, ',', '.');
			// Total Verificando Pago Recaudación
			$datos['total_declaraciones_verificando_pago_recaudacion'] = number_format(SidcaiDeclaracioncti::model()->count('esta_codigo_fk = :esta_codigo_fk', [':esta_codigo_fk' => 1008]), 0, ',', '.');
			// Total Verificando Pago Fiscalización
			$datos['total_declaraciones_verificando_pago_fiscalizacion'] = number_format(SidcaiDeclaracioncti::model()->count('esta_codigo_fk = :esta_codigo_fk', [':esta_codigo_fk' => 1011]), 0, ',', '.');
			// Total Error en pago
			$datos['total_declaraciones_error_en_pago'] = number_format(SidcaiDeclaracioncti::model()->count('esta_codigo_fk = :esta_codigo_fk', [':esta_codigo_fk' => 1010]), 0, ',', '.');
			// Total Error en pago
			$datos['total_declaraciones_anulada'] = number_format(SidcaiDeclaracioncti::model()->count('esta_codigo_fk = :esta_codigo_fk', [':esta_codigo_fk' => 1009]), 0, ',', '.');
		}

		// Empresas que han resubido un recaudo rechazado.
		$sql = "SELECT  r.apor_codigo_fk FROM sidcai_recaudo r INNER JOIN sidcai_aportanterecaudo_analista ara ON r.apor_codigo_fk = ara.apor_codigo_fk WHERE r.reca_estado = 1 AND erro_codigo_fk IS NOT NULL AND ara.usua_habilitado = TRUE AND ara.usua_codigo_fk = ".$id_analista." GROUP BY r.apor_codigo_fk";
		$command = $connection->createCommand();
		$command->text = $sql;
		$model = $command->queryAll();

		$datos['total_recaudos_resubidos_analista'] = number_format(count($model), 0, ',', '.');

		// Cantidad de empresas en la cual el Analista ha rechazado un recaudo.
		$sql = "SELECT  r.apor_codigo_fk FROM sidcai_recaudo r INNER JOIN sidcai_aportanterecaudo_analista ara ON r.apor_codigo_fk = ara.apor_codigo_fk WHERE r.reca_estado = 2 AND erro_codigo_fk IS NOT NULL AND ara.usua_habilitado = TRUE AND ara.usua_codigo_fk = ".$id_analista." GROUP BY r.apor_codigo_fk";
		$command = $connection->createCommand();
		$command->text = $sql;
		$model = $command->queryAll();

		$datos['total_recaudos_rechazados_analista'] = number_format(count($model), 0, ',', '.');


		/***************************************************************************************************
												RECAUDACIÓN
		****************************************************************************************************/

		if(FuncionesController::permitirPerfil([1, 2 , 4, 6])){
			// Verificar Recaudo -> Obtener Cantidad
			$sql = "SELECT ara.*, a.apor_codigo_pk, a.esta_codigoestatus_fk, e.esta_codigo_pk FROM sidcai_aportanterecaudo_analista ara INNER JOIN sidcai_aportante a ON ara.apor_codigo_fk = a.apor_codigo_pk AND a.esta_codigoestatus_fk = 2008 AND ara.renovacion = FALSE AND ara.usua_habilitado = TRUE JOIN sidcai_estatus e ON a.esta_codigoestatus_fk = e.esta_codigo_pk WHERE ara.usua_codigo_fk = $id_analista";
			$command = $connection->createCommand();
			$command->text = $sql;
			$model = $command->queryAll();

			$datos['cantidad_verificar_recaudos'] = number_format(count($model), 0, ',', '.');

			// Verificar Renovación de recaudo -> Obtener Cantidad
			$sql = "SELECT ara.*, a.apor_codigo_pk, a.esta_codigoestatus_fk FROM sidcai_aportanterecaudo_analista ara INNER JOIN sidcai_aportante a ON ara.apor_codigo_fk = a.apor_codigo_pk  AND ara.usua_habilitado = TRUE AND ara.renovacion = TRUE AND ara.aceptado_por = FALSE WHERE ara.usua_codigo_fk = $id_analista";
			$command = $connection->createCommand();
			$command->text = $sql;
			$model = $command->queryAll();

			$datos['cantidad_verificar_renovacion'] = number_format(count($model), 0, ',', '.');

			$datos['cantidad_declaraciones_multar'] = number_format(count($model), 0, ',', '.');

			// Declaraciones de recaudación que tiene que ser verificados sus pagos
			//$sql = "SELECT sda.decl_codigo_fk FROM sidcai_declaracion_analista sda INNER JOIN sidcai_declaracioncti d ON sda.decl_codigo_fk = d.decl_codigo_pk WHERE sda.usua_codigo_fk = $id_analista AND sda.usua_habilitado = TRUE AND d.esta_codigo_fk = 1008";
			$sql = "SELECT COUNT(DISTINCT dd.codigo_declaraciones) FROM sidcai_declaracion_detalle dd INNER JOIN sidcai_declaracioncti d ON d.decl_codigo_pk = CAST(split_part(dd.codigo_declaraciones, ',', 1) as NUMERIC) AND (d.esta_codigo_fk = 1008 OR d.esta_codigo_fk = 1011) JOIN sidcai_declaracion_analista da ON da.decl_codigo_fk = d.decl_codigo_pk AND da.usua_codigo_fk = $id_analista AND da.usua_habilitado = TRUE AND da.decl_finalizada = false INNER JOIN sidcai_aportante a ON a.apor_codigo_pk = dd.apor_codigo_fk";
			$command = $connection->createCommand();
			$command->text = $sql;
			$model = $command->queryAll();

			$datos['cantidad_verificar_pago_recaudacion'] = number_format($model[0]['count'], 0, ',', '.');
			
			// sql SELECT ROW_NUMBER () OVER (ORDER BY count(u.usua_documento) desc), count(u.usua_documento), u.usua_nombre, u.usua_apellido FROM sidcai_certificado c INNER JOIN sidcai_declaracion_analista da ON da.decl_codigo_fk = c.decl_codigo_fk AND da.decl_finalizada = TRUE AND c.cert_habilitado = TRUE  JOIN sidcai_usuario u ON u.usua_codigo_pk = da.usua_codigo_fk group by  u.usua_documento, u.usua_nombre, u.usua_apellido

			$usuarios_recaudacion = SidcaiPerfilUsuario::model()->findAll([
				'condition' => 'perf_codigo_fk = :perfil1 OR perf_codigo_fk = :perfil2 OR perf_codigo_fk = :perfil3',
				'params' => [
					':perfil1' => 4,
					':perfil2' => 6,
					':perfil3' => 1,
				],
			]);

			$datos['cantidad_certificados_usuario_recaudacion'] = [];

			if($usuarios_recaudacion != null){
				$array_usuario_logeado = [];

				foreach($usuarios_recaudacion as $u){
					$sql = "SELECT u.usua_documento, u.usua_nombre, u.usua_apellido FROM sidcai_certificado c INNER JOIN sidcai_declaracion_analista da ON da.decl_codigo_fk = c.decl_codigo_fk AND da.decl_finalizada = TRUE AND c.cert_habilitado = TRUE AND da.usua_codigo_fk = $u->usua_codigo_fk JOIN sidcai_usuario u ON u.usua_codigo_pk = da.usua_codigo_fk";
				
					$command = $connection->createCommand();
					$command->text = $sql;
					$model = $command->queryAll();

					$usuario = "";
					$cantidad = 0;

					if($model != null){
						$usuario = "<span data-tooltip='".$model[0]['usua_nombre']." ".$model[0]['usua_apellido']."'>".$model[0]['usua_documento']."</span>";
						//$cantidad = number_format(count($model), 0, ',', '.');
						$cantidad = count($model);

					}else{
						// Se busca el usuario analista que aún no tiene empresas certificadas.
						$usuario_sin_certificaciones = SidcaiUsuario::model()->findByPk($u->usua_codigo_fk);
						$usuario = "<span data-tooltip='".$usuario_sin_certificaciones->usua_nombre." ".$usuario_sin_certificaciones->usua_apellido."'>".$usuario_sin_certificaciones->usua_documento."</span>";
					}

					if($id_analista == $u->usua_codigo_fk){
						$array_usuario_logeado = [
							'usuario' => $usuario,
							'cantidad' => $cantidad,
						];
					}

					$datos['cantidad_certificados_usuario_recaudacion'][] = [
						'usuario' => $usuario,
						'cantidad' => $cantidad,
					];

				}

		
				// Se ordena por orden de mayor a menor.
				array_multisort(array_column($datos['cantidad_certificados_usuario_recaudacion'], 'cantidad'), SORT_DESC, $datos['cantidad_certificados_usuario_recaudacion']);

				
				$cantidad_total_certificados_usuario_recaudacion = count($datos['cantidad_certificados_usuario_recaudacion']);

				// Se agrega el puesto
				for($i = 0; $i < count($datos['cantidad_certificados_usuario_recaudacion']); $i++){
					$datos['cantidad_certificados_usuario_recaudacion'][$i]['puesto'] = $i + 1;

					if($id_analista == $u->usua_codigo_fk)
						$array_usuario_logeado['puesto'] = $i + 1;
				}

				// Se obtiene solo 5 registros.
				$datos['cantidad_certificados_usuario_recaudacion'] = array_slice($datos['cantidad_certificados_usuario_recaudacion'], 0, 5);

				$aparece_usuario_logeado = false;

				// Se recorre el array para saber si el usuario logeado aparece dentro los 5
				if($array_usuario_logeado != null){
					for($i = 0; $i < count($datos['cantidad_certificados_usuario_recaudacion']); $i++){
						if($datos['cantidad_certificados_usuario_recaudacion'][$i]['usuario'] == $array_usuario_logeado['usuario']){
							$aparece_usuario_logeado = true;
						}
					}
				}

				if(!$aparece_usuario_logeado){
					$array_usuario_logeado['puesto'] = $cantidad_total_certificados_usuario_recaudacion;
					array_push($datos['cantidad_certificados_usuario_recaudacion'], $array_usuario_logeado);
				}
			}
		}

		


		/***************************************************************************************************
												FISCALIZACIÓN
		****************************************************************************************************/
		// Declaraciones de fiscalizacion que tiene que ser verificados sus pagos
		$sql = "SELECT sda.decl_codigo_fk FROM sidcai_declaracion_analista sda INNER JOIN sidcai_declaracioncti d ON sda.decl_codigo_fk = d.decl_codigo_pk WHERE sda.usua_codigo_fk = $id_analista AND sda.usua_habilitado = TRUE AND d.esta_codigo_fk = 1011";
		$command = $connection->createCommand();
		$command->text = $sql;
		$model = $command->queryAll();

		$datos['cantidad_verificar_pago_fiscalizacion'] = number_format(count($model), 0, ',', '.');

		// Declaración por multar -> Obtener Cantidad
		$sql = "SELECT sda.decl_codigo_fk FROM sidcai_declaracion_analista sda INNER JOIN sidcai_declaracioncti d ON sda.decl_codigo_fk = d.decl_codigo_pk WHERE sda.usua_codigo_fk = $id_analista AND sda.usua_habilitado = TRUE AND d.esta_codigo_fk = 1006";
		$command = $connection->createCommand();
		$command->text = $sql;
		$model = $command->queryAll();


		$datos['cantidad_declaraciones_multar'] = number_format(count($model), 0, ',', '.');

		$datos['nota'] = $this->nota_guardada();

		// Estadisticas del usuario logeado
		// Declaración por multar -> Obtener Cantidad
		$sql = "SELECT COUNT(*) FROM sidcai_certificado C INNER JOIN sidcai_declaracion_analista sda ON sda.decl_codigo_fk = c.decl_codigo_fk AND sda.usua_codigo_fk = $id_analista WHERE c.cert_habilitado = TRUE AND sda.decl_finalizada = TRUE";
		$command = $connection->createCommand();
		$command->text = $sql;
		$model = $command->queryAll();
		$datos['mis_estadisticas']['certificados'] = $model[0]['count'];

		Yii::import('application.modules.analista.controllers.HistorialController');

		$datos['mis_estadisticas']['declaraciones'] = HistorialController::cantidad_estatus_declaraciones($id_analista);

		$this->render('index', 
			array(
				'datos' => $datos,
			)
		);
	}

	/**
	 * Action llamado por AJAX
	 * Guardar nota.
	 */
	public function actionGuardar_nota(){
		$data = [];

		if(isset($_POST['ok'], $_POST['nota'])){
			$nota = CHtml::encode($_POST['nota']);
			$id_analista = Yii::app()->user->id;

			if($nota != ''){
				if((strlen($nota) >= 1) && (strlen($nota) <= 2000)){
					// Se busca si el usuario que está logeado no halla tenido ya un registro.
					$model = SidcaiAnalistaNota::model()->find([
						'condition' => 'usua_codigo_fk = :usua_codigo_fk',
						'params' => [':usua_codigo_fk' => $id_analista]
					]);

					$date = new DateTime("now", new DateTimeZone('America/Caracas')); 
					$hoy_segundos = $date->format('Y-m-d H:i:s');

					if($model == null){
						$model = new SidcaiAnalistaNota;
						$model->usua_codigo_fk = $id_analista;
					}

					$model->nota_contenido = $nota;
					$model->nota_fecha_actualizada = $hoy_segundos;

					if(!$model->validate() || !$model->save()){
						$data['correcto'] = false;
						$data['mensaje'] = '¡Ups! No se logró guardar la nota.';
					}else{
						Yii::import('application.controllers.FuncionesController');
						$data['nota'] 		= $model->nota_contenido;
						$data['fecha'] 		= FuncionesController::convertirFecha($model->nota_fecha_actualizada, 'dd/mm/yyyy');
						$data['correcto'] 	= true;
						$data['mensaje'] 	= 'Nota guardada correctamente.';
					}
				}else{
					$data['correcto'] = false;
					$data['mensaje'] = '¡Ups! Máximo 2000 caracteres.';
				}
			}else{
				$data['correcto'] = false;
				$data['mensaje'] = 'No puede dejar la nota vacía.';
			}
		}

		echo json_encode($data);
	}

	/**
	 * Trae la nota que tiene guarda el usuario logeado.
	 */
	private function nota_guardada() : array{
		$nota = SidcaiAnalistaNota::model()->find([
			'condition' => 'usua_codigo_fk = :usua_codigo_fk',
			'params' => [':usua_codigo_fk' => Yii::app()->user->id]
		]);

		$devolver = [];

		if($nota != null){
			Yii::import('application.controllers.FuncionesController');

			$devolver['nota'] = $nota->nota_contenido;
			$devolver['fecha'] = FuncionesController::convertirFecha($nota->nota_fecha_actualizada, 'dd/mm/yyyy');
		}

		return $devolver;
	}

	public function permitirCantidadNuevasEmpresas(){
		Yii::import('application.controllers.FuncionesController');

		if(FuncionesController::permitirPerfil([1, 2, 5, 6]))
			return true;

		$this->redirect(Yii::app()->homeUrl);
	}

}