<?php

error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');

class AportanteController extends Controller{

	public $layout='//layouts/panel-usuario';

	/**
	 * @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
			'datosCompletos + index,view', // aplicar solo a ciertas acciones
		);
	}

	/**
	 * 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',
				'actions' => array('index','actualizar', 'modificar','consultar', 'subir', 'subirRecaudo','subirRecaudoRegistro','subirRecaudoReg', 'subirRecaudoSsh','subirRecaudoSshReg', 'actualizarCiiu', 'mostrarRecaudos', 'ejercicio_fiscal', 'cambiar_clave','mostrarRecaudosListado','cargarActividades','obtenerAlicuotaActual','CheckStatus'),
				'expression' => array($this, 'permitirUsuario'),
			),
			array('allow',
            'actions' => array('cargarActividades','obtenerAlicuotaActual','CheckStatus'),
            'users' => array('*'), // Permite a todos los usuarios
        ),
			array(
				'allow',
				'actions' => array('renovar','mostrarRecaudosListado'),
				'expression' => array($this, 'permitirRenovar')
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}

	public function actionIndex(){
		$model = $this->loadModel(Yii::app()->user->id);

		// Se importa el Controlador para usar la función "convertirFecha"
		Yii::import('application.controllers.FuncionesController');

		// Se verifica si el Aportante ha cambiado su Ejercicio Fiscal para obtener su última modificación de "Día" y "Mes".
		$existe = SidcaiEjercicioFiscal::model()->find(
			array(
				'condition' => 'apor_codigo_fk = :apor_codigo_fk',
				'params' => array(':apor_codigo_fk' => Yii::app()->user->id),
				'order' => 'ejercicio_fiscal_pk DESC',
			)
		);

		// Sí el aportante ha cambiado su Ejercicio Fiscal usará los datos del "SidcaiEjercicioFiscal".
		if($existe != null){
			$model->apor_diacierre = $existe->apor_diacierre;
			$model->apor_mescierre = $existe->apor_mescierre;
		}

		
		if($model->apor_tipoempresa == 1) $model->apor_tipoempresa = "Empresas contempladas en la Ley para el Control de los Casinos, Salas de Bingo y Máquinas Traganíqueles, y aquellas vinculadas con la producción, comercio y expendio de alcohol etílico, especies alcohólicas y tabaco.";
		if($model->apor_tipoempresa == 2) $model->apor_tipoempresa = "Empresas de hidrocarburos y minería estratégica, tanto de capital privado como público, contempladas en la Ley Orgánica de Hidrocarburos, la Ley Orgánica de Hidrocarburos Gaseosos y el Decreto con Rango, Valor y Fuerza de Ley Orgánica que reserva al Estado las actividades de Exploración y Explotación del Oro y demás materiales estratégicos.";
		if($model->apor_tipoempresa == 3) $model->apor_tipoempresa = "Empresas dedicadas a cualquier otra actividad económica no prevista en los numerales anteriores.";



		$model->apor_fechahoraregistro = FuncionesController::convertirFecha($model->apor_fechahoraregistro, 'dd/mm/yyy');
		$model->apor_fechacreacionempresa = FuncionesController::convertirFecha($model->apor_fechacreacionempresa, 'dd/mm/yyy', false);

		//$porcentaje = FuncionesController::porcentajeContribucion($model->ciiu_codigo_fk);
		//$this->render('index', ['model' => $model, 'porcentaje' => $porcentaje]);
		$this->render('index', ['model' => $model]);
	}

	/**
	 * Modificar el Aportante, action para el Usuario que esté logeado.
	 */
	public function actionModificar() {
		$model = $this->loadModel(Yii::app()->user->id);
		$model->scenario = "modificar";
	
		// Inicializar $modelAlicuota con valor por defecto
		$modelAlicuota = new SidcaiAporAlicuota();
	
		// Verificar y cargar alícuota existente si corresponde
		if ($model->alicuotaActual !== null) {
			$modelAlicuota = $model->alicuotaActual;
		}
	
		// Asignar código de aportante si es nuevo
		$modelAlicuota->cod_aportante = $model->apor_codigo_pk;
		$date = new DateTime("now", new DateTimeZone('America/Caracas'));
	
		if (isset($_POST['SidcaiAportante']) or isset($_POST['SidcaiAporAlicuota'])) {
			if (isset($_POST['ok'])) {
				$data = null; // Variable que será enviada por JSON
	
				// Actualizar el estado needs_update a false después de la actualización
				Yii::app()->user->setState('needs_update', false);
	
				$model->es_fidetel = isset($_POST['SidcaiAporAlicuota']['es_fidetel'])
					? (bool)$_POST['SidcaiAporAlicuota']['es_fidetel']
					: false;
	
				// Si es array, lo convertimos a string separado por comas
				if (isset($_POST['SidcaiAporAlicuota']['apor_actividad_economica'])) {
					if (is_array($_POST['SidcaiAporAlicuota']['apor_actividad_economica'])) {
						$model->apor_actividad_economica = implode(',', $_POST['SidcaiAporAlicuota']['apor_actividad_economica']);
					} else {
						$model->apor_actividad_economica = $_POST['SidcaiAporAlicuota']['apor_actividad_economica'];
					}
				}
	
				$model->alicuota = $_POST['SidcaiAporAlicuota']['alicuota'];
				$model->apor_tipoempresa = $_POST['SidcaiAporAlicuota']['apor_tipoempresa'];
				$model->es_fidetel = $_POST['SidcaiAporAlicuota']['es_fidetel'];
				$model->apor_porcprivada = $_POST['SidcaiAporAlicuota']['apor_porcprivada'];
				$model->apor_porcpublico = $_POST['SidcaiAporAlicuota']['apor_porcpublico'];



				$model->datos_actualizados = true;
	
				$data['datos'] = $this->guardar($model, $_POST['SidcaiAportante']);
				echo json_encode($data);
			}
			Yii::app()->end();
		}
	
		// Se importa el Controlador para usar la función "convertirFecha"
		Yii::import('application.controllers.FuncionesController');
		$model->apor_fechahoraregistro = FuncionesController::convertirFecha($model->apor_fechahoraregistro, 'dd/mm/yyy');
		$model->apor_fechacreacionempresa = FuncionesController::convertirFecha($model->apor_fechacreacionempresa, 'dd/mm/yyy', false);
	
		// Se separa el correo electrónico para obtener solo "micorreo" y no el "@gmail.com"
		$correo = explode("@", $model->apor_correoelectronico);
		$model->apor_correoelectronico = $correo[0];
	
		// Obtener modelo de alícuota activa (estatus = 1) más reciente
		$modelAlicuota = SidcaiAporAlicuota::model()->findByAttributes(
			array(
				'cod_aportante' => $model->apor_codigo_pk,
				'estatus' => 1 // Asegura que solo traiga registros con estatus = 1
			),
			array('order' => 'fecha_registro DESC') // Ordena por fecha descendente para obtener la más reciente
		);
	
		// Si no existe alícuota activa, crear una nueva instancia
		if (!$modelAlicuota) {
			$modelAlicuota = new SidcaiAporAlicuota();
			$modelAlicuota->cod_aportante = $model->apor_codigo_pk;
			//$modelAlicuota->estatus = 1; // Establecer estatus = 1 por defecto
		}

		// Obtener el valor actual de la alícuota desde la base de datos
		$alicuotaActual = SidcaiAporAlicuota::model()->findByAttributes(
			array(
				'cod_aportante' => $model->apor_codigo_pk,
				'estatus' => 1 // Asegura que solo traiga registros con estatus = 1
			),
			array('order' => 'fecha_registro DESC') // Ordena por fecha descendente para obtener la más reciente
		);

		if ($alicuotaActual !== null) {
			$modelAlicuota->alicuota_actual = $alicuotaActual->alicuota; // Asumiendo que 'valor' es el atributo que contiene el valor de la alícuota
		} else {
			$modelAlicuota->alicuota_actual = 0; // Valor por defecto si no se encuentra ninguna alícuota con estatus 1
		}
	
		$this->render('modificar', [
			'model' => $model,
			'modelAlicuota' => $modelAlicuota,
		]);
	}
	
	public function actionActualizar(){
		$model=$this->loadModel(Yii::app()->user->id);
		$model->scenario = "actualizar";

		$date = new DateTime("now", new DateTimeZone('America/Caracas'));
		
		if(isset($_POST['SidcaiAportante'])){
			if(isset($_POST['ok'])){
				$data = null; // Variable que sera enviada por JSON
				 // Actualizar el estado needs_update a false después de la actualización
				 Yii::app()->user->setState('needs_update', false);

				$data['datos'] = $this->guardar($model, $_POST['SidcaiAportante']);

				echo json_encode($data);
			}
			Yii::app()->end();		
		}

		// Se importa el Controlador para usar la función "convertirFecha"
		Yii::import('application.controllers.FuncionesController');
		$model->apor_fechahoraregistro 		= FuncionesController::convertirFecha($model->apor_fechahoraregistro, 'dd/mm/yyy');
		$model->apor_fechacreacionempresa 	= FuncionesController::convertirFecha($model->apor_fechacreacionempresa, 'dd/mm/yyy', false);

		// Se separa el correo electrónico para obtener solo "micorreo" y no el "@gmail.com"
		$correo = explode("@", $model->apor_correoelectronico);
		$model->apor_correoelectronico = $correo[0];

		$this->render('actualizar',['model'=>$model]);
	}

	/**
	 * Donde la empresa modifica su ejercicio fiscal
	 */
	public function actionEjercicio_fiscal(){
		$model = SidcaiAportante::model()->findByPk(Yii::app()->user->id);
		$model->scenario = "modificar_fiscal";	

		if(isset($_POST['ajax']) && $_POST['ajax'] === 'sidcai-ejercicio-fiscal-form'){
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}

		// Se verifica si el Aportante ha cambiado su Ejercicio Fiscal para obtener su última modificación de "Día" y "Mes".
		$existe = SidcaiEjercicioFiscal::model()->find(
			array(
				'condition' => 'apor_codigo_fk = :apor_codigo_fk',
				'params' => array(':apor_codigo_fk' => Yii::app()->user->id),
				'order' => 'ejercicio_fiscal_pk DESC',
			)
		);

		// Sí el aportante ha cambiado su Ejercicio Fiscal usará los datos del "SidcaiEjercicioFiscal".
		if($existe != null){
			$model->apor_diacierre = $existe->apor_diacierre;
			$model->apor_mescierre = $existe->apor_mescierre;
		}


		if(isset($_POST['SidcaiAportante'])){
			if(isset($_POST['ok'])){				
				$data = null; // Variable que sera enviada por JSON


				if(($model->apor_diacierre == $_POST['SidcaiAportante']['apor_diacierre']) && ($model->apor_mescierre == $_POST['SidcaiAportante']['apor_mescierre'])){
					$data['datos'] = ['warning', 'No hubo cambios que modificar.'];
				}else{
					$data['datos'] = $this->guardarEjercicioFiscal($model, $_POST['SidcaiAportante']);
				}


				echo json_encode($data);
			}
			Yii::app()->end();
		}else{
			$this->render('ejercicio_fiscal', ['model' => $model]);
		}

	}

	// Muestra la vista para subir los recaudos
	public function actionSubir(){
		/**
		 * Valida que solo pueda ingresar cuando tenga el estatus 2008 "En Registro".
		 */
		$aportante = SidcaiAportante::model()->findByPk(Yii::app()->user->id);

		if($aportante->esta_codigoestatus_fk != 2008)
			$this->redirect(Yii::app()->homeUrl);
		/**
		 * FIN
		 */

		$model = new SidcaiRecaudo;
		$recaudos = SidcaiRecaudo::model()->findAll(
			'apor_codigo_fk = :apor_codigo_fk AND renovar = :renovar AND reca_estado != 4', 
			array(':apor_codigo_fk' => Yii::app()->user->id, ':renovar' => false)
		);	


		////COMENTAR LM 02-10-2025
		/*$recaudos = SidcaiRecaudo::model()->findAll(array(
			'condition' => 'apor_codigo_fk = :apor_codigo_fk 
							AND renovar = :renovar 
							AND reca_estado != 4 
							AND tipo_codigo_fk IN (1,2)',
			'params' => array(
				':apor_codigo_fk' => Yii::app()->user->id,
				':renovar' => false, // en DB debe ir como 0 o 1
			),
		));*/
		
		
		//print_r($recaudos);die();

		$recaudos_activos = SidcaiTiporecaudo::model()->count('tipo_habilitado = :tipo_habilitado', array(':tipo_habilitado' => TRUE));

		// Indica si el action es para renovar recaudos.
		$renovar = false;
		
		$this->render('subir-recaudos', 
			array(
				'model' => $model, 
				'recaudos' => $recaudos,
				'recaudos_activos' => $recaudos_activos,
				'renovar' => $renovar,
			)
		);
	}

	/**
	 * Renovación de recaudos
	 */
	public function actionRenovar(){
		$model = new SidcaiRecaudo;
		$recaudos = SidcaiRecaudo::model()->findAll(
			[
				'condition' => 'apor_codigo_fk = :apor_codigo_fk AND renovar = :renovar AND reca_estado != 4',
				'params' => [
					':apor_codigo_fk' => Yii::app()->user->id,
					':renovar' => TRUE,
				]
			]
		);

		$empresa = SidcaiAportante::model()->findByPk(Yii::app()->user->id);

		Yii::import('application.controllers.FuncionesController');
		//$aniosFaltantes==true

	



// Paso 1: Obtener estatus de conciliación
// Paso 1: Obtener estatus de conciliación actual
$conciliacion = FuncionesController::obtenerEstatusConciliacion($empresa);

// Paso 2: Obtener el periodo actual
$periodoFiscal = isset($conciliacion['periodo_fiscal'])
    ? $conciliacion['periodo_fiscal']
    : (isset($conciliacion['periodo']) ? $conciliacion['periodo'] : null);

// Paso 3: Buscar en la tabla sidcai_casillas_islr
$command = Yii::app()->db->createCommand()
    ->select('*')
    ->from('sidcai_casillas_islr')
    ->where('apor_codigo_fk = :codigo', [':codigo' => Yii::app()->user->id]);

if (!empty($periodoFiscal)) {
    $command->andWhere('periodo_fiscal = :periodo', [':periodo' => $periodoFiscal]);
}

$data = $command->limit(1)->queryAll();

// Paso 4: Independientemente de si hay o no datos → dejar data vacía
$conciliacion['data'] = [0 => []];

// Paso 5: Sumar un año al periodo general del array (NO al periodo_fiscal)
if (!empty($conciliacion['periodo'])) {
    $fechaPeriodo = new DateTime($conciliacion['periodo']);
    $fechaPeriodo->modify('+1 year');
    $conciliacion['periodo'] = $fechaPeriodo->format('Y-m-d');
}

// Paso 6: Mostrar el resultado final
/*echo "<pre>";
print_r($conciliacion);
echo "</pre>";
die();*/

		/*echo "<pre>";
		print_r($recaudos);
		echo "<pre>";
		die();*/


		$recaudos_activos = SidcaiTiporecaudo::model()->count('tipo_habilitado = :tipo_habilitado', array(':tipo_habilitado' => TRUE));

		/*echo "<pre>";
		print_r($recaudos_activos);//6
		echo "<pre>";
		die();*/

		// Indica si el action es para renovar recaudos.
		$renovar = true;

		$periodonew = isset($conciliacion['periodo']) ? $conciliacion['periodo'] : null;

			if ($periodonew !== null && $periodonew <= '2022-12-31') {

			//	echo "hola       ";die();
				
		
				$this->render('renovar-recaudos-apor', 
					array(
						'model' => $model, 
						'recaudos' => $recaudos,
						'recaudos_activos' => $recaudos_activos,
						'renovar' => $renovar,
					)
				);	
			
		
	
		}else{
			$this->redirect(array(
				'declaracion/mensual',
			));
	
			$this->render('renovar-recaudos', 
				array(
					'model' => $model, 
					'recaudos' => $recaudos,
					'recaudos_activos' => $recaudos_activos,
					'renovar' => $renovar,
				)
			);	


		}	

	}

	/**
	 * Cambiar clave.
	 */
	public function actionCambiar_clave(){
		$model = SidcaiAportante::model()->findByPk(Yii::app()->user->id);
		$model->scenario = "cambioClave";

		if(isset($_POST['ajax']) && $_POST['ajax'] == 'cambio-clave-form'){
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}

		if(isset($_POST['SidcaiAportante'])){
			if(isset($_POST['ok'])){
				$data = null; // Variable que sera enviada por JSON

				$data['datos'] = $this->cambiar_clave($model, $_POST['SidcaiAportante'], Yii::app()->user->id);

				echo json_encode($data);
			}
			Yii::app()->end();	
		}else{
			$this->render("nueva-clave", array('model' => $model));
		}
	}

	public function actionSubirRecaudoRegistro(){
        // lm -- se incluyo para verificar si esxite la carpeta en upload
		Yii::import('application.controllers.FuncionesController');

		$model = new SidcaiRecaudo;

		if(isset($_POST['ajax']) && $_POST['ajax']==='subir-recaudos-form'){
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}


		if(isset($_POST['SidcaiRecaudo'])){
			$model->attributes = $_POST['SidcaiRecaudo'];

			$model->apor_codigo_fk = $_POST['aportante'];

			

			$ruta = Yii::getPAthOfAlias('webroot').'/upload/' . $_POST['aportante'];;

			//print_r($ruta .'-------------'.$_POST['renovar']);die();
	
			$model->reca_direccion = $ruta;

			$extPermitidas = array('pdf'); // Extensiones permitidas a subir

		
			if($model->validate()){
				//Si no existe la carpeta la creamos con el id del aportante
				
				$existe_local=FuncionesController::checkPathAndFile($ruta);
				//print_r($existe_local);die();

				if($existe_local=="si"){

					if(!is_dir($ruta))
					mkdir($ruta, 0777);

				$ruta .= "/".$_POST['tipo'];

				if(!is_dir($ruta))
					mkdir($ruta, 0777);

				$archivo = CUploadedFile::getInstance($model, $_POST['recaudo']);

				$renovar = false;

				if(isset($_POST['renovar'])){
					$renovar = true;
				}

				//	echo "renova    ---  ". $renovar; die();

				echo $this->subirRecaudo($model, $archivo, 8, $ruta, $extPermitidas, $_POST['tipo'], $renovar);

				}


				if($existe_local=="no"){ //no existe la carpeta la carpeta en el proyecto y verificara por ssh al servidor
				
					$remoteDir =   Yii::app()->params['REMOTEDIR']. $_POST['aportante'];;
				
					//$remoteDir .=  "/".$_POST['tipo']."/".$_POST['recaudo']."/";

					//print_r($remoteDir); die();

				    $existe_servidor=FuncionesController::directoryExists($remoteDir);
					//print_r($existe_servidor); die();
					$remoteDir .=  "/".$_POST['tipo'];
					

					$archivo = CUploadedFile::getInstance($model, $_POST['recaudo']);

					//print_r($_POST['renovar']); die();

				$renovar = false;

				if(isset($_POST['renovar'])){
					$renovar = true;
				}

					//print_r($renovar);die();

				echo $this->subirRecaudoSshReg($model, $archivo, 8, $remoteDir, $extPermitidas, $_POST['tipo'], $renovar);

			      

				}
		 
		}

		}
	}



	// Es la acción que es llamada desde Ajax en la vista "subir-recaudos" para que los archivos puedan ser subido al servidor
	public function actionSubirRecaudo(){
        // lm -- se incluyo para verificar si esxite la carpeta en upload
		Yii::import('application.controllers.FuncionesController');

		$model = new SidcaiRecaudo;

		if(isset($_POST['ajax']) && $_POST['ajax']==='subir-recaudos-form'){
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}


		if(isset($_POST['SidcaiRecaudo'])){
			$model->attributes = $_POST['SidcaiRecaudo'];

			$model->apor_codigo_fk = Yii::app()->user->id;

			

			$ruta = Yii::getPAthOfAlias('webroot').'/upload/' .Yii::app()->user->id;

			//print_r($ruta .'-------------'.$_POST['renovar']);die();
	
			$model->reca_direccion = $ruta;

			$extPermitidas = array('pdf'); // Extensiones permitidas a subir

		
			if($model->validate()){
				//Si no existe la carpeta la creamos con el id del aportante
				
				$existe_local=FuncionesController::checkPathAndFile($ruta);
				//print_r($existe_local);die();

				if($existe_local=="si"){

					if(!is_dir($ruta))
					mkdir($ruta, 0777);

				$ruta .= "/".$_POST['tipo'];

				if(!is_dir($ruta))
					mkdir($ruta, 0777);

				$archivo = CUploadedFile::getInstance($model, $_POST['recaudo']);

				$renovar = false;

				if(isset($_POST['renovar'])){
					$renovar = true;
				}

				//	echo "renova    ---  ". $renovar; die();

				echo $this->subirRecaudo($model, $archivo, 8, $ruta, $extPermitidas, $_POST['tipo'], $renovar);

				}


				if($existe_local=="no"){ //no existe la carpeta la carpeta en el proyecto y verificara por ssh al servidor
				
					$remoteDir =   Yii::app()->params['REMOTEDIR'].Yii::app()->user->id;
				
					//$remoteDir .=  "/".$_POST['tipo']."/".$_POST['recaudo']."/";

					//print_r($remoteDir); die();

				    $existe_servidor=FuncionesController::directoryExists($remoteDir);
					//print_r($existe_servidor); die();
					$remoteDir .=  "/".$_POST['tipo'];
					

					$archivo = CUploadedFile::getInstance($model, $_POST['recaudo']);

					//print_r($_POST['renovar']); die();

				$renovar = false;

				if(isset($_POST['renovar'])){
					$renovar = true;
				}

					//print_r($renovar);die();

				echo $this->subirRecaudoSsh($model, $archivo, 8, $remoteDir, $extPermitidas, $_POST['tipo'], $renovar);

			      

				}
		 
		}

		}
	}

	public static function actionMostrarRecaudos(){
		$id_aportante = Yii::app()->user->id;

		$recaudosR = SidcaiRecaudo::model()->findAll([
			'condition' => 'aceptado = :aceptado AND apor_codigo_fk = :apor_codigo_fk AND reca_estado != 4',
			'params' => [':aceptado' => false, ':apor_codigo_fk' => $id_aportante],
		]);

		
		
		$tabla = '';

		if($recaudosR != null){
			foreach($recaudosR as $r){
				$tabla .= "<tr>";
				$tabla .= "<td><b>" .$r->tipoCodigoFk->tipo_nombre. "</b></td>";

			 	$tabla .= ($r->reca_estado == 1) ? "<td class='text-center'><i class='material-icons'>done</i></td>":"<td></td>";
			   	$tabla .= ($r->reca_estado == 2) ? "<td class='text-center'><i class='fas fa-times'></i></td>":"<td></td>";
			   	$tabla .= ($r->reca_estado == 3) ? "<td class='text-center'><i class='material-icons'>done</i></td>":"<td></td>";	

				$tabla .= "</tr>";
			}
		}else{
			$tabla = "<tr><td colspan='4'>No hay recaudos subidos.</td></tr>";
		}

		echo $tabla;
	}

	/*********************************************************************************************

											Funciones

	*********************************************************************************************/

	/**
	 * 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 $id the ID of the model to be loaded
	 * @return SidcaiAportante the loaded model
	 * @throws CHttpException
	 */
	public function loadModel($id){
		$model=SidcaiAportante::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404, 'La página no existe.');
		return $model;
	}

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

	/***************
	$model 			=> Modelo del archivo a subir
	$archivo 		=> CUploadedFile::getInstance($model, archivo_a_subir);
	$tamano 		=> Tamaño máximo en MB del archivo a subir
	$ruta 			=> Ruta donde se va a guardar el archivo a subir
	$extPermitidad 	=> Debe venir en un array donde esten las extesiones permitidas a subir
	$tipo 			=> Tipo de recaudo a subir 
						1 => Acta Constitutiva,
						2 => Registro Único de Información Fiscal,
						3 => Declaración ISLR,
						4 => Estados Financieros,
						// 5 => Ingresos por Actividad Económica, -- BORRADO
						6 => Documento nuevo,
	****************/
	private function subirRecaudo($model, $archivo, $tamano, $ruta, $extPermitidas, $tipo, $renovar = false){
		if($archivo != null){
			if(in_array($archivo->extensionName, $extPermitidas)){
				$tamMaximo = 1024 * 1024 * $tamano; // $tamano -> valor en MB

				if($archivo->size <= $tamMaximo){
					$date = new DateTime("now", new DateTimeZone('America/Caracas'));

					$hoy = $date->format('Y-m-d');

					$nombre_archivo = Yii::app()->user->id."-".$hoy.uniqid('-').'.'.$archivo->extensionName;

					// Si es renovar, agregará una palabra que lo distinga.
					if($renovar){
						$nombre_archivo = "renovar-".$nombre_archivo;
						$model->renovar = TRUE;
						$existe_archivo = SidcaiRecaudo::model()->find(
							array(
								'condition' => 'apor_codigo_fk = :apor_codigo_fk AND reca_estado = :reca_estado AND renovar = :renovar',
								'params' => array(
									':apor_codigo_fk' => Yii::app()->user->id,
									':reca_estado' => 2,
									':renovar' => TRUE
								)
							)
						);
					}else{
						$existe_archivo = SidcaiRecaudo::model()->find(
							'apor_codigo_fk = :apor_codigo_fk AND tipo_codigo_fk = :tipo_codigo_fk AND renovar = :renovar', 
							array(
								':apor_codigo_fk' => Yii::app()->user->id, 
								':tipo_codigo_fk' => $tipo,
								':renovar' => FALSE
							)
						);
					}

					if($existe_archivo == NULL){
						$model->tipo_codigo_fk = $tipo;
				 		$model->reca_direccion = "upload/".Yii::app()->user->id."/".$tipo."/".$nombre_archivo;

				 		if($model->save()){
						 	$archivo->saveAs($ruta.'/'.$nombre_archivo);
						 	Yii::app()->user->setState("tabla", "ok");
							return "1";
						}else{
							return "No se logró subir el recaudo.";
						}
					}else{
						// Si ingresa al else quiere decir que el archivo será reemplazado.
						// Esto puede suceder cuando el Analista rechaza el recaudo
						$antigua_ruta = $existe_archivo->reca_direccion; // Ruta que se encuentra en la Base de Datos
				 		$existe_archivo->reca_direccion = "upload/".Yii::app()->user->id."/".$tipo."/".$nombre_archivo; // Se le asigna la nueva ruta
				 		$existe_archivo->reca_estado = 1;

				 		$transaction = $existe_archivo->dbConnection->beginTransaction();

				 		// Tipo de notificación
						$tipo_notificacion = SidcaiTipoNotificacion::model()->findByPk(4);

						if($tipo_notificacion != null){
							if($tipo_notificacion->tipo_habilitado){
								// Se busca el usuario que posee la declaración
								$usuario_propietario = SidcaiAportanterecaudoAnalista::model()->find([
									'select' => 'usua_codigo_fk',
									'condition' => 'apor_codigo_fk = :apor_codigo_fk AND usua_habilitado = :usua_habilitado AND aceptado_por = :aceptado_por AND fecha_aceptacion IS NULL',
									'params' => [
										':apor_codigo_fk' => Yii::app()->user->id,
										':usua_habilitado' => TRUE,
										':aceptado_por' => FALSE,
									]
								]);

								if($usuario_propietario != null){
									$hoy_segundos = $date->format('Y-m-d H:i:s');
									$notificacion = new SidcaiNotificacion;
									$notificacion->tipo_codigo_fk 			= $tipo_notificacion->tipo_codigo_pk;
									$notificacion->apor_codigo_fk_origen 	= Yii::app()->user->id;
									$notificacion->usua_codigo_fk_destino 	= $usuario_propietario->usua_codigo_fk;
									$notificacion->noti_fecha 				= $hoy_segundos;
									$notificacion->id_accion 				= Yii::app()->user->id;

									if(!$notificacion->save()){
										$transaction->rollBack();
										return "No se logró realizar la notificación al analista, por favor intente de nuevo.";
									}
								}
							}
						}

				 		if($existe_archivo->save()){
                           if(file_exists($antigua_ruta)){
                                unlink($antigua_ruta);
							}
				 			
				 			$archivo->saveAs($ruta.'/'.$nombre_archivo);
				 			Yii::app()->user->setState("tabla", "ok");
				 			$transaction->commit();
							return "1";
				 		}else{
				 			$transaction->rollBack();
				 			return "No se logró subir el recaudo.";
				 		}
					}
					
				}else{
					return "El tamaño máximo permitido es " .$tamano. "mb.";
				}
			}else{
				return "El archivo no es válido.";
			}
		}else{
			return "No ha seleccionado un archivo.";
		}
	}

	private function subirRecaudoReg($model, $archivo, $tamano, $ruta, $extPermitidas, $tipo, $renovar = false){
		if($archivo != null){
			if(in_array($archivo->extensionName, $extPermitidas)){
				$tamMaximo = 1024 * 1024 * $tamano; // $tamano -> valor en MB

				if($archivo->size <= $tamMaximo){
					$date = new DateTime("now", new DateTimeZone('America/Caracas'));

					$hoy = $date->format('Y-m-d');

					$nombre_archivo = $model->apor_codigo_fk."-".$hoy.uniqid('-').'.'.$archivo->extensionName;

					// Si es renovar, agregará una palabra que lo distinga.
					if($renovar){
						$nombre_archivo = "renovar-".$nombre_archivo;
						$model->renovar = TRUE;
						$existe_archivo = SidcaiRecaudo::model()->find(
							array(
								'condition' => 'apor_codigo_fk = :apor_codigo_fk AND reca_estado = :reca_estado AND renovar = :renovar',
								'params' => array(
									':apor_codigo_fk' => $model->apor_codigo_fk,
									':reca_estado' => 2,
									':renovar' => TRUE
								)
							)
						);
					}else{
						$existe_archivo = SidcaiRecaudo::model()->find(
							'apor_codigo_fk = :apor_codigo_fk AND tipo_codigo_fk = :tipo_codigo_fk AND renovar = :renovar', 
							array(
								':apor_codigo_fk' => $model->apor_codigo_fk, 
								':tipo_codigo_fk' => $tipo,
								':renovar' => FALSE
							)
						);
					}

					if($existe_archivo == NULL){
						$model->tipo_codigo_fk = $tipo;
				 		$model->reca_direccion = "upload/".$model->apor_codigo_fk."/".$tipo."/".$nombre_archivo;

				 		if($model->save()){
						 	$archivo->saveAs($ruta.'/'.$nombre_archivo);
						 	Yii::app()->user->setState("tabla", "ok");
							return "1";
						}else{
							return "No se logró subir el recaudo.";
						}
					}else{
						// Si ingresa al else quiere decir que el archivo será reemplazado.
						// Esto puede suceder cuando el Analista rechaza el recaudo
						$antigua_ruta = $existe_archivo->reca_direccion; // Ruta que se encuentra en la Base de Datos
				 		$existe_archivo->reca_direccion = "upload/".$model->apor_codigo_fk."/".$tipo."/".$nombre_archivo; // Se le asigna la nueva ruta
				 		$existe_archivo->reca_estado = 1;

				 		$transaction = $existe_archivo->dbConnection->beginTransaction();

				 		// Tipo de notificación
						$tipo_notificacion = SidcaiTipoNotificacion::model()->findByPk(4);

						if($tipo_notificacion != null){
							if($tipo_notificacion->tipo_habilitado){
								// Se busca el usuario que posee la declaración
								$usuario_propietario = SidcaiAportanterecaudoAnalista::model()->find([
									'select' => 'usua_codigo_fk',
									'condition' => 'apor_codigo_fk = :apor_codigo_fk AND usua_habilitado = :usua_habilitado AND aceptado_por = :aceptado_por AND fecha_aceptacion IS NULL',
									'params' => [
										':apor_codigo_fk' => $model->apor_codigo_fk,
										':usua_habilitado' => TRUE,
										':aceptado_por' => FALSE,
									]
								]);

								if($usuario_propietario != null){
									$hoy_segundos = $date->format('Y-m-d H:i:s');
									$notificacion = new SidcaiNotificacion;
									$notificacion->tipo_codigo_fk 			= $tipo_notificacion->tipo_codigo_pk;
									$notificacion->apor_codigo_fk_origen 	= $model->apor_codigo_fk;
									$notificacion->usua_codigo_fk_destino 	= $usuario_propietario->usua_codigo_fk;
									$notificacion->noti_fecha 				= $hoy_segundos;
									$notificacion->id_accion 				= $model->apor_codigo_fk;

									if(!$notificacion->save()){
										$transaction->rollBack();
										return "No se logró realizar la notificación al analista, por favor intente de nuevo.";
									}
								}
							}
						}

				 		if($existe_archivo->save()){
                           if(file_exists($antigua_ruta)){
                                unlink($antigua_ruta);
							}
				 			
				 			$archivo->saveAs($ruta.'/'.$nombre_archivo);
				 			Yii::app()->user->setState("tabla", "ok");
				 			$transaction->commit();
							return "1";
				 		}else{
				 			$transaction->rollBack();
				 			return "No se logró subir el recaudo.";
				 		}
					}
					
				}else{
					return "El tamaño máximo permitido es " .$tamano. "mb.";
				}
			}else{
				return "El archivo no es válido.";
			}
		}else{
			return "No ha seleccionado un archivo.";
		}
	}

 //lm subirRecaudoSsh

 /***************
	$model 			=> Modelo del archivo a subir
	$archivo 		=> CUploadedFile::getInstance($model, archivo_a_subir);
	$tamano 		=> Tamaño máximo en MB del archivo a subir
	$ruta 			=> Ruta donde se va a guardar el archivo a subir
	$extPermitidad 	=> Debe venir en un array donde esten las extesiones permitidas a subir
	$tipo 			=> Tipo de recaudo a subir 
						1 => Acta Constitutiva,
						2 => Registro Único de Información Fiscal,
						3 => Declaración ISLR,
						4 => Estados Financieros,
						// 5 => Ingresos por Actividad Económica, -- BORRADO
						6 => Documento nuevo,
	****************/
	private function subirRecaudoSsh($model, $archivo, $tamano, $ruta, $extPermitidas, $tipo, $renovar = false){
		if($archivo != null){
			$ftpServer =   Yii::app()->params['FTPSERVER'];
			$ftpUsername = Yii::app()->params['FTPUSERNAME'];
			$ftpPassword = Yii::app()->params['FTPPASSWORD'];
			$port =        Yii::app()->params['PORT'];
			$remoteSis=        Yii::app()->params['REMOTESIS'];

			$archivo = CUploadedFile::getInstance($model, $_POST['recaudo']);
			//print_r($archivo);die();
		
			if(in_array($archivo->extensionName, $extPermitidas)){
				$tamMaximo = 1024 * 1024 * $tamano; // $tamano -> valor en MB
                
				if($archivo->size <= $tamMaximo){

					//print_r();die();
					$date = new DateTime("now", new DateTimeZone('America/Caracas'));

					$hoy = $date->format('Y-m-d');

					$nombre_archivo = Yii::app()->user->id."-".$hoy.uniqid('-').'.'.$archivo->extensionName;

					// Si es renovar, agregará una palabra que lo distinga.
					if($renovar){
						$nombre_archivo = "renovar-".$nombre_archivo;
						$model->renovar = TRUE;
						$existe_archivo = SidcaiRecaudo::model()->find(
							array(
								'condition' => 'apor_codigo_fk = :apor_codigo_fk AND reca_estado = :reca_estado AND renovar = :renovar',
								'params' => array(
									':apor_codigo_fk' => Yii::app()->user->id,
									':reca_estado' => 2,
									':renovar' => TRUE
								)
							)
						);
					}else{
						$existe_archivo = SidcaiRecaudo::model()->find(
							'apor_codigo_fk = :apor_codigo_fk AND tipo_codigo_fk = :tipo_codigo_fk AND renovar = :renovar', 
							array(
								':apor_codigo_fk' => Yii::app()->user->id, 
								':tipo_codigo_fk' => $tipo,
								':renovar' => FALSE
							)
						);
					}

					if($existe_archivo == NULL){


						$model->tipo_codigo_fk = $tipo;
				 		$model->reca_direccion = "upload/".Yii::app()->user->id."/".$tipo."/".$nombre_archivo;
						$ruta_local=Yii::getPathOfAlias('webroot').'/upload/'.$nombre_archivo;
		
						$ruta_aportante="";

				 		if($model->save()){
							$carpeta1=Yii::app()->params['REMOTEDIR'].Yii::app()->user->id;
							$carpeta2=Yii::app()->params['REMOTEDIR'].$tipo;
						 	$existe_carpeta1=FuncionesController::directoryExists($carpeta1);
				

							 if($existe_carpeta1=="no"){
								 $crear_carpeta1=FuncionesController::crearCarpetaSsh2($carpeta1);
							 }
							 //print_r($crear_carpeta1);die();
							 
			 
							 $existe_carpeta2=FuncionesController::directoryExists(Yii::app()->params['REMOTEDIR'].Yii::app()->user->id."/".$tipo);
					 
							 if($existe_carpeta2=="no"){
								 $crear_carpeta2=FuncionesController::crearCarpetaSsh2(Yii::app()->params['REMOTEDIR'].Yii::app()->user->id."/".$tipo);
							 }
			 
							 $ar=Yii::app()->params['REMOTEDIR'].Yii::app()->user->id."/".$tipo."/".$nombre_archivo;
							// print_r($ar);die();
							 
							 $ruta_aportante="";
							
								if ($archivo->saveAs($ruta_local)) {
									$crear_archivo=FuncionesController::crearArchivoSsh2($ruta_local,$ar,$ruta_aportante);
									return "1";
									Yii::app()->user->setState("tabla", "ok");
								} else {
									return "0";
								}
							
						 	
						}else{
							return "No se logró subir el recaudo.";
						}
					}else{

						//echo "reemplazado"; //die();
						// Si ingresa al else quiere decir que el archivo será reemplazado.
						// Esto puede suceder cuando el Analista rechaza el recaudo
						$antigua_ruta = $existe_archivo->reca_direccion; // Ruta que se encuentra en la Base de Datos
				 		$existe_archivo->reca_direccion = "upload/".Yii::app()->user->id."/".$tipo."/".$nombre_archivo; // Se le asigna la nueva ruta
				 		$ruta_local=Yii::getPathOfAlias('webroot').'/upload/'.$nombre_archivo;
					    $ruta_aportante="";
						$existe_archivo->reca_estado = 1;

				 		$transaction = $existe_archivo->dbConnection->beginTransaction();

				 		// Tipo de notificación
						$tipo_notificacion = SidcaiTipoNotificacion::model()->findByPk(4);

						if($tipo_notificacion != null){
							if($tipo_notificacion->tipo_habilitado){
								// Se busca el usuario que posee la declaración
								$usuario_propietario = SidcaiAportanterecaudoAnalista::model()->find([
									'select' => 'usua_codigo_fk',
									'condition' => 'apor_codigo_fk = :apor_codigo_fk AND usua_habilitado = :usua_habilitado AND aceptado_por = :aceptado_por AND fecha_aceptacion IS NULL',
									'params' => [
										':apor_codigo_fk' => Yii::app()->user->id,
										':usua_habilitado' => TRUE,
										':aceptado_por' => FALSE,
									]
								]);

								if($usuario_propietario != null){
									$hoy_segundos = $date->format('Y-m-d H:i:s');
									$notificacion = new SidcaiNotificacion;
									$notificacion->tipo_codigo_fk 			= $tipo_notificacion->tipo_codigo_pk;
									$notificacion->apor_codigo_fk_origen 	= Yii::app()->user->id;
									$notificacion->usua_codigo_fk_destino 	= $usuario_propietario->usua_codigo_fk;
									$notificacion->noti_fecha 				= $hoy_segundos;
									$notificacion->id_accion 				= Yii::app()->user->id;

									if(!$notificacion->save()){
										$transaction->rollBack();
										return "No se logró realizar la notificación al analista, por favor intente de nuevo.";
									}
								}
							}
						}

						if ($existe_archivo->save()) {
							$antigua_ruta = $remoteSis . $existe_archivo->reca_direccion;
							$existe_servidor = FuncionesController::directoryExists($antigua_ruta);
						
							try {
								$connection = ssh2_connect($ftpServer, $port);
								if (!$connection) {
									throw new Exception('No se puede conectar al servidor remoto.');
								}
						
								if (!ssh2_auth_password($connection, $ftpUsername, $ftpPassword)) {
									throw new Exception('Falló la autenticación.');
								}
						
								$sftp = ssh2_sftp($connection);
								if (!$sftp) {
									throw new Exception('No se pudo inicializar el subsistema SFTP.');
								}
						
								// Si el archivo existe en el servidor, eliminarlo
								if ($existe_servidor == "si") {
									if (!ssh2_exec($connection, "rm -r " . escapeshellarg($antigua_ruta))) {
										throw new Exception('No se pudo eliminar el archivo remoto.');
									}
								}
						
								// Configurar la nueva ruta para el archivo
								$model->reca_direccion = "upload/" . Yii::app()->user->id . "/" . $tipo . "/" . $nombre_archivo;
								$ruta_local = Yii::getPathOfAlias('webroot') . '/upload/' . $nombre_archivo;
								$ruta_aportante = "";
						
								// Guardar el archivo localmente
								if (!$archivo->saveAs($ruta_local)) {
									throw new Exception('No se pudo guardar el archivo localmente.');
								}
						
								// Crear las carpetas necesarias en el servidor remoto
								$carpeta1 = Yii::app()->params['REMOTEDIR'] . Yii::app()->user->id;
								$carpeta2 = Yii::app()->params['REMOTEDIR'] . Yii::app()->user->id . "/" . $tipo;
						
								if (FuncionesController::directoryExists($carpeta1) == "no") {
									FuncionesController::crearCarpetaSsh2($carpeta1);
								}
						
								if (FuncionesController::directoryExists($carpeta2) == "no") {
									FuncionesController::crearCarpetaSsh2($carpeta2);
								}
						
								// Ruta del archivo en el servidor remoto
								$ar = Yii::app()->params['REMOTEDIR'] . Yii::app()->user->id . "/" . $tipo . "/" . $nombre_archivo;
						
								// Crear el archivo en el servidor remoto
								$crear_archivo = FuncionesController::crearArchivoSsh2($ruta_local, $ar, $ruta_aportante);
						
								Yii::app()->user->setState("tabla", "ok");
								$transaction->commit();
								return "1";
						
							} catch (Exception $e) {
								$transaction->rollBack();
								return "Ocurrió un error: " . $e->getMessage();
							}
						} else {
							$transaction->rollBack();
							return "No se logró subir el recaudo.";
						}
						
					}
					
				}else{
					return "El tamaño máximo permitido es " .$tamano. "mb.";
				}
			}else{
				return "El archivo no es válido.";
			}
		}else{
			return "No ha seleccionado un archivo.";
		}
	}


	private function subirRecaudoSshReg($model, $archivo, $tamano, $ruta, $extPermitidas, $tipo, $renovar = false){
		if($archivo != null){
			$ftpServer =   Yii::app()->params['FTPSERVER'];
			$ftpUsername = Yii::app()->params['FTPUSERNAME'];
			$ftpPassword = Yii::app()->params['FTPPASSWORD'];
			$port =        Yii::app()->params['PORT'];
			$remoteSis=        Yii::app()->params['REMOTESIS'];

			$archivo = CUploadedFile::getInstance($model, $_POST['recaudo']);
			//print_r($archivo);die();
		
			if(in_array($archivo->extensionName, $extPermitidas)){
				$tamMaximo = 1024 * 1024 * $tamano; // $tamano -> valor en MB
                
				if($archivo->size <= $tamMaximo){

					//print_r();die();
					$date = new DateTime("now", new DateTimeZone('America/Caracas'));

					$hoy = $date->format('Y-m-d');

					$nombre_archivo = $model->apor_codigo_fk."-".$hoy.uniqid('-').'.'.$archivo->extensionName;

					// Si es renovar, agregará una palabra que lo distinga.
					if($renovar){
						$nombre_archivo = "renovar-".$nombre_archivo;
						$model->renovar = TRUE;
						$existe_archivo = SidcaiRecaudo::model()->find(
							array(
								'condition' => 'apor_codigo_fk = :apor_codigo_fk AND reca_estado = :reca_estado AND renovar = :renovar',
								'params' => array(
									':apor_codigo_fk' => $model->apor_codigo_fk,
									':reca_estado' => 2,
									':renovar' => TRUE
								)
							)
						);
					}else{
						$existe_archivo = SidcaiRecaudo::model()->find(
							'apor_codigo_fk = :apor_codigo_fk AND tipo_codigo_fk = :tipo_codigo_fk AND renovar = :renovar', 
							array(
								':apor_codigo_fk' => $model->apor_codigo_fk, 
								':tipo_codigo_fk' => $tipo,
								':renovar' => FALSE
							)
						);
					}

					if($existe_archivo == NULL){


						$model->tipo_codigo_fk = $tipo;
				 		$model->reca_direccion = "upload/".$model->apor_codigo_fk."/".$tipo."/".$nombre_archivo;
						$ruta_local=Yii::getPathOfAlias('webroot').'/upload/'.$nombre_archivo;
		
						$ruta_aportante="";

				 		if($model->save()){
							$carpeta1=Yii::app()->params['REMOTEDIR'].$model->apor_codigo_fk;
							$carpeta2=Yii::app()->params['REMOTEDIR'].$tipo;
						 	$existe_carpeta1=FuncionesController::directoryExists($carpeta1);
				

							 if($existe_carpeta1=="no"){
								 $crear_carpeta1=FuncionesController::crearCarpetaSsh2($carpeta1);
							 }
							 //print_r($crear_carpeta1);die();
							 
			 
							 $existe_carpeta2=FuncionesController::directoryExists(Yii::app()->params['REMOTEDIR'].$model->apor_codigo_fk."/".$tipo);
					 
							 if($existe_carpeta2=="no"){
								 $crear_carpeta2=FuncionesController::crearCarpetaSsh2(Yii::app()->params['REMOTEDIR'].$model->apor_codigo_fk."/".$tipo);
							 }
			 
							 $ar=Yii::app()->params['REMOTEDIR'].$model->apor_codigo_fk."/".$tipo."/".$nombre_archivo;
							// print_r($ar);die();
							 
							 $ruta_aportante="";
							
								if ($archivo->saveAs($ruta_local)) {
									$crear_archivo=FuncionesController::crearArchivoSsh2($ruta_local,$ar,$ruta_aportante);
									return "1";
									Yii::app()->user->setState("tabla", "ok");
								} else {
									return "0";
								}
							
						 	
						}else{
							return "No se logró subir el recaudo.";
						}
					}else{

						//echo "reemplazado"; //die();
						// Si ingresa al else quiere decir que el archivo será reemplazado.
						// Esto puede suceder cuando el Analista rechaza el recaudo
						$antigua_ruta = $existe_archivo->reca_direccion; // Ruta que se encuentra en la Base de Datos
				 		$existe_archivo->reca_direccion = "upload/".$model->apor_codigo_fk."/".$tipo."/".$nombre_archivo; // Se le asigna la nueva ruta
				 		$ruta_local=Yii::getPathOfAlias('webroot').'/upload/'.$nombre_archivo;
					    $ruta_aportante="";
						$existe_archivo->reca_estado = 1;

				 		$transaction = $existe_archivo->dbConnection->beginTransaction();

				 		// Tipo de notificación
						$tipo_notificacion = SidcaiTipoNotificacion::model()->findByPk(4);

						if($tipo_notificacion != null){
							if($tipo_notificacion->tipo_habilitado){
								// Se busca el usuario que posee la declaración
								$usuario_propietario = SidcaiAportanterecaudoAnalista::model()->find([
									'select' => 'usua_codigo_fk',
									'condition' => 'apor_codigo_fk = :apor_codigo_fk AND usua_habilitado = :usua_habilitado AND aceptado_por = :aceptado_por AND fecha_aceptacion IS NULL',
									'params' => [
										':apor_codigo_fk' => $model->apor_codigo_fk,
										':usua_habilitado' => TRUE,
										':aceptado_por' => FALSE,
									]
								]);

								if($usuario_propietario != null){
									$hoy_segundos = $date->format('Y-m-d H:i:s');
									$notificacion = new SidcaiNotificacion;
									$notificacion->tipo_codigo_fk 			= $tipo_notificacion->tipo_codigo_pk;
									$notificacion->apor_codigo_fk_origen 	= $model->apor_codigo_fk;
									$notificacion->usua_codigo_fk_destino 	= $usuario_propietario->usua_codigo_fk;
									$notificacion->noti_fecha 				= $hoy_segundos;
									$notificacion->id_accion 				= $model->apor_codigo_fk;

									if(!$notificacion->save()){
										$transaction->rollBack();
										return "No se logró realizar la notificación al analista, por favor intente de nuevo.";
									}
								}
							}
						}

						if ($existe_archivo->save()) {
							$antigua_ruta = $remoteSis . $existe_archivo->reca_direccion;
							$existe_servidor = FuncionesController::directoryExists($antigua_ruta);
						
							try {
								$connection = ssh2_connect($ftpServer, $port);
								if (!$connection) {
									throw new Exception('No se puede conectar al servidor remoto.');
								}
						
								if (!ssh2_auth_password($connection, $ftpUsername, $ftpPassword)) {
									throw new Exception('Falló la autenticación.');
								}
						
								$sftp = ssh2_sftp($connection);
								if (!$sftp) {
									throw new Exception('No se pudo inicializar el subsistema SFTP.');
								}
						
								// Si el archivo existe en el servidor, eliminarlo
								if ($existe_servidor == "si") {
									if (!ssh2_exec($connection, "rm -r " . escapeshellarg($antigua_ruta))) {
										throw new Exception('No se pudo eliminar el archivo remoto.');
									}
								}
						
								// Configurar la nueva ruta para el archivo
								$model->reca_direccion = "upload/" . $model->apor_codigo_fk . "/" . $tipo . "/" . $nombre_archivo;
								$ruta_local = Yii::getPathOfAlias('webroot') . '/upload/' . $nombre_archivo;
								$ruta_aportante = "";
						
								// Guardar el archivo localmente
								if (!$archivo->saveAs($ruta_local)) {
									throw new Exception('No se pudo guardar el archivo localmente.');
								}
						
								// Crear las carpetas necesarias en el servidor remoto
								$carpeta1 = Yii::app()->params['REMOTEDIR'] . $model->apor_codigo_fk;
								$carpeta2 = Yii::app()->params['REMOTEDIR'] . $model->apor_codigo_fk . "/" . $tipo;
						
								if (FuncionesController::directoryExists($carpeta1) == "no") {
									FuncionesController::crearCarpetaSsh2($carpeta1);
								}
						
								if (FuncionesController::directoryExists($carpeta2) == "no") {
									FuncionesController::crearCarpetaSsh2($carpeta2);
								}
						
								// Ruta del archivo en el servidor remoto
								$ar = Yii::app()->params['REMOTEDIR'] . $model->apor_codigo_fk . "/" . $tipo . "/" . $nombre_archivo;
						
								// Crear el archivo en el servidor remoto
								$crear_archivo = FuncionesController::crearArchivoSsh2($ruta_local, $ar, $ruta_aportante);
						
								Yii::app()->user->setState("tabla", "ok");
								$transaction->commit();
								return "1";
						
							} catch (Exception $e) {
								$transaction->rollBack();
								return "Ocurrió un error: " . $e->getMessage();
							}
						} else {
							$transaction->rollBack();
							return "No se logró subir el recaudo.";
						}
						
					}
					
				}else{
					return "El tamaño máximo permitido es " .$tamano. "mb.";
				}
			}else{
				return "El archivo no es válido.";
			}
		}else{
			return "No ha seleccionado un archivo.";
		}
	}




 //lm

	

	/**
		* Función para guardar un registro en modificar.
		* Función llamada en "actionModificar".
		* @return array("alert", "mensaje", "(solo en $model->save()) agregar : modificar")
	**/
	private function guardar($model, array $post){

		// In your view or other methods, add debugging statements
//var_dump($model->apor_actividad_economica);exit;


		/*var_dump($model);
		var_dump($post);
	
		// Check specific fields
		var_dump($model->apor_actividad_economica);
		exit;*/

		// Se importa el controlador FuncionesController para hacer uso de "erroresModel".
		Yii::import("application.controllers.FuncionesController");

		$atributos = [];

		foreach ($post as $key => $value) {
			// Ensure $value is a string before encoding
			if (is_array($value)) {
				// Handle the case where $value is an array
				// For example, convert it to a string or skip it
				$value = implode(',', $value);
			}
			$atributos[$key] = mb_strtoupper(CHtml::encode($value));
		}

		$model->attributes = $atributos;

		$msj_error ="Por favor verifique el siguiente campo:<br><br>";

		// Tipo documento
		$model->tipo_documento = substr($model->apor_rif, 0, 1);

		
		
		if (!$model->validate()) {
			$errores = FuncionesController::erroresModel($model, "SidcaiAportante");
			// Debugging: Print the errors to check what is being captured
			//var_dump($errores);exit;
			var_dump($model->getErrors());exit;
			return ["warning", $msj_error . $errores];
		}
		// Una vez validado el $model se proceden a validar los datos.
		if(strpos($model->apor_correoelectronico, "@") !== false) 
			return ["warning", $msj_error.'<b>'.$model::attributeLabels()['apor_correoelectronico'].':</b> No ingrese el caracter "@".'];

		// Se comienza a pasar los datos.
		$model->apor_correoelectronico  = $model->apor_correoelectronico."@GMAIL.COM";

		$date = new DateTime("now", new DateTimeZone('America/Caracas'));

		// Se crea un nuevo model para guardar solo los campos que se pueden modificar.
		$model_guardar = $this->loadModel(Yii::app()->user->id);
		$model_guardar->scenario = "modificar";

		$model_guardar->tipo_documento			= $model->tipo_documento;
		$model_guardar->apor_razonsocial 		= $model->apor_razonsocial;
		$model_guardar->apor_denominacion 		= $model->apor_denominacion;
		$model_guardar->esta_codigo_fk 			= $model->esta_codigo_fk;
		$model_guardar->muni_codigo_fk 			= $model->muni_codigo_fk;
		$model_guardar->parr_codigo_fk 			= $model->parr_codigo_fk;
		$model_guardar->apor_ciudad 			= $model->apor_ciudad;
		$model_guardar->apor_direccion 			= $model->apor_direccion;
		$model_guardar->apor_zonapostal 		= $model->apor_zonapostal;
		$model_guardar->apor_telefono1 			= $model->apor_telefono1;
		$model_guardar->apor_telefono2 			= $model->apor_telefono2;
		$model_guardar->apor_correoelectronico 	= $model->apor_correoelectronico;
		$model_guardar->apor_actividad_economica = $model->apor_actividad_economica;
		$model_guardar->apor_tipoempresa = $model->apor_tipoempresa;
		$model_guardar->apor_porcprivada 	= $model->apor_porcprivada;
	    $model_guardar->apor_porcpublico 	= $model->apor_porcpublico;
		$model_guardar->es_fidetel 	= $model->es_fidetel;


		//ajustes alicuota 14-07-2025
	
		$model_guardar->estatus_conciliacion 	= $model->estatus_conciliacion;
		$model_guardar->datos_actualizados 	= true;


		// ==========================================
// GUARDADO O ACTUALIZACIÓN DE ALICUOTA
// ==========================================/*
if (is_numeric($model->alicuota)) {
	$cod_aportante = $model_guardar->apor_codigo_pk;
	$nueva_alicuota = floatval($model->alicuota);
	$comentarios = "Actualización desde formulario aportante";

	// Buscar el registro actual con estatus 1 (activo)
	$modeloAnterior = SidcaiAporAlicuota::model()->findByAttributes([
		'cod_aportante' => $cod_aportante,
		'estatus' => 1
	]);

	$nuevoModelo = new SidcaiAporAlicuota();
	$nuevoModelo->cod_aportante = $cod_aportante;
	$nuevoModelo->alicuota = $nueva_alicuota;
	$nuevoModelo->apor_tipoempresa = $model_guardar->apor_tipoempresa;
	$nuevoModelo->apor_actividad_economica = $model_guardar->apor_actividad_economica;

	$nuevoModelo->apor_porcprivada = ($model_guardar->apor_porcprivada === '') ? null : floatval($model_guardar->apor_porcprivada);
	$nuevoModelo->apor_porcpublico = ($model_guardar->apor_porcpublico === '') ? null : floatval($model_guardar->apor_porcpublico);

	$nuevoModelo->es_fidetel = $model_guardar->es_fidetel;
	$nuevoModelo->fecha_registro = date('Y-m-d H:i:s');
	$nuevoModelo->fecha_modificacion = date('Y-m-d H:i:s');
	$nuevoModelo->comentarios = $comentarios;

	// ✅ Aquí aseguramos que NO quede el id del usuario actual:
	$nuevoModelo->analista_id = null;

	if ($modeloAnterior) {
		if ($nueva_alicuota < $modeloAnterior->alicuota) {
			$nuevoModelo->estatus = 4;
		} else {
			$nuevoModelo->estatus = 1;
			$modeloAnterior->estatus = 3;
			$modeloAnterior->fecha_modificacion = date('Y-m-d H:i:s');
			$modeloAnterior->save(false);
		}
	} else {
		$nuevoModelo->estatus = 1;
	}

	if (!$nuevoModelo->save()) {
		Yii::log("Error al guardar alícuota: " . print_r($nuevoModelo->getErrors(), true), CLogger::LEVEL_ERROR);
	}
}


		//*validacion nueva para verificar alicuota
		if($model->apor_tipoempresa==3){

			$model_guardar->ciiu_codigo_fk 		= 9999; // 0.50 //

		}
		

		if($model->apor_tipoempresa==1){

			$model_guardar->ciiu_codigo_fk 		= 4021; // 2.00

		}

		$valores = array(2);
		if (in_array($model->apor_tipoempresa, $valores)) {
			// Código a ejecutar si la condición es verdadera

			if($model->apor_porcprivada>=51){
				$model_guardar->ciiu_codigo_fk 		= 2710; // 1.00

			}

			if($model->apor_porcpublico>=50){
				$model_guardar->ciiu_codigo_fk 		= 9999; // 0.50 //

			}

		}




		$model_guardar->apor_fechahoramodif = $date->format('Y-m-d H:i:s');

		// Se guardan los datos
		if($model_guardar->save())
			$guardar = ["success", "Sus datos se actualizaron correctamente.", "modificar"];
		else
			$guardar = ["danger", "No se logró modificar los datos."];

		unset($_POST['SidcaiAportante']); // Se limpia el POST enviado por el formulario.
		$model->unsetAttributes(); // Se limpia el model.
		$model_guardar->unsetAttributes(); // Se limpia el model.

		return $guardar;
	}

	public function actionGuardarAlicuota($cod_aportante, $nueva_alicuota, $analista_id, $comentarios = '') {
    $fecha_actual = date('Y-m-d H:i:s');

    // Buscar el registro actual con estatus 1 (activo)
    $modeloAnterior = SidcaiAporAlicuota::model()->findByAttributes([
        'cod_aportante' => $cod_aportante,
        'estatus' => 1
    ]);

    $nuevoModelo = new SidcaiAporAlicuota();
    $nuevoModelo->cod_aportante = $cod_aportante;
    $nuevoModelo->alicuota = $nueva_alicuota;
    $nuevoModelo->fecha_registro = $fecha_actual;
   // $nuevoModelo->analista_id = $analista_id;
    $nuevoModelo->fecha_modificacion = $fecha_actual;
    $nuevoModelo->comentarios = $comentarios;

    if ($modeloAnterior) {
        if ($nueva_alicuota < $modeloAnterior->alicuota) {
            // Alícuota menor: se guarda con estatus 4
            $nuevoModelo->estatus = 4;
        } else {
            // Alícuota mayor o igual: se guarda nuevo como activo y se cambia el anterior a inactivo
            $nuevoModelo->estatus = 1;
            $modeloAnterior->estatus = 3;
            $modeloAnterior->fecha_modificacion = $fecha_actual;
            $modeloAnterior->save(false); // Guardar sin validación
        }
    } else {
        // No hay anterior: se guarda como activo
        $nuevoModelo->estatus = 1;
    }

    if ($nuevoModelo->save()) {
        echo "Registro guardado correctamente con estatus: {$nuevoModelo->estatus}";
    } else {
        echo "Error al guardar: ";
        print_r($nuevoModelo->getErrors());
    }
}


	/**
		* Función para modificar el Cierre Fiscal.
		* Función llamada en "actionModificarFiscal".
		* @return array("alert", "mensaje", "(solo en $model->save()) agregar : modificar")
	**/

	private function guardarEjercicioFiscal($model, $post) {
    // Se importa el controlador FuncionesController para hacer uso de "erroresModel".
    Yii::import("application.controllers.FuncionesController");

    $atributos = [];
    // Se limpia los campos para evitar Ataque XSS.
    foreach($post as $key => $value) {
        $atributos[$key] = CHtml::encode($value);
    }

    $model->attributes = $atributos;

    // Se valida primero el $model
    if(!$model->validate()) {
        $errores = FuncionesController::erroresModel($model, "SidcaiAportante");
        return array("warning", "Por favor verifique los campos requeridos.<br><br>".$errores);
    }

    // Una vez validado el $model se proceden a validar los datos.
    if(!is_numeric($model->apor_diacierre) || !is_numeric($model->apor_mescierre)) {
        return array("warning", "Solo inserte números en el Cierre Fiscal");
    }

    // Validaciones adicionales para día y mes
    if($model->apor_diacierre < 1 || $model->apor_diacierre > 31) {
        return array("warning", "El día de cierre debe estar entre 1 y 31");
    }

    if($model->apor_mescierre < 1 || $model->apor_mescierre > 12) {
        return array("warning", "El mes de cierre debe estar entre 1 y 12");
    }

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

    // Iniciar transacción para garantizar consistencia en ambas tablas
    $transaction = Yii::app()->db->beginTransaction();
    try {
        // 1. ACTUALIZAR SidcaiAportante
        $model->apor_diacierre = $model->apor_diacierre;
        $model->apor_mescierre = $model->apor_mescierre;
       // $model->fecha_actualizacion = $currentDateTime;
        
        if(!$model->save()) {
            throw new Exception("Error al actualizar SidcaiAportante");
        }

        // 2. CREAR nuevo registro en SidcaiEjercicioFiscal (histórico)
        $ejercicioFiscal = new SidcaiEjercicioFiscal;
        $ejercicioFiscal->apor_diacierre = $model->apor_diacierre;
        $ejercicioFiscal->apor_mescierre = $model->apor_mescierre;
        $ejercicioFiscal->estatus = 1;
        $ejercicioFiscal->apor_codigo_fk = Yii::app()->user->id;
        $ejercicioFiscal->fecha_actualizacion = $currentDateTime;
        
        if(!$ejercicioFiscal->save()) {
            throw new Exception("Error al guardar SidcaiEjercicioFiscal");
        }

        // Confirmar la transacción si todo salió bien
        $transaction->commit();
        $guardar = ["success", "Se modificó el Cierre Fiscal correctamente en ambas tablas.", "modificar"];
        
    } catch (Exception $e) {
        // Revertir la transacción en caso de error
        $transaction->rollback();
        $errores = FuncionesController::erroresModel($model, "SidcaiAportante");
        $guardar = ["danger", "No se logró modificar el Cierre Fiscal.<br><br>".$errores];
    }

    unset($_POST['SidcaiAportante']); // Se limpia el POST enviado por el formulario.
    $model->unsetAttributes(); // Se limpia el model.

    return $guardar;
}

	
	private function guardarEjercicioFiscal20112025($model, $post){
		// Se importa el controlador FuncionesController para hacer uso de "erroresModel".
		Yii::import("application.controllers.FuncionesController");

		$atributos = [];
		// Se limpia los campos para evitar Ataque XSS.
		foreach($post as $key => $value){
			$atributos[$key] = CHtml::encode($value);
		}

		$model->attributes = $atributos;

		// Se valida primero el $model
		if(!$model->validate()) {
			$errores = FuncionesController::erroresModel($model, "SidcaiAportante");
			return array("warning", "Por favor verifique los campos requeridos.<br><br>".$errores);
		}

		// Una vez validado el $model se proceden a validar los datos.
		if(!is_numeric($model->apor_diacierre) || !is_numeric($model->apor_mescierre))
			return array("warning", "Solo inserte números en el Cierre Fiscal");


		$date = new DateTime("now", new DateTimeZone('America/Caracas'));

		$ejercicioFiscal = new SidcaiEjercicioFiscal;
		$ejercicioFiscal->apor_diacierre 	= $model->apor_diacierre;
		$ejercicioFiscal->apor_mescierre 	= $model->apor_mescierre;
		$ejercicioFiscal->estatus 			= 1;
		$ejercicioFiscal->apor_codigo_fk 	= Yii::app()->user->id;
		$ejercicioFiscal->fecha_actualizacion = $date->format('Y-m-d');

		// Se guardan los datos
		if($ejercicioFiscal->save())
			$guardar = ["success", "Se modificó el Cierre Fiscal correctamente.", "modificar"];
		else{
			$errores = FuncionesController::erroresModel($ejercicioFiscal, "SidcaiEjercicioFiscal");
			$guardar = ["danger", "No se logró modificar el Cierre Fiscal.<br><br>".$errores];
		}

		unset($_POST['SidcaiAportante']); // Se limpia el POST enviado por el formulario.
		$model->unsetAttributes(); // Se limpia el model.
		$ejercicioFiscal->unsetAttributes(); // Se limpia el model.

		return $guardar;
	}


	/**
	 * Modificar la clave.
	 */
	private function cambiar_clave($model, array $post, int $id) : array{
		// Se importa el controlador FuncionesController para hacer uso de "erroresModel"
		Yii::import("application.controllers.FuncionesController");

		$atributos = [];
		// Se limpia los campos para evitar Ataque XSS.
		foreach($post as $key => $value){
			$atributos[$key] = CHtml::encode($value);
		}	

		$model->attributes  = $atributos;

		$msj_error ="Por favor verifique el siguiente campo:<br><br>";

		// Se valida primero el $model
		if(!$model->validate()) {
			$errores = FuncionesController::erroresModel($model, "SidcaiAportante");
			return ["warning", $msj_error.$errores];
		}	

		$model_guardar = SidcaiAportante::model()->findByPk($id);

		$model_guardar->apor_contrasena =  password_hash($model->contrasena_nueva, PASSWORD_DEFAULT);
		$model_guardar->apor_cambiocontrasena = 0;

		if($model_guardar->save())
			$guardar = ["success", "Se modificó la contraseña correctamente.", 'agregar'];
		else
			$guardar = ["danger", "No se logró modificar la contraseña."];

		unset($_POST['SidcaiAportante']); // Se limpia el POST enviado por el formulario.
		$model_guardar->unsetAttributes(); // Se limpia el model.

		return $guardar;
	}

	// Funcion que permite entrar a los usuarios que tenga el nivel de usuario "1"
	public function permitirUsuario(){
		if(Yii::app()->user->hasState('rif'))
			return true;
		
		$this->redirect(Yii::app()->homeUrl);
	}

	/**
	 * Permite solo ingresar cuando la empresa pueda comenzar a Renovar sus recaudos
	 */
	public function permitirRenovar(){
		Yii::import('application.controllers.FuncionesController');

		if(Yii::app()->user->hasState('rif')){
			if(FuncionesController::mostrarRenovar(Yii::app()->user->id))
				return true;
		}

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


	public function actionConsultar(){
		$model   = new SidcaiAportante;
		$model2  = "";
		$model3  = "";
		$mostrar = false;
		$mostrar_declaraciones = "";
		$id_aportante = "";
		$mostrar_recaudos = "";
		$mostrar_analistas = "";
		$flujo_iniciado_por = "";
		$mostrar_analistas_renovacion = "";
		$mensaje_recordatorio = false;

		
	

			
				Yii::import('application.controllers.FuncionesController');
				// Se borrar la variable de sesión.
				

				$model2 = SidcaiAportante::model()->find('apor_codigo_pk = :apor_codigo_pk', array(':apor_codigo_pk' => Yii::app()->user->id));
				$id_aportante = $model2->apor_codigo_pk;

				//print_r($id_aportante);die();

				$declaracionMensualPagoParcial = SidcaiDeclaracioncti::model()->find(
					array(
						'condition' => "apor_codigo_fk = :apor_codigo_fk AND esta_codigo_fk IN (1001, 1008) AND decl_tipodeclaracion = 'M' ORDER BY decl_codigo_pk ASC", 
						'params' => [
							':apor_codigo_fk' => $id_aportante
						],
					)
				);

				if($declaracionMensualPagoParcial) {
					$monto_faltante = $declaracionMensualPagoParcial->decl_montorequerido;
					$credito_fiscal = SidcaiCreditoFiscal::model()->find([
						'condition' => 'apor_codigo_fk = :apor_codigo_fk AND cred_habilitado = :cred_habilitado',
						'params' => [
							':apor_codigo_fk' => $id_aportante,
							':cred_habilitado' => TRUE,
						]
					]);
					if($credito_fiscal) {
						$monto_faltante -= $credito_fiscal->cred_monto;
					}

					$credito_fiscal_declaracion = SidcaiCreditoFiscal::model()->find([
						'condition' => 'apor_codigo_fk = :apor_codigo_fk AND decl_codigo_fk_destino = :decl_codigo_fk_destino',
						'params' => [
							':apor_codigo_fk' => $id_aportante,
							':decl_codigo_fk_destino' => $declaracionMensualPagoParcial->decl_codigo_pk,
						]
					]);
					if($credito_fiscal_declaracion != NULL) {
						$monto_faltante -= $credito_fiscal_declaracion->cred_monto;
					}

					$detalle_declaracion_pasada = SidcaiDeclaracionDetalle::model()->findAll([
						'condition' => 'codigo_declaraciones = :codigo_declaraciones AND decl_pago_aceptado = TRUE',
						'params' => [
							':codigo_declaraciones' => "$declaracionMensualPagoParcial->decl_codigo_pk",
						],
						'order' => 'deta_codigo_pk ASC'
					]);
					$acumulado = 0;
					if($detalle_declaracion_pasada) {
						foreach($detalle_declaracion_pasada as $pasada){
							$acumulado += $pasada["decl_monto"];
						}
					}
					if($acumulado > 0) {
						$monto_faltante -= $acumulado;
					}

					if($declaracionMensualPagoParcial->decl_montorequerido != $monto_faltante) {
						$meses_letras = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];
						$moneda = FuncionesController::obtenerMoneda($declaracionMensualPagoParcial->decl_fechafin_base);
						$monto_faltante = number_format($monto_faltante, 2, ",", ".");
						$monto_faltante = $moneda." ".$monto_faltante;
						$split_fecha = explode("-", $declaracionMensualPagoParcial->decl_fechafin_base);
						Yii::app()->user->setState('mensaje-mensual', "El aporte de ".$meses_letras[$split_fecha[1] - 1]. " - " .$split_fecha[0]." con código ".$declaracionMensualPagoParcial->decl_codigo_pk." tiene un faltante de ".$monto_faltante);
					}
				}

				/** Se verifica si el Aportante ha cambiado su Ejercicio Fiscal para obtener 
				 * su última modificación de "Día" y "Mes".**/
				$existe = SidcaiEjercicioFiscal::model()->find(
					array(
						'condition' => 'apor_codigo_fk = :apor_codigo_fk',
						'params' => array(':apor_codigo_fk' => $id_aportante),
						'order' => 'ejercicio_fiscal_pk DESC',
					)
				);

				// Sí el aportante ha cambiado su Ejercicio Fiscal usará los datos del "SidcaiEjercicioFiscal".
				if($existe != null){
					$model2->apor_diacierre = $existe->apor_diacierre;
					$model2->apor_mescierre = $existe->apor_mescierre;
				}

				if($model2->apor_mescierre < "10"){
					$model2->apor_mescierre = "0".$model2->apor_mescierre;
				}

				$model2->ciiuCodigoFk->ciiu_porcentaje = FuncionesController::porcentajeContribucion($model2->ciiu_codigo_fk);

				//$mensaje_recordatorio = FuncionesController::mostrarRenovar($id_aportante);

				$model3 = SidcaiRepresentantelegal::model()->findByPk($model2->repr_codigo_fk);

				$mostrar = true;	

				$array_declaraciones = [];

				$todas_las_declaraciones = SidcaiDeclaracioncti::model()->findAll([
					//TODO: la siguiente linea comentada mustra solo las declaraciones no mensuales en la vista de consulta de aportante del analista
					'condition' => "apor_codigo_fk = :apor_codigo_fk AND decl_tipodeclaracion != 'M'",
					//'condition' => 'apor_codigo_fk = :apor_codigo_fk',
					'params' => [
						':apor_codigo_fk' => $model2->apor_codigo_pk
					],
					'order' => 'decl_codigo_pk DESC'
				]);

				foreach($todas_las_declaraciones as $t){
					array_push($array_declaraciones, $t->decl_codigo_pk);
				}

				$mostrar_declaraciones = FuncionesController::mostrarDeclaraciones($array_declaraciones, $model2->apor_rif);

				$mostrar_recaudos = $this->mostrarRecaudosListado($id_aportante);
				

				$model2->apor_fechacreacionempresa = FuncionesController::convertirFecha($model2->apor_fechacreacionempresa, "dd/mm/yyyy");
				$model2->apor_fechahoraregistro = FuncionesController::convertirFecha($model2->apor_fechahoraregistro, "dd/mm/yyyy");
				$model2->apor_fechahoramodif = FuncionesController::convertirFecha($model2->apor_fechahoramodif, "dd/mm/yyyy");

				$usuario = SidcaiUsuario::model()->findByPk($model2->audit_usua);

				if($usuario != null){
					$model2->audit_usua = "<span data-tooltip='".$usuario->usua_nombre." ".$usuario->usua_apellido."'>".$usuario->usua_documento."</span>";	
				}

				$fip = SidcaiAportanterecaudoAnalista::model()->find(
					'apor_codigo_fk = :apor_codigo_fk AND aceptado_por = :aceptado_por',
					array(':apor_codigo_fk' => $model2->apor_codigo_pk, ':aceptado_por' => TRUE)
				);

				if($fip != null){
					$analista_iniciador = SidcaiUsuario::model()->findByPk($fip->usua_codigo_fk);

					$flujo_iniciado_por = "<span data-tooltip='".$analista_iniciador->usua_nombre." ".$analista_iniciador->usua_apellido."'>".$analista_iniciador->usua_documento."</span>";
					if($fip->fecha_aceptacion != null)
						$flujo_iniciado_por .= "<br>".FuncionesController::convertirFecha($fip->fecha_aceptacion, "dd/mm/yyyy");
				}
			
		


	

		$this->render('consultar', array(
			'model' => $model,
			'model2' => $model2,
			'model3' => $model3,
			'mostrar' => $mostrar,
			'mostrar_declaraciones' => $mostrar_declaraciones,
			'mostrar_recaudos' => $mostrar_recaudos,
		));
	}


	public function mostrarRecaudosListado($codigo_aportante)
	
{
		$recaudos = SidcaiRecaudo::model()->findAll(
			array(
				'condition' => 'apor_codigo_fk = :apor_codigo_fk AND renovar = :renovar AND reca_estado != 4',
				'params' 	=> array(':apor_codigo_fk' => $codigo_aportante, ':renovar' => FALSE),
				'order' 	=> 'reca_codigo_pk'
			)
		);

		/******
			Códigos de recaudos de Primera vez

			1. Acta Constitutiva
			2. RIF
			3. Declaración del ISLR
			4. Estados Financieros (Opcional)
			//5. Actividad Económica -- BORRADO
			6. Patente de Industria y Comercio (Opcional)
		*******/

		// Id de los recaudos que son obligatorios.
		$recaudos_primera_vez_obligatorios = [1, 2, 3];
		$recaudos_primera_vez_opcional = [4, 6];

		// Guarda los ID de los recaudos que la Empresa halla subido.
		$recaudos_subidos_primera_vez = [];
		$recaudos_subidos_primera_vez_opcional = [];

		$url= Yii::getPAthOfAlias('webroot').'/upload/'.$codigo_aportante;


		$mostrar_botones = true;
		$islr_subido = false;
		$enviar_error_correo = false;

		$tabla = "";
        $url_recaudo = "";
		$recaudo = "";
		$verificar_final="";
		$ruta="";
		$partes="";
		$carpeta1="";
		$carpeta2="";
		$ruta_local="";
		$existe_carpeta1="";
		$existe_carpeta2="";
		$crear_carpeta1="";
		$crear_carpeta2="";

		if($recaudos == null){
			$tabla = "<tr><td colspan='5'><center>El Aportante aún no ha subido los recaudos.</center></td></tr>";
		}

		$disabled_aceptar = "";
		$disabled_rechazar = "";

		$tabla .= '<div class="table-responsive redondear-tablas-top">';
		$tabla .= '<table class="table table-striped text-center">';
		$tabla .= '<thead>';
		$tabla .= '<tr class="bg-secondary text-white text-center">';
		$tabla .= '<th class="text-center" width="25%">Recaudo</th>';
		$tabla .= '<th class="text-center" width="15%">En Revisión</th>';
		$tabla .= '<th class="text-center" width="15%">Rechazados</th>';
		$tabla .= '<th class="text-center" width="15%">Aceptados</th>';
		$tabla .= '<th class="text-center" width="30%">Acciones</th>';
		$tabla .= '</tr>';
		$tabla .= '</thead>';
		$tabla .= '<tbody>';

		foreach($recaudos as $recaudo){

		

			$existe_local=FuncionesController::checkPathAndFile3(Yii::getPAthOfAlias('webroot')."/".$recaudo->reca_direccion);		//print_r($existe_local);die();
			if($existe_local=="si"){
				$url_recaudo= Yii::app()->homeUrl.$recaudo->reca_direccion;
			}else{
				$existe_servidor=FuncionesController::directoryExists2(Yii::app()->params['REMOTESIS'].$recaudo->reca_direccion);
	
				//print_r($existe_servidor);die();   
				  
				
				if($existe_servidor=="si"){
					$url_recaudo='./../download/'.$recaudo->reca_codigo_pk;
					
				
			   }else{
				$ruta=$recaudo->reca_direccion;
				//$ruta='upload/30217/6/30217-2024-10-14-670d36d00f9a8.pdf';
				$ruta_local=Yii::getPathOfAlias('webroot').'/upload/'.basename($ruta);
				//print_r(Yii::getPathOfAlias('webroot').'/upload/'.basename($ruta));die();
				
				$verificar_final=FuncionesController::checkPathAndFile3($ruta_local);
			   
				if($verificar_final=="si"){
					//$ruta='upload/30217/6/30217-2024-10-14-670d36d00f9a8.pdf';
					$ruta=$recaudo->reca_direccion;
					$partes = explode('/', $ruta);
	
	
	
					// Extraer las carpetas
					$carpeta1 = $partes[1]; // 30217
					$carpeta2 = $partes[2]; // 6
	
					//print_r(Yii::app()->params['REMOTEDIR'].$carpeta1);die();
	
					$existe_carpeta1=FuncionesController::directoryExists(Yii::app()->params['REMOTEDIR'].$carpeta1);
					
	
					if($existe_carpeta1=="no"){
						$crear_carpeta1=FuncionesController::crearCarpetaSsh2(Yii::app()->params['REMOTEDIR'].$carpeta1);
					}
					//print_r($crear_carpeta1);die();
					
	
					$existe_carpeta2=FuncionesController::directoryExists(Yii::app()->params['REMOTEDIR'].$carpeta1."/".$carpeta2);
			
					if($existe_carpeta2=="no"){
						$crear_carpeta2=FuncionesController::crearCarpetaSsh2(Yii::app()->params['REMOTEDIR'].$carpeta1."/".$carpeta2);
					}
	
					$ar=Yii::app()->params['REMOTEDIR'].$carpeta1."/".$carpeta2."/".basename($recaudo->reca_direccion);
					//print_r($ar);die();
					
					$ruta_aportante="";
					$crear_archivo=FuncionesController::crearArchivoSsh2($ruta_local,$ar,$ruta_aportante);
						
					$url_recaudo='./../download/'.$recaudo->reca_codigo_pk;
				}else{
					$url_recaudo='./../download/'.$recaudo->reca_codigo_pk;
				}
	
			   }
			 
			}



			$tabla .= "<tr>";
			$tabla .= "<td><b>".$recaudo->tipoCodigoFk->tipo_nombre."</b></td>";

			$disabled_rechazar = ($recaudo->reca_estado == 2) ? "disabled" : "";
			$disabled_aceptar  = ($recaudo->reca_estado == 3) ? "disabled" : "";

			$tabla .= ($recaudo->reca_estado == 1) ? "<td class='text-center'><i class='material-icons'>done</i></td></td>" : "<td></td>";
			$tabla .= ($recaudo->reca_estado == 2) ? "<td class='text-center'><i class='fas fa-times'></i></td></td>" 		: "<td></td>";
			$tabla .= ($recaudo->reca_estado == 3) ? "<td class='text-center'><i class='material-icons'>done</i></td></td>" : "<td></td>";

			$tabla .= "<td>";

			$tabla .= "<a target='_blank' href='" .$url_recaudo. "' title='".$recaudo->reca_direccion."' role='button' class='btn btn-warning boton-accion btn-sm'><i class='fas fa-download'></i></a>";

			$tabla .= "<button type='button' class='boton-accion btn btn-success btn-sm' data-toggle='modal' data-target='#modalAceptar' id='a-".$recaudo->reca_codigo_pk."' value='".$recaudo->reca_codigo_pk."' onclick='aR(this);' $disabled_aceptar><i class='fas fa-check'></i></button>";
			$tabla .= "<button type='button' class='boton-accion btn btn-danger btn-sm' data-toggle='modal' data-target='#modalRechazar' id='r-".$recaudo->reca_codigo_pk."' value='".$recaudo->reca_codigo_pk."' onclick='rR(this, $recaudo->erro_codigo_fk);' $disabled_rechazar><i class='fas fa-times'></i></button>";

			$tabla .= "</td>";

			$tabla .= "</tr>";

			if($recaudo->erro_codigo_fk != NULL){
				$enviar_error_correo = true;
				$tabla .= "<tr>";
				$tabla .= "<td style='text-align:left' colspan='5'><b>Motivo Rechazo: </b>".$recaudo->erroCodigoFk->erro_descripcion."</td>";
				$tabla .= "</tr>";
			}

			// If para mostrar los botones de "Constancia de recepción e Iniciar flujo de trabajo".
			if($recaudo->reca_estado != 3){
				$mostrar_botones = false;
			}

			if(in_array($recaudo->tipo_codigo_fk, $recaudos_primera_vez_obligatorios))
				array_push($recaudos_subidos_primera_vez, $recaudo->tipo_codigo_fk);
			elseif(in_array($recaudo->tipo_codigo_fk, $recaudos_primera_vez_opcional))
				array_push($recaudos_subidos_primera_vez_opcional, $recaudo->tipo_codigo_fk);
		}

		$tabla .= '</tbody>';
		$tabla .= '</table>';
		$tabla .= '</div>';


		echo $tabla;

		// Si algún recaudo es rechazo le mostrará el botón para el envío de un mensaje al correo del usuario indicandole que tiene recaudos rechazados.
		if($enviar_error_correo){
			echo "<div class='row'>";
			echo "<div class='col-12 text-center'>";
			echo TbHtml::button('<i class="fas fa-envelope"></i> Enviar Correo de rechazo de recaudos', 
							array(
			    				'color' 	=> TbHtml::BUTTON_COLOR_SECONDARY,
			    				'name' => 'enviar-correo',
			    				'data-toggle' => 'modal',
			    				'data-target' => '#modalCorreo',
						));

			echo "</div>";
			echo "</div>";
		}


		// Muestra el boton de "Iniciar flujo de trabajo" siempre y cuando el aportante tenga todos los recaudos subidos y estos esten aceptados por el analista.
		if($mostrar_botones){
			if(count($recaudos_subidos_primera_vez) == count($recaudos_primera_vez_obligatorios)){	
				$aportante = SidcaiAportante::model()->findByPk($codigo_aportante);

				if($aportante->esta_codigoestatus_fk == 2008){
					echo "<div class='row'>";
					echo "<div class='col-12 text-center'>";
						// Cantidad de años sin declarar.
						$datos = self::datos_empresa($codigo_aportante);

						if($datos['anios_sin_declarar'] >= 1){
							echo TbHtml::button('<i class="fas fa-check"></i> Iniciar flujo de trabajo', 
								array(
				    				'color' 	=> TbHtml::BUTTON_COLOR_SECONDARY,
				    				'name'		=> 'iniciar_flujo',
				    				'data-toggle' => 'modal',
				    				'data-target' => '#modalFlujo',
				    				'onclick' => 'validarMonto('.$datos['anios_sin_declarar'].')',
							));
						}
					echo "</div>";
					echo "</div>";
				}
			}
		}
	}

	public function filterDatosCompletos($filterChain)
	{
		// Solo aplica a usuarios autenticados
		if (!Yii::app()->user->isGuest) {
			$userId = Yii::app()->user->id;
			$aportante = SidcaiAportante::model()->findByAttributes(array('apor_codigo_pk' => $userId));
			
			if ($aportante) {
				// Verificar si los datos están incompletos
				$datosIncompletos = (
					$aportante->datos_actualizados != 1 || 
					$aportante->apor_actividad_economica == ''
				);
				
				// Rutas permitidas sin verificación
				$rutasPermitidas = array(
					'aportante/modificar',
					'site/logout',
					'nueva_clave' // Permitir cambio de contraseña
				);
				
				$rutaActual = Yii::app()->urlManager->parseUrl(Yii::app()->request);
				
				if ($datosIncompletos && !$this->esRutaPermitida($rutaActual, $rutasPermitidas)) {
					Yii::app()->user->setReturnUrl(Yii::app()->request->url); // Guardar URL solicitada
					$this->redirect(array('aportante/modificar'));
					Yii::app()->end(); // Detener ejecución
				}
			}
		}
		
		$filterChain->run();
	}
	
	protected function esRutaPermitida($rutaActual, $rutasPermitidas)
	{
		foreach ($rutasPermitidas as $ruta) {
			if (strpos($rutaActual, $ruta) === 0) {
				return true;
			}
		}
		return false;
	}


	// En tu controlador, por ejemplo, SiteController.php
	public function actionCargarActividades()
	{
		$tipoEmpresa = Yii::app()->request->getParam('tipo_empresa');
		$actividades = array();
	
		if ($tipoEmpresa) {
			// Consulta a la base de datos para obtener las actividades según el tipo de empresa
			$criteria = new CDbCriteria();
			$criteria->condition = 'act_tipoempresa_fk = :tipo_empresa';
			$criteria->params = array(':tipo_empresa' => $tipoEmpresa);
			$criteria->params = array(':tipo_empresa' => $tipoEmpresa);
			$criteria->order = 'act_nombre ASC';
			
			$modelos = SidcaiActividadEconomica::model()->findAll($criteria);
			
			foreach ($modelos as $modelo) {
				$actividades[$modelo->act_codigo_pk] = $modelo->act_nombre;
			}
		}
	
		echo CJSON::encode($actividades);
		Yii::app()->end();
	}
	
	// En AportanteController.php
public function actionObtenerAlicuotaActual($cod_aportante) {
    $alicuota = SidcaiAporAlicuota::model()->find(array(
        'condition' => 'cod_aportante = :cod AND estatus = :estatus',
        'params' => array(
            ':cod' => $cod_aportante,
            ':estatus' => SidcaiAporAlicuota::ESTATUS_ACTIVO
        ),
        'order' => 'fecha_registro DESC'
    ));
    
    echo CJSON::encode(array(
        'alicuota' => $alicuota ? $alicuota->alicuota : 0,
        'estatus' => $alicuota ? $alicuota->estatus : null
    ));
    Yii::app()->end();
}

public function actionObtenerActividadesPorTipoEmpresa()
{
    if (isset($_POST['tipo_empresa_id'])) {
        $tipoEmpresaId = (int) $_POST['tipo_empresa_id'];
        $actividades = SidcaiActividadEconomica::model()->findAllByAttributes([
            'tipo_empresa_id' => $tipoEmpresaId
        ]);

        $data = CHtml::listData($actividades, 'act_codigo_pk', 'act_actividad_economica');

        foreach ($data as $value => $nombre) {
            echo CHtml::tag('option', ['value' => $value], CHtml::encode($nombre), true);
        }
    }
}

public function actionCheckStatus() {
    if (Yii::app()->request->isPostRequest) {
        $id = Yii::app()->request->getPost('id');
        $exists = SidcaiAporAlicuota::model()->exists([
            'condition' => 'cod_aportante = :id AND estatus = 4',
            'params' => [':id' => $id]
        ]);
        echo CJSON::encode(['exists' => $exists]);
        Yii::app()->end();
    }
    throw new CHttpException(400, 'Solicitud inválida');
}



	
}
