<?php

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

	/**
	 * 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('obtenerDetallesDeclaracion', 'consulta','mensual', 'conciliacion','conciliar' ,'subirRecaudo', 'subirRecaudoSsh', 'mostrarRecaudos', 'mostrarIngresosBrutos', 'obtenerPeriodos', 'bancosAportes', 'bancosMultas', 'obtenerDetallesMulta', 'obtenerComprobante','verImagen'),
				'users' => array('@'),
			),
			// Páginas de Usuario
			array(
				'allow',
				'actions' => array('index', 'planilla', 'pdf', 'consulta', 'bancos', 'verificarCierreFiscal', 'acta_fiscalizacion'),
				'expression' => array($this, 'permitirUsuario'),
			),
			array(
				'allow',
				'actions' => array('pago'),
				'expression' => array($this, 'permitirPaginaPago')
			),
			array(
				'allow',
				'actions' => array('pagar_multas'),
				'expression' => array($this, 'paginaPagarMultas')
			),
			array(
				'allow',
				'actions' => ['acta_reparo', 'acta_reparo_deberes_formales', 'descargar_declaracion', 'comprobante_pago_mensual', 'lista_pago'],
				'expression' =>[$this, 'permitir_empresa_y_analista']
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}

	/**
	 * Iniciar Declaración
	 */
	public function actionIndex(){
		$this->redirect(Yii::app()->homeUrl."declaracion/consulta");
	}


	// Página donde se efectuara las declaraciones
	// Esta página es la continuación de "actionIndex", que ahora mostrará "declaracion-2"
	public function actionPago(){
		Yii::import('application.controllers.FuncionesController');

		$id_empresa = Yii::app()->user->id;
		
		$model  = SidcaiAportante::model()->findByPk($id_empresa);
		$model2 = SidcaiRepresentantelegal::model()->findByPk(Yii::app()->user->id_representante);
		$model4 = new SidcaiDeclaracionDetalle;

		/** 
		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_empresa),
				'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;
		}


		// Se usa para obtener los valores y realizar operaciones
		$declaracion = SidcaiDeclaracioncti::model()->find(
			array(
				'condition' => "apor_codigo_fk = :apor_codigo_fk AND decl_tipodeclaracion != 'M'",
				'params' => array(':apor_codigo_fk' => $id_empresa),
				'order' => 'decl_codigo_pk DESC',
				'limit' => 1
			)
		);

		$codigo_declaracion = $declaracion->decl_codigo_pk;

		$date = new DateTime("now", new DateTimeZone('America/Caracas')); 
		$hoy  = $date->format("Y-m-d");

		$datos = [];

		// Obtiene el valor del PETRO
		$valor_petro = FuncionesController::obtenerValorPetro();

		$declaraciones = FuncionesController::obtenerDeclaraciones($codigo_declaracion, $id_empresa);

		$pagosMensuales = SidcaiDeclaracioncti::model()->findAll(
			array(
				'condition' => "apor_codigo_fk = :apor_codigo_fk AND
					decl_tipodeclaracion = 'M' AND
					esta_codigo_fk = 1003 AND
					decl_fechainicio_base >= :fecha_inicial AND
					decl_fechafin_base <= :fecha_final",
				'params' => array(
					':apor_codigo_fk' => $id_empresa,
					':fecha_inicial' => $declaraciones['fecha_inicial'],
					':fecha_final' => $declaraciones['fecha_final']
				),
			)
		);

		$moneda_hoy = FuncionesController::obtenerMoneda($hoy);

		if($declaraciones['tiene_multa_formal']){
			$datos['multas_a_pagar'] = $this->multas_a_pagar($declaraciones['array_declaraciones_multa']);
			$datos['monto_multa_formal'] = $moneda_hoy." ".number_format(FuncionesController::obtenerMontosMultaFormal($declaraciones['array_declaraciones_multa']), 2, ',', '.');
		}

		/******************************************
		**
		**		Datos de la Declaración 	
		**
	  	*******************************************/
		$datos_decl = SidcaiDeclaracioncti::model()->findByPk($codigo_declaracion); // Se usa solo para mostrar los datos
		$datos_declaracion = $this->mostrarDatosDeclaracion($datos_decl);
		$datos['codigo_declaraciones']=$codigo_declaracion;
		$datos['tabla_detalles'] = $this->tablaDetallesDeclaracion($declaraciones);
		$datos['tabla_pagos_mensuales'] = $this->tablaPagosMensuales($pagosMensuales);
		/*****************************************************
						FIN DATOS DECLARACIÓN
		*******************************************************/

		$fecha_fin = date("Y-m-d",strtotime($declaracion->decl_fechafin." +".$declaracion->decl_dias_prorroga." day"));
		


		// rutina para evitar que ciertas declaraciones tenga intereses de mora 

		
		$agregardosmeses=false;	

		if(strtotime($declaracion->decl_fechadeclaracion) >= strtotime('2020-12-31') && strtotime($declaracion->decl_fechadeclaracion) <= strtotime('2021-06-31')){
			
			$fecha_cierre = explode("-", $declaracion->decl_fechafin_base);
			$dia_cierre = $fecha_cierre[2];
			$mes_cierre = $fecha_cierre[1];
			$anio_cierre = $fecha_cierre[0];
			if(
				($anio_cierre=='2020' && $mes_cierre=='12') 
				|| ($anio_cierre=='2021' && $mes_cierre=='01')
				|| ($anio_cierre=='2021' && $mes_cierre=='02')
				|| ($anio_cierre=='2021' && $mes_cierre=='03')
				|| ($anio_cierre=='2021' && $mes_cierre=='04')
				|| ($anio_cierre=='2021' && $mes_cierre=='05')
				|| ($anio_cierre=='2021' && $mes_cierre=='06')

			)
			{	
	
					$fecha_fin_declarar = FuncionesController::convertirFecha($declaracion->decl_fechafin, "yyyy-mm-dd");
					$fecha_fin_declarar=  new DateTime($fecha_fin_declarar);
					$fecha_fin_declarar = FuncionesController::addMonths($fecha_fin_declarar, +2);
					$fecha_fin_declarar = $fecha_fin_declarar->format('Y-m-d');
					$fecha_fin_declarar = date('Y-m-d', strtotime($fecha_fin_declarar."+1 day")); 					

					$agregardosmeses=true;

					if(strtotime(date('Y-m-d') > strtotime($fecha_fin_declarar))){

	
						$declaracionIsrl = SidcaiRecaudo::model()->findAll(
								array(
									'condition' => 'apor_codigo_fk = :apor_codigo_fk AND tipo_codigo_fk= :tipo_codigo_fk',
									'params' => array(
										':apor_codigo_fk' => $declaracion->apor_codigo_fk,
										':tipo_codigo_fk' =>3
									),
									'order'=>'reca_codigo_pk desc'
								)
						);


						if($declaracionIsrl){
							if(substr_count($declaracionIsrl[0]->reca_direccion,'renovar')>0){
								$documento=explode('-',$declaracionIsrl[0]->reca_direccion);
								$fecha_isrl = $documento[2].'-'.$documento[3].'-'.$documento[4];
								if(!(strtotime($fecha_isrl) <= strtotime('2021-06-31'))){
									$agregardosmeses=false;
								}							
							}else{
								if(!(strtotime($model->apor_fechahoraregistro) >= strtotime('2020-12-31 00:00:00+00') && strtotime($model->apor_fechahoraregistro) <= strtotime('2021-06-30 23:59:59+00')))
									$agregardosmeses=false;
							}						
					}
					
				}
			}
		}



		// quitarle al if $agregardosmeses al finalizar agosto

		/*if(!$agregardosmeses && strtotime($hoy) > strtotime($fecha_fin)){
	
				$fecha_hora_registro = FuncionesController::convertirFecha($model->apor_fechahoraregistro, 'yyyy-mm-dd', false);
				$parametro = SidcaiParametro::model()->find();
			
				// si desean poner una feha de prorroga
				//if(strtotime($fecha_hora_registro) > strtotime($parametro->para_fecha_tope_prorroga) && ($datos_decl->esta_codigo_fk!=1008 && $datos_decl->esta_codigo_fk!=1011)){
					// Sí el monto de los intereses moratorios cambian
				
				if($datos_decl->esta_codigo_fk!=1008 && $datos_decl->esta_codigo_fk!=1011){
					$revisar_multas = FuncionesController::revisarInteresesMulta($declaraciones, $id_empresa);
				}
		}*/

		// Sí el monto de los intereses moratorios cambian
		//$revisar_multas = FuncionesController::revisarInteresesMulta($declaraciones, $id_empresa);

		/***************************************************************************
					Montos
		********************************************************/
		// Monto Requerido TOTAL
		$datos['monto_requerido_total'] = FuncionesController::obtenerMontoRequerido($declaraciones, $id_empresa);

		$total_a_aportar = FuncionesController::obtenerMontoFaltante($declaraciones, $id_empresa);
		/* var_dump($total_a_aportar);exit; */

		/***************************************************************************
					Datos Modal y tooltip
		********************************************************/
		// Monto aportar.
		$datos['monto_aportar'] = number_format($total_a_aportar, 2, ',','.');

		$datos['tooltip_monto_aportar'] = "<span data-petro='".number_format(($total_a_aportar / $valor_petro), 8, ",", ".")."'>".number_format($total_a_aportar, 2, ",", ".")."</span>";

		// Tooltip Dirección Aportante
		if(strlen($model->apor_direccion) >= 50){
			$model->apor_direccion = "<span data-tooltip='".$model->apor_direccion."'>".substr($model->apor_direccion, 0, 50);
			$model->apor_direccion .= '...</span>';
		}

		// Tooltip Descripción CIIU
		/*if(strlen($model->ciiuCodigoFk->ciiu_descripcion) >= 50){
			$model->ciiuCodigoFk->ciiu_descripcion = "<span data-tooltip='".$model->ciiuCodigoFk->ciiu_descripcion."'>".substr($model->ciiuCodigoFk->ciiu_descripcion, 0, 50);
			$model->ciiuCodigoFk->ciiu_descripcion .= '...</span>';
		}*/

		// Tooltip Dirección Representante
		if(strlen($model2->repr_direccion) >= 50){
			$model2->repr_direccion = "<span data-tooltip='".$model2->repr_direccion."'>".substr($model2->repr_direccion, 0, 50);
			$model2->repr_direccion .= '...</span>';
		}

		/***************************************************************************
					Scenario de validación
		********************************************************/
		$model3 = new SidcaiDeclaracioncti("validarPago");

		// Permite modificar el monto si no es un pago extemporaneo.
		$readOnly = "";

		if($declaraciones['cantidad_pagos'] == 2 || $declaraciones['tiene_multa'])
			$readOnly = "readOnly";

		$this->performAjaxValidation($model3, 'agregar-pago-form');

		if(isset($_POST['SidcaiDeclaracioncti'])){
			$declarar = $this->declarar($model3, $_POST['SidcaiDeclaracioncti'], $codigo_declaracion, $id_empresa);

			if($declarar[0] == "success" || $declarar[0] == "warning_multas"){
				Yii::app()->user->setState($declarar[0], $declarar[1]);
				$this->redirect(Yii::app()->homeUrl. "declaracion/consulta");
			}else{
				Yii::app()->user->setFlash($declarar[0], $declarar[1]);
			}

			$this->refresh();
		}

		$this->render('declaracion-2',
			array(
				'model' => $model,
				'model2' => $model2,
				'model3' => $model3,
				'model4' => $model4,
				'declaraciones' => $declaraciones,
				'datos_declaracion' => $datos_declaracion,
				'datos' => $datos,
				'readOnly' => $readOnly,
				'pagosMensuales' => $pagosMensuales
			)
		);
	}

	/**
	 * Descarga los datos de la declaración en PDF
	 */
	public function actionDescargar_declaracion(int $id){
		if(is_numeric($id)){
			// Se busca la declaración
			$declaracion = SidcaiDeclaracioncti::model()->findByPk($id);
			if($declaracion != null){
				$permitir_personal_fonacit = false;

				if(Yii::app()->user->hasState('nivel_acceso')){
					if(Yii::app()->user->getState('nivel_acceso') == 2)
						$permitir_personal_fonacit = true;
					else
						$this->redirect(Yii::app()->homeUrl);
				}else{
					if(Yii::app()->user->id)
						$id_empresa = Yii::app()->user->id;
					else
						$this->redirect(Yii::app()->homeUrl);
				}

				Yii::import('application.controllers.FuncionesController');

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

				$datos['hoy'] = $hoy;

				$ingresos_brutos = "";
				$monto_requerido = "";
				$monto_aportado = "";
				$monto_faltante = "";

				$datos['ingresos_brutos'] = FuncionesController::obtenerMoneda($declaracion->decl_fechafin_base) ." ". number_format($declaracion->decl_ingresosbrutos, 2, ',', '.');

				$datos['monto_requerido'] = FuncionesController::obtenerMoneda($declaracion->decl_fechadeclaracion) . " " .number_format($declaracion->decl_montorequerido, 2, ',', '.');

				$datos['monto_faltante'] = FuncionesController::reconversion($declaracion->decl_fechadeclaracion, ($declaracion->decl_montorequerido - $declaracion->decl_montoaportado));
				

				$datos['monto_aportado'] = FuncionesController::obtenerMoneda($declaracion->decl_fechadeclaracion) . " " .number_format($declaracion->decl_montoaportado, 2, ',', '.');

				$datos['monto_faltante'] = FuncionesController::obtenerMoneda($hoy)." ".number_format($datos['monto_faltante'], 2, ",", ".");
				//lm nuevo
				//$datos['monto_faltante'] = FuncionesController::obtenerMonedaNew($date->format('Y-m-d'))." ".number_format($datos['monto_faltante'], 2, ",", ".");

				$datos['declaracion'] = $declaracion;

				$datos['empresa'] = SidcaiAportante::model()->findByPk($declaracion->apor_codigo_fk);
				$datos['representante'] = SidcaiRepresentantelegal::model()->findByPk($datos['empresa']->repr_codigo_fk);
				

				$mPDF = Yii::app()->ePdf->mpdf('', 'Letter');

				$titulo = "DECLARACIÓN - ".$declaracion->decl_codigo_pk;

		        $mPDF->SetTitle($titulo);
                $htmlHeader = "<div><img src='images/cintillo.jpg' height='100%'></div>";
		        $mPDF->SetHtmlHeader($htmlHeader);
		        $mPDF->setAutoTopMargin = true;

		        $mPDF->SetWatermarkImage('/images/marca_agua_2.png');
				$mPDF->showWatermarkImage = true;
				$mPDF->watermarkImageAlpha = 0.1;

			    $texto = $this->renderPartial('_descargar-detalles-declaracion', ['datos' => $datos], true);

		        $mPDF->WriteHTML($texto);
			    $mPDF->Output($titulo, "I");
			}else{
				$this->redirect(Yii::app()->homeUrl);
			}
		}else{
			$this->redirect(Yii::app()->homeUrl);
		}
	}

	private function mostrarDatosDeclaracion($declaracion) : array{
		$date = new DateTime("now", new DateTimeZone('America/Caracas')); 
		$hoy  = $date->format("Y-m-d");

		$datos_declaracion = [];
		$datos_declaracion['datos_declaracion'] = $declaracion;

		// Periodo Gravable
		$inicio_gravable = FuncionesController::convertirFecha($declaracion->decl_fechainicio_base, "dd/mm/yyyy");
		$fin_gravable 	 = FuncionesController::convertirFecha($declaracion->decl_fechafin_base, "dd/mm/yyyy");
		$datos_declaracion['periodo_gravable'] = $inicio_gravable." - ".$fin_gravable;

		// Periodo a Declararar y Pagar
		$inicio_declarar = FuncionesController::convertirFecha($declaracion->decl_fechainicio, "dd/mm/yyyy");
		$fin_declarar 	 = FuncionesController::convertirFecha($declaracion->decl_fechafin, "dd/mm/yyyy");
		$datos_declaracion['periodo_declarar'] = $inicio_declarar." - ".$fin_declarar;

		// Ingresos Brutos 
		$datos_declaracion['ingresos_brutos'] = number_format($declaracion->decl_ingresosbrutos, 2, ",", ".");

		// Unidad Tributaria
		$unidad_tributaria = FuncionesController::obtenerUT($declaracion->decl_fechainicio_base, $declaracion->decl_fechafin_base);

		// Ingresos Brutos Anio Base en UT
		$ingresos_brutos_anio_base_ut = $declaracion->decl_ingresosbrutos / $unidad_tributaria;
		$datos_declaracion['ingresos_brutos_anio_base_ut'] = number_format($ingresos_brutos_anio_base_ut, 2, ",", ".");

		// Valor Unidad tributaria
		$datos_declaracion['valor_unidad_tributaria'] = number_format($unidad_tributaria, 2, ",", ".");

		// Moneda
		$datos_declaracion['moneda'] = FuncionesController::obtenerMoneda($declaracion->decl_fechafin_base);

		// Moneda con la cual la empresa tiene que pagar.
		$datos_declaracion['moneda_actual'] = FuncionesController::obtenerMoneda($hoy);

		// Monto Aportar
		$datos_declaracion['monto_aportar'] = number_format(FuncionesController::reconversion($declaracion->decl_fechadeclaracion, $declaracion->decl_montorequerido), 2, ",", ".");

		$datos_declaracion['credito_fiscal'] = null;

		// Se busca si tiene crédito fiscal
		$buscar_credito = SidcaiCreditoFiscal::model()->find([
			'condition' => '(apor_codigo_fk = :apor_codigo_fk AND cred_habilitado = :cred_habilitado) OR (apor_codigo_fk = :apor_codigo_fk AND decl_codigo_fk_destino = :decl_codigo_fk_destino)',
			'params' => [
				':apor_codigo_fk' => Yii::app()->user->id,
				':cred_habilitado' => TRUE,
				':decl_codigo_fk_destino' => $declaracion->decl_codigo_pk,
			]
		]);

		if($buscar_credito != null){
			$datos_declaracion['credito_fiscal'] = $buscar_credito;
			$monto_credito_fiscal = FuncionesController::reconversion($buscar_credito->cred_fecha, $buscar_credito->cred_monto);

			$datos_declaracion['monto_credito_fiscal'] = bcdiv($monto_credito_fiscal, '1', 2);
			
		}

		return $datos_declaracion;
	}


	/**
	 * Vista donde el Aportante podrá pagar sus multas.
	 */
	public function actionPagar_multas(){
		$declaracion = SidcaiDeclaracioncti::model()->find(
			array(
				'condition' => 'apor_codigo_fk = :apor_codigo_fk',
				'params' => array(':apor_codigo_fk' => Yii::app()->user->id),
				'order' => 'decl_codigo_pk DESC',
				'limit' => 1
			)
		);

		if($declaracion == null){
			$this->redirect(Yii::app()->homeUrl);
		}

		$id_empresa = Yii::app()->user->id;
		$date = new DateTime("now", new DateTimeZone('America/Caracas')); 
		$hoy = $date->format('Y-m-d');

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

		$declaraciones = FuncionesController::obtenerDeclaraciones($declaracion->decl_codigo_pk, $id_empresa);
		$monto_requerido = FuncionesController::obtenerMontoRequeridoMultaFormal($declaraciones['array_declaraciones_multa_string']);

		$model = new SidcaiDeclaracionMultaDetalle;

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

		if(isset($_POST['SidcaiDeclaracionMultaDetalle'])){
			$pagar_multas = $this->pagar_multas($model, $_POST['SidcaiDeclaracionMultaDetalle'], $array_declaraciones_multa, $codigo_declaracion);
			if($pagar_multas[0] == "success"){
				Yii::app()->user->setState($pagar_multas[0], $pagar_multas[1]);
				$this->redirect(Yii::app()->homeUrl. "declaracion/consulta");
			}else{
				Yii::app()->user->setFlash($pagar_multas[0], $pagar_multas[1]);
			}
		}

		$moneda_actual = FuncionesController::obtenerMoneda($hoy);

		$multas = SidcaiDeclaracionMulta::model()->findAll([
			'condition' => 'codigo_declaraciones = :codigo_declaraciones AND mult_codigo_fk != :mult_codigo_fk AND  mult_habilitada = :mult_habilitada',
			'params' => [
				':codigo_declaraciones' => $declaraciones['array_declaraciones_string'], 
				':mult_codigo_fk' => 1,
				':mult_habilitada' => TRUE
			]
		]);

		$total_multa_formal = 0.00;

		foreach($multas as $m){
			$total_multa_formal += $m->decl_mult_monto;
		}

		$total_multa_formal = FuncionesController::reconversion($declaracion->decl_fechadeclaracion, $total_multa_formal);
		$total_multa_formal = number_format($total_multa_formal, 2, ".", "");

		// Monto Aportado 
		$detalles_montos_aportados = SidcaiDeclaracionMultaDetalle::model()->findAll([
			'condition' => 'codigo_declaraciones = :codigo_declaraciones AND apor_codigo_fk = :apor_codigo_fk AND multa_formal = :multa_formal AND mult_pago_aceptado = :mult_pago_aceptado',
			'params' => [
				':codigo_declaraciones' => $declaraciones['array_declaraciones_string'],
				':apor_codigo_fk' => Yii::app()->user->id,
				':multa_formal' => true,
				':mult_pago_aceptado' => true
			]
		]);

		$monto_aportado = 0.00;
		$monto_faltante = 0.00;

		if($detalles_montos_aportados != null){
			foreach($detalles_montos_aportados as $dma){
				$monto_aportado += FuncionesController::reconversion($declaracion->decl_fechadeclaracion, $dma->mult_deta_monto);
			}

		}

		$monto_faltante = $total_multa_formal - $monto_aportado;

		$valor_petro = FuncionesController::obtenerValorPetro();
		$monto_petro = bcdiv($monto_faltante/$valor_petro, '1', 8);
		$tooltip_petro = $moneda_actual ." <span data-petro='".$monto_petro."'>".number_format($monto_faltante, 2, ",", ".")."</span>";

		$monto_faltante = number_format($monto_faltante, 2, ",", ".");

		$this->render("pagar-multas", 
			array(
				'declaracion' => $declaracion,
				'multas_a_pagar' => $this->multas_a_pagar($declaraciones['array_declaraciones_multa_string']),
				'model' => $model,
				'moneda_actual' => $moneda_actual,
				'monto_faltante' => $monto_faltante,
				'tooltip_petro' => $tooltip_petro,
				'declaraciones' => $declaraciones
			)
		);
	}

	/**
	 * Realiza el PDF del acta de reparo que se emite al crear una declaración que tiene declaraciones relacionadas que estan atrasadas.
	 */
	private function acta_reparo_recaudacion($id_declaracion){
		//var_dump('qlq');exit; 
		$declaracion = SidcaiDeclaracioncti::model()->find([
			'select' => 'decl_codigo_pk, apor_codigo_fk, decl_fechadeclaracion, decl_fechafin, decl_dias_prorroga, esta_codigo_fk, decl_tipodeclaracion',
			'condition' => 'decl_codigo_pk = :decl_codigo_pk AND (esta_codigo_fk != :estatus_1 AND esta_codigo_fk != :estatus_2)',
			'params' => [
				':decl_codigo_pk' => $id_declaracion,
				':estatus_1' => 1005,
				':estatus_2' => 1009,
			]
		]);

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


		if($declaracion != null){	
			
			$id_empresa = $declaracion->apor_codigo_fk;

			Yii::import('application.controllers.FuncionesController');

			$declaraciones = FuncionesController::obtenerDeclaraciones($id_declaracion, $id_empresa);
            /*echo "<pre>";
			print_r($declaraciones);
			echo "<pre>";
			die();*/
			
			// Esta acta solo se emite cuando halla una declaración con multa.

			/*if($declaraciones['tiene_multa'] == false){
				$this->redirect(Yii::app()->homeUrl);
			}*/


			$permitir_personal_fonacit = false;

			if(Yii::app()->user->hasState('nivel_acceso')){
				if(Yii::app()->user->getState('nivel_acceso') == 2)
					$permitir_personal_fonacit = true;
			}

			$aportante = SidcaiAportante::model()->find([
				'select' => 'apor_codigo_pk, apor_rif, apor_razonsocial, repr_codigo_fk, apor_direccion',
				'condition' => 'apor_codigo_pk = :apor_codigo_pk',
				'params' => [':apor_codigo_pk' => $id_empresa]
			]);

			// Se valida que solo pueda ingresar el aportante que le pertenece esa declaración o una personal de FONACIT.
			if($declaracion->apor_codigo_fk != $id_empresa)
				$this->redirect(Yii::app()->homeUrl);
			else{	
				$datos = [];  
				date_default_timezone_set('America/Caracas');
				// Unix
				setlocale(LC_TIME, 'es_VE.utf8');
				// En windows
				//setlocale(LC_TIME, 'spanish');

				$fd = explode("-", $declaracion->decl_fechadeclaracion);

				$datos['acta_reparo_n'] 	= $fd[1].$fd[0]."-".$aportante->apor_rif;
				$datos['apor_razonsocial'] 	= $aportante->apor_razonsocial;
				$datos['apor_rif'] 			= $aportante->apor_rif;
				$datos['repr_nombre'] 		= $aportante->reprCodigoFk->repr_nombres." ".$aportante->reprCodigoFk->repr_apellidos;
				$datos['repr_documento'] 	= $aportante->reprCodigoFk->repr_documento;
				$datos['apor_direccion'] 	= $aportante->apor_direccion;

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

				$date = new DateTime("now", new DateTimeZone('America/Caracas'));
				$hoy = $date->format('Y-m-d');

				$string_declaraciones = "";
				$string_declaraciones_multa = "";
				$monto_multa_material = 0.00;
				$monto_aporte = 0.00;

				$monto_total = 0.00;// Suma de todos los montos.

				$ejercicios_fiscales = [];

				$array_declaraciones_multa = [];

				$monto_intereses = 0.00;

				for($i = 0; $i < $declaraciones['cantidad_declaraciones']; $i++){
					$decl = SidcaiDeclaracioncti::model()->find([
						'select' => 'decl_fechainicio_base, decl_fechafin_base, decl_montorequerido, decl_fechadeclaracion, decl_fechafin, decl_dias_prorroga',
						'condition' => 'decl_codigo_pk = :decl_codigo_pk',
						'params' => [
							':decl_codigo_pk' => $declaraciones['declaraciones'][$i]->decl_codigo_pk
						]
					]);

					$inicio = FuncionesController::convertirFecha($decl->decl_fechainicio_base, 'dd/mm/yyyy');
					$fin = FuncionesController::convertirFecha($decl->decl_fechafin_base, 'dd/mm/yyyy');

					$ejercicios_fiscales[] = [
						'inicio' => $inicio, 
						'fin' => $fin];

					if($i != ($declaraciones['cantidad_declaraciones'] - 1))
						$string_declaraciones .= " ".$inicio.' - '.$fin.',';
					else{
						$string_declaraciones = substr($string_declaraciones, 0, -1);
						$string_declaraciones .= ' y '.$inicio.' - '.$fin;
					}
				}

				// String de los periodos con multas
				for($i = 0; $i < count($declaraciones['array_declaraciones_multa']); $i++){
					$decl = SidcaiDeclaracioncti::model()->find([
						'select' => 'decl_fechainicio_base, decl_fechafin_base, decl_montorequerido, decl_fechadeclaracion, decl_fechafin, decl_dias_prorroga',
						'condition' => 'decl_codigo_pk = :decl_codigo_pk',
						'params' => [
							':decl_codigo_pk' => $declaraciones['declaraciones'][$i]->decl_codigo_pk
						]
					]);

					$inicio = FuncionesController::convertirFecha($decl->decl_fechainicio_base, 'dd/mm/yyyy');
					$fin = FuncionesController::convertirFecha($decl->decl_fechafin_base, 'dd/mm/yyyy');

					if($i != (count($declaraciones['array_declaraciones_multa']) - 1))
						$string_declaraciones_multa .= " ".$inicio.' - '.$fin.',';
					else{
						$string_declaraciones_multa = substr($string_declaraciones_multa, 0, -1);
						$string_declaraciones_multa .= ' y '.$inicio.' - '.$fin;
					}
				}

				$datos['string_declaraciones'] = $string_declaraciones;
				$datos['string_declaraciones_multa'] = $string_declaraciones_multa;

				// Intereses Moratorios
				$multa_interes = FuncionesController::detallesInteresesMoratoriosActa($declaraciones['array_declaraciones_multa'], true);

				for($i = 0; $i < count($declaraciones['array_declaraciones_multa']); $i++){
					if(array_key_exists($declaraciones['array_declaraciones_multa'][$i], $multa_interes))
						$monto_intereses += $multa_interes[$declaraciones['array_declaraciones_multa'][$i]];
				}

				$monto_intereses = bcdiv($monto_intereses, '1', 2);

				// Multa Material
				$multa_material = FuncionesController::detallesMultaMaterial($declaraciones['array_declaraciones_multa'], true);

				for($i = 0; $i < count($declaraciones['array_declaraciones_multa']); $i++){
					if(array_key_exists($declaraciones['array_declaraciones_multa'][$i], $multa_material))
						$monto_multa_material += $multa_material[$declaraciones['array_declaraciones_multa'][$i]];
				}

				$monto_multa_material = bcdiv($monto_multa_material, '1', 2);

				//TODO: revisión pendiente.
				//$monto_aporte = FuncionesController::reconversion(false,FuncionesController::obtenerMontoAporte($declaraciones['array_declaraciones'], true));
				//lm nuevo
				$monto_aporte = FuncionesController::reconversion($decl->decl_fechadeclaracion,FuncionesController::obtenerMontoAporte($declaraciones['array_declaraciones'], true));

				/* var_dump($monto_aporte);exit; */
				$monto_total = $monto_aporte + $monto_multa_material + $monto_intereses;

				$periodo_desde = explode("/", $ejercicios_fiscales[0]['inicio']);	
				$datos['periodo_desde'] = $periodo_desde[2];

				$periodo_hasta = explode("/", $ejercicios_fiscales[count($ejercicios_fiscales) - 1]['fin']);
				$datos['periodo_hasta'] = $periodo_hasta[2];

				$datos['cantidad_periodos'] = $declaraciones['cantidad_declaraciones'];
				$datos['cantidad_periodos_letras'] = mb_strtoupper(FuncionesController::cifras_en_letras($declaraciones['cantidad_declaraciones'], false));

				if($declaracion->esta_codigo_fk == 1004 || $declaracion->esta_codigo_fk == 1003){
					$datos['consulta'] = true;
					$moneda = FuncionesController::obtenerMoneda($declaracion->decl_fechadeclaracion);
				}else{
					$datos['consulta'] = false;
					$moneda = FuncionesController::obtenerMoneda($hoy);
				}

				$datos['monto_intereses'] 		= $moneda. " ".number_format($monto_intereses, 2, ",", ".");
				$datos['monto_multa_material'] 	= $moneda.' '.number_format($monto_multa_material, 2, ',', '.');
				$datos['monto_aporte'] 			= $moneda.' '.number_format($monto_aporte, 2, ',', '.');
				$datos['monto_total'] 			= 'BsD. '. number_format($monto_total, 2, ",", ".");

				$datos['moneda'] = $moneda;
				$datos['fiscalizacion'] = false;

				if($declaracion->decl_tipodeclaracion=='O'){
				  $datos['tabla'] = $this->tabla_montos_detalles($datos, $declaraciones);
				}else{
				  $datos['tabla'] = $this->tabla_montos_detalles_mensual($datos, $declaraciones);
				}

				//die();

				/*echo "<pre>";
				print_r($datos['tabla']);
				echo "<pre>";
				die();*/

				

				// Se agarra la fecha del último interes moratorio (puede existir el caso de que la última declaración pasó a extemporanea y ahora tiene multas e intereses).
				$buscar_ultima_fecha = SidcaiMultaInteres::model()->find([
					'condition' => 'decl_codigo_fk = :decl_codigo_fk AND mult_habilitada = :mult_habilitada',
					'params' => [
						':decl_codigo_fk' => $declaraciones['id_ultima_declaracion'],
						':mult_habilitada' => TRUE
					]
				]);

				if($buscar_ultima_fecha != null)
					$datos['fecha'] = strftime("%d de %B de %Y", strtotime($buscar_ultima_fecha->fecha_registro));
				else
					$datos['fecha'] = strftime("%d de %B de %Y", strtotime($declaracion->decl_fechadeclaracion));


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

		        $fecha_declaracion = $declaracion->decl_fechadeclaracion;

				// Datos presidente
				$sql = "SELECT * FROM sidcai_firma_presidente WHERE :fecha >= firm_inicio_periodo AND :fecha <= firm_fin_periodo ORDER BY firm_codigo_pk ASC LIMIT 1";
			    $command = $connection->createCommand();
			    $command->text = $sql;
			    $command->bindParam(':fecha', $fecha_declaracion);
			    $model = $command->queryRow();

				//$imagen_firma = Yii::app()->request->baseUrl."/".$model['firm_ruta'];
                $imagen_firma = $model['firm_ruta'];
				$datos['nombre_presidente'] = mb_strtoupper($model['firm_nombre']);
				$datos['cargo_presidente'] = mb_strtoupper($model['firm_cargo']);
				$datos['gaceta_presidente'] = nl2br($model['firm_gaceta']);
				$datos['imagen_firma'] = $imagen_firma;	

				$mPDF = Yii::app()->ePdf->mpdf('', 'Letter');

				$titulo = "ESTADO DE CUENTA - ".$declaraciones['id_ultima_declaracion'];

		        $mPDF->SetTitle($titulo);
		        //$htmlHeader = "<div><img src='https://i92.servimg.com/u/f92/19/77/04/53/cintil10.jpg' height='100%'></div>";
                        $htmlHeader = "<div><img src='images/cintillo.jpg' height='100%'></div>";
		        $mPDF->SetHtmlHeader($htmlHeader);
		        $mPDF->setAutoTopMargin = true;

		        // Plantilla del acta a utilizar.
		        $sql = "SELECT * FROM sidcai_plantilla_pdf WHERE :fecha <= plan_finalizacion AND nombre_plantilla_fk = 1 ORDER BY plan_codigo_pk ASC LIMIT 1";
			    $command = $connection->createCommand();
			    $command->text = $sql;
			    $command->bindParam(':fecha', $fecha_declaracion);
			    $model = $command->queryRow();
                if($declaracion->decl_tipodeclaracion=='O'){
			    $texto = $model['plan_texto'];}
				else{
				$texto = $model['plan_texto_mensual'];}

			    $buscar = [];
			    $reemplazar = [];

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

			    foreach($datos as $key => $value){
			    	array_push($buscar, "{{".$key."}}");
			    	array_push($reemplazar, $value);
			    }

		        $texto =  str_replace($buscar, $reemplazar, $texto);

				//print_r($texto);die();

		        $mPDF->WriteHTML($texto);
			    $mPDF->Output($titulo, "I");
			}
		}else{
			$this->redirect(Yii::app()->homeUrl);
		}
	}

	/**
	 * Realiza el PDF la lista del pago mensual
	 */
	private function lista_pago($fecha_inicial, $fecha_final) {
		$id_empresa = $id_empresa = Yii::app()->user->id;
		$declaraciones = SidcaiDeclaracioncti::model()->findAll(
			array(
                'condition' => "decl_fechainicio>= :fecha_inicio AND decl_fechafin<= :fecha_fin AND apor_codigo_fk= :apor_codigo_fk AND decl_tipodeclaracion = 'M'", 
                'params' => [
                	':fecha_inicio' => $fecha_inicial,
                	':fecha_fin' => $fecha_final,
					':apor_codigo_fk' => $id_empresa
                ],
            )
		);
		if(count($declaraciones) > 0) {
			$meses_letras = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];
			Yii::import('application.controllers.FuncionesController');

			$aportante = SidcaiAportante::model()->find([
				'select' => 'apor_codigo_pk, apor_rif, apor_razonsocial, repr_codigo_fk, apor_direccion',
				'condition' => 'apor_codigo_pk = :apor_codigo_pk',
				'params' => [':apor_codigo_pk' => $id_empresa]
			]);

			$datos = [];
			date_default_timezone_set('America/Caracas');
			// Unix
			setlocale(LC_TIME, 'es_VE.utf8');
			// En windows
			//setlocale(LC_TIME, 'spanish');

			$datos['apor_razonsocial'] 	= $aportante->apor_razonsocial;
			$datos['apor_rif'] 			= $aportante->apor_rif;
			$datos['fecha_inicio'] 		= date('d/m/Y', strtotime($fecha_inicial));
			$datos['fecha_fin'] 		= date('d/m/Y', strtotime($fecha_final));
			$datos['fecha'] = date("d/m/Y", strtotime(date('Y-m-d')));
			$datos['tabla'] = '';
			foreach($declaraciones as $declaracion) {
				$moneda = FuncionesController::obtenerMoneda($declaracion->decl_fechadeclaracion);
				$monto = number_format($declaracion->decl_montorequerido, 2, ",", ".");
				$monto = $moneda." ".$monto;
				$fecha_aporte = explode("-", $declaracion->decl_fechainicio);
				$fecha_tope = date("Y-m-d", strtotime($declaracion->decl_fechafin_base." + 15 day"));
				$split_fecha_tope = explode("-", $fecha_tope);
				// print_r($fecha_aporte);
				// exit();
				$datos['tabla'] .= '
				<tr>
				  <td scope="col" style="text-align:center;">'.$meses_letras[$fecha_aporte[1]-1].' - '.$fecha_aporte[0].'</td>
				  <td scope="col" style="text-align:center;">'.$declaracion->decl_codigo_pk.'</td>
				  <td scope="col" style="text-align:center;">'.$monto.'</td>
				  <td scope="col" style="text-align:center;">15/'.$split_fecha_tope[1]."/".$split_fecha_tope[0].'</td>
				  <td scope="col" style="text-align:center;">'.$declaracion->estaCodigoFk->esta_nombre.'</td>
				</tr>';
			}

			$mPDF = Yii::app()->ePdf->mpdf('', 'Letter');

			$titulo = "Declaracion estimada anual";

			$mPDF->SetTitle($titulo);
			//$htmlHeader = "<div><img src='https://i92.servimg.com/u/f92/19/77/04/53/cintil10.jpg' height='100%'></div>";
			$htmlHeader = "<div><img src='images/cintillo.jpg' height='100%'></div>";
			$mPDF->SetHtmlHeader($htmlHeader);
			$mPDF->setAutoTopMargin = true;


			$texto = '
			<div>
			<table border="1" cellpadding="12" style="border: 1px; border-collapse: collapse; width: 100%; font-size: 10px;">
				<thead>
						<tr>
						<th scope="col" style="text-align:center;" colspan="4">FONACIT</th>
						</tr>
				</thead>
				<tbody>
					<tr>
						<td>Razón social:</td>
						<td>{{apor_razonsocial}}</td>
						<td>Fecha:</td>
						<td>{{fecha}}</td>
					</tr>
					<tr>
						<td>RIF:</td>
						<td colspan="3">{{apor_rif}}</td>
					</tr>
				</tbody>
			</table>
			<p style="text-align: center"><b>Declaración estimada anual {{fecha_inicio}} al {{fecha_fin}}</b></p>
				<table border="1" cellpadding="12" style="border: 1px; border-collapse: collapse; width: 100%; font-size: 10px;">
					<thead>
						  <tr>
							<th scope="col" style="text-align:center;" width="20%">Mes</th>
							<th scope="col" style="text-align:center;" width="20%">Código</th>
							<th scope="col" style="text-align:center;" width="20%">Aporte Requerido</th>
							<th scope="col" style="text-align:center;" width="20%">Fecha Tope Pago</th>
							<th scope="col" style="text-align:center;" width="20%">Estatus</th>
						  </tr>
					</thead>
					<tbody>
						{{tabla}}
					</tbody>
				</table>
			</div>
			<style>
				#tabla-superior{
					border: 1px #000;
					border-collapse: collapse;
					margin: 15px;
				}
				#firma{
					width: 180px;
					height: 180px;
				}
			</style>
			<p align="justify"><br><br>Para mayor información con respecto a este aporte, por favor comuníquese por nuestros teléfonos: 0212-505.25.40, 0212-505.25.48 , 0212-5052693 y 0212-505.25.80</p>';

			$buscar = [];
			$reemplazar = [];

			foreach($datos as $key => $value){
				array_push($buscar, "{{".$key."}}");
				array_push($reemplazar, $value);
			}

			$texto =  str_replace($buscar, $reemplazar, $texto);

			$mPDF->WriteHTML($texto);
			$mPDF->Output($titulo, "I");


		}
	}

	/**
	 * Realiza el PDF del pago mensual
	 */
	private function comprobante_pago_mensual($pago){
		$pago = SidcaiDeclaracionDetalle::model()->findByPk($pago);

		if($pago != null && $pago->decl_pago_aceptado == 1) {

			$id_empresa = $pago->apor_codigo_fk;

			Yii::import('application.controllers.FuncionesController');

			$aportante = SidcaiAportante::model()->find([
				'select' => 'apor_codigo_pk, apor_rif, apor_razonsocial, repr_codigo_fk, apor_direccion',
				'condition' => 'apor_codigo_pk = :apor_codigo_pk',
				'params' => [':apor_codigo_pk' => $id_empresa]
			]);

			// Se valida que solo pueda ingresar el aportante que le pertenece esa declaración o una personal de FONACIT.
			if($pago->apor_codigo_fk != $id_empresa)
				$this->redirect(Yii::app()->homeUrl);
			else {
				$id_declaracion = max(explode(",", $pago->codigo_declaraciones));
				$declaracion = SidcaiDeclaracioncti::model()->findByPk($id_declaracion);
				$fecha_array = explode("-", $declaracion->decl_fechainicio_base);
				$mes = $fecha_array[1];
				$anio = $fecha_array[0];
				$datos = [];
				date_default_timezone_set('America/Caracas');
				// Unix
				setlocale(LC_TIME, 'es_VE.utf8');
				// En windows
				//setlocale(LC_TIME, 'spanish');
				$moneda = FuncionesController::obtenerMoneda($pago["decl_fechapago"]);
				$monto = number_format($pago->decl_monto, 2, ",", ".");
				$monto = $moneda." ".$monto;


				$fecha_aporte = FuncionesController::convertirFecha($pago->decl_fechapago, 'dd/mm/yyyy');

				$datos['apor_razonsocial'] 	= $aportante->apor_razonsocial;
				$datos['apor_rif'] 			= $aportante->apor_rif;

				$datos['fecha'] = date("d/m/Y", strtotime(date('Y-m-d')));
				$datos['deta_codigo_pk'] = $pago->deta_codigo_pk;
				$datos['tabla'] = '
				<tr>
				  <td scope="col" style="text-align:center;">'.$fecha_aporte.'</td>
				  <td scope="col" style="text-align:center;">'.$pago->decl_referencia.'</td>
				  <td scope="col" style="text-align:center;">'.implode(", ", explode(",", $pago->codigo_declaraciones)).'</td>
				  <td scope="col" style="text-align:center;">'.$monto.'</td>
				</tr>';
				$datos['cert_codigo_unico'] = $aportante->apor_rif.$anio.$mes.$id_declaracion;

				$mPDF = Yii::app()->ePdf->mpdf('', 'Letter');

				$titulo = "Comprobante pago - ".$pago->codigo_declaraciones;

		        $mPDF->SetTitle($titulo);
		        //$htmlHeader = "<div><img src='https://i92.servimg.com/u/f92/19/77/04/53/cintil10.jpg' height='100%'></div>";
                $htmlHeader = "<div><img src='images/cintillo.jpg' height='100%'></div>";
		        $mPDF->SetHtmlHeader($htmlHeader);
		        $mPDF->setAutoTopMargin = true;


				$texto = '
			<div>
			<table border="1" cellpadding="12" style="border: 1px; border-collapse: collapse; width: 100%; font-size: 10px;">
				<thead>
						<tr>
						<th scope="col" style="text-align:center;" colspan="4">FONACIT</th>
						</tr>
				</thead>
				<tbody>
					<tr>
						<td>Razón social:</td>
						<td>{{apor_razonsocial}}</td>
						<td>Fecha:</td>
						<td>{{fecha}}</td>
					</tr>
					<tr>
						<td>RIF:</td>
						<td colspan="3">{{apor_rif}}</td>
					</tr>
				</tbody>
			</table>
			<table border="1" cellpadding="12" style="border: 1px; border-collapse: collapse; width: 100%; font-size: 10px;">
				<tbody>
					<tr>
						<td style="width: 40%;"><b>Comprobante pago Aporte Mensual</b></td>
						<td><b>Código:</b> {{cert_codigo_unico}}</td>
					</tr>
				</tbody>
			</table>
				<table border="1" cellpadding="12" style="border: 1px; border-collapse: collapse; width: 100%; font-size: 10px;">
					<thead>
						  <tr>
							<th scope="col" style="text-align:center;" width="25%">Fecha Aporte</th>
							<th scope="col" style="text-align:center;" width="25%">Número Referencia</th>
							<th scope="col" style="text-align:center;" width="25%">Declaraciones asocidas</th>
							<th scope="col" style="text-align:center;" width="25%">Monto Aporte</th>
						  </tr>
					</thead>
					<tbody>
						{{tabla}}
					</tbody>
				  </table>
			</div>
			<style>
				#tabla-superior{
					border: 1px #000;
					border-collapse: collapse;
					margin: 15px;
				}
				#firma{
					width: 180px;
					height: 180px;
				}
			</style>
			<p align="justify"><br><br>Para mayor información con respecto a este aporte, por favor comuníquese por nuestros teléfonos: 0212-505.25.40, 0212-505.25.48 , 0212-5052693 y 0212-505.25.80</p>';

			    $buscar = [];
			    $reemplazar = [];

			    foreach($datos as $key => $value){
					array_push($buscar, "{{".$key."}}");
					array_push($reemplazar, $value);
			    }

		        $texto =  str_replace($buscar, $reemplazar, $texto);

		        $mPDF->WriteHTML($texto);
			    $mPDF->Output($titulo, "I");
			}
		}else{
			$this->redirect(Yii::app()->homeUrl);
		}
	}

	/**
	 * Tabla de los montos en el PDF de las actas
	 */
	private function tabla_montos_detalles(array $datos, array $declaraciones): string
	{
		$moneda = $datos['moneda'];
		$total_monto_aporte = 0.00;
		$total_monto_intereses = 0.00;
		$total_monto_multa_material = 0.00;

		$tabla = "";


		for ($i = 0; $i < $declaraciones['cantidad_declaraciones']; $i++) {
			$periodo_gravable = FuncionesController::convertirFecha($declaraciones['declaraciones'][$i]->decl_fechainicio_base, 'dd/mm/yyyy');
			$periodo_gravable .= "<br>" . FuncionesController::convertirFecha($declaraciones['declaraciones'][$i]->decl_fechafin_base, 'dd/mm/yyyy');


			//TODO: se aplico el siguiente cambio pasando la fecha al metodo reconversion para hacer pruebas.
			if ($declaraciones['declaraciones'][$i]->decl_fechainicio >= "2021-10-01") {
				$tbl_monto_aporte = FuncionesController::reconversion($declaraciones['declaraciones'][$i]->decl_fechainicio, $declaraciones['declaraciones'][$i]->decl_montorequerido);
			} else {
				//primer parametro false para que retorne siempre el ultimo valor de reconversion $declaraciones['declaraciones'][$i]->decl_fechadeclaracion -> false
				$tbl_monto_aporte = FuncionesController::reconversion(false, $declaraciones['declaraciones'][$i]->decl_montorequerido);
			}
			/* var_dump($tbl_monto_aporte);
			echo "<br>";
			echo "<br>"; */
			$total_monto_aporte += $tbl_monto_aporte;

			$tbl_monto_aporte = "<span class='float-left'>" . $moneda . "</span> <span class='float-right'>" . number_format($tbl_monto_aporte, 2, ",", ".") . "</span>";

			$tbl_monto_intereses = "<center>No Aplica</center>";
			$tbl_monto_multa_material = "<center>No Aplica</center>";

			$intereses = FuncionesController::detallesInteresesMoratoriosActa($declaraciones['array_declaraciones_multa'], true, $datos['fiscalizacion']);

			if (array_key_exists($declaraciones['declaraciones'][$i]->decl_codigo_pk, $intereses)) {
				$tbl_monto_intereses =  $moneda . " " . number_format($intereses[$declaraciones['declaraciones'][$i]->decl_codigo_pk], 2, ",", ".");
				$total_monto_intereses += $intereses[$declaraciones['declaraciones'][$i]->decl_codigo_pk];
			}


			$multa_material = FuncionesController::detallesMultaMaterial($declaraciones['array_declaraciones_multa'], true);

			if (array_key_exists($declaraciones['declaraciones'][$i]->decl_codigo_pk, $multa_material)) {
				$tbl_monto_multa_material = $moneda . " " . number_format($multa_material[$declaraciones['declaraciones'][$i]->decl_codigo_pk], 2, ",", ".");
				$total_monto_multa_material += $multa_material[$declaraciones['declaraciones'][$i]->decl_codigo_pk];
			}

			$moneda_ingresos = FuncionesController::obtenerMoneda($declaraciones['declaraciones'][$i]->decl_fechafin_base);
			$ingresos_brutos = "<span class='float-left'>" . $moneda_ingresos . "</span> <span class='float-right'>" . number_format($declaraciones['declaraciones'][$i]->decl_ingresosbrutos, 2, ",", ".") . "</span>";

			$ut = number_format(FuncionesController::obtenerUT($declaraciones['declaraciones'][$i]->decl_fechainicio_base, $declaraciones['declaraciones'][$i]->decl_fechafin_base), 2, ",", ".");


			$moneda_ut = FuncionesController::obtenerMoneda($declaraciones['declaraciones'][$i]->decl_fechafin_base);
			$moneda_ut = FuncionesController::obtenerMonedaUT($declaraciones['declaraciones'][$i]->decl_fechainicio_base, $declaraciones['declaraciones'][$i]->decl_fechafin_base);

			$tabla .= "<tr>";
			$tabla .= "<td style='font-size: 10px;'>" . $periodo_gravable . "</td>";
			$tabla .= "<td style='font-size: 10px;'>" . $moneda_ut . " " . $ut . "</td>";
			$tabla .= "<td style='font-size: 10px;'>" . $declaraciones["declaraciones"][$i]->decl_alicuota . " %</td>";
			$tabla .= "<td style='font-size: 10px;'>" . $ingresos_brutos . "</td>";
			$tabla .= "<td style='font-size: 10px;'>" . $tbl_monto_aporte . "</td>";
			$tabla .= "<td style='font-size: 10px;'>" . $tbl_monto_intereses . "</td>";
			$tabla .= "<td style='font-size: 10px;'>" . $tbl_monto_multa_material . "</td>";
			$tabla .= '</tr>';
		}/* exit; */


		$tabla .= '<tr>';
		$tabla .= '<td colspan="4" style="text-align:right;"><b>TOTAL</b></td>';
		$tabla .= '<td><b>' . $moneda . " " . number_format($total_monto_aporte, 2, ',', '.') . '</b></td>';
		$tabla .= '<td><b>' . $moneda . " " . number_format($total_monto_intereses, 2, ',', '.') . '</b></td>';
		$tabla .= '<td><b>' . $moneda . " " . number_format($total_monto_multa_material, 2, ',', '.') . '</b></td>';
		$tabla .= '</tr>';

		return $tabla;
	}

	private function tabla_montos_detalles_mensual(array $datos, array $declaraciones): string
	{
		$moneda = $datos['moneda'];
		$total_monto_aporte = 0.00;
		$total_monto_intereses = 0.00;
		$total_monto_multa_material = 0.00;

		$tabla = "";


		for ($i = 0; $i < $declaraciones['cantidad_declaraciones']; $i++) {
			$periodo_gravable = FuncionesController::convertirFecha($declaraciones['declaraciones'][$i]->decl_fechainicio_base, 'dd/mm/yyyy');
			$periodo_gravable .= "<br>" . FuncionesController::convertirFecha($declaraciones['declaraciones'][$i]->decl_fechafin_base, 'dd/mm/yyyy');


			//TODO: se aplico el siguiente cambio pasando la fecha al metodo reconversion para hacer pruebas.
			if ($declaraciones['declaraciones'][$i]->decl_fechainicio >= "2021-10-01") {
				$tbl_monto_aporte = FuncionesController::reconversion($declaraciones['declaraciones'][$i]->decl_fechainicio, $declaraciones['declaraciones'][$i]->decl_montorequerido);
			} else {
				//primer parametro false para que retorne siempre el ultimo valor de reconversion $declaraciones['declaraciones'][$i]->decl_fechadeclaracion -> false
				$tbl_monto_aporte = FuncionesController::reconversion(false, $declaraciones['declaraciones'][$i]->decl_montorequerido);
			}
			/* var_dump($tbl_monto_aporte);
			echo "<br>";
			echo "<br>"; */
			$total_monto_aporte += $tbl_monto_aporte;

			$tbl_monto_aporte = "<span class='float-left'>" . $moneda . "</span> <span class='float-right'>" . number_format($tbl_monto_aporte, 2, ",", ".") . "</span>";

			$tbl_monto_intereses = "<center>No Aplica</center>";
			$tbl_monto_multa_material = "<center>No Aplica</center>";

			$intereses = FuncionesController::detallesInteresesMoratoriosActa($declaraciones['array_declaraciones_multa'], true, $datos['fiscalizacion']);

			if (array_key_exists($declaraciones['declaraciones'][$i]->decl_codigo_pk, $intereses)) {
				$tbl_monto_intereses =  $moneda . " " . number_format($intereses[$declaraciones['declaraciones'][$i]->decl_codigo_pk], 2, ",", ".");
				$total_monto_intereses += $intereses[$declaraciones['declaraciones'][$i]->decl_codigo_pk];
			}


			$multa_material = FuncionesController::detallesMultaMaterial($declaraciones['array_declaraciones_multa'], true);

			if (array_key_exists($declaraciones['declaraciones'][$i]->decl_codigo_pk, $multa_material)) {
				$tbl_monto_multa_material = $moneda . " " . number_format($multa_material[$declaraciones['declaraciones'][$i]->decl_codigo_pk], 2, ",", ".");
				$total_monto_multa_material += $multa_material[$declaraciones['declaraciones'][$i]->decl_codigo_pk];
			}

			$moneda_ingresos = FuncionesController::obtenerMoneda($declaraciones['declaraciones'][$i]->decl_fechafin_base);
			$ingresos_brutos = "<span class='float-left'>" . $moneda_ingresos . "</span> <span class='float-right'>" . number_format($declaraciones['declaraciones'][$i]->decl_ingresosbrutos, 2, ",", ".") . "</span>";

			$ut = number_format(FuncionesController::obtenerUT($declaraciones['declaraciones'][$i]->decl_fechainicio_base, $declaraciones['declaraciones'][$i]->decl_fechafin_base), 2, ",", ".");


			$moneda_ut = FuncionesController::obtenerMoneda($declaraciones['declaraciones'][$i]->decl_fechafin_base);
			//$moneda_ut = FuncionesController::obtenerMonedaUT($declaraciones['declaraciones'][$i]->decl_fechainicio_base, $declaraciones['declaraciones'][$i]->decl_fechafin_base);

			$tabla .= "<tr>";
			$tabla .= "<td style='font-size: 10px;'>" . $periodo_gravable . "</td>";
			/*$tabla .= "<td style='font-size: 10px;'>" . $moneda_ut . " " . $ut . "</td>";*/
			$tabla .= "<td style='font-size: 10px;'>" . $declaraciones["declaraciones"][$i]->decl_alicuota . " %</td>";
			$tabla .= "<td style='font-size: 10px;'>" . $ingresos_brutos . "</td>";
			$tabla .= "<td style='font-size: 10px;'>" . $tbl_monto_aporte . "</td>";
			$tabla .= "<td style='font-size: 10px;'>" . $tbl_monto_intereses . "</td>";
			$tabla .= "<td style='font-size: 10px;'>" . $tbl_monto_multa_material . "</td>";
			$tabla .= '</tr>';
		}/* exit; */


		$tabla .= '<tr>';
		$tabla .= '<td colspan="3" style="text-align:right;"><b>TOTAL</b></td>';
		$tabla .= '<td><b>' . $moneda . " " . number_format($total_monto_aporte, 2, ',', '.') . '</b></td>';
		$tabla .= '<td><b>' . $moneda . " " . number_format($total_monto_intereses, 2, ',', '.') . '</b></td>';
		$tabla .= '<td><b>' . $moneda . " " . number_format($total_monto_multa_material, 2, ',', '.') . '</b></td>';
		$tabla .= '</tr>';

		return $tabla;
	}

	/**
	 * Realiza el PDF del acta de fiscalizacion que se emite cuando la declaración posee multa formal.
	 */
	private function acta_reparo_fiscalizacion($id_declaracion){
		$declaracion = SidcaiDeclaracioncti::model()->find([
			'select' => 'decl_codigo_pk, apor_codigo_fk, decl_fechadeclaracion, decl_fechafin, decl_dias_prorroga, esta_codigo_fk',
			'condition' => 'decl_codigo_pk = :decl_codigo_pk AND (esta_codigo_fk != :estatus_1 AND esta_codigo_fk != :estatus_2)',
			'params' => [
				':decl_codigo_pk' => $id_declaracion,
				':estatus_1' => 1005,
				':estatus_2' => 1009,
			]
		]);

		if($declaracion != null){	
			$id_empresa = $declaracion->apor_codigo_fk;

			Yii::import('application.controllers.FuncionesController');

			$declaraciones = FuncionesController::obtenerDeclaraciones($id_declaracion, $id_empresa);

			// Esta acta solo se emite cuando halla multa formal.
			if($declaraciones['tiene_multa_formal'] == false){
				$this->redirect(Yii::app()->homeUrl);
			}

			$permitir_personal_fonacit = false;

			if(Yii::app()->user->hasState('nivel_acceso')){
				if(Yii::app()->user->getState('nivel_acceso') == 2)
					$permitir_personal_fonacit = true;
			}

			$aportante = SidcaiAportante::model()->find([
				'select' => 'apor_codigo_pk, apor_rif, apor_razonsocial, repr_codigo_fk, apor_direccion',
				'condition' => 'apor_codigo_pk = :apor_codigo_pk',
				'params' => [':apor_codigo_pk' => $id_empresa]
			]);

			// Se valida que solo pueda ingresar el aportante que le pertenece esa declaración o una personal de FONACIT.
			if($declaracion->apor_codigo_fk != $id_empresa)
				$this->redirect(Yii::app()->homeUrl);
			else{	
				$datos = [];  
				date_default_timezone_set('America/Caracas');
				// Unix
				setlocale(LC_TIME, 'es_ES.UTF-8', 'es_ES');
				// En windows
				//setlocale(LC_TIME, 'spanish');

				$fd = explode("-", $declaracion->decl_fechadeclaracion);

				$datos['acta_reparo_n'] 	= $fd[1].$fd[0]."-".$aportante->apor_rif;
				$datos['apor_razonsocial'] 	= $aportante->apor_razonsocial;
				$datos['apor_rif'] 			= $aportante->apor_rif;
				$datos['repr_nombre'] 		= $aportante->reprCodigoFk->repr_nombres." ".$aportante->reprCodigoFk->repr_apellidos;
				$datos['repr_documento'] 	= $aportante->reprCodigoFk->repr_documento;
				$datos['apor_direccion'] 	= $aportante->apor_direccion;

				$date = new DateTime("now", new DateTimeZone('America/Caracas'));
				$hoy = $date->format('Y-m-d');

				$string_declaraciones = "";
				$string_declaraciones_multa = "";
				$monto_multa_material = 0.00;
				$monto_aporte = 0.00;

				$monto_total = 0.00;// Suma de todos los montos.

				$ejercicios_fiscales = [];

				$array_declaraciones_multa = [];

				$monto_intereses = 0.00;

				for($i = 0; $i < $declaraciones['cantidad_declaraciones']; $i++){
					$decl = SidcaiDeclaracioncti::model()->find([
						'select' => 'decl_fechainicio_base, decl_fechafin_base, decl_montorequerido, decl_fechadeclaracion, decl_fechafin, decl_dias_prorroga',
						'condition' => 'decl_codigo_pk = :decl_codigo_pk',
						'params' => [
							':decl_codigo_pk' => $declaraciones['declaraciones'][$i]->decl_codigo_pk
						]
					]);

					$inicio = FuncionesController::convertirFecha($decl->decl_fechainicio_base, 'dd/mm/yyyy');
					$fin = FuncionesController::convertirFecha($decl->decl_fechafin_base, 'dd/mm/yyyy');

					$ejercicios_fiscales[] = [
						'inicio' => $inicio, 
						'fin' => $fin];

					if($i != ($declaraciones['cantidad_declaraciones'] - 1))
						$string_declaraciones .= " ".$inicio.' - '.$fin.',';
					else{
						$string_declaraciones = substr($string_declaraciones, 0, -1);
						$string_declaraciones .= ' y '.$inicio.' - '.$fin;
					}
				}

				// String de los periodos con multas
				for($i = 0; $i < count($declaraciones['array_declaraciones_multa']); $i++){
					$decl = SidcaiDeclaracioncti::model()->find([
						'select' => 'decl_fechainicio_base, decl_fechafin_base, decl_montorequerido, decl_fechadeclaracion, decl_fechafin, decl_dias_prorroga',
						'condition' => 'decl_codigo_pk = :decl_codigo_pk',
						'params' => [
							':decl_codigo_pk' => $declaraciones['declaraciones'][$i]->decl_codigo_pk
						]
					]);

					$inicio = FuncionesController::convertirFecha($decl->decl_fechainicio_base, 'dd/mm/yyyy');
					$fin = FuncionesController::convertirFecha($decl->decl_fechafin_base, 'dd/mm/yyyy');

					if($i != (count($declaraciones['array_declaraciones_multa']) - 1))
						$string_declaraciones_multa .= " ".$inicio.' - '.$fin.',';
					else{
						$string_declaraciones_multa = substr($string_declaraciones_multa, 0, -1);
						$string_declaraciones_multa .= ' y '.$inicio.' - '.$fin;
					}
				}

				$datos['string_declaraciones'] = $string_declaraciones;
				$datos['string_declaraciones_multa'] = $string_declaraciones_multa;

				// Tabla Multas Formales
				$datos['tabla_multas_formales'] = FuncionesController::tablaMultasFormalesActa($declaraciones['array_declaraciones_multa'][0]);


				// Intereses Moratorios
				$multa_interes = FuncionesController::detallesInteresesMoratoriosActa($declaraciones['array_declaraciones_multa'], true, true);

				for($i = 0; $i < count($declaraciones['array_declaraciones_multa']); $i++){
					if(array_key_exists($declaraciones['array_declaraciones_multa'][$i], $multa_interes))
						$monto_intereses += $multa_interes[$declaraciones['array_declaraciones_multa'][$i]];
				}

				$monto_intereses = bcdiv($monto_intereses, '1', 2);

				// Multa Material
				$multa_material = FuncionesController::detallesMultaMaterial($declaraciones['array_declaraciones_multa'], true);

				for($i = 0; $i < count($declaraciones['array_declaraciones_multa']); $i++){
					if(array_key_exists($declaraciones['array_declaraciones_multa'][$i], $multa_material))
						$monto_multa_material += $multa_material[$declaraciones['array_declaraciones_multa'][$i]];
				}

				$monto_multa_material = bcdiv($monto_multa_material, '1', 2);

				$monto_aporte = FuncionesController::obtenerMontoAporte($declaraciones['array_declaraciones'], true);

				$monto_total = $monto_aporte + $monto_multa_material + $monto_intereses;

				$periodo_desde = explode("/", $ejercicios_fiscales[0]['inicio']);	
				$datos['periodo_desde'] = $periodo_desde[2];

				$periodo_hasta = explode("/", $ejercicios_fiscales[count($ejercicios_fiscales) - 1]['fin']);
				$datos['periodo_hasta'] = $periodo_hasta[2];

				$datos['cantidad_periodos'] = $declaraciones['cantidad_declaraciones'];
				$datos['cantidad_periodos_letras'] = mb_strtoupper(FuncionesController::cifras_en_letras($declaraciones['cantidad_declaraciones'], false));

				if($declaracion->esta_codigo_fk == 1004 || $declaracion->esta_codigo_fk == 1003){
					$datos['consulta'] = true;
					$moneda = FuncionesController::obtenerMoneda($declaracion->decl_fechadeclaracion);
				}else{
					$datos['consulta'] = false;
					$moneda = FuncionesController::obtenerMoneda($hoy);
				}

				$datos['monto_intereses'] 		= $moneda. " ".number_format($monto_intereses, 2, ",", ".");
				$datos['monto_multa_material'] 	= $moneda.' '.number_format($monto_multa_material, 2, ',', '.');
				$datos['monto_aporte'] 			= $moneda.' '.number_format($monto_aporte, 2, ',', '.');
				$datos['monto_total'] 			= $moneda.' '. number_format($monto_total, 2, ",", ".");

				$datos['moneda'] = $moneda;
				$datos['fiscalizacion'] = true;
				$datos['tabla'] = $this->tabla_montos_detalles($datos, $declaraciones);


				// Datos de las multas formales 
				$datos_multas_formales = FuncionesController::multasFormalesSeleccionadas($declaraciones['array_declaraciones_multa'][0]);
				$datos['total_unidades_tributarias_en_letras'] =  mb_strtoupper(FuncionesController::cifras_en_letras(number_format($datos_multas_formales['cantidad_ut_82'], 0, ',', '.'), false));

				// Se agarra la fecha del último interes moratorio (puede existir el caso de que la última declaración pasó a extemporanea y ahora tiene multas e intereses).
				$buscar_ultima_fecha = SidcaiMultaInteres::model()->find([
					'condition' => 'decl_codigo_fk = :decl_codigo_fk AND mult_habilitada = :mult_habilitada',
					'params' => [
						':decl_codigo_fk' => $declaraciones['id_ultima_declaracion'],
						':mult_habilitada' => TRUE
					]
				]);

				if($buscar_ultima_fecha != null)
					$datos['fecha'] = strftime("%d de %B de %Y", strtotime($buscar_ultima_fecha->fecha_registro));
				else
					$datos['fecha'] = strftime("%d de %B de %Y", strtotime($declaracion->decl_fechadeclaracion));


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

		        $fecha_declaracion = $declaracion->decl_fechadeclaracion;

				// Datos presidente
				$sql = "SELECT * FROM sidcai_firma_presidente WHERE :fecha >= firm_inicio_periodo AND :fecha <= firm_fin_periodo ORDER BY firm_codigo_pk ASC LIMIT 1";
			    $command = $connection->createCommand();
			    $command->text = $sql;
			    $command->bindParam(':fecha', $fecha_declaracion);
			    $model = $command->queryRow();

				//$imagen_firma = Yii::app()->request->baseUrl."/".$model['firm_ruta'];
                                $imagen_firma = $model['firm_ruta'];
				$datos['nombre_presidente'] = mb_strtoupper($model['firm_nombre']);
				$datos['cargo_presidente'] = mb_strtoupper($model['firm_cargo']);
				$datos['gaceta_presidente'] = nl2br($model['firm_gaceta']);
				$datos['imagen_firma'] = $imagen_firma;	

				$mPDF = Yii::app()->ePdf->mpdf('', 'Letter');

				$titulo = "ESTADO DE CUENTA (DEBERES FORMALES) - ".$declaraciones['id_ultima_declaracion'];

		        $mPDF->SetTitle($titulo);
                $htmlHeader = "<div><img src='images/cintillo.jpg' height='100%'></div>";
		        $mPDF->SetHtmlHeader($htmlHeader);
		        $mPDF->setAutoTopMargin = true;

		        // Plantilla del acta a utilizar.
		        $sql = "SELECT * FROM sidcai_plantilla_pdf WHERE :fecha <= plan_finalizacion AND nombre_plantilla_fk = 1 ORDER BY plan_codigo_pk ASC LIMIT 1";
			    $command = $connection->createCommand();
			    $command->text = $sql;
			    $command->bindParam(':fecha', $fecha_declaracion);
			    $model = $command->queryRow();

			    $texto = $model['plan_texto'];
			    $texto = $this->renderPartial("_acta-fiscalizacion", 
								array(
									'form' 		=> 'ds'
								), true
							);

			    $buscar = [];
			    $reemplazar = [];

			    foreach($datos as $key => $value){
			    	array_push($buscar, "{{".$key."}}");
			    	array_push($reemplazar, $value);
			    }

		        $texto =  str_replace($buscar, $reemplazar, $texto);

		        $mPDF->WriteHTML($texto);
			    $mPDF->Output($titulo, "I");
			}
		}else{
			$this->redirect(Yii::app()->homeUrl);
		}
	}


	public function actionActa_reparo($id = null){
		/* var_dump("hola");exit; */
		if($id != null){
			if(!is_numeric($id))
				$this->redirect(Yii::app()->homeUrl);
			else{
				$declaracion = SidcaiDeclaracioncti::model()->findByPk($id);
				$this->acta_reparo_recaudacion($id);
			}
		}else{
			$array_declaraciones = [];
			$declaraciones = SidcaiDeclaracioncti::model()->findAll([
				'condition' => 'apor_codigo_fk = :apor_codigo_fk AND (esta_codigo_fk != :estatus_1 AND esta_codigo_fk != :estatus_2)',
				'params' => [
					':apor_codigo_fk' => Yii::app()->user->id,
					':estatus_1' => 1005,
					':estatus_2' => 1009,
				],
				'order' => 'decl_codigo_pk ASC'
			]);


			Yii::import('application.controllers.FuncionesController');

			foreach($declaraciones as $d){
				if(!in_array($d->decl_codigo_pk, $array_declaraciones)){			
					if(strtotime($d->decl_fechadeclaracion) > strtotime(date('Y-m-d', strtotime($d->decl_fechafin."+".$d->decl_dias_prorroga." day")))){
						$declaraciones_relacionadas = SidcaiDeclaracionRelacionada::model()->find([
							'condition' => 'decl_codigo_fk = :decl_codigo_fk OR decl_atrasada_fk = :decl_atrasada_fk',
							'params' => [
								':decl_codigo_fk' => $d->decl_codigo_pk,
								':decl_atrasada_fk' => $d->decl_codigo_pk
							]
						]);
			
			
						if($declaraciones_relacionadas != null){
							if(!in_array($declaraciones_relacionadas->decl_codigo_fk, $array_declaraciones)){
								array_push($array_declaraciones, $declaraciones_relacionadas->decl_codigo_fk);
							}
						}
						else{
							array_push($array_declaraciones, $d->decl_codigo_pk);
						}
					}
				}
			}


			$datos_declaracion = [];

			Yii::import('application.controllers.FuncionesController');

			for($i = 0; $i < count($array_declaraciones); $i++){
				$declaracion = SidcaiDeclaracioncti::model()->find([
					'select' => 'decl_codigo_pk, decl_fechainicio_base, decl_fechafin_base',
					'condition' => 'decl_codigo_pk = :decl_codigo_pk',
					'params' => [':decl_codigo_pk' => $array_declaraciones[$i]],
				]);

				$declaraciones = FuncionesController::obtenerDeclaraciones($array_declaraciones[$i], Yii::app()->user->id);
				
				if($declaraciones['posee_acta_recaudacion'] || $declaraciones['tiene_multa_formal']){
					$datos_declaracion[] = [
						'codigo' => $declaracion->decl_codigo_pk,
						'fecha_inicio_gravable' => FuncionesController::convertirFecha($declaracion->decl_fechainicio_base, 'dd/mm/yyyy'),
						'fecha_fin_gravable' => FuncionesController::convertirFecha($declaracion->decl_fechafin_base, 'dd/mm/yyyy'),
						'tiene_multa_formal' => $declaraciones['tiene_multa_formal'],
					];
				}
			}

			$this->render('acta-reparo', ['datos_declaracion' => $datos_declaracion]);
		}
	}

	public function actionComprobante_pago_mensual($id = null) {
		if(!is_numeric($id))
			$this->redirect(Yii::app()->homeUrl);
		else
			$this->comprobante_pago_mensual($id);
	}

	public function actionLista_pago($fechas = null) {

		$fechas = explode("--", $fechas);
		$fecha_inicial = explode("-", $fechas[0]);
		$fecha_final = explode("-", $fechas[1]);
		if(count($fechas) != 2 || count($fecha_inicial) != 3 || count($fecha_final) != 3) {
			$this->redirect(Yii::app()->homeUrl);
		}
		else
			$this->lista_pago(implode("-", $fecha_inicial), implode("-", $fecha_final));
	}

	/**
	 * Acta de reparo emitida por fiscalización
	 */
	public function actionActa_reparo_deberes_formales($id){
		if($id != null){
			if(!is_numeric($id))
				$this->redirect(Yii::app()->homeUrl);
			else{
				$this->acta_reparo_fiscalizacion($id);
			}
		}else
			$this->redirect(Yii::app()->homeUrl);
	}

	/**
	 * Función que guardar el pago de las multas formales.
	 */
	private function pagar_multas($model, array $post, array $codigos, array $codigos_declaraciones) : array{
		$mensaje = [];
		$atributos = [];

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

		$model->attributes = $atributos;

		$comprobante_multa_formal = CUploadedFile::getInstance($model, 'mult_formal_comprobante');

		$extPermitidas = ['png', 'jpeg', 'jpg'];

		// Directorios donde se guardan los comprobantes de pago de la empresa.
		$ruta = Yii::getPAthOfAlias('webroot').'/upload/' .Yii::app()->user->id.'/comprobantes_pago';
        //lm nuevo
        $existe_local=FuncionesController::checkPathAndFile($ruta);
        $rutaDir  = Yii::app()->params['REMOTEDIR'].Yii::app()->user->id . '/comprobantes_pago';
		$rutaDir1 = Yii::app()->params['REMOTEDIR'].Yii::app()->user->id . '/comprobantes_pago/multa_formal';

        
		if($comprobante_multa_formal != null){
			if(in_array($comprobante_multa_formal->extensionName, $extPermitidas)){
				$tamMaximo = 1024 * 1024 * 2; // valor en MB

				if($comprobante_multa_formal->size <= $tamMaximo){
                    //lm nuevo verificar local
                    if($existe_local=="si"){
						if(!is_dir($ruta."/multa_formal"))
							mkdir($ruta."/multa_formal", 0777);
					}else{
						$existe_servidor=FuncionesController::directoryExists($rutaDir);
						$existe_servidor1=FuncionesController::directoryExists($rutaDir1);
						if($existe_servidor=="no"){
                           $crear_carpeta=FuncionesController::crearCarpetaSsh2($rutaDir);
						}

						if($existe_servidor1=="no"){
                           $crear_carpeta1=FuncionesController::crearCarpetaSsh2($rutaDir1);
						}
					}

					//end lm


				}else{
					$transaction->rollBack();
					return ["warning", $msj_error.'<b>Comprobante de pago de la Multa Formal:</b> Máximo 2MB.'];		
				}
			}else{
				$transaction->rollBack();
				return ["warning", $msj_error.'<b>Comprobante de pago de la Multa Formal:</b> La extensión no es válida.'];
			}
		}else{
			$transaction->rollBack();
			return ["warning", $msj_error.'<b>Comprobante de pago de la Multa Formal:</b> El comprobante es requerido.'];
		}


		// Una vez validado el $model se proceden a validar los datos.

		// Se remueven los "." y luego se reemplaza la "," por "." para poder guardar el valor en la BD.
		$model->mult_deta_monto = str_replace(".", "", $model->mult_deta_monto);
		$model->mult_deta_monto = str_replace(",", ".", $model->mult_deta_monto);

		if(!is_numeric($model->mult_deta_monto)) 
			return ["warning",  $msj_error."<b>".$model::attributeLabels()['mult_deta_monto'].":</b> Solo se permiten números."];

		$id_aportante = Yii::app()->user->id;
		$array_declaraciones_multa_string = implode(',', $codigos);

		$obtener_monto = SidcaiDeclaracionMulta::model()->findAll(
			'codigo_declaraciones = :codigo_declaraciones AND mult_codigo_fk != :mult_codigo_fk AND mult_habilitada = :mult_habilitada',
			array(
				':codigo_declaraciones' => $array_declaraciones_multa_string,
				':mult_codigo_fk' => 1,
				':mult_habilitada' => TRUE
			)
		);

		$total_monto = 0;


		foreach($obtener_monto as $t){
			$total_monto += $t->decl_mult_monto;
		}

		// Se inicia la transacción
		$transaction = $model->dbConnection->beginTransaction();

		$date = new DateTime("now", new DateTimeZone('America/Caracas')); 
		$hoy = $date->format('Y-m-d');
		/**
		 * Guarda en la referencia del Banco provincial la fecha del día más el número de refencia suminsitrado por el Aportante.
		 * Esto debido a que el Banco Provincial solo da 4 digitos en sus referencias de pago.
		 */
		if($model->banc_codigo_fk == 38){ // 38 = Provincial Multa
			$hoy_referencia_provincial = $date->format('dmY');

			$referencia = $hoy_referencia_provincial.$model->mult_deta_referencia;
		}else{
			$referencia = $model->mult_deta_referencia;
		}

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

		// Datos a guardar de los detalles del pago de las Multas Formales.
		$model_guardar = new SidcaiDeclaracionMultaDetalle;
		$model_guardar->codigo_declaraciones	= $array_declaraciones_multa_string;
		$model_guardar->banc_codigo_fk 			= $model->banc_codigo_fk;
		$model_guardar->mult_deta_modalidadpago = 2;
		$model_guardar->mult_deta_referencia	= $referencia;
		$model_guardar->mult_deta_monto 		= $model->mult_deta_monto;
		$model_guardar->mult_deta_fechapago 	= $model->mult_deta_fechapago;
		$model_guardar->fecha_registro			= $hoy;
		$model_guardar->apor_codigo_fk 			= $id_aportante;
		$model_guardar->multa_formal 			= 1;

		$nombre_archivo_multa_formal = $hoy.uniqid('-').'.'.$comprobante_multa_formal->extensionName;
		$model_guardar->comprobante = 'upload/'.Yii::app()->user->id.'/comprobantes_pago/multa_formal/'.$nombre_archivo_multa_formal;


		if(!$model_guardar->validate()){
			$errores = FuncionesController::erroresModel($model_guardar, "SidcaiDeclaracionMultaDetalle");
			return ["warning", $msj_error.$errores];
		}

		$exitoso = true;

		if(!$model_guardar->save()){
			$exitoso = false;
		}


		foreach($codigos_declaraciones as $key => $value){
			$declaracion = SidcaiDeclaracioncti::model()->findByPk($value);
			$declaracion->esta_codigo_fk = 1011; // Verificando Pago.

			if(!$declaracion->save()){
				$exitoso = false;
				break;
			}
		}

		if($exitoso){
			//lm nuevo
			 if($existe_local=="si"){
			$comprobante_multa_formal->saveAs($ruta.'/multa_formal/'.$nombre_archivo_multa_formal);
			}else{
              //21-10-2024 terminar guardar multa
				$rutaDir = Yii::app()->params['REMOTEDIR'].Yii::app()->user->id . '/comprobantes_pago';
				

					$ar=$rutaDir.'/multa_formal/'.$nombre_archivo_multa_formal;
					
				    $comprobante_multa_formal = CUploadedFile::getInstance($model, 'mult_formal_comprobante');
					$rutalocal= Yii::getPAthOfAlias('webroot').'/upload/' .Yii::app()->user->id."-".$nombre_archivo_multa_formal;
                    $comprobante_multa_formal->saveAs($rutalocal);
					chmod($rutalocal, 0777);
					
					
					$ruta_aportante= Yii::app()->params['REMOTEDIR'].Yii::app()->user->id;
					
					$crear_archivo=FuncionesController::crearArchivoSsh2($rutalocal,$ar,$ruta_aportante);
				    //revisar creacion de archivo lm 11-10-2024 prueba
			}
			//lm end

			$transaction->commit();
			return ["success", "<i class='fas fa-check-circle'></i> Se registró el pago correctamente, ahora su pago está siendo verificado. "];
		}else{
			$transaction->rollBack();
			return ["error", "<i class='fas fa-exclamation-triangle'></i> No se logró realizar el pago de las Multas Formales."];
		}
	}

	private function declarar($model, array $post, int $codigo_declaracion, int $id_empresa){
		$mensaje = [];
		$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>";

		if(!$model->validate()){
			$errores = FuncionesController::erroresModel($model, "SidcaiDeclaracioncti");
			return ["warning", $msj_error.$errores];
		}

		$date = new DateTime("now", new DateTimeZone('America/Caracas')); 
		$hoy = $date->format('Y-m-d');

		/*********************************************************
					COMPROBANTES DE PAGO
		**********************************/

		// Directorios donde se guardan los comprobantes de pago de la empresa.
		$ruta = Yii::getPAthOfAlias('webroot').'/upload/' .Yii::app()->user->id.'/comprobantes_pago';
		$rutaDir = Yii::app()->params['REMOTEDIR'].Yii::app()->user->id . '/comprobantes_pago';
        //lm nuevo
		$existe_local=FuncionesController::checkPathAndFile($ruta);

		if($existe_local=="si"){

			if(!is_dir($ruta))
				mkdir($ruta, 0777);
		         }else{ //no existe la carpeta la carpeta en el proyecto y verificara por ssh al servidor
				
				$existe_servidor=FuncionesController::directoryExists($rutaDir);

				if($existe_servidor=="no"){
                      $crear_carpeta=FuncionesController::crearCarpetaSsh2($rutaDir);
				}
		}
		//lm end

		// Comprobantes de pago.
		$comprobante_aporte = CUploadedFile::getInstance($model, 'decl_comprobante');

		$tiene_comprobante = false;

		$extPermitidas = ['png', 'jpeg', 'jpg'];

		// Una vez validado el $model se proceden a validar los datos.

		// Se remueven los "." y luego se reemplaza la "," por "." para poder guardar el valor en la BD.
		$model->decl_montoaportado = str_replace(".", "", $model->decl_montoaportado);
		$model->decl_montoaportado = str_replace(",", ".", $model->decl_montoaportado);

		if(!is_numeric($model->decl_montoaportado)) {
			if($model->decl_montoaportado != "")
				return ["warning",  $msj_error."<b>".$model::attributeLabels()['decl_montoaportado'].":</b> Solo se permiten números."];	
		}

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

		// Datos que se actualizarán en la Declaración.
		$model_guardar = $this->loadModel($codigo_declaracion);

		// Se inicia la transacción
		$transaction = $model_guardar->dbConnection->beginTransaction();

		$model_guardar->esta_codigo_fk 	= 1008; // Vericando Pago.

		$error_guardar = false;

		/*************************************************************************************
									DATOS
		***********************************************************************************/
		$declaraciones = FuncionesController::obtenerDeclaraciones($codigo_declaracion, $id_empresa);

		$monto_total_faltante = FuncionesController::obtenerMontoFaltante($declaraciones, $id_empresa);

		// Crédito fiscal
		$buscar_credito = SidcaiCreditoFiscal::model()->find([
			'condition' => 'apor_codigo_fk = :apor_codigo_fk AND cred_habilitado = :cred_habilitado',
			'params' => [
				':apor_codigo_fk' => Yii::app()->user->id,
				':cred_habilitado' => TRUE
			]
		]);

		if($buscar_credito != null){
			$buscar_credito->cred_habilitado = false;
			$buscar_credito->decl_codigo_fk_destino = $declaraciones['id_ultima_declaracion'];

			// Se actualiza el registro del crédito indicando a que declaración va el monto del crédito fiscal y se coloca en false para saber que ya fue utilizado
			if(!$buscar_credito->save()){
				$transaction->rollBack();
				return ["danger", '<i class="fas fa-exclamation-circle"></i> <b>¡Ups!</b> No se logró guardar el destino del crédito fiscal, por favor realice el proceso nuevamente.'];
			}
		}

		if($monto_total_faltante != 0.00){
			$extemporaneo = 0;
			$monto_aportado = 0.00;

			/**
			 * Guarda en la referencia del Banco provincial la fecha del día del pago más el número de refencia suminsitrado por el Aportante.
			 * Esto debido a que el Banco Provincial solo da 4 digitos en sus referencias de pago.
			 */
			if($model->decl_banco == 21){ // 21 = Provincial Aporte
				$fecha_pago_provincial = FuncionesController::convertirFecha($model->decl_fecha_pago, "dd/mm/yyyy");
				$hoy_referencia_provincial = str_replace("/", "", $fecha_pago_provincial);
				$numero_referencia_aporte = $hoy_referencia_provincial.$model->decl_referencia;
			}else{
				$numero_referencia_aporte = $model->decl_referencia;
			}

			// Se vuelve a comprobar el número de referencia para verificar que no exista..
			/*$referencia_aporte = SidcaiDeclaracionDetalle::model()->findAll([
				'select' 	=> 'decl_referencia',
				'condition' => 'decl_referencia = :decl_referencia AND banc_codigo_fk = :banc_codigo_fk AND decl_pago_aceptado = :decl_pago_aceptado AND decl_modalidadpago = :decl_modalidadpago',
				'params' 	=> [
					':decl_referencia' 		=> $numero_referencia_aporte,
					':banc_codigo_fk'  		=> $model->decl_banco,
					':decl_modalidadpago'  	=> $model->decl_modalidad,
					':decl_pago_aceptado'  	=> true
				]
			]);*/

			/*if($referencia_aporte != NULL){
				$transaction->rollBack();
				return ["warning", '<i class="fas fa-exclamation-circle"></i> El número de referencia para el pago de Aporte ya se encuentra registrado.'];
			}*/


			$referencia_aporte = SidcaiDeclaracionDetalle::model()->findAll([
				'select' 	=> 'decl_referencia',
				'condition' => 'decl_referencia = :decl_referencia AND (rech_codigo_fk is NULL)',
				'params' 	=> [
					':decl_referencia' 		=> $numero_referencia_aporte,
				//	':decl_pago_aceptado'  	=> false
				]
			]);

			if($referencia_aporte != NULL){
				$transaction->rollBack();
				return ["warning", '<i class="fas fa-exclamation-circle"></i> El número de referencia para el pago de Aporte ya se encuentra registrado.'];
			}

			// Si es una sola declaración que no es extemporanea.
			/*if($declaraciones['cantidad_declaraciones'] == 1 && $declaraciones['extemporaneo'] == false){
				if($declaraciones['cantidad_pagos'] == 0 || $declaraciones['cantidad_pagos'] == 1){
					$model_guardar->esta_codigo_fk 	= 1008; // Verificando Pago.
					$monto_aportado = $model->decl_montoaportado;
				}else{
					$monto_aportado = $monto_total_faltante;
				}
			}else if($declaraciones['cantidad_declaraciones'] == 1 && $declaraciones['extemporaneo'] == true){
				// Si es una declaración pero extemporánea.
				$monto_aportado = $monto_total_faltante;
				$extemporaneo = 1;
			}else if($declaraciones['cantidad_declaraciones'] > 1){
				$extemporaneo = 1;
				$monto_aportado = $monto_total_faltante;
			}*/

			if($declaraciones['extemporaneo']){
				$extemporaneo = 1;
			}

			$declaracion_detalle = new SidcaiDeclaracionDetalle;
			$declaracion_detalle->codigo_declaraciones 	= $declaraciones['array_declaraciones_string'];
			$declaracion_detalle->banc_codigo_fk 		= $model->decl_banco;
			$declaracion_detalle->decl_modalidadpago 	= $model->decl_modalidad;
			$declaracion_detalle->decl_referencia 		= $numero_referencia_aporte;
			//$declaracion_detalle->decl_monto 			= $monto_aportado;
			$declaracion_detalle->decl_monto 			= $model->decl_montoaportado;;
			$declaracion_detalle->decl_extemporaneo 	= $extemporaneo;
			$declaracion_detalle->decl_fechapago 		= $model->decl_fecha_pago;
			$declaracion_detalle->fecha_registro 		= $date->format('Y-m-d H:i:s');
			$declaracion_detalle->apor_codigo_fk 		= $aportante->apor_codigo_pk;

			if($comprobante_aporte != null){
				if(in_array($comprobante_aporte->extensionName, $extPermitidas)){
					$tamMaximo = 1024 * 1024 * 2; // valor en MB

					if($comprobante_aporte->size <= $tamMaximo){
						if($existe_local=="si"){

							if(!is_dir($ruta))
								mkdir($ruta, 0777);
						}else{ //no existe la carpeta la carpeta en el proyecto y verificara por ssh al servidor

								$existe_servidor=FuncionesController::directoryExists($rutaDir);

								if($existe_servidor=="no"){
				                      $crear_carpeta=FuncionesController::crearCarpetaSsh2($rutaDir);
								}
						}

					}else{
						$transaction->rollBack();
						return ["warning", $msj_error.'<b>Comprobante de pago:</b> Máximo 2MB.'];		
					}
				}else{
					$transaction->rollBack();
					return ["warning", $msj_error.'<b>Comprobante de pago:</b> La extensión no es válida.'];
				}
			}else{
				$transaction->rollBack();
				return ["warning", $msj_error.'<b>Comprobante de pago:</b> El comprobante es requerido.'];
			}

			$nombre_archivo_aporte = Yii::app()->user->id."-".$hoy.uniqid('-').'.'.$comprobante_aporte->extensionName;
			$declaracion_detalle->comprobante = 'upload/'.Yii::app()->user->id.'/comprobantes_pago/'.$nombre_archivo_aporte;

			$tiene_comprobante_aporte = true;
		   
			
			
			if(!$declaracion_detalle->save()){
				$transaction->rollBack();
				return ["danger", "<i class='fas fa-exclamation-triangle'></i> No se logró guardar los datos del pago de la declaración."];
			}
		}


		if($model_guardar->save()){
			// Si tiene más de una declaración, verifica que está pagando fuera de los 15 días para que pase a fiscalización. Si tiene una sola declaración y es extemporanea verificará que no este pagando despues de su fecha tope, de ser así mandará la declaración a fiscalización.
			$va_a_fiscalizacion = false;

			$dcl = $declaraciones['declaraciones'][($declaraciones['cantidad_declaraciones'] - 1)];
			$mandar_fiscalizacion = "";

			if($declaraciones['cantidad_declaraciones'] > 1){
				// Si tiene más de una declaración que le sume los 15 días a la fecha de creación de la declaración.
				$mandar_fiscalizacion = date("Y-m-d", strtotime($dcl->decl_fechadeclaracion."+".FuncionesController::diasAfiscalizacion()." day"));
			}else{
				// Si tiene una sola declaración que le sume los 15 días a su fecha fin
				$mandar_fiscalizacion = date('Y-m-d', strtotime($dcl->decl_fechafin."+".FuncionesController::diasAfiscalizacion()." day"));
			}

			// Si tiene días de prorroga que no tome los 15 días y al pasar la fecha fin que mande la declaración a fiscalización.
			if($dcl->decl_dias_prorroga > 0){
				$mandar_fiscalizacion = date("Y-m-d", strtotime($dcl->decl_fechafin."+".$dcl->decl_dias_prorroga." day"));
			}

			if(strtotime($hoy) > strtotime($mandar_fiscalizacion)){
				$va_a_fiscalizacion = true;
			}

			$va_a_fiscalizacion = false;

			$error_actualizar_analista = false;

			// Se actualiza el monto del aporte en la declaración
			for($i = 0; $i < count($declaraciones['array_declaraciones']); $i++){
				$declaracion = SidcaiDeclaracioncti::model()->findByPk($declaraciones['array_declaraciones'][$i]);

				if($va_a_fiscalizacion){
					$declaracion->esta_codigo_fk = 1011; // Verificando Pago fiscalización.

					// Se busca si el analista asignado no sea uno de fiscalización
					$reemplazar_analista = true;

					$es_de_fiscalizacion = SidcaiDeclaracionAnalista::model()->find([
						'condition' => 'decl_codigo_fk = :decl_codigo_fk AND usua_habilitado = :usua_habilitado',
						'params' => [
							':decl_codigo_fk' => $declaracion->decl_codigo_pk,
							':usua_habilitado' => TRUE
						]
					]);

					if($es_de_fiscalizacion != null){
						// Se busca el perfil del analista
						$perfil_analista = SidcaiPerfilUsuario::model()->find([
							'condition' => 'usua_codigo_fk = :usua_codigo_fk AND (perf_codigo_fk = :perfil1 OR perf_codigo_fk = :perfil2 OR perf_codigo_fk = :perfil3 OR perf_codigo_fk = :perfil4)',
							'params' => [
								':usua_codigo_fk' => $es_de_fiscalizacion->usua_codigo_fk,
								':perfil1' => 1,
								':perfil2' => 2,
								':perfil3' => 3,
								':perfil4' => 5,
							]
						]);	

						if($perfil_analista != null){
							$reemplazar_analista = false;
						}					
					}

					if($reemplazar_analista){				
						// Se deshabilita el analista.
						$decl_analista = SidcaiDeclaracionAnalista::model()->updateAll(
							array(
								'usua_habilitado' => 0,
							),
							"decl_codigo_fk = $declaracion->decl_codigo_pk AND CAST(usua_habilitado as INTEGER) = 1"
						);

						if($decl_analista == 0 || $decl_analista == NULL){
							$error_actualizar_analista = true;
							break;
						}
					}
				}else
					$declaracion->esta_codigo_fk = 1008; // Verificando Pago Recaudación.

				if(!$declaracion->save()){
					$error_guardar = true;
					$transaction->rollBack();
					break;
				}
			}

			if($error_guardar == true || $error_actualizar_analista == true){
				return ["danger", "<i class='fas fa-exclamation-triangle'></i> ¡Ups! No se logró actualizar los datos de la declaración."];
			}else{
				// Tipo de notificación
				$tipo_notificacion = SidcaiTipoNotificacion::model()->findByPk(3);

				if($tipo_notificacion != null){
					if($tipo_notificacion->tipo_habilitado){
						// Se busca el usuario que posee la declaración
						$usuario_propietario = SidcaiDeclaracionAnalista::model()->find([
							'select' => 'usua_codigo_fk',
							'condition' => 'decl_codigo_fk = :decl_codigo_fk AND usua_habilitado = :usua_habilitado',
							'params' => [
								':decl_codigo_fk' => $declaraciones['id_ultima_declaracion'],
								':usua_habilitado' => TRUE
							]
						]);

						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 				= $declaraciones['id_ultima_declaracion'];

							if(!$notificacion->save()){
								return ["danger", "<i class='fas fa-exclamation-triangle'></i> No se logró realizar la notificación al analista, por favor intente de nuevo."];
							}
						}
					}
				}

				if($tiene_comprobante_aporte)
					//lm nuevo
					if($existe_local=="si"){

							$comprobante_aporte->saveAs($ruta.'/'.$nombre_archivo_aporte);
						}else{

						$rutaDir = Yii::app()->params['REMOTEDIR'].Yii::app()->user->id . '/comprobantes_pago';
				

					$ar=$rutaDir.'/'.$nombre_archivo_aporte;
					
				    $comprobante_aporte = CUploadedFile::getInstance($model, 'decl_comprobante');
					$rutalocal= Yii::getPAthOfAlias('webroot').'/upload/'.$nombre_archivo_aporte;
                    $comprobante_aporte->saveAs($rutalocal);
					chmod($rutalocal, 0777);
					
					
					$ruta_aportante= Yii::app()->params['REMOTEDIR'].Yii::app()->user->id;
					
					$crear_archivo=FuncionesController::crearArchivoSsh2($rutalocal,$ar,$ruta_aportante);
				    //revisar creacion de archivo lm 11-10-2024 prueba

					}
					//lm end


				$mensaje = ['success', '<i class="fas fa-check-circle"></i> Se realizó la declaración correctamente, su pago está siendo verificado. Para cargar otro pago haga clic <a href="'.Yii::app()->baseUrl.'/declaracion/pago">aqui</a>'];
				$transaction->commit();
				return $mensaje;			
			}
		}else{
			$transaction->rollBack();
			return ["danger", "<i class='fas fa-exclamation-triangle'></i> No se logró realizar la declaración."];
		}
	}


	public function actionPlanilla(){
		if(isset($_POST['banco']) && $_POST['banco'] > 0){
			Yii::app()->user->setState('banco', $_POST['banco']);
		}else{
			$this->render("index");
		}
	}

	public function actionConsulta(){
		$model = new SidcaiDeclaracioncti;
		$model->unsetAttributes();  // clear any default values


		$this->render('consulta', 
			array(
				'model' => $model, 
				'mostrarDeclaraciones' => $this->mostrarDeclaracionAportante()
			)
		);
	}

	
	

	public function actionConciliar()
	{
		$empresa = SidcaiAportante::model()->findByPk(Yii::app()->user->id);
		$recaudos = SidcaiRecaudo::model()->findAll(
			//'apor_codigo_fk = :apor_codigo_fk AND renovar = :renovar AND tipo_codigo_fk IN (1,2)',
			'apor_codigo_fk = :apor_codigo_fk AND renovar = :renovar AND tipo_codigo_fk IN (1,2,3)',
			array(':apor_codigo_fk' => Yii::app()->user->id, ':renovar' => false)
		);
		

		/* if(count($recaudos) < 2) { */
		if (count($recaudos) < 3) {
		/* if (count($recaudos) < $nro_doc) { */
			$model = new SidcaiRecaudo;
			// Indica si el action es para renovar recaudos.
			$renovar = false;
			$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) */
				array(':apor_codigo_fk' => Yii::app()->user->id, ':renovar' => false)
			);

			Yii::import('application.controllers.AportanteController');

			$this->render(
				'subir-recaudos',
				array(
					'model' => $model,
					'recaudos' => $recaudos,
					'renovar' => $renovar,
				)
			);
			Yii::app()->end();
		}
	
		Yii::import('application.controllers.FuncionesController');

		$conciliacion = FuncionesController::obtenerEstatusConciliacion($empresa);
		/*echo "<pre>";
		print_r($conciliacion);
		echo "<pre>";
		die();*/

		if ($conciliacion['conciliacion']) {
			$conciliacion[0] = $conciliacion;
			$conciliacion[1] = $recaudos;
			$conciliacion[2] = $empresa;
			// $conciliacion[3] = $renovar; 
			Yii::app()->session['conciliacion'] = $conciliacion;
			$this->redirect(array(
				'conciliacion',
			));
			Yii::app()->end();
		}else{
			$this->redirect(array(
				'mensual',
			));
			Yii::app()->end();

		}
	}

	public function actionConciliacion()
	{
		$declaracionesAnualesPendientes = SidcaiDeclaracioncti::model()->find(
			array(
				'condition' => "apor_codigo_fk = :apor_codigo_fk AND esta_codigo_fk IN (1001) AND decl_tipodeclaracion = 'O'",
				'params' => [
					':apor_codigo_fk' => Yii::app()->user->id
				],
			)
		);
		$declaracionesPendientes = $declaracionesAnualesPendientes == NULL ? FALSE : TRUE;
		/* var_dump($declaracionesPendientes);exit; */
		$mensaje = "";
		$empresa = Yii::app()->session['conciliacion'][2];

		Yii::import('application.controllers.FuncionesController');

		$conciliacion = FuncionesController::obtenerEstatusConciliacion($empresa);

		$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) */
			array(':apor_codigo_fk' => Yii::app()->user->id, ':renovar' => false)
		);
		/*echo "<pre>";
		print_r($conciliacion);
		echo "<pre>";
		die();*/

	
	
		

		/* var_dump(Yii::app()->session['conciliacion'][1]);exit; */
	
		$recaudos = $recaudos;

		$criteria = new CDbCriteria();
$criteria->condition = 'apor_codigo_fk = :apor_codigo_fk AND renovar = :renovar AND reca_estado != 4 AND tipo_codigo_fk = 3';
$criteria->params = array(':apor_codigo_fk' => Yii::app()->user->id, ':renovar' => false);
$criteria->order = 'reca_codigo_pk DESC'; // Ordenar por el máximo
$criteria->limit = 1;

$recaudo = SidcaiRecaudo::model()->find($criteria);

if ($recaudo) {
    $id_recaudo = $recaudo->reca_codigo_pk;
    // Realiza alguna acción con el valor obtenido
} else {
	$id_recaudo = $recaudos[2]["reca_codigo_pk"];
}



		
		
		/* $renovar = Yii::app()->session['conciliacion'][3]; */
		Yii::import('application.controllers.FuncionesController');
		$renovar = FuncionesController::mostrarRenovar(Yii::app()->user->id);


		//var_dump($renovar);exit; 
		if ($renovar) {
			$recaudos = SidcaiRecaudo::model()->findAll(
				//'apor_codigo_fk = :apor_codigo_fk AND renovar = :renovar AND tipo_codigo_fk IN (1,2)',
				'apor_codigo_fk = :apor_codigo_fk AND renovar = :renovar AND tipo_codigo_fk IN (3)',
				array(':apor_codigo_fk' => Yii::app()->user->id, ':renovar' => true)
			);
			if (count($recaudos) > 0) {
				/* var_dump($recaudos[0]["reca_codigo_pk"]);exit; */
				$id_recaudo = $recaudos[0]["reca_codigo_pk"];
			}else{
				$id_recaudo = NULL;
			}
			/* var_dump(count($id_recaudo));exit; */
		}
		$documentos_pendientes = true;
		// Id de los recaudos que son obligatorios.
		$recaudos_obligatorios = ($renovar) ? [3] : [1, 2, 3];
		/* var_dump($recaudos[1]);exit; */
		$recaudos_subidos = [];

		// Comprueba que todos los documentos obligatorios hallan sido subidos y esten en estatus 3
		foreach($recaudos as $r){
			if($r->reca_estado == 3){
				if(in_array($r->tipo_codigo_fk, $recaudos_obligatorios))
					array_push($recaudos_subidos, $r->tipo_codigo_fk);
			}
		}

		if(count($recaudos_subidos) >= count($recaudos_obligatorios)){
			$documentos_pendientes = false;
		}
		/* var_dump($documentos_pendientes);exit; */
		// Verificar si se están enviando datos POST
		if (isset($_POST['SidcaiCasillasIslr']) && !$documentos_pendientes) {

			$id = isset($_POST['SidcaiCasillasIslr']['id']) ? $_POST['SidcaiCasillasIslr']['id'] : null;

			// Crear una instancia del modelo SidcaiCasillasIslr
			$model = $id ? SidcaiCasillasIslr::model()->findByPk($id) : new SidcaiCasillasIslr;
			/* var_dump($model);exit; */
			// Asignar los valores del formulario al modelo
			$model->attributes = $_POST['SidcaiCasillasIslr'];
			$model->casilla_711 = str_replace(".", "", $model->casilla_711);
			$model->casilla_711 = str_replace(",", ".", $model->casilla_711);
			$model->casilla_780 = str_replace(".", "", $model->casilla_780);
			$model->casilla_780 = str_replace(",", ".", $model->casilla_780);
			$model->casilla_970 = str_replace(".", "", $model->casilla_970);
			$model->casilla_970 = str_replace(",", ".", $model->casilla_970);
			/* var_dump($model->attributes);exit; */
			$transaction = $model->dbConnection->beginTransaction();
			$notificar = FALSE;
			if ($id) {
				// Es una actualización, intenta guardar los cambios 
				/* var_dump($model->estatus_fk);exit; */
				if ($model->validate()) {
					if ($model->estatus_fk == 7) {
						$model->estatus_fk = 6;
						$model->motivo_rechazo_fk = NULL;
						if ($model->save()) {
							$notificar = TRUE;
							$tipo_notificacion = 8;
							$mensaje = array('status' => 'success', 'message' => 'Registro actualizado exitosamente.');
						} else {
							$transaction->rollBack();
							$mensaje = array('status' => 'danger', 'message' => 'Error al actualizar el registro.');
						}
					} else {
						$mensaje = array('status' => 'danger', 'message' => 'Error al actualizar, el registro esta en periodo de verificación.');
					}
				} else {
					$mensaje = array('status' => 'danger', 'message' => 'Error al actualizar el registro.');
				}
			} else {
				// verificar si existe alguna conciliación sin verificar
				$conciliacion_pendiente = SidcaiCasillasIslr::model()->findByAttributes(array(
					'apor_codigo_fk' => Yii::app()->user->id,
					'periodo_fiscal' => $conciliacion['periodo'],
					/* 'estatus_fk' => 6, */
				));
				/* var_dump($conciliacion_pendiente);exit; */
				if($conciliacion_pendiente == NULL){
					// Es un nuevo registro, intenta guardarlo
					$model->estatus_fk = 6;
					if ($model->validate()) {
						if ($model->save()) {
							$notificar = TRUE;
							$tipo_notificacion = 9;
							$mensaje = array('status' => 'success', 'message' => 'Registro guardado exitosamente.');
						} else {
							$transaction->rollBack();
							$mensaje = array('status' => 'danger', 'message' => 'Error al guardar el registro.');
						}

						if ($empresa->esta_codigoestatus_fk == 2003) {
							$empresa->esta_codigoestatus_fk = 2008; // lm lo cambia a en registro 
							if (!$empresa->save()) {
								$transaction->rollBack();
								$mensaje = array('status' => 'danger', 'message' => 'Error al guardar el registro.');
							}
						}
						
					} else {
						/* var_dump($model->errors);exit; */
						$mensaje = array('status' => 'danger', 'message' => 'Error al guardar el registro..');
					}
				}else {
					$mensaje = array('status' => 'danger', 'message' => 'Error, ya existe un registro en estado de verificación actualmente..');
				}
			}

			if ($notificar) {
				$tipo_notificacion = SidcaiTipoNotificacion::model()->findByPk($tipo_notificacion);
				$date = new DateTime("now", new DateTimeZone('America/Caracas'));
				$hoy = $date->format('Y-m-d H:i:s');
				if ($tipo_notificacion != null) {
					if ($tipo_notificacion->tipo_habilitado) {
						$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 	= $model->usua_codigo_fk;
						$notificacion->noti_fecha 				= $hoy;
						$notificacion->id_accion 				= Yii::app()->user->id;
						
						if (!$notificacion->save()) {
							$transaction->rollBack();
							$mensaje = array('status' => 'danger', 'message' => 'No se logró realizar la notificación al analista, por favor intente de nuevo.');
						}else{
							$transaction->commit();
						}
					}
				}
			}
			$model->casilla_711 = $model->casilla_711 != "" ? number_format($model->casilla_711, 2, ',', '.') : 0.00;
			$model->casilla_780 = $model->casilla_780 != "" ? number_format($model->casilla_780, 2, ',', '.') : 0.00;
			$model->casilla_970 = $model->casilla_970 != "" ? number_format($model->casilla_970, 2, ',', '.') : 0.00;
		} else {

			$model = SidcaiCasillasIslr::model()->findByAttributes(array(
				'apor_codigo_fk' => Yii::app()->user->id,
				'periodo_fiscal' => $conciliacion['periodo'],
			));
			/* var_dump($model);exit; */

			if ($model == null) {
				$model = new SidcaiCasillasIslr;
			} else {
				$model->casilla_711 = $model->casilla_711 != "" ? number_format($model->casilla_711, 2, ',', '.') : 0.00;
				$model->casilla_780 = $model->casilla_780 != "" ? number_format($model->casilla_780, 2, ',', '.') : 0.00;
				$model->casilla_970 = $model->casilla_970 != "" ? number_format($model->casilla_970, 2, ',', '.') : 0.00;
				if ($model->estatus_fk == 7) {
					$error = SidcaiRecaudoError::model()->find(
						array(
							'condition' => "erro_codigo_pk = :erro_codigo_pk",
							'params' => [
								':erro_codigo_pk' => $model->motivo_rechazo_fk
							],
						)
					);
					/* var_dump($error["erro_descripcion"]);exit; */
					$mensaje = array('status' => 'danger', 'message' => 'Su conciliación fue rechazada porque ' . $error["erro_descripcion"] . ', por favor, corrija el error para volver a verificar');
				}
			}
			/* var_dump($model);exit; */
		}
		/* var_dump($mensaje);exit; */
		$periodo = date('d-m-Y', strtotime($conciliacion["periodo"]));
		// var_dump($periodo);exit; 
		$this->render(
		/* $this->redirect( */
			'conciliacion',
			array(
				'model' => $model,
				'empresa' => $empresa,
				'periodo' => $periodo,
				'reca_codigo_pk' => $id_recaudo,
				'message' => $mensaje,
				'declaracionesPendientes' => $declaracionesPendientes,
				'documentos_pendientes' => $documentos_pendientes,
				//'registro_rec' => $registro_rec,
			)
		);
	}

	public function actionMensual()
	{
		// var_dump('hola');die; 
		$empresa = SidcaiAportante::model()->findByPk(Yii::app()->user->id);
		// var_dump($empresa["esta_codigoestatus_fk"]);exit; 

		/* if ($empresa["esta_codigoestatus_fk"] == 2010) {
			$recaudos = SidcaiRecaudo::model()->findAll(
				'apor_codigo_fk = :apor_codigo_fk AND renovar = :renovar AND tipo_codigo_fk IN (3)',
				array(':apor_codigo_fk' => Yii::app()->user->id, ':renovar' => true)
			);
			$nro_doc = 1;
			$renovar = true;
		}else{
			$recaudos = SidcaiRecaudo::model()->findAll(
				//'apor_codigo_fk = :apor_codigo_fk AND renovar = :renovar AND tipo_codigo_fk IN (1,2)',
				'apor_codigo_fk = :apor_codigo_fk AND renovar = :renovar AND tipo_codigo_fk IN (1,2,3)',
				array(':apor_codigo_fk' => Yii::app()->user->id, ':renovar' => false)
			);
			$nro_doc = 3;
			$renovar = false;
		} 
        echo '<pre>';
		var_dump($recaudos); 
		echo '<pre>';
		exit;*/


		$recaudos = SidcaiRecaudo::model()->findAll(
			//'apor_codigo_fk = :apor_codigo_fk AND renovar = :renovar AND tipo_codigo_fk IN (1,2)',
			'apor_codigo_fk = :apor_codigo_fk AND renovar = :renovar AND tipo_codigo_fk IN (1,2,3)',
			array(':apor_codigo_fk' => Yii::app()->user->id, ':renovar' => false)
		);

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

		/*$declaracionesAnualesUltima= SidcaiDeclaracioncti::model()->find(
			array(
				'condition' => "apor_codigo_fk = :apor_codigo_fk AND esta_codigo_fk IN (1003,1004) AND decl_tipodeclaracion = 'O'",
				'params' => [
					':apor_codigo_fk' => Yii::app()->user->id
				],
				'order' => 'decl_fechadeclaracion DESC', // Ajusta decl_fecha si hay otro campo de orden.
			)
		);
		if ($declaracionesAnualesUltima!=NULL) {

		$anioc=$declaracionesAnualesUltima["decl_fechafin_base"];
		$datetimea= new DateTime($anioc);
        $yeara = $datetimea->format('Y'); // Devuelve "2023"
		$datetimea->modify('+1 year'); // Suma un año al objeto DateTime.

        $yeara = $datetimea->format('Y'); // Obtiene el año actualizado.

		$cad1="%".Yii::app()->user->id."-".$yeara."%";

	    } 


		$registro_rec =false;

		$registro_rec = SidcaiRecaudo::model()->find(
			array(
				'condition' => "(reca_direccion LIKE :cadena1) AND apor_codigo_fk = :apor_codigo AND tipo_codigo_fk = :tipo_documento",
				'params' => [
					':tipo_documento' => 3,
					':apor_codigo' => Yii::app()->user->id,
					':cadena1' => $cad1, // Usando % para buscar cualquier posición
					//':cadena2' => $cad2 // Usando % para buscar cualquier posición
				],
			)
		);    
	  

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

		/* if(count($recaudos) < 2) { */
		if (count($recaudos) < 3) {
		 //if (count($recaudos) < $nro_doc) { 
			$model = new SidcaiRecaudo;
			// Indica si el action es para renovar recaudos.
			$renovar = false;
			$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) */
				array(':apor_codigo_fk' => Yii::app()->user->id, ':renovar' => false)
			);


			

			Yii::import('application.controllers.AportanteController');

			$this->render(
				'subir-recaudos',
				array(
					'model' => $model,
					'recaudos' => $recaudos,
					'renovar' => $renovar,
				)
			);
			Yii::app()->end();
		}

		Yii::import('application.controllers.FuncionesController');

		$conciliacion = FuncionesController::obtenerEstatusConciliacion($empresa);
		//var_dump($conciliacion);exit; 
		Yii::import('application.controllers.FuncionesController');
		$renovar = FuncionesController::mostrarRenovar(Yii::app()->user->id);

		if ($conciliacion['conciliacion']) {
			$conciliacion[0] = $conciliacion;
			$conciliacion[1] = $recaudos;
			$conciliacion[2] = $empresa;
			// $conciliacion[3] = $renovar; 
			Yii::app()->session['conciliacion'] = $conciliacion;
			$this->redirect(array(
				'conciliacion',
			));
			Yii::app()->end();
		}

		$model = new SidcaiDeclaracioncti();
		$model->unsetAttributes();  // clear any default values
		/* Yii::import('application.controllers.FuncionesController'); */
		if (isset($_POST['iniciar-flujo'])) {
			$declaraciones = $_POST['SidcaiDeclaracioncti'] ?? [];
			$fecha_creacion = $empresa->apor_fechacreacionempresa;
			//var_dump($fecha_creacion);exit; 
			$alicuota = $empresa->ciiuCodigoFk->ciiu_porcentaje;
			$transaction = $empresa->dbConnection->beginTransaction();
			$error = false;

			foreach ($declaraciones["ingresos_brutos"] as $key => $ingreso_bruto) {
				$ingresos_brutos = str_replace(".", "", $ingreso_bruto);
				$ingresos_brutos = str_replace(",", ".", $ingresos_brutos);
				$fecha_inicio = FuncionesController::convertirFecha(CHtml::encode($declaraciones["fecha_inicio_gravable"][$key]), 'yyyy-mm-dd');
				$fecha_fin = FuncionesController::convertirFecha(CHtml::encode($declaraciones["fecha_fin_gravable"][$key]), 'yyyy-mm-dd');
				$declaracion = new SidcaiDeclaracioncti();
				$declaracion->scenario = 'guardar'; // Establece el escenario 'guardar'
				$declaracion->attributes = $_POST['SidcaiDeclaracioncti'];
				$declaracion->apor_codigo_fk = $empresa->apor_codigo_pk;
				$declaracion->decl_tipodeclaracion = "M";
				$declaracion->decl_fechadeclaracion = date("Y-m-d");
				$declaracion->decl_fechainicio = $fecha_inicio;
				$declaracion->decl_fechafin = $fecha_fin;
				$declaracion->decl_ingresosbrutos = $ingresos_brutos;
				$declaracion->decl_montoaportado = 0;
				$declaracion->decl_fechainicio_base = $fecha_inicio;
				$declaracion->decl_fechafin_base = $fecha_fin;
				$declaracion->decl_alicuota = $alicuota;

				$last_day = $fecha_fin;
				$first_day = date("Y-m-d", strtotime($last_day . " - 5 day"));
				$tasa = SidcaiCambioTasa::model()->find(
					array(
						'condition' => 'cata_fecha <= :cata_fecha AND cata_fecha > :cata_fecha_inicio AND cata_habilitado = true',
						'params' => array(
							':cata_fecha' => $last_day,
							'cata_fecha_inicio' => $first_day
						),
						'order' => 'cata_fecha DESC, cata_tasa DESC',
						'limit' => 1
					)
				);

				if ($tasa == null) {
					$transaction->rollBack();
					$error = true;
					Yii::app()->user->setFlash("error", '¡Ups! La tasa para calcular el ingreso bruto mínimo está en proceso de carga, espere los próximos días.');
					break;
				}

				/* if ($ingresos_brutos <= (150000 * $tasa->cata_tasa) / 12) {
					$declaracion->decl_montorequerido = 0;
					$declaracion->esta_codigo_fk = 1003;
				} else {
					$declaracion->decl_montorequerido = $ingresos_brutos * $alicuota / 100;
					$declaracion->esta_codigo_fk = 1001;
				} */

				$declaracion->decl_montorequerido = $ingresos_brutos * $alicuota / 100;
				$declaracion->esta_codigo_fk = 1001;

				if (!$declaracion->save()) {
					$transaction->rollBack();
					$error = true;
					Yii::app()->user->setFlash("error", '¡Ups! No se logró cerrar las declaraciones, por favor vuelva a realizar el proceso nuevamente.');
					break;
				}
			}

			if (!$error) {
				$transaction->commit();
			}
		}

		if (isset($_POST['declaracion-mensual-anual-submit'])) {

		 //   echo "hola 1";die();
			$declaraciones = $_POST['SidcaiDeclaracioncti'] ?? [];
			$alicuota = $empresa->ciiuCodigoFk->ciiu_porcentaje;
			$transaction = $empresa->dbConnection->beginTransaction();
			$error = false;

			$perido_inicio = FuncionesController::convertirFecha($declaraciones["fecha_inicio_gravable"][0], "yyyy-mm-dd");
			$utime_perido_inicio = strtotime($perido_inicio);
			$utime_fecha_fin = strtotime($perido_inicio . " + 1 year");

			$ingresos_brutos = str_replace(".", "", $declaraciones["ingresos_brutos_estimado_anual"]);
			$ingresos_brutos = str_replace(",", ".", $ingresos_brutos);
			$ingresos_brutos = number_format($ingresos_brutos / 12, 2, ".", "");

			while ($utime_fecha_fin > $utime_perido_inicio) {

				$declaracion = new SidcaiDeclaracioncti();
				$declaracion->scenario = 'guardar'; // Establece el escenario 'guardar'
				$declaracion->attributes = $_POST['SidcaiDeclaracioncti'];
				$declaracion->apor_codigo_fk = $empresa->apor_codigo_pk;
				$declaracion->decl_tipodeclaracion = "M";
				$declaracion->decl_fechadeclaracion = date("Y-m-d");
				$declaracion->esta_codigo_fk = 1001;
				$declaracion->decl_fechainicio = $perido_inicio;
				$declaracion->decl_fechafin = date('Y-m-t', $utime_perido_inicio);
				$declaracion->decl_ingresosbrutos = $ingresos_brutos;
				$declaracion->decl_montorequerido = $ingresos_brutos * $alicuota / 100;
				$declaracion->decl_montoaportado = 0;
				$declaracion->decl_fechainicio_base = $perido_inicio;
				$declaracion->decl_fechafin_base = date('Y-m-t', $utime_perido_inicio);
				$declaracion->decl_alicuota = $alicuota;
				if (!$declaracion->save()) {
					$transaction->rollBack();
					$error = true;
					Yii::app()->user->setFlash("error", '¡Ups! No se logró cerrar las declaraciones, por favor vuelva a realizar el proceso nuevamente.');
					break;
				}

				$perido_inicio = date("Y-m-d", strtotime($perido_inicio . " + 1 month"));
				$utime_perido_inicio = strtotime($perido_inicio);
			}

			if (!$error) {
				$transaction->commit();
			}
		}

		$pagoSave = new SidcaiDeclaracionDetalle('validarPago');

		// Limpia los atributos del modelo para evitar datos anteriores.
		//lm 30-10-2024
        $pagoSave->unsetAttributes(); 

		$this->performAjaxValidation($pagoSave, 'agregar-pago-form');

		if (isset($_POST['SidcaiDeclaracionDetalle'])) {
			$declaracionesPorValidarPago = SidcaiDeclaracioncti::model()->findAll(
				array(
					'condition' => "apor_codigo_fk = :apor_codigo_fk AND esta_codigo_fk IN (1008) AND decl_tipodeclaracion = 'M'",
					'params' => [
						':apor_codigo_fk' => Yii::app()->user->id
					],
				)
			);

			 /* echo "<pre>";
				print_r($declaracionesPorValidarPago);
				echo "<pre>";
				die();*/
             //comentado para poder pagar varios meses asi este en verificando pago 1008
			 //lm 06-11
			//if ($declaracionesPorValidarPago == null) {
				Yii::import('application.controllers.FuncionesController');
				$pago = $_POST['SidcaiDeclaracionDetalle'];
               /* echo "<pre>";
				print_r($pago);
				echo "<pre>";
				die();*/

				// $pagoSave->attributes = $_POST['SidcaiDeclaracionMensualDetalle'];
				$pagoSave->attributes = $_POST['SidcaiDeclaracionDetalle'];
				$comprobante = CUploadedFile::getInstance($pagoSave, 'comprobante');
				$hoy = date('Y-m-d');
				$error = false;

				$referencia = SidcaiDeclaracionDetalle::model()->findAll([
					'condition' => 'decl_referencia = :decl_referencia AND banc_codigo_fk = :banc_codigo_fk AND decl_pago_aceptado = :decl_pago_aceptado',
					'params' => [
						':decl_referencia' 		=> $pago["decl_referencia"],
						':banc_codigo_fk' 		=> $pago["banc_codigo_fk"],
						':decl_pago_aceptado' 	=> TRUE
					]
				]);
				

				if ($referencia == null) {

					$extPermitidas = ['png', 'jpeg', 'jpg'];

					$ruta = Yii::getPAthOfAlias('webroot') . '/upload/' . Yii::app()->user->id . '/comprobantes_pago';
					$rutaDir = Yii::app()->params['REMOTEDIR'].Yii::app()->user->id . '/comprobantes_pago';
					$rutaDir1 = Yii::app()->params['REMOTEDIR'].Yii::app()->user->id . '/comprobantes_pago/mensual';
					$existe_local=FuncionesController::checkPathAndFile($ruta);
					//lm nuevo
                    if($existe_local=="si"){
					if (!is_dir($ruta))
						mkdir($ruta, 0777);
					} else {
						$existe_servidor=FuncionesController::directoryExists($rutaDir);

						if($existe_servidor=="no"){
								$crear_carpeta=FuncionesController::crearCarpetaSsh2($rutaDir);
						}

					}


					if ($comprobante != null) {
						if (in_array($comprobante->extensionName, $extPermitidas)) {
							$tamMaximo = 1024 * 1024 * 2; // valor en MB

							if ($comprobante->size <= $tamMaximo) {
								//lm nuevo
								 if($existe_local=="si"){
								if (!is_dir($ruta . "/mensual"))
									mkdir($ruta . "/mensual", 0777);
								} else {
								  $existe_servidor1=FuncionesController::directoryExists($rutaDir1);
								   if($existe_servidor1=="no"){
								     $crear_carpeta=FuncionesController::crearCarpetaSsh2($rutaDir1);
						            }
							   }


							} else {
								//$transaction->rollBack();
								//return ["warning", $msj_error.'<b>Comprobante de pago de la Multa Formal:</b> Máximo 2MB.'];		
							}
						} else {
							// $transaction->rollBack();
							// return ["warning", $msj_error.'<b>Comprobante de pago de la Multa Formal:</b> La extensión no es válida.'];
						}
					} else {
						// $transaction->rollBack();
						// return ["warning", $msj_error.'<b>Comprobante de pago de la Multa Formal:</b> El comprobante es requerido.'];
					}

				

					$nombre_archivo_aporte = $hoy . uniqid('-') . '.' . $comprobante->extensionName;
					$rutalocal = Yii::getPAthOfAlias('webroot') . '/upload/';
					//recuerda editar la linea siguiente
					//lm nuevo
					if($existe_local=="si"){
					$comprobante->saveAs($ruta . '/mensual/' . $nombre_archivo_aporte);
					} else {

						$arc = $rutalocal.$nombre_archivo_aporte; // Crear un archivo temporal
							//print_r($savePath);die();
						$nombre_archivo_aporte = $hoy . uniqid('-') . '.' . $comprobante->extensionName;	
						$comprobante = CUploadedFile::getInstance($pagoSave, 'comprobante');
						$comprobante->saveAs($arc);
						chmod($arc, 0777);

						$ruta_aportante= Yii::app()->params['REMOTEDIR'].Yii::app()->user->id;
					    $ar=$rutaDir1.'/'.$nombre_archivo_aporte;
						//print_r($ar);die();
					    $crear_archivo_=FuncionesController::crearArchivoSsh2($arc,$ar,$ruta_aportante);


					}
					//lm end

					$decl_monto = str_replace(".", "", $pago["decl_monto"]);
					$decl_monto = str_replace(",", ".", $decl_monto);
					$decl_fechapago = FuncionesController::convertirFecha(CHtml::encode($pago["decl_fechapago"]), 'yyyy-mm-dd');

					$alicuota = $empresa->ciiuCodigoFk->ciiu_porcentaje;
					// $transaction = $empresa->dbConnection->beginTransaction();
					$transaction = Yii::app()->db->beginTransaction();

					/*$declaraciones = SidcaiDeclaracioncti::model()->findAll(
						array(
							'condition' => "apor_codigo_fk = :apor_codigo_fk AND esta_codigo_fk IN (1001) AND decl_tipodeclaracion = 'M'",
							'params' => [
								':apor_codigo_fk' => Yii::app()->user->id
							],
							'order' => 'decl_fechainicio asc',
						)
					);*/

					$codigoDeclArray = explode(',', $pago["codigo_declaraciones"]);

					// Limpiar espacios en blanco (en caso de que existan)
					$codigoDeclArray = array_map('trim', $codigoDeclArray);

					// Validar si viene con uno o dos valores
					

                    if (count($codigoDeclArray) === 1) {

					$declaraciones = SidcaiDeclaracioncti::model()->findAll(
						array(
							'condition' => "apor_codigo_fk = :apor_codigo_fk AND esta_codigo_fk IN (1001) AND decl_tipodeclaracion = 'M' AND decl_codigo_pk = :decl_codigo_pk",
							'params' => [
								':apor_codigo_fk' => Yii::app()->user->id,
								':decl_codigo_pk' => $pago["codigo_declaraciones"] // Reemplaza $codigoDecl con el valor específico
							],
							'order' => 'decl_fechainicio asc',
						)
					);
				}else{
// Convertir la cadena en un array
$codigoDeclArray = explode(',', $pago["codigo_declaraciones"]);

// Crear una lista de parámetros nombrados dinámicamente
$namedParams = [];
foreach ($codigoDeclArray as $index => $codigo) {
    $namedParams[":codigo$index"] = trim($codigo); // Crear parámetros nombrados únicos
}

// Crear la consulta SQL con `IN` y parámetros nombrados
$placeholders = implode(',', array_keys($namedParams)); // Genera :codigo0,:codigo1, etc.

$declaraciones = SidcaiDeclaracioncti::model()->findAll(
    array(
        'condition' => "apor_codigo_fk = :apor_codigo_fk AND esta_codigo_fk IN (1001) AND decl_tipodeclaracion = 'M' AND decl_codigo_pk IN ($placeholders)",
        'params' => array_merge([':apor_codigo_fk' => Yii::app()->user->id], $namedParams),
        'order' => 'decl_fechainicio asc',
    )
);

// Recorrer los resultados
/*foreach ($declaraciones as $declaracion) {
    echo "Código declaración: " . $declaracion->decl_codigo_pk . "<br>";
    echo "Fecha inicio: " . $declaracion->decl_fechainicio . "<br>";
    echo "Tipo declaración: " . $declaracion->decl_tipodeclaracion . "<br>";
    echo "<hr>";
}*/


}

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

					$credito_fiscal = SidcaiCreditoFiscal::model()->find([
						'condition' => 'apor_codigo_fk = :apor_codigo_fk AND cred_habilitado = :cred_habilitado',
						'params' => [
							':apor_codigo_fk' => Yii::app()->user->id,
							':cred_habilitado' => TRUE,
						]
					]);


					if ($credito_fiscal != NULL) {
						$decl_monto_decrease = $decl_monto + $credito_fiscal->cred_monto;
					} else {
						$decl_monto_decrease = $decl_monto;
					}

					//print_r($decl_monto_decrease);die();

					$declaracionDetalle = new SidcaiDeclaracionDetalle();

					$connection = Yii::app()->db;
					// Obtiene el numero de registro filtrados
					$sql = "SELECT da.* FROM sidcai_declaracioncti d INNER JOIN sidcai_declaracion_analista da ON d.decl_codigo_pk = da.decl_codigo_fk AND da.usua_habilitado = TRUE AND d.apor_codigo_fk = " . Yii::app()->user->id . " ORDER BY da.fecha_asignacion DESC LIMIT 1";
					$command = $connection->createCommand();
					$command->text = $sql;
					$ultimo_analista = $command->queryRow();

					//print_r($ultimo_analista);die();

					if ($ultimo_analista) {
						$declaracionDetalle->analista_fk = $ultimo_analista["usua_codigo_fk"];
					}

					$declaraciones_array = [];
					if ($declaraciones != NULL) {
						$count_declaraciones = count($declaraciones);
						//echo "hola " . $count_declaraciones;die();
						$declaracion_anterior = '';
						foreach ($declaraciones as $key => $declaracion) {

							//echo $decl_monto_decrease;die();
							//if($declaracion->decl_montorequerido <= $decl_monto_decrease) {
							if ($decl_monto_decrease > 0) {
								
								//var_dump($key);die();
								if ($key == 0) {
									//echo "1- ". $declaracion->decl_codigo_pk;
									$declaraciones_array[] = $declaracion->decl_codigo_pk;
									if ($declaracion->decl_montorequerido > $decl_monto_decrease) {
										$decl_monto_decrease = 0;
										//echo "1- "; die();
									} else {
										if($declaracion->decl_montoaportado>0){
											$decl_monto_decrease -= $declaracion->decl_montorequerido-$declaracion->decl_montoaportado;
											//echo "2- "; die();
										}else{
											$decl_monto_decrease -= $declaracion->decl_montorequerido;
											//echo "3- "; die();
										}
										
									}
									$declaracion->esta_codigo_fk = 1008;

								} else {
									//if($declaracion->decl_codigo_pk - 1 == $declaraciones[$declaracion_anterior]->decl_codigo_pk){
									if ($key - 1 == $declaracion_anterior) {
										//var_dump('siguiente');
										$declaraciones_array[] = $declaracion->decl_codigo_pk;
										if ($declaracion->decl_montorequerido > $decl_monto_decrease) {
											$decl_monto_decrease = 0;
										} else {
											$decl_monto_decrease -= $declaracion->decl_montorequerido;
										}
										$declaracion->esta_codigo_fk = 1008;
									}
								}

								//var_dump($declaracion->decl_montorequerido);
								//var_dump($decl_monto_decrease);
								$declaracion_anterior = $key;
								/* $declaraciones_array[] = $declaracion->decl_codigo_pk;
								$decl_monto_decrease -= $declaracion->decl_montorequerido; */
								// $declaracion->decl_montoaportado = $declaracion->decl_montorequerido;
								/* $declaracion->esta_codigo_fk = 1008; */
								// if($decl_monto_decrease == 0 && $credito_fiscal != NULL) {
								// 	$declaracion->decl_montoaportado -= $credito_fiscal->cred_monto;
								// }
							} elseif (count($declaraciones_array) == 0 && $decl_monto_decrease > 0) {
								$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' => Yii::app()->user->id,
										':decl_codigo_fk_destino' => $declaracion->decl_codigo_pk,
									]
								]);
								if ($credito_fiscal_declaracion != NULL) {
									$decl_monto_decrease = $decl_monto + $credito_fiscal_declaracion->cred_monto;
								}
								$detalle_declaracion_pasada = SidcaiDeclaracionDetalle::model()->findAll([
									'condition' => 'codigo_declaraciones = :codigo_declaraciones AND (decl_pago_aceptado = TRUE OR decl_pago_aceptado IS NULL)',
									'params' => [
										':codigo_declaraciones' => "$declaracion->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 + $decl_monto_decrease) >= $declaracion->decl_montorequerido) {
								$declaracion->esta_codigo_fk = 1008;
								// }

								$decl_monto_decrease = 0;
								$declaraciones_array[] = $declaracion->decl_codigo_pk;
							}
							if (($count_declaraciones == $key + 1 && $decl_monto_decrease > 0) ||
								(isset($declaraciones[$key + 1]) && $declaraciones[$key + 1]->decl_montorequerido > $decl_monto_decrease && $decl_monto_decrease > 0)
							) {

								//revisar lm

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

								echo "declaraciones"; 
								echo "<pre>";
								print_r($declaraciones[$key]);
								echo "</pre>";

								echo "key"; 
								echo "<pre>";
								print_r($declaraciones[$key + 1]);
								echo "</pre>";

								echo "credito_fiscal bb"; 
								echo "<pre>";
								print_r($declaraciones[$key + 1]->decl_montorequerido);
								echo "</pre>";*/


								/*$credito_fiscal->decl_codigo_fk_destino = $declaracion->decl_codigo_pk;
								$credito_fiscal->cred_habilitado = 0;
								if (!$credito_fiscal->save()) {
									$error = true;
								}*/




								//die();
								// $declaracion->decl_montoaportado += $decl_monto_decrease;
								// $credito = new SidcaiCreditoFiscal();
								// $credito->apor_codigo_fk = Yii::app()->user->id;
								// $credito->decl_codigo_fk_origen = $declaracion->decl_codigo_pk;
								// $credito->cred_monto = $decl_monto_decrease;
								// $credito->cred_fecha = date("Y-m-d");
								//$decl_monto_decrease -= $decl_monto_decrease;
								// if($decl_monto_decrease == 0 && $credito_fiscal != NULL) {
								// 	$declaracion->decl_montoaportado -= $credito_fiscal->cred_monto;
								// }
								// if(!$credito->save()) {
								// 	$error = true;
								// }
							}
							if ($decl_monto_decrease == 0 && $credito_fiscal != NULL && $credito_fiscal->decl_codigo_fk_destino == NULL) {
								$credito_fiscal->decl_codigo_fk_destino = $declaracion->decl_codigo_pk;
								$credito_fiscal->cred_habilitado = 0;
								if (!$credito_fiscal->save()) {
									$error = true;
								}
							}
							if (!$declaracion->save()) {
								$error = true;
							}/* else{
								var_dump('se guardo');
								var_dump($declaracion->decl_codigo_pk);
								var_dump($declaracion->esta_codigo_fk);
								var_dump($declaracion->decl_fechainicio);
								echo '<br>';
								echo '<br>';
							} */
						}
					}
					/* var_dump('revisa');exit; */
					for ($index = 0; $index < count($declaraciones_array) - 1; $index++) {
						//var_dump('revisa');exit; 
						$declaracionRelacionada = new SidcaiDeclaracionRelacionada();
						$declaracionRelacionada->decl_codigo_fk = max($declaraciones_array);
						$declaracionRelacionada->decl_atrasada_fk = $declaraciones_array[$index];
						/* var_dump($declaracionRelacionada->decl_codigo_fk);
						var_dump($declaracionRelacionada->decl_atrasada_fk);
						echo '<br>';
						echo '<br>'; */
						//descomentar
						if (!$declaracionRelacionada->save()) {
							// print_r($declaracionRelacionada->getErrors());
							$error = true;
						}
					   //descomentar
					}
					/* var_dump($declaraciones_array);
					var_dump(implode(",", $declaraciones_array));exit;
					exit; */
					//print_r($ultimo_analista);die();
					if ($ultimo_analista) {
						for ($index = 0; $index < count($declaraciones_array); $index++) {
							$declaracionAnalistas = SidcaiDeclaracionAnalista::model()->find([
								'condition' => 'decl_codigo_fk = :decl_codigo_fk AND decl_finalizada = :decl_finalizada',
								'params' => [
									':decl_codigo_fk' => $declaraciones_array[$index],
									':decl_finalizada' => TRUE,
								]
							]);
							//print_r($declaracionAnalista);die();

							if ($declaracionAnalistas) {
								$actualizar = SidcaiDeclaracionAnalista::model()->updateAll(
									[
										'decl_finalizada' => 0,
										'fecha_finalizacion' => null,
										'usua_habilitado' => 0
									],
									"decl_codigo_fk = " . $declaraciones_array[$index] . " AND decl_finalizada = TRUE"
								);
								if ($actualizar == 0) {
									$error = true;
								}
							}

							$declaracionAnalista = new SidcaiDeclaracionAnalista();
							$declaracionAnalista->decl_codigo_fk = $declaraciones_array[$index];
							$declaracionAnalista->usua_codigo_fk = $ultimo_analista["usua_codigo_fk"];
							$declaracionAnalista->usua_habilitado = 1;
							$declaracionAnalista->fecha_asignacion = date('Y-m-d H:i:s');
							$declaracionAnalista->decl_finalizada = 0;


							if (!$declaracionAnalista->save()) {
								$error = true;
							}
						}
					}

					//$declaracionDetalle->codigo_declaraciones = $pago["codigo_declaraciones"];
					$declaracionDetalle->codigo_declaraciones = implode(",", $declaraciones_array);
					$declaracionDetalle->banc_codigo_fk = $pago["banc_codigo_fk"];
					$declaracionDetalle->decl_modalidadpago = $pago["decl_modalidadpago"];
					$declaracionDetalle->decl_referencia = $pago["decl_referencia"];
					$declaracionDetalle->decl_monto = $decl_monto;
					$declaracionDetalle->decl_fechapago = $decl_fechapago;
					$declaracionDetalle->fecha_registro = date('Y-m-d H:i:s');
					$declaracionDetalle->comprobante = 'upload/' . Yii::app()->user->id . '/comprobantes_pago' . '/mensual/' . $nombre_archivo_aporte;
					$declaracionDetalle->apor_codigo_fk = Yii::app()->user->id;
					$declaracionDetalle->decl_extemporaneo = 0;

					//print_r($declaracionDetalle);die();
					if ($error || !$declaracionDetalle->save()) {
						$transaction->rollBack();
						Yii::app()->user->setFlash("mensaje-error", '¡Ups! No se logró cerrar las declaraciones, por favor vuelva a realizar el proceso nuevamente.');
					} else {
						$transaction->commit();
						Yii::app()->user->setFlash("mensaje-pago", 'Pago Registrado.');
					}
				} else {
					Yii::app()->user->setFlash("mensaje-error", 'El número de referencia ya ha sido registrado.');
				}
			/*} else {
				Yii::app()->user->setFlash("mensaje-error", 'No puede registrar pago mientras exista una declaración con pago en verificación.');
			}*/
		}

		$credito_fiscal = SidcaiCreditoFiscal::model()->find([
			'condition' => 'apor_codigo_fk = :apor_codigo_fk AND cred_habilitado = :cred_habilitado',
			'params' => [
				':apor_codigo_fk' => Yii::app()->user->id,
				':cred_habilitado' => TRUE,
			]
		]);
		$credito = 0;
		if ($credito_fiscal != NULL) {
			$moneda = FuncionesController::obtenerMoneda($credito_fiscal->cred_fecha);
			$monto = number_format($credito_fiscal->cred_monto, 2, ",", ".");
			$monto = $moneda . " " . $monto;
			//Yii::app()->user->setFlash("credito_fiscal", 'Tienes un crédito fiscal de <b>' . $monto . '</b> y será sumando a su próximo aporte.');
			$credito = $credito_fiscal->cred_monto;
		}
        //lm 22-01
		$declaraciones_mostrar = $this->mostrarDeclaracionMensualAportante();
		
		/*echo "<pre>";
		print_r($declaraciones_mostrar);
		echo "<pre>";
		die();*/
		//TODO: crear condición para mostrar mendaje de no aportante en mensual.php
		if (count($declaraciones_mostrar[1]) <= 0) {
			Yii::app()->user->setFlash("mensaje-success", 'No existen meses pendientes por declarar.');
		}

		$pagos = $this->mostrarPagosMensuales();

		$modelSave = new SidcaiDeclaracioncti();
		$pagoSave->unsetAttributes();
		// $pagoSave = new SidcaiDeclaracionMensualDetalle();


		$declaracionesAnualesPendientes = SidcaiDeclaracioncti::model()->find(
			array(
				'condition' => "apor_codigo_fk = :apor_codigo_fk AND esta_codigo_fk IN (1001) AND decl_tipodeclaracion = 'O'",
				'params' => [
					':apor_codigo_fk' => Yii::app()->user->id
				],
			)
		);
        $notifanual=false;
		$declaracionesPendientes = $declaracionesAnualesPendientes == NULL ? FALSE : TRUE;
		if($declaracionesPendientes){
			$notifanual=true;
			Yii::app()->user->setFlash("mensaje-error", 'Usted posee declaraciones anuales pendientes, finalice las mismas para continuar con los aportes mensuales.');
		}
		//var_dump($declaraciones_mostrar[5]);exit; 
        //lm nuevo
        $notiftasa=false;
		$decla_tasa=$declaraciones_mostrar[1];


		foreach ($decla_tasa as $tasa) {

			
			
			$fecha_iniciot = FuncionesController::convertirFecha(CHtml::encode($tasa["inicio"]), 'yyyy-mm-dd');
			$fecha_fint = FuncionesController::convertirFecha(CHtml::encode($tasa["fin"]), 'yyyy-mm-dd');

			

			$last_dayt = $fecha_fint;
			$first_dayt = date("Y-m-d", strtotime($last_dayt . " - 5 day"));
			$tasah = SidcaiCambioTasa::model()->find(
				array(
					'condition' => 'cata_fecha <= :cata_fecha AND cata_fecha > :cata_fecha_inicio AND cata_habilitado = true',
					'params' => array(
						':cata_fecha' => $last_dayt,
						'cata_fecha_inicio' => $first_dayt
					),
					'order' => 'cata_fecha DESC, cata_tasa DESC',
					'limit' => 1
				)
			);

			if ($tasah == null) {
				$notiftasa=true;
				
			}

		}

		/*echo "<pre>";
		print_r($declaraciones_mostrar[1]);
		echo "<pre>";
		die();*/



        //


		$this->render(
			'mensual',
			array(
				'model' => $model,
				'modelSave' => $modelSave,
				'pagoSave' => $pagoSave,
				'mostrarDeclaraciones' => $declaraciones_mostrar[0],
				'mostrarDeclaracionesPendientes' => $declaraciones_mostrar[1],
				'pagos' => $pagos,
				'links' => $declaraciones_mostrar[2],
				'credito' => $credito,
				'pagado' => $declaraciones_mostrar[3],
				'pagoPendiente' => $declaraciones_mostrar[4],
				'aportante' => $declaraciones_mostrar[5],
				'tasanotif' => $notiftasa,
				'notifanual' => $notifanual,
			)
		);
	}




	

	// 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(){
		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'])){

			//echo "ssss 1";die();
			$model->attributes = $_POST['SidcaiRecaudo'];

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

			$existe_local=FuncionesController::checkPathAndFile($ruta);

			//print_r("hola si 1 ". $existe_local);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
					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;

						Yii::import('application.controllers.AportanteController');
						echo $this->subirRecaudo($model, $archivo, 8, $ruta, $extPermitidas, $_POST['tipo'], $renovar);
		            }

		            if($existe_local=="no"){
						$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); 
						$remoteDir .=  "/".$_POST['tipo'];

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

						$renovar = false;

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

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

							//print_r('d'. $renovar);die();

						Yii::import('application.controllers.AportanteController');
						//echo $this->subirRecaudo($model, $archivo, 8, $ruta, $extPermitidas, $_POST['tipo'], $renovar);
						echo $this->subirRecaudoSsh($model, $archivo, 8, $remoteDir, $extPermitidas, $_POST['tipo'], $renovar);
		            }





				}
		}
	}

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

		$recaudos = 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($recaudos != null){
			foreach($recaudos 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;
	}

	/***************
	$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 subirRecaudoSsh($model, $archivo, $tamano, $ruta, $extPermitidas, $tipo, $renovar){
		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'];

			if(in_array($archivo->extensionName, $extPermitidas)){
				$tamMaximo = 1024 * 1024 * $tamano; // $tamano -> valor en MB

				if($archivo->size <= $tamMaximo){
					//print_r("fffffffffff". $renovar);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;
                    
					//echo "renovar       ". $renovar;die();
					// 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;
						$archivo->saveAs($ruta_local);
						$ruta_aportante="";
                        //print_r($tipo);die();
				 		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="";

							 //print_r($ruta_local);
							// print_r($ar);die();
							 $crear_archivo=FuncionesController::crearArchivoSsh2($ruta_local,$ar,$ruta_aportante);


						 	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.";
		}
	}

	/**
	 * Vista de los Bancos de FONACIT en Aportes y Accesorios
	 */
	public function actionBancos(){
		$this->render('bancos');
	}


	/***************************************************************************
						Actions que son llamados por Ajax
	***************************************************************************/
	public function actionBancosAportes(){
		if(isset($_POST['banco_aporte'])){
			$banco = SidcaiBanco::model()->find('banc_codigo_pk = :banc_codigo_pk AND banc_habilitado = :banc_habilitado',
				array(
					':banc_codigo_pk' => $_POST['banco_aporte'],
					':banc_habilitado' => TRUE
				)
			);

			$data = "";

			if($banco != null){
				$data = $banco->banc_ruta;
			}

			echo $data;
		}
	}

	public function actionBancosMultas(){
		if(isset($_POST['banco_multa'])){
			$banco = SidcaiBanco::model()->find('banc_codigo_pk = :banc_codigo_pk AND banc_habilitado = :banc_habilitado',
				array(
					':banc_codigo_pk' => $_POST['banco_multa'],
					':banc_habilitado' => TRUE
				)
			);

			$data = "";

			if($banco != null){
				$data = $banco->banc_ruta;
			}

			echo $data;
		}
	}


	/**
	 * Obtiene el periodo gravable de la declaración que se está pagando.
	 * action llamado desde declaracion-2.js
	 */
	public function actionObtenerPeriodos(){
		if(isset($_POST['obtener'])){
			$declaracion = SidcaiDeclaracioncti::model()->find(
				array(
					'condition' => 'apor_codigo_fk = :apor_codigo_fk',
					'params' => array(':apor_codigo_fk' => Yii::app()->user->id),
					'order' => 'decl_codigo_pk DESC',
					'limit' => 1
				)
			);


			$data['datos'] = array(
				date("Y-m-d", strtotime($declaracion->decl_fechainicio."-3 month")),
				$declaracion->decl_fechafin,
			);

			echo json_encode($data);
		}else{
			throw new CHttpException(404, 'La página no existe.');
		}
	}



	/**
	 * Tabla que muestra los detalles de la declaración en declaracion/consulta
	 * Action llamado desde funciones.js
	 */
	public function actionObtenerDetallesDeclaracion(){
		if(isset($_POST['id'])){
			$id = $_POST['id'];

			$declaracion = SidcaiDeclaracioncti::model()->findByPk($id);

			$historio = false;// Variable que indica si la declaración es una historico de BD_HISTORICO

			if($declaracion == null){
				$sql = "SELECT * FROM sidcai_declaracioncti WHERE decl_codigo_pk = :decl_codigo_pk ORDER BY decl_codigo_pk DESC";
				$comando = Yii::app()->db2->createCommand($sql);
				$comando->bindParam(':decl_codigo_pk', $id);
				$declaracion = $comando->queryRow();

				$historio = true;
			}

			$data = array();

			if($declaracion != null){
				if($_POST['id_aportante'] != null){
					$id_aportante = $_POST['id_aportante'];
				}else{
					$id_aportante = Yii::app()->user->id;
				}

				if($declaracion['apor_codigo_fk'] == $id_aportante || $historio = true){
					$ingresos_brutos = "";
					$monto_requerido = "";
					$monto_aportado = "";
					$monto_faltante;
					$monto_credito_fiscal_asignado = 0.00;
					$monto_credito = null;
					$codigo_declaracion_credito_origen = null;
					$id_declaracion_credito_destino = false;


					Yii::import('application.controllers.FuncionesController');

					// Crédito fiscal Origen
					$credito_fiscal = SidcaiCreditoFiscal::model()->find([
						'condition' => 'apor_codigo_fk = :apor_codigo_fk AND (decl_codigo_fk_origen = :decl_codigo_fk_origen OR decl_codigo_fk_destino = :decl_codigo_fk_destino) AND cred_habilitado = :cred_habilitado',
						'params' => [
							':apor_codigo_fk' => $id_aportante,
							':decl_codigo_fk_origen'=> $id,
							':decl_codigo_fk_destino'=> $id,
							':cred_habilitado' => TRUE,
						]
					]);

					if($credito_fiscal != null){
						if($credito_fiscal->decl_codigo_fk_destino == $id){
							$codigo_declaracion_credito_origen = $credito_fiscal->decl_codigo_fk_origen;
							$id_declaracion_credito_destino = true;
						}

						$monto_credito_fiscal_asignado = $credito_fiscal->cred_monto;
						$moneda_credito = FuncionesController::obtenerMoneda($credito_fiscal->cred_fecha);
						$monto_credito = $moneda_credito." ".number_format($monto_credito_fiscal_asignado, 2, ",", ".");
					}

					$date = new DateTime("now", new DateTimeZone('America/Caracas')); 
					$hoy = $date->format('Y-m-d');

					$ingresos_brutos = FuncionesController::obtenerMoneda($declaracion['decl_fechafin_base']) ." ". number_format($declaracion['decl_ingresosbrutos'], 2, ',', '.');


					$monto_requerido = FuncionesController::obtenerMoneda($declaracion['decl_fechadeclaracion']) . " " .number_format($declaracion['decl_montorequerido'], 2, ',', '.');

					$monto_faltante = FuncionesController::reconversion($declaracion['decl_fechadeclaracion'], ($declaracion['decl_montorequerido'] - $declaracion['decl_montoaportado']));
					
					if($declaracion['esta_codigo_fk'] != 1003 && $declaracion['esta_codigo_fk'] != 1004){
						$monto_aportado = $declaracion['decl_montoaportado'] + $monto_credito_fiscal_asignado;
						$monto_faltante = $monto_faltante - $monto_credito_fiscal_asignado;
					}else{
						$monto_aportado = $declaracion['decl_montoaportado'];
					}

					if(isset($declaracion['decl_dias_prorroga']))
						$dias_prorroga = $declaracion['decl_dias_prorroga']. " días";
					else
						$dias_prorroga = "0 días";

					$monto_aportado = FuncionesController::obtenerMoneda($declaracion['decl_fechadeclaracion']) . " " .number_format($monto_aportado, 2, ',', '.');

					$monto_faltante = FuncionesController::obtenerMoneda($hoy)." ".number_format($monto_faltante, 2, ",", ".");

					$estatus = SidcaiEstatus::model()->findByPk($declaracion['esta_codigo_fk']);
					

					$data['datos'] = array(
						// Datos usados en consulta de la declaración y algunos en fiscalización
						$declaracion['decl_codigo_pk'],
						FuncionesController::convertirFecha($declaracion['decl_fechadeclaracion'], 'dd/mm/yyyy'),
						FuncionesController::convertirFecha($declaracion['decl_fechainicio_base'], 'dd/mm/yyyy'),
						FuncionesController::convertirFecha($declaracion['decl_fechafin_base'], 'dd/mm/yyyy'),
						$ingresos_brutos,
						$monto_requerido,
						$monto_aportado,
						$monto_faltante,
						FuncionesController::convertirFecha($declaracion['decl_fechainicio'], 'dd/mm/yyyy'),
						FuncionesController::convertirFecha($declaracion['decl_fechafin'], 'dd/mm/yyyy'),
						$estatus->esta_nombre,
						$monto_credito,
						$codigo_declaracion_credito_origen,
						$dias_prorroga,
						$id_declaracion_credito_destino,
					);


					//
					$array_declaracion_string = "";

					$relacionadas = SidcaiDeclaracionRelacionada::model()->find([
						'condition' => 'decl_atrasada_fk = :decl_atrasada_fk OR decl_codigo_fk = :decl_codigo_fk',
						'params' => [':decl_atrasada_fk' => $id, ':decl_codigo_fk' => $id]
					]);

					if($relacionadas != null){
						$dcl_principal = SidcaiDeclaracionRelacionada::model()->findAll([
							'condition' => 'decl_codigo_fk = :decl_codigo_fk',
							'params' => [':decl_codigo_fk' => $relacionadas->decl_codigo_fk],
							'order' => 'decl_atrasada_fk ASC'
						]);

						foreach($dcl_principal as $d){
							$array_declaracion_string .= $d->decl_atrasada_fk.",";
						}

						$array_declaracion_string .= $relacionadas->decl_codigo_fk;
					}else{
						$array_declaracion_string = $declaracion['decl_codigo_pk'];
					}

					$detalle_declaracion = SidcaiDeclaracionDetalle::model()->findAll([
						'condition' => 'codigo_declaraciones = :codigo_declaraciones',
						'params' => [
							':codigo_declaraciones' => "$array_declaracion_string",
						],
						'order' => 'deta_codigo_pk ASC'
					]);

					$tabla = "";

					if($detalle_declaracion != null){
						foreach($detalle_declaracion as $d){
							if($d->rech_codigo_fk == 6)
								continue;

							$monto_detalle = FuncionesController::obtenerMoneda($d->decl_fechapago).number_format($d->decl_monto, 2, ',', '.');

							$tabla .= '<tr>';
							$tabla .= '<td>'.$d->deta_codigo_pk.'</td>';
							$tabla .= '<td>' .FuncionesController::convertirFecha($d->decl_fechapago, 'dd/mm/yyyy'). '</td>';

							$tabla .= '<td>' .$declaracion->decl_alicuota. ' %</td>';	

							$modalidad_pago = ($d->decl_modalidadpago == 1) ? "Planilla" : "Transferencia";

							$tabla .= '<td>' .$modalidad_pago. '</td>';	

							$cuenta = SidcaiBanco::model()->findByPk($d->banc_codigo_fk);

							// Muestra el nombre del Banco.
							$tooltip_banco = "<span data-tooltip='".$cuenta->banc_nombre."'>".$cuenta->banc_ruta."</span>";

							$tabla .= '<td>' .$tooltip_banco. '</td>';
							$tabla .= '<td>' .$d->decl_referencia. '</td>';
							$tabla .= '<td>' .$monto_detalle. '</td>';

							$comprobante = "<button style='padding: 10px' type='button' class='btn btn-warning' data-toggle='modal' data-target='#modalComprobante' title='Ver comprobante' onclick='comprobante(".$d->deta_codigo_pk.", 1)'><i class='fas fa-file-invoice'></i></button>";

							$tabla .= '<td>'.$comprobante.'</td>';

							$pago_aceptado = $d->decl_pago_aceptado;

							if($pago_aceptado === NULL)
								$tabla .= "<td>En revisión</td>";
							else if($pago_aceptado == FALSE)
								$tabla .= "<td><span class='text-danger font-weight-bold'>Rechazado</span></td>";
							else
								$tabla .= "<td><span class='text-success font-weight-bold'>Aceptado</span></td>";

							$tabla .= '</tr>';
						}			
					}else{
						$tabla = '<tr><td colspan="9"><center>No hay resultados.</center></td></tr>';
					}

					$data['detalles'] = $tabla;

				}else{
					$data = null;
					throw new CHttpException(404, 'La página no existe.');
				}
			}else{
				$data = null;
			}
			echo json_encode($data);
		}else{
			throw new CHttpException(404, 'La página no existe.');
		}
	}

	/**
	 * Muestra las multas que tiene la declaración en "declaracion/consulta"
	 * Action llamado desde funciones.js
	 */
	public function actionObtenerdetallesmulta(){
		if(isset($_POST['id'])){
			$id = $_POST['id'];

			$declaracion = SidcaiDeclaracioncti::model()->findByPk($id);

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


				if($_POST['id_aportante'] != null){
					$id_aportante = $_POST['id_aportante'];
				}else{
					$id_aportante = Yii::app()->user->id;
				}

				if($declaracion->apor_codigo_fk == $id_aportante){
					$declaraciones = FuncionesController::obtenerDeclaraciones($id, $id_aportante);

					$monto_intereses = 0.00;
					$monto_multa_material = 0.00;

					$moneda_intereses = "";
					$moneda_material  = "";

					$codigos_declaraciones = "";

					for($i = 0; $i < count($declaraciones['array_declaraciones_multa']); $i++){					
						$intereses_moratorios = SidcaiMultaInteres::model()->find([
							'select' => 'mult_monto, fecha_registro',
							'condition' => 'apor_codigo_fk = :apor_codigo_fk AND decl_codigo_fk = :decl_codigo_fk AND mult_habilitada = :mult_habilitada',
							'params' => [
								':apor_codigo_fk' => $id_aportante,
								':decl_codigo_fk' => $declaraciones['array_declaraciones_multa'][$i],
								':mult_habilitada' => TRUE,
							],
							'order' => 'mult_codigo_pk DESC'
						]);

						if($intereses_moratorios != null){
							$moneda_intereses = FuncionesController::obtenerMoneda($intereses_moratorios->fecha_registro);
							$monto_intereses += $intereses_moratorios->mult_monto;
						}

						$multa_material = SidcaiDeclaracionMulta::model()->find([
							'select' => 'decl_mult_fecha, decl_mult_monto',
							'condition' => 'decl_codigo_fk = :decl_codigo_fk AND mult_codigo_fk = :mult_codigo_fk AND mult_habilitada = :mult_habilitada',
							'params' => [
								':decl_codigo_fk' => $declaraciones['array_declaraciones_multa'][$i],
								':mult_codigo_fk' => 1,
								':mult_habilitada' => TRUE
							]
						]);

						if($multa_material != null){
							$moneda_material = FuncionesController::obtenerMoneda($multa_material->decl_mult_fecha);
							$monto_multa_material += $multa_material->decl_mult_monto;
						}

						// Multa Formal
						$multas_seleccionadas = SidcaiDeclaracionMulta::model()->findAll([
							'select' => 'decl_mult_fecha, decl_mult_monto, mult_codigo_fk',
							'condition' => 'decl_codigo_fk = :decl_codigo_fk AND mult_codigo_fk != :mult_codigo_fk AND mult_habilitada = :mult_habilitada',
							'params' => [
								':decl_codigo_fk' => $declaraciones['array_declaraciones_multa'][$i],
								':mult_codigo_fk' => 1,
								':mult_habilitada' => TRUE
							]
						]);

						$multa_mayor = 0;
						$id_mayor = NULL;

						if($multas_seleccionadas != null){
							foreach($multas_seleccionadas as $m){
								$multa = SidcaiMulta::model()->findByPk($m->mult_codigo_fk);

								if($multa != null){
									if($multa_mayor < $multa->mult_unidadestributarias){
										$multa_mayor = $multa->mult_unidadestributarias;
										$id_mayor 	 = $multa->mult_codigo_pk;
									}
								}
							}
						}

						if($multas_seleccionadas != null){
							$data['formal'] =  "";

							$moneda_multa_formal = FuncionesController::obtenerMoneda($multas_seleccionadas[0]->decl_mult_fecha);

							foreach($multas_seleccionadas as $m){
								$multa = SidcaiMulta::model()->findByPk($m->mult_codigo_fk);

								if($multa != null){
									$data['formal'] .= '<tr>';

									$data['formal'] .= '<td>'.$multa->mult_ley.'</td>';
									$data['formal'] .= '<td>'.$multa->mult_unidadestributarias.'</td>';

									if($id_mayor != NULL){
										if($id_mayor == $m->mult_codigo_fk){
											$data['formal'] .= "<td>".number_format($multa->mult_unidadestributarias, 0, ",", ".")."</td>"; // Art.82
										}else{
											$art82 = ($multa->mult_unidadestributarias / 2);
											$data['formal'] .= "<td>".number_format($art82, 0, ",", ".")."</td>"; // Art.82
										}
									}else{
										$data['formal'] .= "<td>".number_format($multa->mult_unidadestributarias, 0, ",", ".")."</td>"; // Art.82
									}

									$data['formal'] .= '<td>'.$multa->mult_descripcion.'</td>';
									$data['formal'] .= '<td>'.$moneda_multa_formal." ".number_format($m->decl_mult_monto, 2, ',', '.').'</td>';

									$data['formal'] .= '</tr>';
								}
							}
						}



						
						if($multas_seleccionadas != null){
							foreach($multas_seleccionadas as $m){
								$multa = SidcaiMulta::model()->findByPk($m->mult_codigo_fk);

								if($multa != null){
									if($multa_mayor < $multa->mult_unidadestributarias){
										$multa_mayor = $multa->mult_unidadestributarias;
										$id_mayor 	 = $multa->mult_codigo_pk;
									}
								}
							}
						}

						$tabla = '';

						if($multas_seleccionadas != null){
							foreach($multas_seleccionadas as $m){
								$multa = SidcaiMulta::model()->findByPk($m->mult_codigo_fk);

								if($multa != null){
									$tabla .= "<tr>";
									$tabla .= "<td>".$multa->mult_ley."</td>";
									$tabla .= "<td>".number_format($multa->mult_unidadestributarias, 0, ",", ".")."</td>";
									if($id_mayor != NULL){
										if($id_mayor == $m->mult_codigo_fk){
											$tabla .= "<td>".number_format($multa->mult_unidadestributarias, 0, ",", ".")."</td>"; // Art.82
										}else{
											$art82 = ($multa->mult_unidadestributarias / 2);
											$tabla .= "<td>".number_format($art82, 0, ",", ".")."</td>"; // Art.82
										}
									}else{
										$tabla .= "<td>".number_format($multa->mult_unidadestributarias, 0, ",", ".")."</td>"; // Art.82
									}

									$tabla .= "<td>".$multa->mult_descripcion."</td>";
									$tabla .= "</tr>";
								}
							}
						}else{
							$tabla = '<tr><td colspan="4"><center>La declaración no tiene multas.</center></td></tr>';
						}
					}


					$tabla_intereses_multa_material = "";


					$tabla_intereses_multa_material .= "<tr>";

					$monto_intereses 	  = $moneda_intereses." ".number_format($monto_intereses, 2, ",", ".");
					$monto_multa_material = $moneda_material." ".number_format($monto_multa_material, 2, ",", ".");

					$tabla_intereses_multa_material .= "<td style='text-align:center'>".$monto_intereses."</td>";
					$tabla_intereses_multa_material .= "<td style='text-align:center'>".$monto_multa_material."</td>";

					$tabla_intereses_multa_material .= "</tr>";

					if($declaraciones['cantidad_declaraciones'] > 1){
						$codigos_declaraciones = "Esta declaración está relacionada con las declaraciones: <b>".$declaraciones['array_declaraciones_string']."</b>";
					}

					$data['interesesMultaMaterial'] = $tabla_intereses_multa_material;
					$data['codigos_declaraciones'] = $codigos_declaraciones;
				}else{
					$data = null;
					throw new CHttpException(404, 'La página no existe.');
				}
			}else{
				$data = null;
			}

			echo json_encode($data);
		}else{
			throw new CHttpException(404, 'La página no existe.');
		}
	}

	public function actionObtenerComprobante(){
		if(isset($_POST['id'])){
			$id = $_POST['id'];
			$opcion = $_POST['opcion'];

			$data = [];

			$tiene_comprobante = false;

			Yii::import('application.controllers.FuncionesController');
			$url= Yii::app()->request->baseUrl.'/';


			/**
			 * opcion => 1 Aporte
			 * opcion => 4 Multa Formal
			 */

			switch ($opcion) {
				case 1:
					$comprobante = SidcaiDeclaracionDetalle::model()->find([
						'select' => 'decl_referencia, decl_monto, decl_fechapago, comprobante',
						'condition' => 'deta_codigo_pk = :deta_codigo_pk',
						'params' => [':deta_codigo_pk' => $id]
					]);

					if($comprobante != null){
						$moneda = FuncionesController::obtenerMoneda($comprobante->decl_fechapago);

						if($comprobante->comprobante != null || $comprobante->comprobante != ""){
							$tiene_comprobante 	 = true;

							//print_r(Yii::getPAthOfAlias('webroot')."/".$comprobante->comprobante);

							//die();

							$existe_local=FuncionesController::checkPathAndFile3(Yii::getPAthOfAlias('webroot')."/".$comprobante->comprobante);
							
		
								if($existe_local=="si"){
									$ue= Yii::app()->homeUrl.$comprobante->comprobante;
									$url_recaudo='<img class="img-fluid" src="'.$ue.'">';
								}else{
									
									//print_r(Yii::app()->params['REMOTESIS']);die();
									$existe_servidor=FuncionesController::directoryExists2(Yii::app()->params['REMOTESIS'].$comprobante->comprobante);
									
									if($existe_servidor=="si"){
										$uu= $comprobante->comprobante;

										//print_r(basename($uu));die();
										//$f=FuncionesController::VerImagen($uu);
										
										
										//print_r($uu);die();
										$url_recaudo='<img class="img-fluid" src="'.$this->createUrl('declaracion/verImagen', array('id' => $id)).'" alt="Comprobante" />';

									//$url_recaudo='<img class="img-fluid" src="'.$f.'">';
								}else{
									//$ruta_local=Yii::getPathOfAlias('webroot').'/upload/'.basename($comprobante->comprobante);
										//print_r(Yii::getPathOfAlias('webroot').'/upload/'.basename($ruta));die();
									
									//$verificar_final=FuncionesController::checkPathAndFile3($ruta_local);
									//print_r($verificar_final);die();
									$url_recaudo="";

								}
								}
							//print_r($url_recaudo);die();
							$data['comprobante'] = $url_recaudo;
							$data['referencia']  = $comprobante->decl_referencia;
							$data['monto'] 		 = $moneda.' '.number_format($comprobante->decl_monto, 2, ",",".");
							$data['fecha_pago']  = FuncionesController::convertirFecha($comprobante->decl_fechapago, 'dd/mm/yyyy');
						}
					}
					break;
				case 2:
					$comprobante = SidcaiDeclaracionMultaDetalle::model()->find([
						'select' => 'mult_deta_referencia, mult_deta_monto, mult_deta_fechapago, comprobante',
						'condition' => 'mult_deta_codigo_pk = :mult_deta_codigo_pk',
						'params' => [':mult_deta_codigo_pk' => $id]
					]);

					if($comprobante != null){
						$moneda = FuncionesController::obtenerMoneda($comprobante->decl_fechapago);
						
						if($comprobante->comprobante != null || $comprobante->comprobante != ""){
							$tiene_comprobante = true;
							$data['comprobante'] = $url.$comprobante->comprobante;
							$data['referencia']  = $comprobante->mult_deta_referencia;
							$data['monto'] 		 =  $moneda.' '.number_format($comprobante->mult_deta_monto, 2, ",",".");;
							$data['fecha_pago']  = FuncionesController::convertirFecha($comprobante->mult_deta_fechapago, 'dd/mm/yyyy');
						}
					}
					break;
			}

			if(!$tiene_comprobante)
				$data = null;

			echo json_encode($data);
		}else{
			throw new CHttpException(404, 'La página no existe.');
		}
	}

	public function actionVerImagen($id)
{
    // Buscar los detalles del comprobante en la base de datos
    $comprobante = SidcaiDeclaracionDetalle::model()->find([
        'select' => 'decl_referencia, decl_monto, decl_fechapago, comprobante',
        'condition' => 'deta_codigo_pk = :deta_codigo_pk',
        'params' => [':deta_codigo_pk' => $id]
    ]);

    // Verificar si se encontró el comprobante
    if (!$comprobante) {
        header('Content-Type: text/plain');
        echo "Comprobante no encontrado.";
        exit;
    }

    // Configuración de la conexión SSH/SFTP
    $ftpServer   = Yii::app()->params['FTPSERVER'];
    $ftpUsername = Yii::app()->params['FTPUSERNAME'];
    $ftpPassword = Yii::app()->params['FTPPASSWORD'];
    $port        = Yii::app()->params['PORT'];

    // Ruta del archivo en el servidor remoto
    $remoteFilePath = Yii::app()->params['REMOTESIS'] . $comprobante->comprobante;

    // Verificar si la extensión SSH2 está instalada
    if (!function_exists("ssh2_connect")) {
        die("La extensión SSH2 no está instalada.");
    }

    // Conectar al servidor SSH
    $connection = ssh2_connect($ftpServer, $port);
    if (!$connection) {
        die('No se pudo conectar al servidor SSH.');
    }

    // Autenticación SSH
    if (!ssh2_auth_password($connection, $ftpUsername, $ftpPassword)) {
        die('Fallo en la autenticación SSH.');
    }

    // Inicializar subsistema SFTP
    $sftp = ssh2_sftp($connection);
    if (!$sftp) {
        die('No se pudo inicializar el subsistema SFTP.');
    }

    // Obtener la extensión del archivo
    $fileExtension = strtolower(pathinfo($remoteFilePath, PATHINFO_EXTENSION));

    // Determinar el tipo de contenido basado en la extensión del archivo
    if ($fileExtension === 'jpg' || $fileExtension === 'jpeg') {
        header('Content-Type: image/jpeg');
    } elseif ($fileExtension === 'png') {
        header('Content-Type: image/png');
    } else {
        // Tipo de archivo no compatible
        header('Content-Type: text/plain');
        echo "Tipo de archivo no compatible.";
        exit;
    }

    // Abrir el archivo remoto para lectura
    $remoteFileStream = fopen("ssh2.sftp://$sftp" . $remoteFilePath, 'rb');
    if ($remoteFileStream) {
        // Obtener el tamaño del archivo
        $fileSize = filesize("ssh2.sftp://$sftp" . $remoteFilePath);

        // Enviar encabezado de longitud de contenido si el tamaño del archivo es válido
        if ($fileSize !== false) {
            header('Content-Length: ' . $fileSize);
        }

        // Forzar la salida del archivo al navegador en pequeños bloques
        while (!feof($remoteFileStream)) {
            $buffer = fread($remoteFileStream, 8192); // Leer en bloques de 8KB
            if ($buffer === false) {
                break; // Si la lectura falla, detener el proceso
            }
            echo $buffer; // Imprimir los datos leídos
            ob_flush(); // Forzar la salida del buffer de PHP
            flush(); // Forzar que el navegador reciba los datos
        }

        // Cerrar el archivo
        fclose($remoteFileStream);
    } else {
        // Si el archivo no se pudo abrir, mostrar un mensaje de error
        header('Content-Type: text/plain');
        echo "No se pudo abrir el archivo remoto.";
        exit;
    }

    // Cerrar la conexión SSH
    ssh2_disconnect($connection); 
}



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

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


	/*
		- Obtiene la unidad tributaria y la moneda en curso que corresponde a la unidad tributaria.
	*/
	private function obtenerValores(string $fecha_inicio, string $fecha_fin) : array{
		// Se importa el controlador para hacer usos de sus funciones
		Yii::import("application.controllers.FuncionesController");

		// Con esto podré obtener el simbolo de la moneda que se encuentra en curso.
		$date = new DateTime("now", new DateTimeZone('America/Caracas')); 
		$hoy = $date->format('Y-m-d');

		return [
			'UT' => FuncionesController::obtenerUT($fecha_inicio, $fecha_fin),
			'moneda' => FuncionesController::obtenerMoneda($fecha_fin),
			'moneda_actual' => FuncionesController::obtenerMoneda($hoy),
		];
	}


	/**
	 * Tabla con los detalles de la declaración (Ingresos Brutos, Alicuota, Aporte, Intereses y Multa Material)
	 */
	private function tablaDetallesDeclaracion(array $declaraciones) : string {
		$date = new DateTime("now", new DateTimeZone('America/Caracas')); 
		$hoy = $date->format('Y-m-d');

		Yii::import('application.controllers.FuncionesController');

		$moneda = FuncionesController::obtenerMoneda($hoy);
		$monto_total_intereses = 0.00;
		$monto_total_multa_material = 0.00;

		$tabla = "";


		for($i = 0; $i < $declaraciones['cantidad_declaraciones']; $i++){
			$decl = $declaraciones['declaraciones'][$i];
			$periodo_gravable = FuncionesController::convertirFecha($decl->decl_fechainicio_base, 'dd/mm/yyyy');
			$periodo_gravable .= "<br>".FuncionesController::convertirFecha($decl->decl_fechafin_base, 'dd/mm/yyyy');

			/********************************* APORTE *****************************/
			$monto_aporte = FuncionesController::reconversion($decl->decl_fechadeclaracion, $decl->decl_montorequerido);
			$monto_aporte = "<span class='float-left'>".$moneda."</span> <span class='float-right'>".number_format($monto_aporte, 2, ",", ".")."</span>";
			/********************************* FIN APORTE *****************************/

			/********************************* INTERESES *****************************/
			$monto_intereses = "<center>No Aplica</center>";

			$intereses = FuncionesController::detallesInteresesMoratorios($declaraciones['array_declaraciones_multa'], false, $declaraciones['tiene_multa_formal']);

			if(array_key_exists($decl->decl_codigo_pk, $intereses)){
				$monto_intereses = "<span class='float-left'>".$moneda."</span> <span class='float-right'>".number_format($intereses[$decl->decl_codigo_pk], 2, ",", ".")."</span>";
				$monto_total_intereses += $intereses[$decl->decl_codigo_pk];
			}
			/********************************* FIN INTERESES *****************************/

			/********************************* MULTA MATERIAL *****************************/
    		$monto_multa_material = "<center>No Aplica</center>";

    		$multa_material = FuncionesController::detallesMultaMaterial($declaraciones['array_declaraciones_multa']);

			if(array_key_exists($decl->decl_codigo_pk, $multa_material)){
				$monto_multa_material = "<span class='float-left'>".$moneda."</span> <span class='float-right'>".number_format($multa_material[$decl->decl_codigo_pk], 2, ",", ".")."</span>";
				$monto_total_multa_material += $multa_material[$decl->decl_codigo_pk];
			}
			/********************************* FIN MULTA MATERIAL *****************************/

			/********************************* MULTA FORMAL *****************************/
			$sql = "SELECT SUM(decl_mult_monto) FROM sidcai_declaracion_multa WHERE decl_codigo_fk = ".$decl->decl_codigo_pk." AND mult_habilitada = TRUE AND mult_codigo_fk != 1";
			$comando = Yii::app()->db->createCommand($sql);
			$multas_formales = $comando->queryRow();

			/********************************* FIN MULTA FORMAL *****************************/
			$moneda_ingresos = FuncionesController::obtenerMoneda($decl->decl_fechafin_base);
    		$ingresos_brutos = "<span class='float-left'>".$moneda_ingresos."</span> <span class='float-right'>".number_format($decl->decl_ingresosbrutos, 2, ",", ".")."</span>";

    		$ut = number_format(FuncionesController::obtenerUT($decl->decl_fechainicio_base, $decl->decl_fechafin_base), 2, ",", ".");
    		$moneda_ut = FuncionesController::obtenerMoneda($decl->decl_fechafin_base);

			$tabla .= '<tr>';
			$tabla .= '<td style="font-size: 11px;">'.$periodo_gravable.'</td>';
			$tabla .= '<td style="font-size: 11px;">'.$moneda_ut." ".$ut.'</td>';
			$tabla .= '<td style="font-size: 11px;">'.$declaraciones['declaraciones'][$i]->decl_alicuota.' %</td>';
			$tabla .= '<td style="font-size: 11px;">'.$ingresos_brutos.'</td>';
			$tabla .= '<td style="font-size: 11px;">'.$monto_aporte.'</td>';
			$tabla .= '<td style="font-size: 11px;">'.$monto_intereses.'</td>';
			$tabla .= '<td style="font-size: 11px;">'.$monto_multa_material.'</td>';
			$tabla .= '</tr>';
		}

		$total_aporte = $moneda." ".number_format(FuncionesController::obtenerMontoAporte($declaraciones['array_declaraciones']), 2, ',','.');

		$total_intereses = $moneda." ".number_format($monto_total_intereses, 2, ",", ".");
		$total_multa 	 = $moneda." ".number_format($monto_total_multa_material, 2, ",", ".");

		$tabla .= '<tr>';
		$tabla .= '<td><b></b></td>';
		$tabla .= '<td><b></b></td>';
		$tabla .= '<td><b></b></td>';
		$tabla .= '<td><b>TOTAL:</b></td>';
		$tabla .= '<td><b>'.$total_aporte.'</b></td>';
		$tabla .= '<td><b>'.$total_intereses.'</b></td>';
		$tabla .= '<td><b>'.$total_multa.'</b></td>';
		$tabla .= '</tr>';

		return $tabla;
	}
	
	/**
	 * Tabla con los pagos mensuales (Ingresos Brutos, Alicuota, Aporte, Intereses y Multa Material)
	 */
	private function tablaPagosMensuales(array $declaraciones) : string {
		$date = new DateTime("now", new DateTimeZone('America/Caracas'));
		$hoy = $date->format('Y-m-d');
		$moneda = FuncionesController::obtenerMoneda($hoy);
		$tabla = "";
		$total_aporte = 0;

		foreach($declaraciones as $declaracion) {
			$periodo_gravable = FuncionesController::convertirFecha($declaracion->decl_fechainicio_base, 'dd/mm/yyyy');
			$periodo_gravable .= "<br>".FuncionesController::convertirFecha($declaracion->decl_fechafin_base, 'dd/mm/yyyy');
			$ut = number_format(FuncionesController::obtenerUT($declaracion->decl_fechainicio_base, $declaracion->decl_fechafin_base), 2, ",", ".");
			$moneda_ut = FuncionesController::obtenerMoneda($declaracion->decl_fechafin_base);
			$moneda_ingresos = FuncionesController::obtenerMoneda($declaracion->decl_fechafin_base);
			$monto_aporte_number = FuncionesController::reconversion($declaracion->decl_fechadeclaracion, $declaracion->decl_montoaportado);
			$monto_aporte = "<span class='float-left'>".$moneda."</span> <span class='float-right'>".number_format($monto_aporte_number, 2, ",", ".")."</span>";
			$ingresos_brutos = "<span class='float-left'>".$moneda_ingresos."</span> <span class='float-right'>".number_format($declaracion->decl_ingresosbrutos, 2, ",", ".")."</span>";
			$tabla .= '<tr>';
			$tabla .= '<td style="font-size: 11px;">'.$periodo_gravable.'</td>';
			// $tabla .= '<td style="font-size: 11px;">'.$moneda_ut." ".$ut.'</td>';
			$tabla .= '<td style="font-size: 11px;">'.$declaracion->decl_alicuota.' %</td>';
			$tabla .= '<td style="font-size: 11px;">'.$ingresos_brutos.'</td>';
			$tabla .= '<td style="font-size: 11px;">'.$monto_aporte.'</td>';
			$tabla .= '</tr>';
			$total_aporte += bcdiv($monto_aporte_number, '1', 2);
		}

		$total_aporte = $moneda." ".number_format($total_aporte, 2, ',','.');

		$tabla .= '<tr>';
		// $tabla .= '<td><b></b></td>';
		$tabla .= '<td><b></b></td>';
		$tabla .= '<td><b></b></td>';
		$tabla .= '<td><b>TOTAL:</b></td>';
		$tabla .= '<td><b>'.$total_aporte.'</b></td>';
		$tabla .= '</tr>';

		return $tabla;
	}


	// Muestra los detalles de una declaración, es decir, muestra todos los pago que se ha hecho a una declaración
	private function mostrarDetalleDeclaracion(int $id) : string{
		$model = SidcaiDeclaracionDetalle::model()->findAll('decl_codigo_fk = :decl_codigo_fk', array(':decl_codigo_fk' => $id));

		$tabla = "";

		foreach($model as $m){
			$tabla .= "<tr>";
			$tabla .= "<td>$m->decl_referencia</td>";
			$tabla .= "<td>$m->decl_cuenta</td>";
			$tabla .= "<td>" .number_format($m->decl_monto, 2, ',', '.')."</td>";
			$tabla .= "<td>$m->decl_fechapago</td>";
			$tabla .= "</tr>";
		}


		return $tabla;
	}

	// Muestra todas las declaraciones hechas por el aportante
	private function mostrarDeclaracionAportante() : string{
		Yii::import('application.controllers.FuncionesController');
		$tabla = "";

		// Se busca primero las anteriores declaraciones que pudo tener la empresa en BD_HISTORICO
		// Se busca la Empresa en la anterior base de datos por medio de su RIF
		$rif_historico = Yii::app()->user->rif;
		$sql = "SELECT apor_codigo_pk FROM sidcai_aportante WHERE apor_rif = :apor_rif AND esta_codigoestatus_fk in (2003,2008)";
		//$sql = "SELECT apor_codigo_pk FROM sidcai_aportante WHERE apor_rif = :apor_rif AND esta_codigoestatus_fk = 2003";
		$comando = Yii::app()->db2->createCommand($sql);
		$comando->bindParam(":apor_rif", $rif_historico);
		$empresa_historico = $comando->queryRow();

		if($empresa_historico != null){	
			// Se busca las anterios Declaraciones que tiene la Empresa	
			$sql = "SELECT * FROM sidcai_declaracioncti WHERE apor_codigo_fk = :apor_codigo_fk ORDER BY decl_codigo_pk DESC";
			$comando = Yii::app()->db2->createCommand($sql);
			$comando->bindParam(':apor_codigo_fk', $empresa_historico['apor_codigo_pk']);
			$declaraciones = $comando->queryAll();

			if($declaraciones != null){
				foreach($declaraciones as $declaracion){
					$tabla .= "<tr>";
					$tabla .= "<td class='align-middle'>" .$declaracion['decl_codigo_pk']. "</td>";
					$tabla .= "<td class='align-middle'>" .FuncionesController::convertirFecha($declaracion['decl_fechadeclaracion'], 'dd/mm/yyyy'). "</td>";

					$estatus = SidcaiEstatus::model()->findByPk($declaracion['esta_codigo_fk']);

					$tabla .= "<td class='align-middle'>" .$estatus->esta_nombre. "</td>";
					$tabla .= "<td>" .FuncionesController::convertirFecha($declaracion['decl_fechainicio_base'], "dd/mm/yyyy"). "<br>" .FuncionesController::convertirFecha($declaracion['decl_fechafin_base'], "dd/mm/yyyy"). "</td>";

					$tabla .= "<td>";

					$tabla .= "<button style='padding: 8px' type='button' class='btn btn-info' data-toggle='modal' data-target='#modalDeclaracion' title='Ver declaración' onclick='mostrarDeclaracion(".$declaracion['decl_codigo_pk'].")' id='" .$declaracion['decl_codigo_pk']. "'><i class='material-icons'>visibility</i></button>";

					$tabla .= "</td>";
					$tabla .= "</tr>";
				}
			}
		}

		$declaraciones = SidcaiDeclaracioncti::model()->findAll(
			array(
                'condition' => "apor_codigo_fk = :apor_codigo_fk AND (esta_codigo_fk != :estatus_1 AND esta_codigo_fk != :estatus_2) AND decl_tipodeclaracion != 'M'", 
                'params' => [
                	':apor_codigo_fk' => Yii::app()->user->id,
                	':estatus_1' => 1005,
                	':estatus_2' => 1009,
                ],
            )
		);

        if($declaraciones != NULL){
        	foreach($declaraciones as $declaracion){
        		$nombre_estado = $declaracion->estaCodigoFk->esta_nombre;

        		$estatus = $declaracion['esta_codigo_fk']; // Estatus de la declaración

        		$bloquear_acceso = false;

        		// Valida si la declaración pasó a extemporanea
				if($estatus == 1001){
					$date = new DateTime("now", new DateTimeZone('America/Caracas')); 
					$hoy = $date->format('Y-m-d');
					//hasta_fecha_pago_fraccionado = date("Y-m-d", strtotime($declaracion->decl_fechafin."+".FuncionesController::diasAfiscalizacion()." day"));

					if(strtotime($hoy) > strtotime($declaracion->decl_fechafin)){
						$declaraciones = FuncionesController::obtenerDeclaraciones($declaracion->decl_codigo_pk, $declaracion->apor_codigo_fk);

						if($declaraciones['extemporaneo'] && $declaraciones['tiene_multa_formal'] == false){
							/*if($declaraciones['cantidad_declaraciones'] > 1){// Más de una declaración
								$mandar_fiscalizacion = date("Y-m-d", strtotime($declaracion->decl_fechadeclaracion."+".FuncionesController::diasAfiscalizacion()." day"));
							}else{ // Una sola declaración
								$mandar_fiscalizacion = date("Y-m-d", strtotime($declaracion->decl_fechadeclaracion."+".$declaracion->decl_dias_prorroga." day"));
							}


							if(strtotime($hoy) > strtotime($mandar_fiscalizacion)){
								$nombre_estado = "En Proceso";
								$bloquear_acceso = true;
							}*/
						}
					}
				}




        		$tabla .= "<tr>";
				$tabla .= "<td class='align-middle'>" .$declaracion->decl_codigo_pk. "</td>";
				$tabla .= "<td class='align-middle'>" .FuncionesController::convertirFecha($declaracion->decl_fechadeclaracion, 'dd/mm/yyyy'). "</td>";
				$tabla .= "<td class='align-middle'>" .$nombre_estado. "</td>";
				$tabla .= "<td>" .FuncionesController::convertirFecha($declaracion->decl_fechainicio_base, "dd/mm/yyyy"). "<br>" .FuncionesController::convertirFecha($declaracion->decl_fechafin_base, "dd/mm/yyyy"). "</td>";
				$tabla .= "<td>";

				$tabla .= "<button style='padding: 8px' type='button' class='btn btn-info' data-toggle='modal' data-target='#modalDeclaracion' title='Ver declaración' onclick='mostrarDeclaracion(".$declaracion->decl_codigo_pk.")' id='" .$declaracion->decl_codigo_pk. "'><i class='material-icons'>visibility</i></button>";
				
				// Si la declaración puede ser editada ingresará al IF
				if($estatus == 1001 || $estatus == 1010 || $estatus == 1007 || $estatus == 1008){
					$retomar  =  CHtml::link("<button style='padding: 8px' type='button' class='btn btn-warning btn-sm' title='Editar declaración'><i class='material-icons'>refresh</i></button>", array('pago'));
					// Error en pago
					if($declaracion['esta_codigo_fk'] == 1010){
						// Se busca si el error de pago no sea por multa formal
                        $multa_formal = SidcaiDeclaracionMultaDetalle::model()->find([
                            'condition' => 'multa_formal = :multa_formal AND apor_codigo_fk = :apor_codigo_fk AND mult_pago_aceptado = :mult_pago_aceptado',
                            'params' => [
                                ':multa_formal' => TRUE,
                                ':apor_codigo_fk' => Yii::app()->user->id,
                                ':mult_pago_aceptado' => FALSE
                            ]
                        ]);

                        if($multa_formal != null)
                            $retomar = CHtml::link("<button style='padding: 8px' type='button' class='btn btn-danger btn-sm' title='Pagar multas'><i class='material-icons'>pan_tool</i></button>", array('pagar_multas'));
					}

					if($bloquear_acceso)
						$retomar = "";


					$tabla .= $retomar;

				}



				// Muestra el botón cuando se está en espera de las multas impuestas por el analista fiscalizador
				//if($declaracion->esta_codigo_fk == 1007){
					//$tabla .=  CHtml::link("<button style='padding: 8px' type='button' class='btn btn-danger btn-sm' title='Pagar multas'><i class='material-icons'>pan_tool</i></button>", array('pagar_multas'));
				//}

				// Muestra el boton cuando la declaración ya ha finalizado.
				if($declaracion->esta_codigo_fk == 1004){
					$tabla .= "<button style='padding: 8px' type='button' class='btn btn-danger' data-toggle='modal' data-target='#modalMulta' title='Ver multas' onclick='mostrarMultas(".$declaracion->decl_codigo_pk.")' id='" .$declaracion->decl_codigo_pk. "'><i class='material-icons'>visibility</i></button>";
				}
				$tabla .= "</td>";
				$tabla .= "</tr>";
        	}
        }

		return $tabla;
	}

	private function mostrarDeclaracionMensualAportante(): array
	{
		Yii::import('application.controllers.FuncionesController');
		$empresa = SidcaiAportante::model()->findByPk(Yii::app()->user->id);
		$tabla = "";
	    //var_dump($empresa);exit; 

		//$date1 = '2022-01-01'; // Para pruebas de un año completo
		$date1 = '2022-04-01';   // Fecha de inicio de la ley de pago por mes
		$date2 = date('Y-m-d');  // Fecha actual
		$date3 = date($empresa->apor_fechacreacionempresa); // Fecha de creación de la empresa

		$ts1 = strtotime($date1);
		$ts2 = strtotime($date2);
		$ts3 = strtotime($date3);

		$year_next = date("Y", strtotime($date1 . " -1 day"));
		$date_before = date("Y-m-d", strtotime($date1 . " + 1 year -1 day"));
		$fin_perido_gravable = $year_next + 1 . "-" . $empresa->apor_mescierre . "-" . $empresa->apor_diacierre;
		/*var_dump($date1);
		echo '<br>';
		echo '<br>';
		var_dump($date2);
		echo '<br>';
		echo '<br>';
		var_dump($date3);
		echo '<br>';
		echo '<br>';
		var_dump($year_next);
		echo '<br>';
		echo '<br>';
		var_dump($date_before);
		echo '<br>';
		echo '<br>';
		var_dump($fin_perido_gravable);
		echo '<br>';
		echo '<br>';
		var_dump($ts1);
		var_dump($ts2);
		var_dump($ts3);
		exit; */
		if ($ts3 < $ts1) {
			if (strtotime($fin_perido_gravable) < strtotime($date_before)) {
				$date1 = date("Y-m-d", strtotime($fin_perido_gravable . " + 1 day"));
				$ts1 = strtotime($date1);
			}

			if (strtotime($fin_perido_gravable) > strtotime($date1)) {
				$date1 = date("Y-m-d", strtotime($fin_perido_gravable . " - 1 year + 1 day"));
				$ts1 = strtotime($date1);
			}
		} else {
			if (strtotime($fin_perido_gravable) > strtotime($date_before)) {
				$date1 = date("Y-m-d", strtotime($fin_perido_gravable . " - 1 year + 1 day"));
				$ts1 = strtotime($date1);
			} else {
				$date1 = $empresa->apor_fechacreacionempresa;
				$ts1 = strtotime($date1);
			}
		}
		// var_dump($date1);
		//exit; 
		$year1 = date('Y', $ts1);
		$year2 = date('Y', $ts2);

		$month1 = date('m', $ts1);
		$month2 = date('m', $ts2);

		$diff = (($year2 - $year1) * 12) + ($month2 - $month1);
		$meses = [];
		/* var_dump($year1);
		echo '<br>';
		echo '<br>';
		var_dump($year2);
		echo '<br>';
		echo '<br>';
		var_dump($month1);
		echo '<br>';
		echo '<br>';
		var_dump($month2);
		echo '<br>';
		echo '<br>';
		var_dump($diff);
		echo '<br>';
		echo '<br>';
		exit; */
		$declaracionesTodas = SidcaiDeclaracioncti::model()->findAll(
			array(
				'condition' => "apor_codigo_fk = :apor_codigo_fk AND (esta_codigo_fk != :estatus_1) AND decl_tipodeclaracion = 'M'",
				'params' => [
					':apor_codigo_fk' => Yii::app()->user->id,
					':estatus_1' => 1005,
				],
				'order' => 'decl_codigo_pk desc'
			)
		);

		$meses_letras = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];

		$links = [];
		$pagado = 0;
		$pagoPendiente = false;
		$contador=0;
		if ($declaracionesTodas != NULL) {
			$doce = 0;
			$primera_fecha = '';
			$first = true;
			foreach ($declaracionesTodas as $key => $declaracion) {
				$nombre_estado = $declaracion->estaCodigoFk->esta_nombre;
				$meses[] =  $declaracion->decl_fechafin;

				$estatus = $declaracion['esta_codigo_fk']; // Estatus de la declaración

				$bloquear_acceso = false;

				// Valida si la declaración pasó a extemporanea
				if ($estatus == 1001) {

					//$contador++;
					if ($first) {
						$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' => Yii::app()->user->id,
								':decl_codigo_fk_destino' => $declaracion['decl_codigo_pk'],
							]
						]);
						if ($credito_fiscal_declaracion != NULL) {
							$pagado += $credito_fiscal_declaracion->cred_monto;
						}

						//TODO: revisar, calculos de los montos pagados que se pasan al cliente para calcular el monto referencia 
						$detalle_declaracion_pasada = SidcaiDeclaracionDetalle::model()->findAll([
							'condition' => 'codigo_declaraciones = :codigo_declaraciones AND (decl_pago_aceptado = TRUE OR decl_pago_aceptado IS NULL)',
							'params' => [
								':codigo_declaraciones' => "" . $declaracion['decl_codigo_pk'] . "",
							],
							'order' => 'deta_codigo_pk ASC'
						]);

						if ($detalle_declaracion_pasada) {
							foreach ($detalle_declaracion_pasada as $pasada) {
								$pagado += $pasada["decl_monto"];
							}
						}
						$first = false;
					}
					$date = new DateTime("now", new DateTimeZone('America/Caracas'));
					$hoy = $date->format('Y-m-d');
					//hasta_fecha_pago_fraccionado = date("Y-m-d", strtotime($declaracion->decl_fechafin."+".FuncionesController::diasAfiscalizacion()." day"));

					if (strtotime($hoy) > strtotime($declaracion->decl_fechafin)) {
						$declaraciones = FuncionesController::obtenerDeclaraciones($declaracion->decl_codigo_pk, $declaracion->apor_codigo_fk);

						if ($declaraciones['extemporaneo'] && $declaraciones['tiene_multa_formal'] == false) {
							/*if($declaraciones['cantidad_declaraciones'] > 1){// Más de una declaración
								$mandar_fiscalizacion = date("Y-m-d", strtotime($declaracion->decl_fechadeclaracion."+".FuncionesController::diasAfiscalizacion()." day"));
							}else{ // Una sola declaración
								$mandar_fiscalizacion = date("Y-m-d", strtotime($declaracion->decl_fechadeclaracion."+".$declaracion->decl_dias_prorroga." day"));
							}


							if(strtotime($hoy) > strtotime($mandar_fiscalizacion)){
								$nombre_estado = "En Proceso";
								$bloquear_acceso = true;
							}*/
						}
					}
				}
				$moneda = FuncionesController::obtenerMoneda($declaracion->decl_fechafin);
				$monto = number_format($declaracion->decl_ingresosbrutos, 2, ",", ".");
				$monto = $moneda . " " . $monto;
				$monto_requerido = number_format($declaracion->decl_montorequerido, 2, ",", ".");
				$monto_requerido = $moneda . " " . $monto_requerido;
				//lm
				$monto_aportado = number_format($declaracion->decl_montoaportado, 2, ",", ".");
				$monto_aportado = $moneda . " " . $monto_aportado;
				$diferencia_monto= $declaracion->decl_montorequerido-$declaracion->decl_montoaportado;
				$monto_pagar = number_format($diferencia_monto, 2, ",", ".");
				$monto_pagar = $moneda . " " . $monto_pagar;
				//lm
				$split_fecha = explode("-", $declaracion->decl_fechafin_base);
				$fecha_tope = date("Y-m-d", strtotime($declaracion->decl_fechafin_base . " + 15 day"));
				$split_fecha_tope = explode("-", $fecha_tope);


				$tabla .= "<tr>";
				if ($estatus == 1001) {
				
					//$tabla .= "<td>" . TbHtml::checkBox('pago', false, ['id' => $declaracion->decl_codigo_pk, 'onclick' => 'agregarMonto(this, ' . $declaracion->decl_montorequerido . ');']) . "</td>";
					//lm
					$tabla .= "<td>" . TbHtml::checkBox('pago', false, [
						'id' => $declaracion->decl_codigo_pk,
						'onclick' => 'agregarMonto(' . $declaracion->decl_codigo_pk . ', ' . $diferencia_monto . ');'
					]) . "</td>";
					//$tabla .= "<td></td>";
					
				} else {
					$tabla .= "<td></td>";
				}

				$tabla .= "<td>" . $meses_letras[$split_fecha[1] - 1] . " - " . $split_fecha[0] . "</td>";
				$tabla .= "<td class='align-middle'>" . $declaracion->decl_codigo_pk . "</td>";
				$tabla .= "<td class='align-middle'>" . $monto_requerido . "</td>";
				$tabla .= "<td class='align-middle'>" . $monto_aportado . "</td>";
				$tabla .= "<td class='align-middle'>" . $monto_pagar . "</td>";
				$tabla .= "<td class='align-middle'>15/" . $split_fecha_tope[1] . "/" . $split_fecha_tope[0] . "</td>";
				// $tabla .= "<td>" .FuncionesController::convertirFecha($declaracion->decl_fechainicio_base, "dd/mm/yyyy"). "<br>" .FuncionesController::convertirFecha($declaracion->decl_fechafin_base, "dd/mm/yyyy"). "</td>";
				// $tabla .= "<td class='align-middle'>" .$monto. "</td>";
				// $tabla .= "<td class='align-middle'>" .FuncionesController::convertirFecha($declaracion->decl_fechadeclaracion, 'dd/mm/yyyy'). "</td>";
				$tabla .= "<td class='align-middle'>" . $nombre_estado . "</td>";
				if ($estatus == 1001) {
					//$tabla .= "<td>" . TbHtml::checkBox('pago', false, ['id' => $declaracion->decl_codigo_pk, 'onclick' => 'agregarMonto(this, ' . $declaracion->decl_montorequerido . ');']) . "</td>";
					//lm revisar
					//$tabla .= "<td>" . TbHtml::checkBox('pago', false, ['id' => $declaracion->decl_codigo_pk, 'onclick' => 'agregarMonto(this, ' . $diferencia_monto. ');']) . "</td>";
				    $tabla .= "<td>
            <button id='reg_boton_" . $declaracion->decl_codigo_pk . "' 
                    onclick='gestionarCodigos(" . $declaracion->decl_codigo_pk . ", " . $diferencia_monto . ")' 
                    style='padding: 8px;' 
                    type='button' 
                    class='btn btn-info ml-auto d-flex' 
                    data-toggle='modal' 
                    data-target='#agregarPago' 
                    title='Registrar Pago'>
                <i class='material-icons'>account_balance_wallet</i>
            </button>
          </td>";

				
				} else {
					$tabla .= "<td></td>";
				}
				$tabla .= "<td>";

				// $tabla .= "<button style='padding: 8px' type='button' class='btn btn-info' data-toggle='modal' data-target='#modalDeclaracion' title='Ver declaración' onclick='mostrarDeclaracion(".$declaracion->declm_codigo_pk.")' id='" .$declaracion->declm_codigo_pk. "'><i class='material-icons'>visibility</i></button>";
				if ($estatus == 1001 && !$pagoPendiente) {
					/* $tabla .= "<button onclick='gestionarCodigos(" .$declaracion->decl_codigo_pk. ")' style='padding: 8px' type='button' class='btn btn-info' data-toggle='modal' data-target='#agregarPago' title='Registrar Pago' ><i class='material-icons'>visibility</i></button>"; */
					$pagoPendiente = false;
				} else if ($estatus == 1008) {
					$pagoPendiente = true;
				}


				if ($estatus == 1001 || $estatus == 1008) {

					$contador++;
				}

				// Si la declaración puede ser editada ingresará al IF
				if ($estatus == 1001 || $estatus == 1010 || $estatus == 1007) {
					// $retomar  =  CHtml::link("<button style='padding: 8px' type='button' class='btn btn-warning btn-sm' title='Editar declaración'><i class='material-icons'>refresh</i></button>", array('pago'));
					// // Error en pago
					// if($declaracion['esta_codigo_fk'] == 1010){
					// 	// Se busca si el error de pago no sea por multa formal
					//     $multa_formal = SidcaiDeclaracionMultaDetalle::model()->find([
					//         'condition' => 'multa_formal = :multa_formal AND apor_codigo_fk = :apor_codigo_fk AND mult_pago_aceptado = :mult_pago_aceptado',
					//         'params' => [
					//             ':multa_formal' => TRUE,
					//             ':apor_codigo_fk' => Yii::app()->user->id,
					//             ':mult_pago_aceptado' => FALSE
					//         ]
					//     ]);

					//     if($multa_formal != null)
					//         $retomar = CHtml::link("<button style='padding: 8px' type='button' class='btn btn-danger btn-sm' title='Pagar multas'><i class='material-icons'>pan_tool</i></button>", array('pagar_multas'));
					// }

					// if($bloquear_acceso)
					// 	$retomar = "";


					// $tabla .= $retomar;

				}



				// Muestra el botón cuando se está en espera de las multas impuestas por el analista fiscalizador
				//if($declaracion->esta_codigo_fk == 1007){
				//$tabla .=  CHtml::link("<button style='padding: 8px' type='button' class='btn btn-danger btn-sm' title='Pagar multas'><i class='material-icons'>pan_tool</i></button>", array('pagar_multas'));
				//}

				// Muestra el boton cuando la declaración ya ha finalizado.
				// if($declaracion->esta_codigo_fk == 1004){
				// 	$tabla .= "<button style='padding: 8px' type='button' class='btn btn-danger' data-toggle='modal' data-target='#modalMulta' title='Ver multas' onclick='mostrarMultas(".$declaracion->decl_codigo_pk.")' id='" .$declaracion->decl_codigo_pk. "'><i class='material-icons'>visibility</i></button>";
				// }
				$tabla .= "</td>";
				$tabla .= "</tr>";
				if ($doce == 0) {
					$primera_fecha = $declaracion->decl_fechainicio;
				}
				$doce += 1;
				if ($doce > 12) {
					$links[] = [date("d/m/Y", strtotime($primera_fecha)), date("d/m/Y", strtotime($declaracion->decl_fechafin)), $primera_fecha . "--" . date("Y-m-d", strtotime($declaracion->decl_fechafin))];
					$doce = 0;
				} elseif ($key == (count($declaracionesTodas) - 1)) {
					$fecha_fin = date("Y-m-d", strtotime($primera_fecha . " + 1 year - 1 day"));
					$links[] = [date("d/m/Y", strtotime($primera_fecha)), date("d/m/Y", strtotime($fecha_fin)), $primera_fecha . "--" . $fecha_fin];
				}
			}
		}

		$periodos_gravables = [];
		$calculo = count($meses) % 12;

		//print_r($calculo);//die();
		$aportante = FuncionesController::obtenerEstatusAportante($empresa);
		//var_dump($aportante);exit; 
		//array(2) { ["aportante"]=> bool(true) ["periodo"]=> string(10) "2024-09-01" } --agropollito 9596
		/* $aportante = ["aportante" => TRUE, "periodo" => "2023-10-01"]; */ //negro ven
		if ($diff > count($meses) && $aportante["aportante"]) {
			
			 $cont=(12-$calculo);//exit; 

			 $meses_no_declarado = $diff - count($meses);
			//var_dump($meses_no_declarado);exit; 

			//echo $cont ." ----- ";//die();  

			//echo $contador;die();//
			// echo $meses_no_declarado;die();
			$inicio_periodo = $aportante["periodo"];
			$fin_periodo = date("Y-m-d", strtotime($inicio_periodo." + 1 year - 1 day"));

			//print_r($inicio_periodo ."". $fin_periodo);die();
			$fecha = new DateTime($fin_periodo);
            $mes_actual = new DateTime($inicio_periodo);

/*
			if($cont>0 && $cont!=12 && $contador==0 ){

				//echo "1";die();
				if ($declaracionesTodas != NULL) {
					$inicio_periodo = $declaracionesTodas[0]->decl_fechainicio;
					//print_r($inicio_periodo);die(); 2024-10-01

					$ultima_fecha = new DateTime(end($declaracionesTodas)->decl_fechafin);
					$ultima_fecha->modify("+$cont months");
					$fin_periodo = $ultima_fecha->format('Y-m-d');

					//print_r($fin_periodo);die();

					$fecha = new DateTime($fin_periodo);
					$mes_actual = new DateTime($inicio_periodo);


				
					// Convertir las fechas a timestamps
					$ts1 = strtotime($inicio_periodo);
					$ts2 = strtotime($fin_periodo);
				
					// Obtener año y mes de inicio y fin
					$year1 = date('Y', $ts1);
					$year2 = date('Y', $ts2);
					$month1 = date('m', $ts1);
					$month2 = date('m', $ts2);

				}

			}

			

			if ($cont == 12 && $calculo!=0 && $contador==0) {
				echo "3";die();
				if ($declaracionesTodas != NULL) {
					$inicio_periodo = $declaracionesTodas[0]->decl_fechainicio;
			
					// Obtener la última fecha de las declaraciones
					$ultima_fecha = new DateTime(end($declaracionesTodas)->decl_fechafin);
					
					// Restar un año
					//$ultima_fecha->modify("-1 year");  
					$fin_periodo = $ultima_fecha->format('Y-m-d');
			
					// Convertir las fechas a timestamps
					$ts1 = strtotime($inicio_periodo);
					$ts2 = strtotime($fin_periodo);
			
					// Obtener año y mes de inicio y fin
					$year1 = date('Y', $ts1);
					$year2 = date('Y', $ts2);
					$month1 = date('m', $ts1);
					$month2 = date('m', $ts2);
			
					// Puedes hacer algo con estas variables aquí
				}
			}
			

			if ($diff > count($meses) && $contador==0 && $cont==0) {
				echo "4";die();
				if ($declaracionesTodas != NULL) {
					$inicio_periodo = $aportante["periodo"];
					$fin_periodo = date("Y-m-d", strtotime($inicio_periodo." + 1 year - 1 day"));
		
					//print_r($inicio_periodo ."". $fin_periodo);die();
					$fecha = new DateTime($fin_periodo);
					$mes_actual = new DateTime($inicio_periodo);
			
					// Convertir las fechas a timestamps
					$ts1 = strtotime($inicio_periodo);
					$ts2 = strtotime($fin_periodo);
			
					// Obtener año y mes de inicio y fin
					$year1 = date('Y', $ts1);
					$year2 = date('Y', $ts2);
					$month1 = date('m', $ts1);
					$month2 = date('m', $ts2);
			
					// Puedes hacer algo con estas variables aquí
				}
			}

			if($cont==12 && $contador>0  && $calculo==0){

				echo "5";die();
				if ($declaracionesTodas != NULL) {
					$inicio_periodo = $declaracionesTodas[0]->decl_fechainicio;
			
					// Obtener la última fecha de las declaraciones
					$ultima_fecha = new DateTime(end($declaracionesTodas)->decl_fechafin);
					
					// Restar un año
					//$ultima_fecha->modify("-1 year");  
					$fin_periodo = $ultima_fecha->format('Y-m-d');
			
					// Convertir las fechas a timestamps
					$ts1 = strtotime($inicio_periodo);
					$ts2 = strtotime($fin_periodo);
			
					// Obtener año y mes de inicio y fin
					$year1 = date('Y', $ts1);
					$year2 = date('Y', $ts2);
					$month1 = date('m', $ts1);
					$month2 = date('m', $ts2);
			
					// Puedes hacer algo con estas variables aquí
				}

			}

			*/




//print_r($fecha->format('Y-m-d').'       '.$mes_actual->format('Y-m-d'));die();


while ($fecha >= $mes_actual ) {

//while (($fecha >= $mes_actual && $cont ==12 && $contador==0) or ($fecha >= $mes_actual && $contador>0) or ($fecha >= $mes_actual && $cont<12 && $contador==0)) {
    $mes_calculo = $fecha->format('Y-m-d');

    // Verificar si el mes ya ha sido cerrado
    $mes_cerro = strtotime($date2) >= strtotime($mes_calculo . " + 1 month - 1 day");

    if (
        strtotime($mes_calculo) >= strtotime($inicio_periodo) &&
        strtotime($mes_calculo) <= strtotime($fin_periodo) &&
        $mes_cerro
    ) {
        $date_inicio = date("Y-m-01", strtotime($mes_calculo));
        $date_fin = date("Y-m-t", strtotime($mes_calculo));

        $split_fecha = explode("-", $date_fin);

        $ut = FuncionesController::obtenerUT($date_inicio, $date_fin);
        $moneda_ut = FuncionesController::obtenerMoneda($date_fin);
        $ut = $moneda_ut . " " . number_format($ut, 2, ",", ".");

        $alicuota = $empresa->ciiuCodigoFk->ciiu_porcentaje;

        // Verificación de declaraciones existentes
        $agregar_declaracion = TRUE;
        foreach ($declaracionesTodas as $key => $value) {
            if ($value['decl_fechainicio_base'] == $date_inicio) {
                $agregar_declaracion = FALSE;
                break;
            }
        }

        $verificar_anual = SidcaiDeclaracioncti::model()->findAll(
            array(
                'condition' => 'apor_codigo_fk = :apor_codigo_fk 
                                AND esta_codigo_fk IN (1003) 
                                AND decl_tipodeclaracion = :decl_tipodeclaracion 
                                AND decl_fechainicio_base BETWEEN :decl_fechainicio_base_inicio AND :decl_fechainicio_base_fin',
                'params' => array(
                    ':apor_codigo_fk' => Yii::app()->user->id,
                    ':decl_tipodeclaracion' => 'O',
                    ':decl_fechainicio_base_inicio' => $inicio_periodo,
                    ':decl_fechainicio_base_fin' => $fin_periodo,
                ),
            )
        );
        
		/*echo "<pre>";
		print_r($verificar_anual);
		echo "<pre>";
		die();*/

        if ($agregar_declaracion && $verificar_anual == NULL) {
            $mes_anio = $meses_letras[$split_fecha[1] - 1] . " - " . $split_fecha[0];
            
            // Evitar duplicados
            $existe = false;
            foreach ($periodos_gravables as $periodo) {
                if ($periodo['mes_anio'] === $mes_anio) {
                    $existe = true;
                    break;
                }
            }

            if (!$existe) {
                $periodos_gravables[] = [
                    "inicio" => FuncionesController::convertirFecha($date_inicio, "dd/mm/yyyy"),
                    "fin" => FuncionesController::convertirFecha($date_fin, "dd/mm/yyyy"),
                    "ut" => $ut,
                    "alicuota" => $alicuota,
                    "mes_anio" => $mes_anio,
                    "first_year" => $calculo
                ];
            }
        }
    }

    $fecha->modify('-1 month');
}

		}

		return [$tabla, array_reverse($periodos_gravables), $links, $pagado, $pagoPendiente, $aportante];
	}
	private function mostrarPagosMensuales() : array {
		// $detalle_declaracion = SidcaiDeclaracionDetalle::model()->findAll([
		// 	'condition' => 'codigo_declaraciones = :codigo_declaraciones',
		// 	'params' => [
		// 		':codigo_declaraciones' => "$array_declaracion_string",
		// 	],
		// 	'order' => 'deta_codigo_pk ASC'
		// ]);
		$connection = Yii::app()->db;

		$sql = "SELECT DISTINCT(dd.deta_codigo_pk), dd.deta_codigo_pk, a.apor_rif, dd.fecha_registro, dd.codigo_declaraciones, dd.decl_monto, dd.decl_fechapago, dd.decl_pago_aceptado FROM sidcai_aportante a INNER JOIN sidcai_declaracion_detalle dd ON a.apor_codigo_pk = dd.apor_codigo_fk AND a.apor_codigo_pk = ".Yii::app()->user->id." INNER JOIN sidcai_declaracioncti d ON d.decl_codigo_pk IN (SELECT CAST(unnest(string_to_array(sdd.codigo_declaraciones, ',')) AS INTEGER) FROM sidcai_declaracion_detalle sdd WHERE sdd.deta_codigo_pk = dd.deta_codigo_pk) AND d.decl_tipodeclaracion = 'M'";
		$command = $connection->createCommand();
		$command->text = $sql;
		$model = $command->queryAll();
		return $model;
	}
	
	public function actionMostrarIngresosBrutos() {
		$meses_letras = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembbre", "Diciembre"];
		if(isset($_POST['ingresos_brutos'])) {
			$empresa = SidcaiAportante::model()->findByPk(Yii::app()->user->id);
			$alicuota	= $empresa->ciiuCodigoFk->ciiu_porcentaje;
			$ingresos_brutos = CHtml::encode($_POST['ingresos_brutos']);
			if(isset($_POST['fechas_inicio'])) {
				$fechas_inicio   = CHtml::encode($_POST['fechas_inicio']);
				$fechas_fin 	 = CHtml::encode($_POST['fechas_fin']);
			} else {
				$fechas_inicio   = "";
				$fechas_fin 	 = "";
			}
			if(isset($_POST['estimado_anual'])) {
				$estimado_anual = CHtml::encode($_POST['estimado_anual']);
			} else {
				$estimado_anual = "";
			}
						
			$texto = "";
			Yii::import('application.controllers.FuncionesController');
			//var_dump('llegue antes del if');
			//exit;

			$tasa = null;
			$iterationLimit = 6; 
			$iterations = 0;

			if($fechas_inicio != "" && $ingresos_brutos != "") {

				$fecha_inicio = explode("||", $fechas_inicio);
				$cantidad_fechas_inicio = count($fecha_inicio);

				$fecha_fin = explode("||", $fechas_fin);
				$cantidad_fechas_fin = count($fecha_fin);

				$ingresos_brutos = explode("||", $ingresos_brutos);
				$cantidad_ingresos = count($ingresos_brutos);

				if($cantidad_fechas_inicio == $cantidad_ingresos && $cantidad_fechas_inicio == $cantidad_fechas_fin) {
					for($i = 0; $i < $cantidad_fechas_fin; $i++) {
						$ingresos_brutos_calcular = str_replace(".", "", $ingresos_brutos[$i]);
						$ingresos_brutos_calcular = str_replace(",", ".", $ingresos_brutos_calcular);
						$ff = FuncionesController::convertirFecha($fecha_fin[$i], "yyyy-mm-dd");
						// $last_day = date("Y-m-d", strtotime($ff." - 1 day"));
						$last_day = $ff;
						$last_day_array = explode("-", $last_day);
						// if($empresa->apor_diacierre.$empresa->apor_mescierre != $last_day_array[2].$last_day_array[1]) {
						// 	if($empresa->apor_mescierre == 1)
						// 		$last_day_array[0]++;
						// 	$last_day_array[1] = $empresa->apor_mescierre;
						// 	$last_day_array[2] = $empresa->apor_diacierre;
						// 	$last_day = implode("-", $last_day_array);
						// }
						$first_day = date("Y-m-d", strtotime($last_day." - 5 day"));
						
						/* $tasa = SidcaiCambioTasa::model()->find(
							array(
								'condition' => 'cata_fecha <= :cata_fecha AND cata_fecha > :cata_fecha_inicio AND cata_habilitado = true',
								'params' => array(
									':cata_fecha' => $last_day,
									'cata_fecha_inicio' => $first_day
								),
								'order' => 'cata_fecha DESC, cata_tasa DESC',
								'limit' => 1
							)
						); */

						while ($tasa === null && $iterations < $iterationLimit) {
							$tasa = SidcaiCambioTasa::model()->find(
								array(
									'condition' => 'cata_fecha <= :cata_fecha AND cata_fecha > :cata_fecha_inicio AND cata_habilitado = true',
									'params' => array(
										':cata_fecha' => $last_day,
										'cata_fecha_inicio' => $first_day
									),
									'order' => 'cata_fecha DESC, cata_tasa DESC',
									'limit' => 1
								)
							);
						
							if ($tasa === null) {
								// Resta un mes a $last_day y $first_day
								$last_day = date('Y-m-d', strtotime($last_day . ' -1 month'));
								$first_day = date('Y-m-d', strtotime($first_day . ' -1 month'));
							}
						
							$iterations++;
						}

						if(empty($tasa)) {
							//  '.$first_day.' '.$last_day.'
							echo '{"error": "La tasa para calcular el ingreso bruto mínimo está en proceso de carga, espere los próximos días."}';
							Yii::app()->end();
						}

						$split_fecha = explode("-", $ff);
						$moneda = FuncionesController::obtenerMoneda($ff);
						$aportar = $moneda." ".number_format(($ingresos_brutos_calcular*$alicuota/100), 2, ",", ".");
						$monto = $moneda." ".$ingresos_brutos[$i];

						if($ingresos_brutos_calcular <= (150000 * $tasa->cata_tasa) / 12 ) {
							//TODO: se comento la siguiente lienea por la nueva lógica de negocio para saber si una empresa es aportante
							//$aportar = "No superas el monto requerido para aporte";
						}

						$texto .= "<p>";
						// $texto .= "<b>Período Gravable: </b>".$fecha_inicio[$i]." - ".$fecha_fin[$i]."<br>";
						$texto .= "<b>Período Gravable: </b>".$meses_letras[$split_fecha[1]-1]." - ".$split_fecha[0]."<br>";
						$texto .= "<b>Alicuota: </b>".$alicuota." %<br>";
						$texto .= "<b>Monto: </b>".$monto."<br>";
						$texto .= "<b>Monto a aportar: </b>".$aportar;
						$texto .= "</p>";
						$texto .= "<hr>";
					}
				}
			}
			else if($ingresos_brutos != "" && $estimado_anual != "") {

				$ingresos_brutos = str_replace(".", "", $ingresos_brutos);
				$ingresos_brutos = str_replace(",", ".", $ingresos_brutos);
				$perido_inicio = FuncionesController::convertirFecha($estimado_anual, "yyyy-mm-dd");
				$last_day = date("Y-m-d", strtotime($perido_inicio." - 1 day"));
				$last_day_array = explode("-", $last_day);
				$entro = "no";
				if($empresa->apor_diacierre.$empresa->apor_mescierre != $last_day_array[2].$last_day_array[1]) {
					$entro = "si";
					if($empresa->apor_mescierre == 1)
						$last_day_array[0]++;
					$last_day_array[1] = $empresa->apor_mescierre;
					$last_day_array[2] = $empresa->apor_diacierre;
					$last_day = implode("-", $last_day_array);
				}
				$first_day = date("Y-m-d", strtotime($last_day." - 5 day"));
				
				/* $tasa = SidcaiCambioTasa::model()->find(
					array(
						'condition' => 'cata_fecha <= :cata_fecha AND cata_fecha > :cata_fecha_inicio AND cata_habilitado = true',
						'params' => array(
							':cata_fecha' => $last_day,
							'cata_fecha_inicio' => $first_day
						),
						'order' => 'cata_fecha DESC, cata_tasa DESC',
						'limit' => 1
					)
				); */

				while ($tasa === null && $iterations < $iterationLimit) {
					$tasa = SidcaiCambioTasa::model()->find(
						array(
							'condition' => 'cata_fecha <= :cata_fecha AND cata_fecha > :cata_fecha_inicio AND cata_habilitado = true',
							'params' => array(
								':cata_fecha' => $last_day,
								'cata_fecha_inicio' => $first_day
							),
							'order' => 'cata_fecha DESC, cata_tasa DESC',
							'limit' => 1
						)
					);
				
					if ($tasa === null) {
						// Resta un mes a $last_day y $first_day
						$last_day = date('Y-m-d', strtotime($last_day . ' -1 month'));
						$first_day = date('Y-m-d', strtotime($first_day . ' -1 month'));
					}
				
					$iterations++;
				}
				
				if($tasa == null){
					//  '.$first_day.' '.$last_day.'
					echo '{"error": "La tasa para calcular el ingreso bruto mínimo está en proceso de carga, espere los próximos días."}';
					Yii::app()->end();
				}

				if($ingresos_brutos <= 150000 * $tasa->cata_tasa) {
					// '.$perido_inicio.' '.$entro.' '.$last_day.' '.$tasa->cata_tasa.'
					echo '{"error": "El ingreso bruto anual no es mayor a 150.000 veces de la moneda de más alto valor."}';
					Yii::app()->end();
				}

				$utime_perido_inicio = strtotime($perido_inicio);
				$utime_fecha_fin = strtotime($perido_inicio." + 1 year");
				$moneda = FuncionesController::obtenerMoneda($perido_inicio);
				$ingresos_brutos = $ingresos_brutos / 12;
				$monto_aportar = $ingresos_brutos * $alicuota / 100;
				$ingresos_brutos = number_format($ingresos_brutos, 2, ",", ".");
				$monto = $moneda." ".$ingresos_brutos;

				while($utime_fecha_fin > $utime_perido_inicio) {
					// $fecha_del_fin = date('t/m/Y', $utime_perido_inicio);
					$fecha_del_fin = date('t/n/Y', $utime_perido_inicio);
					$split_fecha = explode("/", $fecha_del_fin);

					$texto .= "<p>";
					$texto .= "<b>Período Gravable: </b>".$meses_letras[$split_fecha[1] -1 ]." - ".$split_fecha[2]."<br>";
					$texto .= "<b>Alicuota: </b>".$alicuota." %<br>";
					$texto .= "<b>Monto: </b>".$monto."<br>";
					$texto .= "<b>Monto a aportar: </b>".$moneda." ".number_format($monto_aportar, 2, ",", ".");
					$texto .= "</p>";
					$texto .= "<hr>";

					$perido_inicio = date("Y-m-d", strtotime($perido_inicio." + 1 month"));
					$utime_perido_inicio = strtotime($perido_inicio);
				}

				// $texto .= "<p>";
				// $texto .= "<b>Período Gravable: </b>".$estimado_anual." - ".$estimado_anual."<br>";
				// $texto .= "<b>Alicuota: </b>".$alicuota." %<br>";
				// $texto .= "<b>Monto: </b>".$ingresos_brutos;
				// $texto .= "</p>";
				// $texto .= "<hr>";
			}
			echo $texto;
		} else {
			throw new CHttpException(404, 'La página no existe.');
		}
	}

	/**
	 * Muestra las Multas de la Declaración a pagar
	 */
	private function multas_a_pagar(array $array_declaraciones_multa) : string{
		$multas_seleccionadas = SidcaiDeclaracionMulta::model()->findAll([
			'condition' => 'decl_codigo_fk = :decl_codigo_fk AND mult_habilitada = :mult_habilitada AND mult_codigo_fk != :mult_codigo_fk',
			'params' => [
				':decl_codigo_fk' => $array_declaraciones_multa[0],
				':mult_habilitada' => TRUE,
				':mult_codigo_fk' => 1
			]
		]);


		$multa_mayor = 0;
		$id_mayor = NULL;

		if($multas_seleccionadas != null){
			foreach($multas_seleccionadas as $m){
				$multa = SidcaiMulta::model()->findByPk($m->mult_codigo_fk);

				if($multa != null){
					if($multa_mayor < $multa->mult_unidadestributarias){
						$multa_mayor = $multa->mult_unidadestributarias;
						$id_mayor 	 = $multa->mult_codigo_pk;
					}
				}
			}
		}

		$tabla = '';

		if($multas_seleccionadas != null){
			foreach($multas_seleccionadas as $m){
				$multa = SidcaiMulta::model()->findByPk($m->mult_codigo_fk);

				if($multa != null){
					$tabla .= "<tr>";
					$tabla .= "<td>".$multa->mult_ley."</td>";
					$tabla .= "<td>".number_format($multa->mult_unidadestributarias, 0, ",", ".")."</td>";
					if($id_mayor != NULL){
						if($id_mayor == $m->mult_codigo_fk){
							$tabla .= "<td>".number_format($multa->mult_unidadestributarias, 0, ",", ".")."</td>"; // Art.82
						}else{
							$art82 = ($multa->mult_unidadestributarias / 2);
							$tabla .= "<td>".number_format($art82, 0, ",", ".")."</td>"; // Art.82
						}
					}else{
						$tabla .= "<td>".number_format($multa->mult_unidadestributarias, 0, ",", ".")."</td>"; // Art.82
					}

					$tabla .= "<td>".$multa->mult_descripcion."</td>";
					$tabla .= "</tr>";
				}
			}
		}else{
			$tabla = '<tr><td colspan="4"><center>La declaración no tiene multas.</center></td></tr>';
		}

		return $tabla;
	}

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

											Expresiones

	*********************************************************************************************/
	//TODO: esta función necesita una corrección;
	// Comprueba si el usuario pueda ingresar a actionPago() -> "declaracion-2"
  	public function permitirPaginaPago(){
		//return true;
  		if(Yii::app()->user->hasState('rif')){
  			$declaracion = SidcaiDeclaracioncti::model()->find(
		  			array(
		  				'condition' => 'apor_codigo_fk = :apor_codigo_fk',
		  				'params' => array(':apor_codigo_fk' => Yii::app()->user->id),
		  				'order' => 'decl_codigo_pk DESC',
		  				'limit' => 1
		  			)
		  		);

		  		if($declaracion != null){
		  			$estatus = $declaracion->esta_codigo_fk;

		  			if($estatus == 1001 || $estatus == 1010 || $estatus == 1007 || $estatus == 1008){
		  				//$mostrar = true;
		  				return true;

		  				/*if($estatus == 1010){
		  					// Se busca si el error de pago no sea por multa formal
                            $multa_formal = SidcaiDeclaracionMultaDetalle::model()->find([
                                'condition' => 'multa_formal = :multa_formal AND apor_codigo_fk = :apor_codigo_fk AND mult_pago_aceptado = :mult_pago_aceptado',
                                'params' => [
                                    ':multa_formal' => TRUE,
                                    ':apor_codigo_fk' => Yii::app()->user->id,
                                    ':mult_pago_aceptado' => FALSE
                                ]
                            ]);

                            if($multa_formal != null)
                                $mostrar = false;
		  				}*/

		  				// Valida si la declaración pasó a extemporanea
						/*if($estatus == 1001){
							$date = new DateTime("now", new DateTimeZone('America/Caracas')); 
							$hoy = $date->format('Y-m-d');
							$hoy_anio = $date->format('Y');

							if(strtotime($hoy) > strtotime($declaracion->decl_fechafin)){
								Yii::import('application.controllers.FuncionesController');
								$declaraciones = FuncionesController::obtenerDeclaraciones($declaracion->decl_codigo_pk, $declaracion->apor_codigo_fk);

								if($declaraciones['extemporaneo'] && $declaraciones['tiene_multa_formal'] == false){
									if($declaraciones['cantidad_declaraciones'] > 1){// Más de una declaración
										$mandar_fiscalizacion = date("Y-m-d", strtotime($declaracion->decl_fechadeclaracion."+".FuncionesController::diasAfiscalizacion()." day"));
									}else{ // Una sola declaración
										$mandar_fiscalizacion = date("Y-m-d", strtotime($declaracion->decl_fechadeclaracion."+".$declaracion->decl_dias_prorroga." day"));
									}


									if(strtotime($hoy) > strtotime($mandar_fiscalizacion)){
										$mostrar = false;

										if($hoy_anio == '2020'){
											$empresa = SidcaiAportante::model()->find([
												'select' => 'apor_fechahoraregistro',
												'condition' => 'apor_codigo_pk = :apor_codigo_pk',
												'params' => [':apor_codigo_pk' => $declaracion->apor_codigo_fk]
											]);

											$fecha_registro = FuncionesController::convertirFecha($empresa->apor_fechahoraregistro, 'yyyy-mm-dd', false);

											if(strtotime($fecha_registro) <= strtotime('2020-08-31')){
												$mostrar = true;
											}
										}
									}
								}
							}
						}*/

		  				//if($mostrar)
		  				//	return true;
		  			}
		  		}
  		}

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

	// Comprueba si el usuario pueda ingresar a actionPagar_multas()
  	public function paginaPagarMultas(){
  		if(Yii::app()->user->hasState('rif')){
  			$declaracion = SidcaiDeclaracioncti::model()->find(
	  			array(
	  				'condition' => 'apor_codigo_fk = :apor_codigo_fk',
	  				'params' => array(':apor_codigo_fk' => Yii::app()->user->id),
	  				'order' => 'decl_codigo_pk DESC',
	  				'limit' => 1
	  			)
	  		);
	  		if($declaracion != null){
	  			$estatus = $declaracion->esta_codigo_fk;

	  			if($estatus == 1007 || $estatus == 1010){
	  				$permitir = true;

	  				if($estatus == 1010){
	  					// Se busca si el error de pago no sea por multa formal
                        $multa_formal = SidcaiDeclaracionMultaDetalle::model()->find([
                            'condition' => 'multa_formal = :multa_formal AND apor_codigo_fk = :apor_codigo_fk AND mult_pago_aceptado = :mult_pago_aceptado',
                            'params' => [
                                ':multa_formal' => TRUE,
                                ':apor_codigo_fk' => Yii::app()->user->id,
                                ':mult_pago_aceptado' => FALSE
                            ]
                        ]);

                        if($multa_formal == null)
                            $permitir = false;
	  				}

	  				if($permitir)
	  					return true;
	  			}
	  		}
  		}

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

	// Funcion que permite entrar a los usuarios que tenga el nivel de usuario "1"
	public function permitirUsuario(){
		if(Yii::app()->user->hasState('rif')){
			$aportante = SidcaiAportante::model()->findByPk(Yii::app()->user->id);

            if($aportante->esta_codigoestatus_fk == 2003 || $aportante->esta_codigoestatus_fk == 2010)
				return true;
		}

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

	// Funcion que permite ver las acta de reparo.
	public function permitir_empresa_y_analista(){
		if(Yii::app()->user->hasState('rif')){			
			return true;
		}

		if(Yii::app()->user->hasState('nivel_acceso')){
			if(Yii::app()->user->hasState('nivel_acceso') == 2)
				return true;
		}

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



//lm nuevo

	public function actionServir_imagen($id)
    {
        // Datos de conexión SSH
        $ftpServer =   Yii::app()->params['FTPSERVER'];
		$ftpUsername = Yii::app()->params['FTPUSERNAME'];
		$ftpPassword = Yii::app()->params['FTPPASSWORD'];
		$port =        Yii::app()->params['PORT'];

		$comprobante = SidcaiDeclaracionDetalle::model()->find([
						'select' => 'decl_referencia, decl_monto, decl_fechapago, comprobante',
						'condition' => 'deta_codigo_pk = :deta_codigo_pk',
						'params' => [':deta_codigo_pk' => $id]
		]);

		$archivo= $comprobante->comprobante;
		//print_r($archivo);die();

    
        // Ruta del archivo remoto
        $remoteFile = Yii::app()->params['REMOTESIS'].$archivo;
		
        
        // Establece la conexión SSH
        $connection = ssh2_connect($ftpServer, $port);
        
        
        if (ssh2_auth_password($connection, $ftpUsername, $ftpPassword)) {
            // Abrir el archivo remoto para lectura
            $stream = ssh2_exec($connection, "cat $remoteFile");
            stream_set_blocking($stream, true);
            
            // Obtener el contenido de la imagen
            $imageContent = stream_get_contents($stream);
            
            // Cerrar la conexión
            fclose($stream);
            
            // Mostrar la imagen
            header('Content-Type: image/jpeg'); // Cambiar si es otro tipo de imagen
            echo $imageContent;
            exit;
        } else {
            Yii::$app->session->setFlash('error', 'Error de autenticación SSH.');
        }
        
        // En caso de error redirige o muestra un mensaje
        
    }
	
}
