<?php

class DefaultController extends Controller{

	public $layout='panel';

	


	public function actionIndex(){

/*
	
		// En tu controlador o comando de Yii
		$arreglo = array(
			"J298063190",
			"J305062242",
			"J296179301",
			"J407388347",
			"J411887420",
			"J501207720",
			"J501622230",
			"J500476892",
			"J404450580",
			"J315740788",
			"J500532695",
			"J408755076",
			"J505168169",
			"J000035903",
			"J298806214",
			"J305784396",
			"J002292270",
			"J500816545",
			"J412088025",
			"J312820411",
			"J302785278",
			"J003206350",
			"J505321072",
			"J294262520",
			"J503267283",
			"J502461175",
			"J297250727",
			"J306963219",
			"J303254098",
			"J307813555",
			"J504624691",
			"J306939300",
			"J501292027",
			"J307505311",
			"J505848666",
			"J307714492",
			"J311030328",
			"J411222739",
			"J413063450",
			"J002932694",
			"J305411735",
			"J299910716",
			"J311355863",
			"J001004009",
			"J308749923",
			"J311679227",
			"J001195351",
			"J001519181",
			"J506154960",
			"J304563175",
			"J411745740",
			"J411499587",
			"J411228273",
			"J306755225",
			"J413005719",
			"J412574361",
			"J412436694",
			"J001020993",
			"J304876475",
			"J295692765",
			"J500240503",
			"J500652399",
			"J306555536",
			"J412939564",
			"J402014627",
			"J297742735",
			"J300656462",
			"J504758531",
			"J001871861",
			"J311044019",
			"J410438100",
			"J407286900",
			"J410335807",
			"J402627211",
			"J413116065",
			"J503969466"
		);
		
		$transaction = Yii::app()->db->beginTransaction();
		
		try {
			$contador = 0;
		
			foreach ($arreglo as $rif) {
				$result = Yii::app()->db->createCommand()->update(
					'sidcai_inspeccion_empresa',
					array('habilitado' => 1),        // Usa 1/0 en Yii1 para boolean
					'insp_rif = :rif',
					array(':rif' => $rif)
				);
		
				if ($result > 0) {
					$contador++;
					echo "Actualizado RIF: $rif - Filas afectadas: $result\n";
				} else {
					echo "No se actualizó RIF: $rif (posiblemente no existe)\n";
				}
			}
		
			$transaction->commit();
			echo "Proceso completado. Registros actualizados: $contador\n";
		
		} catch (Exception $e) {
			$transaction->rollback();
			echo "Error: " . $e->getMessage() . "\n";
		}
		
*/

 $db = Yii::app()->db;
      
      try {
          
          // Consulta SQL para actualizar inspecciones
          $sql = "UPDATE sidcai_inspeccion_empresa SET habilitado = false WHERE habilitado = true";
          $updatedRows = $db->createCommand($sql)->execute();
          
  
          // Actualizar declaraciones CTI
          $sql2 = "UPDATE sidcai_declaracioncti 
                  SET esta_codigo_fk = 1001 
                  WHERE decl_tipodeclaracion = 'O' 
                    AND esta_codigo_fk = 1006";
          $updatedRows2 = $db->createCommand($sql2)->execute();
  
          // Actualizar créditos fiscales
          $sql3 = "UPDATE sidcai_credito_fiscal SET cred_habilitado = false WHERE cred_habilitado = true";
          $updatedRows3 = $db->createCommand($sql3)->execute();

		/*
		  $sqlUpdate = "
			UPDATE sidcai_declaracioncti
			SET esta_codigo_fk = 1003
			WHERE esta_codigo_fk = 1001
		";
		$comandoUpdate = Yii::app()->db2->createCommand($sqlUpdate);
		$filasAfectadas = $comandoUpdate->execute();*/

//echo "✅ Se actualizaron {$filasAfectadas} registros de estatus 1001 a 1103.";


                  /*      $sql4 = "
                    UPDATE sidcai_recaudo 
                    SET renovar = :valorRenovar 
                    WHERE reca_direccion LIKE :busqueda
                ";

                $rowsAffected = Yii::app()->db->createCommand($sql4)->execute([
                    ':valorRenovar' => true,
                    ':busqueda' => '%renovar%'
                ]);*/
                
          // Desactivar la conexión explícitamente
        //  $db->setActive(false);
  
         // $this->render('index');

		 Yii::import('application.controllers.FuncionesController');
		$id_analista = Yii::app()->user->id;
		$connection = Yii::app()->db;
		$datos = [];
	
		// Verificar recaudos y renovaciones
	/*	if (FuncionesController::permitirPerfil([1, 2, 4, 6, 3, 5])) {
			// Recaudos primera vez
			// Conexión $connection ya definida

// Recaudos por verificar
$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";
$command = $connection->createCommand($sql);
$model = $command->queryAll();
$datos['cantidad_verificar_recaudos'] = count($model);

// Recaudos renovación
$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";
$command = $connection->createCommand($sql);
$model = $command->queryAll();
$datos['cantidad_verificar_renovacion'] = count($model);

// Recaudos resubidos
$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
GROUP BY r.apor_codigo_fk";
$command = $connection->createCommand($sql);
$model = $command->queryAll();
$datos['total_recaudos_resubidos'] = count($model);

// Recaudos 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 r.reca_estado = 2
  AND erro_codigo_fk IS NOT NULL
  AND ara.usua_habilitado = TRUE
GROUP BY r.apor_codigo_fk";
$command = $connection->createCommand($sql);
$model = $command->queryAll();
$datos['total_recaudos_rechazados'] = count($model);

// Declaraciones para verificar pago
$sql = "SELECT COUNT(DISTINCT dd.codigo_declaraciones) as total
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_habilitado = TRUE
  AND da.decl_finalizada = FALSE";
$command = $connection->createCommand($sql);
$model = $command->queryAll();
$datos['cantidad_verificar_pago_recaudacion'] = isset($model[0]['total']) ? $model[0]['total'] : 0;
		}*/


/*

		// Totales generales por analista
$sqlr = "SELECT ara.usua_codigo_fk AS analista_id,
SUM(CASE WHEN ara.renovacion = FALSE AND a.esta_codigoestatus_fk = 2008 THEN 1 ELSE 0 END) AS primera_vez,
SUM(CASE WHEN ara.renovacion = TRUE AND ara.aceptado_por = FALSE THEN 1 ELSE 0 END) AS renovacion,
SUM(CASE WHEN r.reca_estado = 1 AND r.erro_codigo_fk IS NOT NULL THEN 1 ELSE 0 END) AS resubidos,
SUM(CASE WHEN r.reca_estado = 2 AND r.erro_codigo_fk IS NOT NULL THEN 1 ELSE 0 END) AS rechazados
FROM sidcai_aportanterecaudo_analista ara
INNER JOIN sidcai_aportante a ON ara.apor_codigo_fk = a.apor_codigo_pk
LEFT JOIN sidcai_recaudo r ON r.apor_codigo_fk = ara.apor_codigo_fk
WHERE ara.usua_habilitado = TRUE
GROUP BY ara.usua_codigo_fk";

$command = Yii::app()->db->createCommand($sqlr);
$totales_analistas = $command->queryAll();

$labels = [];
$data_primera_vez = [];
$data_renovacion = [];
$data_resubidos = [];
$data_rechazados = [];

foreach ($totales_analistas as $row) {
    $labels[] = 'Analista '.$row['analista_id']; // O su nombre si tienes tabla de usuarios
    $data_primera_vez[] = (int)$row['primera_vez'];
    $data_renovacion[] = (int)$row['renovacion'];
    $data_resubidos[] = (int)$row['resubidos'];
    $data_rechazados[] = (int)$row['rechazados'];
}

$datos['grafico_total_por_analista'] = [
    'labels' => $labels,
    'datasets' => [
        ['label' => 'Primera Vez', 'data' => $data_primera_vez, 'backgroundColor' => '#4e73df'],
        ['label' => 'Renovación', 'data' => $data_renovacion, 'backgroundColor' => '#1cc88a'],
        ['label' => 'Reenviados', 'data' => $data_resubidos, 'backgroundColor' => '#36b9cc'],
        ['label' => 'Rechazados', 'data' => $data_rechazados, 'backgroundColor' => '#e74a3b'],
    ]
];

	
		// Datos para gráficos (ejemplo: recaudos por tipo)
		$datos['grafico_recaudos'] = [
			'labels' => ['Primera Vez', 'Renovación', 'Reenviados', 'Rechazados'],
			'data' => [
				$datos['cantidad_verificar_recaudos'],
				$datos['cantidad_verificar_renovacion'],
				$datos['total_recaudos_resubidos'],
				$datos['total_recaudos_rechazados']
			]
		];*/
		
	
		$this->render('index', [
			'datos' => $datos,
		]);

			/*$this->render('index_grafica', [
			'datos' => $datos,
		]);*/






      } catch (Exception $e) {
          // Asegurarse de cerrar la conexión incluso si hay un error
          if ($db->getActive()) {
              $db->setActive(false);
          }
          throw $e; // Relanzar la excepción para que Yii la maneje
      }


		

		//$this->render('index');
	}


	private function actualizarPorLotes($tabla, $campoCondicion, $valorCondicion, $campoUpdate, $nuevoValor)
    {
        $lote = 10000;
        $db = Yii::app()->db;
        do {
            $sql = "
                WITH filas AS (
                    SELECT ctid FROM $tabla
                    WHERE $campoCondicion = :valorCondicion
                    LIMIT $lote
                )
                UPDATE $tabla t
                SET $campoUpdate = :nuevoValor
                FROM filas f
                WHERE t.ctid = f.ctid
            ";
            $filas = $db->createCommand($sql)
                ->bindValue(':valorCondicion', $valorCondicion)
                ->bindValue(':nuevoValor', $nuevoValor)
                ->execute();
        } while ($filas > 0);
    }

    private function actualizarPorLotesDeclaracion()
    {
        $lote = 10000;
        $db = Yii::app()->db;
        do {
            $sql = "
                WITH filas AS (
                    SELECT ctid FROM sidcai_declaracioncti
                    WHERE decl_tipodeclaracion = 'O'
                      AND esta_codigo_fk = 1006
                    LIMIT $lote
                )
                UPDATE sidcai_declaracioncti t
                SET esta_codigo_fk = 1001
                FROM filas f
                WHERE t.ctid = f.ctid
            ";
            $filas = $db->createCommand($sql)->execute();
        } while ($filas > 0);
    }

	public function actionIndexNew() {
		Yii::import('application.controllers.FuncionesController');
		$id_analista = Yii::app()->user->id;
		$connection = Yii::app()->db;
		$datos = [];
	
		// Verificar recaudos y renovaciones
		if (FuncionesController::permitirPerfil([1, 2, 4, 6, 3, 5])) {
			// Recaudos primera vez
			// Conexión $connection ya definida

// Recaudos por verificar
$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";
$command = $connection->createCommand($sql);
$model = $command->queryAll();
$datos['cantidad_verificar_recaudos'] = count($model);

// Recaudos renovación
$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";
$command = $connection->createCommand($sql);
$model = $command->queryAll();
$datos['cantidad_verificar_renovacion'] = count($model);

// Recaudos resubidos
$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
GROUP BY r.apor_codigo_fk";
$command = $connection->createCommand($sql);
$model = $command->queryAll();
$datos['total_recaudos_resubidos'] = count($model);

// Recaudos 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 r.reca_estado = 2
  AND erro_codigo_fk IS NOT NULL
  AND ara.usua_habilitado = TRUE
GROUP BY r.apor_codigo_fk";
$command = $connection->createCommand($sql);
$model = $command->queryAll();
$datos['total_recaudos_rechazados'] = count($model);

// Declaraciones para verificar pago
$sql = "SELECT COUNT(DISTINCT dd.codigo_declaraciones) as total
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_habilitado = TRUE
  AND da.decl_finalizada = FALSE";
$command = $connection->createCommand($sql);
$model = $command->queryAll();
$datos['cantidad_verificar_pago_recaudacion'] = isset($model[0]['total']) ? $model[0]['total'] : 0;
		}




		// Totales generales por analista
$sqlr = "SELECT ara.usua_codigo_fk AS analista_id,
SUM(CASE WHEN ara.renovacion = FALSE AND a.esta_codigoestatus_fk = 2008 THEN 1 ELSE 0 END) AS primera_vez,
SUM(CASE WHEN ara.renovacion = TRUE AND ara.aceptado_por = FALSE THEN 1 ELSE 0 END) AS renovacion,
SUM(CASE WHEN r.reca_estado = 1 AND r.erro_codigo_fk IS NOT NULL THEN 1 ELSE 0 END) AS resubidos,
SUM(CASE WHEN r.reca_estado = 2 AND r.erro_codigo_fk IS NOT NULL THEN 1 ELSE 0 END) AS rechazados
FROM sidcai_aportanterecaudo_analista ara
INNER JOIN sidcai_aportante a ON ara.apor_codigo_fk = a.apor_codigo_pk
LEFT JOIN sidcai_recaudo r ON r.apor_codigo_fk = ara.apor_codigo_fk
WHERE ara.usua_habilitado = TRUE
GROUP BY ara.usua_codigo_fk";

$command = Yii::app()->db->createCommand($sqlr);
$totales_analistas = $command->queryAll();

$labels = [];
$data_primera_vez = [];
$data_renovacion = [];
$data_resubidos = [];
$data_rechazados = [];

foreach ($totales_analistas as $row) {
    $labels[] = 'Analista '.$row['analista_id']; // O su nombre si tienes tabla de usuarios
    $data_primera_vez[] = (int)$row['primera_vez'];
    $data_renovacion[] = (int)$row['renovacion'];
    $data_resubidos[] = (int)$row['resubidos'];
    $data_rechazados[] = (int)$row['rechazados'];
}

$datos['grafico_total_por_analista'] = [
    'labels' => $labels,
    'datasets' => [
        ['label' => 'Primera Vez', 'data' => $data_primera_vez, 'backgroundColor' => '#4e73df'],
        ['label' => 'Renovación', 'data' => $data_renovacion, 'backgroundColor' => '#1cc88a'],
        ['label' => 'Reenviados', 'data' => $data_resubidos, 'backgroundColor' => '#36b9cc'],
        ['label' => 'Rechazados', 'data' => $data_rechazados, 'backgroundColor' => '#e74a3b'],
    ]
];

	
		// Datos para gráficos (ejemplo: recaudos por tipo)
		$datos['grafico_recaudos'] = [
			'labels' => ['Primera Vez', 'Renovación', 'Reenviados', 'Rechazados'],
			'data' => [
				$datos['cantidad_verificar_recaudos'],
				$datos['cantidad_verificar_renovacion'],
				$datos['total_recaudos_resubidos'],
				$datos['total_recaudos_rechazados']
			]
		];
		
	
		$this->render('index', [
			'datos' => $datos,
		]);
	}
	
}