<?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 stdClass;
use Exception;
use App\Http\Controllers\MainController;

class ProduccionController extends Controller  {

// todo lo que viene de un formulario es Request::input('nombre_de_campo'), 
// variables de sesion Session::get('nombre_de_variable')
	
	public static $monedas;
	public static $secciones; 
	public static $titulos; 

// ---- BALANCES ----
	
	public function obtenerBalances(){
		$token_id_usuario 	 = MainController::obtenerParametrosInformeComercial();
		$token_por_secciones = Misc::obtenerTokenSeccion('contables');
		//$token_por_secciones 	= json_decode(Misc::decrypt($token_por_secciones));
		$menu = Misc::obtenerPermisosNavigator();
    	//valido si el usuario tiene el permiso correspondiente para acceder a la sección solicitada.
		$task_id = Request::Input('task_id');
    	$user_id 		= Session::get("usuario")->user_id;
        $valido =  Misc::restriccionPermiso('BALANCE');
        if(!$valido && !$task_id){ return redirect('/menu'); }
		$cuit = Request::Input('cuit');
		$nombre_persona = Request::Input('nombre_persona');
		$anios= 50;
		$visible = 1;
		//$balances = SQLConnection::backendBalancesContables($cuit,$anios,$visible,$task_id);
	  	$balances = SQLConnection::backendStoreProcedure('backend_balances_contables',array(null,$cuit,$anios,$visible,$task_id,$user_id),"select");

		//
		self::$monedas  = SQLConnection::obtenerMonedas();
		$monedas = self::$monedas;
		$ruta_archivo = ENV('RUTA_ARCHIVO_PDF').'/balances/'.$cuit; 
		$balances2 = [];
		if ($task_id != null && $task_id != 0 && isset($menu['BALANCE']))
		{
			//$balances2 = SQLConnection::backendBalancesContables($cuit,$anios,$visible,'');
			$balances2 = SQLConnection::backendStoreProcedure('backend_balances_contables',array(null,$cuit,$anios,$visible,'',$user_id),"select");
		}
		//var_dump($balances);die();
		return view('produccion/balances')->with(compact('balances','balances2','anios','visible','monedas','ruta_archivo','menu','cuit','nombre_persona','token_por_secciones','token_id_usuario','task_id','user_id'));
	}

	public function filtrarBalances(){				
		/*		
			$cuit = Request::Input('cuit');
			$nombre_persona = Request::Input('nombre_persona');
			$anios = Request::input('anios');
			$visible = Request::input('visible');
			$task_id = Request::Input('task_id');
			$user_id 		= Session::get("usuario")->user_id;
			$balances = SQLConnection::backendBalancesContables($cuit,$anios,$visible,$task_id);
			$menu = Misc::obtenerPermisosNavigator(); 
			$balances2 = [];
			if ($task_id != null && $task_id != 0 && isset($menu['BALANCE']))
			{
				$balances2 = SQLConnection::backendBalancesContables($cuit,$anios,$visible,'');
			}
			return view('produccion/tabla_balances')->with(compact('balances','balances2','anios','visible','cuit','nombre_persona','task_id','menu','user_id'));
		*/
		$token_id_usuario 	 = MainController::obtenerParametrosInformeComercial();
		$token_por_secciones = Misc::obtenerTokenSeccion('contables');
		//$token_por_secciones 	= json_decode(Misc::decrypt($token_por_secciones));
		$menu = Misc::obtenerPermisosNavigator();
        //valido si el usuario tiene el permiso correspondiente para acceder a la sección solicitada.
		
		$task_id = Request::Input('task_id');
        $user_id = Session::get("usuario")->user_id;
        $valido =  Misc::restriccionPermiso('BALANCE');
        if(!$valido && !$task_id){ 
            return redirect('/menu'); 
        }
		$cuit = Request::Input('cuit');
		$nombre_persona = Request::Input('nombre_persona');
		$anios= 50;
		$visible = Request::input('visible');

		//$balances = SQLConnection::backendBalancesContables($cuit,$anios,$visible,$task_id,$user);
		$balances = SQLConnection::backendStoreProcedure('backend_balances_contables',array(null,$cuit,$anios,$visible,$task_id,$user_id),"select");
		self::$monedas  = SQLConnection::obtenerMonedas();
		$monedas = self::$monedas;
		$ruta_archivo = ENV('RUTA_ARCHIVO_PDF').'/'.$cuit;
		$balances2 = [];
		if ($task_id != null && $task_id != 0 && isset($menu['BALANCE']))
		{
			//$balances2 = SQLConnection::backendBalancesContables($cuit,$anios,$visible,'');
		  $balances2 = SQLConnection::backendStoreProcedure('backend_balances_contables',array(null,$cuit,$anios,$visible,'',$user_id),"select");
		}

		$balanceSinCarga = false;

		foreach ($balances2 as $item) {
			if (isset($item->cargar_datos) && $item->cargar_datos == 0) {
				$balanceSinCarga = true;
		        break; 
		    }
		}

		return view('busqueda_padron_generico_led/tabla_balances')->with(compact('balances','balances2','anios','visible','monedas','ruta_archivo','menu','cuit','nombre_persona','token_por_secciones','token_id_usuario','task_id','user_id','balanceSinCarga'));

	}

public function modificarBalance(){
		$nombre_persona = Request::Input('nombre_persona');
		$cuit = Request::Input('cuit');
		$id_balance = Request::input('id_balance');
		$task_id = Request::Input('task_id');
		$task_id1 = Request::Input('task_id1');
		//print_r('task_id1: '.$task_id1); 
		$fecha_inicio = Request::Input('fecha_inicio_tarea');
		$usuario_tarea  = Request::Input('usuario_tarea');
		$user_id 		    = Session::get("usuario")->user_id;
		if ($fecha_inicio == '')
				{ $fecha_inicio = null; }
		//$balances = SQLConnection::backendBalancesContablesid($id_balance);
	  	$balances = SQLConnection::backendStoreProcedure('backend_balances_contables',array($id_balance,null,null,null,null,$user_id),"selectOne");
		$monedas  = (self::$monedas) ? self::$monedas : SQLConnection::obtenerMonedas();
		
		/*
		$archivo = ENV('PATH_COMPARTIDO').'/'.$cuit.'/'.$balances->fecha_balance.'.pdf'; 
		$existe_pdf = false;

		if (file_exists($archivo)){
			$archivo = ENV('RUTA_ARCHIVO_PDF').'/'.$cuit.'/'.$balances->fecha_balance.'.pdf';
 		  $existe_pdf = true; 
		}
		else
		{
			$archivo = ENV('PATH_COMPARTIDO').'/'.$cuit.'/'.$task_id1.'.pdf';
		  if (file_exists($archivo)){
			  $archivo = ENV('RUTA_ARCHIVO_PDF').'/'.$cuit.'/'.$task_id1.'.pdf';
 		    $existe_pdf = true; 
 		  }
		} 
			
		$archivo = 	'https://backend.fidelitas.com.ar' . $archivo; 
    */
		$archivo = ENV('PATH_COMPARTIDO').$balances->ruta_archivo; 
		$existe_pdf = false;
		if (file_exists($archivo)){
			$archivo = ENV('RUTA_ARCHIVO_PDF').$balances->ruta_archivo;
			$existe_pdf = true; 
		}

		if ($task_id != null && $task_id != 0 && $fecha_inicio == null && $usuario_tarea == $user_id) // solo se unicia la tarea, si usuario es el asignado
		{
			$fecha_inicio = SQLConnection::backendStoreProcedure('backend_iniciar_tarea',array($task_id),"selectOne");
		}
		
		return view('modals/modal_balances')->with(compact('balances','monedas','existe_pdf','cuit','nombre_persona','task_id','archivo'));
}


public function VerTablaBalance(){
		$nombre_persona = Request::Input('nombre_persona');
		$cuit = Request::Input('cuit');
		$id_balance = Request::input('id_balance');
		$tres_ulimos = Request::input('ver_tres');
		//$balances = SQLConnection::backendBalancesContablesid($id_balance);
		$user_id 	= Session::get("usuario")->user_id;
		$columnas = Request::input('columnas');
		$pp = null;
		$mb = null;
		if ($tres_ulimos == '1') {
			$balances = SQLConnection::backendStoreProcedure('LN_balances_data',array($cuit,null,null,$columnas));
			$columnas = count($balances);
		} else {
			$balances = SQLConnection::backendStoreProcedure('backend_balances_contables',array($id_balance,null,null,null,null,$user_id),"selectOne");
			$pp = $balances->patrimonio + $balances->pas_total;
			$mb = $balances->res_vtanet - $balances->res_cosmer; 
			$balances->anc_otrcre = $balances->anc_otrcre + $balances->anc_crevta; 
			$balances->pc_ctapag = $balances->pc_ctapag + $balances->pc_antcli; 
			if ($balances->res_resfin < 0)
			{ 
				$balances->res_otrosegr = $balances->res_otrosegr + ($balances->res_resfin * (-1)); 
			}
			else
			{
				$balances->res_otrosing = $balances->res_otrosing + $balances->res_resfin; 
			}
		}		
		return view('produccion/excel_balances')->with(compact('balances','cuit','nombre_persona','pp','mb','tres_ulimos','columnas'));
}


public function verBalance(){
		$cuit = Request::input('cuit_modal');
		$id_balance = Request::input('id_balance_modal');
		$nombre_persona = Request::Input('nombre_persona');
		//$balances = SQLConnection::backendBalancesContablesid($id_balance);
		$user_id 	= Session::get("usuario")->user_id;
	  $balances = SQLConnection::backendStoreProcedure('backend_balances_contables',array($id_balance,null,null,null,null,$user_id),"selectOne");
		$task_id = $balances->task_id; 
		$monedas  = (self::$monedas) ? self::$monedas : SQLConnection::obtenerMonedas();
		/*
		$archivo = ENV('PATH_COMPARTIDO').'/'.$cuit.'/'.$balances->fecha_balance.'.pdf'; 
		$existe_pdf = false;

		if (file_exists($archivo)){
			$archivo = ENV('RUTA_ARCHIVO_PDF').'/'.$cuit.'/'.$balances->fecha_balance.'.pdf';
 		  $existe_pdf = true; 
		}
		else
		{
			$archivo = ENV('PATH_COMPARTIDO').'/'.$cuit.'/'.$task_id.'.pdf';
		  if (file_exists($archivo)){
			  $archivo = ENV('RUTA_ARCHIVO_PDF').'/'.$cuit.'/'.$task_id.'.pdf';
 		    $existe_pdf = true; 
 		  }
		} 
			
		$archivo = 	'https://backend.fidelitas.com.ar' . $archivo; 
		*/

		$archivo = ENV('PATH_COMPARTIDO').$balances->ruta_archivo; 
		$existe_pdf = false;

		if (file_exists($archivo)){
			$archivo = ENV('RUTA_ARCHIVO_PDF').$balances->ruta_archivo; 
 		  $existe_pdf = true; 
		}

		return view('modals/modal_balances')->with(compact('balances','monedas','existe_pdf','cuit','nombre_persona','task_id','archivo'));

}




	public function visibleBalances(){ 
		$id_balance = Request::Input('id_balance');
		$estado_anterior = SQLConnection::backendStoreProcedure('backend_estado_balances_contables',array($id_balance),"selectOne");
		$visible_balance = SQLConnection::backendVisible($id_balance,'backend_eliminar_activar_balances');
		$cuit = Request::input('cuit');
		// Avisar a LED - cambio en balance
		if (isset($estado_anterior->estado) && $estado_anterior->estado == 'PUBLICADO')
		{
		self::llamarLED($cuit); 
		}


		return json_encode(array('error' => $visible_balance->error,'mensaje' => $visible_balance->mensaje)); 
	}

	public function altaBalances(){
	 	$user_id 		= Session::get("usuario")->user_id;
		//$id_padron 	= Session::get("id_padron");
		$id_padron 	= null;
		$id_balance = Request::input("id_balance");
		$cuit 			= Request::input('cuit');
		$nombre_persona = Request::Input('nombre_persona');
		$accion 		= Request::input('accion'); 
		$anios 			= Request::input('anios');
		$visible 		= Request::input('visible');
		$usuario_tarea  = Request::Input('usuario_tarea_alta');
		$estado_actual   = 	Request::input('grabar_estado');

		$tipoBalance = Request::input('tipoBalance');
		$sinCargaDatos = Request::input('sinCargaDatos') == NULL ? 1 : Request::input('sinCargaDatos');		
    
		$valores = [];
		$valores['cuit']			= $cuit; 
		$valores['id_padron']	= $id_padron; 
		$valores['user_id']		= $user_id; 

		//var_dump(request()->except('_token','accion','anios','visible','usuario','cuit','nombre_persona','task_id','usuario_tarea_alta')); 
		//die(); 

		// SE DEFIENEN VARIABLES NUEVAS DE VALORES
		$rec_fin_cash = '';
		$rec_fin_no_cash = '';
		$rec_pam = '';
		//		
		foreach (request()->except('_token','accion','anios','visible','usuario','cuit','nombre_persona','task_id','usuario_tarea_alta','tipoBalance','sinCargaDatos')  as $key => $valor) {
			$parte = substr($key, 0,4);		 
			$valor=str_replace(",", "", $valor);
			
			if (empty($valor)) {
				$valor = NULL;
			}

			if ($key=="bal_man" and $valor == null) { 
				$valor = "B";
			} 

			if ( $key == 'res_fin_cash' ){
				$rec_fin_cash = $valor;
				continue;
			}
			//
			if ( $key == 'res_fin_no_cash' ){
				$rec_fin_no_cash = $valor;
				continue;
			}
			//
			if ( $key == 'rec_pam' ){
				$rec_pam = $valor;
				continue;
			}
			$valores[$key]=$valor;
		}		

		if($accion == 'M'){
			if ($user_id == $usuario_tarea){
	     		$valores['tarea_otro'] = 'tarea'; 
			}else {
	     		$valores['tarea_otro'] = 'otro'; 
			}
	  	}

	 	$valores=array_values($valores);

	  	// SE AGREGAN LOS NUEVOS CAMPOS AL FINAL DEL ARRAY
	  	array_push($valores,$rec_fin_cash);
		array_push($valores,$rec_fin_no_cash);
		array_push($valores,$rec_pam);
		
		array_push($valores,$sinCargaDatos);
		array_push($valores,$tipoBalance);

		$task_id = Request::Input('task_id');

		if($accion == 'A'){
			$estado_anterior = new stdClass(); 
			$estado_anterior->estado = ''; 
			$store_procedure = 'backend_alta_balances_contables';
			$mensaje_balances = SQLConnection::backendStoreProcedure($store_procedure, $valores, "selectOne");
		} else {
			$estado_anterior = SQLConnection::backendStoreProcedure('backend_estado_balances_contables', array($id_balance), "selectOne");
			
			if (is_object($estado_anterior)) {
				$store_procedure = 'backend_modificacion_balances_contables';
				$mensaje_balances = SQLConnection::backendStoreProcedure($store_procedure, $valores, "selectOne");
			} else {
				$mensaje_balances = "Error: No se pudo obtener el estado anterior.";
			}
		}
		
		
		$anios= 50;
		$visible = 1;

		$menu = Misc::obtenerPermisosNavigator();
		//$balances = SQLConnection::backendBalancesContables($cuit,$anios,$visible,$task_id);
		$balances = SQLConnection::backendStoreProcedure('backend_balances_contables',array(null,$cuit,$anios,$visible,$task_id,$user_id),"select");

		$balances2 = [];
		if ($task_id != null && $task_id != 0 && isset($menu['BALANCE']))
		{
			//$balances2 = SQLConnection::backendBalancesContables($cuit,$anios,$visible,'');
			$balances2 = SQLConnection::backendStoreProcedure('backend_balances_contables',array(null,$cuit,$anios,$visible,'',$user_id),"select");
		}
		// Avisar a LED - cambio en balance
		if ((isset($estado_anterior->estado) && $estado_anterior->estado == 'PUBLICADO') || (isset($estado_actual) && $estado_actual == 'PUBLICADO'))
		{
		self::llamarLED($cuit); 
		}
	 	return json_encode(array('error' => $mensaje_balances->error,'mensaje' => $mensaje_balances->mensaje,
	 	'tabla' => view('produccion/tabla_balances')->with(compact('balances','balances2','visible','anios','cuit','nombre_persona','task_id','menu','user_id'))->render()
	 	));
	
	}

	public static function llamarLED($cuit){	
		$html = ENV('URL_LED_CUIT') . '?cuit=' . $cuit;		
		$urlLed = @file_get_contents($html);		
	}

	public function pdfBalances(){

		$fecha = Request::Input('fecha_pdf');
		$cuit  = Request::Input('cuit');
		$id_balance = Request::Input('id_balance1');
		$user_id                = Session::get("usuario")->user_id;
		if ($id_balance == '')
		{
			$store_procedure = 'backend_alta_balances_contables_cuit_fecha';
			$mensaje_balances = SQLConnection::backendStoreProcedure($store_procedure,array($cuit,$fecha,$user_id),"selectOne");
			$id_balance = $mensaje_balances->id; 
		}		
		$archivos = "";
		$temporary = explode(".", $_FILES["file_pdf"]["name"]);
		if (isset($_FILES["file_pdf"]["error"]) && $_FILES["file_pdf"]["error"] >0 ) {
			return json_encode(array('error' => 'Error al cargar el Archivo PDF (119)'));
		} else {
			$temporary = explode(".", $_FILES["file_pdf"]["name"]);
			$file_extension = end($temporary);
			$sourcePath = $_FILES['file_pdf']['tmp_name']; // Storing source path of the file in a variable
			$ruta_archivo = '/balances/'.$cuit.'/'.$id_balance.'.pdf';
			$file = ENV('PATH_COMPARTIDO').$ruta_archivo;
			if(!is_dir(ENV('PATH_COMPARTIDO').'/balances/'.$cuit)){
							mkdir(ENV('PATH_COMPARTIDO').'/balances/'.$cuit, 0777,true);
			}
			move_uploaded_file($_FILES["file_pdf"]["tmp_name"],$file);
			chmod($file, 0777);
			$grabar  = SQLConnection::backendStoreProcedure('backend_archivo_balances_contables',array($id_balance,$ruta_archivo),'select');
			return json_encode(array('error' => 'ok', 'id' => $id_balance)); 
		}
	}
	
public function subirTxtCliente(){
	$fecha = Request::Input('fecha_pdf');
	$cuit  = Request::Input('cuit');
	$id_balance = Request::Input('id_balance1');
 	$user_id 		= Session::get("usuario")->user_id;

	if ($id_balance == '')
	{
			$store_procedure = 'backend_alta_balances_contables_cuit_fecha';
			$mensaje_balances = SQLConnection::backendStoreProcedure($store_procedure,array($cuit,$fecha,$user_id),"selectOne");
			$id_balance = $mensaje_balances->id; 
	}
	$archivos = "";
	$temporary = explode(".", $_FILES["file_pdf"]["name"]);
	if (isset($_FILES["file_pdf"]["error"]) && $_FILES["file_pdf"]["error"] >0 ) {
		return 'Error al cargar el Archivo PDF (119)';
		} else {
		$temporary = explode(".", $_FILES["file_pdf"]["name"]);
		$file_extension = end($temporary);
		$sourcePath = $_FILES['file_pdf']['tmp_name']; // Storing source path of the file in a variable
/*
		$file = ENV('PATH_COMPARTIDO').'/'.$cuit.'/'.$fecha.'.pdf';
		if(!is_dir(ENV('PATH_COMPARTIDO').'/'.$cuit)){
				mkdir(ENV('PATH_COMPARTIDO').'/'.$cuit, 0777,true);
		}
*/

		$ruta_archivo = '/balances/'.$cuit.'/'.$id_balance.'.pdf';
		$file = ENV('PATH_COMPARTIDO').$ruta_archivo;

		if(!is_dir(ENV('PATH_COMPARTIDO').'/balances/'.$cuit)){
				mkdir(ENV('PATH_COMPARTIDO').'/balances/'.$cuit, 0777,true);
		}

		move_uploaded_file($_FILES["file_pdf"]["tmp_name"],$file);
		chmod($file, 0777);

		$grabar  = SQLConnection::backendStoreProcedure('backend_archivo_balances_contables',array($id_balance,$ruta_archivo),'select');
		return json_encode(array('error' => 'ok', 'id' => $id_balance)); 

		}
 	}


public function controlBalances(){ 
		$id_balance = Request::input('id_balance1');
		$cuit = Request::input('cuit');
		$fecha = Request::input('fecha_pdf');
		//print_r($id_balance);
		//print_r($cuit);
		//print_r($fecha);
		$control_balance = SQLConnection::backendStoreProcedure('backend_control_balances_contables',array($id_balance,$cuit,$fecha),'selectOne');
		return json_encode(array('error' => $control_balance->error,'mensaje' => $control_balance->mensaje,'fecha' => $control_balance->fecha, 
			                          'id' => $control_balance->id, 'task' => $control_balance->task)); 
	}


public function controlBalancesAsignacion(){ 
		$cuit = Request::input('cuit_nuevas');
		$fecha = Request::input('fecha_bal_nuevo');
		$control_balance = SQLConnection::backendStoreProcedure('backend_control_balances_contables',array('0',$cuit,$fecha),'selectOne');
		return json_encode(array('error' => $control_balance->error,'mensaje' => $control_balance->mensaje,'fecha' => $control_balance->fecha, 
			                          'id' => $control_balance->id, 'task' => $control_balance->task)); 
	}



//------------------------------------------------------------------
// Socios

	public static $cargos;

	public function obtenerSocios(){
		$token_id_usuario 	 = MainController::obtenerParametrosInformeComercial();
		$token_por_secciones = Misc::obtenerTokenSeccion('relaciones');
		//valido si el usuario tiene el permiso correspondiente para acceder a la sección solicitada.
        $valido =  Misc::restriccionPermiso('SOCDIR');
        if(!$valido){ return redirect('/menu'); }
        //obtenemos los permisos para el menu, ésta variable debe asignarse al compact de la vista.
        $menu = Misc::obtenerPermisosNavigator();
		//$cuit = Session::get('cuit');
        $cuit = Request::Input('cuit');
		$visible = 1;
		//$socios = SQLConnection::backendSocios($cuit,$visible);
		$socios  = SQLConnection::backendStoreProcedure('backend_socios',array(NULL,$cuit,$visible),'select');
		self::$cargos  = SQLConnection::obtenerCodigos("obtener_Cargos");
		$cargos = self::$cargos;
		return view('produccion/socios')->with(compact('socios','visible','cargos','menu','cuit','token_por_secciones','token_id_usuario'));
	}

	public function filtrarSocios(){
		//$cuit = Session::get('cuit');
		$cuit = Request::Input('cuit');
		
		$visible = (Request::input('visible')=="") ? 1 : Request::input('visible');

		$socios  = SQLConnection::backendStoreProcedure('backend_socios',array(NULL,$cuit,$visible),'select');
		return view('produccion/tabla_socios')->with(compact('socios','visible','cuit'));
	}

	public function visibleSocios(){ 
		$id_socios = Request::input('id_socios');
	 
		$visible_socio = SQLConnection::backendVisible($id_socios,'backend_visible_socios');
		return json_encode(array('error' => $visible_socio->error,'mensaje' => $visible_socio->mensaje)); 
	}

	public function altaSocios(){
	 	//$cuit 		  = Session::get("cuit");
		$cuit = Request::Input('cuit');
		//$id_padron 	= Session::get("id_padron");
		$id_padron 	= null;
	 	$user_id 		= Session::get("usuario")->user_id;

		$valores = [];
		$valores['cuit']			= $cuit; 
		$valores['id_padron']	= $id_padron; 
		$valores['user_id']		= $user_id; 


		foreach (request()->except('_token','visible','nombre_soc','dni_soc') as $key => $valor) {
			  if (empty($valor)) {
		
			  	$valor = '';
			  }
			  $valores[$key]=$valor;
		}
		
		//var_dump($valores); die(); 
		$valores=array_values($valores);
		$store_procedure = 'backend_abm_socios';
		$mensaje_socios = SQLConnection::backendStoreProcedure($store_procedure,$valores,"selectOne");
		
		$visible = (Request::input('visible')=="") ? 1 : Request::input('visible'); 
		$socios  = SQLConnection::backendStoreProcedure('backend_socios',array(NULL,$cuit,$visible),'select');

		return json_encode(array('error' => $mensaje_socios->error,'mensaje' => $mensaje_socios->mensaje,
	 	'tabla' => view('produccion/tabla_socios')->with(compact('socios','visible','cuit'))->render()
	 	));
	}

//-----------------------------------------------------
// Generalidades

	public function obtenerGeneralidades(){
		$token_id_usuario 	 = MainController::obtenerParametrosInformeComercial();
		$token_por_secciones = Misc::obtenerTokenSeccion('formales');
		//valido si el usuario tiene el permiso correspondiente para acceder a la sección solicitada.
    $valido =  Misc::restriccionPermiso('DATOGRAL');
    if(!$valido){ return redirect('/menu'); }
    //obtenemos los permisos para el menu, ésta variable debe asignarse al compact de la vista.
    $menu = Misc::obtenerPermisosNavigator();
		//$cuit = Session::get('cuit');
    $cuit = Request::Input('cuit');
		$visible = 1;
		
		$generalidades  = SQLConnection::backendStoreProcedure('backend_datos_generales',array(NULL,$cuit,$visible,env('ID_INFORME_COMERCIAL')),'select');
		//print_r($generalidades); die(); 
		self::$secciones  = SQLConnection::obtenerSecciones();
		$secciones = self::$secciones;
		self::$titulos  = SQLConnection::obtenerTitulos();
		$titulos = self::$titulos;
		return view('produccion/generalidades')->with(compact('generalidades','visible','secciones','titulos','menu','cuit','token_por_secciones','token_id_usuario'));
	}

	public function filtrarGeneralidades(){
		//$cuit = Session::get('cuit');
		$cuit = Request::Input('cuit');
		$visible = (Request::input('visible')=="") ? 1 : Request::input('visible');
		$generalidades  = SQLConnection::backendStoreProcedure('backend_datos_generales',array(NULL,$cuit,$visible,env('ID_INFORME_COMERCIAL')),'select');
		return view('produccion/tabla_generalidades')->with(compact('generalidades','visible','cuit'));
	}

	public function modificarGeneralidad(){
		$id_datos_generales = Request::input('id_datos_generales');
		$cuit = Request::Input('cuit');
		
		$generalidades = SQLConnection::backendStoreProcedure('backend_datos_generales',array($id_datos_generales,NULL,NULL,env('ID_INFORME_COMERCIAL')),'selectOne');
		return view('produccion/tabla_generalidades')->with(compact('generalidades','visible'));

		$secciones  = (self::$secciones) ? self::$secciones : SQLConnection::obtenerSecciones();
		$titulos  = (self::$titulos) ? self::$titulos : SQLConnection::obtenerTitulos();
		return view('modals/modal_generalidades')->with(compact('generalidades','secciones','titulos','cuit'));
	}

	public function visibleGeneralidades(){ 
		$id_datos_generales = Request::input('id_datos_generales');
		$visible_general = SQLConnection::backendVisible($id_datos_generales,'backend_visible_datos_generales');
		return json_encode(array('error' => $visible_general->error,'mensaje' => $visible_general->mensaje)); 
	}

	public function altaGeneralidades(){
	 	$user_id 		= Session::get("usuario")->user_id;
		//$id_padron 	= Session::get("id_padron");
		$id_padron 	= null;
		//$id_datos_generales = Session::get("id_datos_generales");
		$id_datos_generales = Request::Input("id_datos_generales");
		//$cuit 			= Session::get('cuit');
		$cuit = Request::Input('cuit');
		$accion 		= Request::input('accion'); 
		$visible 		= Request::input('visible');
		$tit 		    = Request::input('titulo');
		$tit 				=  explode('-||-',$tit);
		$tit 		    = isset($tit[2]) ? $tit[2] : '';

		$valores = [];
		$valores['cuit']			= $cuit; 
		$valores['id_padron']	= $id_padron; 
		$valores['user_id']		= $user_id; 
		$valores['titulo']		= $tit; 

		foreach (request()->except('_token','accion','visible','nombre_seccion','titulo') as $key => $valor) {
			  if (empty($valor)) {
		
			  	$valor = '0';
			  }

			  $valores[$key]=str_replace("\n", "<br>", $valor);
		}
		$valores=array_values($valores);
		//var_dump($valores); die(); 
		
		if($accion == 'A'){
			
			$store_procedure = 'backend_alta_datos_generales';
			$mensaje_general = SQLConnection::backendStoreProcedure($store_procedure,$valores,"selectOne");

		} else {

			$store_procedure = 'backend_modificacion_datos_generales';
			$mensaje_general = SQLConnection::backendStoreProcedure($store_procedure,$valores,"selectOne");
		
		}	
		$generalidades  = SQLConnection::backendStoreProcedure('backend_datos_generales',array(NULL,$cuit,$visible,env('ID_INFORME_COMERCIAL')),'select');
	 	return json_encode(array('error' => $mensaje_general->error,'mensaje' => $mensaje_general->mensaje,
	 	'tabla' => view('produccion/tabla_generalidades')->with(compact('generalidades','visible','cuit'))->render()
	 	));
	
	}

//----------------------------------------------------------------------------------------------
// Dotacion de Personal


	public function obtenerPersonal(){
		$token_id_usuario 	 = MainController::obtenerParametrosInformeComercial();
		$token_por_secciones = Misc::obtenerTokenSeccion('formales');
		//valido si el usuario tiene el permiso correspondiente para acceder a la sección solicitada.
        $valido =  Misc::restriccionPermiso('PERSONAL');
        if(!$valido){ return redirect('/menu'); }
        //obtenemos los permisos para el menu, ésta variable debe asignarse al compact de la vista.
        $menu = Misc::obtenerPermisosNavigator();
		//$cuit = Session::get('cuit');
    $cuit = Request::Input('cuit');
		
		$visible = 1;
		
		$dotacion_personal  = SQLConnection::backendStoreProcedure('backend_dotacion_personal',array(NULL,$cuit,$visible),'select');
		$tipo_personal = SQLConnection::obtenerCodigos("obtener_Tipo_Personal");
		
		return view('produccion/personal')->with(compact('dotacion_personal','visible','tipo_personal','menu','cuit','token_por_secciones','token_id_usuario'));
	}

	public function filtrarPersonal(){
		//$cuit = Session::get('cuit');
		$cuit = Request::Input('cuit');
		$visible = (Request::input('visible')=="") ? 1 : Request::input('visible');
		$dotacion_personal  = SQLConnection::backendStoreProcedure('backend_dotacion_personal',array(NULL,$cuit,$visible),'select');

		return view('produccion/tabla_personal')->with(compact('dotacion_personal','visible','cuit'));
	}

	public function visiblePersonal(){ 
		$id_personal = Request::input('id_personal');
		$visible_personal = SQLConnection::backendVisible($id_personal,'backend_visible_dotacion_personal');
		return json_encode(array('error' => $visible_personal->error,'mensaje' => $visible_personal->mensaje)); 
	}

	public function altaPersonal(){
	 	//$cuit 		  = Session::get("cuit");
	 	$cuit = Request::Input('cuit');
		//$id_padron 	= Session::get("id_padron");
		$id_padron 	= null;
	 	$user_id 		= Session::get("usuario")->user_id;

		$valores = [];
		$valores['cuit']			= $cuit; 
		$valores['id_padron']	= $id_padron; 
		$valores['user_id']		= $user_id; 

		foreach (request()->except('_token','visible','car_nombre') as $key => $valor) {
			  if (empty($valor)) {
		
			  	$valor = '';
			  } 
			  $valores[$key]=$valor;
		}
		
		$valores=array_values($valores);
		//var_dump($valores); die();

		$store_procedure = 'backend_abm_dotacion_personal';
		$mensaje_personal = SQLConnection::backendStoreProcedure($store_procedure,$valores,"selectOne");
		
		$visible = (Request::input('visible')=="") ? 1 : Request::input('visible'); 
		$dotacion_personal  = SQLConnection::backendStoreProcedure('backend_dotacion_personal',array(NULL,$cuit,$visible),'select');

		return json_encode(array('error' => $mensaje_personal->error,'mensaje' => $mensaje_personal->mensaje,
	 	'tabla' => view('produccion/tabla_personal')->with(compact('dotacion_personal','visible','cuit'))->render()
	 	));
	}

//----------------------------------------------------------------------------------------------
// Cambios Nombres
	public function obtenerCambiosNombres(){
		$token_id_usuario 	 = MainController::obtenerParametrosInformeComercial();
		$token_por_secciones = Misc::obtenerTokenSeccion('formales');
		//valido si el usuario tiene el permiso correspondiente para acceder a la sección solicitada.
        $valido =  Misc::restriccionPermiso('SOCIEDADES');
        if(!$valido){ return redirect('/menu'); }
        //obtenemos los permisos para el menu, ésta variable debe asignarse al compact de la vista.
        $menu = Misc::obtenerPermisosNavigator();
		//$cuit = Session::get('cuit');
    	$cuit = Request::Input('cuit');
		$cambios_nombres  = SQLConnection::backendStoreProcedure('backend_cambios_nombres',array(NULL,$cuit,NULL),'select');
		return view('produccion/cambios_nombres')->with(compact('cambios_nombres','menu','cuit','token_por_secciones','token_id_usuario'));
	}

	public function filtrarCambiosNombres(){
		//$cuit = Session::get('cuit');
		$cuit = Request::Input('cuit');
		$cambios_nombres  = SQLConnection::backendStoreProcedure('backend_cambios_nombres',array(NULL,$cuit,NULL),'select');
		return view('produccion/tabla_cambios_nombres')->with(compact('cambios_nombres','cuit'));
	}

	public function visibleCambiosNombres(){ 
		$id_cambios = Request::input('id_cambios');
		$mensaje_cambios = SQLConnection::backendVisible($id_cambios,'backend_visible_cambios_nombres');
		$cuit = Request::Input('cuit');
		$cambios_nombres  = SQLConnection::backendStoreProcedure('backend_cambios_nombres',array(NULL,$cuit,NULL),'select');
		return json_encode(array('error' => $mensaje_cambios->error,'mensaje' => $mensaje_cambios->mensaje,
	 	'tabla' => view('produccion/tabla_cambios_nombres')->with(compact('cambios_nombres','cuit'))->render()));
	}

	public function altaCambiosNombres(){;
	 	$cuit = Request::Input('cuit');
		$id_padron 	= null;
	 	$user_id 		= Session::get("usuario")->user_id;

		$valores = [];
		$valores['cuit']			= $cuit; 
		$valores['id_padron']	= $id_padron; 
		$valores['user_id']		= $user_id; 

		foreach (request()->except('_token') as $key => $valor) {
			  if (empty($valor)) {
		
			  	$valor = '';
			  }
			  $valores[$key]=$valor;
		}
		
		$valores=array_values($valores);		

		$store_procedure = 'backend_abm_cambios_nombres';
		$mensaje_cambios = SQLConnection::backendStoreProcedure($store_procedure,$valores,"selectOne");
		$cambios_nombres  = SQLConnection::backendStoreProcedure('backend_cambios_nombres',array(NULL,$cuit,NULL),'select');

		return json_encode(array('error' => $mensaje_cambios->error,'mensaje' => $mensaje_cambios->mensaje,
	 	'tabla' => view('produccion/tabla_cambios_nombres')->with(compact('cambios_nombres','cuit'))->render()
	 	));
	}

	//----------------------------------------------------------------
// Empleados
	public static $empleados_periodo;

	public function obtenerEmpleados(){
		$user_id 		= Session::get("usuario")->user_id;
		$token_id_usuario 	 = MainController::obtenerParametrosInformeComercial();
		$token_por_secciones = Misc::obtenerTokenSeccion('formales');
		//valido si el usuario tiene el permiso correspondiente para acceder a la sección solicitada.
        $valido =  Misc::restriccionPermiso('NOMINA');
        if(!$valido){ return redirect('/menu'); }
        //obtenemos los permisos para el menu, ésta variable debe asignarse al compact de la vista.
        $menu = Misc::obtenerPermisosNavigator();
		//$cuit    = Session::get('cuit');
    	$cuit = Request::Input('cuit');
        $nombre_persona = Request::input("nombre_persona");
        $ident = Request::input("ident");
		$empleados_todos = [];
		$empleadores_todos = [];
		$periodo_mejor = new stdClass();
		$periodo        = new stdClass();
		$periodo_mejor_aamm = new stdClass();
		$periodo_mejor_aamm = '';

		/*if (substr($cuit,0,1)=='3') 
		{*/
			self::$empleados_periodo  = SQLConnection::backendStoreProcedure('backend_empleados_periodo',array($cuit),'select');
			$empleados_periodo = self::$empleados_periodo;
			$ultimo = isset($empleados_periodo[0]->periodo) ? $empleados_periodo[0]->periodo : '';
			$periodo = $ultimo; 
			$periodo_mejor  = SQLConnection::backendStoreProcedure('obtener_empleados',array($cuit),'selectOne'); 
			$periodo_mejor  = isset($periodo_mejor->fecha) ?? ''; 
			if (strlen($periodo_mejor)==6)
			{
				$periodo_mejor = '0' . $periodo_mejor; 
			}
			if (strlen($periodo_mejor)==7)
			{
			$periodo_mejor_aamm = substr($periodo_mejor, 5, 2) . substr($periodo_mejor, 0,2);
			}
			if($ultimo){
				$empleados_todos = SQLConnection::backendStoreProcedure('backend_empleados',array($cuit,$ultimo,'empleados'),'select');
			}
			else 
			{
			$empleados_todos = SQLConnection::backendStoreProcedure('backend_empleados',array($cuit,null,'empleados'),'select');
			}
		/*}
		else
		{*/
			$empleadores_todos = SQLConnection::backendStoreProcedure('backend_empleados',array($cuit,null,'empleadores'),'select');
		//}
		return view('produccion/empleados')->with(compact('empleados_todos','empleadores_todos','empleados_periodo','periodo','periodo_mejor','periodo_mejor_aamm','menu','cuit','token_por_secciones','token_id_usuario','user_id','ident','nombre_persona'));
	}

	public function filtrarEmpleados(){		
		//$cuit    = Session::get('cuit');
		$user_id 		= Session::get("usuario")->user_id;

		$cuit = Request::Input('cuit');
		$periodo = Request::input('periodo'); 
		$periodo_mejor = Request::input('periodo_mejor');
		$periodo_mejor_aamm = new stdClass();
		$periodo_mejor_aamm = '';
		
		if (strlen($periodo_mejor)==7){
			$periodo_mejor_aamm = substr($periodo_mejor, 5, 2) . substr($periodo_mejor, 0,2);
		}
		$empleados_todos = []; 
						
		if($periodo){
			$empleadores_todos = SQLConnection::backendStoreProcedure('backend_empleados',array($cuit,$periodo,'empleadores'),'select');
			$empleados_todos = SQLConnection::backendStoreProcedure('backend_empleados',array($cuit,$periodo,'empleados'),'select');
		}
		//return view('produccion/tabla_empleados')->with(compact('empleados_todos','empleadores_todos','empleados_periodo','periodo_mejor','periodo_mejor_aamm','periodo','cuit','user_id'));
		
		return view('produccion/tabla_empleados')->with(compact('empleados_todos','empleadores_todos','periodo_mejor','periodo_mejor_aamm','periodo','cuit','user_id'));
	}

	//------------------------------------------------------------------------------------------------------
	// Sociedades
	
	public function obtenerRamos(){
		$ramos = SQLConnection::backendStoreProcedure('obtener_ramos',array());
		return json_encode($ramos);
	}

	public function obtenerProvincias(){
		$provincias = SQLConnection::backendStoreProcedure('obtener_provincias',array());
		return json_encode($provincias);
	}

	public function altaNominas(){
		$periodo_desde  = Request::input('periodo_desde');
		$periodo_hasta 	= Request::input('periodo_hasta');
		$cuit_empleador = Request::input('cuit_empleador');
		$cuit_empleado  = Request::input('cuit_empleado');
		
		// --
		$date_desde = date_create($periodo_desde);
		$date_hasta = date_create($periodo_hasta);
		$start_date = date_format($date_desde,"Y/m/d");
		$end_date = date_format($date_hasta,"Y/m/d");
		// --
		$currentDate = strtotime($start_date);
		while($currentDate <= strtotime($end_date)){

			$formatted = date("Y-m", $currentDate);
			$formatted = explode('-', $formatted);
			$anio = substr($formatted[0],2);
			$mes = $formatted[1];
			$periodo = $anio.$mes;
			
			$alta_nominas = SQLConnection::backendStoreProcedure('backend_alta_nominas',array($cuit_empleado,$cuit_empleador,$periodo));

			$currentDate = strtotime("+1 month", $currentDate);
		}
	}
	
	// DATOS SOCIEDADES Y/O PERSONAS
	// DATOS SOCIEDADES Y/O PERSONAS
	public function obtenerSociedades(){
		$token_por_secciones = Misc::obtenerTokenSeccion('formales');
		//valido si el usuario tiene el permiso correspondiente para acceder a la sección solicitada.
        $valido =  Misc::restriccionPermiso('SOCIEDADES');
        if(!$valido){ return redirect('/menu'); }
        //obtenemos los permisos para el menu, ésta variable debe asignarse al compact de la vista.
        $menu = Misc::obtenerPermisosNavigator();
        $cuit = Request::Input('cuit');
		$tipo_persona = (substr($cuit,0,1) != '3') ? 'f' : 'j' ;
		$datos_persona = '';
		$profesiones = [];
		$defuncion = '';

		if ($tipo_persona == 'f') {
			$datos_persona   = SQLConnection::backendStoreProcedure('obtener_persona', array($cuit), true);
			$profesiones     = SQLConnection::backendStoreProcedure('obtener_profesiones', array());
			$estados_civiles = SQLConnection::backendStoreProcedure('obtener_estados_civiles', array());
			$defuncion       = SQLConnection::backendStoreProcedure('obtener_defuncion',array($cuit), true);
			if (isset($defuncion)) {
				$defuncion->fecha_deceso = Misc::convertirFormatoFecha($defuncion->fecha_deceso, 'Y-m-d', 'd/m/Y');
			}
			$datos_persona->fecha_nacimiento = Misc::convertirFormatoFecha($datos_persona->fecha_nacimiento, 'Y-m-d', 'd/m/Y');
		}
		
		//domicilio
		$visible = (Request::input('visible')=="") ? 1 : Request::input('visible');
		//$domicilios      = SQLConnection::backendStoreProcedure('obtener_domicilios_new', array($cuit, 0));
		$domicilios_visibles     = SQLConnection::backendStoreProcedure('backend_obtener_domicilios', array($cuit,1));
		$domicilios_no_visibles  = SQLConnection::backendStoreProcedure('backend_obtener_domicilios', array($cuit,0));
		$paises     =  SQLConnection::backendStoreProcedure('backend_obtener_paises',array());
		$provincias =  SQLConnection::backendStoreProcedure('obtener_provincias',array());
		$domicilios_todos    = array_merge($domicilios_visibles,$domicilios_no_visibles);
    
        $id_ant      = -1;
        $visible_ant = -1; 
        $domicilios = []; 
        foreach ($domicilios_todos as $value) {
            if ($visible_ant != $value->visible || $id_ant != $value->id) 
            {
                $i = 0; 
            }
            $visible_ant = $value->visible; 
            $id_ant      = $value->id; 
            if ($i==0)
            {
                $domicilios[$value->visible][$value->id] = new stdClass();
                $domicilios[$value->visible][$value->id]->codpos       	= $value->codpos;
                $domicilios[$value->visible][$value->id]->domicilio    	= $value->domicilio;
                $domicilios[$value->visible][$value->id]->loc_codigo    = $value->loc_codigo; 
                $domicilios[$value->visible][$value->id]->loc_nombre    = $value->loc_nombre; 
                $domicilios[$value->visible][$value->id]->prv_codigo 		= $value->prv_codigo; 
                $domicilios[$value->visible][$value->id]->prv_nombre 		= $value->prv_nombre; 
                $domicilios[$value->visible][$value->id]->pai_codigo 		= $value->pai_codigo; 
                $domicilios[$value->visible][$value->id]->pai_nombre 		= $value->pai_nombre; 
                $domicilios[$value->visible][$value->id]->tipo_domicilio = $value->tipo_domicilio; 
                $domicilios[$value->visible][$value->id]->ids_domicilios	 = $value->id_domicilio; 
                $domicilios[$value->visible][$value->id]->tipo_domicilio_id = $value->tipo_domicilio . '|' . $value->id_domicilio;  
            }
            else 
            {
                $domicilios[$value->visible][$value->id]->ids_domicilios 	 .= ',' . $value->id_domicilio; 
                $domicilios[$value->visible][$value->id]->tipo_domicilio .= ',' . $value->tipo_domicilio; 
                $domicilios[$value->visible][$value->id]->tipo_domicilio_id .= ',' . $value->tipo_domicilio . '|' . $value->id_domicilio;  
            }
            $i += 1; 
        }
        //var_dump($domicilios); die(); 
        
		$telefonos      = SQLConnection::backendStoreProcedure('obtener_telefonos_todos', array($cuit, 0));

		//sociedad
		$sociedad        = SQLConnection::backendStoreProcedure('obtener_sociedades',array($cuit),'selectOne');
		$sociedades_tipo = SQLConnection::backendStoreProcedure('obtener_sociedades_tipo',array());
		$provincias      = SQLConnection::backendStoreProcedure('obtener_provincias',array());
		$paises 				 = SQLConnection::backendStoreProcedure('backend_obtener_paises',array());
		$monedas         = SQLConnection::backendStoreProcedure('obtener_monedas',array());
		if (isset($sociedad)) {
			$sociedad->fecha_ins_rpc = Misc::convertirFormatoFecha($sociedad->fecha_ins_rpc, 'Y-m-d', 'd/m/Y');
			$sociedad->fecha_cons = Misc::convertirFormatoFecha($sociedad->fecha_cons, 'Y-m-d', 'd/m/Y');
		}
		
		//$ramos         = SQLConnection::backendStoreProcedure('obtener_ramos',array());
		return view('produccion/sociedades')->with(compact('sociedad','domicilios','paises','provincias','paises','sociedades_tipo','provincias','monedas','visible','menu','cuit','token_por_secciones', 'defuncion', 'tipo_persona', 'datos_persona', 'profesiones', 'estados_civiles','telefonos'));
	}


	// PROCESAR DATOS PERSONA
	public function altaDatosPersona() {
		$user_id = Session::get("usuario")->user_id;
		$cuit = Request::Input('cuit');
		
		// Preparo $params para la store procedure de sociedades
		$params = [];
		$params["usuario"] = $user_id;
		$params["actividad"] = null;
		$params["fecha_cons"] = null;
		$params["duracion"] = null;
		$params["ram_codigo"] = null;
		$params["sra_codigo"] = null;
		$params["capital"] = null;
		$params["mon_codigo"] = null;
		$params["soc_codigo"] = null;
		$params["uso_firma"] = null;
		$params["nroigj"] = null;

		foreach (request()->except(['_token', 'fecha_deceso', 'nombre_padre', 'nombre_madre', 'nombre_conyuge', 'estado_civil', 'ocupacion', 'profesion', 'fecha_nacimiento', 'nombre_persona' ] ) as $key => $value) {
			$params[$key] = ($value == '') ? null : $value ;
		}
		$params['fecha_ins_rpc'] = Misc::convertirFormatoFecha($params['fecha_ins_rpc']);
		ksort($params);

		// SP de DATOS SOCIEDAD para persona fisica independiente/monotributista
		$mensaje = SQLConnection::backendStoreProcedure("backend_alta_mod_sociedades",array_values($params),'selectOne');

		// SP de DATOS PERSONA
		$inputs_persona = []; 
		foreach (Request::only(['nombre_padre', 'nombre_madre', 'nombre_conyuge', 'estado_civil', 'ocupacion', 'profesion', 'fecha_nacimiento', 'nombre_persona', 'cuit']) as $key => $value) {
			$inputs_persona[$key] = ($value == '') ? null : $value ;
		}
		$inputs_persona['fecha_nacimiento'] = Misc::convertirFormatoFecha($inputs_persona['fecha_nacimiento']);
		ksort($inputs_persona);
		$exec = SQLConnection::backendStoreProcedure("procesar_datos_persona",array_values($inputs_persona),'selectOne');
		
		// SP de DEFUNCIONES (datos persona)
		$defuncion = (Request::input('fecha_deceso') == "") ? NULL : Request::input('fecha_deceso');
		$defuncion = Misc::convertirFormatoFecha($defuncion);
		$exec = SQLConnection::backendStoreProcedure('insertar_datos_persona',array($cuit, $defuncion));

		// OBTENER TODOS LOS DATOS ACTUALIZADOS
		$datos_persona = SQLConnection::backendStoreProcedure('obtener_persona', array($cuit), true);
		$defuncion  = SQLConnection::backendStoreProcedure('obtener_defuncion',array($cuit), true);

		$profesiones = SQLConnection::backendStoreProcedure('obtener_profesiones', array());
		$estados_civiles = SQLConnection::backendStoreProcedure('obtener_estados_civiles', array());
		
		$sociedad = SQLConnection::backendStoreProcedure('obtener_sociedades',array($cuit),'selectOne');
		$sociedades_tipo = SQLConnection::backendStoreProcedure('obtener_sociedades_tipo',array());
		$provincias = SQLConnection::backendStoreProcedure('obtener_provincias',array());
		$monedas    = SQLConnection::backendStoreProcedure('obtener_monedas',array());

		$datos_persona->fecha_nacimiento = Misc::convertirFormatoFecha($datos_persona->fecha_nacimiento, 'Y-m-d', 'd/m/Y');
		if (isset($sociedad)) {
			$sociedad->fecha_ins_rpc = Misc::convertirFormatoFecha($sociedad->fecha_ins_rpc, 'Y-m-d', 'd/m/Y');
		}
		if (isset($defuncion)) {
			$defuncion->fecha_deceso = Misc::convertirFormatoFecha($defuncion->fecha_deceso, 'Y-m-d', 'd/m/Y');
		}
		$tabla_datos_persona = view('produccion/tabla_datos_persona')->with(compact('sociedad','sociedades_tipo','provincias','monedas','cuit', 'defuncion', 'datos_persona', 'profesiones', 'estados_civiles' ));
		
		return json_encode(array('error'=>$mensaje->error,'mensaje'=>$mensaje->mensaje, 'tabla'=>$tabla_datos_persona->render() ));
	}

	// PROCESAR DATOS SOCIEDADES
	public function altaSociedades(){
		$user_id = Session::get("usuario")->user_id;
		$cuit = Request::Input('cuit');
		$defuncion = '';

		// Preparo $params para la store procedure
		$params = [];
		$params["usuario"] = $user_id;
		$params["cuit"] = $cuit;
		foreach (request()->except(['_token', 'fecha_deceso'] ) as $key => $value) {
			$params[$key] = ($value == '') ? null : $value;
		}
		$params['fecha_cons'] = Misc::convertirFormatoFecha($params['fecha_cons']);
		$params['fecha_ins_rpc'] = Misc::convertirFormatoFecha($params['fecha_ins_rpc']);
		ksort($params);

		// SP PROCESAR SOCIEDAD
		$mensaje = SQLConnection::backendStoreProcedure("backend_alta_mod_sociedades",array_values($params),'selectOne');
		
		// OBTENER DATOS ACTUALIZADOS
		$sociedad = SQLConnection::backendStoreProcedure('obtener_sociedades',array($cuit),'selectOne');
		$sociedades_tipo = SQLConnection::backendStoreProcedure('obtener_sociedades_tipo',array());
		$provincias = SQLConnection::backendStoreProcedure('obtener_provincias',array());
		$monedas    = SQLConnection::backendStoreProcedure('obtener_monedas',array());

		$sociedad->fecha_cons = Misc::convertirFormatoFecha($sociedad->fecha_cons, 'Y-m-d', 'd/m/Y');
		$sociedad->fecha_ins_rpc = Misc::convertirFormatoFecha($sociedad->fecha_ins_rpc, 'Y-m-d', 'd/m/Y');

		$tabla_sociedad = view('produccion/tabla_sociedades')->with(compact('sociedad','sociedades_tipo','provincias','monedas','cuit', 'defuncion'));
		return json_encode(array('error'=>$mensaje->error,'mensaje'=>$mensaje->mensaje, 'tabla'=>$tabla_sociedad->render() ));
	}

	public function altaDomicilios(){
		$user_id = Session::get("usuario")->user_id;
		$accion = Request::input('accion');
		//$cuit = Session::get('cuit');
		$cuit = Request::Input('cuit');
		
		// Si es una ALTA, id_juicio = NULL 
		$id_domicilio = ($accion == 'A') ? NULL : Request::input('id_domicilio');

		// Preparo $params para la store procedure
		$params = array();
		$params["id_domicilio"] = $id_domicilio;
		$params["usuario"] = $user_id;
		$params["cuit"] = $cuit;
		foreach (request()->except('_token','accion_domicilio','visible','id_domicilio') as $key => $valor) {
			$params[$key] = $valor;
		}
		ksort($params);
		$params = array_values($params);

		$mensaje = SQLConnection::backendStoreProcedure("backend_alta_mod_domicilios",$params,'selectOne');
		$tabla_domicilios = self::filtrarDomicilios();
		return json_encode(array('error'=>$mensaje->error,'mensaje'=>$mensaje->mensaje, 'tabla'=>$tabla_domicilios->render() ));
	}

	public function filtrarDomicilios(){
		//$cuit = Session::get('cuit');
		$cuit = Request::Input('cuit');
		$visible = (Request::input('visible')=="") ? 1 : Request::input('visible');
		$domicilios = SQLConnection::backendStoreProcedure('obtener_domicilios',array($cuit,$visible,NULL));
		return view('produccion/tabla_domicilios')->with(compact('domicilios','visible'));
	}

	public function islastDomicilios(){
		$id_domicilio = Request::input('id_domicilio');
		$usuario = Session::get("usuario")->user_id;

		$params = array($id_domicilio,$usuario);
		$mensaje_visible = SQLConnection::backendStoreProcedure("backend_islast_domicilio",$params,'selectOne');
		
		//domicilios
		$tabla_domicilios = self::filtrarDomicilios();

		return json_encode(array('error'=>$mensaje_visible->error,'mensaje'=>$mensaje_visible->mensaje, 'tabla'=>$tabla_domicilios->render() ));
	}

	public function visibleDomicilios(){
		$id_domicilio = Request::input('id_domicilio');
		$usuario = Session::get("usuario")->user_id;

		$params = array($id_domicilio,$usuario);
		$mensaje_visible = SQLConnection::backendStoreProcedure("backend_vigente_domicilio",$params,'selectOne');
		
		//domicilios
		$tabla_domicilios = self::filtrarDomicilios();

		return json_encode(array('error'=>$mensaje_visible->error,'mensaje'=>$mensaje_visible->mensaje, 'tabla'=>$tabla_domicilios->render() ));
	}

	public function modalDomicilios(){
		$id_domicilio = Request::input('id_domicilio');
		$domicilio = SQLConnection::backendStoreProcedure("obtener_domicilios",array(NULL,NULL,$id_domicilio),'selectOne');
		return view('modals/modal_domicilios')->with(compact('domicilio'));
	} 
 
//-----------------------------------------------
// Seguros

	public function obtenerSeguros(){
		$token_id_usuario 	 = MainController::obtenerParametrosInformeComercial();
		$token_por_secciones = Misc::obtenerTokenSeccion('comerciales');
		//valido si el usuario tiene el permiso correspondiente para acceder a la sección solicitada.
        $valido =  Misc::restriccionPermiso('SEGUROS');
        if(!$valido){ return redirect('/menu'); }
        //obtenemos los permisos para el menu, ésta variable debe asignarse al compact de la vista.
        $menu = Misc::obtenerPermisosNavigator();
		//$cuit = Session::get('cuit');
    $cuit = Request::Input('cuit');
		$visible = 1;
			
		$seguros  = SQLConnection::backendStoreProcedure('backend_seguros',array(NULL,$cuit,$visible),'select');
		$cia_seguros = SQLConnection::obtenerCodigos("obtener_cia_seguros");
		$riesgos = SQLConnection::obtenerCodigos("obtener_riesgos");
		
		return view('produccion/seguros')->with(compact('seguros','visible','cia_seguros','riesgos','menu','cuit','token_por_secciones','token_id_usuario'));
	}

	public function filtrarSeguros(){
		//$cuit = Session::get('cuit');
		$cuit = Request::Input('cuit');
		$visible = (Request::input('visible')=="") ? 1 : Request::input('visible');
		$seguros  = SQLConnection::backendStoreProcedure('backend_seguros',array(NULL,$cuit,$visible),'select');

		return view('produccion/tabla_seguros')->with(compact('seguros','visible','cuit'));
	}

	public function visibleSeguros(){ 
		$id_seguros = Request::input('id_seguros');
	  $visible_seguros = SQLConnection::backendVisible($id_seguros,'backend_visible_seguros');
		return json_encode(array('error' => $visible_seguros->error,'mensaje' => $visible_seguros->mensaje)); 
	}

	public function abmSeguros(){

	 	//$cuit 		  = Session::get("cuit");
	 	$cuit = Request::Input('cuit');
	 	
		//$id_padron 	= Session::get("id_padron");
		$id_padron 	= null;
	 	$user_id 		= Session::get("usuario")->user_id;

		$valores = [];
		$valores['cuit']			= $cuit; 
		$valores['id_padron']	= $id_padron; 
		$valores['user_id']		= $user_id; 
		foreach (request()->except('_token','visible','seg_nombre','rie_nombre') as $key => $valor) {
			  if (empty($valor)) {
			  	$valor = '';
			  }
			  $valores[$key]=$valor;
		}
		
		$valores=array_values($valores);
		//print_r($valores); die(); 
		$store_procedure = 'backend_abm_seguros';
		$mensaje_personal = SQLConnection::backendStoreProcedure($store_procedure,$valores,"selectOne");
		
		$visible = (Request::input('visible')=="") ? 1 : Request::input('visible'); 
		$seguros  = SQLConnection::backendStoreProcedure('backend_seguros',array(NULL,$cuit,$visible),'select');

		return json_encode(array('error' => $mensaje_personal->error,'mensaje' => $mensaje_personal->mensaje,
	 	'tabla' => view('produccion/tabla_seguros')->with(compact('seguros','visible','cuit'))->render()
	 	));
	}


  public function agregarArchivoBalances()
	{

		$balances_contables =  SQLConnection::backendStoreProcedure('backend1_archivo_balances_contables',array(),'select');

		foreach($balances_contables as $balances){
			$archivo = ENV('PATH_COMPARTIDO').'/balances/'.$balances->cuit.'/'.$balances->fecha_balance.'.pdf'; 
			$ruta_archivo = ''; 

			if (file_exists($archivo)){
				$ruta_archivo = '/balances/'.$balances->cuit.'/'.$balances->fecha_balance.'.pdf';
			}
			else
			{ 
				$archivo = ENV('PATH_COMPARTIDO').'/balances/'.$balances->cuit.'/'.$balances->task_id.'.pdf';
				if (file_exists($archivo)){
					$ruta_archivo = '/balances/'.$balances->cuit.'/'.$balances->task_id.'.pdf';
				}
				else
				{
					$archivo = ENV('PATH_COMPARTIDO').'/balances/'.$balances->cuit.'/'.$balances->id_balance.'.pdf';
				  if (file_exists($archivo)){
					   $ruta_archivo = '/balances/'.$balances->cuit.'/'.$balances->id_balance.'.pdf';
				  }
				}
			}
			if ($ruta_archivo!='')
			{
				$grabar  = SQLConnection::backendStoreProcedure('backend_archivo_balances_contables',array($balances->id_balance,$ruta_archivo),'select');
			  print_r($balances->id_balance . ' >>> ' . $ruta_archivo . "\n");
			}
		}
	}

	public function htmlBancos(){
    $cuit = Request::input("cuit");
    $resp = SQLConnection::backendStoreProcedure('obtener_periodo_maximo',array($cuit),true);
    $periodo_maximo = $resp->periodo_maximo;
    $periodos_ordenados = [];
    $periodos_graficos = [];
    $bancos_ordenados = [];
    $bancos_ordenados_separados = [];
	$menu = Misc::obtenerPermisosNavigator();

    //tabla de bancos
    for ($i = 0; $i <= 23; $i++) {
      if ($i%8==0){
        $periodo[$i] = date("Ym", strtotime( $periodo_maximo." -$i months"));
      }else{
        $periodo[$i] = date("Ym", strtotime( $periodo_maximo." -$i months")); 
      }
    }
    krsort($periodo);
    $periodo = array_values($periodo);
	$obtenerBancos = SQLConnection::backendStoreProcedure('obtener_bancos',array($cuit),false);
    if($obtenerBancos){
      foreach($obtenerBancos as $key_banco =>$banco){
        foreach($periodo as $key_mes => $mes){
            if($mes == $banco->fec_inf){
              if(!isset(  $bancos_ordenados['TOTAL_PERIODO'][$mes]['TOTAL_PERIODO'] )) {
                  $bancos_ordenados['TOTAL_PERIODO'][$mes]['TOTAL_PERIODO']  = 0;
              }
              $bancos_ordenados[$banco->nombre][$mes]['situacion']  = ($obtenerBancos[$key_banco]->situacion) ? $obtenerBancos[$key_banco]->situacion : '';
              if(($obtenerBancos[$key_banco]->situacion && $obtenerBancos[$key_banco]->situacion > 1)) {

              $bancos_ordenados[$banco->nombre][$mes]['desplegar']  = 1;
              }
              $bancos_ordenados[$banco->nombre][$mes]['total']      = ($obtenerBancos[$key_banco]->total) ? $obtenerBancos[$key_banco]->total : '';
              $bancos_ordenados['TOTAL_PERIODO'][$mes]['TOTAL_PERIODO']   += ($obtenerBancos[$key_banco]->total) ? $obtenerBancos[$key_banco]->total : 0;
            }
          }
        }
      foreach($bancos_ordenados as $key_bo => $bancos){
          foreach($periodo as $key_mes => $mes){
            if (!array_key_exists($mes,$bancos)){
              $bancos_ordenados[$key_bo][$mes]['situacion'] = '';
              $bancos_ordenados[$key_bo][$mes]['total'] = '';
              $bancos_ordenados[$key_bo][$mes]['TOTAL_PERIODO'] = '';
            } 
          }
      }

      foreach($bancos_ordenados as $key_bo => $bancos){
        ksort ($bancos_ordenados[$key_bo]);
      }
    
      foreach($bancos_ordenados as $key_bo => $bancos){
        $i =0;
        $n =0;
        foreach($bancos as $key_b  => $banco){
          if($n%8==0){
            $i++;
          }
          $bancos_ordenados_separados[$key_bo][$i][$key_b] = $banco;
          $n++;
            
        }
      }
        $i =0;
      foreach($periodo as $key_mes => $mes){
        if($key_mes%8==0){
            $i++;
        }
        $periodos_ordenados[$i][$key_mes] = $mes;
            
        }
    } 
    $periodo = $periodos_ordenados;
    $bancos_ordenados_separados = array_reverse($bancos_ordenados_separados);
    
    $obtener_bancos = $bancos_ordenados_separados;
    return view('produccion/html/bancos')->with(compact('obtener_bancos','periodo','menu'));
	}
 
	public static function vinculacionesCuit() {
		$menu     = Misc::obtenerPermisosNavigatorNoCuit();
		$desde    = Request::Input('desde');
		if ($desde == 'elegir')
		{
		  $desde    = 'Relaciones CUIT'; 
		} 
		else 
		{
			$desde =  'Relaciones CUIT - Todos los Brief y Fidecheck'; 
		}
		return view('/buscador_padron')->with(compact(['menu','desde']));
	}

/*
	public static function vinculacionesCuitTodas() {
		$menu     = Misc::obtenerPermisosNavigatorNoCuit();
		$desde    = 'Relaciones CUIT - Todos los Brief'; 
		return view('/buscador_padron')->with(compact(['menu','desde']));
	}
*/
	public static function resultadoVinculacionesCuit() {
    $menu = Misc::obtenerPermisosNavigatorNoCuit();
    $cuit = Request::Input('cuit');
    $nombre_persona 	 = Request::Input('nombre_persona');
    $desde = Request::Input('desde');
    $tipo_persona = SQLConnection::backendStoreProcedure('obtener_tipo_persona', array($cuit),'selectOne')->tipo_persona; 
    $tipo_persona = ($tipo_persona = 'J') ? 'j' : 'f';
    $visible = Request::input('visible');
    $visible = isset($visible) ? $visible : 1;
    $socios_directores = SQLConnection::backendStoreProcedure('backend_obtener_socios', array(NULL, $cuit, $visible, $tipo_persona));
    $cargos = SQLConnection::backendStoreProcedure("obtener_Cargos", array());
    $accionistas = SQLConnection::backendStoreProcedure("backend_obtener_accionistas", array($cuit, $visible));
    $accionistas_de = SQLConnection::backendStoreProcedure("backend_obtener_accionistas_de", array($cuit, $visible));
		return view('/led/resultado_vinculaciones_cuit')->with(compact(['cuit','nombre_persona','menu','socios_directores','visible', 'cuit', 'cargos', 'tipo_persona', 'accionistas', 'accionistas_de','desde']));
	}
	/*
	public static function obtenerVinculacionCuitVista() {
		$menu     				 = Misc::obtenerPermisosNavigatorNoCuit();
		$cuitb              = Request::Input('cuitb');
		$nombre_personab    = Request::Input('nombre_personab');
		return view('/led/vinculacion_cuit_vista')->with(compact('cuitb','nombre_personab','menu'));
	}

	public static function infoVinculacionCuitVista() {
		$cuit = $_POST['cuitb'];
		$nombre_persona = $_POST['nombre_personab']; 
		$visible = 1;
		$tipo_persona      = SQLConnection::backendStoreProcedure('obtener_tipo_persona', array($cuit), 'selectOne');
    $tipo_persona      = ($tipo_persona = 'J') ? 'j' : 'f';
		$socios_directores = SQLConnection::backendStoreProcedure('backend_obtener_socios', array(null, $cuit, $visible, $tipo_persona));
    $cargos            = SQLConnection::backendStoreProcedure("obtener_Cargos", array());
    $accionistas       = SQLConnection::backendStoreProcedure("backend_obtener_accionistas", array($cuit, $visible));
    $accionistas_de    = SQLConnection::backendStoreProcedure("backend_obtener_accionistas_de", array($cuit, $visible));

	  	$i=0; 
 			$cuits[$i]['tipo']   = 'PRINCIPAL'; 
    	$cuits[$i]['cuit']   = $cuit; 
 			$cuits[$i]['nombre'] = $nombre_persona; 
 			$cuits[$i]['cargo']  = ''; 
    	$i=1; 
    	foreach ($socios_directores as $socio)
 			{
 			         $cuits[$i]['tipo']   = 'SOCIOS'; 
 			         $cuits[$i]['cuit']   = $socio->cuit_persona; 
 			         $cuits[$i]['nombre'] = $socio->nombre_persona; 
 			         $cuits[$i]['cargo']  = $socio->cargo_nombre; 
 			         $i += 1; 
			}
    
    	foreach ($accionistas as $socio)
    	{
 			         $cuits[$i]['tipo']   = 'ACCIONISTA'; 
 			         $cuits[$i]['cuit']   = $socio->cuit_persona; 
 			         $cuits[$i]['nombre'] = $socio->nombre_persona; 
 			         $cuits[$i]['cargo']  = 'ACCIONISTA'; 
 			         $i += 1; 
			}
			foreach ($accionistas_de as $socio)
			{
 			         $cuits[$i]['tipo']   = 'ACCIONISTA DE'; 
 			         $cuits[$i]['cuit']   = $socio->cuit_persona; 
 			         $cuits[$i]['nombre'] = $socio->nombre_persona; 
 			         $cuits[$i]['cargo']  = 'ACCIONISTA DE'; 
 			         $i += 1; 
			}
		  return json_encode($cuits);
		}
*/

		public static function obtenerVinculacionCuitVista() {
		$menu     				 = Misc::obtenerPermisosNavigatorNoCuit();
		$cuitb              = Request::Input('cuitb');
		$nombre_personab    = Request::Input('nombre_personab');
		$visible = 1;
		$tipo_persona1     = SQLConnection::backendStoreProcedure('obtener_tipo_persona', array($cuitb), 'selectOne');
	  	$codigo_pais = $tipo_persona1->country_code;
	  	$tipo_persona = $tipo_persona1->tipo_persona;

	    $tipo_persona      = ($tipo_persona == 'J') ? 'j' : 'f';
			$socios_directores = SQLConnection::backendStoreProcedure('backend_obtener_socios', array(null, $cuitb, $visible, $tipo_persona));
	    $cargos            = SQLConnection::backendStoreProcedure("obtener_Cargos", array());
	    $accionistas       = SQLConnection::backendStoreProcedure("backend_obtener_accionistas", array($cuitb, $visible));
	    $accionistas_de    = SQLConnection::backendStoreProcedure("backend_obtener_accionistas_de", array($cuitb, $visible));
		$cuits = []; 
	  	$i=0; 
	  	/*
 			$cuits[$i]['tipo']   = 'CUIT CONSULTADO'; 
    	$cuits[$i]['cuit']   = $cuitb; 
 			$cuits[$i]['nombre'] = $nombre_personab; 
 			$cuits[$i]['cargo']  = ''; 
    	$i=1;
    	*/ 
    	foreach ($socios_directores as $socio)
 			{
                    if ($socio->ultimo == 'S')
                    {
                        $cuits[$i]['tipo']   = 'SOCIOS/DIRECTORES'; 
                        $cuits[$i]['cuit']   = $socio->cuit_persona; 
                        $cuits[$i]['tipo_persona'] = SQLConnection::backendStoreProcedure('obtener_tipo_persona', array($socio->cuit_persona), 'selectOne')->tipo_persona;
                        $cuits[$i]['nombre'] = $socio->nombre_persona; 
                        $cuits[$i]['cargo']  = $socio->cargo_nombre; 
                        $cuits[$i]['fecha_modificacion']  = $socio->fecha_modificacion; 
                        $cuits[$i]['country_code']  = $socio->country_code; 
                        $i += 1; 
 			        }
			}
    
    	foreach ($accionistas as $socio)
    	{
 			         $cuits[$i]['tipo']   = 'ACCIONISTA'; 
 			         $cuits[$i]['cuit']   = $socio->cuit_persona; 
 			         $cuits[$i]['tipo_persona'] = SQLConnection::backendStoreProcedure('obtener_tipo_persona', array($socio->cuit_persona), 'selectOne')->tipo_persona;
 			         $cuits[$i]['nombre'] = $socio->nombre_persona; 
 			         $cuits[$i]['cargo']  = 'ACCIONISTA'; 
 			         $cuits[$i]['fecha_modificacion']  = $socio->fecha_modificacion; 
 			         $cuits[$i]['country_code']  = $socio->country_code; 
 			         $i += 1; 
			}
			foreach ($accionistas_de as $socio)
			{
 			         $cuits[$i]['tipo']   = 'ACCIONISTA DE'; 
 			         $cuits[$i]['cuit']   = $socio->cuit_persona; 
 			         $cuits[$i]['tipo_persona'] = SQLConnection::backendStoreProcedure('obtener_tipo_persona', array($socio->cuit_persona), 'selectOne')->tipo_persona;
 			         $cuits[$i]['nombre'] = $socio->nombre_persona; 
 			         $cuits[$i]['cargo']  = 'ACCIONISTA DE'; 
 			         $cuits[$i]['fecha_modificacion']  = $socio->fecha_modificacion; 
 			         $cuits[$i]['country_code']  = $socio->country_code; 
 			         
 			         $i += 1; 
			}
		  return view('/led/resultado_vinculaciones_cuit_todos')->with(compact('cuitb','nombre_personab','menu','codigo_pais','cuits','tipo_persona'));

		}


	public static function guardaCapturaHtml(){
		$img_html = Request::input('captura_html');
		$img_html = json_decode($img_html,true);
		
		return $img_html;
	}


	// Edictos

	// Edictos
	public static function obtenerEdictos() {
		$menu = Misc::obtenerPermisosNavigator();
		$cuit = Request::Input('cuit');
		$nombre_persona = Request::Input('nombre_persona');
        $ident = Request::input("ident");
		$tipo_persona              = (substr($cuit,0,1) != '3') ? 'f' : 'j';

    
		$razon_social_todos        = [];  
		$razon_social              = Request::input('nombre_persona');
		$razon_social              = str_replace('#', 'ñ', $razon_social);
		$razon_social_todos[5]     = $razon_social;
		$razon_social_f            = Request::input('nombre_persona');
		$razon_social_f            = str_replace('#', 'ñ', $razon_social_f);
		$razon_social_f            = preg_replace('/\(|\)/','',$razon_social_f);
		$malla_razon_social        = $razon_social;

		$razon_social_completa     = '';
		$razon_social_explode      = explode(" ", $razon_social_f);

		$resultado_nombres_ant     = []; 
		//busca nombres anteriores de la empresa relacionados con el CUIT
		$nombres_anteriores = SQLConnection::backendCambiosNombres($cuit);
		$resultado_nombres_ant[] = $razon_social;
		if ($tipo_persona =='j') {
			$accionistas = SQLConnection::obtenerAccionistasNew($cuit);
			if ($nombres_anteriores) {       
				foreach ($nombres_anteriores as $nombre_ant) {
					$resultado_nombres_ant[] = $nombre_ant->nombre; 
				}
			}
		} else {
			$accionistas = ''; 
		}		

    	//Elimina de las combinaciones los valores que contienen una letra 
		$explode_aux = [];
		foreach ($razon_social_explode as $key => $value) {
			if (isset($value) && (strlen($value) > 1)) {
				$explode_aux[] = $value;
			}
		}

		$razon_social_explode = $explode_aux;	
		$edictos_homonimos = [];
 		$edictos = SQLConnection::backendStoreProcedure('backend_obtener_edictos',array($cuit),"select");		
		
		//P. FISICA
		if ($tipo_persona == 'f') {
			$razon_social_explode = array_values($razon_social_explode);
			$resultado_razon_social    = Misc::resultadoCombinaciones($razon_social_explode);
			
			//Limita a 10 resultados las combinaciones en PF
			$resultado_razon_social = array_slice($resultado_razon_social, -10);
			$cant_resultado_razon_social = count($resultado_razon_social);

			if ($cant_resultado_razon_social < 10) {
				foreach ($resultado_razon_social as $key => $rs) {
					if (!(end($resultado_razon_social) == $rs)) {
						$razon_social_completa .='NEAR(('.str_replace(" ",",",$rs).'),0,true) OR ';
					} else {
						$razon_social_completa .= 'NEAR(('.str_replace(" ",",",$rs).'),0,true)';
					}
				}
			} else {
				$razon_social_completa = "\"".$razon_social_f."\"";		
			}
		}		
		
		// P. JURIDICA
		if ($tipo_persona == 'j') {
			$sinonimos                 = Misc::diccionarioSinonimosTEST($resultado_nombres_ant);
			$count_sinonimo = count($sinonimos) - 1;
            
			foreach ($sinonimos as $key => $rs) {
				if(!($key == $count_sinonimo)){
					$razon_social_completa .= $rs.'OR';
				} else {
					$razon_social_completa .= $rs;
				}
			}
			
			if (!$razon_social_completa) {
				$razon_social_completa = "\"".$razon_social."\"";
			}	
			if ( $cuit == '30709424420' ){
				$razon_social_completa = "\"DISTRIBUIDORA DE BEBIDAS SRL\"";
			}
  			// $edictos_homonimos = SQLConnection::backendStoreProcedure('obtener_edictos_homonimos_conid',array($razon_social_completa),"select");
			// $edictos_homonimos = SQLConnection::backendStoreProcedure('obtener_edictos_mencionado',array($razon_social_completa),"select");
//			$edictos_homonimos = SQLConnection::backendStoreProcedure('obtener_edictos_homonimos_conid',array($razon_social_completa),"select");
$edictos_homonimos = SQLConnection::backendStoreProcedure('obtener_edictos_homonimos_conid',array($razon_social_completa, 'razon_social'),"select");
		} else {
			//Edictos para PF
  			// $edictos_homonimos =   			
  			// SQLConnection::backendStoreProcedure('obtener_edictos_homonimos_conid',array($razon_social_completa),"select");
			$edictos_homonimos = SQLConnection::backendStoreProcedure('obtener_edictos_mencionado',array($razon_social_completa),"select");
			$sinonimos = $razon_social_completa; 
        }

		// dd($edictos_homonimos);

		if ($edictos_homonimos) {
			if ($tipo_persona == 'f') {
				$edictos_homonimos = Misc::ResaltarResultadosEdictosHomonimosPF($edictos_homonimos,$resultado_razon_social);
            } else {
				$edictos_homonimos   = Misc::ResaltarResultadosEdictosHomonimosNombresAnt($edictos_homonimos, $sinonimos);
            }
        }
				
		$aux=[];
		foreach ($edictos_homonimos as $key => $value) {
			if (!isset($aux[$value->id_boletin][$value->razon_social])) {
				$aux[$value->id_boletin][$value->razon_social] = new stdClass();
				$aux[$value->id_boletin][$value->razon_social]->id_fide = '';
			}
			$aux[$value->id_boletin][$value->razon_social]->id_boletin = $value->id_boletin;
			$aux[$value->id_boletin][$value->razon_social]->provincia_boletin = $value->provincia_boletin;
			//$aux[$value->id_boletin][$value->razon_social]->fechab = $value->fechab;
			//$aux[$value->id_boletin][$value->razon_social]->fechab = $value->fecha_publicacion_DMY;
			if($tipo_persona == 'j') {
				$aux[$value->id_boletin][$value->razon_social]->fechab = $value->fechab;
			} else {
				$aux[$value->id_boletin][$value->razon_social]->fechab = $value->fecha_publicacion_DMY;
			}
			//$aux[$value->id_boletin][$value->razon_social]->fecha_publicacion = $value->fecha_publicacion;
			$aux[$value->id_boletin][$value->razon_social]->fecha_publicacion = $value->fecha_publicacion;
			$aux[$value->id_boletin][$value->razon_social]->contenido_archivo = $value->contenido_archivo;
			$aux[$value->id_boletin][$value->razon_social]->tabla = $value->tabla;
			$aux[$value->id_boletin][$value->razon_social]->quien = $value->quien;
			
			$aux[$value->id_boletin][$value->razon_social]->id_fide .= $value->id_fide.',';
		}
		
		$edictos_homonimos = $aux;
		$aux=[];
		foreach ($edictos as $key => $value) {
			if (!isset($aux[$value->id_boletin][$value->razon_social])) {
				$aux[$value->id_boletin][$value->razon_social] = new stdClass();
				$aux[$value->id_boletin][$value->razon_social]->id_fide = '';
			}
			$aux[$value->id_boletin][$value->razon_social]->cuit = $value->cuit;
			$aux[$value->id_boletin][$value->razon_social]->id_boletin = $value->id_boletin;
			$aux[$value->id_boletin][$value->razon_social]->provincia_boletin = $value->provincia_boletin;
			$aux[$value->id_boletin][$value->razon_social]->fechab = $value->fechab;
			$aux[$value->id_boletin][$value->razon_social]->fecha_publicacion = $value->fecha_publicacion;
			$aux[$value->id_boletin][$value->razon_social]->contenido_archivo = $value->contenido_archivo;
			$aux[$value->id_boletin][$value->razon_social]->tabla = $value->tabla;
			$aux[$value->id_boletin][$value->razon_social]->quien = $value->quien;
			
			$aux[$value->id_boletin][$value->razon_social]->id_fide .= $value->id_fide.',';
		}
		$edictos = $aux;		
		$mostrar_homonimos = true;
		
		$inscripcion_data = SQLConnection::backendStoreProcedure('obtener_inscripciones',array($cuit), true);
		$data_f = SQLConnection::backendStoreProcedure('obtener_persona',array($cuit), true);
		$domicilio = SQLConnection::backendStoreProcedure('sp_obtener_domicilios',array($cuit),true);
//		$provincia = str_contains($domicilio->tipo_domicilio,'F') ? $domicilio->prv_nombre : NULL;
//		$domicilio = str_contains($domicilio->tipo_domicilio,'F') ? $domicilio->domicilio : NULL;
$provincia = str_contains($domicilio->tipo_domicilio ?? '','F') ? $domicilio->prv_nombre : NULL;
$domicilio = str_contains($domicilio->tipo_domicilio ?? '','F') ? $domicilio->domicilio : NULL;
		return view('/produccion/edictos_asignacion')->with(compact('menu', 'cuit', 'nombre_persona', 'edictos', 'mostrar_homonimos', 'edictos_homonimos', 'malla_razon_social', 'ident','domicilio','data_f','inscripcion_data','tipo_persona','provincia'));
	}

	
	public static function obtenerEdictos23102024() {
		$menu = Misc::obtenerPermisosNavigator();
		$cuit = Request::Input('cuit');
		$nombre_persona = Request::Input('nombre_persona');
        $ident = Request::input("ident");
		$tipo_persona              = (substr($cuit,0,1) != '3') ? 'f' : 'j';

    
		$razon_social_todos        = [];  
		$razon_social              = Request::input('nombre_persona');
		$razon_social              = str_replace('#', 'ñ', $razon_social);
		$razon_social_todos[5]     = $razon_social;
		$razon_social_f            = Request::input('nombre_persona');
		$razon_social_f            = str_replace('#', 'ñ', $razon_social_f);
		$razon_social_f            = preg_replace('/\(|\)/','',$razon_social_f);
		$malla_razon_social        = $razon_social;

		$razon_social_completa     = '';
		$razon_social_explode      = explode(" ", $razon_social_f);

		$resultado_nombres_ant     = []; 
		//busca nombres anteriores de la empresa relacionados con el CUIT
		$nombres_anteriores = SQLConnection::backendCambiosNombres($cuit);
		$resultado_nombres_ant[] = $razon_social;
		if ($tipo_persona =='j') {
			$accionistas = SQLConnection::obtenerAccionistasNew($cuit);
			if ($nombres_anteriores) {       
				foreach ($nombres_anteriores as $nombre_ant) {
					$resultado_nombres_ant[] = $nombre_ant->nombre; 
				}
			}
		}
		else {
			$accionistas = ''; 
		}		

    	//Elimina de las combinaciones los valores que contienen una letra 
		$explode_aux = [];
		foreach ($razon_social_explode as $key => $value) {
			if(isset($value) && (strlen($value) > 1)) {
				$explode_aux[] = $value;
			}
		}

		$razon_social_explode = $explode_aux;	
		$edictos  = [];
		$edictos_homonimos = [];
		if($tipo_persona == 'j') {
 			$edictos = SQLConnection::backendStoreProcedure('backend_obtener_edictos',array($cuit),"select");		
		}
		else
		{
			$malla_societaria = SQLConnection::backendStoreProcedure('dbo.grafo_sociedades',array($cuit,$tipo_persona),"select");		
			$malla_societaria = self::quitarRepetidos($malla_societaria);
		}

		//P. FISICA
		if($tipo_persona == 'f') {

			$obtenerRazonSocial = SQLConnection::backendStoreProcedure('dbo.obtener_razon_social',array($cuit),"selectOne");		
			$apellidos = $obtenerRazonSocial->apellidos;
			$dni = $obtenerRazonSocial->dni;
			//elimina los 0 de adelante
			while (substr($dni,0,1) == '0')
			{
				$dni = substr($dni,1); 
			}



			// Edictos (buscamos los edictos en las empresas en los que la persona está como directivo)
			$cuits_empresas = [];
			foreach ($malla_societaria as $key => $value)
			{
				if ( !in_array($value->cuit,$cuits_empresas) && !empty($value->cuit) && !is_null($value->cuit) ){
					 array_push($cuits_empresas,$value->cuit);
				}
			}
		
			// 16/10/2024: Cuando tiene 2 apellidos buscar por c/u con un OR, porque en algunos casos en el edicto fugura un solo apellido que a veces es el segundo
	
		
			$apellidos_buscar = ''; 
			$array_apellidos = explode(" ", $apellidos);
			foreach($array_apellidos as $key => $rs){
				if (strlen($rs) > 2)
				{
					if ($apellidos_buscar !== '')
					{
					$apellidos_buscar .=  " OR \"".$rs."\""; 
					} 
					else 
					{
					$apellidos_buscar .=  "\"".$rs."\""; 
					}
				}
			}

			if ($apellidos_buscar == '')
			{
				$apellidos_buscar =  "\"".$apellidos."\""; 
			}
	
			foreach ($cuits_empresas as $key => $cuit_empresa) {
				$edictos_empresa = SQLConnection::backendStoreProcedure('obtener_edictos_con_integrante_mencionado', array($cuit_empresa, $cuit, $apellidos_buscar), false);	 
				$edictos = array_merge($edictos, $edictos_empresa);
			}

			/* Ordenamos los edictos por fecha de publicación descendente 
			porque los SP los trae en ese orden pero para cada cuit_empresa, 
			y al juntarlos todos, queda primero una empresa, después otra y cada una ordenada por fecha, 
			pero se quiere el orden de fecha general para todos los registros */

			array_multisort(array_column($edictos, 'fecha_boletin'), SORT_DESC, $edictos);


			// Edictos homónimos 


			$razon_social_explode = array_values($razon_social_explode);
			$resultado_razon_social    = Misc::resultadoCombinaciones($razon_social_explode);
			
			//Limita a 10 resultados las combinaciones en PF
			$resultado_razon_social = array_slice($resultado_razon_social, -10);
			$cant_resultado_razon_social = count($resultado_razon_social);

			if($cant_resultado_razon_social < 10){
				foreach($resultado_razon_social as $key => $rs){
					if(!(end($resultado_razon_social) == $rs)) {
						$razon_social_completa .='NEAR(('.str_replace(" ",",",$rs).'),0,true) OR ';
					}
					else {
						$razon_social_completa .= 'NEAR(('.str_replace(" ",",",$rs).'),0,true)';
					}
				}
			}
			else {
				$razon_social_completa = "\"".$razon_social_f."\"";		
			}
		}		
		
		// P. JURIDICA
		if($tipo_persona == 'j') {
			$sinonimos                 = Misc::diccionarioSinonimosTEST($resultado_nombres_ant);
			$count_sinonimo = count($sinonimos) - 1;
            
			foreach($sinonimos as $key => $rs) {
				if(!($key == $count_sinonimo)){
					$razon_social_completa .= $rs.'OR';
				}
				else {
					$razon_social_completa .= $rs;
				}
			}
			
			if(!$razon_social_completa){
				$razon_social_completa = "\"".$razon_social."\"";
			}			
  			$edictos_homonimos = SQLConnection::backendStoreProcedure('obtener_edictos_homonimos_conid',array($razon_social_completa),"select");			
		}
		else {
			//Edictos para PF
  			$edictos_homonimos =  SQLConnection::backendStoreProcedure('obtener_edictos_homonimos_conid',array($razon_social_completa),"select");			
  			/* Cambio desde aca */
			/*$edictos_mencionado_nombre = [];
			$edictos_mencionado_cuit = [];
			$edictos_mencionado_dni = [];
			$edictos_mencionado_nombre = SQLConnection::backendStoreProcedure('obtener_edictos_mencionado', array($razon_social_completa), false);	 
			// Busqueda por cuit y dni: Lo dejamos para mas adelante (porque muchas veces el mismo nro son numeros de actas o nada que ver...)
			//$edictos_mencionado_cuit = SQLConnection::obtenerEdictosMencionado("\"".$cuit."\"");
			//if (strlen($dni) > 4)
			//{
				//$edictos_mencionado_dni = SQLConnection::obtenerEdictosMencionado("\" ".$dni." \""); 
			//}
			
			$edictos_mencionado = array_merge($edictos_mencionado_nombre, $edictos_mencionado_cuit, $edictos_mencionado_dni);
			//$edictos_mencionado  = array_unique($edictos_mencionados);
			
			// Elimina los edictos de las empresas en las que es directivo o accionista porque ya se ven en Edictos
			foreach($edictos_mencionado as $key => $value){
					if (empty($value->cuit_soc) || is_null($value->cuit_soc) || !in_array($value->cuit_soc,$cuits_empresas))  
				  {
				  	$edictos_homonimos[$j] = new \stdClass;
				  	$edictos_homonimos[$j]->provincia_boletin = $value->provincia_boletin ?? '';
						$edictos_homonimos[$j]->fechab = $value->fecha_publicacion_DMY ?? '';
						$edictos_homonimos[$j]->razon_social = $value->razon_social ?? '';
						$edictos_homonimos[$j]->contenido_archivo = $value->contenido_archivo ?? '';
				  	$j++;
				  }
			}
			*/
			/* Cambio hasta acá */

			$sinonimos = $razon_social_completa; 
        }

		if($edictos_homonimos) {
			if($tipo_persona == 'f') {
				$edictos_homonimos = Misc::ResaltarResultadosEdictosHomonimosPF($edictos_homonimos,$resultado_razon_social);
            }
            else {
				$edictos_homonimos   = Misc::ResaltarResultadosEdictosHomonimosNombresAnt($edictos_homonimos, $sinonimos);
            }
        }
				
		$aux=[];
		foreach($edictos_homonimos as $key => $value){
			if(!isset($aux[$value->id_boletin][$value->razon_social])){
				$aux[$value->id_boletin][$value->razon_social] = new stdClass();
				$aux[$value->id_boletin][$value->razon_social]->id_fide = '';
			}
			$aux[$value->id_boletin][$value->razon_social]->id_boletin = $value->id_boletin;
			$aux[$value->id_boletin][$value->razon_social]->provincia_boletin = $value->provincia_boletin;
			$aux[$value->id_boletin][$value->razon_social]->fechab = $value->fechab;
			$aux[$value->id_boletin][$value->razon_social]->fecha_publicacion = $value->fecha_publicacion;
			$aux[$value->id_boletin][$value->razon_social]->contenido_archivo = $value->contenido_archivo;
			$aux[$value->id_boletin][$value->razon_social]->tabla = $value->tabla;
			$aux[$value->id_boletin][$value->razon_social]->quien = $value->quien;
			
			$aux[$value->id_boletin][$value->razon_social]->id_fide .= $value->id_fide.',';
		}
		
		$edictos_homonimos = $aux;
		$aux=[];
		if ($tipo_persona = 'j')
		{

		foreach($edictos as $key => $value){
			if(!isset($aux[$value->id_boletin][$value->razon_social])){
				$aux[$value->id_boletin][$value->razon_social] = new stdClass();
				$aux[$value->id_boletin][$value->razon_social]->id_fide = '';
			}
			$aux[$value->id_boletin][$value->razon_social]->cuit = $value->cuit;
			$aux[$value->id_boletin][$value->razon_social]->id_boletin = $value->id_boletin;
			$aux[$value->id_boletin][$value->razon_social]->provincia_boletin = $value->provincia_boletin;
			$aux[$value->id_boletin][$value->razon_social]->fechab = $value->fechab;
			$aux[$value->id_boletin][$value->razon_social]->fecha_publicacion = $value->fecha_publicacion;
			$aux[$value->id_boletin][$value->razon_social]->contenido_archivo = $value->contenido_archivo;
			$aux[$value->id_boletin][$value->razon_social]->tabla = $value->tabla;
			$aux[$value->id_boletin][$value->razon_social]->quien = $value->quien;
			
			$aux[$value->id_boletin][$value->razon_social]->id_fide .= $value->id_fide.',';
		}
		$edictos = $aux;		
		}
		$mostrar_homonimos = true;
		
		$inscripcion_data = SQLConnection::backendStoreProcedure('obtener_inscripciones',array($cuit), true);
		$data_f = SQLConnection::backendStoreProcedure('obtener_persona',array($cuit), true);
		$domicilio = SQLConnection::backendStoreProcedure('sp_obtener_domicilios',array($cuit),true);
		$domicilio = str_contains($domicilio->tipo_domicilio,'F') ? $domicilio->domicilio : NULL;
		return view('/produccion/edictos_asignacion')->with(compact('menu', 'cuit', 'nombre_persona', 'edictos', 'mostrar_homonimos', 'edictos_homonimos', 'malla_razon_social', 'ident','domicilio','data_f','inscripcion_data','tipo_persona'));
	}

	private static function esEx($n) {
    	return (preg_match('/^[a-z]{2}/', $n) == 1);
  	}
	public static function quitarRepetidos($malla_societaria) {
	    $nuevo = array();
	    //$malla_societaria     = SQLConnection::grafoSociedades('20076297534','F');
	    for ($i=0; $i<(count($malla_societaria)-1); $i++) {
	        if($malla_societaria[$i]->idNodoGrafo != $malla_societaria[$i+1]->idNodoGrafo) {
	            $nuevo[] = $malla_societaria[$i];
	        } else {
	          if(!self::esEx($malla_societaria[$i]->nombre_persona) and !self::esEx($malla_societaria[$i+1]->nombre_persona) and $malla_societaria[$i]->seccion != $malla_societaria[$i+1]->seccion) {
	            $nuevo[] = $malla_societaria[$i];
	          } else if(!self::esEx($malla_societaria[$i]->nombre_persona) and self::esEx($malla_societaria[$i+1]->nombre_persona)) {
	              $nuevo[] = $malla_societaria[$i];
	              $i++;
	          } else {
	              $nuevo[] = $malla_societaria[$i+1];
	              $i++;
	          }
	        }
	    }
	    if($nuevo[count($nuevo)-1]->nombre_persona != $malla_societaria[count($malla_societaria)-1]->nombre_persona and $nuevo[count($nuevo)-1]->seccion != $malla_societaria[count($malla_societaria)-1]->seccion) {
	      $nuevo[] = $malla_societaria[count($malla_societaria)-1];
	    } else if($nuevo[count($nuevo)-1]->seccion != $malla_societaria[count($malla_societaria)-1]->seccion) {
	      $nuevo[] = $malla_societaria[count($malla_societaria)-1];
	    } else if($nuevo[count($nuevo)-1]->nombre_persona != $malla_societaria[count($malla_societaria)-1]->nombre_persona) {
	      $nuevo[] = $malla_societaria[count($malla_societaria)-1];
	    }
	    return $nuevo;
  	}


	public static function edictosAsignarDesasignar() {		
		$accion = Request::input('accion');
		$cuit = Request::input('cuit');
		$nombre_persona = Request::input('nombre_persona');
		$lista_id = Request::input('lista_id');
		$tabla = Request::input('tabla');
		$quien = Request::input('quien');

		//remueve coma al final del string		
		if($lista_id[strlen($lista_id)-1] == ',') {
			$lista_id = substr($lista_id, 0, strlen($lista_id)-1);
		}		
		
		$temp = SQLConnection::backendStoreProcedure('backend_asigna_cuit_edictos_homonimos', array($accion, $cuit, $lista_id, $tabla, $quien), 'selectOne');

		return redirect('/produccion/edictos?cuit='.$cuit.'&nombre_persona='.urlencode($nombre_persona));
		//if (!$new_backend_blue) {
		//	return redirect('/produccion/edictos?cuit='.$cuit.'&nombre_persona='.urlencode($nombre_persona));
		//} else {
		//	return 1;
		//}
	}
	
	public function VerTablaBalanceNuevo(){						
		$nombre_persona = Request::Input('nombre_persona');
		$cuit = Request::Input('cuit');
		$id_balance = Request::input('id_balance');
		$tres_ulimos = 1;
		//$balances = SQLConnection::backendBalancesContablesid($id_balance);
		$user_id 	= Session::get("usuario")->user_id;
		$columnas = Request::input('columnas');
		$pp = null;
		$mb = null;
		if ($tres_ulimos == '1') {
			$balances = SQLConnection::backendStoreProcedure('LN_balances_data',array($cuit,null,null,$columnas));
			$columnas = count($balances);
		} else {
			$balances = SQLConnection::backendStoreProcedure('backend_balances_contables',array($id_balance,null,null,null,null,$user_id),"selectOne");
			$pp = $balances->patrimonio + $balances->pas_total;
			$mb = $balances->res_vtanet - $balances->res_cosmer; 
			$balances->anc_otrcre = $balances->anc_otrcre + $balances->anc_crevta; 
			$balances->pc_ctapag = $balances->pc_ctapag + $balances->pc_antcli; 
			if ($balances->res_resfin < 0)
			{ 
				$balances->res_otrosegr = $balances->res_otrosegr + ($balances->res_resfin * (-1)); 
			}
			else
			{
				$balances->res_otrosing = $balances->res_otrosing + $balances->res_resfin; 
			}
		}

		// La variable $cantidadBalances se agrego para en la actividad de la tarea de balances, se muestre la cantidad de balances - TB												
		$cantidadBalances = count($balances);
		return view('produccion/excel_balances_nuevo')->with(compact('balances','cuit','nombre_persona','pp','mb','tres_ulimos','columnas', 'cantidadBalances'));
	}

	#Version 3 del resumen empresarial
	#En esta version los ratios son variables, las columnas son variables 
	#Cada prompt puede tener una cantidad x de ratios - TB
	public static function resumenEmpresarial12092024() {		
		// Obtiene los valores de los campos del formulario
		$ocultos_balances_text_area = Request::input("ocultos_balances_text_area");
		$nombre_persona = Request::Input('nombre_persona');
		$cuit = Request::Input('cuit');
		$id_balance = Request::input('id_balance');
		$id_prompt = Request::input('id_prompt');
		$user_id = Session::get("usuario")->user_id;
		$tres_ulimos = 1;
		$columnas = null;
    	$id_tarea_prueba = null;


		// Verifica si se ha enviado el id de la tarea
		if(isset($_POST["idmitarea"]) and !empty($_POST["idmitarea"]) and $_POST["idmitarea"] != "undefined") {
			$id_tarea_prueba = $_POST["idmitarea"];
		} else {
			$id_tarea_prueba = 100783879;
		}

		// Obtiene el prompt correspondiente
		$prompt_correspondiente = SQLConnection::backendStoreProcedure('gestor_prompts', array('SELECT_ONE', null, null, null, null, null, null, null, $id_prompt));
		$prompt_correspondiente = $prompt_correspondiente[0];

		// Prepara los ratios
		$ratios_prompt = $prompt_correspondiente->lista_ind_balance;
		if(!is_null($ratios_prompt)) {
			$ratios_prompt = explode(",", $ratios_prompt);
		}
	
		// Obtiene las columnas
		// Si no se envia el dato, el analisis lo hace con las 3 columnas
		if($_POST["columnas"] != 0) {
			$columnas = Request::input('columnas');
		} else {
			$columnas = 3;
		}		
		
		$pp = null;
		$mb = null;

		// Obtiene los balances
		if ($tres_ulimos == '1') {			
			$balances = SQLConnection::backendStoreProcedure('LN_balances_data', array($cuit, null, null, $columnas));						
			$columnas = count($balances);			
		} else {
			$balances = SQLConnection::backendStoreProcedure('backend_balances_contables', array($id_balance, null, null, null, null, $user_id), "selectOne");
			$pp = $balances->patrimonio + $balances->pas_total;
			$mb = $balances->res_vtanet - $balances->res_cosmer;
			$balances->anc_otrcre = $balances->anc_otrcre + $balances->anc_crevta;
			$balances->pc_ctapag = $balances->pc_ctapag + $balances->pc_antcli;
			if ($balances->res_resfin < 0) {
				$balances->res_otrosegr = $balances->res_otrosegr + ($balances->res_resfin * (-1));
			} else {
				$balances->res_otrosing = $balances->res_otrosing + $balances->res_resfin;
			}
		}
		
		// Prepara los valores de los ratios
		if (!empty($ratios_prompt)) {
			$ratios = array_flip($ratios_prompt);
			$valores_ratios = [];
			foreach ($balances as $key => $balance) {
				$balance = (array)$balance;
				$valores_ratios[$key] = array_intersect_key($balance, $ratios);
				$valores_ratios[$key]['fecha_balance'] = $balance['fecha_balance'];
			}
		} else {
			$valores_ratios = [];
		}
		
		// Convierte los valores de los ratios a una cadena de texto
		if (!empty($valores_ratios)) {
			$datos_string_ratios = [];
			foreach (array_keys($valores_ratios[0]) as $key) {
				$string = "";
				foreach ($valores_ratios as $data) {
					$string .= $data[$key] . ", ";
				}
				$string = rtrim($string, ", ");
				$datos_string_ratios[$key] = $string;
			}
		} else {
			return json_encode(array("respuesta" => 'ERROR_VALORES_RATIOS'));
		}

		$ratios_nombres = SQLConnection::backendStoreProcedure('abm_nombre_ratios', array('SELECT_ALL'));		

		//$stringDatos;
		$stringDatos = "Cuentas \n";
		//
		$resultado = '';
		$secciones = [];

		foreach ($ratios_nombres as $item) {
			if (is_null($item->seccion)) {
				continue;
			}

			$seccion = $item->seccion;

			if (!isset($secciones[$seccion])) {
				$secciones[$seccion] = [];
			}

			$valorCampo = isset($datos_string_ratios[$item->nombre_campo]) ? $datos_string_ratios[$item->nombre_campo] : 'N/A';
			$item->valor = $valorCampo;
			
			$secciones[$seccion][] = $item;
		}

		foreach ($secciones as $seccion => $items) {
			$resultado .= strtoupper($seccion) . " (fecha_balance): {$datos_string_ratios['fecha_balance']}\n";

			foreach ($items as $item) {
				$resultado .= "- {$item->titulo_ratio} ({$item->nombre_campo}): {$item->valor}\n";
			}

			$resultado .= "\n"; 
		}
		$stringDatos = $resultado; 
		
		//
		/* $result = [];
		foreach ($ratios_nombres as $item) {
			if (is_object($item) && property_exists($item, 'nombre_campo') && property_exists($item, 'titulo_ratio')) {
				// Valida que 'nombre_campo' existe en el array
				if (array_key_exists($item->nombre_campo, $datos_string_ratios)) {
					// Concatena el index y el valor de cada elemento
					$result[] = $item->titulo_ratio . ': ' . $datos_string_ratios[$item->nombre_campo];
				}
			}
		} */

		// Crea un string donde cada elemento es separado por un /n
		//$stringDatos .= implode("\n", $result);

		// Inicio diseño prompt system
		$rol_empresarial = Request::input("rol_empresarial");
		$actividad_empresarial = Request::input("actividad_empresarial");
		$razon_social = Request::input("razon_social");
		
		$arrayPalabrasSytem = array($razon_social);
		$palabras_entre_llaves_system = [];
		$texto_system = $prompt_correspondiente->system_prompt;		

		preg_match_all('/\~(.*?)\~/', $texto_system, $palabras_entre_llaves_system);
		foreach ($palabras_entre_llaves_system[1] as $key => $palabra) {
			if (isset($arrayPalabrasSytem[$key])) {
				$texto_system = str_replace($palabra, $arrayPalabrasSytem[$key], $texto_system);
			}
		}
		//$texto_system = str_replace(["{", "}"], "", $texto_system);		
		$texto_system = str_replace(["~", "~"], "", $texto_system);		
		// Fin de prompt system

		// Inicio prompt assistant
		$palabras_entre_llaves_user = [];
		$texto_user = $prompt_correspondiente->user_prompt;																																													 		
		
		$request_data = array(
			'model' => $prompt_correspondiente->ai_provider,
			'messages' => array(
				array('role' => 'system', 'content' => $texto_system),																																																																							
				array('role' => 'user', 'content' => $texto_user),
				array('role' => 'assistant', 'content' => $stringDatos)
			),
			'max_tokens' => $prompt_correspondiente->ai_provider == 'gpt-4o' ? 4090 : 5000,
			'temperature' => 0
		);
		
		// Convertir los datos a formato JSON
		$data_string = json_encode($request_data);

		// URL de la API de ChatGPT
		$url = 'https://api.openai.com/v1/chat/completions';

		// Cabeceras de la solicitud
		$headers = array(
			"Content-Type: application/json",
			"OpenAI-Organization: " . env("Organization_CHATkey"),
			"Authorization: Bearer " . env("apiKey_chatgpt")
		);

		// Inicializar cURL
		$ch = curl_init();

		// Establecer opciones de cURL
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
		curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

		// Realizar la solicitud
		$response = curl_exec($ch);

		// Comprobar si hubo errores
		if(curl_errno($ch)) {
			echo 'Error:' . curl_error($ch);
		}

		// Cerrar la sesion cURL
		curl_close($ch);

		// Decodificar la respuesta JSON
		$decoded_response = json_decode($response, true);

		if (isset($decoded_response['error'])) {
			return json_encode(array("respuesta" => $decoded_response['error']['message']));			
		}else {
			// Imprimir la respuesta
			return json_encode(array("respuesta" => $decoded_response['choices'][0]['message']['content']));			
		} 		
	}	

	/**
	 * Genera un resumen empresarial con API OpenAI
	 *
	 * Esta funcion procesa balances contables, calcula ratios financieros y prepara un prompt para 
	 * generar un resumen utilizando un modelo de IA.
	 *
	 * @return string JSON que contiene la respuesta generada por el modelo de IA o un mensaje de error.
	 */
	public static function resumenEmpresarial23122024(){		
		// Obtiene los valores de los campos del formulario
		$ocultos_balances_text_area = Request::input("ocultos_balances_text_area");
		$nombre_persona = Request::Input('nombre_persona');
		$cuit = Request::Input('cuit');
		$id_balance = Request::input('id_balance');
		$id_prompt = Request::input('id_prompt');
		$user_id = Session::get("usuario")->user_id;
		$debugAnalisis = Request::input("debugAnalisis");
		$resetCache = Request::input("resetCache");						
		$tres_ulimos = 1;
		$columnas;
		$id_tarea_prueba;

		$id_tarea_prueba = isset($_POST["idmitarea"]) && !empty($_POST["idmitarea"]) && $_POST["idmitarea"] != "undefined" ? $_POST["idmitarea"] : 100783879;

		// Obtiene el prompt correspondiente
		$prompt_correspondiente = SQLConnection::backendStoreProcedure('gestor_prompts', array('SELECT_ONE', null, null, null, null, null, null, null, $id_prompt));
		$prompt_correspondiente = $prompt_correspondiente[0];		

		// Prepara los ratios
		$ratios_prompt = $prompt_correspondiente->lista_ind_balance;
		if (!is_null($ratios_prompt)) {
			$ratios_prompt = explode(",", $ratios_prompt);
		}

		// Obtiene las columnas
		// Si no se envia el dato, el analisis lo hace con las 3 columnas
		if ($_POST["columnas"] != 0) {
			$columnas = Request::input('columnas');
		} else {
			$columnas = 3;
		}		

		$pp = null;
		$mb = null;
		// Obtiene los balances
		if ($tres_ulimos == '1') {			
			$balances = SQLConnection::backendStoreProcedure('LN_balances_data', array($cuit, null, null, $columnas));						
			$columnas = count($balances);			
		} else {
			$balances = SQLConnection::backendStoreProcedure('backend_balances_contables', array($id_balance, null, null, null, null, $user_id), "selectOne");
			$pp = $balances->patrimonio + $balances->pas_total;
			$mb = $balances->res_vtanet - $balances->res_cosmer;
			$balances->anc_otrcre = $balances->anc_otrcre + $balances->anc_crevta;
			$balances->pc_ctapag = $balances->pc_ctapag + $balances->pc_antcli;
			if ($balances->res_resfin < 0) {
				$balances->res_otrosegr = $balances->res_otrosegr + ($balances->res_resfin * (-1));
			} else {
				$balances->res_otrosing = $balances->res_otrosing + $balances->res_resfin;
			}
		}


		// Prepara los valores de los ratios
		if (!empty($ratios_prompt)) {
			$ratios = array_flip($ratios_prompt);
			$valores_ratios = [];
			foreach ($balances as $key => $balance) {
				$balance = (array)$balance;
				$valores_ratios[$key] = array_intersect_key($balance, $ratios);
				$valores_ratios[$key]['fecha_balance'] = $balance['fecha_balance'];
			}
		} else {
			$valores_ratios = [];
		}

		// Convierte los valores de los ratios a una cadena de texto
		if (!empty($valores_ratios)) {
			$datos_string_ratios = [];
			foreach (array_keys($valores_ratios[0]) as $key) {
				$string = "";
				foreach ($valores_ratios as $data) {
					$string .= $data[$key] . ", ";
				}
				$string = rtrim($string, ", ");
				$datos_string_ratios[$key] = $string;
			}
		} else {
			return json_encode(array("respuesta" => 'ERROR_VALORES_RATIOS'));
		}

		$ratios_nombres = SQLConnection::backendStoreProcedure('abm_nombre_ratios', array('SELECT_ALL'));		

		$stringDatos;
		$stringDatos = "Cuentas \n";
		//
		/* $resultado = ''; 
		$secciones = []; 

		// Itera sobre cada elemento en el array $ratios_nombres
		foreach ($ratios_nombres as $item) {
			// Si la seccion del item es nula, salta a la siguiente iteracion
			if (is_null($item->seccion)) {
				continue; 
			}

			// Asigna la seccion del item a la variable $seccion
			$seccion = $item->seccion; 

			// Si la seccion no esta ya en el array $secciones, la inicializa como un array vacio
			if (!isset($secciones[$seccion])) {
				// Crea un nuevo array para la seccion
				$secciones[$seccion] = []; 
			}

			// Obtiene el valor del campo, si no existe, asigna 'N/A'
			$valorCampo = isset($datos_string_ratios[$item->nombre_campo]) ? $datos_string_ratios[$item->nombre_campo] : 'N/A';
			$item->valor = $valorCampo; // Asigna el valor al item

			// Agrega el item al array de secciones correspondiente
			// Agrega el item a la seccion correspondiente
			$secciones[$seccion][] = $item; 
		}

		// Itera sobre cada seccion y sus items
		foreach ($secciones as $seccion => $items) {
			// Agrega el nombre de la seccion y la fecha de balance al resultado
			$resultado .= strtoupper($seccion) . " (fecha_balance): {$datos_string_ratios['fecha_balance']}\n";

			// Itera sobre cada item en la seccion
			foreach ($items as $item) {
				// Agrega el titulo del ratio y su valor al resultado
				$resultado .= "- {$item->titulo_ratio} ({$item->nombre_campo}): {$item->valor}\n";
			}

			// Agrega una nueva linea para separar secciones
			$resultado .= "\n"; 
		}*/
		//
		// Inicializamos variables para almacenar el resultado final
		$resultado = '';
		$secciones = [];

		// Recorremos el array para agrupar los elementos por sección
		foreach ($ratios_nombres as $item) {
			// Ignoramos los elementos con sección 'Sin Sección'
			if (is_null($item->seccion)) {
				continue;
			}

			$seccion = $item->seccion;

			if (!isset($secciones[$seccion])) {
				$secciones[$seccion] = [];
			}
			
			$valorCampo = $datos_string_ratios[$item->nombre_campo] ?? null;

			if ($valorCampo !== null) {
			    $item->valor = $valorCampo;
			    $secciones[$seccion][] = $item;
			}
			/* // Añadimos el valor correspondiente de $valores al objeto, si existe
			$valorCampo = isset($datos_string_ratios[$item->nombre_campo]) ? $datos_string_ratios[$item->nombre_campo] : 'N/A';
			$item->valor = $valorCampo;
			
			$secciones[$seccion][] = $item; */
		}

		// Creamos un string agrupado por sección
		foreach ($secciones as $seccion => $items) {
			// Añadimos el título de la sección con la fecha_balance
			$resultado .= strtoupper($seccion) . ": {$datos_string_ratios['fecha_balance']}\n";

			// Añadimos los elementos de la sección sin el nombre del campo
			foreach ($items as $item) {
				$resultado .= "- {$item->titulo_ratio}: {$item->valor}\n";
			}

			$resultado .= "\n"; // Separador entre secciones
		}
		$stringDatos = $resultado;	
		

		// Inicio prompt system
		$rol_empresarial = Request::input("rol_empresarial");
		$actividad_empresarial = Request::input("actividad_empresarial");
		$razon_social = Request::input("razon_social");

		$arrayPalabrasSytem = array($razon_social);
		$palabras_entre_llaves_system = [];
		$texto_system = $prompt_correspondiente->system_prompt;		

		preg_match_all('/\~(.*?)\~/', $texto_system, $palabras_entre_llaves_system);
		foreach ($palabras_entre_llaves_system[1] as $key => $palabra) {
			if (isset($arrayPalabrasSytem[$key])) {
				$texto_system = str_replace($palabra, $arrayPalabrasSytem[$key], $texto_system);
			}
		}
		$texto_system = str_replace(["~", "~"], "", $texto_system);
		
		if (1 == $resetCache) {
			$texto_system = date("h:i:sa") . ' ' . $texto_system;
		}

		// Fin de prompt system

		// Inicio prompt assistant
		$palabras_entre_llaves_user = [];
		$texto_user = $prompt_correspondiente->user_prompt;	

		$request_data = array(
			'model' => $prompt_correspondiente->ai_provider,
			'messages' => array(
				array('role' => 'system', 'content' => $texto_system),																																																																							
				array('role' => 'user', 'content' => $texto_user),
				array('role' => 'assistant', 'content' => $stringDatos)
			),
			//'max_tokens' => $prompt_correspondiente->ai_provider == 'gpt-4o' ? 4000 : 5000,
			'max_completion_tokens' => $prompt_correspondiente->ai_provider == 'gpt-4o' ? 4000 : 5000,
			'temperature' => 0
		);

		// Convertir los datos a formato JSON
		$data_string = json_encode($request_data);

		// URL de la API de ChatGPT
		$url = 'https://api.openai.com/v1/chat/completions';

		// Cabeceras de la solicitud
		$headers = array(
			"Content-Type: application/json",
			"OpenAI-Organization: " . env("Organization_CHATkey"),
			"Authorization: Bearer " . env("apiKey_chatgpt")
		);

		// Inicializar cURL
		$ch = curl_init();

		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
		curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

		// Realizar la solicitud
		$response = curl_exec($ch);

		// Comprobar si hubo errores
		if (curl_errno($ch)) {
			echo 'Error:' . curl_error($ch);
		}

		curl_close($ch);

		$decoded_response = json_decode($response, true);

		if (isset($decoded_response['error'])) {			
			return json_encode(array("respuesta" => $decoded_response['error']['message']));			
		} else {
			if ($debugAnalisis == 1) {
				return json_encode(array(
					"respuesta" => $decoded_response['choices'][0]['message']['content'],
					"debugAnalisis" => $request_data
				));
			}else {
				return json_encode(array("respuesta" => $decoded_response['choices'][0]['message']['content']));
			}											
		} 		
	}	

	/**
	 * Genera un resumen empresarial con API OpenAI
	 *
	 * Esta funcion procesa balances contables, calcula ratios financieros y prepara un prompt para 
	 * generar un resumen utilizando un modelo de IA.
	 *
	 * @return string JSON que contiene la respuesta generada por el modelo de IA o un mensaje de error.
	 */
	public static function resumenEmpresarial(){		
		// Obtiene los valores de los campos del formulario
		$ocultos_balances_text_area = Request::input("ocultos_balances_text_area");
		$nombre_persona = Request::Input('nombre_persona');
		$cuit = Request::Input('cuit');
		$id_balance = Request::input('id_balance');
		$id_prompt = Request::input('id_prompt');
		$user_id = Session::get("usuario")->user_id;
		$debugAnalisis = Request::input("debugAnalisis");
		$resetCache = Request::input("resetCache");						
		$tres_ulimos = 1;
		$columnas;
		$id_tarea_prueba;

		$id_tarea_prueba = isset($_POST["idmitarea"]) && !empty($_POST["idmitarea"]) && $_POST["idmitarea"] != "undefined" ? $_POST["idmitarea"] : 100783879;

		// Obtiene el prompt correspondiente
		$prompt_correspondiente = SQLConnection::backendStoreProcedure('gestor_prompts', array('SELECT_ONE', null, null, null, null, null, null, null, $id_prompt));
		$prompt_correspondiente = $prompt_correspondiente[0];		

		// Prepara los ratios
		$ratios_prompt = $prompt_correspondiente->lista_ind_balance;
		if (!is_null($ratios_prompt)) {
			$ratios_prompt = explode(",", $ratios_prompt);
		}

		// Obtiene las columnas
		// Si no se envia el dato, el analisis lo hace con las 3 columnas
		if ($_POST["columnas"] != 0) {
			$columnas = Request::input('columnas');
		} else {
			$columnas = 3;
		}		

		$pp = null;
		$mb = null;
		// Obtiene los balances
		if ($tres_ulimos == '1') {			
			$balances = SQLConnection::backendStoreProcedure('LN_balances_data', array($cuit, null, null, $columnas));						
			$columnas = count($balances);			
		} else {
			$balances = SQLConnection::backendStoreProcedure('backend_balances_contables', array($id_balance, null, null, null, null, $user_id), "selectOne");
			$pp = $balances->patrimonio + $balances->pas_total;
			$mb = $balances->res_vtanet - $balances->res_cosmer;
			$balances->anc_otrcre = $balances->anc_otrcre + $balances->anc_crevta;
			$balances->pc_ctapag = $balances->pc_ctapag + $balances->pc_antcli;
			if ($balances->res_resfin < 0) {
				$balances->res_otrosegr = $balances->res_otrosegr + ($balances->res_resfin * (-1));
			} else {
				$balances->res_otrosing = $balances->res_otrosing + $balances->res_resfin;
			}
		}


		// Prepara los valores de los ratios
		if (!empty($ratios_prompt)) {
			$ratios = array_flip($ratios_prompt);
			$valores_ratios = [];
			foreach ($balances as $key => $balance) {
				$balance = (array)$balance;
				$valores_ratios[$key] = array_intersect_key($balance, $ratios);
				$valores_ratios[$key]['fecha_balance'] = $balance['fecha_balance'];
			}
		} else {
			$valores_ratios = [];
		}

		// Convierte los valores de los ratios a una cadena de texto
		if (!empty($valores_ratios)) {
			$datos_string_ratios = [];
			foreach (array_keys($valores_ratios[0]) as $key) {
				$string = "";
				foreach ($valores_ratios as $data) {
					$string .= $data[$key] . ", ";
				}
				$string = rtrim($string, ", ");
				$datos_string_ratios[$key] = $string;
			}
		} else {
			return json_encode(array("respuesta" => 'ERROR_VALORES_RATIOS'));
		}

		$ratios_nombres = SQLConnection::backendStoreProcedure('abm_nombre_ratios', array('SELECT_ALL'));		

		$stringDatos;
		$stringDatos = "Cuentas \n";
		
		// Inicializamos variables para almacenar el resultado final
		$resultado = '';
		$secciones = [];

		// Recorremos el array para agrupar los elementos por sección
		foreach ($ratios_nombres as $item) {
			// Ignoramos los elementos con sección 'Sin Sección'
			if (is_null($item->seccion)) {
				continue;
			}

			$seccion = $item->seccion;

			if (!isset($secciones[$seccion])) {
				$secciones[$seccion] = [];
			}
			
			$valorCampo = $datos_string_ratios[$item->nombre_campo] ?? null;

			if ($valorCampo !== null) {
			    $item->valor = $valorCampo;
			    $secciones[$seccion][] = $item;
			}			
		}

		// Creamos un string agrupado por sección
		foreach ($secciones as $seccion => $items) {
			// Añadimos el título de la sección con la fecha_balance
			$resultado .= strtoupper($seccion) . ": {$datos_string_ratios['fecha_balance']}\n";

			// Añadimos los elementos de la sección sin el nombre del campo
			foreach ($items as $item) {
				$resultado .= "- {$item->titulo_ratio}: {$item->valor}\n";
			}

			$resultado .= "\n"; // Separador entre secciones
		}

		$stringDatos = $resultado;			

		// Inicio prompt system
		$rol_empresarial = Request::input("rol_empresarial");
		$actividad_empresarial = Request::input("actividad_empresarial");
		$razon_social = Request::input("razon_social");

		$arrayPalabrasSytem = array($razon_social);
		$palabras_entre_llaves_system = [];
		$texto_system = $prompt_correspondiente->system_prompt;		

		preg_match_all('/\~(.*?)\~/', $texto_system, $palabras_entre_llaves_system);
		foreach ($palabras_entre_llaves_system[1] as $key => $palabra) {
			if (isset($arrayPalabrasSytem[$key])) {
				$texto_system = str_replace($palabra, $arrayPalabrasSytem[$key], $texto_system);
			}
		}
		$texto_system = str_replace(["~", "~"], "", $texto_system);
		
		if (1 == $resetCache) {
			$texto_system = date("h:i:sa") . ' ' . $texto_system;
		}
		// Fin de prompt system

		// Inicio prompt assistant
		$palabras_entre_llaves_user = [];
		$texto_user = $prompt_correspondiente->user_prompt;	

		$tokens = $prompt_correspondiente->ai_provider == 'gpt-4o' ? 4000 : 5000;
		$request_data = OpenAiController::formateoCompletions($prompt_correspondiente->ai_provider,$texto_system,$texto_user,$stringDatos,$tokens);
		$datosDebug = json_decode($request_data);
		// Convertir los datos a formato JSON
		$data_string = $request_data;
		$decoded_response = OpenAiController::completionsEndpoint($data_string);

		if (isset($decoded_response['error'])) {			
			return json_encode(array("respuesta" => $decoded_response['error']['message']));			
		} else {
			if ($debugAnalisis == 1) {
				return json_encode(array(
					"respuesta" => $decoded_response['choices'][0]['message']['content'],
					"debugAnalisis" => $datosDebug
				));
			}else {
				return json_encode(array("respuesta" => $decoded_response['choices'][0]['message']['content']));
			}											
		} 		
	}

	public static function guardarResultado22102024() {
		try {
			// Obtener las entradas de manera segura
			$idUltimoBalance = Request::input('idUltimoBalance');
			$ultimaFechaBalance = Request::input('ultimaFechaBalance');
			$textoAnalisisBalance = Request::input('div_resumen_chatGpt_balances');			
	
			// Validar entradas
			if (is_null($idUltimoBalance) || is_null($textoAnalisisBalance)) {
				throw new Exception("Faltan datos necesarios para guardar el resultado.");
			}
						
			// Procesar texto del analisis
			// Agregar 'Powered by ChatGPT'
			if (!empty($textoAnalisisBalance)) {
				// Separa por idioma el analisis
				$textoAnalisisBalance = self::separarTextoPorIdioma($textoAnalisisBalance);				
				$textoAnalisisBalanceEsp = self::limpiarTexto($textoAnalisisBalance['espanol']);				
				if(empty($textoAnalisisBalanceEsp)){
					throw new Exception("El texto en español es requerido.");
				}else{
					$textoAnalisisBalanceEsp .= " Powered by ChatGPT";
				}				
				
				$textoAnalisisBalanceIng = self::limpiarTexto($textoAnalisisBalance['ingles']);
				if(!empty($textoAnalisisBalanceIng)){
					$textoAnalisisBalanceIng .= " Powered by ChatGPT";					
				}else {
					$textoAnalisisBalanceIng = NULL;
				}
			} else {
				$textoAnalisisBalanceEsp = '';
				$textoAnalisisBalanceIng = NULL;
			}
			
			// Guardar en la base de datos
			SQLConnection::backendStoreProcedure('balances_analisis', array($idUltimoBalance, $textoAnalisisBalanceEsp, $textoAnalisisBalanceIng));
	
			// Enviar respuesta con exito
			echo json_encode(array("error" => 0, "mensaje" => "Se ha guardado satisfactoriamente el resultado"));
		} catch (Exception $e) {
			// Manejo de errores y enviar respuesta de error
			echo json_encode(array("error" => 1, "mensaje" => $e->getMessage()));
		}
	}

	public static function guardarResultado20032025() {
		try {
			// Obtener las entradas de manera segura
			$idUltimoBalance = Request::input('idUltimoBalance');
			$ultimaFechaBalance = Request::input('ultimaFechaBalance');
			$textoAnalisisBalance = Request::input('div_resumen_chatGpt_balances');			
	
			// Validar entradas
			if (is_null($idUltimoBalance) || is_null($textoAnalisisBalance)) {
				throw new Exception("Faltan datos necesarios para guardar el resultado.");
			}
						
			// Procesar texto del analisis
			// Agregar 'Powered by ChatGPT'
			if (!empty($textoAnalisisBalance)) {							
				$textoAnalisisBalance .= " Powered by ChatGPT";																
			}
			
			// Guardar en la base de datos
			SQLConnection::backendStoreProcedure('balances_analisis', array($idUltimoBalance, $textoAnalisisBalance));
	
			// Enviar respuesta con exito
			echo json_encode(array("error" => 0, "mensaje" => "Se ha guardado satisfactoriamente el resultado"));
		} catch (Exception $e) {
			// Manejo de errores y enviar respuesta de error
			echo json_encode(array("error" => 1, "mensaje" => $e->getMessage()));
		}
	}

	public static function guardarResultado() {		
		try {
			// Obtener las entradas de manera segura
			$idUltimoBalance = Request::input('idUltimoBalance');
			$ultimaFechaBalance = Request::input('ultimaFechaBalance');
			$textoAnalisisBalance = Request::input('div_resumen_chatGpt_balances');	
			$textoEconomico = Request::input('resumen_economico');
			$textoFinanciero = Request::input('resumen_financiero');
			$textoPatrimonial = Request::input('resumen_patrimonial');
			$textoRatios = Request::input('resumen_ratios');		
			
			// Validar entradas
			if (is_null($idUltimoBalance) || is_null($textoAnalisisBalance)) {
				throw new Exception("Faltan datos necesarios para guardar el resultado.");
			}
						
			// Procesar texto del analisis
			// Agregar 'Powered by ChatGPT'
			if (!empty($textoAnalisisBalance)) {							
				$textoAnalisisBalance .= " Powered by ChatGPT";																
			}

			// Guardar en la base de datos
			SQLConnection::backendStoreProcedure('balances_analisis', array($idUltimoBalance, $textoAnalisisBalance,null,$textoRatios,$textoFinanciero,$textoEconomico,$textoPatrimonial));
	
			// Enviar respuesta con exito
			echo json_encode(array("error" => 0, "mensaje" => "Se ha guardado satisfactoriamente el resultado"));
		} catch (Exception $e) {
			// Manejo de errores y enviar respuesta de error
			echo json_encode(array("error" => 1, "mensaje" => $e->getMessage()));
		}
	}

	public static function separarTextoPorIdioma($texto) {		
		// Expresion regular para separar el texto en las secciones por idioma				
		//$pattern = '/(?:#\s*ESPAÑOL|ESPAÑOL)\s*([\s\S]*?)\s*(?:---|—)\s*(?:#\s*ENGLISH|ENGLISH)\s*([\s\S]*)/';
		$pattern = '/(?:# ESPAÑOL|ESPAÑOL)\r?\n([\s\S]*?)\r?\n(?:---|---\r?\n)\r?\n(?:# INGLES|INGLES)\r?\n([\s\S]*)/';
		preg_match($pattern, $texto, $matches);		
		// Verifica si se encontraron las secciones
		if (count($matches) >= 3) {
			$espanol = trim($matches[1]); // Texto en español
			$ingles = trim($matches[2]); // Texto en inglés
			return [
				'espanol' => $espanol,
				'ingles' => $ingles
			];
		} else {
			// No se encontraron las secciones
			return [
				'espanol' => '',
				'ingles' => ''
			];
		}
	}

	public static function limpiarTexto($texto) {
		// Reemplaza \r\n, \r, \n por un solo espacio
		$textoLimpio = preg_replace("/\r\n|\r|\n/", ' ', $texto);
		
		// Reemplaza varios espacios en blanco por uno solo
		$textoLimpio = preg_replace('/\s+/', ' ', $textoLimpio);
		
		// Elimina espacios al inicio y al final del texto
		$textoLimpio = trim($textoLimpio);
		
		return $textoLimpio;
	}

	public static function Vistabalanceschatgpt(){		
		$token_id_usuario 	 = MainController::obtenerParametrosInformeComercial();
		$token_por_secciones = Misc::obtenerTokenSeccion('contables');
		//$token_por_secciones 	= json_decode(Misc::decrypt($token_por_secciones));
		$menu = Misc::obtenerPermisosNavigator();
    	//valido si el usuario tiene el permiso correspondiente para acceder a la sección solicitada.
		$task_id = Request::Input('task_id');
    	$user_id 		= Session::get("usuario")->user_id;
        $valido =  Misc::restriccionPermiso('BALANCE');
        if(!$valido && !$task_id){ return redirect('/menu'); }
		$cuit = Request::Input('cuit');
		$nombre_persona = Request::Input('nombre_persona');
		$anios= 50;
		$visible = 1;
		

		$balances = SQLConnection::backendStoreProcedure('backend_balances_contables',array(null,$cuit,$anios,$visible,$task_id,$user_id),"select");

		self::$monedas  = SQLConnection::obtenerMonedas();
		$monedas = self::$monedas;
		$ruta_archivo = ENV('RUTA_ARCHIVO_PDF').'/balances/'.$cuit; 
		$balances2 = [];
		
		if ($task_id != null && $task_id != 0 && isset($menu['BALANCE'])){
			$balances2 = SQLConnection::backendStoreProcedure('backend_balances_contables',array(null,$cuit,$anios,$visible,'',$user_id),"select");
		}
		
		$datos = array('seleccionar',null,null,null,null,null,null,null,null); 
        $datos_prompt = SQLConnection::backendStoreProcedure('gestor_prompts',$datos);        
		//		
		$balanceSinCarga = false;

		foreach ($balances as $item) {
		    if (isset($item->cargar_datos) && $item->cargar_datos == 0) {
		        $balanceSinCarga = true;
		        break; 
		    }
		}

		return view('/busqueda_padron_generico_led/balances_vista_analisis')->with(compact('balances','balances2','anios','visible','monedas','ruta_archivo','menu','cuit','nombre_persona','token_por_secciones','token_id_usuario','task_id','user_id','datos_prompt', 'balanceSinCarga'));
	}

	/**
	 * Función anterior que se usaba para alta de balances
	 */
	public function altaBalancesDirectoBkp(){
		$user_id 		= Session::get("usuario")->user_id;
	   //$id_padron 	= Session::get("id_padron");
	   $id_padron 	= null;
	   $id_balance = Request::input("id_balance");
	   $cuit 			= Request::input('cuit');
	   $nombre_persona = Request::Input('nombre_persona');
	   $accion 		= Request::input('accion'); 
	   $anios 			= Request::input('anios');
	   $visible 		= Request::input('visible');
	   $usuario_tarea  = Request::Input('usuario_tarea_alta');
	   $estado_actual   = 	Request::input('grabar_estado');

   
   
	   $valores = [];
	   $valores['cuit']			= $cuit; 
	   $valores['id_padron']	= $id_padron; 
	   $valores['user_id']		= $user_id; 

	   //var_dump(request()->except('_token','accion','anios','visible','usuario','cuit','nombre_persona','task_id','usuario_tarea_alta')); 
	   //die(); 

	   // SE DEFIENEN VARIABLES NUEVAS DE VALORES
	   $rec_fin_cash = '';
	   $rec_fin_no_cash = '';
	   $rec_pam = '';
	   //

	   foreach (request()->except('_token','accion','anios','visible','usuario','cuit','nombre_persona','task_id','usuario_tarea_alta') as $key => $valor) {
		   $parte = substr($key, 0,4);
		   //if ($parte != "ind_") { 
			   $valor=str_replace(",", "", $valor);
		   //}
		   //
		   if (empty($valor)) {
			   //$valor = '0';
			   $valor = NULL;
		   }
		   if ($key=="bal_man" and $valor == null) { $valor = "B";} 
		   //
		   if ( $key == 'res_fin_cash' ){
			   $rec_fin_cash = $valor;
			   continue;
		   }
		   //
		   if ( $key == 'res_fin_no_cash' ){
			   $rec_fin_no_cash = $valor;
			   continue;
		   }
		   //
		   if ( $key == 'rec_pam' ){
			   $rec_pam = $valor;
			   continue;
		   }
		   $valores[$key]=$valor;
	   }

	 //var_dump($valores); die(); 
	   if($accion == 'M')
	   {
			if ($user_id == $usuario_tarea)
			{
		$valores['tarea_otro'] = 'tarea'; 
			}
			else 
			{
		$valores['tarea_otro'] = 'otro'; 
			}
	 }

		 //var_dump($valores);die();
		$valores=array_values($valores);
		 // SE AGREGAN LOS NUEVOS CAMPOS AL FINAL DEL ARRAY
		 array_push($valores,$rec_fin_cash);
	   array_push($valores,$rec_fin_no_cash);
	   array_push($valores,$rec_pam);

	   $task_id = Request::Input('task_id');
		 //
	   if($accion == 'A'){
		   //$estado_anterior->estado = ''; 
		   $store_procedure = 'backend_alta_balances_contables';
		   $mensaje_balances = SQLConnection::backendStoreProcedure($store_procedure,$valores,"selectOne");
	   } else {
			 $estado_anterior = SQLConnection::backendStoreProcedure('backend_estado_balances_contables',array($id_balance),"selectOne");
		   $store_procedure = 'backend_modificacion_balances_contables';
		   $mensaje_balances = SQLConnection::backendStoreProcedure($store_procedure,$valores,"selectOne");		
	   }	
	   
	   $anios= 50;
	   $visible = 1;

	   $menu = Misc::obtenerPermisosNavigator();
	   //$balances = SQLConnection::backendBalancesContables($cuit,$anios,$visible,$task_id);
	   $balances = SQLConnection::backendStoreProcedure('backend_balances_contables',array(null,$cuit,$anios,$visible,$task_id,$user_id),"select");

	   $balances2 = [];
	   if ($task_id != null && $task_id != 0 && isset($menu['BALANCE']))
	   {
		   //$balances2 = SQLConnection::backendBalancesContables($cuit,$anios,$visible,'');
		   $balances2 = SQLConnection::backendStoreProcedure('backend_balances_contables',array(null,$cuit,$anios,$visible,'',$user_id),"select");
	   }
	   // Avisar a LED - cambio en balance
	   if ((isset($estado_anterior->estado) && $estado_anterior->estado == 'PUBLICADO') || (isset($estado_actual) && $estado_actual == 'PUBLICADO'))
	   {
	   self::llamarLED($cuit); 
	   }
		// return json_encode(array('error' => $mensaje_balances->error,'mensaje' => $mensaje_balances->mensaje,
		// 'tabla' => view('produccion/tabla_balances')->with(compact('balances','balances2','visible','anios','cuit','nombre_persona','task_id','menu','user_id'))->render()
		// ));
		return json_encode(array('error' => $mensaje_balances->error,'mensaje' => $mensaje_balances->mensaje));
   
   	}

	/**
	 * Función que se usa para alta de balances (es la que se usaba en el viejo y funciona mejor que la anterior)
	 */
	public function altaBalancesDirecto(){
		$user_id 		= Session::get("usuario")->user_id;
	   //$id_padron 	= Session::get("id_padron");
	   $id_padron 	= null;
	   $id_balance = Request::input("id_balance");
	   $cuit 			= Request::input('cuit');
	   $nombre_persona = Request::Input('nombre_persona');
	   $accion 		= Request::input('accion'); 
	   $anios 			= Request::input('anios');
	   $visible 		= Request::input('visible');
	   $usuario_tarea  = Request::Input('usuario_tarea_alta');
	   $estado_actual   = 	Request::input('grabar_estado');

	   $tipoBalance = Request::input('tipoBalance');
	   $sinCargaDatos = Request::input('sinCargaDatos') === NULL ? 1 : Request::input('sinCargaDatos');
   
	   $valores = [];
	   $valores['cuit']			= $cuit; 
	   $valores['id_padron']	= $id_padron; 
	   $valores['user_id']		= $user_id; 

	   //var_dump(\Input::except('_token','accion','anios','visible','usuario','cuit','nombre_persona','task_id','usuario_tarea_alta')); 
	   //die(); 

	   // SE DEFIENEN VARIABLES NUEVAS DE VALORES
	   $rec_fin_cash = '';
	   $rec_fin_no_cash = '';
	   $rec_pam = '';
	   //

	   foreach (request()->except('_token','accion','anios','visible','usuario','cuit','nombre_persona','task_id','usuario_tarea_alta','tipoBalance','sinCargaDatos') as $key => $valor) {
		   $parte = substr($key, 0,4);
		   //if ($parte != "ind_") { 
			   $valor=str_replace(",", "", $valor);
		   //}
		   //
		   if (empty($valor)) {
			   //$valor = '0';
			   $valor = NULL;
		   }
		   if ($key=="bal_man" and $valor == null) { $valor = "B";} 
		   //
		   if ( $key == 'res_fin_cash' ){
			   $rec_fin_cash = $valor;
			   continue;
		   }
		   //
		   if ( $key == 'res_fin_no_cash' ){
			   $rec_fin_no_cash = $valor;
			   continue;
		   }
		   //
		   if ( $key == 'rec_pam' ){
			   $rec_pam = $valor;
			   continue;
		   }
		   $valores[$key]=$valor;
	   }

	 //var_dump($valores); die(); 
	   if($accion == 'M')
	   {
			if ($user_id == $usuario_tarea)
			{
		$valores['tarea_otro'] = 'tarea'; 
			}
			else 
			{
		$valores['tarea_otro'] = 'otro'; 
			}
	 }

		 //var_dump($valores);die();
		$valores=array_values($valores);
		 // SE AGREGAN LOS NUEVOS CAMPOS AL FINAL DEL ARRAY
		array_push($valores,$rec_fin_cash);
	   	array_push($valores,$rec_fin_no_cash);
	   	array_push($valores,$rec_pam);

	   	array_push($valores,$sinCargaDatos);
		array_push($valores,$tipoBalance);

	   $task_id = Request::Input('task_id');
	   
		
		if($accion == 'A'){
			$estado_anterior = new stdClass(); 
			$estado_anterior->estado = ''; 
			$store_procedure = 'backend_alta_balances_contables';
			$mensaje_balances = SQLConnection::backendStoreProcedure($store_procedure, $valores, "selectOne");
		} else {
			$estado_anterior = SQLConnection::backendStoreProcedure('backend_estado_balances_contables', array($id_balance), "selectOne");
			
			if (is_object($estado_anterior)) {
				$store_procedure = 'backend_modificacion_balances_contables';
				$mensaje_balances = SQLConnection::backendStoreProcedure($store_procedure, $valores, "selectOne");
			} else {
				$mensaje_balances = "Error: No se pudo obtener el estado anterior.";
			}
		}	
	   
	   $anios= 50;
	   $visible = 1;

	   //$menu = Misc::obtenerPermisosNavigator();
	   //$balances = SQLConnection::backendBalancesContables($cuit,$anios,$visible,$task_id);
	   //$balances = SQLConnection::backendStoreProcedure('backend_balances_contables',array(null,$cuit,$anios,$visible,$task_id,$user_id),"select");

		/* $balances2 = [];
		if ($task_id != null && $task_id != 0 && isset($menu['BALANCE']))
		{
			//$balances2 = SQLConnection::backendBalancesContables($cuit,$anios,$visible,'');
			$balances2 = SQLConnection::backendStoreProcedure('backend_balances_contables',array(null,$cuit,$anios,$visible,'',$user_id),"select");
		} */
	   // Avisar a LED - cambio en balance
	   if ((isset($estado_anterior->estado) && $estado_anterior->estado == 'PUBLICADO') || (isset($estado_actual) && $estado_actual == 'PUBLICADO'))
	   {
	   self::llamarLED($cuit); 
	   }
		// return json_encode(array('error' => $mensaje_balances->error,'mensaje' => $mensaje_balances->mensaje,
		// 'tabla' => view('produccion/tabla_balances')->with(compact('balances','balances2','visible','anios','cuit','nombre_persona','task_id','menu','user_id'))->render()
		// ));
		return json_encode(array('error' => $mensaje_balances->error,'mensaje' => $mensaje_balances->mensaje));
   
   	}

	public function modificarBalanceDirecto(){
		$nombre_persona = Request::Input('nombre_persona');
		$cuit = Request::Input('cuit');
		$id_balance = Request::input('id_balance');
		$task_id = Request::Input('task_id');
		$task_id1 = Request::Input('task_id1');
		//print_r('task_id1: '.$task_id1); 
		$fecha_inicio = Request::Input('fecha_inicio_tarea');
		$usuario_tarea  = Request::Input('usuario_tarea');
		$user_id 		    = Session::get("usuario")->user_id;
		if ($fecha_inicio == '')
				{ $fecha_inicio = null; }
		//$balances = SQLConnection::backendBalancesContablesid($id_balance);
		$balances = SQLConnection::backendStoreProcedure('backend_balances_contables',array($id_balance,null,null,null,null,$user_id),"selectOne");
		$monedas  = (self::$monedas) ? self::$monedas : SQLConnection::obtenerMonedas();
		
		/*
		$archivo = ENV('PATH_COMPARTIDO').'/'.$cuit.'/'.$balances->fecha_balance.'.pdf'; 
		$existe_pdf = false;

		if (file_exists($archivo)){
			$archivo = ENV('RUTA_ARCHIVO_PDF').'/'.$cuit.'/'.$balances->fecha_balance.'.pdf';
		$existe_pdf = true; 
		}
		else
		{
			$archivo = ENV('PATH_COMPARTIDO').'/'.$cuit.'/'.$task_id1.'.pdf';
		if (file_exists($archivo)){
			$archivo = ENV('RUTA_ARCHIVO_PDF').'/'.$cuit.'/'.$task_id1.'.pdf';
			$existe_pdf = true; 
		}
		} 
			
		$archivo = 	'https://backend.fidelitas.com.ar' . $archivo; 
		*/
		$archivo = ENV('PATH_COMPARTIDO').$balances->ruta_archivo; 
		$existe_pdf = false;
		if (file_exists($archivo)){
			$archivo = ENV('RUTA_ARCHIVO_PDF').$balances->ruta_archivo;
			$existe_pdf = true; 
		}

		if ($task_id != null && $task_id != 0 && $fecha_inicio == null && $usuario_tarea == $user_id) // solo se unicia la tarea, si usuario es el asignado
		{
			$fecha_inicio = SQLConnection::backendStoreProcedure('backend_iniciar_tarea',array($task_id),"selectOne");
		}
		return view('/busqueda_padron_generico_led/modal_balances')->with(compact('balances','monedas','existe_pdf','cuit','nombre_persona','task_id','archivo'));
	}

	public function VerTablaBalanceUno(){
		
		$nombre_persona = Request::Input('nombre_persona');
		$cuit = Request::Input('cuit');
		$id_balance = Request::input('id_balance');
		//$tres_ulimos = Request::input('ver_tres');
		$tres_ulimos = '0';
		//$balances = SQLConnection::backendBalancesContablesid($id_balance);
		$user_id 	= Session::get("usuario")->user_id;
		//$columnas = Request::input('columnas');
		$columnas = '1';
		$pp = null;
		$mb = null;
		
		$balances = SQLConnection::backendStoreProcedure('LN_balances_data',array($cuit,null,null,$columnas));			
		$columnas = count($balances);
		
		if ($tres_ulimos == '1') {			
			$balances = SQLConnection::backendStoreProcedure('LN_balances_data',array($cuit,null,null,$columnas));			
			$columnas = count($balances);
		} else {			
			$balances = SQLConnection::backendStoreProcedure('backend_balances_contables',array($id_balance,null,null,null,null,$user_id),"selectOne");
			$pp = $balances->patrimonio + $balances->pas_total;
			$mb = $balances->res_vtanet - $balances->res_cosmer; 
			$balances->anc_otrcre = $balances->anc_otrcre + $balances->anc_crevta; 
			$balances->pc_ctapag = $balances->pc_ctapag + $balances->pc_antcli; 
			if ($balances->res_resfin < 0)
			{ 
				$balances->res_otrosegr = $balances->res_otrosegr + ($balances->res_resfin * (-1)); 
			}
			else
			{
				$balances->res_otrosing = $balances->res_otrosing + $balances->res_resfin; 
			}
		}		
		return view('/busqueda_padron_generico_led/excel_balances')->with(compact('balances','cuit','nombre_persona','pp','mb','tres_ulimos','columnas'));
	}

	public function VerTablaBalanceUnoBkp(){
		
		$nombre_persona = Request::Input('nombre_persona');
		$cuit = Request::Input('cuit');
		$id_balance = Request::input('id_balance');
		$tres_ulimos = Request::input('ver_tres');
		//$balances = SQLConnection::backendBalancesContablesid($id_balance);
		$user_id 	= Session::get("usuario")->user_id;
		$columnas = Request::input('columnas');
		$pp = null;
		$mb = null;
		
		if ($tres_ulimos == '1') {			
			$balances = SQLConnection::backendStoreProcedure('LN_balances_data',array($cuit,null,null,$columnas));			
			$columnas = count($balances);
		} else {			
			$balances = SQLConnection::backendStoreProcedure('backend_balances_contables',array($id_balance,null,null,null,null,$user_id),"selectOne");
			$pp = $balances->patrimonio + $balances->pas_total;
			$mb = $balances->res_vtanet - $balances->res_cosmer; 
			$balances->anc_otrcre = $balances->anc_otrcre + $balances->anc_crevta; 
			$balances->pc_ctapag = $balances->pc_ctapag + $balances->pc_antcli; 
			if ($balances->res_resfin < 0)
			{ 
				$balances->res_otrosegr = $balances->res_otrosegr + ($balances->res_resfin * (-1)); 
			}
			else
			{
				$balances->res_otrosing = $balances->res_otrosing + $balances->res_resfin; 
			}
		}		
		return view('/busqueda_padron_generico_led/excel_balances')->with(compact('balances','cuit','nombre_persona','pp','mb','tres_ulimos','columnas'));
	}

	
	/**
	 * Muestra la tabla de balance directo.
	 * 
	 * @return \Illuminate\View\View
	 */
	public function VerTablaBalancedirecto() {
		// Obtener parametros de entrada
		$nombre_contraparte = Request::Input('nombre_persona');
		$identificacion = Request::Input('cuit');
		$id_balance = Request::input('id_balance');
		$tres_ulimos = Request::input('ver_tres');
		$user_id = Session::get("usuario")->user_id;
		$columnas = Request::input('columnas');
		$pp = null;
		$mb = null;

		// Obtener los balances y calculo de valores segun la opcion 'tres_ulimos'
		if ($tres_ulimos == '1') {
			$balances = SQLConnection::backendStoreProcedure('LN_balances_data', [$identificacion, null, null, $columnas]);
			$columnas = count($balances);
		} else {
			$balances = SQLConnection::backendStoreProcedure('backend_balances_contables', [$id_balance, null, null, null, null, $user_id], "selectOne");
			$pp = $balances->patrimonio + $balances->pas_total;
			$mb = $balances->res_vtanet - $balances->res_cosmer;
			$balances->anc_otrcre += $balances->anc_crevta;
			$balances->pc_ctapag += $balances->pc_antcli;

			if ($balances->res_resfin < 0) {
				$balances->res_otrosegr += ($balances->res_resfin * (-1));
			} else {
				$balances->res_otrosing += $balances->res_resfin;
			}
		}

		// Obtener prompts
		$datos = array('seleccionar', null, null, null, null, null, null, null, null);
		$datos_prompt = SQLConnection::backendStoreProcedure('gestor_prompts', $datos);
		
		// Obtener la ultima fecha de balance
		$fechasBalances = array_map(function($balance){ return $balance->fecha_balance; }, $balances);
		$ultimaFechaBalance = !empty($fechasBalances) ? max($fechasBalances) : null;
		
		$idUltimoBalance = ''; 
		foreach($balances as $balance){
			if ($balance->fecha_balance == $ultimaFechaBalance ) {
				$idUltimoBalance = $balance->id_balance;
			}
		}		

		// Renderizado de la vista con los datos necesarios
		return view('informes-blue/actividades-tarea/analisis-contable')->with(compact(
			'balances', 
			'identificacion', 
			'nombre_contraparte', 
			'pp', 
			'mb', 
			'tres_ulimos', 
			'columnas', 
			'datos_prompt', 
			'ultimaFechaBalance',
			'idUltimoBalance'
		));
	}


	public function VerTablaBalancedirectobkp(){
		$nombre_contraparte = Request::Input('nombre_persona');
		$identificacion = Request::Input('cuit');
		$id_balance = Request::input('id_balance');		
		$tres_ulimos = Request::input('ver_tres');
		//$balances = SQLConnection::backendBalancesContablesid($id_balance);
		$user_id 	= Session::get("usuario")->user_id;
		$columnas = Request::input('columnas');
		$pp = null;
		$mb = null;				
		if ($tres_ulimos == '1') {
			
			$balances = SQLConnection::backendStoreProcedure('LN_balances_data',array($identificacion,null,null,$columnas));
			$columnas = count($balances);			
		} else {
			$balances = SQLConnection::backendStoreProcedure('backend_balances_contables',array($id_balance,null,null,null,null,$user_id),"selectOne");
			$pp = $balances->patrimonio + $balances->pas_total;
			$mb = $balances->res_vtanet - $balances->res_cosmer; 
			$balances->anc_otrcre = $balances->anc_otrcre + $balances->anc_crevta; 
			$balances->pc_ctapag = $balances->pc_ctapag + $balances->pc_antcli; 
			if ($balances->res_resfin < 0)
			{ 
				$balances->res_otrosegr = $balances->res_otrosegr + ($balances->res_resfin * (-1)); 
			}
			else
			{
				$balances->res_otrosing = $balances->res_otrosing + $balances->res_resfin; 
			}
		}		
		//Prueba de TB para mostrar selector con los prompts
		$datos = array('seleccionar',null,null,null,null,null,null,null,null); 
        $datos_prompt = SQLConnection::backendStoreProcedure('gestor_prompts',$datos);		
		
		$fechaBalances=[];
		foreach($balances as $balance){
			array_push($fechaBalances, $balance->fecha_balance);
		}
		$ultimaFechaBalance = max($fechaBalances);
		
		return view('informes-blue/actividades-tarea/analisis-contable')->with(compact('balances','identificacion','nombre_contraparte','pp','mb','tres_ulimos','columnas','datos_prompt','ultimaFechaBalance'));
	}
}

