<?php namespace App\Http\Controllers;

use App\Custom\SQLConnection; 
use App\Custom\Misc;
use App\Custom\Mailer;
use Request;
use Session;
use DateTime;
use Illuminate\Support\Facades\Input;
use DB;
use stdClass;
use Storage;

class FidecheckController extends Controller {
  //------- CREAMOS UNA COPIA DE LA CLASE MAINCONTROLLER PARA PODER LLAMAR A CIERTAS FUNCIONES QUE NO SON ESTATICAS EN EL MAIN CONTROLLER
  public static $MainController;
  public function __construct(){
    if (!self::$MainController){
      self::$MainController = new MainController();
    }
  }
  //-----------
  public static $id_resultados;
  //------------------
  public static function fidecheckContrapartesInsert(){ 
  $cliente = Request::input('cliente');
  $id_padron = Request::input('id_padron');
  //----
  // Es null si no existe previamente o no nulo si se va a abrir nueva gestion
  // desde frontend siempre av a se nulo, porque no se pueden renovar gestiones, solo dar de alta nuevas contrapartes
  $contraparte =		 Request::input('contraparte') ?? null;

  $datos_comerciales = Request::input('datos_comerciales');
  $nombre_contacto =	 Request::input('nombre_contacto');
  $email_contacto =	 Request::input('email_contacto');
  $telefono_contacto = Request::input('telefono_contacto');
  $activo =			 Request::input('activo');
  $cliente_pais =		 Request::input('cliente_pais');
  $modalidad_pago =	 (!empty(Request::input('modalidad_pago'))) ? Request::input('modalidad_pago') : 'CC';
  $servicio =			 (!empty(Request::input('servicio'))) ? Request::input('servicio') : 47;
  $input_range =	!empty(Request::input('input_range')) ? Request::input('input_range') : 0;
  if($input_range == 1) {
    $vigencia_desde = date_create_from_format('!d/m/Y', Request::input('vigencia_desde'));
    $vigencia_hasta = date_create_from_format('!d/m/Y', Request::input('vigencia_hasta'));
    
  }
  else {
    $vigencia_desde = new DateTime('today');
    $vigencia_hasta = date_create_from_format('!d/m/Y', '31/12/2099');
  }
  
  $enviar_mail_alta = Request::input('enviar_mail_alta') ?? 0;
  $familias =	( null != Request::input('familia') ) ? Request::input('familia') : [];
  $familias = (is_array($familias) != 1) ? explode(',', Request::input('familia')) : $familias;
  $family = $familias[0]; 

  $items    =	( null != Request::input('item') ) ? Request::input('item') : [];
      //-------
  // Creación de un report : Dossier / Business Report / etc.
  $no_informe = ( null != Request::input('no_informe') ) ? Request::input('no_informe') : 0;
  //-------
  $producto_led = !empty(Request::input('producto')) ? Request::input('producto') : NULL;
  $id_tipo_informe = !empty(Request::input('id_tipo_informe')) ? Request::input('id_tipo_informe') : NULL;
  //--------
  if (NULL != $producto_led AND NULL != $id_tipo_informe AND $id_tipo_informe != '0' ) {
    $prioridad = Request::input('prioridad');
    $solicitado_por = Request::input('solicitado_por');
    $datamanager = Request::input('datamanager');
    $estado_informe = Request::input('estado_informe');
    $asignado = Request::input('asignado');
    //-----
    if ($enviar_mail_alta == 1) {
      $fecha_limite_doc = Request::input('fecha_limite_doc') ?? Request::input('fecha_comprometida');
      $asignado_tarea = Request::input('asignado_tarea') ?? Request::input('asignado');;
    }
  }
  //-------

  //-------- SECCION DE DAR DE ALTA LA CONTRAPARTE
  $user_id = Session::get('usuario')->user_id;
  
  $codigo_idioma = ( null != Request::input('idioma') ) ? Request::input('idioma') : 'spa';

  // Contraparte NUEVA:
  // siempre es nueva desde fronted 
  $clave = Misc::generateRandomString(6);
  $thiscontr = SQLConnection::backendStoreProcedure('LN_contrapartes_sc', array('insert', NULL, $id_padron, $cliente, $datos_comerciales, $activo, $nombre_contacto, $email_contacto, $telefono_contacto, NULL, NULL, $clave, $vigencia_desde, $vigencia_hasta, $user_id, 0, NULL, $modalidad_pago,NULL,NULL,$cliente_pais,null,$codigo_idioma,$servicio,$family), 'selectOne');
  $contraparte = $thiscontr->contraparte;
  $gest = DB::selectOne('EXEC dbo.LN_gestiones_  ?,?,?,?,?,?,?,?', array('insert', null, null, $contraparte, $vigencia_desde, $vigencia_hasta, null, $user_id));
  $txt_nuevo = 'Alta de Contraparte'; 
  //-------

  // Contraparte Nueva, o nueva gestión de una existente
  foreach ($items as $key => $item) {
    $temp = DB::selectOne('EXEC dbo.LN_contraparte_clasificacion_ ?,?,?', array('insert', $contraparte, $item));
  }

  $family = null; 	
  // Solo va a tener una familia (por eso son radios no checkbox) solo da de alta esa familia, borra si tiene otra

  foreach ($familias as $ix => $fam) {
    $family = $fam;
    $temp = DB::selectOne('EXEC dbo.LN_contraparte_familias_ ?,?,?,?,?,?,?', array('insert', $contraparte, $fam, NULL, 'N', 1, $user_id));
    $temp2 = DB::selectOne('EXEC dbo.LN_contraparte_familias_delete_otras ?,?', array($contraparte, $fam));
  }
    
  // Antes de actualizar el legajo por primera vez pongo a la contraparte en estado de carga inicial/
  $temp = DB::selectOne('update LN_contrapartes set carga_inicial = 1 WHERE contraparte = ' . $contraparte);

  // Generación de los documentos, todos con la tolerancia de carga inicial
  $temp = DB::selectOne('EXEC dbo.LN_actualizar_legajo ?, ?, ?', array($contraparte, $gest->gestion, Session::get('usuario')->user_id));

  $dataprov = DB::selectOne('EXEC dbo.LN_contrapartes_ ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array('select', $contraparte, null, null, null, null, null, null, null, NULL, NULL, null, null, null, $user_id));

  // Evalúo si la contraparte tiene asociado el producto balances  
  $tiene_balance = DB::selectOne('EXEC LN_verificar_balance_contraparte '. $contraparte);

  // 10/12/2019 : generación de prepagos en caso de ser necesario
  $temp = SQLConnection::backendStoreProcedure('LN_contrapartes_', array('generar_prepagos', $contraparte, null, null, null, null, null, null, null, null, null, null, null, null, $user_id), 'selectOne');

  // Lo mandamos a LN_Contrapartes_queue en vez de hacer todo aca. 
  $temp = SQLConnection::backendStoreProcedure('LN_contrapartes_queue_', array('insert', NULL, $contraparte), 'selectOne');

  // Lo hacemos en el stored LN_contrapartes_sc ('insert') 
  //Trazabilidad Insert Contraparte

  $trazabilidad = SQLConnection::backendStoreProcedure('insertar_trazabilidad', array($txt_nuevo, $cliente, 'ALTA_CONTRAPARTE_BACKEND','BACK', $contraparte,$user_id), 'selectOne');
    
  foreach ($familias as $ix => $fam) {
    $texto = '';
    $texto = 'Familia asignada: ' . $fam; 
    $trazabilidad = SQLConnection::backendStoreProcedure('insertar_trazabilidad', array($texto, $cliente, 'FAMILIA_ASIGNADA_BACKEND','BACK', $contraparte,$user_id), 'selectOne');
  }

  //Trazabilidad Insert Contraparte - Tipo de Informe 

  $texto = $id_tipo_informe;

  if (NULL != $producto_led) 
  {
    if ($id_tipo_informe == '0' ) { $texto = 'SIN INFORME en el Blue'; }
    if (NULL == $id_tipo_informe) { $texto = 'No se seleccionó ningún tipo de informe';	}
  }
  else 
  { 
    $texto = 'Sin Producto LED';
  }
  $trazabilidad = SQLConnection::backendStoreProcedure('insertar_trazabilidad', array($texto, $cliente, 'TIPO_INFORME_BACKEND','BACK', $contraparte,$user_id), 'selectOne');

// Ingreso el informe 
if ($no_informe == 0 AND NULL != $producto_led AND NULL != $id_tipo_informe) {

  $fecha_limite_doc = Request::input('fecha_limite_doc') ?? Request::input('fecha_comprometida');
  $fecha_comprometida = Request::input('fecha_comprometida');
  $objeto_informe = Request::input('objeto_informe');
  $nuevo = ReportsController::ReportsIngresarInforme($contraparte, $producto_led, $id_tipo_informe, $solicitado_por, $prioridad, $datamanager, $estado_informe, $asignado, $fecha_limite_doc, $fecha_comprometida, $objeto_informe);
  //----
  if (!empty($nuevo)) {

    $informe = $nuevo;

    /* Si hay que poner el informe en gestión, asignando la tarea correspondiente a solicitud de documentación **/
      //----
      if ($enviar_mail_alta== 1) {

        $fecha_limite_doc = Request::input('fecha_limite_doc') ?? Request::input('fecha_comprometida');
        $asignado_tarea = Request::input('asignado_tarea') ?? Request::input('asignado');;
        $fecha_entrega_doc = Request::input('fecha_comprometida');

        ReportsController::ReportsInformeEnGestion($informe, $fecha_limite_doc, $asignado_tarea,$fecha_entrega_doc);

        $modo_login = SQLConnection::backendStoreProcedure('LN_contrapartes_', array('MODALIDAD_LOGIN', $contraparte, null, null, null, null, null, null, null, null, null, null, null, null, Session::get('usuario')->user_id), 'selectOne');

        $modalidad_login = $modo_login->modalidad_login;

        $blade = ($modalidad_login == 'T') ? 'ALTA-TAXID' : 'ALTA-LINK';
        $subject = ($modalidad_login == 'T') ? 'ALTA-TAXID-SUBJECT' : 'ALTA-LINK-SUBJECT';

        $temp = SQLConnection::backendStoreProcedure('LN_contrapartes_', array('actualizar_carga_inicial', $contraparte, NULL, NULL, NULL, NULL, NULL, NULL, NULL, $fecha_limite_doc, NULL, NULL, NULL, NULL), 'selectOne');

        DB::selectOne("update LN_contrapartes set
                  clave = '" . $clave . "', clave_temporal = 1, 
                  clave_cambio = NULL, modified = GETDATE(), modified_by = ". Session::get('usuario')->user_id .
                  ", clave_expira = '" . $fecha_limite_doc . "' where contraparte = " . $contraparte);
        //---------
        $false = false; 
        $null = null; 
        $servicio_actual  = Session::get('servicio_actual');
        $expira = date_create_from_format('Y-m-d', $fecha_limite_doc)->format('d/m/Y');
        /* 01/03/2021 Se cambia por el EmailController
        LEDEmailController::enviarMailLED($blade, $subject, $contraparte, $expira, $null,$false,$null,$null,$servicio_actual);
        */
        EmailController::enviarMail('EMAIL-LED','ALTA', '', $contraparte, $expira, $null,$false,$null,$null);

      }
    }
  }
  //------- SECCION FIDECHECK
  $resultado_fidecheck = self::completar_fidecheck($contraparte);
  if ( is_array($resultado_fidecheck) ){
    $relac = $resultado_fidecheck['relacionados'];
    $direct = $resultado_fidecheck['directores'];
    $socios = $resultado_fidecheck['socios'];
    $propio = $resultado_fidecheck['propio'];
    $error_fidecheck = $resultado_fidecheck['error_fidecheck'];
    //-------
    return view('/led/led_fidecheck_certificado')->with(compact(['propio','relac','direct','socios','error_fidecheck','cliente']));  
    //--------
    }
    else{
      $error_fidecheck = $resultado_fidecheck;
      //-----
      return view('/led/led_fidecheck_certificado')->with(compact(['error_fidecheck','cliente']));  
      //----
    }
  }
  //---------
  
  //------------- FUNCION GENERICA PARA HACER LLAMADAS A RUTAS CON CURL
  public static function CURLCall($url,$params=null,$tipo='POST'){
      $curl = curl_init();
      //-----
      curl_setopt_array($curl,array(
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_ENCODING => "",
          CURLOPT_MAXREDIRS => 10,
          CURLOPT_TIMEOUT => 600,
          CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
          CURLOPT_CUSTOMREQUEST => $tipo,
          CURLOPT_POSTFIELDS => $params ?? '',
          CURLOPT_SSL_VERIFYHOST => false,
          CURLOPT_SSL_VERIFYPEER => false,
          CURLOPT_HTTPHEADER => array(
          "cache-control: no-cache",
          "content-type: application/x-www-form-urlencoded"
          )
      ));
      //-----
      $response = curl_exec($curl);
      $error = curl_error($curl);
      //-----
      curl_close($curl);
      //----- CONDICIONAL DE ERRORES
      if ($error){
          return json_encode(array('error'=>true));
      }
      else{
          return $response;
      }
  }
  
  //----------------- FIDECHECK NUEVA REMODELACION
  public static function completar_fidecheck($contraparte){
    $error = '';
    $inicio = (null !== Request::input('inicio')) ?  Request::input('inicio') : 'inicio';
    //-----
    if ($inicio == 'inicio') {
      $registros =  SQLConnection::backendStoreProcedure('LN_completa_fidecheck', array($contraparte),'select');
      //-----
      foreach ($registros as $cuits){
        //---- SE ESPECIFICAN LOS DATOS IMPORTANTES DEL REGISTRO
        $cuit = $cuits->tax_id;  
        $nombre_persona = $cuits->nombre; 
        $seccion = $cuits->seccion; 
        $pais = $cuits->country_code;
        //------ SE HACE LA CONSULTA DEL FIDECHECK
        $datos_finales = self::CURLCall(env('API_SCORE_FIDECHECK_COMPLIANCE'),'apikey=1F44A3FAA0C15C42PEP2&country_code='.$pais.'&tax_id='.$cuit.'&full_name='.$nombre_persona,'POST');
        $datos_finales = json_decode($datos_finales);
        $respuesta = $datos_finales->response;
        //--------
        if (is_string($respuesta)){
          $error = 'ERROR DE CONEXION';
          break;
        }
        elseif( is_array($respuesta) and count($respuesta) == 0 ){
          $error = 'NO HAY DATOS';
          break;
        }
        //----
        $respuesta = $respuesta[0];
        $fidecheck_estado = isset($respuesta->fidecheck) ?  $respuesta->fidecheck : 'NEGATIVO';
        $fidecheck = 'N';
        if ($fidecheck !== null){
          $detalle = '';
          $cargo       = (isset($respuesta->cargo)) ? $respuesta->cargo : '';
          $institucion = (isset($respuesta->institucion)) ? $respuesta->institucion : '';
          $relacion    = (isset($respuesta->relacion)) ? $respuesta->relacion : '';
          $lista       = (isset($respuesta->lista)) ? $respuesta->lista : '';
          $pais        = (isset($respuesta->pais)) ? $respuesta->pais : '';
          //------- EL CONDICIONAL QUE DETERMINA EL ESTADO FIDECHECK
          switch ($fidecheck_estado){
            case 'PEP':
              $fidecheck = 'E';  //-> NARANJA - E
              break;
            case 'TERRORISTA':
              $fidecheck = 'P';  //-> ROJO - P
              break;
            case 'SUJETO OBLIGADO':
              $fidecheck = 'S'; //-> CELESTE - S --## PUEDEN VARIAR
              break;
            case 'SANCIONADO':
              $fidecheck = 'P';//-> ROJO - P
              break;
            case 'RELACIONADO':
              $fidecheck = 'R'; //-> AMARILLO - R --## PUEDEN VARIAR
              break;
            default:
              $fidecheck = 'N'; //-> VERDE - N
              break;
          }
          //------ SE COMPLETAN DETALLES ACERCA DE LOS DATOS DEL CUIT CONSULTADO
          if ($lista!='') { $detalle .= 'Integrante de listas ' . $lista; }
          if ($detalle == '' && $pais != '') { $detalle = 'Integrante de listas'; }
          if ($pais!='')                     { $detalle .= ' ' . $pais; }
          if ($detalle!='')                  { $detalle .= ':'; }
          if ($cargo!='')                    { $detalle .= ' ' . $cargo; }
          if ($institucion!='')              { $detalle .= ' de ' . $institucion; }
          if ($relacion!='')                 { $detalle .= ' - Relacionado: ' . $relacion; }
          //------ ACTUALIZAR EL REGISTRO FIDECHECK DEL CUIT
          $idr = 0;
          $actualizo = SQLConnection::backendStoreProcedure('LN_actualiza_fidecheck', array($contraparte,$cuit,$seccion,$fidecheck,$detalle,$idr),'select');
          sleep(0.1);
        }
        //--------
      } 
      //-------------
    }
    //----
    //----  SE OBTIENE LOS DATOS DEL CERTIFICADO FIDECHECK
    $insert_queue = SQLConnection::backendStoreProcedure('LN_contrapartes_queue_', array('insert',NULL,$contraparte), 'selectOne'); 
    $socios = SQLConnection::backendStoreProcedure('LN_demo_fidecheck_', array('searchall', null, $contraparte, null, 'S'), 'select');
    $relac  = SQLConnection::backendStoreProcedure('LN_demo_fidecheck_', array('searchall', null, $contraparte, null, 'R'), 'select');
    $direct = SQLConnection::backendStoreProcedure('LN_demo_fidecheck_', array('searchall', null, $contraparte, null, 'D'), 'select');
    $propio = SQLConnection::backendStoreProcedure('LN_demo_fidecheck_', array('searchall', null, $contraparte, null, 'P'), 'selectOne');
    //------ EN CASO QUE HAYA ERROR
    if ( !empty($error) ){
      return $error;  
    }
    //-----OPERACION HECHA CON EXITO
    else{
      return array(
        'socios' => $socios,
        'relacionados' => $relac,
        'directores' => $direct,
        'propio' => $propio,
        'error_fidecheck' => 'OK'
      );
    }
    //------
  }

  //-----------------------------------
  //ESTA FUNCION BUSCA PRIMERO EN LA DB SI FUERON CONSULTADOS LOS ULTIMOS N DIAS. CASO
  // CONTRARIO PIDE ULTIMO TOKEN VIGENTE Y LOS CONSULTA A WS Y ANTES DE RETORNARLOS, LOS
  // GUARDA EN LA DB. SI EL TOKEN ESTA VENCIDO, PIDE LA GENERACION DE UNO NUEVO.
  //---------
  // N -> ESTA DEFINIDO COMO VARIABLE DE ENTORNO (PEP_TOPE_DIAS).
  private static function procesar_pep($cuit,$nombre_persona,$id_padron,$pais='AR'){
    self::$id_resultados = []; 
    $datos_finales = [];
    $resp = '';
    $ids =  SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_control', array($cuit,env('PEP_TOPE_DIAS')),'select');
    foreach($ids as $id){
      self::$id_resultados[] = $id->id_resultado;
      $resp = 'OK';   
    }
    //----
    if ( empty(self::$id_resultados) || !empty(self::$id_resultados) ){
      $id_llamadas = SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_llamados_', array('insert','0',$cuit,$nombre_persona,$id_padron,'worldsys',null,null,null),'selectOne'); 
      //-----
      $forzar_login = 'N'; 
      //------
      $resp = '401'; // NO HAY TOKEN VALIDO
      //------
      while ($resp == '401'){
        $resp = '0'; 
        $datos = self::obtenerDatosLogin(env('PEP_SERVICIO'),$forzar_login);
        $final_response = '';
        if (isset($datos->error)) {
          $error_llamada = SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_llamados_', array('update',$id_llamadas->id,$cuit,$nombre_persona,$id_padron,'worldsys','500','Error Login',$datos->error),'selectOne'); 
          $final_response = new stdClass(); 
          $final_response->error = $datos->error; 
          $resp = $final_response->error;
          return $final_response; 
        }
        //-----
        if (isset($datos->token)){
          $resp = self::obtenerDatosPEP($cuit,$nombre_persona,$id_padron,$datos->token,$id_llamadas->id,$pais);
          $forzar_login = 'S';
          foreach ($resp as $i) {
            if(isset($i->fechaNovedad)) {
              $i->fechaNovedad = self::getFecha();
            }
          }
          //----
          return $resp;
        }
      }
      //------
    }
    //----
    $datos_finales = []; 
    if (!empty(self::$id_resultados)){
      $ids = ''; 
      foreach (self::$id_resultados as $key => $id) {
          $ids .= ',' . $id; 
      }
      //---
      $datos_finales =  SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_select', array($ids),'select');
    } 
    else {
      $datos_finales['error'] = $resp; 
    }
    //---
    $res_temp = new stdClass();
    //---
    $res_temp->nombre = (isset($datos_finales[0]->nombre_persona)) ? $datos_finales[0]->nombre_persona : '';
    $res_temp->identificacionTributaria = (isset($datos_finales[0]->cuit)) ? $datos_finales[0]->cuit : '';
    $res_temp->fidecheck = (isset($datos_finales[0]->fidecheck)) ? $datos_finales[0]->fidecheck : '';
    $res_temp->cargo = (isset($datos_finales[0]->Cargo)) ? $datos_finales[0]->Cargo : '';
    $res_temp->institucion = (isset($datos_finales[0]->Institucion)) ? $datos_finales[0]->Institucion : '';
    if(isset($datos_finales[0]->TipoFuente) && $datos_finales[0]->TipoFuente == 'SO') {
      $res_temp->tipoFuente = 'sujeto obligado';
    } 
    //-
    else if(isset($datos_finales[0]->TipoFuente) && $datos_finales[0]->TipoFuente == 'SAN') {
      $res_temp->tipoFuente = 'sujeto obligado';
    } 
    //-
    else {
      $res_temp->tipoFuente = '';
    }
    //--
    $res_temp->orden = (isset($datos_finales[0]->orden)) ? $datos_finales[0]->orden : '';
    $res_temp->descripcionPais = (isset($datos_finales[0]->DescripcionPais)) ? $datos_finales[0]->DescripcionPais : '';
    $res_temp->relacion = (isset($datos_finales[0]->Relacion)) ? $datos_finales[0]->Relacion : '';
    $res_temp->fechaNovedad = (isset($datos_finales[0]->fecha)) ? $datos_finales[0]->fecha : ''; 
    return array($res_temp);
  }

  //--------------------------------
  // FUNCION HELPER QUE DEVUELVE LA FECHA ACTUAL
  static function getFecha(){
    date_default_timezone_set('America/Argentina/Buenos_Aires');
		setlocale(LC_TIME, "es_AR.UTF-8");
		return date("d-m-Y");
  }

  //---------
  // ESTA FUNCION BUSCA EL TOKEN MAS RECIENTE PARA EVITAR ESTABLECER CONEXION NUEVA
  // DE NO OBTENERLO, LLAMA A 'ConexionWS' QUE ESTA ENCARGADA DE PEDIR NUEVO TOKEN MAS
  // FECHA DE EXPIRACION.
  private static function obtenerDatosLogin($metodo,$forzar_login){
    //---
    if($forzar_login=="N"){
      $datos =  SQLConnection::backendStoreProcedure('PEP_obtener_datos_login', array($metodo),'selectOne');
    }
    //----
    if(!empty($datos) && $forzar_login == "N"){
      session::put($metodo,$datos);
      return $datos;
    }
    //---
    else{
      $login = self::ConexionWS();
      if ($login==true){
        $datos =  SQLConnection::backendStoreProcedure('PEP_obtener_datos_login', array($metodo),'selectOne');
        session::put($metodo,$datos);
      } 
      else {
        $datos = new stdClass(); 
        $datos->error = "No ha podido establecer la conexion con Worldsys"; 
      }
      //-----
      return $datos;
    }
  }

  //-------------------
  // ESTA FUNCION SE ENCARGA DE OBTENER EL NUEVO (TOKEN Y FECHA DE EXPIRACION) Y LOS GUARDAR 
  // LOS REGISTROS.
  public static function ConexionWS(){
    $user = env('PEP_USERNAME');
    $pass = env('PEP_PASSWORD');
    $curl = curl_init();
    $metodo = env('PEP_SERVICIO');
    //--------
    curl_setopt_array($curl, [
      CURLOPT_URL => env('PEP_LOGIN_N'),
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "POST",
      CURLOPT_POSTFIELDS => "{\n \"userName\": \"$user\",\n \"password\": \"$pass\"\n}\n",
      CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
    ]);
    //-------
    $response = curl_exec($curl);
    $err = curl_error($curl);
    //-------
    curl_close($curl);
    //-------
    if ($err){
      return false;
    }
    //------
    else{
      $resp = json_decode($response);
      //-----
      if(isset($resp->authenticationToken) && isset($resp->tokenExpirationUtc)){
        $token = $resp->authenticationToken;
        $expiracion = $resp->tokenExpirationUtc;
        $expiracion = new \DateTime($expiracion);
        $expiracion =  $expiracion->format('Y-m-d H:i:s');
        SQLConnection::backendStoreProcedure('PEP_guardar_autenticacion', array($token,'',$expiracion,$metodo));
        return true;
      }
      return false;
    }
    //----
  }

  //----------------------
  // FUNCION HEREDADA PARA NO ALTERAR MUCHO LA ESTRUCTURA, SIMPLEMENTE HACE DE CONECTOR
  private static function obtenerDatosPEP($cuit,$nombre_persona,$id_padron,$token,$id_llamada,$pais='AR'){
    $url = env('PEP_LISTA_N').$token;
    //--> ESTA LINEA DEBERIA QUEDAR, YA QUE SE ESPERAN LOS DATOS 
    $resp = self::CurlPEPListas($cuit,$nombre_persona,$id_padron,$element='',$url,$token,$id_llamada,$pais); 
    return $resp; 
    //--> ESTA LINEA ES SOLO PARA DEBUG
    // $element = (!isset($element)) ? '' : $element;
    // self::CurlPEPListas($cuit,$nombre_persona,$id_padron,$element,$url,$token,$id_llamada,$pais);
  }
  //------------------------
  // ESTA FUNCION ES LA ENCARGA DE HACER LA BUSQUEDA GENERAL Y TAMBIEN LO QUE 
  // ANTERIORMENTE HACIA LA FUNCION 'obtenerMasDatosPEP'. QUE EXTENDIA LOS DATOS, 
  // PERO VOLVIA HACER UNA LLAMADA A OTRA URL DE WS.
  // AHORA SE HACE TODO DESDE LA MISMA URL
  public static function CurlPEPListas($cuit,$nombre_persona,$id_padron,$element,$url,$token,$id_llamada,$pais){
    $cuit2 = (strlen($cuit) == 11) ? substr($cuit, 2, -1) : $cuit;
    $factorSimilitud = ($pais == 'AR') ? '100' : '90';
    $factorSimilitudInverso = ($pais == 'AR') ? '30' : '70';
    //-----------
    $curl = curl_init();
    //------
    curl_setopt_array($curl, [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => "{\n \"nombre\": \"$nombre_persona\",\n \"documento\": $cuit2,\n \"identificacionTributaria\": null,\n \"factorSimilitud\": $factorSimilitud,\n \"factorSimilitudInverso\": $factorSimilitudInverso,\n \"tipoFuente\": \"Todas\",\n }\n",
    CURLOPT_HTTPHEADER => [
            "Content-Type: application/json"
        ],
    ]);
    //---
    $response = curl_exec($curl);
    $err = curl_error($curl);
    //---
    curl_close($curl);
    //------
    if ($err) {
      $error = "cURL Error #:" . $err . ' ' . $response; 
      if ($err == '' || !is_numeric($err)) { 
        $err = -100;
      }
      //--  DESCOMENTAR ESTO PARA PRODUCCION O COMENTAR PARA DEBUG
      $error_llamada = SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_llamados_', array('update',$id_llamada,$cuit,$nombre_persona,$id_padron,'worldsys',$err,'CURL Error',$error),'selectOne'); 
      //-----------------------------------------------
      return $error;
    } 
    //----
    $error = 'OK'; 
    //--  VARIABLE  --//
    $StatusCode = '';
    $Status = 'OK';
    $Reason = '';
    //----
    $array = json_decode($response);
    if(isset($array->code)) {
      $StatusCode = $array->code;
      $Status = '000';
      $Reason = $array->message;
      //------
      if ($StatusCode != '200') {
        $error = $StatusCode; 
        return $datos_finales = array(); 
      }
    }
    //---
    if ($StatusCode == '' || !is_numeric($StatusCode)) { 
      $StatusCode = -100; 
    }
    //--  DESCOMENTAR TODA ESTA SECCION PARA PRODUCCION O COMENTAR PARA DEBUG
    $error_llamada = SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_llamados_', array('update',$id_llamada,$cuit,$nombre_persona,$id_padron,'worldsys',$StatusCode,$Status,$Reason),'selectOne'); 
    //---
    if ($Status == 'OK' && (!isset($array->resultados) || count($array->resultados) == 0)) {
        $id_resultado = SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_', 
                                                              array($cuit,$nombre_persona,$id_padron,'worldsys',
                                                              $StatusCode,
                                                              $Status,
                                                              null,
                                                              null,
                                                              null,
                                                              null,
                                                              null,
                                                              null,
                                                              null,
                                                              null,
                                                              null,
                                                              null,
                                                              null,
                                                              null,
                                                              null,
                                                              null,
                                                              'N'),
                                                              'selectOne'); 
          $error = array(); 
          self::$id_resultados[] = $id_resultado->id_resultado; 
          return $error; 

    }
    //---
    $rr = array();
    if ($Status == 'OK' && isset($array->resultados) && count($array->resultados) > 0) {
      foreach ($array->resultados as $data) {
        $error = 'OK';
        $Id                  = (isset($data->sdnId)) ? $data->sdnId : '';
        $Fuente              = (isset($data->fuente)) ? $data->fuente : '';
        $NombreModificado    = (isset($data->nombre)) ? $data->nombre : '';
        $DocumentoBuscado    = $cuit;//(isset($data->documento)) ? $data->documento : ''; 
        $NombreBuscado       = '';
        $Documento           = (isset($data->documento)) ? $data->documento : '';
        $TipoFuente          = (isset($data->tipoFuente)) ? $data->tipoFuente : '';
        $Residencia          = (isset($data->residencia)) ? $data->residencia : '';
        $DescripcionPais     = (isset($data->descripcionPais)) ? $data->descripcionPais : '';
        $PaisNoColaborativo  = '';
        $Hallazgos           = '';
        $ExisteDocumentacion = (isset($data->existeDocumentacion)) ? $data->existeDocumentacion : '';
        $PorcentajeSimilitud = '';
        //--------------------------------------------------------------------------------------------------------------
        $Codigo             		= isset($data->Codigo) ? $data->Codigo : '';
        $TipoFuente         		= isset($data->tipoFuente) ? $data->tipoFuente : ''; 
        $FechaNovedad       		= isset($data->fechaNovedad) ? $data->fechaNovedad : ''; 
        $Cargo              		= isset($data->cargo) ? $data->cargo : '';
        $Institucion                = (isset($data->institucion)) ? $data->institucion : '';
        $Domicilio                  = (isset($data->domicilio)) ? $data->domicilio : '';
        $NumeroDocumento            = (isset($data->documento)) ? $data->documento : '';
        $NumeroIdTributaria         = (isset($data->identificacionTributaria)) ? $data->identificacionTributaria : '';
        $Url                        = (isset($data->url)) ? $data->url : '';
        $Relacion                   = (isset($data->relacion)) ? $data->relacion : '';
        $rr[] = $Relacion;
        $PrincipalLista             = $Fuente;
        $PrincipalListaDescripcion  = (isset($data->descripcionFuente)) ? $data->descripcionFuente : '';
        $PaisSwift                  = $Residencia;
        $TipoNovedad                = ''; //--> verificar
        $IdOrigRel                  = ''; //--> verificar
        $PrincipalFuente            = ''; //--> verificar
        $Observaciones              = ''; //--> verificar
        $Pais                       = $DescripcionPais;
        $UrlNew                     = $Url;
        $NormaUif                   = ''; //--> verificar
        $NormaUifDescripcion        = ''; //--> verificar
        $FuenteLista                = $Fuente;
        $FuenteActiva               = ''; //--> verificar
        $FuenteDescripcion          = $PrincipalListaDescripcion;
        $FuenteDescripcionLarga     = $PrincipalListaDescripcion;
        $FuenteTipo                 = $TipoFuente;
        $FuenteImagen               = ''; //--> verificar
        $FuenteActualizaxml         = ''; //--> verificar
        //--------
        $NombreModificado = self::limpiarCaracteresEspeciales(utf8_decode($NombreModificado));
        $NombreBuscado = self::limpiarCaracteresEspeciales(utf8_decode($NombreBuscado));
        $Cargo = self::limpiarCaracteresEspeciales(utf8_decode($Cargo));
        $Institucion = self::limpiarCaracteresEspeciales(utf8_decode($Institucion));
        $Domicilio = self::limpiarCaracteresEspeciales(utf8_decode($Domicilio));
        $Relacion = self::limpiarCaracteresEspeciales(utf8_decode($Relacion));
        //--  DESCOMENTAR ESTE BLOQUE PARA PRODUCCION O COMENTAR PARA DEBUG  --//
        $id_resultado = SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_', 
                                                          array($cuit,$nombre_persona,$id_padron,'worldsys',
                                                          $StatusCode,
                                                          $Status              ,
                                                          $Reason              ,
                                                          $Id                  ,
                                                          $Fuente              ,
                                                          $NombreModificado    ,
                                                          $DocumentoBuscado    ,
                                                          $NombreBuscado       ,
                                                          $Documento           ,
                                                          $TipoFuente          ,
                                                          $Residencia          ,
                                                          $DescripcionPais     ,
                                                          $PaisNoColaborativo  ,
                                                          $Hallazgos           ,
                                                          $ExisteDocumentacion ,
                                                          $PorcentajeSimilitud,
                                                          'S'),
                                                          'selectOne'); 
        self::$id_resultados[] = $id_resultado->id_resultado; 
      }
      //-----
      for ($i=0; $i < count($array->resultados);$i++){
        $comparador = ($array->resultados[$i]->relacion != '' && $array->resultados[$i]->tipoFuente == 'PEP') ? 'RR' : $array->resultados[$i]->tipoFuente;
        $array->resultados[$i]->relacion = $rr[$i];
        //-----
        if($array->resultados[$i]->fechaNovedad !== null) {
          $feche_temporal = $array->resultados[$i]->fechaNovedad;
          $feche_temporal = explode('T', $feche_temporal);
          $feche_temporal = explode('-', $feche_temporal[0]);
          $array->resultados[$i]->fechaNovedad = $feche_temporal[2].'-'.$feche_temporal[1].'-'.$feche_temporal[0];
        } 
        //--
        else {
          $array->resultados[$i]->fechaNovedad = 'S/F';
        }
        //--
        switch ($comparador) {
          case 'TER':
            $array->resultados[$i]->fidecheck = 'P';  //-> ROJO - P
            $array->resultados[$i]->orden = 2;
            break;
          //---
          case 'PEP':
            $array->resultados[$i]->fidecheck = 'E'; //-> NARANJA - E
            $array->resultados[$i]->orden = 3;
            break;
          //----
          case 'SAN':
            $array->resultados[$i]->fidecheck = 'P'; //-> ROJO - P
            //$array->resultados[$i]->orden = 2;
            $array->resultados[$i]->orden = 3;
            $array->resultados[$i]->tipoFuente = 'sujeto obligado';
            break;
          //----
          case 'SO':
            $array->resultados[$i]->fidecheck = 'S'; //-> CELESTE - S --## PUEDEN VARIAR
            $array->resultados[$i]->orden = 3;
            $array->resultados[$i]->tipoFuente = 'sujeto obligado';
            break;
          //----
          case 'RR':
            $array->resultados[$i]->fidecheck = 'R'; //-> AMARILLO - R --## PUEDEN VARIAR
            $array->resultados[$i]->orden = 4;
            break;
          //----
          default:
            $array->resultados[$i]->fidecheck = 'N'; //-> VERDE - N
            $array->resultados[$i]->orden = 2;
            break;
        }
      }
      //----
      //echo(var_dump($array->resultados)); die();
      return $array->resultados;
      //---
    }
    return $error;
    //-----
  }

  //---------
  //--  FUNCION HEREDADA PARA LIMPIAR CARACTERES  'EN USO'  --//
  private static function limpiarCaracteresEspeciales($string ){
    $string = htmlentities($string);
    $string = preg_replace('/\&(.)[^;]*;/', '\\1', $string);
    $textoLimpio = preg_replace('([^A-Za-z0-9 .,\(\)áéíóúÁÉÍÓÚñÑ\-\:])', '', $string);
    return $textoLimpio;
  }











  //----------- FIDECHECK VIEJO , NO USADO MAS ------------------------//

  //--------------- FUNCION ENCARGADA DE COMPLETAR EL FIDECHECK Y GUARDARLO
  public static function completar_fidecheck_viejo($contraparte,$cliente){
    //----
    $registros =  SQLConnection::backendStoreProcedure('LN_completa_fidecheck', array($contraparte));
    //---- HACE EL PROCESO DE COMPLETAR EL FIDECHECK
    foreach ($registros as $cuits){
      //$buscar_afip = self::CURLCall('https://www.fidelitas.com.ar/api/local/v1/afip/obtener-padron/'.$cuits->tax_id,null,'GET');
      //-------
      $cuit = $cuits->tax_id; 
      $nombre_persona = $cuits->nombre; 
      $id_padron = 0; 
      $seccion = $cuits->seccion; 
      $datos_finales = self::procesar_pep_viejo($cuit, $nombre_persona, $id_padron);
      //----------- DESPUES DE RECIBIR LOS DATOS PEP SIGUE CON EL PROCESO
      if (isset($datos_finales['error'])) {
        $resp  = $datos_finales['error']; 
        $error = 'ERROR'; 
        break; 
      }
      //-------
      if(count($datos_finales) == 0) 
      {
      $fidecheck  = 'N';
      }
      else
      {
      $fidecheck  = $datos_finales[0]->fidecheck;
      }
      //-------
      if ($fidecheck!==null)
      {
        $detalle = '';
        if ($fidecheck=='S' || $fidecheck=='s')
          {
          $cargo       = $datos_finales[0]->Cargo;
          $institucion = $datos_finales[0]->Institucion;
          $relacion    = $datos_finales[0]->Relacion;   
          $lista       = $datos_finales[0]->TipoFuente;
          $pais        = $datos_finales[0]->DescripcionPais;
          $orden       = $datos_finales[0]->orden;
          // 1 - Terroritas
          // 2 - Sancionados 
          // 3 - PEP
          // 4 - Relacionado
          if ($orden <= 2)
            {
            $fidecheck = 'P';
            }
          if ($orden == 3)
          {
            if (strtolower($lista) == 'sujetos obligados' || strtolower($lista) == 'sujeto obligado') 
                { $fidecheck = 'S'; }
            else { $fidecheck = 'E'; 
                  if ($relacion!='') 
                      { $fidecheck = 'R'; }
          }
          }
          if ($orden == 4)
            {
            $fidecheck = 'R';
            }                  

          if ($lista == null)       { $lista = '';}
          if ($pais == null)        { $pais  = '';}
          if ($cargo == null)       { $cargo = '';}
          if ($institucion == null) { $institucion = '';}
          if ($relacion == null)    { $relacion = '';}
          if ($lista!='') { $detalle .= 'Integrante de listas ' . $lista; }
          if ($detalle == '' && $pais != '') { $detalle = 'Integrante de listas'; }
          if ($pais!='')                     { $detalle .= ' ' . $pais; }
          if ($detalle!='')                  { $detalle .= ':'; }
          if ($cargo!='')                    { $detalle .= ' ' . $cargo; }
          if ($institucion!='')              { $detalle .= ' de ' . $institucion; }
          if ($relacion!='')                 { $detalle .= ' - Relacionado: ' . $relacion; }
        }
        //--------------- GUARDA EL FIDECHECK
        $idr         = $datos_finales[0]->id_resultado;
        $actualizo = SQLConnection::backendStoreProcedure('LN_actualiza_fidecheck', array($contraparte,$cuit,$seccion,$fidecheck,$detalle,$idr),'select');
        //-------------
      }
    }
    //----  SE OBTIENE LOS DATOS DEL CERTIFICADO FIDECHECK
    $insert_queue = SQLConnection::backendStoreProcedure('LN_contrapartes_queue_', array('insert',NULL,$contraparte), 'selectOne'); 
    $resultado = SQLConnection::backendStoreProcedure('LN_demo_fidecheck_', array('search', null, $contraparte, null, null), 'select');
    //------
    foreach ($resultado as $key => $value) {
      $resultado[$key]->detalle = str_replace(chr(10), '<br>', $value->detalle);
      $resultado[$key]->fecha = substr($resultado[$key]->fecha,0,-9);
    }
    //------
    return $resultado;
  }
  //-------------- FUNCION HELPER DE LA FUNCION PRINCIPAL
  public static function procesar_pep_viejo($cuit,$nombre_persona,$id_padron,$pais='AR'){
    self::$id_resultados = []; 
    $datos_finales = []; 
    // Chequeo si lo consulte en los ultimos 30 dias
    $ids =  SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_control', array($cuit,'0'),'select');
    foreach($ids as $id){
    self::$id_resultados[] = $id->id_resultado;
    $resp = 'OK';   
    }
    if (empty(self::$id_resultados))
    {
        $id_llamadas = SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_llamados_', array('insert','0',$cuit,$nombre_persona,$id_padron,'worldsys',null,null,null),'selectOne');
        //$forzar_login = 'S'; 
        $forzar_login = 'N'; 

        $resp = '401'; // No hay token valido

        while ($resp == '401')
        {
            $resp = '0'; 
            $datos = self::obtenerDatosLogin_viejo(env('PEP_SERVICIO'),$forzar_login);
            $final_response = '';
            if (isset($datos->error)) 
            {
            $error_llamada = SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_llamados_', array('update',$id_llamadas->id,$cuit,$nombre_persona,$id_padron,'worldsys','500','Error Login',$datos->error),'selectOne'); 
            $final_response = new stdClass(); 
            $final_response->error = $datos->error; 
            $resp = $final_response->error;
            break; 
            //return $final_response; 
            } 
            if (isset($datos->token)) 
            {
            $resp = self::obtenerDatosPEP_viejo($cuit,$nombre_persona,$id_padron,$datos->token,$id_llamadas->id,$pais);
            $forzar_login = 'S';
            }
        }
    }
    $datos_finales = []; 
    //----------
    if (!empty(self::$id_resultados))
    {
    $ids = ''; 
    foreach (self::$id_resultados as $key => $id) {
        $ids .= ',' . $id; 
    }
    $datos_finales =  SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_select', array($ids),'select');
    }
    //---
    else 
    {
    $datos_finales['error'] = $resp; 
    }
    //---
    return $datos_finales; 
    //--------
}
  //----------------------------------------
  public static function obtenerDatosLogin_viejo($metodo,$forzar_login){
      if($forzar_login=="N")
      {
      $datos =  SQLConnection::backendStoreProcedure('PEP_obtener_datos_login', array($metodo),'selectOne');
      }

      if(!empty($datos) && $forzar_login == "N"){
        session::put($metodo,$datos);
        return $datos;
      }
      else
      {
        $login = self::obtenerLoginPEP_viejo($metodo);
        if ($login==true){
          $datos =  SQLConnection::backendStoreProcedure('PEP_obtener_datos_login', array($metodo),'selectOne');
          session::put($metodo,$datos);
        }
        else 
        {
          $datos = new stdClass(); 
          $datos->error = "No ha podido establecer la conexion con Worldsys"; 
        }
        return $datos;
      }
    }
  //-------------------------------------------
  private static function obtenerLoginPEP_viejo($metodo){
  $respuesta = self::PEPCall();
  $resp = json_decode($respuesta); 
  if(isset($resp->token) && isset($resp->expiracion)){
      $token = $resp->token;
      $expiracion = $resp->expiracion;
      $expiracion = new \DateTime($expiracion);
      $expiracion =  $expiracion->format('Y-m-d H:i:s');
      SQLConnection::backendStoreProcedure('PEP_guardar_autenticacion', array($token,'',$expiracion,$metodo));
      return true;
  }
  return false;
  }
  //--------------------------------
  private static function PEPCall_viejo(){

  $element =  '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
  xmlns:aut="http://authws.worldsys.com.ar/">
  <soap:Header/>
  <soap:Body>
  <aut:AuthenticateUser>
  <aut:username>'.env('PEP_USERNAME').'</aut:username>
  <aut:password>'.env('PEP_PASSWORD').'</aut:password>
  </aut:AuthenticateUser>
  </soap:Body>
  </soap:Envelope>';

  $url = env('PEP_LOGIN_WSDL'); 
  $resp = self::CurlPEPlogin_viejo($element,$url);
  return $resp; 
  }
  //--------------------------
  public static function CurlPEPlogin_viejo($element,$url){
  $curl = curl_init();
  curl_setopt_array($curl, array(
      CURLOPT_URL => $url,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "UTF-8",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 120,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "POST",
      CURLOPT_POSTFIELDS => $element,
      CURLOPT_SSL_VERIFYHOST => false,
      CURLOPT_SSL_VERIFYPEER => false,
      CURLOPT_HTTPHEADER => array(
      "cache-control: no-cache",
      "content-type: application/soap+xml; charset=UTF-8",
      ),
  ));

  $response = curl_exec($curl);
  $err = curl_error($curl);
  curl_close($curl);
  //-----------

  if ($err) {
      return json_encode("cURL Error #:" . $err);
      } 
  else {
      $response = preg_replace("/(<\/?)(\w+):([^>]*>)/", "$1$2$3", $response);
      $response = str_replace('', '\'', $response);
      $xml = new \SimpleXMLElement($response);
      //------
      $array = json_decode(json_encode((array)$xml), TRUE);
      if(!isset($array['soapBody']['AuthenticateUserResponse']['AuthenticateUserResult']['AuthenticationToken'])){
      return json_encode(['error'=>"No ha podido establecer la conexion con Worldsys"]); 
      }
      $token      = $array['soapBody']['AuthenticateUserResponse']['AuthenticateUserResult']['AuthenticationToken'] ?? ''; 
      $expiracion = $array['soapBody']['AuthenticateUserResponse']['AuthenticateUserResult']['TokenExpirationUtc'] ?? '' ; 
      return json_encode(['token'=>$token,'expiracion'=>$expiracion]);
      }
  }
  //----


  //--------------------------
  public static function obtenerDatosPEP_viejo($cuit,$nombre_persona,$id_padron,$token,$id_llamada,$pais='AR'){
      //----------
      if ($pais=='AR')
      {
          $element =  '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:lis="http://listas.worldsys.com.ar/">
              <soapenv:Header>
                <lis:SecureWebMethodSoapHeader>
                    <!--Optional:-->
                    <lis:AuthenticationToken>'.$token.'</lis:AuthenticationToken>
                </lis:SecureWebMethodSoapHeader>
              </soapenv:Header>
              <soapenv:Body>
                <lis:Evaluar>
                    <lis:request>
                      <lis:Nombre></lis:Nombre>
                      <lis:Documento>'.$cuit.'</lis:Documento>
                      <lis:TipoBusqueda>Recomendada</lis:TipoBusqueda>
                      <lis:TipoFuente>Todas</lis:TipoFuente>
                      <lis:Control>EVALUACIONESWEB</lis:Control>
                      <lis:FactorSimilitud>100</lis:FactorSimilitud>
                      <lis:FactorSimilitudInverso>30</lis:FactorSimilitudInverso>
                    </lis:request>
                </lis:Evaluar>
              </soapenv:Body>
          </soapenv:Envelope>';
        }
        //-----------
        else 
        {
          $element =  '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:lis="http://listas.worldsys.com.ar/">
              <soapenv:Header>
                <lis:SecureWebMethodSoapHeader>
                    <!--Optional:-->
                    <lis:AuthenticationToken>'.$token.'</lis:AuthenticationToken>
                </lis:SecureWebMethodSoapHeader>
              </soapenv:Header>
              <soapenv:Body>
                <lis:Evaluar>
                    <lis:request>
                      <lis:Nombre>'.$nombre_persona.'</lis:Nombre>
                      <lis:Documento></lis:Documento>
                      <lis:TipoBusqueda>Recomendada</lis:TipoBusqueda>
                      <lis:TipoFuente>Todas</lis:TipoFuente>
                      <lis:Control>EVALUACIONESWEB</lis:Control>
                      <lis:FactorSimilitud>90</lis:FactorSimilitud>
                      <lis:FactorSimilitudInverso>70</lis:FactorSimilitudInverso>
                    </lis:request>
                </lis:Evaluar>
              </soapenv:Body>
          </soapenv:Envelope>';
        }
        //------------

      $url = env('PEP_LISTAS_WSDL'); 
      $resp = self::CurlPEPListas_viejo($cuit,$nombre_persona,$id_padron,$element,$url,$token,$id_llamada); 
      return $resp; 
    }
  //---------------------------------------
  public static function CurlPEPListas_viejo($cuit,$nombre_persona,$id_padron,$element,$url,$token,$id_llamada){
    $curl = curl_init();
    curl_setopt_array($curl, array(
      CURLOPT_URL => $url,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "UTF-8",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 120,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "POST",
      CURLOPT_POSTFIELDS => $element,
      CURLOPT_SSL_VERIFYHOST => false,
      CURLOPT_SSL_VERIFYPEER => false,
      CURLOPT_HTTPHEADER => array(
        "cache-control: no-cache",
        "content-type: text/xml; charset=utf-8", 
      ),
    ));

    $response = curl_exec($curl);
    $err = curl_error($curl);
    curl_close($curl);
    //----------------
    if ($err) {
      $error = "cURL Error #:" . $err . ' ' . $response; 
      if ($err == '' || !is_numeric($err)) { $err = -100; }
      $error_llamada = SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_llamados_', array('update',$id_llamada,$cuit,$nombre_persona,$id_padron,'worldsys',$err,'CURL Error',$error),'selectOne'); 
      return $error; 
    } 
    $error = 'OK'; 
    
      $response = preg_replace("/(<\/?)(\w+):([^>]*>)/", "$1$2$3", $response);
      $response = str_replace('', '\'', $response);
      //-----------
      $xml = new \SimpleXMLElement($response);
      $array = json_decode(json_encode((array)$xml), TRUE);
      $estado = $array['soapBody']['EvaluarResponse']['EvaluarResult']; 
      
      $StatusCode          = $estado['StatusCode'] ?? '';
      $Status              = $estado['Status'] ?? '';
      $Reason              = $estado['Reason'] ?? '';
      if ($StatusCode != '200')
      {
          $error = $StatusCode; 
          return $error; 
          
      }
    
    if ($StatusCode == '' || !is_numeric($StatusCode)) { $StatusCode = -100; }

      $error_llamada = SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_llamados_', array('update',$id_llamada,$cuit,$nombre_persona,$id_padron,'worldsys',$StatusCode,$Status,$Reason),'selectOne'); 
      //-----------
      if ($Status == 'OK' && 
          (empty($array['soapBody']['EvaluarResponse']['EvaluarResult']['Resultados']) ||
            !isset($array['soapBody']['EvaluarResponse']['EvaluarResult']['Resultados']))
          )
        {
          //--------
          $id_resultado = SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_', 
                                                                array($cuit,$nombre_persona,$id_padron,'worldsys',
                                                                $StatusCode,
                                                                $Status,
                                                                null,
                                                                null,
                                                                null,
                                                                null,
                                                                null,
                                                                null,
                                                                null,
                                                                null,
                                                                null,
                                                                null,
                                                                null,
                                                                null,
                                                                null,
                                                                null,
                                                                'N'),
                                                                'selectOne'); 
          $error = 'OK'; 
          self::$id_resultados[] = $id_resultado->id_resultado; 
          return $error; 

        }
      $resultados = []; 
      if ($Status == 'OK' && isset($array['soapBody']['EvaluarResponse']['EvaluarResult']['Resultados'])) {
        if (isset($array['soapBody']['EvaluarResponse']['EvaluarResult']['Resultados']['EvalResult'][0]))
          {
          $resultados = $array['soapBody']['EvaluarResponse']['EvaluarResult']['Resultados']['EvalResult'];
          }
        else 
          {
          $resultados = $array['soapBody']['EvaluarResponse']['EvaluarResult']['Resultados'];
          }

      
        $i=0; 
        foreach ($resultados as $data)
        {
        $error = 'OK'; 
        //-------
        $Id                  = (isset($data['SDN_ID']) && !is_array($data['SDN_ID'])) ? $data['SDN_ID'] : '';
        $Fuente              = (isset($data['Fuente']) && !is_array($data['Fuente'])) ? $data['Fuente'] : '';
        $NombreModificado    = (isset($data['NombreModificado']) && !is_array($data['NombreModificado'])) ? $data['NombreModificado'] : '';
        $DocumentoBuscado    = (isset($data['DocumentoBuscado']) && !is_array($data['DocumentoBuscado'])) ? $data['DocumentoBuscado'] : '';
        $NombreBuscado       = '';
        //$NombreBuscado       = (isset($data['NombreBuscado']) && !is_array($data['NombreBuscado'])) ? $data['NombreBuscado'] : '';
        $Documento           = (isset($data['Documento']) && !is_array($data['Documento']))  ? $data['Documento'] : '';
        $TipoFuente          = (isset($data['TipoFuente']) && !is_array($data['TipoFuente'])) ? $data['TipoFuente'] : '';
        $Residencia          = (isset($data['Residencia']) && !is_array($data['Residencia'])) ? $data['Residencia'] : '';
        $DescripcionPais     = (isset($data['DescripcionPais']) && !is_array($data['DescripcionPais'])) ? $data['DescripcionPais'] : '';
        $PaisNoColaborativo  = (isset($data['PaisNoColaborativo']) && !is_array($data['PaisNoColaborativo'])) ? $data['PaisNoColaborativo']  : '';
        $Hallazgos           = (isset($data['Hallazgos']) && !is_array($data['Hallazgos'])) ? $data['Hallazgos']: '';
        $ExisteDocumentacion = (isset($data['ExisteDocumentacion']) && !is_array($data['ExisteDocumentacion'])) ? $data['ExisteDocumentacion'] : '';
        $PorcentajeSimilitud = (isset($data['PorcentajeSimilitud']) && !is_array($data['PorcentajeSimilitud'])) ? $data['PorcentajeSimilitud'] : '';
        
        if (isset($NombreModificado)  && !is_array($NombreModificado)) { 
          $NombreModificado1 = $NombreModificado;
          $NombreModificado1 = utf8_decode($NombreModificado1);
          $NombreModificado1 = self::limpiarCaracteresEspeciales($NombreModificado1);
          if ($NombreModificado1 !== '')
              { $NombreModificado = $NombreModificado1; }
        }
        if (isset($NombreBuscado)     && !is_array($NombreBuscado)) { 
          $NombreBuscado1 = $NombreBuscado;
          $NombreBuscado1 = utf8_decode($NombreBuscado1);
          $NombreBuscado1 = self::limpiarCaracteresEspeciales($NombreBuscado1);
          if ($NombreBuscado1 !== '')
              { $NombreBuscado = $NombreBuscado1; }
        }   
        $id_resultado = SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_', 
                                                              array($cuit,$nombre_persona,$id_padron,'worldsys',
                                                              $StatusCode,
                                                              $Status              ,
                                                              $Reason              ,
                                                              $Id                  ,
                                                              $Fuente              ,
                                                              $NombreModificado    ,
                                                              $DocumentoBuscado    ,
                                                              $NombreBuscado       ,
                                                              $Documento           ,
                                                              $TipoFuente          ,
                                                              $Residencia          ,
                                                              $DescripcionPais     ,
                                                              $PaisNoColaborativo  ,
                                                              $Hallazgos           ,
                                                              $ExisteDocumentacion ,
                                                              $PorcentajeSimilitud,
                                                              'S'),
                                                              'selectOne'); 
        self::$id_resultados[] = $id_resultado->id_resultado; 
        /* 08/09/2021: No anda el mas datos, asi que por ahora lo sacamos, mientras usamos el token de Gonzalo Quintana */
        //$estado_mas = self::obtenerMasDatosPEP($id_resultado->id_resultado,$Id,$token);
        $estado_mas = 'OK'; 
        /* volver a ponerlo cuando ande */
    
        }
      }
      return $error; 
  }






  //--------------- SECCION FIDECHECK-ONLINE  LLAMADAS DESDE (fidecheck_online.js)---------//
  //--------------- FUNCION ENCARGADA DE DEVOLVER LA VISTA CON LA FANCY
  public static function fidecheckOnline(){
    if ( Session::get('usuario')->tiene_fidecheck_online == '1' ){
      $servicios = Session::get('usuario')->servicios;
      //------
      $user_id = Session::get('usuario')->user_id;
      $client_id = Session::get('usuario')->cliente['client_id'];
      //------
      //----
      $tipo = 'C';
      //------
      foreach ( $servicios as $key => $value){
        $params = array($client_id,$user_id,$value->fecha_desde,$value->fecha_hasta,'90',$tipo);
        $registros = SQLConnection::backendStoreProcedure('obtener_Registro_Consumos', $params,'select');
        break;
      }
      $registros = array_reverse($registros);
      $registros = json_encode($registros);
      //------
      return view('/fidecheck/fidecheck_online',compact('registros'));
    }
  }
  //---------------- FUNCION ENCARGADA DE DEVOLVER EL MODAL DE BUSQUEDA 
  public static function fidecheckModalBusqueda(){
    $cliente = Session::get('usuario')->cliente['client_id'];
    //------
    $paises = Misc::contrapartesPaises();
    //------
    return view('/fidecheck/fidecheck_online_modal_busqueda',compact('paises'));
  }
  //----------------- FUNCION ENCARGADA DE HACER LA BUSQUEDA DINAMICA Y DEVOLVER LOS RESULTADOS PARA HABILITAR EL AUTOCOMPLETE EN CASO ARGENTINA (OBSOLETO)
  public static function fidecheckBusquedaDinamica(){
    $datos_busqueda = Request::input('input_busqueda');
    $pais_busqueda = Request::input('pais_busqueda');
    //------ SI ES DE ARGENTINA DEVUELVE LOS RESULTADOS
    if ($pais_busqueda == 'AR'){
      $resultado = SQLConnection::busquedaPadron($datos_busqueda,false);
      return $resultado;
    }
    //--- SI NO ES DE ARGENTINA NO DEVUELVE NADA
    else{
      return 0;
    }
  }
  //----------------- FUNCION ENCARGADA DE HACER EL FIDECHECK Y DEVOLVER EL CERTIFICADO (OBSOLETO)
  public static function fidecheckResultado(){
    $nombre_persona = $_POST['input_search'];
    $nombre_persona = strtoupper($nombre_persona);
    $cuit = $_POST['cuit_busqueda'];
    $pais = $_POST['pais_busqueda'];
    //------------
    $expReg_cuit = '/^[0-9]{11}$/';
    $expReg_nombre = '/^[A-Za-zñÑ\.\s]+$/';
    //-------- SI EL PAIS ES ARGENTINA
    if ( $pais == 'AR'){
      //------- SI LOS DATOS INGRESADOS SON CORRECTOS
      if ( preg_match($expReg_nombre,$nombre_persona) and preg_match($expReg_cuit,$cuit)  ){
        $tipo_persona = SQLConnection::backendStoreProcedure('obtener_tipo_persona', array($cuit), 'selectOne')->tipo_persona;
        $visible = 1;
        $socios_directores = SQLConnection::backendStoreProcedure('backend_obtener_socios', array(null, $cuit, $visible, $tipo_persona));
        $accionistas       = SQLConnection::backendStoreProcedure("backend_obtener_accionistas", array($cuit, $visible));
        $accionistas_de    = SQLConnection::backendStoreProcedure("backend_obtener_accionistas_de", array($cuit, $visible));
        $registros = [];
        $i = 0;
        //-------- TOMAMOS LOS DATOS DE LOS SOCIOS DIRECTORES
        if (!empty($socios_directores)){
          //----
          foreach( $socios_directores as $key => $value){
            //----
            if ( $value->ultimo == 'S'){
              //----
              $registros[$i]['tipo'] = 'SOCIOS/DIRECTORES';
              $registros[$i]['cuit'] = $value->cuit_persona;
              $registros[$i]['tipo_persona'] = SQLConnection::backendStoreProcedure('obtener_tipo_persona', array($value->cuit_persona), 'selectOne')->tipo_persona;
              $registros[$i]['nombre'] = $value->nombre_persona;
              $registros[$i]['cargo'] = $value->cargo_nombre;
              $registros[$i]['fecha_modificacion'] = $value->fecha_modificacion;
              $i++;
            }
          }
        }
        //-------- TOMAMOS LOS DATOS DE LOS ACCIONISTAS
        if (!empty($accionistas)){
          //-----
          foreach( $accionistas as $key => $value){
            //------
            $registros[$i]['tipo'] = 'ACCIONISTA';
            $registros[$i]['cuit'] = $value->cuit_persona;
            $registros[$i]['tipo_persona'] = SQLConnection::backendStoreProcedure('obtener_tipo_persona', array($value->cuit_persona), 'selectOne')->tipo_persona;
            $registros[$i]['nombre'] = $value->nombre_persona;
            $registros[$i]['cargo'] = 'ACCIONISTA';
            $registros[$i]['fecha_modificacion'] = $value->fecha_modificacion;
            $i++;
          }
        }
        //-------- TOMAMOS LOS DATOS DE LOS ACCIONISTAS DE
        if (!empty($accionistas_de) ){
          //------
          foreach ( $accionistas_de as $key => $value){
            $registros[$i]['tipo'] = 'ACCIONISTA DE';
            $registros[$i]['cuit'] = $value->cuit_persona;
            $registros[$i]['tipo_persona'] = SQLConnection::backendStoreProcedure('obtener_tipo_persona', array($value->cuit_persona), 'selectOne')->tipo_persona;
            $registros[$i]['nombre'] = $value->nombre_persona;
            $registros[$i]['cargo'] = 'ACCIONISTA DE';
            $registros[$i]['fecha_modificacion'] = $value->fecha_modificacion;
            $i++;
          }
        }
        //----------- DEVOLVEMOS LOS DATOS
        //------- SI EL UNICO REGISTRO DEVUELTO ES EL DE LA PERSONA CONSULTADA , SE CONSULTA EL FIDECHECK Y SE MUESTRA EL BRIEF Y SE GUARDA EL CONSUMO
        if ( empty($registros) ){
          return self::fidecheckConsultar($nombre_persona,$cuit,$pais);
        }
        //------ SI HAY MAS QUE UN REGISTRO DEVUELTO EN CASO DE SER EMPRESA
        else{
          $vista = \View::make('/fidecheck/fidecheck_online_resultado_consulta')->with(compact(['registros','cuit','pais','nombre_persona']))->render();
          return json_encode($vista);
        }
        //------
      } else {
        //----- EN CASO DE QUE LOS DATOS SON INCORRECTOS
        return 0;
      }
    } else {
      //------ SI EL PAIS NO ES ARGENTINA
      if ( preg_match($expReg_nombre,$nombre_persona)  ){
        //----SI LOS DATOS SON VALIDOS
        return self::fidecheckConsultar($nombre_persona,$cuit,$pais);
      } else {
        //----- SI LOS DATOS SON INVALIDOS
        return 0;
      }
    }
    //-----  
  }

  //----------- FUNCION ENCARGADA DE RECIBIR LOS DATOS DE LA PERSONA DEL DIRECTORIO Y HACERLE LA CONSULTA FIDECHECK (OBSOLETO)
  public static function fidecheckConsultarDirectorio(){
    $nombre_persona = Request::input('nombre_persona_directorio');
    $cuit = Request::input('cuit_persona_directorio');
    $pais = 'AR';
    //--------
    $expReg_cuit = '/^[0-9]{11}$/';
    $expReg_nombre = '/^[A-Za-zñÑ\.\s]+$/';
    //-------- SE VALIDAN LOS DATOS RECIBIDOS
    if ( preg_match($expReg_nombre,$nombre_persona) and preg_match($expReg_cuit,$cuit) ){
      return self::fidecheckConsultar($nombre_persona,$cuit,$pais);
    }
    //------- SI LOS DATOS SON INVALIDOS
    else{
      return 0;
    }
  }
  //---------------- FUNCION GENERICA ENCARGADA DE CONSULTAR FIDECHECK , MOSTRAR EL BRIEF Y GUARDAR EL PDF (OBSOLETO)
  public static function fidecheckConsultar($nombre_persona,$cuit,$pais){
    $cliente = Session::get('usuario')->cliente['client_id'];
    //----- CONSULTA EL FIDECHECK
    //--- CASO EXTRANJERO
    if ( $pais != 'AR' ){
      $fidecheck = self::CURLCall(env('API_SCORE_FIDECHECK_COMPLIANCE'),'apikey=1F44A3FAA0C15C42PEP2&country_code='.$pais.'&tax_id=null&full_name='.$nombre_persona,'POST');
    }
    //--- CASO ARGENTINA
    else{
      $fidecheck = self::CURLCall(env('API_SCORE_FIDECHECK_COMPLIANCE'),'apikey=1F44A3FAA0C15C42PEP2&country_code='.$pais.'&tax_id='.$cuit.'&full_name='.$nombre_persona,'POST');
    }
    //---
    $fidecheck = json_decode($fidecheck);
    $respuesta = $fidecheck->response[0];
    //----- SI EL RESULTADO DEVUELTO ES UN OBJETO (NO DEVOLVIO ERROR)
    if ( is_object($fidecheck) ){
      $fidecheck_score = 'N';
      $switch_fidecheck = $respuesta->fidecheck;
      //--- CONDICION QUE DETERMINA EL ESTADO FIDECHECK
      switch($switch_fidecheck){
        case 'TERRORISTA':
          $fidecheck = 'P';
          break;
        case 'SANCIONADO':
          $fidecheck = 'P';
          break;
        case 'PEP':
          $fidecheck = 'E';
          break;
        case 'RELACIONADO':
          $fidecheck = 'R';
          break;
        case 'SUJETO OBLIGADO':
          $fidecheck = 'S';
          break;
        default :
          $fidecheck = 'N';
          break;
      }
      //-------
      $detalle = '';
      $cargo       = (isset($respuesta->cargo)) ? $respuesta->cargo : '';
      $institucion = (isset($respuesta->institucion)) ? $respuesta->institucion : '';
      $relacion    = (isset($respuesta->relacion)) ? $respuesta->relacion : '';
      $lista       = (isset($respuesta->lista)) ? $respuesta->lista : '';
      $pais_fidecheck = (isset($respuesta->pais_fidecheck)) ? $respuesta->pais_fidecheck : '';
      //--------
      if ($lista!='') { $detalle .= 'Integrante de listas ' . $lista; }
      if ($detalle == '' && $pais_fidecheck != '') { $detalle = 'Integrante de listas'; }
      if ($pais_fidecheck!='')                     { $detalle .= ' ' . $pais_fidecheck; }
      if ($detalle!='')                  { $detalle .= ':'; }
      if ($cargo!='')                    { $detalle .= ' ' . $cargo; }
      if ($institucion!='')              { $detalle .= ' de ' . $institucion; }
      if ($relacion!='')                 { $detalle .= ' - Relacionado: ' . $relacion; }
      //--------- DEVUELVE LOS DATOS CON LA VISTA
      $fecha = getdate();
      $fecha = $fecha['mday'].'/'.$fecha['mon'].'/'.$fecha['year'];
      $propio = (object) ['nombre'=>$nombre_persona , 'fecha'=>$fecha , 'fidecheck'=>$fidecheck , 'detalle' => $detalle ];
      //------- SECCION DONDE SE DETERMINA EL ESTADO DE CUIT DEPENDIENDO DE SI LA PERSONA ES EXTRANJERA O NO
      $propio->tax_id = ($pais == 'AR') ? $cuit : null;
      //------- SECCION DONDE SE GENERA LA VISTA
      $vista = \View::make('/fidecheck/fidecheck_online_certificado')->with(compact('propio','pais'))->render();
      //------- SECCION DONDE SE ARMA EL PDF DE CONSUMOS Y SE GENERAN LAS VISTAS
      //--- SI NO ES ARGENTINO EL PDF CONTIENE EL FIDECHECK (GENERA EL PDF ANTES DE MOSTRAR LA VISTA)
      if ($pais != 'AR') {
        $id_pdf = self::fidecheckGenerarPdfConsumos($vista,'','',$nombre_persona);
        $vista = \View::make('/fidecheck/fidecheck_online_certificado')->with(compact('propio','pais','id_pdf'))->render();
      }
      //--- SI ES ARGENTINO 
      else{
        //------ OBTENEMOS LOS IDENTIFICADORES DE ARGENTINA
        $identificadores = Misc::identificadoresPais($pais);
        //------
        foreach ($identificadores as $clave => $identificador){
          $padron = SQLConnection::backendStoreProcedure('LN_busqueda_padron',array($identificador->identificador,$cuit));
          if (! empty($padron) ){
            break;
          }
        }
        //-- SI EXISTE UN REGISTRO EN EL PADRON CON ESTE IDENTIFICADOR
        if (! empty($padron) ){
          $id_padron = $padron[0]->id_padron;
          $datoscontrap = SQLConnection::backendStoreProcedure('LN_contrapartes_sc',array('search',null,$id_padron,$cliente,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,'47'));
          //---CHEQUEA SI EL CUIT CONSULTADO YA ESTA DADO DE ALTA EN EL PRODUCTO
          if (! empty($datoscontrap) ){
            $contraparte = $datoscontrap[0]->contraparte;
            $propio_datos = SQLConnection::backendStoreProcedure('LN_demo_fidecheck_', array('searchall', null, $contraparte, null, 'P'), 'selectOne');
            //--- CHEQUEA SI EL RESULTADO FIDECHECK ES DISTINTO DEL REGISTRO , Y SI ES ASI LE PREGUNTA AL USUARIO SI QUIERE ACTUALIZAR EL FIDECHECK DEL REIGISTRO
            if ( isset($propio_datos->fidecheck) and $fidecheck != $propio_datos->fidecheck){
              $vista = \View::make('/fidecheck/fidecheck_online_certificado')->with(compact('propio','pais','contraparte'))->render();
            }
          }
        }
      }
      //-------
      return json_encode($vista);
    }
    //--------- SI FALLA LA CONSULTA DE FIDECHECK
    else{
      return 0;
    }
    //---   
  }

  //------------- FUNCION QUE RECIBE EL FIDECHECK Y EL BRIEF Y GENERA EL PDF CONSUMOS PARA ARGENTINOS (POR LA DIFICULTAD DE GENERAR EL BRIEF EN EL CONTROLADOR CON LOS GRAFICOS)
  public function fidecheckGuardarPdfConsumoArgentina(){
    $cuit = Request::input('cuit');
    $nombre_persona = Request::input('nombre_persona');
    $vista = Request::input('vista_fidecheck');
    $grafico_cheques = Request::input('grafico_cheques');
    $grafico_empleados = Request::input('grafico_empleados');
    $grafico_financiero = Request::input('grafico_financiero');
    $grafico_comex = Request::input('grafico_comex');
    $grafico_score = Request::input('grafico_score');
    //--------
    $brief = self::$MainController->obtenerBrief(false,$grafico_financiero,$grafico_empleados,$grafico_cheques,$grafico_score,$grafico_comex);
    // echo(var_dump($brief)); die();
    return self::fidecheckGenerarPdfConsumos($vista,$brief,$cuit,$nombre_persona);
    //---------
  }

  //---- FUNCION HELPER ENCARGADA DE GENERAR EL PDF DE CONSUMOS DEL BRIEF Y FIDECHECK (EN CASO ARGENTINA) O SOLAMENTE EL FIDECHECK (CASO EXTRANJERO) Y GUARDARLO
  public static function fidecheckGenerarPdfConsumos($vista,$brief='',$cuit='',$nombre_persona){
    //---
    $puntero = Session::get('usuario');
    $usuario        = $puntero->username;
    $cliente = $puntero->cliente['client_id'];
    //------
    if ( isset($puntero->cliente[99]->nombre_cliente)  ){
      $nombre_cliente = $puntero->cliente[99]->nombre_cliente;
    }
    elseif (  isset($puntero->cliente[env('ID_INFORME_COMERCIAL')]->nombre_cliente) ){
      $nombre_cliente = $puntero->cliente[env('ID_INFORME_COMERCIAL')]->nombre_cliente;
    }
    else{
      $nombre = isset($puntero->firstname) ? $puntero->firstname : '';
      $apellido = isset($puntero->lastname) ? $puntero->lastname : '';
      $nombre_cliente = $nombre.' '.$apellido;
    }
    //--- FORMANDO EL TITULO DEL HEADER DEL PDF
    if ( empty($cuit) ){
      $cabezador_archivo = $nombre_persona;
    } else{
      $cabezador_archivo = $nombre_persona.'-'.$cuit;
    }
    //------
    //------ FORMANDO EL PDF
    //----- FORMANDO LA CABEZERA DEL ARCHIVO
    $header         = '<div class="col-md-12 title-report background-fidelitas" style="margin-top:30px;padding:5px;">
    <div class="col-md-7 col-sm-7 col-xs-7 text-left" id="nc" style="padding: 5px; ">
    '.$cabezador_archivo.'
    </div>
    <div class="col-md-5 col-sm-5 col-xs-5 text-right" id="nc" style="padding-right: 50px; padding-top: 5px; padding-bottom: 5px; padding-left: 5px;">
    '.$nombre_cliente. '-'.$usuario.'
    </div>
    </div>';
    //----- OBTENEMOS EL LOGO
    $data_web = Session::get('webdata')['id_plataforma'];
    if ($data_web == 'IV'){
      $fidelitas = Misc::obtenerImagenInquiro();
    }
    elseif ($data_web == 'IM'){
      $fidelitas = Misc::obtenerImagenImperium();
    }
    else{
      $fidelitas = Misc::obtenerImagenFidelitas();
    }
    //------ ARMAMOS EL CONTENIDO DEL PDF
    $html = '';
    $html .= view('exportar/css')->render();
    $html .= '<div class="container">';
    $html .= '<img src="'.$fidelitas.'"  class="text-left"  style="height:60px;margin-top: 50px;">';
    $html .= $header;
    $html .= "<h2 class='text-center' style='margin-top: 25px;' >Fidecheck</h2>";
    $html .= $vista;
    $html .= '<div class="page-breaker">';
    $html .= "</div>";
    //------
    if ( ! empty($brief) ){
      $html .= '<div class="container">';
      $html .= '<img src="'.$fidelitas.'"  class="text-left"  style="height:60px;margin-top: 50px;">';
      $html .= $header;
      $html .= "<h2 class='text-center' style='margin-top: 25px;' >Resumen</h2>";
      $html .= $brief;
      $html .= '<div class="page-breaker">';
      $html .= "</div>";
    }
    //-------
    $html .= "</div>";
    $html .= "</body>";
    //------ SECCION DE GUARDAR EN LA BASE DE DATOS
    $user_id = Session::get('usuario')->user_id;
    $ip = $_SERVER['REMOTE_ADDR'];
    //---- EN CASO DE SER EXTRANJERO
    if ( empty($cuit) ){
      $params = array($user_id,$nombre_persona,'90',$ip,null,null);
    }
    //----- EN CASO DE SER ARGENTINO
    else{
      $params = array($user_id,$cuit,'90',$ip,null,null);
    }
    $id = SQLConnection::backendStoreProcedure('consumir_servicio_API', $params);
    $id = $id[0]->transaction_id;
    //------ SECCION GUARDAR PDF
    $nombre = $id.'.html';
    $file = ENV('TEMP_PDF').'/'.$cliente.'/'.$nombre;
    $file_download  = ENV('PATH_FIDECHECK_ONLINE').'/'.$cliente.'/'.str_replace('.html', '.pdf', $nombre);
    //-------
    if(!is_dir(ENV('TEMP_PDF').'/'.$cliente)){
      mkdir(ENV('TEMP_PDF').'/'.$cliente, 0777,true);
    }
    if(!is_dir(ENV('PATH_FIDECHECK_ONLINE').'/'.$cliente)){
      mkdir(ENV('PATH_FIDECHECK_ONLINE').'/'.$cliente, 0777,true);
    }
    //------
    file_put_contents($file,utf8_decode($html));
    chmod($file, 0777);
    exec("/usr/local/bin/wkhtmltopdf -d 300 -L 10 -R 5 -T 10 -B 10 --header-font-size 8 --header-right ' [page] de [toPage]'  --viewport-size 1920x1400 --zoom 1 ".$file." ".$file_download);
    return $id;
  }

  //----- FUNCION ENCARGADA DE DESCARGAR EL PDF DEL REGISTRO ELEGIDO
  public static function fidecheckDescargarPdfConsumos(){
    $cliente = Session::get('usuario')->cliente['client_id'];
    $expReg_cuit = '/^[0-9]+$/';
    $expReg_nombre = '/^[A-Za-zñÑ\.\s0-9]+$/';
    //---- SI LOS DATOS SON VALIDOS
    if ( preg_match($expReg_nombre,$_POST['nombre']) and (preg_match($expReg_cuit,$_POST['identificacion']) or $_POST['identificacion'] == null)  and preg_match($expReg_cuit,$_POST['id_pdf']) ){
      $cuit = $_POST['identificacion'];
      $nombre_persona = $_POST['nombre'];
      $id_pdf = $_POST['id_pdf'];
      //----- ARMANDO EL NOMBRE DEL ARCHIVO Y SU RUTA
      $titulo_pdf = $id_pdf.'.pdf';
      if ( empty($cuit) ){
        $titulo_archivo = str_replace(' ','',$nombre_persona).'.pdf';
      }
      else{
        $titulo_archivo = str_replace(' ','',$nombre_persona).'-'.$cuit.'.pdf';
      }
      //-- SI EXISTE EL ARCHIVO LO DESCARGA
      $ruta = ENV('PATH_FIDECHECK_ONLINE').'/'.$cliente.'/'.$titulo_pdf;
      if ( file_exists($ruta) ){
        $archivo = file_get_contents($ruta);
        //---
        $response = array(
          'op'=> 'ok',
          'archivo' => $titulo_archivo,
          'file' => "data:application/pdf;base64,".base64_encode($archivo) 
        );
        return json_encode($response);
      }
      //----
      else{
        return 'No se encontro el pdf';
      }
    }
    //--- SI LOS DATOS SON INVALIDOS
    else{
      return 'Datos invalidos';
    }
    //---
  }

  //------- FUNCION ENCARGADA DE ACTUALIZAR EL FIDECHECK DE LA CONTRAPARTE DEL CUIT CONSULTADO
  public static function fidecheckActualizarContraparte(){
    $expReg_cuit = '/^[0-9]+$/';
    $expReg_fidecheck = '/^[P|E|R|S|N]$/';
    //------- SI LOS DATOS RECIBIDOS SON VALIDOS
    if ( preg_match($expReg_cuit,$_POST['cuit']) and preg_match($expReg_cuit,$_POST['contraparte']) and preg_match($expReg_fidecheck,$_POST['fidecheck']) ){
      $contraparte = $_POST['contraparte'];
      $fidecheck = $_POST['fidecheck'];
      $cuit = $_POST['cuit'];
      $seccion = 'P';
      $detalle = $_POST['detalle'];
      $idr = 0;
      //------
      $actualizo = SQLConnection::backendStoreProcedure('LN_actualiza_fidecheck', array($contraparte,$cuit,$seccion,$fidecheck,$detalle,$idr),'select');
      $insert_queue = SQLConnection::backendStoreProcedure('LN_contrapartes_queue_', array('insert',NULL,$contraparte), 'selectOne'); 
      return 1;
    }
    //------ SI LOS DATOS RECIBIDOS SON INVALIDOS
    else{
      return 0;
    }
  }



  //------------- REMODELACION ----------//
  //----- FUNCION ENCARGADA DE RECIBIR LA BUSQUEDA Y DEPENDIENDO DEL MODO DE BUSQUEDA DEVOLVER LA RESPUESTA ADECUADA (OBSOLETO)
  public static function fidecheckResultado_remodelacion(){
    $expReg1 = '/^[A-Za-zñÑ\.\s0-9]+$/';
    $expReg2 = '/^[0-9]{8}$|^[0-9]{11}$/';
    $expReg3 = '/^[\s\.]+$/';
    $expReg4 = '/^[0-9]{1,7}$|^[0-9]{8,10}$|^[0-9]{12,}$/';
    //------- CASO TEXTO LIBRE
    if ( preg_match($expReg1,$_POST['resultado_busqueda']) and  preg_match($expReg3,$_POST['resultado_busqueda']) == 0  and preg_match($expReg2,$_POST['resultado_busqueda'])){
      $busqueda = $_POST['resultado_busqueda'];
      //----- SE CONSULTA EL PADRON
      $resultado = SQLConnection::busquedaPadron($busqueda,false);
      //---- CASO QUE NO TENGA RESULTADO
      if ( empty($resultado) ){
        return 0;
      }
      //---- CASO QUE TENGA MAS UN RESULTADO
      elseif ( count($resultado) == 1 ){
      $resultado = $resultado[0];
      //----
      $nombre_persona = $resultado->nombre_persona;
      $cuit = $resultado->identificacion;
      return self::fidecheckConsultar_remodelacion($nombre_persona,$cuit);
      }
      //---- CASO QUE TENGA MAS QUE UN RESULTADO
      else {
        $data = $resultado;
        $vista = \View::make('/fidecheck/fidecheck_tabla_multi_resultados')->with(compact('data'))->render();
        return $vista;
      }
    }
    //-----
    elseif ( preg_match($expReg1,$_POST['resultado_busqueda']) and  preg_match($expReg3,$_POST['resultado_busqueda']) == 0  and preg_match($expReg2,$_POST['resultado_busqueda']) == 0  and preg_match($expReg4,$_POST['resultado_busqueda']) == 0 ){
      $busqueda = strtoupper($_POST['resultado_busqueda']);
      $nombre_persona = $busqueda;
      //----
      return self::fidecheckConsultar_remodelacion($nombre_persona);
    }
    //----
    elseif ( preg_match($expReg1,$_POST['resultado_busqueda']) and preg_match($expReg3,$_POST['resultado_busqueda']) == 0 and preg_match($expReg2,$_POST['resultado_busqueda']) == 0 and preg_match($expReg4,$_POST['resultado_busqueda']) ){
      return 0;
    }
    else{
      return 0;
    }
    /* if ( preg_match($expReg1,$_POST['resultado_busqueda']) and  preg_match($expReg3,$_POST['resultado_busqueda']) == 0  ){
      $busqueda = strtoupper($_POST['resultado_busqueda']);
      $nombre_persona = $busqueda;
      //----
      return self::fidecheckConsultar_remodelacion($nombre_persona);
    }
    //-- CASO CUIT O DNI
    elseif ( preg_match($expReg2,$_POST['resultado_busqueda']) ){
      $busqueda = $_POST['resultado_busqueda'];
      //----- SE CONSULTA EL PADRON
      $resultado = SQLConnection::busquedaPadron($busqueda,false);
      //---- CASO QUE NO TENGA RESULTADO
      if ( empty($resultado) ){
        return 0;
      }
      //---- CASO QUE TENGA MAS UN RESULTADO
      elseif ( count($resultado) == 1 ){
      $resultado = $resultado[0];
      //----
      $nombre_persona = $resultado->nombre_persona;
      $cuit = $resultado->identificacion;
      return self::fidecheckConsultar_remodelacion($nombre_persona,$cuit);
      }
      //---- CASO QUE TENGA MAS QUE UN RESULTADO
      else {
        $data = $resultado;
        $vista = \View::make('/fidecheck/fidecheck_tabla_multi_resultados')->with(compact('data'))->render();
        return $vista;
      } */
    //}
  }

  //---- FUNCION ENCARGADA DE HACER LA CONSULTA FIDECHECK DEL REGISTRO DE LA TABLA DE RESULTADO DEL PADRON
  public static function fidecheckConsultarRegistroPadron(){
    if ( is_numeric($_POST['idpadron']) ){
      $id_padron = $_POST['idpadron'];
      $padron  = DB::selectOne('EXEC dbo.backend_obtener_id_padron '.$id_padron);
      $nombre_persona = $padron->nombre_persona;
      $cuit = $padron->identificacion;
      return self::fidecheckConsultar_remodelacion($nombre_persona,$cuit);
    }
  }

  //-- Funcion para determinar el la etiquete segun el color de fidecheck
	static function etiquetaFidecheck($letra) {
		$etiquetas = array('R' => 'RELACIONADO', 'E' => 'PEP', 'P' => 'SANCIONADO', 'S' => 'SUJETO OBLIGADO', 'N' => 'NEGATIVO');
		try {
			return $etiquetas[$letra];
		} catch (\Throwable $th) {
			return 'null';
		}
	}

  //--  LLAMADA API WS NUEVA FIDELITAS - SOLO PARA YPF FIDECHECK ONLINE  --//
  public static function consultApiWsNuevaFidecheckOnLine($tax_id, $full_name, $country_code) {
    
    $tax_id = ($tax_id == 'null') ? '' : $tax_id;
    $full_name = ($full_name == 'null') ? '' : $full_name;
    $country_code = ($country_code == 'null') ? '' : $country_code;
    // echo($tax_id.'-'.$full_name.'-'.$country_code); die();
    $token = env('PEP_NV_TOKEN_FIDECHECK_AUTOMATICO');
    $data = array("apikey" => $token, "tax_id" => $tax_id, "full_name" => $full_name, "country_code" => $country_code);
    $url = env('PEP_NV_URL_CONSUMO_INTERNO');

    $curl = curl_init();

    curl_setopt_array($curl, array(
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $data,
    ));

    $response = curl_exec($curl);

    curl_close($curl);
    //return json_decode($response)->response;
    $datos =json_decode($response)->response;
    $datos_finales = array();
    // echo(var_dump($datos)); die();
    if(count($datos) > 0) {
      foreach ($datos as $key) {
        $persona = new \stdClass;
        $persona->error = 'ok';
        $persona->index = 'ldi';
        $persona->id = $key->Id;
        $persona->score = $key->PorcentajeSimilitud;
        $persona->fuente = $key->Fuente;
        $persona->taxid = $key->NumeroIdTributaria;
        $persona->nombre = $key->nombre_persona;
        $persona->fidecheck = self::etiquetaFidecheck($key->fidecheck);
        $persona->descripcion = $key->DescripcionFuente;
        $persona->lista = (!isset($key->TipoFuente)) ? '' : $key->TipoFuente;
        $persona->pais = $key->DescripcionPais;
        $persona->cargo = $key->Cargo;
        $persona->institucion = $key->Institucion;
        $persona->relacion = (!isset($key->relacion)) ? '' : $key->relacion;
        $persona->url = $key->Url;
  
        $datos_finales[] = $persona;
      }
    } else {
      $persona = new \stdClass;
      $persona->error = 'ok';
      $persona->taxid = $tax_id;
      $persona->nombre = $full_name;
      $persona->fidecheck = self::etiquetaFidecheck('N');
      $persona->descripcion = '';
      $persona->lista = '';
      $persona->pais = '';
      $persona->cargo = '';
      $persona->institucion = '';
      $persona->relacion = '';

      $datos_finales[] = $persona;
    }

    return $datos_finales;

}

  //------ FUNCION ENCARGADA DE HACER LA CONSULTA DE FIDECHECK
  public static function fidecheckConsultar_remodelacion($nombre_persona,$cuit='null'){
    //-----------
    $pais = ($cuit == 'null') ? 'null' : 'AR';
    // $consulta_fidecheck = self::CURLCall(env('API_SCORE_FIDECHECK_COMPLIANCE2'),'apikey=1F44A3FAA0C15C42PEP2&country_code='.$pais.'&tax_id='.$cuit.'&full_name='.$nombre_persona,'POST');
    // $consulta_fidecheck = json_decode($consulta_fidecheck);
    $consulta_fidecheck = self::consultApiWsNuevaFidecheckOnLine($cuit, $nombre_persona, $pais);
    // echo(var_dump($consulta_fidecheck)); die();
    foreach ( $consulta_fidecheck as $key => $value){
      if ($value->taxid == 'null'){
        $value->taxid = '';
      }
    }
    //----------- SI WORLDSYS DEVUELVE MAS QUE UN REGISTRO
    if ( count($consulta_fidecheck) > 1 ){
      $vista = \View::make('/fidecheck/fidecheck_online_resultado_consulta')->with(compact('consulta_fidecheck','nombre_persona','cuit'))->render();
      return $vista;
    }
    //----------- SI WORLDSYS DEVUELVE SOLAMENTE UN REGISTRO
    elseif (count($consulta_fidecheck) == 1) {
      $propio = self::fidecheckCertificado_remodelacion($consulta_fidecheck[0]);
      //-----
      if ($propio->nombre == null) { $propio->nombre = $nombre_persona; } 
      if ($propio->tax_id == null) { $propio->tax_id = $cuit; } 
      return self::fidecheckProcesador_remodelacion($propio,$consulta_fidecheck[0]->pais);
    }
    //------- SI WORLDSYS NO DEVUELVE NINGUN REGISTROS
    else{
      return 0;
    }
    
  }

  //------ FUNCION QUE DEVUELVE EL CERTIFICADO DEL REGISTRO ELELGIDO
  public static function fidecheckConsultarDirectorio_remodelacion(){
    //--
    $nombre_persona = convert_uudecode($_POST['nombre_persona']) != false ? convert_uudecode($_POST['nombre_persona']) : '';
    $tax_id = convert_uudecode($_POST['tax_id']) != false ? convert_uudecode($_POST['tax_id']) : '';
    $fidecheck = convert_uudecode($_POST['fidecheck']) != false ? convert_uudecode($_POST['fidecheck']) : '';
    $descripcion = convert_uudecode($_POST['descripcion']) != false ? convert_uudecode($_POST['descripcion']) : '';
    $lista = convert_uudecode($_POST['lista']) != false ? convert_uudecode($_POST['lista']) : '';
    $pais = convert_uudecode($_POST['pais']) != false ? convert_uudecode($_POST['pais']) : '';
    $cargo = convert_uudecode($_POST['cargo']) != false ? convert_uudecode($_POST['cargo']) : '';
    $relacion = convert_uudecode($_POST['relacion']) != false ? convert_uudecode($_POST['relacion']) : '';
    $fuente = convert_uudecode($_POST['fuente']) != false ? convert_uudecode($_POST['fuente']) : '';
    //---------
    $consulta = (object) ['nombre'=>$nombre_persona , 'taxid'=>$tax_id , 'fidecheck'=>$fidecheck , 'descripcion' => $descripcion , 'lista' => $lista , 'pais'=> $pais , 'cargo' => $cargo , 'relacion' => $relacion , 'fuente' => $fuente];
    //---------
    $propio = self::fidecheckCertificado_remodelacion($consulta);
    //----------
    return self::fidecheckProcesador_remodelacion($propio,$pais);
    //----------
  }

  // FUNCION ENCARGADA DE DETERMINAR EL CASO DEL FIDECHECK Y LOS POSIBLES SERVICIOS QUE SE PUEDEN BRINDAR AL USUARIO
  public static function fidecheckProcesador_remodelacion($propio,$pais){
    $servicios = Session::get('usuario')->servicios;
    $es_led = false;
    //------- SE QUE EL CLIENTE TENGA EL PRODUCTO LED
    foreach ( $servicios as $key => $value ){
      if ( $value->id_producto == '47'){
        $es_led = true;
        break;
      }
    }
    //------- SE DETERMINA EL CODIGO PAIS DE LA CONSULTA
    $codigos_paises = Misc::contrapartesPaises();
    $codigo_pais = '';
    //-------
    foreach ( $codigos_paises as $key => $value ){
      if ( $value->nombre_pais == $pais){
        $codigo_pais = $value->country_code;
        break;
      }
    }
    //--- SI WORLDSYS DEVUEVLE QUE EL REGISTRO ES ARGENTINO Y TIENE TAX_ID SE HACE LA CONSULTA POR SI EXISTE LA CONTRAPARTE
    if ( $codigo_pais == 'AR' and (!empty($propio->tax_id)) ){
      $vista = self::fidecheckVerificarContraparte_remodelacion($propio,$codigo_pais,$es_led);
      return $vista;
    }
    //----- SI WORLDSYS DEVUELVE EL TAX_ID PERO NO DEVUELVE EL PAIS SE HACE UNA BUSQUEDA POR EL TAX_ID EN EL PADRON SI EXISTE SE DETERMINA QUE EL PAIS ES ARGENTINA
    elseif ( $codigo_pais != 'AR' and (!empty($propio->tax_id)) ){
      $identificadores = Misc::identificadoresPais('AR');
      $idenitificacion = $propio->tax_id;
      //------
      if (empty($codigo_pais)){
        foreach ($identificadores as $clave => $identificador){
          $padron = SQLConnection::backendStoreProcedure('LN_busqueda_padron',array($identificador->identificador,$propio->tax_id));
          if (! empty($padron) ){
            $codigo_pais = 'AR';
            break;
          }
        }
      }
      //------ EN CASO SE VERIFIQUE QUE EL CUIT ES ARGENTINO , SE PREGUNTA POR SI ESTA DADO DE ALTA COMO REGISTRO
      if ( $codigo_pais == 'AR' ){
        $vista = self::fidecheckVerificarContraparte_remodelacion($propio,$codigo_pais,$es_led);
        return $vista;
      }
      //----- EN CASO QUE SE VERIFIQUE QUE EL CUIT NO ES ARGENTINO , SE GUARDA EL CONSUMO , SE DEVUELVE EL FIDECHECK Y SE PREGUNTA POR SI LO QUIERE DAR DE ALTA AL REGISTRO
      else{
        $vista = \View::make('/fidecheck/fidecheck_online_certificado')->with(compact('propio','codigo_pais','es_led'))->render();
        $nombre_persona = $propio->nombre;
        $id_pdf = self::fidecheckGenerarPdfConsumos($vista,'','',$nombre_persona);
        //--------------- ACA SE PREGUNTA POR LA EXISTENCIA DE IDENTIFICADORES DEL PAIS DE LA PERSONA , PARA DECIDIR SI SE PUEDE DAR DE ALTA LA CONTRAPARTE
        if (strlen($codigo_pais) > 0){
          if ( empty(Misc::identificadoresPais($codigo_pais)) ){
            $no_es_contraparte = false;
          }
          else{
            $no_es_contraparte = true;
          }
        }
        else{
          $no_es_contraparte = true;
        }
        //----------------
        return \View::make('/fidecheck/fidecheck_online_certificado')->with(compact('propio','codigo_pais','id_pdf','no_es_contraparte','es_led'))->render();
      }
    }
    //----- SI EN LOS CASOS QUE WORLDSYS NO DEVUELVE UNA IDENTIFICACION
    elseif ( $codigo_pais == 'AR' and empty($propio->tax_id) ){
      $vista = \View::make('/fidecheck/fidecheck_online_certificado')->with(compact('propio','codigo_pais','es_led'))->render();
      $nombre_persona = $propio->nombre;
      $id_pdf = self::fidecheckGenerarPdfConsumos($vista,'','',$nombre_persona);
      //-------
      $no_es_contraparte = self::fidecheckDeterminarPosibilidadesContraparte($propio->nombre);
      //-------
      return \View::make('/fidecheck/fidecheck_online_certificado')->with(compact('propio','codigo_pais','id_pdf','no_es_contraparte','es_led'))->render();
    }
    //-------
    else{
      $vista = \View::make('/fidecheck/fidecheck_online_certificado')->with(compact('propio','codigo_pais','es_led'))->render();
      $nombre_persona = $propio->nombre;
      $id_pdf = self::fidecheckGenerarPdfConsumos($vista,'','',$nombre_persona);
      //--------------- ACA SE PREGUNTA POR LA EXISTENCIA DE IDENTIFICADORES DEL PAIS DE LA PERSONA , PARA DECIDIR SI SE PUEDE DAR DE ALTA LA CONTRAPARTE
      if (strlen($codigo_pais) > 0){
        if ( empty(Misc::identificadoresPais($codigo_pais)) ){
          $no_es_contraparte = false;
        }
        else{
          $no_es_contraparte = true;
        }
      }
      else{
        $no_es_contraparte = true;
      }
      //-------
      return \View::make('/fidecheck/fidecheck_online_certificado')->with(compact('propio','codigo_pais','id_pdf','no_es_contraparte','es_led'))->render();
    }
  }


  // FUNCION ENCARGADA DE VERIFICAR SI LA CONTRAPARTE YA ESTA DADA DE ALTA O NO
  public static function fidecheckVerificarContraparte_remodelacion($propio,$codigo_pais,$es_led){
    $cliente = Session::get('usuario')->cliente['client_id'];
    //------
    $no_es_contraparte = true;
    $vista = \View::make('/fidecheck/fidecheck_online_certificado')->with(compact('propio','codigo_pais','no_es_contraparte','es_led'))->render();
    //------ BUSCAR LA CONTRAPARTE      
    $identificadores = Misc::identificadoresPais($codigo_pais);
    $idenitificacion = $propio->tax_id;
    //------
    foreach ($identificadores as $clave => $identificador){
      $padron = SQLConnection::backendStoreProcedure('LN_busqueda_padron',array($identificador->identificador,$propio->tax_id));
      if (! empty($padron) ){
        break;
      }
    }
    //------
    if (!empty($padron) ){
      $id_padron = $padron[0]->id_padron;
      $datoscontrap = SQLConnection::backendStoreProcedure('LN_contrapartes_sc',array('search',null,$id_padron,$cliente,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,'47'));
      //---CHEQUEA SI EL CUIT CONSULTADO YA ESTA DADO DE ALTA EN EL PRODUCTO
      if (! empty($datoscontrap) ){
        $contraparte = $datoscontrap[0]->contraparte;
        $propio_datos = SQLConnection::backendStoreProcedure('LN_demo_fidecheck_', array('searchall', null, $contraparte, null, 'P'), 'selectOne');
        $fidecheck = $propio->fidecheck;
        //--- CHEQUEA SI EL RESULTADO FIDECHECK ES DISTINTO DEL REGISTRO , Y SI ES ASI LE PREGUNTA AL USUARIO SI QUIERE ACTUALIZAR EL FIDECHECK DEL REIGISTRO
        if ( isset($propio_datos->fidecheck) and $fidecheck != $propio_datos->fidecheck){
          $vista = \View::make('/fidecheck/fidecheck_online_certificado')->with(compact('propio','codigo_pais','contraparte','es_led'))->render();
        }
        //--- EN CASO QUE TENGA UNA CONTRAPARTE DADA DE ALTA SE ANULA EL PROCESO DE DAR DE ALTA UNA CONTRAPARTE
        else{
          $vista = \View::make('/fidecheck/fidecheck_online_certificado')->with(compact('propio','codigo_pais','es_led'))->render();
        }
      }
    }
    //-----
    return $vista;
  }


  
  //----- FUNCION QUE PARSEA EL CONTENIDO DEL API T DEVUELVE EL CONTENIDO DEL CERTIFICADO
  public static function fidecheckCertificado_remodelacion($consulta){
    $fidecheck_score = 'N';
    $switch_fidecheck = $consulta->fidecheck;
    //--- CONDICION QUE DETERMINA EL ESTADO FIDECHECK
    switch($switch_fidecheck){
      case 'TERRORISTA':
        $fidecheck = 'P';
        break;
      case 'SANCIONADO':
        $fidecheck = 'P';
        break;
      case 'PEP':
        $fidecheck = 'E';
        break;
      case 'RELACIONADO':
        $fidecheck = 'R';
        break;
      case 'SUJETO OBLIGADO':
        $fidecheck = 'S';
        break;
      default :
        $fidecheck = 'N';
        break;
    }
    //-------
    $detalle = '';
    $cargo       = (isset($consulta->cargo)) ? $consulta->cargo : '';
    $institucion = (isset($consulta->institucion)) ? $consulta->institucion : '';
    $relacion    = (isset($consulta->relacion)) ? $consulta->relacion : '';
    $lista       = (isset($consulta->lista)) ? $consulta->lista : '';
    $pais_fidecheck = (isset($consulta->pais)) ? $consulta->pais: '';
    //--------
    if ($lista!='') { $detalle .= 'Integrante de listas ' . $lista; }
    if ($detalle == '' && $pais_fidecheck != '') { $detalle = 'Integrante de listas'; }
    if ($pais_fidecheck!='')                     { $detalle .= ' ' . $pais_fidecheck; }
    if ($detalle!='')                  { $detalle .= ':'; }
    if ($cargo!='')                    { $detalle .= ' ' . $cargo; }
    if ($institucion!='')              { $detalle .= ' de ' . $institucion; }
    if ($relacion!='')                 { $detalle .= ' - Relacionado: ' . $relacion; }
    //--------
    $fecha = date('d/m/Y');
    $nombre_persona = $consulta->nombre;
    $cuit = $consulta->taxid;
    //-----
    if ( isset($consulta->fuente) ){
      $fuente = $consulta->fuente;
    }
    else{
      $fuente = '';
    }
    //----
    $propio = (object) ['nombre'=>$nombre_persona , 'fecha'=>$fecha , 'fidecheck'=>$fidecheck , 'detalle' => $detalle , 'tax_id'=>$cuit , 'fuente' => $fuente , 'cargo' => $cargo];
    //--------
    return $propio;
    //----------
  }


  //----- ESTA FUNCION ES LA ENCARGADA DE DETERMINAR (SI EL REGISTRO TIENE SOLO EL NOMBRE Y ES DE ARGENTINA) SI EL REGISTRO TIENE OPCIONES DE DAR DE ALTA CONTRAPARTE
  public static function fidecheckDeterminarPosibilidadesContraparte($nombre){
    $cliente = Session::get('usuario')->cliente['client_id'];
    //--
    $nombre = Misc::parsearBusquedaPadron($nombre);
      $resultado_padron = DB::select('EXEC dbo.busqueda_padron_autocompletar ?,?', array($nombre,1));
      //-------
      foreach( $resultado_padron as $key => $value ){
        $id_padron = $value->id_padron;
        $datoscontrap = SQLConnection::backendStoreProcedure('LN_contrapartes_sc',array('search',null,$id_padron,$cliente,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,'47'));
        //---- SI EL STORE DEVUELVE QUE EL RESULTADO DEL PADRON YA EXISTE EN COMO CONTRAPARTE LO SACA DEL ARRAY
        if (!empty($datoscontrap)){
          unset($resultado_padron[$key]);
        }
        //---
      }
      //------- SI EL ARRAY ES VACIO POR ENDE NO PUEDE DAR DE ALTA LA CONTRAPARTE PORQUE YA TODAS LAS POSIBILIDADES ESTAN COMO CONTRAPARTES
      if ( empty($resultado_padron)){
        return false;
      }
      //---- SI EL ARRAY NO ES VACIO ENTONCES PUEDE HABER CASO EN DONDE SE PUEDE DAR DE ALTA UNA CONTRAPARTE DEL RESULTADO DE BUSQUEDA PADRON
      else{
        return true;
      }
    //--
  }
}



