<?php

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

use PhpParser\Node\Stmt\Label;

Yii::app()->getClientScript()->registerCssFile(Yii::app()->getBaseUrl() . '/assets/vendor/datatables/css/dataTables.bootstrap4.css');  
Yii::app()->getClientScript()->registerCssFile(Yii::app()->getBaseUrl() . '/css/tabla-data.css');
Yii::app()->getClientScript()->registerCssFile(Yii::app()->getBaseUrl() . '/css/sweetalert2.css'); 


if(Yii::app()->user->hasState('success')){
   echo TbHtml::alert(TbHtml::ALERT_COLOR_SUCCESS, Yii::app()->user->getState('success'));
   Yii::app()->user->setState('success', null);
}

if(Yii::app()->user->hasState('warning_multas')){
   echo TbHtml::alert(TbHtml::ALERT_COLOR_WARNING, Yii::app()->user->getState('warning_multas'));
   Yii::app()->user->setState('warning_multas', null);
}

if(Yii::app()->user->hasState('warning')){
   echo TbHtml::alert(TbHtml::ALERT_COLOR_WARNING, Yii::app()->user->getState('warning'));
   Yii::app()->user->setState('warning', null);
}
?>
,<style>/* Estilo general de las pestañas */
.nav-tabs .nav-link {
    color: #223265;                   /* texto gris */
    background-color: #e9ecef;        /* fondo gris claro */
    border: 1px solid #dee2e6;        /* bordes */
    margin-right: 3px;
    border-radius: 6px 6px 0 0;       /* bordes redondeados superiores */
    font-weight: 500;
}

/* Estado hover */
.nav-tabs .nav-link:hover {
    background-color: #dfe3e6;        /* gris un poco más oscuro al pasar el mouse */
    color: #223265;
}

/* Estado activo */
.nav-tabs .nav-link.active {
    color: #223265;                   /* mismo gris del texto */
    background-color: #dee2e6;        /* gris medio para destacar */
    border-color: #dee2e6 #dee2e6 #e9ecef;
    font-weight: bold;
}
</style>
<div class="card">
<?php if (count($mostrarDeclaracionesPendientes) > 0 || count($mostrarDeclaracionesPendientes1) > 0): ?>
		<div class="alert alert-secondary alert-dismissible fade show" role="alert">
		<button type="button" class="close" data-dismiss="alert" aria-label="Close">
			<span aria-hidden="true">×</span>
		</button>
		<h4 class="alert-heading"><i class="material-icons">info</i> Información</h4>
		<p>
			<span class="font-weight-bold">De acuerdo con la reforma de la LOCTI</span>, Vigente desde el 1 de abril de 2022, el proceso de declaración se realiza bajo el esquema Manual.

En este formato, el sistema presentará la lista de los meses pendientes por declarar. Usted deberá ingresar mensualmente la estimación de sus ingresos brutos; con base en este dato, el sistema calculará automáticamente el aporte correspondiente que deberá cancelar en un pago único dentro del periodo establecido.
		</p>
		
    </div>
	
			<?php
// Asegurarse de que las variables estén definidas
$variable0 = isset($mostrarDeclaracionesPendientes) ? $mostrarDeclaracionesPendientes : [];
$variable1 = isset($mostrarDeclaracionesPendientes1) ? $mostrarDeclaracionesPendientes1 : [];
$variable2 = isset($declaraciones_m) ? $declaraciones_m : [];

// Fusionar todos los arrays
$todasLasDeclaracionesPendientes = array_merge($variable0, $variable2);

// Array para almacenar los meses ya procesados
$mesesAnioVistos = [];
$fechaActual = new DateTime(); // Fecha actual

// Filtrar solo las declaraciones válidas
$declaracionesValidas = [];
foreach ($todasLasDeclaracionesPendientes as $declaracionPendiente) {
    if (in_array($declaracionPendiente["mes_anio"], $mesesAnioVistos)) continue;
    if (empty($declaracionPendiente["alicuota"])) continue;
    $fechaFin = DateTime::createFromFormat('d/m/Y', $declaracionPendiente["fin"]);
    if ($fechaFin >= $fechaActual) continue;

    $mesesAnioVistos[] = $declaracionPendiente["mes_anio"];
    $declaracionesValidas[] = $declaracionPendiente;
}
?>
<?php if (!empty($declaracionesValidas)){
$notifmensual=false;

}?>





<?php if (!empty($declaracionesValidas)): ?>

	<div class="card-body">
		<div class="card-header"><h5 class="card-title text-center">Aportes Mensuales</h5></div>
		<div class="card-body">
			<div class="row">
			<?php if ($tasanotif==true) {?>
				<div class="col-md-12">
				<div class="card border-warning mb-4" style="max-width: 100%;" bis_skin_checked="1">
				  	<div class="card-body" bis_skin_checked="1">
				    	<p class="card-text"><b>¡Atención!</b> La tasa para calcular el ingreso bruto mínimo está en proceso de carga, espere los próximos días.</p>
				  	</div>
				</div>
				</div>
				<?php  } ?>

				<div class="col-md-12">
					<div id="error-periodos"></div>
				</div>

			</div>
		<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
			'id'=>'iniciar-flujo-form',
			// 'htmlOptions' => array(
			// 	'style'=> "display: none;",
			// ),
			'clientOptions' => array(
				'validateOnSubmit' => true,
				'afterValidate' => 'js:function(form, data, hasError) {
					$("#iniciar-flujo").addClass("btn-disabled");
					$("#iniciar-flujo").html("Creando declaración...");

					if(hasError){
						$("#iniciar-flujo").html("Enviar");
						$("#iniciar-flujo").removeClass("btn-disabled");
						return false;
					}else{
						return true;
					}
				}',
			),
		));
		?>
<style>
    .ocultar-alicuota th:nth-child(3),
    .ocultar-alicuota td:nth-child(3) {
        display: none;
    }
</style>
    <p>Esquema manual</p>
    <div class="row" id="declaracion-periodos">
        <div class="col-md-12">
            <div class="table-responsive">
                <table id="tablaPendientes" class="table table-striped table-bordered text-center ocultar-alicuota" style="width:100%">
                    <thead>
                        <tr>
                            <th class="text-center">Mes del Aporte</th>
                            <th class="text-center">Monto</th>
                            <th width="10%" class="text-center">Alícuota</th>
                            <th class="text-center">Monto Requerido</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($declaracionesValidas as $key => $declaracionPendiente): ?>
                            <tr>
                                <td>
                                    <?= $declaracionPendiente["mes_anio"] ?>
                                    <?= $form->hiddenField($modelSave, 'fecha_inicio_gravable[]', [
                                        'id' => 'fecha_inicio_' . $key,
                                        'value' => $declaracionPendiente["inicio"]
                                    ]) ?>
                                    <?= $form->hiddenField($modelSave, 'fecha_fin_gravable[]', [
                                        'id' => 'fecha_fin_' . $key,
                                        'value' => $declaracionPendiente["fin"]
                                    ]) ?>
                                </td>
                                <td>
                                    <?= $form->telFieldControlGroup($modelSave, 'ingresos_brutos[]', [
                                        'onkeypress' => 'return soloMontosMensualCalcular(this, event, ' . $key . ')',
                                        'onpaste' => 'return soloMontosMensualCalcular(this, event, ' . $key . ')',
                                        'label' => 'Ingreso Bruto Mensual *',
                                        'autocomplete' => 'off',
                                        'maxlength' => 23,
                                        'id' => 'ingresos_brutos_' . $key,
                                    ]) ?>
                                </td>
                                <td id="licuota_<?= $key ?>"><?= $declaracionPendiente["alicuota"] ?></td>
                                <td id="monto_requerido_<?= $key ?>">0,00</td>
                            </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>

    <div class='row'>
        <div class='col-12 text-center'>
            <?php

           // echo $nomensual;// 1
            // echo $notifanual;// false
            // echo $notifmensual;// false
            $disabled = ($tasanotif || $notifanual || $notifmensual || $nomensual) ? true : false;
            echo TbHtml::button('<i class="fas fa-check"></i> Declarar', [
                'color' => TbHtml::BUTTON_COLOR_SECONDARY,
                'name' => 'iniciar_flujo',
                'id' => 'iniciar_flujo',
                'disabled' => $disabled
            ]);
            ?>
        </div>
    </div>

			<!-- Modal Iniciar Flujo de trabajo -->
			<div class="modal fade" id="modalFlujoMensual" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle" aria-hidden="true" data-backdrop="static">
				<div class="modal-dialog" role="document">
					<div class="modal-content">
						<div class="modal-header">
							<h4 class="modal-title text-center" id="exampleModalLongTitle">Confirmar</h4>
							<button type="button" class="close" data-dismiss="modal" aria-label="Close">
								<span aria-hidden="true">&times;</span>
							</button>
						</div>
						<div class="modal-body">
							¿Está seguro de iniciar el flujo de trabajo de este Empresa?<hr>
							<p>Por favor, verifique sí los datos son correctos.</p>
							<p id="monto-ingresos-brutos"></p>
						</div>
						<div class="modal-footer">
							<button type="button" class="btn btn-dark" data-dismiss="modal">Cerrar</button>
							<?php 
							echo TbHtml::submitButton('Aceptar', 
								array(
									'color' 		=> TbHtml::BUTTON_COLOR_SECONDARY, 
									'id' 			=> 'iniciar-flujo', 
									'name' 			=> 'iniciar-flujo',
									// 'data-dismiss'	=> "modal"
								)
							);
								?>
						</div>
					</div>
				</div>
			</div>
		<?php $this->endWidget();
		$form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
			'id'=>'declaracion-mensual-anual-form',
			'clientOptions' => array(
				'validateOnSubmit' => true,
				'afterValidate' => 'js:function(form, data, hasError) {
					$("#declaracion-mensual-anual-submit").addClass("btn-disabled");
					$("#declaracion-mensual-anual-submit").html("Creando declaración...");

					if(hasError){
						$("#declaracion-mensual-anual-submit").html("Enviar");
						$("#declaracion-mensual-anual-submit").removeClass("btn-disabled");
						return false;
					}else{
						return true;
					}
				}',
			),
		));
		?>
			<!-- TODO: Se agrega 546465465465465465465446546554 en la condición para no mostrar la opción debido a que hay que optimizarla -->
			<?php // Verificar si el array existe y tiene al menos un elemento
if (isset($mostrarDeclaracionesPendientes[0]) && $mostrarDeclaracionesPendientes[0]["first_year"] == 546465465465465465465446546554):  ?>
			<div class="row" id="declaracion-mensual-anual">
				<div class="col-md-12">
					<span style="font-size: 18px;color: black;">Aporte estimativo anual(Esquema anual):</span>
					<?php
					echo CHtml::checkBox('declaracion-mensual-anual-checkbox', false);
					?>
				</div>
				<div class="col-md-4"></div>
				<div class="col-md-4 declaracion-mensual-anual-field" style="display: none;">
					<?php 
					echo $form->telFieldControlGroup($modelSave, 'ingresos_brutos_estimado_anual', 
					array(
						'onkeypress' 	=> 'return soloMontos(this, event)', 
						'label' 		=> 'Ingresos Brutos Estimado Anual*',
						'autocomplete' 	=> 'off',
						'maxlength' => 23,
						'id' => 'ingresos_brutos_estimado_anual',
					));
					echo $form->hiddenField($modelSave, 'fecha_inicio_gravable[]', array(
						'id' => 'fecha_inicio',
						'value' => $mostrarDeclaracionesPendientes[0]["inicio"]
					)); ?>
				</div>
				<div class='col-md-2 text-center declaracion-mensual-anual-field' style="display: none;">
					<?php 
					echo TbHtml::button('<i class="fas fa-check"></i> Declarar', 
						array(
							'color' 	=> TbHtml::BUTTON_COLOR_SECONDARY,
							'name'		=> 'declaracion-mensual-anual-pre',
							'id'		=> 'declaracion-mensual-anual-pre',
					))
					?>
				</div>
			</div>
			<!-- Modal Declaración Estimada Anual -->
			<div class="modal fade" id="modalAnualEstimadaMensual" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle" aria-hidden="true" data-backdrop="static">
				<div class="modal-dialog" role="document">
					<div class="modal-content">
						<div class="modal-header">
							<h4 class="modal-title text-center" id="exampleModalLongTitle">Confirmar</h4>
							<button type="button" class="close" data-dismiss="modal" aria-label="Close">
								<span aria-hidden="true">&times;</span>
							</button>
						</div>
						<div class="modal-body">
							¿Está seguro de iniciar el flujo de trabajo de este Empresa?<hr>
							<p>Por favor, verifique sí los datos son correctos.</p>
							<p id="monto-ingresos-brutos-anual"></p>
						</div>
						<div class="modal-footer">
							<button type="button" class="btn btn-dark" data-dismiss="modal">Cerrar</button>
							<?php 
							echo TbHtml::submitButton('Aceptar', 
								array(
									'color' 		=> TbHtml::BUTTON_COLOR_SECONDARY, 
									'id' 			=> 'declaracion-mensual-anual-submit', 
									'name' 			=> 'declaracion-mensual-anual-submit',
									// 'data-dismiss'	=> "modal"
								)
							);
								?>
						</div>
					</div>
				</div>
			</div>
			<?php endif; ?>
		<?php $this->endWidget();?>
		</div>
	</div>
	<?php endif; ?>
<?php
if(Yii::app()->user->hasFlash('error')) {
	Yii::app()->clientScript->registerScript("error",'
	var alert = mensaje_alerta("<b>¡Ups!</b> '.Yii::app()->user->getFlash('error').'", "danger");
	$("#error-periodos").html(alert);
	');
}
Yii::app()->clientScript->registerScript("validar",'
$(\'#declaracion-mensual-anual-checkbox\').click(function() {
	if(this.checked) {
		$(".declaracion-mensual-anual-field").each((index, element) => {
			$(element).show("slow");
		})
		$("#iniciar-flujo-form").each((index, element) => {
			$(element).slideUp();
		})
	} else {
		$(".declaracion-mensual-anual-field").each((index, element) => {
			$(element).slideUp();
		})
		$("#iniciar-flujo-form").each((index, element) => {
			$(element).show("slow");
		})
	}
});

$(\'#iniciar_flujo\').click(function() {
	 $("#modalFlujoMensual").modal("show");
    $("#iniciar-flujo").addClass("btn-disabled");

    // Selecciona solo los inputs que existen realmente
    var inputs = $("input[id^=\'ingresos_brutos_\']");
    var permite = true;

    // Valida que los campos no estén vacíos
    inputs.each(function(){
        if($(this).val() === "" || $(this).val() === null){
            permite = false;
            return false; // rompe el each
        }
    });

    if(!permite){
        var alert = mensaje_alerta("<b>¡Ups!</b> Revise nuevamente los campos requeridos.", "warning");
        $("#error-periodos").html(alert);
        $("#modalFlujoMensual").modal("hide");
        return; // salimos del click
    }

    // Preparar datos para el ajax
    let fi = [], ff = [], ib = [];
    inputs.each(function(){
        var index = $(this).attr("id").split("_")[2]; // extrae el índice del id
        ib.push($(this).val());
        fi.push($("#fecha_inicio_" + index).val());
        ff.push($("#fecha_fin_" + index).val());
    });

    // Convertir arrays a strings separados por ||
    ib = ib.join("||");
    fi = fi.join("||");
    ff = ff.join("||");

    $("#monto-ingresos-brutos").html("");

    $.ajax({
        url: "'.$this->createUrl('declaracion/mostrarIngresosBrutos').'",
        type: "POST",
        data: {
            ingresos_brutos: ib,
            fechas_inicio: fi,
            fechas_fin: ff
        },
        success: function(respuesta){
            try {
                var respuestaJSON = JSON.parse(respuesta);
                var alert = mensaje_alerta(respuestaJSON.error, "warning");
                $("#error-periodos").html(alert);
                $("#modalFlujoMensual").modal("hide");
            } catch(e){
                if(respuesta != ""){
                    $("#iniciar-flujo").removeClass("btn-disabled");
                }
                $("#monto-ingresos-brutos").html(respuesta);
            }
        }
});
});

$(\'#declaracion-mensual-anual-pre\').click(function() {
	$("#modalAnualEstimadaMensual").modal("show");
	const tam = '.count($mostrarDeclaracionesPendientes).'
	$("#declaracion-mensual-anual-submit").addClass("btn-disabled");

	if(tam > 0) {
		var permite = true;
		var ingresos_brutos_estimado_anual = $("#ingresos_brutos_estimado_anual").val();

		if(ingresos_brutos_estimado_anual == "" || ingresos_brutos_estimado_anual == null ) {
			permite = false;
		}

		if(!permite) {
			// Se crea la animación hacia los periodos gravable.
			// $(\'html, body\').animate({scrollTop: $("#declaracion-periodoss").offset().top}, 1000); 

			var alert = mensaje_alerta("<b>¡Ups!</b> Revise nuevamente los campos requeridos.", "warning");

			$("#error-periodos").html(alert);
			$(\'#modalAnualEstimadaMensual\').modal(\'hide\')
		}


		$("#monto-ingresos-brutos-anual").html("");

		if(permite) {
			let fi = "", ff = "", ib = "", fi_anual = "";
			ib 		+= $("#ingresos_brutos_estimado_anual").val();
			fi		+= $("#fecha_inicio").val();
			ff		+= $("#fecha_fin").val();
			// Línea 442 - Verificar si el array tiene elementos
fi_anual += "'.(
    isset($mostrarDeclaracionesPendientes[0]["inicio"]) ? $mostrarDeclaracionesPendientes[0]["inicio"] : 
    (isset($mostrarDeclaracionesPendientes1[0]["inicio"]) ? $mostrarDeclaracionesPendientes1[0]["inicio"] : '')
).'"

			$.ajax({
				url 		: "'.$this->createUrl('declaracion/mostrarIngresosBrutos').'",
				type 		: "POST",
				data 		: {
								ingresos_brutos: ib,
								estimado_anual: fi_anual
							},
			    success : function(respuesta){
					try {
						respueta = JSON.parse(respuesta);
						var alert = mensaje_alerta(respueta.error, "warning");

						$("#error-periodos").html(alert);
						$(\'#modalAnualEstimadaMensual\').modal(\'hide\')
					} catch (e) {
						if(respuesta != ""){
							$(\'#declaracion-mensual-anual-submit\').removeClass(\'btn-disabled\');
						}
						$("#monto-ingresos-brutos-anual").html(respuesta);
					}
			    },
			})
		}
	}else{// Significa que la Empresa se constituyó en el año actual
		//$(\'#declaracion-mensual-anual-submit\').attr("disabled", false);
	}
})
', CClientScript::POS_END);
endif; 

?>




	<div class="card-body">
	<div class="alert alert-info alert-dismissible fade show shadow-sm border-left border-info" role="alert" style="border-radius: 12px;">
    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span>
    </button>
    <div class="d-flex align-items-center mb-2">
        <i class="material-icons mr-2" style="font-size: 28px; color: #0c5460;">info</i>
        <h5 class="mb-0 font-weight-bold text-dark">Importante</h5>
    </div>
    <p class="mb-1 text-secondary">
        A continuación los montos de los <span class="font-weight-bold">Aportes requeridos</span> seleccionados solo son referenciales.
    </p>
    <p class="mb-0 text-secondary">
        Al momento de efectuar el registro del pago, se abonará el mismo a los aportes de los meses seleccionados 
        o lo puede realizar de manera <span class="font-weight-bold text-dark">Mensual</span>.
    </p>
</div>

		<div class="card-header"><h5 class="card-title text-center">Resumen de Aportes Mensuales</h5></div>
		<div class="card-body">
			<div class="row">
				<div class="col-12">
					<div id="mensajes"></div>
				</div>
			</div>
			<div class="row align-items-center">
			
			
      </div>
<div class="row">
    <div class="col-md-12">

        <!-- Tabs -->
        <ul class="nav nav-tabs" id="declaracionesTabs" role="tablist">
		<li class="nav-item">
			<a class="nav-link active tab-gris" id="pendientes-tab" data-toggle="tab" href="#pendientes" role="tab" aria-controls="pendientes" aria-selected="true">
				Pendientes por pagar
			</a>
		</li>
            <li class="nav-item">
                <a class="nav-link" id="verificando-tab" data-toggle="tab" href="#verificando" role="tab" aria-controls="verificando" aria-selected="false">Verificando pago</a>
            </li>
			<li class="nav-item">
                <a class="nav-link" id="rechazadas-tab" data-toggle="tab" href="#rechazadas" role="tab" aria-controls="rechazadas" aria-selected="false">Rechazadas</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="finalizadas-tab" data-toggle="tab" href="#finalizadas" role="tab" aria-controls="finalizadas" aria-selected="false">Finalizadas</a>
            </li>
			
        </ul>

        <!-- Contenido de los tabs -->
        <div class="tab-content mt-3" id="declaracionesTabsContent">

           <!-- TAB PENDIENTES -->
<div class="tab-pane fade show active" id="pendientes" role="tabpanel" aria-labelledby="pendientes-tab">

<!-- Bloque solo para pendientes -->
<div class="card-body mb-3" id="pendientesPagos">
	<div class="row">
		<div class="col-12">
			<div id="mensajes"></div>
		</div>
	</div>
	<div class="row align-items-center">
		<div class="col-sm-6 mb-2 mb-sm-0">
			<div class="d-flex align-items-center">
				<h5 class="mb-0 me-2">Monto seleccionado:</h5>
				<p class="mb-0 h5 text-primary">
					<strong id="montoAportesSelecionados">0,00</strong>
				</p>
			</div>
		</div>
		<div class="col-sm-6">
			<!--<div class="d-flex justify-content-sm-end align-items-center">
				<span class="text-info me-2" data-toggle="tooltip" 
					title="Puede seleccionar múltiples pagos y pagar todo junto o individualmente"
					style="cursor: help;">
					<i class="material-icons">help_outline</i>
				</span>
				<button id="reg_boton" type='button' class='btn btn-info d-flex align-items-center' 
					data-toggle='modal' data-target='#agregarPago' 
					title='Registrar Pago'
					onclick='prepararPago()'>
					<i class='material-icons me-1'>account_balance_wallet</i>
					Seleccione los meses que aplican para registrar sus pagos
				</button>
			</div>-->
		</div>
	</div>
</div>

<!-- Tabla de pendientes -->
<div class="table-responsive">
	<table id="tabla_pendientes" class="table table-striped table-bordered text-center" style="width:100%">
		<thead>
			<tr>
				<th></th>
				<th width="30%">Mes del Aporte</th>
				<th>Código</th>
				<th width="20%">Aporte Requerido</th>
				<th width="20%">Monto aportado</th>
				<th width="20%">Monto a pagar</th>
				<th width="20%">Fecha Tope Pago</th>
				<th>Estatus</th>
				<th>Acciones</th>
			</tr>
		</thead>
		<tbody>
			<?php echo $mostrarPendientes; ?>
		</tbody>
	</table>
</div>

</div>


            <!-- TAB VERIFICANDO -->
            <div class="tab-pane fade" id="verificando" role="tabpanel" aria-labelledby="verificando-tab">
                <div class="table-responsive">
                    <table id="tabla_verificando" class="table table-striped table-bordered text-center" style="width:100%">
                        <thead>
                            <tr>
                                <th></th>
                                <th width="30%">Mes del Aporte</th>
                                <th>Código</th>
                                <th width="20%">Aporte Requerido</th>
                                <th width="20%">Monto aportado</th>
                                <th width="20%">Monto a pagar</th>
                                <th width="20%">Fecha Tope Pago</th>
                                <th>Estatus</th>
                                <th>Acciones</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php echo $mostrarVerificando;  ?>
                        </tbody>
                    </table>
                </div>
            </div>

			 <!-- TAB RECHAZADAS -->
			 <div class="tab-pane fade" id="rechazadas" role="tabpanel" aria-labelledby="rechazadas-tab">
                <div class="table-responsive">
                    <table id="tabla_rechazadas" class="table table-striped table-bordered text-center" style="width:100%">
                        <thead>
                            <tr>
							<th class="text-center">Código</th>
									<th class="text-center">Declaraciones Asociadas</th>
									<th class="text-center">Aporte</th>
									<th class="text-center">Fecha Declaración</th>
									<th class="text-center">Estatus</th>
									<th width="19%" class="text-center">Motivo</th>
                            </tr>
                        </thead>
                        <tbody>
						<?php foreach($mostrarRechazadas as $pago) {
								$fecha = FuncionesController::convertirFecha($pago["decl_fechapago"], "dd/mm/yyyy");
								$moneda = FuncionesController::obtenerMoneda($pago["decl_fechapago"]);
								$monto = number_format($pago["decl_monto"], 2, ",", ".");
								$monto = $moneda." ".$monto;
								$estatus = "Rechazado";
								$acciones = "";
								$motivo=$pago["rech_descripcion"];
								if($pago["decl_pago_aceptado"] == 1) {
									$estatus = "Aceptado";
								} else if($pago["decl_pago_aceptado"] === null) {
									$estatus = "En revisión";
								}
								?>
								<tr>
									<td class="align-middle">
										<?php echo $pago["deta_codigo_pk"] ?>
									</td>
									<td class="align-middle">
										<?php echo implode(", ", explode(",", $pago["codigo_declaraciones"])) ?>
									</td>
									<td class="align-middle">
										<?php echo $monto ?>
									</td>
									<td class="align-middle">
										<?php echo $fecha ?>
									</td>
									<td class="align-middle">
										<?php echo $estatus ?>
									</td>
									<td class="align-middle">
										<?php echo $motivo ?>
									</td>
								</tr>
								<?php } ?>
                        </tbody>
                    </table>
                </div>
            </div>

            <!-- TAB FINALIZADAS -->
            <div class="tab-pane fade" id="finalizadas" role="tabpanel" aria-labelledby="finalizadas-tab">
                <div class="table-responsive">
                    <table id="tabla_finalizadas" class="table table-striped table-bordered text-center" style="width:100%">
                        <thead>
                            <tr>
                                <th></th>
                                <th width="30%">Mes del Aporte</th>
                                <th>Código</th>
                                <th width="20%">Aporte Requerido</th>
                                <th width="20%">Monto aportado</th>
                                <th width="20%">Monto a pagar</th>
                                <th width="20%">Fecha Tope Pago</th>
                                <th>Estatus</th>
                                <th>Acciones</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php echo $mostrarFinalizadas; ?>
                        </tbody>
                    </table>
                </div>
            </div>

        </div>
    </div>
</div>

		</div>
	</div>
	<?php if(Yii::app()->user->hasFlash('mensaje-pago')): ?>
    <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
    <script>
        Swal.fire({
            icon: 'success',
            title: '¡Éxito!',
            text: '<?php echo Yii::app()->user->getFlash("mensaje-pago"); ?>',
            confirmButtonText: 'Aceptar'
        });
    </script>
<?php endif; ?>


</div>

<?php
// MODAL Detalles de la multa
$this->renderPartial('_modal-detalles-multas');
  
// MODAL Comprobante de pago
$this->renderPartial('_modal-comprobante');

// MODAL Detalle de la declaración mensual
$this->renderPartial('_modal-detalles-declaracion-mensual');

$this->renderPartial("_pago_mensual", array('pagoSave' => $pagoSave));
?>

<?php  
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/assets/vendor/datatables/js/jquery.dataTables.js', CClientScript::POS_END);
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/assets/vendor/datatables/js/dataTables.bootstrap4.js', CClientScript::POS_END);

if(Yii::app()->user->hasFlash('mensaje-error')) {
	Yii::app()->clientScript->registerScript("error",'
	var alert = mensaje_alerta("<b>¡Ups!</b> '.Yii::app()->user->getFlash('mensaje-error').'", "danger");
	$("#mensajes").html(alert);
	');
}

if(Yii::app()->user->hasFlash('mensaje-error2')) {
	Yii::app()->clientScript->registerScript("error",'
	var alert = mensaje_alerta("<b>¡Ups!</b> '.Yii::app()->user->getFlash('mensaje-error').'", "danger");
	$("#mensajes2").html(alert);
	');
}

if(Yii::app()->user->hasFlash('credito_fiscal')) {
	Yii::app()->clientScript->registerScript("error",'
	var alert = mensaje_alerta("'.Yii::app()->user->getFlash('credito_fiscal').'", "danger");
	$("#mensajes").html(alert);
	');
}

if(Yii::app()->user->hasFlash('mensaje-success')) {
	Yii::app()->clientScript->registerScript("error",'
	var alert = mensaje_alerta("'.Yii::app()->user->getFlash('mensaje-success').'", "success");
	$("#mensajes").html(alert);
	');
}

Yii::app()->clientScript->registerScript("tabla", '
    $(document).ready(function() {
        // Función para verificar e inicializar DataTables de forma segura
        function initDataTableSafe(tableId, options) {
            if ($("#"+tableId).length && $("#"+tableId+" thead th").length > 0) {
                // Ajustar order si la columna no existe
                if (options.order && options.order.length > 0) {
                    var orderCol = options.order[0][0];
                    if (orderCol >= $("#"+tableId+" thead th").length) {
                        delete options.order;
                    }
                }
                
                // Ajustar columnDefs si los targets no existen
                if (options.columnDefs && options.columnDefs.length > 0) {
                    options.columnDefs = options.columnDefs.filter(function(def) {
                        return def.targets.every(function(target) {
                            return target < $("#"+tableId+" thead th").length;
                        });
                    });
                    
                    if (options.columnDefs.length === 0) {
                        delete options.columnDefs;
                    }
                }
                
                return $("#"+tableId).DataTable(options);
            }
            return null;
        }

        // Configuración base para todas las tablas
        var baseOptions = {
            pageLength: 12,
            language: {
                "sProcessing":     "Procesando...",
                "sLengthMenu":     "Mostrar _MENU_ registros",
                "sZeroRecords":    "No se encontraron resultados",
                "sEmptyTable":     "No hay datos.",
                "sInfo":           "Mostrando registros del _START_ al _END_ de un total de _TOTAL_ registros",
                "sInfoEmpty":      "Mostrando registros del 0 al 0 de un total de 0 registros",
                "sInfoFiltered":   "(filtrado de un total de _MAX_ registros)",
                "sInfoPostFix":    "",
                "sSearch":         "Buscar:",
                "sInfoThousands":  ",",
                "sLoadingRecords": "Cargando...",
                "oPaginate": {
                    "sFirst":    "Primero",
                    "sLast":     "Último",
                    "sNext":     "Siguiente",
                    "sPrevious": "Anterior"
                },
                "oAria": {
                    "sSortAscending":  ": Activar para ordenar la columna de manera ascendente",
                    "sSortDescending": ": Activar para ordenar la columna de manera descendente"
                },
                "buttons": {
                    "copy": "Copiar",
                    "colvis": "Visibilidad"
                }
            }
        };

        // Inicializar las tres tablas
        initDataTableSafe("tabla_pendientes", $.extend(true, {}, baseOptions, {
            order: [[ 2, "desc" ]]
        }));

        initDataTableSafe("tabla_verificando", $.extend(true, {}, baseOptions, {
            order: [[ 2, "desc" ]]
        }));

        initDataTableSafe("tabla_finalizadas", $.extend(true, {}, baseOptions, {
            order: [[ 2, "desc" ]]
        }));

		initDataTableSafe("tabla_rechazadas", $.extend(true, {}, baseOptions, {
            order: [[ 2, "desc" ]]
        }));
    });
');

?>
<script>
	$('#reg_boton').prop('disabled', true); // Habilitar el botón
let monto_aportar = 0;
const credito = <?php echo $credito ?>;
let credito_first = true;
const pagado = <?php echo $pagado ?>;
let pagado_first = true;
function agregarMonto(codigo, monto) {
    // Obtener todos los checkboxes seleccionados
    let aportesSeleccionados = document.querySelectorAll('input[type="checkbox"][name="pago"]:checked');

	//alert(element.id);

    // Gestionar los códigos seleccionados
    gestionarCodigos(codigo,monto);


	

	// Crear una lista de IDs separados por comas
    let idsSeleccionados = Array.from(aportesSeleccionados).map(checkbox => checkbox.id).join(',');

    // Actualizar el valor del campo oculto con los IDs seleccionados
    document.getElementById("SidcaiDeclaracionDetalle_codigo_declaraciones").value = idsSeleccionados;


    // Calcular la suma total de los montos seleccionados
    let monto_aportar = sumaMontos(aportesSeleccionados);
	//alert(monto_aportar);

    // Convertir a BigInt para evitar problemas de precisión decimal
    monto_aportar = BigInt(Math.round(monto_aportar * 100)); // Pasar a centavos

    // Manejar casos donde el monto sea cero
    if (monto_aportar === BigInt(0)) {
        monto_aportar = BigInt(0);
    }

    // Ajuste de crédito
    if (credito > 0) {
        if (monto_aportar < 0) {
            monto_aportar += BigInt(credito * 100);
            credito_first = true;
        } else if (credito_first === true) {
            credito_first = false;
        }
    }

    // Ajuste de pagado
    if (pagado > 0) {
        if (monto_aportar < 0) {
            monto_aportar += BigInt(pagado * 100);
            pagado_first = true;
        } else if (pagado_first === true) {
            pagado_first = false;
        }
    }

    // Convertir el monto total de centavos a euros
    const montoFinal = Number(monto_aportar) / 100;

    // Formatear el resultado con separadores de miles y decimales
    const formatted = montoFinal.toLocaleString('de-DE', { 
        minimumFractionDigits: 2, 
        maximumFractionDigits: 2 
    });

    // Mostrar el monto en el elemento HTML correspondiente
    const montoApagarElem = document.getElementById("montoApagar");
    if (monto_aportar === BigInt(0)) {
        montoApagarElem.innerHTML = "";
        $('#reg_boton').prop('disabled', true);
    } else {
        montoApagarElem.innerHTML = formatted;
        $('#reg_boton').prop('disabled', false);
    }

    // Actualizar la etiqueta del monto
    $('label[for="SidcaiDeclaracionDetalle_decl_monto"]').html("Monto (" + formatted + ")");
	
}

/*
function gestionarCodigos(codigo,diferenciaMonto) {

	//alert(diferenciaMonto);
	
	var formModal = document.getElementById("agregar-pago-form");
	const montoFinal = diferenciaMonto;

// Formatear el resultado con separadores de miles y decimales
const formatted = montoFinal.toLocaleString('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 });

// Mostrar el monto en el elemento HTML correspondiente
if (diferenciaMonto === BigInt(0)) {
	document.getElementById("montoApagar").innerHTML = "";
	$('#reg_boton').prop('disabled', true);
} else {
	document.getElementById("montoApagar").innerHTML = formatted;
	$('#reg_boton').prop('disabled', false);
}

// Actualizar la etiqueta del monto
$('label[for="SidcaiDeclaracionDetalle_decl_monto"]').html("Monto (" + formatted + ")");
document.getElementById('SidcaiDeclaracionDetalle_codigo_declaraciones').value = codigo;

}*/

function prepararPago() {
    // Obtener todos los checkboxes seleccionados
    let aportesSeleccionados = document.querySelectorAll('input[type="checkbox"][name="pago"]:checked');
    
    // Crear una lista de IDs separados por comas
    let idsSeleccionados = Array.from(aportesSeleccionados).map(checkbox => checkbox.id).join(',');
    
    // Calcular el monto total
    let montoTotal = sumaMontos(aportesSeleccionados);
    
    // Llamar a gestionarCodigos con los parámetros correctos
    gestionarCodigos(idsSeleccionados, montoTotal);
}

function gestionarCodigos(codigo, diferenciaMonto) {
    console.log("Parámetros recibidos:", codigo, diferenciaMonto); // Para debug
    
    // Validar y convertir parámetros
    const monto = (typeof diferenciaMonto === 'undefined' || diferenciaMonto === null) ? 0 : Number(diferenciaMonto);
    
    // Formatear el resultado
    const formatted = monto.toLocaleString('de-DE', { 
        minimumFractionDigits: 2, 
        maximumFractionDigits: 2 
    });

    // Mostrar el monto
    const montoApagarElem = document.getElementById("montoApagar");
    if (monto === 0) {
        montoApagarElem.innerHTML = "";
        $('#reg_boton').prop('disabled', true);
    } else {
        montoApagarElem.innerHTML = formatted;
        $('#reg_boton').prop('disabled', false);
    }

    // Actualizar la etiqueta
    $('label[for="SidcaiDeclaracionDetalle_decl_monto"]').html("Monto (" + formatted + ")");
    
    // Solo establecer el código si no es undefined
    if (typeof codigo !== 'undefined' && codigo !== null) {
        document.getElementById('SidcaiDeclaracionDetalle_codigo_declaraciones').value = codigo;
    }
}

function sumaMontos(aportesSeleccionados) {
    let total = BigInt(0);
    let montoAS = document.getElementById("montoAportesSelecionados");

    if (aportesSeleccionados.length !== 0) {
    aportesSeleccionados.forEach(aporte => {
        const onclickValue = aporte.getAttribute('onclick');
        if (onclickValue) {
            const matches = onclickValue.match(/agregarMonto\(.*,\s*([0-9.]+)/);
            if (matches && matches.length > 1) {
                const valor = BigInt(Math.round(parseFloat(matches[1]) * 100)); // Redondear antes de convertir a BigInt
                total += valor;
            }
        }
    });
}

    // Convertir de centavos a moneda normal dividiendo por 100
    const montoFinal = Number(total) / 100;

    // Actualizar el texto en el elemento HTML con el formato de número
    montoAS.textContent = number_format(montoFinal, 2, ",", ".");
    return montoFinal;
}

// Formatear el número para miles y decimales
function number_format(number, decimals, dec_point, thousands_sep) {
    var n = !isFinite(+number) ? 0 : +number,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',
        toFixedFix = function (n, prec) {
            var k = Math.pow(10, prec);
            return '' + Math.round(n * k) / k;
        };
    
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
    
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }
    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
    }
    return s.join(dec);
}

function soloMontosMensualCalcular(boton, e, key_licuota, quitarDecimales = false) {
    const campo = boton.id;
    const licuota = parseFloat(document.getElementById("licuota_" + key_licuota).textContent.replace(',', '.')) || 0;
    const key = e.which || e.keyCode;

    // Permitir solo números y teclas de control
    if (!((key >= 48 && key <= 57) || (key >= 96 && key <= 105) || 
          key === 8 || key === 9 || key === 13 || key === 37 || key === 39 || key === 46)) {
        e.preventDefault();
        return false;
    }

    $("#" + campo).on("keyup", function (event) {
        let value = $(this).val();
        
        // Si está vacío, mostrar 0,00
        if (!value || value.trim() === '') {
            document.getElementById("monto_requerido_" + key_licuota).textContent = "0,00";
            return;
        }

        // Limpiar y convertir a número
        let cleanValue = value.replace(/[^\d]/g, '');
        let numericValue = parseFloat(cleanValue) || 0;

        // Ajustar decimales
        if (!quitarDecimales) {
            numericValue = numericValue / 100;
        }

        // Formatear valor de entrada
        let formattedValue = quitarDecimales ? 
            numericValue.toFixed(0).replace(/\B(?=(\d{3})+(?!\d))/g, ".") :
            (numericValue * 100).toFixed(0).replace(/(\d)(?=(\d{2})+$)/, "$1,").replace(/\B(?=(\d{3})+(?!\d))/g, ".");

        $(this).val(formattedValue);

        // Calcular monto requerido
        let montoRequerido = (numericValue * licuota) / 100;
        document.getElementById("monto_requerido_" + key_licuota).textContent = 
            montoRequerido.toLocaleString('de-DE', {minimumFractionDigits: 2, maximumFractionDigits: 2});
    });

    return true;
}

function soloMontosMensualCalcular(boton, e, key_licuota, quitarDecimales = false) {
    const campo = boton.id;
    const licuota = parseFloat(document.getElementById("licuota_" + key_licuota).textContent);
    const key = e.which || e.keyCode;

    // Solo permitir teclas numéricas
    if (key < 48 || key > 57) {
        e.preventDefault();
    }

    $("#" + campo).on("keyup", function (event) {
        $(event.target).val((index, value) => {
            // Remover caracteres no numéricos (excepto los necesarios)
            let valorNumerico = value.replace(/\D/g, "");

            // Formato para miles y decimales
            if (!quitarDecimales) {
                valorNumerico = valorNumerico.replace(/([0-9])([0-9]{2})$/, "$1,$2");
            }
            
            const valorFormateado = valorNumerico.replace(/\B(?=(\d{3})+(?!\d))/g, ".");
            
            // Convertir valor de texto a número para realizar la operación correctamente
            const valorCalcular = parseFloat(valorNumerico.replace(/\./g, "").replace(",", "."));

            // Calcular el valor basado en licuota
            const valorLicuota = ((valorCalcular * licuota) / 100).toFixed(2);

            // Formatear el resultado para que se muestre con el formato correcto
            const valorLicuotaFormateado = valorLicuota
                .replace(/\B(?=(\d{3})+(?!\d))/g, ".")
                .replace(".", ",");

            // Actualizar el campo de monto requerido
            document.getElementById("monto_requerido_" + key_licuota).textContent = valorLicuotaFormateado;

            return valorFormateado;
        });
    });
}


</script>
<script>
$(document).ready(function() {
    $('#declaracionesTabs a[href="#pendientes"]').tab('show'); // Marca el tab Pendientes como activo
});

</script>
