<?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('@'),
            ),
            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 = [
            'borders' => ['allborders' => ['style' => PHPExcel_Style_Border::BORDER_THIN]]
        ];

        $connection = Yii::app()->db;
        $titulos = ['Empresa', 'Razón Social', 'Teléfono 1', 'Teléfono 2', 'Correo electrónico'];
        $tiposEmpresas = ['J', 'G', 'V', 'E'];

        foreach ($tiposEmpresas as $index => $tipo) {
            $objPHPExcel->createSheet();
            $sheet = $objPHPExcel->setActiveSheetIndex($index);
            $sheet->setTitle('Empresas "' . $tipo . '"');
            $sheet->setCellValue('A2', 'Reporte Empresas "' . $tipo . '"')
                ->mergeCells('A2:E2')
                ->getStyle('A2:E2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

            foreach ($titulos as $col => $titulo) {
                $sheet->setCellValueByColumnAndRow($col, 6, $titulo);
            }

            $sheet->getStyle('A6:E6')->applyFromArray($styleTitulo);

            foreach (range('A', 'E') as $col) {
                $sheet->getColumnDimension($col)->setWidth($col === 'B' ? 80 : ($col === 'A' ? 15 : 15));
            }

            $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)) = '$tipo'
                    ORDER BY apor_rif ASC";

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

            foreach ($model as $row => $data) {
                $fila = $row + 8;
                $sheet->fromArray($data, null, 'A' . $fila)
                    ->getStyle('A' . $fila . ':E' . $fila)->applyFromArray($styleDatos);
            }
        }

        $objPHPExcel->setActiveSheetIndex(0);

        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($sql);
        $empresas = $command->queryAll();

        $array_nuevas_empresas = [];

        foreach ($empresas as $empresa) {
            $existe_empresa = SidcaiAportante::model()->find([
                'select' => 'apor_codigo_pk',
                'condition' => 'apor_rif = :apor_rif',
                'params' => [':apor_rif' => $empresa['apor_rif']]
            ]);

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

        echo "De <b>" . count($empresas) . "</b> Empresas en el 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 registradas<br>";

        $array_empresas_sin_declaracion = [];

        foreach ($array_nuevas_empresas as $codigo_pk) {
            $tiene_declaracion = SidcaiDeclaracioncti::model()->find([
                'select' => 'decl_codigo_pk',
                'condition' => 'apor_codigo_fk = :apor_codigo_fk',
                'params' => [':apor_codigo_fk' => $codigo_pk]
            ]);

            if ($tiene_declaracion == null) {
                $array_empresas_sin_declaracion[] = $codigo_pk;
            }
        }

        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 el anterior sistema que están en estatus \"Editable\" y/o \"Cancelada\"</b> <br>";
        echo "<table>";
        echo "<tr><td>RIF</td><td>RAZÓN SOCIAL</td><td>TELÉFONO 1</td><td>TELÉFONO 2</td><td>CORREO ELECTRÓNICO</td></tr>";

        foreach ($empresas as $empresa) {
            echo "<tr><td>" . $empresa['apor_rif'] . "</td><td>" . $empresa['apor_razonsocial'] . "</td><td>" . $empresa['apor_telefono1'] . "</td><td>" . $empresa['apor_telefono2'] . "</td><td>" . $empresa['apor_correoelectronico'] . "</td></tr>";
        }

        echo "</table>";
        echo "<br><br>";
        echo "<b>Empresas sin crear declaración en el nuevo sistema que han estado registradas en el anterior sistema y tienen declaración en estatus editable o cancelada</b> <br>";
        echo "<table>";
        echo "<tr><td>RIF</td><td>RAZÓN SOCIAL</td><td>TELÉFONO 1</td><td>TELÉFONO 2</td><td>CORREO ELECTRÓNICO</td></tr>";

        foreach ($array_empresas_sin_declaracion as $codigo_pk) {
            $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' => $codigo_pk]
            ]);

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

        echo "</table>";
    }

    public function actionCantidad_nuevas_empresas() {
        if (FuncionesController::permitirPerfil([1, 2, 5, 6])) {
            $connection = Yii::app()->db;
            $connection2 = Yii::app()->db2;

            $array_empresas_nueva_bd = [];
            $array_empresas_vieja_bd = [];

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

            foreach ($model as $item) {
                $array_empresas_nueva_bd[] = $item['apor_rif'];
            }

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

            foreach ($model as $item) {
                $array_empresas_vieja_bd[] = $item['apor_rif'];
            }

            $empresas_primera_vez_en_sidcai = [];

            foreach ($array_empresas_nueva_bd as $rif) {
                if (!in_array($rif, $array_empresas_vieja_bd)) {
                    $empresas_primera_vez_en_sidcai[] = $rif;
                }
            }

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

    public function actionIndex() {
        Yii::import('application.controllers.FuncionesController');
        $id_analista = Yii::app()->user->id;
        $connection = Yii::app()->db;
    
        $datos = [];
    
        // Obtener cantidad de recaudos para verificar
       if (FuncionesController::permitirPerfil([1, 2, 4, 6])) {
       // if (FuncionesController::permitirPerfil([1, 2, 4, 6, 3, 5])) {
           /* $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
                    INNER JOIN sidcai_estatus e ON a.esta_codigoestatus_fk = e.esta_codigo_pk
                    WHERE a.esta_codigoestatus_fk = 2008
                    AND ara.renovacion = FALSE
                    AND ara.usua_habilitado = TRUE
                    AND ara.usua_codigo_fk = :id_analista";*/
                    $sql = "
    SELECT 
        a.apor_codigo_pk,
        a.apor_razonsocial,
        a.apor_rif,
        a.esta_codigoestatus_fk
    FROM sidcai_aportanterecaudo_analista ara
    INNER JOIN sidcai_aportante a ON ara.apor_codigo_fk = a.apor_codigo_pk
    WHERE a.esta_codigoestatus_fk = 2008
      AND ara.renovacion = FALSE
      AND ara.usua_habilitado = TRUE
      AND ara.usua_codigo_fk = :id_analista
    GROUP BY a.apor_codigo_pk, a.apor_razonsocial, a.apor_rif, a.esta_codigoestatus_fk
";

            $command = $connection->createCommand($sql);
            $command->bindValue(':id_analista', $id_analista, PDO::PARAM_INT);
            $model = $command->queryAll();
            $datos['cantidad_verificar_recaudos'] = count($model);
    
            $id_analista = Yii::app()->user->id;
            $connection = Yii::app()->db;
            
            // Conteo total de aportantes para verificar renovación
           $sqlVerificarRenovacion = "
SELECT COUNT(DISTINCT a.apor_codigo_pk) AS total
FROM sidcai_aportanterecaudo_analista ara
INNER JOIN sidcai_aportante a ON ara.apor_codigo_fk = a.apor_codigo_pk
WHERE ara.usua_habilitado = TRUE
  AND ara.renovacion = TRUE
  AND ara.aceptado_por = FALSE
  AND ara.usua_codigo_fk = :id_analista
  AND a.esta_codigoestatus_fk = 2010
  AND (
        EXISTS (
            SELECT 1 
            FROM sidcai_recaudo r
            WHERE r.apor_codigo_fk = ara.apor_codigo_fk
              AND r.aceptado = FALSE
              AND r.renovar = TRUE
        )
        OR EXISTS (
            SELECT 1
            FROM sidcai_casillas_islr c
            WHERE c.apor_codigo_fk = ara.apor_codigo_fk
              AND c.estatus_fk = 6
        )
  )
";


$commandVerificar = $connection->createCommand($sqlVerificarRenovacion);
$commandVerificar->bindValue(':id_analista', $id_analista, PDO::PARAM_INT);
$datos['cantidad_verificar_renovacion'] = $commandVerificar->queryScalar();

            
        }
    
        // Obtener cantidad de recaudos resubidos y rechazados
        $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 ara.aceptado_por = FALSE
                AND 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($sql);
        $command->bindValue(':id_analista', $id_analista, PDO::PARAM_INT);
        $model = $command->queryAll();
        $datos['total_recaudos_resubidos_analista'] = count($model);
    
        $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($sql);
        $command->bindValue(':id_analista', $id_analista, PDO::PARAM_INT);
        $model = $command->queryAll();
        $datos['total_recaudos_rechazados_analista'] = count($model);
    
        // Obtener cantidad de declaraciones para verificar pago (recaudación)
        $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)
                INNER JOIN sidcai_declaracion_analista da ON da.decl_codigo_fk = d.decl_codigo_pk
                INNER JOIN sidcai_aportante a ON a.apor_codigo_pk = dd.apor_codigo_fk
                WHERE (d.esta_codigo_fk = 1008 OR d.esta_codigo_fk = 1011)
                AND da.usua_codigo_fk = :id_analista
                AND da.usua_habilitado = TRUE
                AND da.decl_finalizada = FALSE";
        $command = $connection->createCommand($sql);
        $command->bindValue(':id_analista', $id_analista, PDO::PARAM_INT);
        $model = $command->queryAll();
        $datos['cantidad_verificar_pago_recaudacion'] = isset($model[0]['count']) ? $model[0]['count'] : 0;
    
        $this->render('index', [
            'datos' => $datos,
        ]);
    }
    

   /* public function actionIndex() {
        Yii::import('application.controllers.FuncionesController');
        $id_analista = Yii::app()->user->id;
        $connection = Yii::app()->db;
    
        $datos = [];
    
        if (FuncionesController::permitirPerfil([1, 2, 5, 6])) {
            $criteria = new CDbCriteria;
            $criteria->addInCondition('esta_codigoestatus_fk', [2010, 2008, 2003]);
            $criteria->compare('apor_habilitado', true);
            $datos['total_empresas'] = SidcaiAportante::model()->count($criteria);
    
            $datos['total_empresa_en_registro'] = number_format(SidcaiAportante::model()->countByAttributes(['esta_codigoestatus_fk' => 2008, 'apor_habilitado' => true]), 0, ',', '.');
            $datos['total_empresa_registrada'] = number_format(SidcaiAportante::model()->countByAttributes(['esta_codigoestatus_fk' => 2003, 'apor_habilitado' => true]), 0, ',', '.');
            $datos['total_empresa_renovacion'] = number_format(SidcaiAportante::model()->countByAttributes(['esta_codigoestatus_fk' => 2010, 'apor_habilitado' => true]), 0, ',', '.');
    
            $sql = "SELECT DISTINCT a.apor_rif
                    FROM sidcai_aportante a
                    INNER JOIN sidcai_recaudo r ON r.apor_codigo_fk = a.apor_codigo_pk
                    WHERE a.esta_codigoestatus_fk IN (2008, 2003, 2010)
                    AND a.apor_habilitado = TRUE
                    AND r.renovar = FALSE
                    AND r.reca_codigo_constancia = ''
                    AND r.aceptado = FALSE";
            $command = $connection->createCommand($sql);
            $model = $command->queryAll();
            $datos['total_verificando_recaudo'] = number_format(count($model), 0, ',', '.');
        }
    
        $datos['total_declaraciones'] = number_format(SidcaiDeclaracioncti::model()->count(), 0, ',', '.');
        $datos['total_declaraciones_editable'] = number_format(SidcaiDeclaracioncti::model()->countByAttributes(['esta_codigo_fk' => 1001]), 0, ',', '.');
        $datos['total_declaraciones_exitosa'] = number_format(SidcaiDeclaracioncti::model()->countByAttributes(['esta_codigo_fk' => 1003]), 0, ',', '.');
        $datos['total_declaraciones_extemporanea'] = number_format(SidcaiDeclaracioncti::model()->countByAttributes(['esta_codigo_fk' => 1004]), 0, ',', '.');
        $datos['total_declaraciones_en_proceso'] = number_format(SidcaiDeclaracioncti::model()->countByAttributes(['esta_codigo_fk' => 1006]), 0, ',', '.');
        $datos['total_declaraciones_multas_pagar'] = number_format(SidcaiDeclaracioncti::model()->countByAttributes(['esta_codigo_fk' => 1007]), 0, ',', '.');
        $datos['total_declaraciones_verificando_pago_recaudacion'] = number_format(SidcaiDeclaracioncti::model()->countByAttributes(['esta_codigo_fk' => 1008]), 0, ',', '.');
        $datos['total_declaraciones_verificando_pago_fiscalizacion'] = number_format(SidcaiDeclaracioncti::model()->countByAttributes(['esta_codigo_fk' => 1011]), 0, ',', '.');
        $datos['total_declaraciones_error_en_pago'] = number_format(SidcaiDeclaracioncti::model()->countByAttributes(['esta_codigo_fk' => 1010]), 0, ',', '.');
        $datos['total_declaraciones_anulada'] = number_format(SidcaiDeclaracioncti::model()->countByAttributes(['esta_codigo_fk' => 1009]), 0, ',', '.');
    
        $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 ara.aceptado_por = FALSE
                AND 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($sql);
        $command->bindValue(':id_analista', $id_analista, PDO::PARAM_INT);
        $model = $command->queryAll();
        $datos['total_recaudos_resubidos_analista'] = number_format(count($model), 0, ',', '.');
    
        $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($sql);
        $command->bindValue(':id_analista', $id_analista, PDO::PARAM_INT);
        $model = $command->queryAll();
        $datos['total_recaudos_rechazados_analista'] = number_format(count($model), 0, ',', '.');
    
        if (FuncionesController::permitirPerfil([1, 2, 4, 6])) {
            $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
                    INNER JOIN sidcai_estatus e ON a.esta_codigoestatus_fk = e.esta_codigo_pk
                    WHERE a.esta_codigoestatus_fk = 2008
                    AND ara.renovacion = FALSE
                    AND ara.usua_habilitado = TRUE
                    AND ara.usua_codigo_fk = :id_analista";
            $command = $connection->createCommand($sql);
            $command->bindValue(':id_analista', $id_analista, PDO::PARAM_INT);
            $model = $command->queryAll();
            $datos['cantidad_verificar_recaudos'] = number_format(count($model), 0, ',', '.');
    
            $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
                    WHERE ara.usua_habilitado = TRUE
                    AND ara.renovacion = TRUE
                    AND ara.aceptado_por = FALSE
                    AND ara.usua_codigo_fk = :id_analista";
            $command = $connection->createCommand($sql);
            $command->bindValue(':id_analista', $id_analista, PDO::PARAM_INT);
            $model = $command->queryAll();
            $datos['cantidad_verificar_renovacion'] = number_format(count($model), 0, ',', '.');
    
            $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)
                    INNER JOIN sidcai_declaracion_analista da ON da.decl_codigo_fk = d.decl_codigo_pk
                    INNER JOIN sidcai_aportante a ON a.apor_codigo_pk = dd.apor_codigo_fk
                    WHERE (d.esta_codigo_fk = 1008 OR d.esta_codigo_fk = 1011)
                    AND da.usua_codigo_fk = :id_analista
                    AND da.usua_habilitado = TRUE
                    AND da.decl_finalizada = FALSE";
            $command = $connection->createCommand($sql);
            $command->bindValue(':id_analista', $id_analista, PDO::PARAM_INT);
            $model = $command->queryAll();
            $datos['cantidad_verificar_pago_recaudacion'] = number_format($model[0]['count'], 0, ',', '.');
    
            $usuarios_recaudacion = SidcaiPerfilUsuario::model()->findAllByAttributes(['perf_codigo_fk' => [4, 6, 1]]);
            $datos['cantidad_certificados_usuario_recaudacion'] = [];
    
            if ($usuarios_recaudacion != null) {
                $array_usuario_logeado = [];
                $usuarios_procesados = [];
    
                foreach ($usuarios_recaudacion as $u) {
                    if (in_array($u->usua_codigo_fk, $usuarios_procesados)) {
                        continue;
                    }
    
                    $usuarios_procesados[] = $u->usua_codigo_fk;
    
                    $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
                            INNER JOIN sidcai_usuario u ON u.usua_codigo_pk = da.usua_codigo_fk
                            WHERE da.decl_finalizada = TRUE
                            AND c.cert_habilitado = TRUE
                            AND da.usua_codigo_fk = :usua_codigo_fk";
                    $command = $connection->createCommand($sql);
                    $command->bindValue(':usua_codigo_fk', $u->usua_codigo_fk, PDO::PARAM_INT);
                    $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 = count($model);
                    } else {
                        $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,
                    ];
                }
    
                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']);
    
                for ($i = 0; $i < count($datos['cantidad_certificados_usuario_recaudacion']); $i++) {
                    $datos['cantidad_certificados_usuario_recaudacion'][$i]['puesto'] = $i + 1;
    
                    if (isset($array_usuario_logeado) && $array_usuario_logeado['usuario'] == $datos['cantidad_certificados_usuario_recaudacion'][$i]['usuario']) {
                        $array_usuario_logeado['puesto'] = $i + 1;
                    }
                }
    
                $datos['cantidad_certificados_usuario_recaudacion'] = array_slice($datos['cantidad_certificados_usuario_recaudacion'], 0, 5);
    
                $aparece_usuario_logeado = false;
    
                if (!empty($array_usuario_logeado)) {
                    foreach ($datos['cantidad_certificados_usuario_recaudacion'] as $item) {
                        if ($item['usuario'] == $array_usuario_logeado['usuario']) {
                            $aparece_usuario_logeado = true;
                            break;
                        }
                    }
                }
    
                if (!$aparece_usuario_logeado && !empty($array_usuario_logeado)) {
                    $array_usuario_logeado['puesto'] = $array_usuario_logeado['puesto'] ?? $cantidad_total_certificados_usuario_recaudacion;
                    array_push($datos['cantidad_certificados_usuario_recaudacion'], $array_usuario_logeado);
                }
            }
        }
    
        $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($sql);
        $command->bindValue(':id_analista', $id_analista, PDO::PARAM_INT);
        $model = $command->queryAll();
        $datos['cantidad_verificar_pago_fiscalizacion'] = number_format(count($model), 0, ',', '.');
    
        $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($sql);
        $command->bindValue(':id_analista', $id_analista, PDO::PARAM_INT);
        $model = $command->queryAll();
        $datos['cantidad_declaraciones_multar'] = number_format(count($model), 0, ',', '.');
    
        $datos['nota'] = $this->nota_guardada();
    
        $sql = "SELECT COUNT(*)
                FROM sidcai_certificado C
                INNER JOIN sidcai_declaracion_analista sda ON sda.decl_codigo_fk = c.decl_codigo_fk
                WHERE c.cert_habilitado = TRUE
                AND sda.decl_finalizada = TRUE
                AND sda.usua_codigo_fk = :id_analista";
        $command = $connection->createCommand($sql);
        $command->bindValue(':id_analista', $id_analista, PDO::PARAM_INT);
        $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', [
            'datos' => $datos,
        ]);
    }
    */

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

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