<?php namespace App\Http\Controllers;

use App\Custom\SQLConnection;
use App\Custom\Misc;

use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Request;

use DateTime;
use File;
use App\Custom\Classes\Notificacion;

class ApiController extends Controller {

	private static $amerita_situacion_1 = false;
/*Score Inicio */

	public static function ObtenerScore($cuit=''){
		$card_score 						= [];
		$score_ordenado 				= [];
		$tabla_score_ordenada 	= [];
		$debug_score 						= '';
		$respuesta 							= '';
		if(!$cuit){
			$storagePath  = \Storage::disk('score')->getDriver()->getAdapter()->getPathPrefix();
			foreach(\Storage::disk('score')->files() as $file){
				$array = explode(";",\File::get($storagePath.$file));
				foreach($array as $cuit){
					$cuit = trim($cuit);
					if($cuit != ''){
						$respuesta .= Static::CalcularScore($cuit);
					}else{
						$respuesta .= "<br>";
					}
				}
			}
			return $respuesta;
		}else{
				
			return	Static::CalcularScore($cuit);
		}
	}

	private static function calcularScorePersonaJuridica($score,$porcentaje_por_grupo,$score_ordenado,$tabla_score_con_cantidades,$porcentaje_por_afectacion){
	$calc_score['score'] 											= $score;
		$calc_score['afecta_directo'] 						= [];
		$calc_score['afecta_directo']['total'] 		= 0;
		$calc_score['afecta_directo']['debug'] 		= '';
		$calc_score['afecta_indirecto']					 	= [];
		$calc_score['afecta_indirecto']['debug'] 	= '';
		$total_indirecto													= [];

		foreach($score_ordenado as $key_grupo => $score_grupo){
			foreach($score_grupo as $key_codigo => $score_codigo){
		      if($key_codigo == 6){continue;}
				foreach($score_codigo as $key_item => $score_item){
				 	if($key_grupo == 2){
			 			foreach($score_item as $key_fecha => $score_fecha){
			 				$datetime1 = new DateTime($score_fecha->fecha);
				      $datetime2 = new DateTime();
				      $interval = $datetime1->diff($datetime2);
				      $score_fecha->dias =  $interval->format('%a');
							$cantidad = count($score_item);

		      		foreach($tabla_score_con_cantidades[$key_grupo][$key_codigo] as $key_cantidades => $item_cantidades){

								if($score_fecha->codigo == $item_cantidades->codigo 
									&&( $score_fecha->dias > $item_cantidades->dias_desde 
									&& $score_fecha->dias <=  $item_cantidades->dias_hasta) 
									&& ($cantidad  >= $item_cantidades->cant_desde 
									&& $cantidad  <= $item_cantidades->cant_hasta) 
								){

				      		$tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidades = $cantidad;
				      		$tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidad = $cantidad;
				      		$tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->dias = $score_fecha->dias;
				      	}
			      	}
      			}
	      	}else{
						$datetime1 = new DateTime($score_item->fecha);
			      $datetime2 = new DateTime();
			      $interval = $datetime1->diff($datetime2);
			      $score_item->dias =  $interval->format('%a');
			      foreach($tabla_score_con_cantidades[$key_grupo][$key_codigo] as $key_cantidades => $item_cantidades){

		   				if($key_grupo == 1 || $key_grupo == 3){
			     			if($score_item->codigo == $item_cantidades->codigo 
			     				&& $score_item->dias > $item_cantidades->dias_desde 
			     			&& $score_item->dias <=  $item_cantidades->dias_hasta ){
			      			$tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidades = $score_item->cantidades;
			      			$tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidad += 1;
			      			$tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->dias = $score_item->dias;
			      		}
			      
							}else if($key_grupo == 7 || $key_grupo == 8){

								if($score_item->codigo == $item_cantidades->codigo 
									&& $score_item->cantidades >= $item_cantidades->cant_desde 
									&& $score_item->cantidades <= $item_cantidades->cant_hasta){

			      			$tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidades = $score_item->cantidades;
			      			$tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidad += 1;
			      			$tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->dias = $score_item->dias;
								}
							}
						}
					}
				}
			}
		}

		foreach($tabla_score_con_cantidades as $key_grupo => $score_grupo){
			foreach($score_grupo as $key_codigo => $score_codigo){
				if($key_codigo == 6){continue;}
				foreach($score_codigo as $key_item => $score_item){
	     			if($score_item->cantidad > 0 && $score_item->valor != 0){
	     				if($score_item->afecta_directo == 1){
								
	     					$calc_score['afecta_directo']['total'] +=  ($score_item->valor + ((($score_item->cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[1]->porcentaje);

	     					$calc_score['afecta_directo']['debug'][] =  "Le suma: " .($score_item->valor + ((($score_item->cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[1]->porcentaje) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $score_item->cantidad. ' días '. $score_item->dias . ' valores '. $score_item->cantidades;
	     				}else	if($score_item->afecta_directo == 0){
	     					$calc_score['afecta_indirecto'][$key_grupo]['total'][] = -1 * ($score_item->valor + ((($score_item->cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[0]->porcentaje);
	     					$calc_score['afecta_indirecto']['debug'][] =  "Le suma: " .($score_item->valor + ((($score_item->cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[0]->porcentaje) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $score_item->cantidad. ' días '. $score_item->dias . ' valores '. $score_item->cantidades;
	     				}
	     			}
				}
			}
		}

		// Se suma el porcentaje solo una vez por cada variable definida en tabla score y solo en caso de situación 1 en todos los bancos.
		if (self::$amerita_situacion_1) {
			foreach ($tabla_score_con_cantidades as $key_grupo => $score_grupo) {
				foreach($score_grupo as $key_codigo => $score_codigo) {
					if ($key_codigo == 1){
						foreach ($score_codigo as $key_item => $score_item) {
							$cantidad = 1;

	     				if($cantidad > 0 && $score_item->valor != 0) {
	     					if($score_item->afecta_directo == 1) {
		     					$calc_score['afecta_directo']['total'] +=  ($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[1]->porcentaje);

		     					$calc_score['afecta_directo']['debug'][] =  "Le suma: " .($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[1]->porcentaje) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $cantidad;
		     				} elseif($score_item->afecta_directo == 0){
		     					$calc_score['afecta_indirecto'][$key_grupo]['total'][] = -1 * ($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[0]->porcentaje);
		     					$calc_score['afecta_indirecto']['debug'][] =  "Le suma: " .($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[0]->porcentaje) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $cantidad;
		     				}
							}
						}
					}
				}
			}
		} else {
			// Si existe un registro situación 10 en la tabla score será procesado con dicho valor cuando no sea situación 1 en todos los bancos y periodos.
			foreach ($tabla_score_con_cantidades as $key_grupo => $score_grupo) {
				foreach($score_grupo as $key_codigo => $score_codigo) {
					if ($key_codigo == 10){
						foreach ($score_codigo as $key_item => $score_item) {
							$cantidad = 1;

	     				if($cantidad > 0 && $score_item->valor != 0) {
	     					if($score_item->afecta_directo == 1) {
		     					$calc_score['afecta_directo']['total'] +=  ($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[1]->porcentaje);

		     					$calc_score['afecta_directo']['debug'][] =  "Le suma: " .($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[1]->porcentaje) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $cantidad;
		     				} elseif($score_item->afecta_directo == 0){
		     					$calc_score['afecta_indirecto'][$key_grupo]['total'][] = -1 * ($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[0]->porcentaje);
		     					$calc_score['afecta_indirecto']['debug'][] =  "Le suma: " .($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[0]->porcentaje) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $cantidad;
		     				}
							}
						}
					}
				}
			}
		}

		$calc_score['score'] += $calc_score['afecta_directo']['total'];
		foreach($calc_score['afecta_indirecto'] as $key_grupo => $score_grupo){
			if($key_grupo=='debug'){continue;}
			$total_indirecto[$key_grupo] = array_sum($score_grupo['total']);
		}
		foreach($total_indirecto as $key_total => $value_total){

			switch($key_total){
				case '1':
					if($value_total > $porcentaje_por_grupo->judicial){
						$calc_score['score'] -= $porcentaje_por_grupo->judicial;
					}else{
						$calc_score['score'] -= $value_total;
					}
					break;
				case '2':

					if($value_total > $porcentaje_por_grupo->cheques){
						$calc_score['score'] -= $porcentaje_por_grupo->cheques;
					}else{
						$calc_score['score'] -= $value_total;
					}
					break;
				case '3':

					if($value_total > $porcentaje_por_grupo->cendeu){
						$calc_score['score'] -= $porcentaje_por_grupo->cendeu;
					}else{
						$calc_score['score'] -= $value_total;
					}
					break;
				
				case '4':

					if($value_total > $porcentaje_por_grupo->fiscal){
						$calc_score['score'] -= $porcentaje_por_grupo->fiscal;
					}else{
						$calc_score['score'] -= $value_total;
					}
					break;
			}
		}

		return $calc_score;
	}

	private static function CalcularScore($cuit){
		$p_fisica = (substr($cuit,0,1) == 3) ? false : true;
		$tabla_score 	 	=	SQLConnection::backendStoreProcedure('obtener_tabla_score',array(),'select');
		foreach($tabla_score as $score){
			$score->cantidad = 0;
			$tabla_score_ordenada[$score->id_grupo][$score->codigo][] = $score;
		}
		$tabla_score_con_cantidades = $tabla_score_ordenada;
		$array_score_general 	 	=	SQLConnection::backendStoreProcedure('obtener_score',array($cuit,$p_fisica),'select');
		$score_fiscales 	 			=	SQLConnection::backendStoreProcedure('obtener_score_fiscales',array($cuit,$p_fisica),'select');
		$score_contables 				= SQLConnection::backendStoreProcedure('obtener_score_contable',array($cuit),'selectOne');
		
		$score = 70;
		foreach($array_score_general as $score_general){
				if($score_general->grupo ==2){
					$score_ordenado[$score_general->grupo][$score_general->codigo][$score_general->fecha][] = $score_general;
				}else{
					$score_ordenado[$score_general->grupo][$score_general->codigo][] = $score_general;
				}
		}
		$porcentaje_por_grupo 			= SQLConnection::backendStoreProcedure('obtener_porcentaje_por_grupo',array($cuit),'selectOne');
		$afectacion_score 					= SQLConnection::backendStoreProcedure('obtener_porcentaje_score_por_afectacion',array(),'select');
		$afectacion_score_ordenada 	= [];

		foreach($afectacion_score as $key => $value){
			$afectacion_score_ordenada[$value->afecta_directo] = $value;
		}
		$respuesta 					=	static::calcularScorePersonaJuridica($score,$porcentaje_por_grupo,$score_ordenado,$tabla_score_con_cantidades,$afectacion_score_ordenada);
		if(isset($score_contables->fecha_balance) && !empty($score_contables->fecha_balance)){
			$respuesta 					=	self::calcularScoreContable($respuesta,$score_contables,$porcentaje_por_grupo->contable);
		}

		$score = $respuesta['score'];
		$score = number_format($score,1);
		$score = ($score >= 100) ? 100 : $score;
    $score =  ($score < 0) ? 0 : $score;

		return ($score.'<br>');
	}


	/*Calcula el score del grupo 5(contable), usando como base el score ya calculado por el método. "calcularScore" de ésta misma clase*/
  	public static function calcularScoreContable($respuesta,$item,$porcentaje_contable){
  		$score = $respuesta['score'];
		if(!is_array($respuesta['afecta_indirecto']['debug'])){
			$respuesta['afecta_indirecto']['debug'] = [];
		}
		$demeritador = SQLConnection::backendStoreProcedure('calcular_score_contable',array(5,$item->liquidez_corriente,$item->solvencia_patrimonial,$item->endeudamiento_corriente,$item->capital_de_trabajo_activo,$item->rentabilidad_bruta,$item->utilidad_neta),'selectOne');
 		$res = 0;
 		$liquidez_corriente 			=0;
		$solvencia_patrimonial =0;
		$endeudamiento_corriente =0;
		$capital_de_trabajo_activo =0;
		$rentabilidad_bruta =0;
		$utilidad_neta =0;
 		if($demeritador->liquidez_corriente != 0){
 			$liquidez_corriente += (($porcentaje_contable / 100 ) * 17.6/100 * ($demeritador->liquidez_corriente*10));
 			array_push($respuesta['afecta_indirecto']['debug'], "Le suma " .$liquidez_corriente.  " de 17.6  Liquidez Corriente , el valor sobre el puntaje que le dió fue: ".$demeritador->liquidez_corriente." para el grupo 5 Contables");
 			
 		}
 		if($demeritador->endeudamiento_corriente != 0){
 			$endeudamiento_corriente += (($porcentaje_contable / 100) * 16.2/100 * ($demeritador->endeudamiento_corriente*10));
 			array_push($respuesta['afecta_indirecto']['debug'], "Le suma " .$endeudamiento_corriente. " de 16.2 endeudamiento_corriente  , el valor sobre el puntaje que le dió fue: ".$demeritador->endeudamiento_corriente."  para el grupo 5 Contables");
 			
 		}
 		if($demeritador->solvencia_patrimonial != 0){
 			$solvencia_patrimonial += (($porcentaje_contable / 100) * 22.6/100 * ($demeritador->solvencia_patrimonial*10));
 			array_push($respuesta['afecta_indirecto']['debug'], "Le suma " .$solvencia_patrimonial. " de 22.6 solvencia_patrimonial  , el valor sobre el puntaje que le dió fue: ".$demeritador->solvencia_patrimonial."  para el grupo 5 Contables");
 			
 		}
 	
 		if($demeritador->capital_de_trabajo_activo != 0){
 			$capital_de_trabajo_activo += (($porcentaje_contable / 100) * 10.4/100 * ($demeritador->capital_de_trabajo_activo*10));
 			array_push($respuesta['afecta_indirecto']['debug'], "Le suma " .$capital_de_trabajo_activo. " de 10.4 capital_de_trabajo_activo  , el valor sobre el puntaje que le dió fue: ".$demeritador->capital_de_trabajo_activo."  para el grupo 5 Contables");
 			
 		}
 		if($demeritador->rentabilidad_bruta != 0){
 			$rentabilidad_bruta += (($porcentaje_contable / 100) * 8.8/100 * ($demeritador->rentabilidad_bruta*10));
 			array_push($respuesta['afecta_indirecto']['debug'], "Le suma " .$rentabilidad_bruta. " de 8.8 rentabilidad_bruta  , el valor sobre el puntaje que le dió fue: ".$demeritador->rentabilidad_bruta."  para el grupo 5 Contables");
 			
 		}
 		if($demeritador->utilidad_neta != 0){
 			$utilidad_neta += (($porcentaje_contable / 100) * 24.5/100 * ($demeritador->utilidad_neta*10));
 			array_push($respuesta['afecta_indirecto']['debug'], "Le suma " .$utilidad_neta. " de 24.5 utilidad_neta  , el valor sobre el puntaje que le dió fue: ".$demeritador->utilidad_neta."  para el grupo 5 Contables");
 			
 		}
 		$res = $liquidez_corriente+$solvencia_patrimonial+$endeudamiento_corriente+$capital_de_trabajo_activo+$rentabilidad_bruta+$utilidad_neta;
 		if($res > $porcentaje_contable){
 			$res = $porcentaje_contable;
 		}
 			array_push($respuesta['afecta_indirecto']['debug'], "Le suma en total a Contables : ".$res);
 		$score += $res;
 		$respuesta['score'] = $score;
 		return $respuesta;
 	}

	/*Score FIN */

	public function cronNotificaciones(){
		$user_id = 0;
		$usuarios = SQLConnection::backendStoreProcedure('LN_PANEL_REPORTS',array('IVUSRTEAMS',41904867));
		foreach($usuarios as $user){
			// dd($user->user_id);
			Notificacion::notificacionesBackend($user->user_id);
		}
		$path = public_path() . '/notifications';
		$count = 0;
		$contenido = '';
		if (file_exists($path . '/test_cron.txt')) {
			$count = file_get_contents($path . '/test_cron.txt');
			$count += 1;
			file_put_contents($path . '/test_cron.txt',$count);
		}
		else {
			file_put_contents($path . '/test_cron.txt',$count);
		}

		// file_put_contents($path . '/test_cron.txt','+1');
	}


	////////////////////////////////////////////////////
	/////////////// API INQUIRO COMPONENTES ////////////
	////////////////////////////////////////////////////

	/**
     * FUNCION ENCARGADA DE CONSULTAR LA BASE DE DATOS Y DEVOLVER LOS DATOS 
     * @access public
     * 
     */
    public static function datosContraparte()
	{   
		$usuario = (object) ['user_id' => 19160464];
		Session::put('usuario',$usuario);
		Session::save();
        //Datos de contraparte
		try{
			$contraparte = Request::input('contraparte'); 
			$gestion = Request::input('gestion'); 
			$cliente = Request::input('cliente'); 
			$newReportsController = new NewReportsController;
			$BlueProductosController = new BlueProductosController;
			$RedaccionController = new RedaccionController;
			//BUSCA LAS PARTES DEL INFORME
			$partes_informe = SQLConnection::backendStoreProcedure('LN_informe_design_', array('VISTA_EDIT_INFORME', null, null,null,null,null,null,null,null,null,null, $contraparte, $gestion), 'select');  
			$secciones_informe = [];
			$idComponente = [];
			foreach( $partes_informe as $key => $componente ){
				if ( $componente->tipo_elem != "C" ){
					unset($partes_informe[$key]);
				} else {
					if ( $componente->idComponente == "1" ){
						// CODEM
						$perfil_datos = $BlueProductosController->seccionCODEM(true);
						$secciones_informe['codem'] =  ( !isset($perfil_datos['codem']) ) ? '' : self::procesarCamposR($perfil_datos['codem']);	
					} elseif ( $componente->idComponente == '2' ){
						// Ubicacion 
						$perfil_datos = $newReportsController->obtenerSeccionUbicacion(true); 
						$secciones_informe['mapas']  =  ( !isset($perfil_datos['mapas']) ) ? '' : self::procesarCamposR($perfil_datos['mapas']); 
						  //				 
					} elseif  ( $componente->idComponente == "3" ){
						// Perfil academico			
						$perfil_datos = $BlueProductosController->seccionPerfilAcademico(true);
						$secciones_informe['doc_estudios_iniciales']  =  ( !isset($perfil_datos['doc_estudios_iniciales']) ) ? '' : self::procesarCamposR($perfil_datos['doc_estudios_iniciales']);	
						$secciones_informe['doc_estudios_superiores'] = ( !isset($perfil_datos['doc_estudios_superiores']) ) ? '' : self::procesarCamposR($perfil_datos['doc_estudios_superiores']);
						$secciones_informe['doc_estudios_posgrado'] = ( !isset($perfil_datos['doc_estudios_posgrado']) ) ? '' : self::procesarCamposR($perfil_datos['doc_estudios_posgrado']);
						$secciones_informe['doc_matriculas'] = ( !isset($perfil_datos['doc_matriculas']) ) ? '' : self::procesarCamposR($perfil_datos['doc_matriculas']); 
					} elseif  ( $componente->idComponente == "4" ){
						// Certificacion negativa
						$secciones_informe['certificacion_negativa'] = $BlueProductosController->seccionCertificacionNegativa(true);
						//					
					} elseif ( $componente->idComponente == '6' ){
						//fidecheck
						$secciones_informe['fidecheck'] = $RedaccionController->componenteFidecheck(true);
						//
					} elseif ( $componente->idComponente == '7' ){
						// Conclusion
						$secciones_informe['conclusion'] = $RedaccionController->seccionConclusion(true);
						//
					} elseif ( $componente->idComponente == '8' ){
						// Prensa
						$secciones_informe['prensa'] = $RedaccionController->seccionPrensa(true);
						//
					} elseif ( $componente->idComponente == '9' ){
						// Datos personales
						/* $secciones_informe['datos_personales'] = $BlueProductosController->obtenerDatosPersonalesPadron(true); */
						// Datos personales para el JSON nuevo
						$perfil_datos = $BlueProductosController->obtenerDatosPersonalesPadron(true);
						$secciones_informe['datos_personales'] = ( !isset($perfil_datos['datos_personales']) ) ? '' : self::procesarCamposR($perfil_datos['datos_personales']);
						//
					} elseif ( $componente->idComponente == "10" ){
						// Indicadores	
						$secciones_informe['indicadores'] = $RedaccionController->IndicadoresInquiro(true);
						//
					} elseif ( $componente->idComponente == "11" ){
						// Busqueda antedecentes penales
						$secciones_informe['antecedentes_penales'] = $BlueProductosController->seccionConstanciaAntecedentesPenales(true);
						//
					} elseif ( $componente->idComponente ==  "12"){
						// Estado financiero 
					} elseif ( $componente->idComponente == "13" ){
						// Datos fiscales 
					}elseif ( $componente->idComponente == "15" ){
						// Historial laboral
						$secciones_informe['historial_laboral'] =  $BlueProductosController->seccionHistorialLaboralAnses(NULL,true);
						//
					} elseif ( $componente->idComponente == "16" ){
						// Historial laboral extendido
						$secciones_informe['historial_laboral_extendido'] = $BlueProductosController->seccionHistorialLaboralAnses(1,true);
						//
					} elseif ( $componente->idComponente == "17" ){
						// Perfil laboral
						$perfil_datos = $BlueProductosController->seccionPerfilLaboral(true);
						$secciones_informe['perfil_laboral'] = ( !isset($perfil_datos['doc_laboral']) ) ? '' : self::procesarCamposR($perfil_datos['doc_laboral']);
						//					
					} elseif ( $componente->idComponente == "18" ){
						// Referencia laboral
						$perfil_datos = $BlueProductosController->seccionReferenciasLaborales(true);
						$secciones_informe['referencia_laboral'] = ( !isset($perfil_datos['doc_referencia_laborales']) ) ? '' : self::procesarCamposR($perfil_datos['doc_referencia_laborales']);
						//
					} elseif ( $componente->idComponente == "19" ){
						// Referencia academica
						$perfil_datos = $BlueProductosController->seccionReferenciasAcademicas(true);
						$secciones_informe['referencia_academicas'] = ( !isset($perfil_datos['referencia_academicas']) ) ? '' : self::procesarCamposR($perfil_datos['referencia_academicas']);
						//					 						
					} elseif ( $componente->idComponente == "20" ){
						// Licencia de Conducir
						$perfil_datos = $BlueProductosController->seccionLicenciaConducir(true);
						$secciones_informe['licencia_conducir'] = ( !isset($perfil_datos['licencia_conducir']) ) ? '' : self::procesarCamposR($perfil_datos['licencia_conducir']);
						//
					} elseif ( $componente->idComponente == "21" ){
						// Movilidad propia
						$perfil_datos = $BlueProductosController->seccionMovilidadPropia(true);
						$secciones_informe['doc_movilidad'] = ( !isset($perfil_datos['doc_movilidad']) ) ? '' : self::procesarCamposR($perfil_datos['doc_movilidad']);
						//
					} elseif ( $componente->idComponente == "22" ) {
						// Contacto emergencia
						$perfil_datos = $BlueProductosController->seccionContactoEmergencia(true);
						$secciones_informe['contacto_emergencia'] = ( !isset($perfil_datos['doc_contacto_emergencia']) ) ? '' : self::procesarCamposR($perfil_datos['doc_contacto_emergencia']); 
						//
					} elseif (  $componente->idComponente == "23"){
						// Grupo Familiar
						$perfil_datos = $BlueProductosController->seccionGrupoFamiliar(true);
						$secciones_informe['grupo_familiar'] = ( !isset($perfil_datos['doc_grupo_familiar']) ) ? '' : self::procesarCamposR($perfil_datos['doc_grupo_familiar']);
						//
					}												
				}
			}
			//
			Session::forget('usuario');
			Session::save();
			//
			return json_encode($secciones_informe);
		} catch (Exception $e){
			Session::forget('usuario');
			Session::save();
		}
        
    }


	/**
	 * Procesar los valores de los campos del documento
	 * @param array los datos de los campos de un documento
	 * @return array datos parseados de manera legible para el json
	 */
	private static function procesarCamposR($doc_data){
		$response = [];
		//
		foreach( $doc_data as $seccion => $campos ){
			foreach( $campos as $campo ){
				if ( $campo->tipo_campo == 'G' ){
					$aux_vacio = 0;
					$filas = count($campo->values);
					$columnas = $campo->columnas;
					$valores = $campo->values;
					// Estructura del formato:
					// nombre_campo -->  fila --> nombre_columna
					for( $x=1; $x <= $filas; $x++ ){ // filas
						for( $y=1; $y <= $columnas; $y++ ){ // columnas
							if ( isset($valores[$x][$y]) ){
								if ( $valores[$x][$y]['tipo_campo'] == 'N' ){
									// numero
									if (empty($valores[$x][$y]['valor_numerico']) || $valores[$x][$y]['valor_numerico'] == 0 ) {									
										$aux_vacio++;
									}
									$response[$seccion][$campo->etiqueta][$x][$valores[$x][$y]['etiqueta']] = $valores[$x][$y]['valor_numerico'] ?? '';
								} else if ( $valores[$x][$y]['tipo_campo'] == 'D' ){
									// fecha
									if (empty($valores[$x][$y]['valor_fecha_str'])) {									
										$aux_vacio++;
									}
									$response[$seccion][$campo->etiqueta][$x][$valores[$x][$y]['etiqueta']] = $valores[$x][$y]['valor_fecha_str'] ?? '';
								}  else if ( $valores[$x][$y]['tipo_campo'] == 'S' ){
									// selector
									if ( empty($valores[$x][$y]['valor_texto']) && is_null($valores[$x][$y]['valor_texto']) ){
										$aux_vacio++;
									}
									foreach( $valores[$x][$y]['opciones']['val'] as $group_opcion_clave => $group_opcion_val ){
										if ( $group_opcion_val == $valores[$x][$y]['valor_texto'] ){
											$response[$seccion][$campo->etiqueta][$x][$valores[$x][$y]['etiqueta']] = $valores[$x][$y]['opciones']['txt'][$group_opcion_clave];
											break;
										}
									}
									
								} else {
									// texto
									if (empty($valores[$x][$y]['valor_texto'])) {									
										$aux_vacio++;
									}
									$response[$seccion][$campo->etiqueta][$x][$valores[$x][$y]['etiqueta']] = $valores[$x][$y]['valor_texto'] ?? '';
								}
							}
						}
					}
					if ($aux_vacio == 3) {
						$aux_vacio = 0;
						continue;
					}
				} elseif ( $campo->tipo_campo == 'N' && !empty($campo->valor_numerico) ){
					$response[$seccion][$campo->etiqueta] = $campo->valor_numerico;
					//
				} elseif ( $campo->tipo_campo == 'T' && !empty($campo->valor_texto) ){
					$response[$seccion][$campo->etiqueta] = $campo->valor_texto;
					//
				}  elseif( $campo->tipo_campo == 'D' && !empty($campo->valor_fecha_str) ){
					$response[$seccion][$campo->etiqueta] = $campo->valor_fecha_str;
					//
				} elseif ( $campo->tipo_campo == 'B' && !empty($campo->valor_texto) ){
					$response[$seccion][$campo->etiqueta] = $campo->valor_texto;
					//
				} elseif ( $campo->tipo_campo == 'S' && !empty($campo->valor_texto) && !is_null($campo->valor_texto) ){
					$response[$seccion][$campo->etiqueta] = $campo->valor_texto;
					//					
				} elseif ($campo->tipo_campo == 'F' && is_null($campo->valor_texto) ){
					$response[$seccion][$campo->etiqueta] = $campo->valor_texto ?? '';
					//
				} elseif ( $campo->tipo_campo == 'D' && is_null($campo->valor_fecha_str) ){
					$response[$seccion][$campo->etiqueta] = $campo->valor_fecha_str ?? '';
					//
				} elseif ( $campo->tipo_campo == 'N' && $campo->valor_numerico == 0 ){
					$response[$seccion][$campo->etiqueta] = $campo->valor_numerico ?? '';
					//
				} elseif ( $campo->tipo_campo == "T" && is_null( $campo->valor_texto ) ){
					$response[$seccion][$campo->etiqueta] = $campo->valor_texto ?? '';
				}
				else { 
					if (is_null($campo->valor_texto)){
						$response[$seccion][$campo->etiqueta] = $campo->valor_texto ?? '';
					}
				}
				
			}
		}
		//
		return $response;
	}
	
	public function obtencionHtmlMisAportes(){
		
		$cuit = $_POST['cuit'] ?? '';
		$cuil = $_POST['cuil'] ?? '';
		$info = $_POST['info'] ?? '';

		$path_env = env('PATH_MIS_APORTES');

		if (is_numeric($cuit) && (strlen($cuit) == 11)){
			
			if (is_numeric($cuil) && (strlen($cuil) == 11)){

				if ($info){
					
					// Escribir en el archivo empleadores					
					#$emp_path = "/home/fidelitas/Dev/html/backend.fidelitas/public/empleadores_aportes.txt"
					#$file = fopen($emp_path, "a");
					#fwrite($file, substr($cuit) . "\n");
					#fclose($file);					
								
					$file_path = $path_env.'/'.$_POST['cuit'].'-'.$_POST['cuil'].'.htm';
					file_put_contents($file_path, $info);
					//
					return Response::JSON(['error' => 0,'mensaje' => 'OK - Registro ingresado - '.$cuil.' - '.$cuit]);
				} else {
					// return 'No hay información';
					return Response::JSON(['error' => 1,'mensaje' => 'No hay información']);
				}
			} else {
				// return 'El valor no corresponde a un cuil';
				return Response::JSON(['error' => 2,'mensaje' => 'El valor no corresponde a un cuil']);
			}

		} else {
			// return 'El valor no corresponde a un cuit';
			return Response::JSON(['error' => 3,'mensaje' => 'El valor no corresponde a un cuit']);
		}
	}

	public function manejoErroresMisAportes(){
		$cuit = $_POST['cuil'] ?? '';
		$p_txtError = $_POST['error'] ?? '';
		$tipo = $_POST['tipo'] ?? 1;

		if (is_numeric($cuit) && (strlen($cuit) == 11)){
		
			if (strlen($p_txtError) > 1){
				SQLConnection::backendStoreProcedure('mis_aportes_enriquecer',array('CUILERROR',null,$cuit,$p_txtError,$tipo));

				return Response::JSON(['error' => 3, 'mensaje' => 'Error enviado con éxito']);
			}

			return Response::JSON(['error' => 2, 'mensaje' => 'Error vacío']);
		}

		return Response::JSON(['error' => 1, 'mensaje' => 'El valor no corresponde a un cuit']);
		
	}

	public function obtencionConstanciaInscripcion(){
		
		$pdf_base64 = $_POST['pdf'] ?? '';
		$img = $_POST['img'] ?? '';
		$cuit = $_POST['cuit'] ?? '';
		
		if (is_numeric($cuit) && (strlen($cuit) == 11)){
			//
			/*if ($pdf) {
				$path_archivo_pdf = $directorio_final . '/' . $cuit . '.pdf';
				file_put_contents($path_archivo_pdf, $pdf);
			}*/
			if ($img){
				# $pdf = base64_decode($pdf_base64);

				$path_base = "/var/www/html/compartido/constancia";

				// Dividir el CUIT en partes específicas para crear la estructura de carpetas
				$carpeta1 = substr($cuit, 0, 2); // Primeros 2 dígitos
				$carpeta2 = substr($cuit, 2, 3); // Siguientes 3 dígitos
				$carpeta3 = substr($cuit, 5, 3); // Otros 3 dígitos

				// Ruta completa donde se guardará el archivo
				$directorio_final = $path_base . '/' . $carpeta1 . '/' . $carpeta2 . '/' . $carpeta3;

				// Si el directorio no existe, se crea
				if (!file_exists($directorio_final)) {
					mkdir($directorio_final, 0777, true); // Crear directorio recursivamente
				}
				
				// Nombre completo del archivo con extensión
				$path_archivo_png = $directorio_final . '/' . $cuit . '.png';
				file_put_contents($path_archivo_png, $img);

				return Response::JSON(['error' => 0, 'mensaje' => 'Constancia cargada con éxito']);
			
			} else{
				return Response::JSON(['error' => 1, 'mensaje' => 'Error en la carga de la constancia']);
			}
		} else  {
			return Response::JSON(['error' => 2, 'mensaje' => 'El valor no corresponse a un cuit']);
		}
	}

}

