<?php

namespace App\Http\Controllers;

use App\Custom\SQLConnection; 
use App\Custom\Misc;
use App\Custom\Mailer;
use App\Custom\DashboardJSON;
use App\Http\Controllers\EmailController; 
use App\Http\Controllers\IVNewController;
use Request;
use Session;
use DateTime;
use Illuminate\Support\Facades\Input;
use DB;
use stdClass;
use Response;

class IVHRController extends Controller
{
    public function solicitud(){
        // devuelve los primeros campos del formulario
        $usuario = Session::get('usuario');
        $cliente = Session::get('usuario')->cliente['client_id'];
        //
        $familias = SQLConnection::backendStoreProcedure('LN_familias_', array('inquirovitae', null, null, $cliente, null, 1, null), 'select');
        // obtener los paises distintos que tenemos
        $paises = [];
        //
        foreach ($familias as $fam) {
			if ( $fam->country_code == 'DE' ){
				continue;
			}	
            if ( isset($paises[$fam->country_code]) ){
                $paises[$fam->country_code]->familias[] = $fam->familia;
            } else {
                $paises[$fam->country_code] = (object) ['name' => $fam->country_name, 'familias' => [$fam->familia]];
            }
        }
        //
        return view('/iv_hr/nueva_orden')->with(compact('usuario','paises'));
    }

    public function informesFamilia(){
        // devuelve los campos de tipo informe y referencia en base a la familia
        $cliente = Session::get('usuario')->cliente['client_id'];
        $familia = Request::input('familia');
        $tipos_informe = SQLConnection::backendStoreProcedure('LN_tipo_informes_', array('LISTAR_FAMILIA','','','',1,3,3,$cliente,$familia,'spa','',Session::get('usuario')->user_id),'select');
        // Saca tipo de informes inactivos en la familia
        foreach ($tipos_informe as $k => $inf) {
            if ($inf->activo_fam_inf == '0') {
                unset($tipos_informe[$k]);
            }
        }
        array_values($tipos_informe);
        // el id de la familia elegida para obtener los tipos de informe de la familia
        return view('/iv_hr/tipos_orden')->with(compact('tipos_informe'));
    }

    
    // FUNCIÓN QUE REALIZA LA BÚSQUEDA DEL TAX ID EN EL PADRON DE IV EN PRIMERA INSTANCIA Y LUEGO EN EL DE FIDELITAS SI NO OBTIENE RESULTADOS EN LA BÚSQUEDA ANTERIOR
    public function taxIdPadronDev(){
        $pais = Request::input('pais');
        $tax_id = Request::input('numero_id');
        $tipo_identificacion = Request::input('tipo_id');
        $razon_social = Request::input('razon_social') ?? '';
        $tipo_persona = Request::input('tipo_persona') ?? '';
        $sexo = Request::input('sexo') ?? '';
        // devuelve el formulario de identificacion y identificador
        $pais_busqueda = ($pais == 'AR') ? $pais : 'OTRO';

        // Busca en el Padrón (Dependiendo donde esté, ya que puede ser en FIDELITAS CLIENTES o en INQUIRO CLIENTES). La api está en FIDELITAS (es la que proveé a INQUIRO), si está en el mismo Fidelitas no es necesario hacer la llamada a la API y puede realizarse a través de uso interno. Pero si está en INQUIRO, no tiene los datos y la consulta es de Argentina, puede hacer la consulta del padrón de Fidelitas a traves de la API.

        // BUSQUEDA EN PADRÓN IV
        $db = DB::connection('demo_sqlsrv');
        $data = $db->select("SELECT * from padron_IV where (numero = $tax_id or cuerpo_clave = $tax_id) AND identificador = '$tipo_identificacion'");
        // Si no encuentra en Padrón IV y es de de ARGENTINA (o está eL enviroment DB_IV_BETA == 1) busca mediante el api en el Padrón de Fideltas, luego lo insertar en el Padrón IV y devuelve el resultado del api (para no realizar nuevamente otra consulta)
        if ( empty($data) && ($pais == 'AR' || env('DB_IV_BETA') == 1) ){
            if ( env('DB_IV_BETA') == 1 ) {
                $data = Misc::CURLCall(env('URL_BASEWEB_INQ').'/api/v1/busqueda-padron',http_build_query(['apikey'=>env('APIKEY_API_BRIEF'),'identificacion'=>$tax_id,'pais_busqueda'=>$pais_busqueda,'razon_social'=>$razon_social,'pais'=>$pais,'tipo_identificacion'=>$tipo_identificacion,'tipo_persona'=>$tipo_persona,'sexo'=>$sexo])); // Llamada al api
            } else {
                // Aca iría el uso interno, a traves de store o reciclando otros controladores con llamados genéricos
                $data = json_encode([]);
            }
            // ---
            $insert_data = json_decode($data);
            //
            if ( isset($insert_data->Response) && !empty($insert_data->Response) ){
                //
                $response = $insert_data->Response;
                // primero elimina los registros
                foreach ($response as $k => $reg) {
                    if ( !($reg->tipo_persona == 'FISICA' || $reg->tipo_persona == 'F') ){
                        unset($response[$k]);
                    }
                    if ( $reg->country_code != $pais ){
                        unset($response[$k]);
                    }
                }
                // ---
                foreach ($response as $k => $reg) {
                    $reg->country_code = !empty($reg->country_code) ? $reg->country_code : $pais;
                    $reg->localidad = empty($reg->country_code) ?? null;
                    $reg->provincia = empty($reg->country_code) ?? null;
                }
                return self::vistaTablaPadronIV($response,$pais_busqueda);
            } else if ( (isset($insert_data->StatusCode)  && $insert_data->StatusCode == 6) || (isset($insert_data->error) && $insert_data->error) ) {
                return 0;
            }
            //
            return self::vistaTablaPadronIV($insert_data->Response,$pais_busqueda);
        } elseif ( !empty($data) ) {
            return self::vistaTablaPadronIV($data,$pais_busqueda,1);
        } else {
            return 0;
        }
    }

    public function taxIdPadronOld(){
        $pais = Request::input('pais');
        $tax_id = Request::input('numero_id');
        $tipo_identificacion = Request::input('tipo_id');
        $razon_social = Request::input('razon_social') ?? '';
        $tipo_persona = Request::input('tipo_persona') ?? '';
        $sexo = Request::input('sexo') ?? '';
        // devuelve el formulario de identificacion y identificador
        $pais_busqueda = ($pais == 'AR') ? $pais : 'OTRO';

        // Busca en el Padrón (Dependiendo donde esté, ya que puede ser en FIDELITAS CLIENTES o en INQUIRO CLIENTES). La api está en FIDELITAS (es la que proveé a INQUIRO), si está en el mismo Fidelitas no es necesario hacer la llamada a la API y puede realizarse a través de uso interno. Pero si está en INQUIRO, no tiene los datos y la consulta es de Argentina, puede hacer la consulta del padrón de Fidelitas a traves de la API.
        // BUSQUEDA EN PADRÓN IV
        $data = SQLConnection::busquedaPadronAutocomplete($tax_id,true);
		foreach ($data as $k => $reg) {
            if($reg->country_code != $pais) {
                unset($data[$k]);
            }
        }
        $data = array_values($data);
        if ( !empty($data) ) {
            return self::vistaTablaPadronIV($data,$pais_busqueda,1);
        } else {
            return 0;
        }
    }

    public function taxIdPadron(){
        $pais = Request::input('pais');
        $tax_id = Request::input('numero_id');
        $tipo_identificacion = Request::input('tipo_id');
        $razon_social = Request::input('razon_social') ?? '';
        $tipo_persona = Request::input('tipo_persona') ?? '';
        $sexo = Request::input('sexo') ?? '';
        // devuelve el formulario de identificacion y identificador
        $pais_busqueda = ($pais == 'AR') ? $pais : 'OTRO';
        //
        if ( $tipo_identificacion == 'PASS' ){
            return 0;
        }
        // Busca en el Padrón (Dependiendo donde esté, ya que puede ser en FIDELITAS CLIENTES o en INQUIRO CLIENTES). La api está en FIDELITAS (es la que proveé a INQUIRO), si está en el mismo Fidelitas no es necesario hacer la llamada a la API y puede realizarse a través de uso interno. Pero si está en INQUIRO, no tiene los datos y la consulta es de Argentina, puede hacer la consulta del padrón de Fidelitas a traves de la API.
        // BUSQUEDA EN PADRÓN IV
        $data = SQLConnection::busquedaPadronAutocomplete($tax_id,true);
        //
        foreach ($data as $k => $reg) {
            if($reg->country_code != $pais) {
                unset($data[$k]);
            }
        }
        //
        $data = array_values($data);
        //
        if ( empty($data) ){
            if ( $pais_busqueda == 'AR' ){
                // si es argentina
                // si no lo encontro consulta el api, para que AFIP lo da de alta en el padron
                $data = Misc::CURLCall(env('API_PADRON_FIDELITAS'),http_build_query(['apikey'=>env('APIKEY_PADRON_FIDELITAS'),'identificacion'=>$tax_id,'pais_busqueda'=>$pais_busqueda,'razon_social'=>$razon_social,'pais'=>$pais,'tipo_identificacion'=>$tipo_identificacion,'tipo_persona'=>$tipo_persona,'sexo'=>$sexo])); // Llamada al api
                $data = json_decode($data);
                //
                if ( !is_null($data) && isset($data->Response) && count($data->Response) > 0 ){
                    $response = new \stdClass;
                    $response->id_padron = $data->Response[0]->id_padron;
                    $response->identificacion = $data->Response[0]->identificacion;
                    $response->nombre_persona = $data->Response[0]->nombre_persona;
                    $response->identificador = $data->Response[0]->identificador;
                    $response->tipo_persona = $data->Response[0]->tipo_persona[0];
                    $response->fecha_nacimiento = $data->Response[0]->fecha_nacimiento;
                    $response->country_code = $data->Response[0]->country_code;
                    $response->cuerpo_clave = $data->Response[0]->cuerpo_clave;
                    //
                    return self::vistaTablaPadronIV([$response],$pais_busqueda,1);
                } else {
                    // no se encontro en ningun padron
                    return 0;
                }
            } else {
                // si es extranjero y no encuentra datos
                return 0;
            }
        } else {
            // se encontro en Inquiro
            return self::vistaTablaPadronIV($data,$pais_busqueda,1);
        }
        //
    }

    private static function vistaTablaPadronIV($data,$origen,$data_iv=0) {
		// Filtro según origen
		foreach ($data as $k => $reg) {
			if ( $origen == 'AR' && !($reg->identificador == 'CUIT' || $reg->identificador == 'CUIL')) {
				unset($data[$k]);
			} else {
                $reg->country_code = $origen;
                $reg->localidad = null;
                $reg->provincia = null;
            }
		}
		//
		$vista = \View::make('/led/led_contrapartes_tabla_busqueda_api')->with(compact(['data']))->render();
        return json_encode( array('view' => $vista,'response' => $data, 'data_iv' => $data_iv) );
	}


    public function formularioInforme(){
        if ( isset($_POST['tipo_informe']) && is_numeric($_POST['tipo_informe']) && isset($_POST['familia']) && is_numeric($_POST['familia']) ){
            $tipo_informe = Request::input('tipo_informe');
            $familia = Request::input('familia');
            $country_code = Request::input('pais') ?? null;
            //
            // $set_documentos_tipo_informe = SQLConnection::backendStoreProcedure('LN_informe_design_',array('PARTES_INFORME',$tipo_informe,NULL,'S',NULL,NULL,NULL,NULL,NULL,NULL,Session::get('usuario')->user_id),'selectOne');
            // $fdata = SQLConnection::backendStoreProcedure('LN_familias_sc', array('select',$familia,null,null,null,null,Session::get('usuario')->user_id), 'selectOne');
            $sets = SQLConnection::backendStoreProcedure('LN_familia_tipo_informe', array('SETS_INFORME_FAMILIA',$familia,$tipo_informe,Session::get('usuario')->user_id));
            // PARTES_INFORME
            // $set_doc = $set_documentos_tipo_informe->idElem;
            if ( !empty($sets) ){
                $set_campos = [];
                foreach( $sets as $set ){
                    $set_campos[] = $this->camposSetDoc($set->set_doc,$familia);
                }
                // dd($country_code);
                //
                return view('/iv_hr/form_tipo_informe')->with(compact('set_campos','country_code'));
            }
            /* $set_doc = $fdata->set_doc;
            if ( !is_null($set_doc) ){
                $set_campos = $this->camposSetDoc($set_doc,$familia);
                /* foreach ($set_campos as $k => $doc) {
                    if ($doc->tipo_doc == '1253' || $doc->tipo_doc == '1254') {
                        unset($set_campos[$k]);
                    }
                } */
                //
                // return view('/iv_hr/form_tipo_informe')->with(compact('set_campos'));
            // }
        }
    }

    /**
     * Funcion que levanta los campos del
     * set de documentos
     * @access private
     * @param string el id set del set de documentos
     * @param string el id de familia
     * @return array
     */
    private function camposSetDoc($set_doc,$familia){
        $cliente = Session::get('usuario')->cliente['client_id'];
        $tipos = SQLConnection::backendStoreProcedure('LN_set_tipo_doc_V2', array('SEARCH',$set_doc,NULL,Session::get('usuario')->user_id), 'select');
        $conf_docs = SQLConnection::backendStoreProcedure('LN_tipo_doc_cliente_espec',array('LIST_FAMILIA_CLIENTE',$cliente,NULL,$familia,Session::get('usuario')->user_id));
        //
        Traducciones::$blade = 'form_tipo_informe';
        $trad = SQLConnection::obtenerTraduccionesPHP(Traducciones::$blade);
        // se eliminan los docs que no carga el cliente
        foreach( $conf_docs as $doc_espec ){
            foreach( $tipos as $key => $tipo ){
                if ( $tipo->tipo_doc == $doc_espec->tipo_doc ){
                    if ( $doc_espec->quien_carga != 'C' ){
                        unset($tipos[$key]);
                    }
                    break;
                }
            }
        }
        //
        foreach( $tipos as $tipo ){
            $camposdoc = SQLConnection::backendStoreProcedure('LN_tipo_doc_campos_', array('search', $tipo->tipo_doc, null, null, null, null, null, null, null, null), 'select');
            $secciones = SQLConnection::backendStoreProcedure('LN_tipo_doc_secciones_', array('SEARCH', null, $tipo->tipo_doc, null, null, null, null, null, null), 'select');
            //
            foreach ($camposdoc as $key => $fld){
                //
                if ( !empty($fld->seccion) ){
                    if ( !isset($tipo->secciones[$fld->seccion]) ){
                        $tipo->secciones[$fld->seccion] = new \stdClass;
                        $tipo->secciones[$fld->seccion]->titulo = $fld->titulo_seccion;
                    }
                    //
                    if ( $fld->tipo_campo == 'S' ){
                        $opciones = explode('^',$fld->opciones);
                        $fld->etiquetas = explode('|',$opciones[0]);
                        $fld->valores = explode('|',$opciones[1]);
                        $fld->cant_opciones = count($fld->valores);
			$this->traducirSelect($fld->etiquetas);
                    } elseif ( $fld->tipo_campo == 'W' ){
                        // Paises
                        // $db = DB::connection('demo_sqlsrv');
                        // $inserted = $db->select('EXEC dbo.LN_doc_campos_opciones ?',array($fld->tipo_campo));
                        $paises = SQLConnection::backendStoreProcedure('LN_doc_campos_opciones', array($fld->tipo_campo), 'select');
                        $this->traducirPaises($paises);
                        $fld->opciones = $paises;
                        $fld->cant_opciones = count($paises);
                    } elseif ( $fld->tipo_campo == 'Z' ){
                        // Nacionalidades
                        // $db = DB::connection('demo_sqlsrv');
                        // $inserted = $db->select('EXEC dbo.LN_doc_campos_opciones ?',array($fld->tipo_campo));
                        $nacionalidades = SQLConnection::backendStoreProcedure('LN_doc_campos_opciones', array($fld->tipo_campo), 'select');
                        $this->traducirPaises($nacionalidades);
                        $fld->opciones = $nacionalidades;
                        $fld->cant_opciones = count($nacionalidades);
                    }
                    //
                    if ( isset($trad[$fld->etiqueta]) ){
                        $fld->etiqueta = $trad[$fld->etiqueta];
                    } else {
                        Traducciones::set($fld->etiqueta,Traducciones::$blade);
                    }
                    //
                    $tipo->secciones[$fld->seccion]->campos[] = $fld;
                    /* if ( !isset($campos[$fld->titulo_seccion]) ){
                        $campos[$fld->titulo_seccion] = new \stdClass;
                    }
                    //
                    $campos[$fld->titulo_seccion]->campos[] = $fld; */
                }
            }
            //
            if ( !empty($secciones) ){
                foreach ( $secciones as $seccion ){
                    if ( isset($tipo->secciones[$seccion->seccion]) ){
                        $tipo->secciones[$seccion->seccion]->texto_pie = $seccion->texto_pie;
                    }
                }
            }
        }
        //
        return $tipos;
    }
    
    /**
     * Funcion que devuelve los datos
     * de los campos hijos
     * @access public
     * @return string
     */
    public function dataCamposHijos(){
        if ( isset($_POST['campo']) && is_numeric($_POST['campo']) && isset($_POST['parametro'])  ){
            $campo = $_POST['campo'];
            $parametro = $_POST['parametro'];
            //
            $campo_data = SQLConnection::backendStoreProcedure('LN_campos_', array('SELECT', $campo, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), 'selectOne');
            //
            $tipo_campo = $campo_data->tipo_campo;
            $country_code = NULL;
            $prv_code = NULL;
            //
            if ( $tipo_campo == 'X' ){
                $country_code = $parametro;
            } elseif ( $tipo_campo == 'Y' ){
                $prv_code = $parametro;
            } else {
                return Response::JSON(['error' => 1, 'mensaje' => 'El tipo de campo no es campo hijo.']);
            }
            //
            if ( !is_null($country_code) || !is_null($prv_code) ){
                $inserted = SQLConnection::backendStoreProcedure('LN_doc_campos_opciones', array($tipo_campo,$country_code,$prv_code), 'select');
                return Response::JSON(['error' => 0,'mensaje' => 'OK.','datos' => $inserted]);
            }
        } else {
            return Response::JSON(['error' => 2, 'mensaje' => 'Parametros invalidos.']);
        }
    }

	/**
     * Funcion que da de alta las
     * contrapartes
     * @access public
     */
    public function altaContraparte(){              
        if ( isset($_POST['familia']) && is_numeric($_POST['familia']) ){
            $familia = Request::input('familia');
            if ( isset($_POST['tipo_informe']) && is_numeric($_POST['tipo_informe']) ){
                $tipo_informe = Request::input('tipo_informe');
                if ( isset($_POST['referencia']) && !empty($_POST['referencia']) ){
                    // throw new Exception('Test con Diego.');
                    $referencia = Request::input('referencia');
                    $notas_candidato = (isset($_POST['notas_candidato']) && !empty(Request::input('notas_candidato') )) ? Request::input('notas_candidato') : null;
                    // 
                    $id_padron = ( isset($_POST['id_padron']) && !empty($_POST['id_padron']) ) ? $_POST['id_padron'] : NULL; // SI ESTE DATO NO ES NULL ES PORQUE SE ENCONTRÓ UN REGISTRO EN EL PADRON DE IV
                    $id_padron_fide = ( isset($_POST['id_padron_fidelitas']) && !empty($_POST['id_padron_fidelitas']) ) ? $_POST['id_padron_fidelitas'] : NULL; // SI ESTE DATO NO ES NULL ES PORQUE SE ENCONTRÓ UN REGISTRO EN EL PADRON DE FIDELITAS
                    // 
                    $identificador = ( isset($_POST['identificador']) && !empty($_POST['identificador']) ) ? $_POST['identificador'] : NULL;
                    $identificacion = ( isset($_POST['identificacion']) && !empty($_POST['identificacion']) ) ? $_POST['identificacion'] : NULL;
                    $email = ( isset($_POST['email-contraparte']) && !empty($_POST['email-contraparte']) ) ? $_POST['email-contraparte'] : NULL;
                    // Se crea la contraparte
                    $obj_busqueda = $this->cargarContraparte($familia,$tipo_informe,$referencia,$id_padron,$identificador,$identificacion,$notas_candidato,$id_padron_fide,$email);
                    //$obj_busqueda = (object) ['informe' => 100672219,'contraparte' => 205345,'gestion' => 206588, 'iv_busqueda' => 2];
                    $this->cargarForm($obj_busqueda->contraparte,$obj_busqueda->gestion,$obj_busqueda->iv_busqueda);
                    $this->emailHR($referencia);
                    DB::selectOne('EXEC dbo.LN_actualizar_legajo ?, ?, ?', array($obj_busqueda->contraparte, $obj_busqueda->gestion, Session::get('usuario')->user_id)); // PARCHE PARA QUE GENERE TODOS LOS DOCUMENTOS
                    SQLConnection::logTrazabilidad('Se dió de alta una nueva contraparte','ALTA_CONTRAP',env('ID_PLATAFORMA'),Session::get('usuario')->user_id,Session::get('servicio_actual'),Session::get('usuario')->cliente['client_id'],$obj_busqueda->contraparte);
                    
                    if($_POST['menorDeEdad'] == "1"){
                        SQLConnection::logTrazabilidad('An under age candidate has been authorized','CONTRAPARTE_MENOR',env('ID_PLATAFORMA'),Session::get('usuario')->user_id,Session::get('servicio_actual'),Session::get('usuario')->cliente['client_id'],$obj_busqueda->contraparte);
                    }
                    
                    return Response::JSON(['error' => 0, 'mensaje' => 'el pedido fue cargado con exito.']);
                    //
                    if ( is_null($obj_busqueda) ){
                        return Response::JSON(['error' => 4, 'mensaje' => 'No se pudo dar de alta la contraparte.']);
                    }
                    //
                } else {
                    return Response::JSON(['error' => 3, 'mensaje' => 'Dato referencia invalido.']);
                }
            } else {
                return Response::JSON(['error' => 2, 'mensaje' => 'Dato tipo de informe invalido.']);
            }
        } else {
            return Response::JSON(['error' => 1, 'mensaje' => 'Dato familia invalido.']);
        }
    }
	
    /**
     * 
     * Funcion que da de alta la contraparte 
     * @access private
     * 
     * @param string id de familia
     * @param string id de tipo de informe
     * @param string id de referencia
     * @param string|null id padron
     * @param string identificador
     * @param string identificacion
     * @return object
     */

    private function cargarContraparte($familia,$id_tipo_informe,$referencia,$id_padron,$identificador,$identificacion,$notas_candidato,$id_padron_fide,$email=NULL){
        $cliente = Session::get('usuario')->cliente['client_id'];
        // obtener Team
        $team_default = $this->obtenerTeamDefault($familia);
        // validar Padron
        // if ( is_null($id_padron) || is_null($id_padron_fide) ){
        if ( is_null($id_padron) &&  is_null($id_padron_fide) ){
            $id_padron = $this->insertarPadron($identificador,$identificacion,$id_padron,$id_padron_fide);
            // $id_padron = isset($id_padron->id_padron_fidelitas) ? $id_padron->id_padron_fidelitas : $id_padron->id_padron;
        }
        // Duracion Tipo Informe
        $datos_tipo_informe = SQLConnection::backendStoreProcedure('LN_tipo_informes_', array('EDITAR',null,null,null,null,null,null,null,null,null,$id_tipo_informe,null),'selectOne');
        //
        $duracion = ( is_null($datos_tipo_informe->duracion) ) ? 0 : intval($datos_tipo_informe->duracion);
        // calculo de fechas del informe
        $controller = new IVNewController();
        $fecha_inicio = new \DateTime();
        //        
        if ( $duracion > 0 ){
            $fechas_preestablecidas = $controller->establecerFechasInforme($duracion);
            //Se modifico y se agrego la linea de arriba porque la de abajo siempre enviaba duracion de informe 5
            //lo que provocaba que la fecha comprometida falle tbs.
            //$fechas_preestablecidas = $controller->establecerFechasInforme(5);
            $fecha_comprometida = $fechas_preestablecidas['fecha_comprometida'];
        } else {
            $fecha_comprometida = clone $fecha_inicio;
            $fecha_comprometida = $fecha_comprometida->format('Y-m-d H:i:s');
        }
        // agrega un dia para poder omitir los fines de semana y feriados respetando la duracion
        /* for($i=0;$i < $duracion;$i++){
            $fecha_comprometida->add(new \DateInterval('P1D'));
            // omitir feriados
            Misc::omitirFeriadosFinSem($fecha_inicio,$fecha_comprometida);
        } */
        //
        $params = array('alta_contraparte_informe', 
            $cliente,
            Session::get('usuario')->user_id,
            env('IV_PRODUCTO'),
            $id_tipo_informe,
            (!empty($id_padron_fide) ? $id_padron_fide : $id_padron),
            $familia,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            $email,
            NULL,
            $notas_candidato,
            env('FILIAL_DEFAULT'),
            env('IDIOMA_DEFAULT'),
            env('DATAMANAGER_DEFAULT'),
            env('ASIGNADO_DEFAULT'),
            env('ESTADO_INFORME_INICIAL'),
            NULL,
            $fecha_comprometida,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            $team_default,
            $fecha_inicio->format('Y-m-d H:i:s'),
            $referencia
        );
        //
        $temp = SQLConnection::backendStoreProcedure('IV_panel_control',$params,'selectOne');
        // EmailController::enviarMail('EMAIL-IV','ALTA', '', $temp->contraparte, '', $null,$false,$null,$null);
        return $temp;
    }



    private function cargarContraparte09022024($familia,$id_tipo_informe,$referencia,$id_padron,$identificador,$identificacion,$notas_candidato,$id_padron_fide,$email=NULL){
        $cliente = Session::get('usuario')->cliente['client_id'];
        // obtener Team
        $team_default = $this->obtenerTeamDefault($familia);
        // validar Padron
        // if ( is_null($id_padron) || is_null($id_padron_fide) ){
        if ( is_null($id_padron) &&  is_null($id_padron_fide) ){
            $id_padron = $this->insertarPadron($identificador,$identificacion,$id_padron,$id_padron_fide);
            // $id_padron = isset($id_padron->id_padron_fidelitas) ? $id_padron->id_padron_fidelitas : $id_padron->id_padron;
        }
        // Duracion Tipo Informe
        $datos_tipo_informe = SQLConnection::backendStoreProcedure('LN_tipo_informes_', array('EDITAR',null,null,null,null,null,null,null,null,null,$id_tipo_informe,null),'selectOne');
        //
        $duracion = ( is_null($datos_tipo_informe->duracion) ) ? 0 : intval($datos_tipo_informe->duracion);
        // calculo de fechas del informe
        $controller = new IVNewController();
        $fecha_inicio = new \DateTime();
        //
        if ( $duracion > 0 ){
            $fechas_preestablecidas = $controller->establecerFechasInforme(5);
            $fecha_comprometida = $fechas_preestablecidas['fecha_comprometida'];
        } else {
            $fecha_comprometida = clone $fecha_inicio;
            $fecha_comprometida = $fecha_comprometida->format('Y-m-d H:i:s');
        }
        // agrega un dia para poder omitir los fines de semana y feriados respetando la duracion
        /* for($i=0;$i < $duracion;$i++){
            $fecha_comprometida->add(new \DateInterval('P1D'));
            // omitir feriados
            Misc::omitirFeriadosFinSem($fecha_inicio,$fecha_comprometida);
        } */
        //
        $params = array('alta_contraparte_informe', 
            $cliente,
            Session::get('usuario')->user_id,
            env('IV_PRODUCTO'),
            $id_tipo_informe,
            (!empty($id_padron_fide) ? $id_padron_fide : $id_padron),
            $familia,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            $email,
            NULL,
            $notas_candidato,
            env('FILIAL_DEFAULT'),
            env('IDIOMA_DEFAULT'),
            env('DATAMANAGER_DEFAULT'),
            env('ASIGNADO_DEFAULT'),
            env('ESTADO_INFORME_INICIAL'),
            NULL,
            $fecha_comprometida,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            $team_default,
            $fecha_inicio->format('Y-m-d H:i:s'),
            $referencia
        );
        //
        $temp = SQLConnection::backendStoreProcedure('IV_panel_control',$params,'selectOne');
        // EmailController::enviarMail('EMAIL-IV','ALTA', '', $temp->contraparte, '', $null,$false,$null,$null);
        return $temp;
    }
    
    /**
     * Funcion que obtiene el team
     * default
     * @access private
     * @param string id de la familia
     * @return string
     */
    private function obtenerTeamDefault($familia){
        $teams_familia = SQLConnection::backendStoreProcedure('LN_Teams_',array('LSTFAMILYTEAMS',Session::get('usuario')->user_id,null,null,null,null,null,null,null,null,null,null,$familia),'select');
		$team_default = ( isset($teams_familia[0]->id_team) ) ? $teams_familia[0]->id_team : NULL;
		if ( !empty($teams_familia) ){
			foreach( $teams_familia as $team ){
				if ( $team->isDefault == '1' && $team->activo == '1' ){
					$team_default = $team->id_team;
					break;
				}
			}
		}
        //
        return $team_default;
    }

    /**
     * Funcion que obtiene el nombre
     * de la persona del padron
     * @access private
     * @return string
     */
    private function armarNombre(){
        $input_primer_nombre = Request::input('name_nombre_1');
        $input_segundo_nombre = Request::input('name_nombre_2');
        $input_primer_apellido = Request::input('name_apellido_1');
        $input_segundo_apellido = Request::input('name_apellido_2');
        $nombres_aux = Request::input('nombres_aux');
        $apellidos_aux = Request::input('apellidos_aux');
        $nombre_perona = '';
        $apellido = '';
        $nombre = '';
        //
        if ( !empty($input_primer_apellido) && isset($_POST[$input_primer_apellido]) && !empty($_POST[$input_primer_apellido]) ){
            $apellido .= ' '.(Request::input($input_primer_apellido) ?? '');
        }
        if ( !empty($input_segundo_apellido) && isset($_POST[$input_segundo_apellido]) && !empty($_POST[$input_segundo_apellido]) ){
            $apellido .= ' '.(Request::input($input_segundo_apellido) ?? '');
        }
        if ( !empty($input_primer_nombre) && isset($_POST[$input_primer_nombre]) && !empty($_POST[$input_primer_nombre]) ){
            $nombre .= ' '.(Request::input($input_primer_nombre) ?? '');
        }
        if ( !empty($input_segundo_nombre) && isset($_POST[$input_segundo_nombre]) && !empty($_POST[$input_segundo_nombre]) ){
            $nombre .= ' '.(Request::input($input_segundo_nombre) ?? '');
        }
        $nombre = !empty($nombres_aux) ? $nombres_aux : $nombre;
        $apellido = !empty($apellidos_aux) ? $apellidos_aux : $apellido;
        $nombre_perona = $apellido . $nombre;
        $nombre_arr = [strtoupper($nombre_perona),strtoupper($apellido),strtoupper($nombre)];
        //
        return $nombre_arr;
    }

    /**
     * Funcion que obtiene el telefono
     * de la persona del padron
     * @access private
     * @return string|null
     */
    private function armarTelefono(){
        $telefono = NULL;
        //
        if ( isset($_POST['campo_277_117']) && !empty($_POST['campo_277_117']) ){
            $telefono = Request::input('campo_277_117');
        }
        //
        return $telefono;
    }

    /**
     * Funcion que obtiene el email
     * de la persona que tiene el pedido
     * @access private
     * @return string|null
     */
    private function armarEmail(){
        $email = NULL;
        //
        if ( isset($_POST['campo_277_16']) && !empty($_POST['campo_277_16']) ){
            $email = Request::input('campo_277_16');
        }
        //
        return $email;
    }
    
    /**
     * Funcion que inserta un registro
     * en el padron
     * @access private
     * @return object
     */
    private function insertarPadron($identificador,$identificacion,$id_padron,$id_padron_fide){        
        $nombre_persona = $this->armarNombre();
        $apellido = $nombre_persona[1];
        $nombre = $nombre_persona[2];
        $nombre_persona = $nombre_persona[0];
        $pais = (isset($_POST['country_code']) && !empty($_POST['country_code'])) ? $_POST['country_code'] : NULL;
        //$birthday = (isset($_POST['campo_277_313']) && !empty($_POST['campo_277_313'])) ? $_POST['campo_277_313'] : NULL;
	$birthday = NULL;
        //
        if ( isset($_POST['campo_277_313']) && !empty($_POST['campo_277_313']) ){
            $birthday = Request::input('campo_277_313');
        } elseif ( isset($_POST['campo_332_313']) && !empty($_POST['campo_332_313']) ){
            $birthday = Request::input('campo_332_313');
        }
        $data = array();
		//
		$identificador_definido = $identificador;
        //
        if ( $identificador == 'PASS' ){
            if ( isset($_POST['pais_pasaporte']) && !empty($_POST['pais_pasaporte']) ){
                $pais = Request::input('pais_pasaporte');
            }
            //
            $ident_data = $this->obtenerPasaportePais($pais);
            $identificador_definido = $ident_data->identificador;
        }
        //
        if ( !empty($nombre_persona) ){
            $data[0] = trim($identificador_definido);
            $data[1] = trim($identificacion);
            $data[2] = trim($nombre_persona);
            $data[3] = trim('F');
            $data[4] = NULL;
            $data[5] = 1;
            $data[6] = 1;
            $data[7] = NULL;
            $data[8] = $birthday;
            $data[9] = null;
            $data[10] = $pais;
            $data[11] = trim($apellido);
            $data[12] = trim($nombre);
        } 
        // INSERTA EN PADRÓN FIDELITAS SI ES DE ARGENTINA Y NO TIENE RESULTADOS
        // if ( empty($id_padron_fide) && $pais == 'AR') {
        if ( empty($id_padron_fide) ){
            // 
            // if ( env('DB_IV_BETA') == 1 ) {
            $id_padron_fide = SQLConnection::backendStoreProcedure('backend_insertar_padron', array(trim($identificador_definido), trim($identificacion), trim($nombre_persona), 'F', 'M', "1", "1", NULL, $birthday, NULL, $pais, trim($apellido), trim($nombre)),'selectOne');
	    	$id_padron_fide = $id_padron_fide->id_padron;
            //}
        }
        // ACA INSERTA EN DB IV
        // $db = DB::connection('demo_sqlsrv');
        // $inserted = $db->select('EXEC dbo.Alta_Padron_IV_Diego ?,?,?,?,?,?,?,?',array($id_padron_fide,$identificacion,trim($nombre_persona),$identificador,'F',trim($apellido),trim($nombre),NULL));
        // DEPENDIENDO DEL ESTADO DE LA APP, DEVUELVE EL ID PADRON DE IV O DE FIDELITAS.
        // DB_IV_BETA == 0 -> APP EN FIDE, NECESITA ID_PADRON
        // DB_IV_BETA == 1 -> APP EN IV Y USA AMBAS BASES DE DATOS, NECESITA ID_PADRON_FIDELITAS
        // DB_IV_BETA == 2 -> APP EN IV Y USA DB IV SOLAMENTE, NECESITA ID_PADRON
	//return env('DB_IV_BETA') == 1 ? $inserted[0]->id_padron_fidelitas : $inserted[0]->id_padron;
	return $id_padron_fide;
        

        // ALTER PROCEDURE [dbo].[backend_insertar_padron]     
        //     -- Add the parameters for the stored procedure here    
        //     @identificador                      varchar(10),    
        //     @numero                             varchar(50),    
        //     @nombre_persona                     varchar(200),    
        //     @tipo_persona                       varchar(1),    
        //     @sexo                               varchar(1),    
        //     @habilitado                         bit,    
        //     @altaweb                            bit=null, /* si es 1 devuelve los datos */    
        //     @consAFIP                           bit=null, /* si es 1 lo manda a afip, para extranjeros enviar 0 */    
        //     @fecha_nac                          date = null,    
        //     @nacionalidad                       varchar(50) = null,    
        //     @pais                               varchar(2) = null,
        //     @apellido                           varchar(100) = null,
        //     @nombre                             varchar(100) = null

        // ----------------------------------------------------------------------------------------------------------------

        // ALTER PROCEDURE  [dbo].[Alta_Padron_Automatico_IV ] 
        //     -- Add the parameters for the stored procedure here
        //     @idPadron							int,
        //     @numero								varchar(50),
        //     @nombre_persona						varchar(200),
        //     @p_identificador varchar(10),
        //     @p_tipo_persona varchar(1), 
        //     @p_apellidos varchar(100) = null,
        //     @p_nombres   varchar(100) = null,
        //     @p_sexo varchar(1) = null
    }

	/**
     * Funcion que devuelve
     * el identificador de pasaporte
     * @access private
     * @return object|null
     */
    private function obtenerPasaportePais($pais){
        return SQLConnection::backendStoreProcedure('LN_identificadores',array('SELECCIONAR_POR_PAIS_FILTROS',NULL,$pais,1,NULL,NULL,'F',1),'selectOne');
    }	

    private function cargarForm($contraparte,$gestion,$iv_busqueda){
        $docs = SQLConnection::backendStoreProcedure('LN_contrapartes_',array('DOCUMENTOS_GESTION_ACTIVA', $contraparte, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL));
        $user_id = Session::get('usuario')->user_id;
        //
        foreach( $docs as $doc ){
            if ( !$doc->es_evidencia ){
                if ( $doc->es_dni == 1 ){
                    $this->guardarImgDNI($doc->doc_id,$contraparte,$gestion);
                    $temp = SQLConnection::backendStoreProcedure('LN_docs_backend', array('enviar', $doc->doc_id, 'I', $user_id), 'select');
                } elseif ( $doc->consentimiento == 1 ){
                    $this->guardarConsentimiento($doc->doc_id,$contraparte,$gestion,$iv_busqueda);
                    $temp = SQLConnection::backendStoreProcedure('LN_docs_backend', array('enviar', $doc->doc_id, 'I', $user_id), 'select');
                } else {
                    $this->guardarDocData($doc->doc_id);
                    $temp = SQLConnection::backendStoreProcedure('LN_docs_backend', array('enviar', $doc->doc_id, 'I', $user_id), 'select');
                }
            }
        }
    }
    //

    private function guardarDocData($doc_id){
        $flds = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('search', $doc_id, null, null, NULL, NULL, NULL, NULL, NULL, NULL), 'select');
        //
        $vf = null;
        $vt = null;
        $vn = null;
        //
        foreach( $flds as $fld ){
            $this->obtenerCampoData($fld->FORM_NAME,$fld->tipo_campo,$vf,$vt,$vn);
            //
            if ($fld->tipo_campo != 'F' && $fld->tipo_campo != 'L') {
                //
                $temp = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('update', $doc_id, $fld->seccion, $fld->campo, $vf, $vt, $vn, null, null, null), 'selectOne');
            }
        }
        //
        return true;
    }

    private function guardarImgDNIOR($doc_id,$contraparte,$gestion){
        $cliente = Session::get('usuario')->cliente['client_id'];
        //
        if ( isset($_FILES['dni_frente']) && $_FILES['dni_frente']['tmp_name'][0] != ''){
            // GUARDA EN DOC
            if ( !file_exists(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente) ){
                if ( !mkdir(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente,0777) ){
                    return NULL;
                }
            }
            //
            if ( !file_exists(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte) ){
                if ( !mkdir(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte,0777) ){
                    return NULL;
                }
            }
            //
            if ( !file_exists(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion) ){
                if ( !mkdir(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion,0777) ){
                    return NULL;
                }
            }
            //
            $path_dni1 = env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion.DIRECTORY_SEPARATOR.'1_dni_'.$contraparte.'_'.$gestion.'.'.explode('/',$_FILES['dni_frente']['type'][0])[1];
            $path_dni2 = env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion.DIRECTORY_SEPARATOR.'2_dni_'.$contraparte.'_'.$gestion.'.png';
            if ( isset($_FILES['dni_frente']['type'][1]) ) {
                $path_dni2 = env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion.DIRECTORY_SEPARATOR.'2_dni_'.$contraparte.'_'.$gestion.'.'.explode('/',$_FILES['dni_frente']['type'][1])[1];
            }
            //
            $dni1 = true;
            $dni2 = true;
            //
            $files_array = ['.pdf','.png','.jpeg','.jpg'];
            foreach ($files_array as $end) {
                foreach ($files_array as $e) {
                    if ( is_file(str_replace($end,$e,$path_dni1)) ){
                        unlink(str_replace($end,$e,$path_dni1));
                    }
                }
            }
            foreach ($files_array as $end) {
                foreach ($files_array as $e) {
                    if ( is_file(str_replace($end,$e,$path_dni2)) ){
                        unlink(str_replace($end,$e,$path_dni2));
                    }
                }
            }
            if ( isset($_FILES['dni_frente']['tmp_name'][0]) && !move_uploaded_file($_FILES['dni_frente']['tmp_name'][0],$path_dni1) ){
                $dni1 = false;
            }
            //
            if ( isset($_FILES['dni_frente']['tmp_name'][1]) && !move_uploaded_file($_FILES['dni_frente']['tmp_name'][1],$path_dni2) ){
                $dni2 = false;
            }
            // dd($dni1,$path_dni1);
            // GUARDA EN EVIDENCIA
            $path_ev_1 = env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente;
            $path_ev_2 = env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$cliente;
            //
            if ( !file_exists($path_ev_1) ){
                mkdir($path_ev_1,0777);
            }
            $path_ev_1 .= DIRECTORY_SEPARATOR.$contraparte;
            $path_ev_2 .= DIRECTORY_SEPARATOR.$contraparte;
            if ( !file_exists($path_ev_1) ){
                mkdir($path_ev_1,0777);
            }
            $path_ev_1 .= DIRECTORY_SEPARATOR.$gestion;
            $path_ev_2 .= DIRECTORY_SEPARATOR.$gestion;
            if ( !file_exists($path_ev_1) ){
                mkdir($path_ev_1,0777);
            }
            $path_ev_1 .= DIRECTORY_SEPARATOR.'evidencias';
            $path_ev_2 .= DIRECTORY_SEPARATOR.'evidencias';
            if ( !file_exists($path_ev_1) ){
                mkdir($path_ev_1,0777);
            }
            //
            if (isset($_FILES['dni_frente']['type'][0])){
                $path_ev_1 .= DIRECTORY_SEPARATOR.'1_dni_evidencia.'.explode('/',$_FILES['dni_frente']['type'][0])[1];
            }
            if (isset($_FILES['dni_frente']['type'][1])){
                $path_ev_2 .= DIRECTORY_SEPARATOR.'2_dni_evidencia.'.explode('/',$_FILES['dni_frente']['type'][1])[1];
            }
            // if ( is_file($path_ev_1) ){
            //     unlink($path_ev_1);
            // }
            $files_array = ['.pdf','.png','.jpeg','.jpg'];
            if (!copy($path_dni1,$path_ev_1)){
            }
            if (isset($_FILES['dni_frente']['tmp_name'][1]) && !copy($path_dni2,$path_ev_2) ){

            // shell_exec("cp $path_dni2 $path_ev_2");
            }
            return ( $dni1 && $dni2 );
        }
        //
        return false;
    }

    private function guardarImgDNI($doc_id,$contraparte,$gestion){
        $cliente = Session::get('usuario')->cliente['client_id'];
        //
        // dd($_FILES['dni_frente']['type']);
        if ( isset($_FILES['dni_frente']) && !empty($_FILES['dni_frente']) && is_array($_FILES['dni_frente']['type']) && !empty($_FILES['dni_frente']['type'][0])){
            // GUARDA EN DOC
            if ( !file_exists(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente) ){
                if ( !mkdir(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente) ){
                    return NULL;
                }
            }

            //
            if ( !file_exists(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte) ){
                if ( !mkdir(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte) ){
                    return NULL;
                }
            }
            //
            if ( !file_exists(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion) ){
                if ( !mkdir(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion) ){
                    return NULL;
                }
            }
            //
            $path_dni1 = env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion.DIRECTORY_SEPARATOR.'1_dni_'.$contraparte.'_'.$gestion.'.'.explode('/',$_FILES['dni_frente']['type'][0])[1];
            $path_dni2 = env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion.DIRECTORY_SEPARATOR.'2_dni_'.$contraparte.'_'.$gestion.'.png';
            if ( isset($_FILES['dni_frente']['type'][1]) ) {
                $path_dni2 = env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion.DIRECTORY_SEPARATOR.'2_dni_'.$contraparte.'_'.$gestion.'.'.explode('/',$_FILES['dni_frente']['type'][1])[1];
            }
            //
            $dni1 = true;
            $dni2 = true;
            //
            $files_array = ['.pdf','.png','.jpeg','.jpg'];
            foreach ($files_array as $end) {
                foreach ($files_array as $e) {
                    if ( is_file(str_replace($end,$e,$path_dni1)) ){
                        unlink(str_replace($end,$e,$path_dni1));
                    }
                }
            }
            foreach ($files_array as $end) {
                foreach ($files_array as $e) {
                    if ( is_file(str_replace($end,$e,$path_dni2)) ){
                        unlink(str_replace($end,$e,$path_dni2));
                    }
                }
            }
            if ( !move_uploaded_file($_FILES['dni_frente']['tmp_name'][0],$path_dni1) ){
                $dni1 = false;
            }
            //
            if ( !isset($_FILES['dni_frente']['tmp_name'][1]) || !move_uploaded_file($_FILES['dni_frente']['tmp_name'][1],$path_dni2) ){
                $dni2 = false;
            }
            return ( $dni1 && $dni2 );
        }
        //
        return false;
    }

    private function guardarConsentimiento($doc_id,$contraparte,$gestion,$iv_busqueda){
        if ( isset($_FILES['consentimiento']) && preg_match('/pdf/',$_FILES['consentimiento']['type']) ){
            //
            $cliente = Session::get('usuario')->cliente['client_id'];
            if ( !file_exists(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente) ){
                if ( !mkdir(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente) ){
                    return NULL;
                }
            }
            //
            if ( !file_exists(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte) ){
                if ( !mkdir(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte) ){
                    return NULL;
                }
            }
            //
            if ( !file_exists(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion) ){
                if ( !mkdir(env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion) ){
                    return NULL;
                }
            }
            //
            $path = env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$gestion.DIRECTORY_SEPARATOR.$doc_id.'.pdf';
            //
            if ( !move_uploaded_file($_FILES['consentimiento']['tmp_name'],$path) ){
                return NULL;
            }
            //
            return true;
        }
    }

    /**
     * Funcion que hace la recepcion
     * de los campos del documento
     * y los devuelve en unos variables
     * @access private
     * @param string el nombre del campo a recibir de la conexion
     * @param string el tipo del campo
     * @param string valor fecha
     * @param string valor texto
     * @param string valor numero
     * @return void
     */
    private function obtenerCampoData($campo_nombre,$tipo_campo,&$vf,&$vt,&$vn){
        if( $tipo_campo == 'N' || $tipo_campo == 'T' || $tipo_campo == 'D' || $tipo_campo == 'M' || $tipo_campo == 'S' || $tipo_campo == 'W' || $tipo_campo == 'X' || $tipo_campo == 'Y' || $tipo_campo == 'Z' ) {
            $vf = ($tipo_campo == 'D') ? ( null != Request::input($campo_nombre) ? date_create_from_format('Y-m-d', Request::input($campo_nombre)) : null ) : null;
            $vt = ($tipo_campo == 'T' || $tipo_campo == 'M' || $tipo_campo == 'S' || $tipo_campo == 'W' || $tipo_campo == 'X' || $tipo_campo == 'Y' || $tipo_campo == 'Z') ? Request::input($campo_nombre) : null;
            $vn = ($tipo_campo == 'N') ? str_replace(",", ".", Request::input($campo_nombre)) : null;
        }
        //-----------
        if ( $tipo_campo == 'B' ){
            $vf = null;
            $vt = null;
            $vn = null;
            if( null !== Request::input($campo_nombre) ){
                $vn = Request::input($campo_nombre);
            }
        }
        //----------
        if ( $tipo_campo == 'R' ){
            $vf = null;
            $vt = null;
            $vn = null;
            if(null !== Request::input($campo_nombre)){
                $vt = Request::input($campo_nombre);
            }
        }
        //----------
        if ( $tipo_campo == 'C' ){
            $vf = null;
            $vt = null;
            $vn = null;
            if(null !== Request::input($campo_nombre)){
                $vt = implode(",", Request::input($campo_nombre));
            }
        }
    }

    public function panelControl(){
        if (Session::get('usuario')->es_admin) {
            $personas = SQLConnection::backendStoreProcedure('IV_panel_control', array('panel_control_uid', Session::get('usuario')->cliente["client_id"]), 'select');
        } else {
            $personas = SQLConnection::backendStoreProcedure('IV_panel_control', array('panel_control_uid', Session::get('usuario')->cliente["client_id"],Session::get('usuario')->user_id), 'select');
        }
        //        
        $cliente = Session::get('usuario')->cliente['client_id'];
        $path_antecedentes = null;
        $path_juicios = null;
        $path_inpec = null;
        $path_procu = null;
        $path_cedula = null;
		//
		$en_proceso = 0;                      
        //      
		$clave_indicador = ( !is_null(Request::input('clave_indicador')) || !empty(Request::input('clave_indicador')) ) ? Request::input('clave_indicador') : NULL;
		$valor_texto = ( !is_null(Request::input('valor_texto')) || !empty(Request::input('valor_texto')) ) ? Request::input('valor_texto') : NULL;
		$sin_filtro_visibilidad = (!is_null(Request::input('sin_filtro_visibilidad')) && !empty(Request::input('sin_filtro_visibilidad')) ) ? Request::input('sin_filtro_visibilidad') : NULL ;
		$lista_contrapartes = ( !is_null(Request::input('lista_contrapartes')) || !empty(Request::input('lista_contrapartes')) ) ? Request::input('lista_contrapartes') : NULL;
		// $personas = SQLConnection::backendStoreProcedure('IV_panel_control', array('panel_control', Session::get('usuario')->cliente["client_id"]), 'select');
        // $personas = SQLConnection::backendStoreProcedure('IV_panel_control', array('panel_control_uid', Session::get('usuario')->cliente["client_id"],Session::get('usuario')->cliente["client_id"]), 'select');
        $personas = array_values($personas);
		//
		return view('/iv_hr/panel_control')->with(compact('en_proceso','clave_indicador','valor_texto','sin_filtro_visibilidad','lista_contrapartes','personas'));
    }

	public static function datosCandidato() {
		$iv_busqueda = Request::input('iv_busqueda');
		$contraparte = Request::input('contraparte');
		$informe_hit = Request::input('informe_hit');
		$en_proceso = Request::input('es_en_proceso');
		// este es el nombre del index (valor texto) de la columna clickeada en la fancy.
		$column = Request::input('column');
        // dd(Session::get('usuario')->user_id,$contraparte);
		$contrap = SQLConnection::backendStoreProcedure('LN_contrapartes_', array('select', $contraparte, null, null, null, null, null, null, null, null, null, null, null, null, Session::get('usuario')->user_id), 'selectOne');
		$familia = SQLConnection::backendStoreProcedure('LN_contraparte_familias_', array('search', $contraparte, null, null, null, null, null), 'selectOne');
		$busqueda = SQLConnection::backendStoreProcedure('IV_busquedas_', array('search', $iv_busqueda), 'selectOne');
        $timezone = new \DateTimeZone(Session::get('usuario')->timezone);
        //
        $busqueda->creacion_informe = Misc::obtenerFechaLocal($busqueda->creacion_informe,'Y-m-d H:i \G\M\T P');
        $busqueda->hora_start = Misc::obtenerFechaLocal($busqueda->hora_start,'Y-m-d H:i \G\M\T P');
        $busqueda->hora_end = Misc::obtenerFechaLocal($busqueda->hora_end,'Y-m-d H:i \G\M\T P');
        $busqueda->observado_fecha = Misc::obtenerFechaLocal($busqueda->observado_fecha,'Y-m-d H:i \G\M\T P');
        //
        $log = SQLConnection::backendStoreProcedure('LN_TATime_', array('LISTBYID', $contraparte,$busqueda->gestion,NULL,NULL));
        // dd($log);
        $wsp = SQLConnection::backendStoreProcedure('LN_tickets_', array('LISTBYCONTRA', $contraparte,$busqueda->gestion,Session::get('servicio_actual'),$busqueda->cliente,Session::get('usuario')->user_id,'','F'));
        foreach ($wsp as $msg) {
            $msg->created = Misc::obtenerFechaLocal($msg->created,'Y-m-d H:i \G\M\T P');
        }
        $docs = DB::select('EXEC dbo.LN_contrapartes_ ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array('DOCUMENTOS_GESTION_ACTIVA', $contraparte, null, null, null, null, null, null, null, null, null, null, null, null, null));
        // dd($log);
        foreach ($docs as $k => $doc) {
            if ($doc->estado_doc != 'R'){
                unset($docs[$k]);
            }
        }
        $path_pdf = env('PATH_DOSSIER_IV') . '/' . $contrap->cliente . '/' . $contraparte . '/' . $contraparte . '_' . $contrap->gestion.'.pdf';
        $ruta_pdf = env('RUTA_DOSSIER_IV') . '/' . $contrap->cliente . '/' . $contraparte . '/' . $contraparte . '_' . $contrap->gestion.'.pdf';
        $ruta_pdf = !file_exists($path_pdf) ? null : $ruta_pdf;
		$indicadores = SQLConnection::backendStoreProcedure('IV_panel_control', array('obtener_indicadores',null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,$contraparte), 'select');
        $vista = \View::make('/iv_hr/datos_reporte')->with(compact(['contrap', 'familia', 'busqueda', 'indicadores','informe_hit','en_proceso','ruta_pdf','wsp','log']))->render();
        // dd($busqueda);

		return json_encode(array('nombre_persona' => $contrap->nombre_persona,
								'abreviatura' => $contrap->abreviatura,
								'identificacion' => $contrap->identificacion,
								'vista' => $vista));

	}
    
    public static function attachmentsOrg() {
		$iv_busqueda = Request::input('iv_busqueda');
		$contraparte = Request::input('contraparte');
		$busqueda = SQLConnection::backendStoreProcedure('IV_busquedas_', array('search', $iv_busqueda), 'selectOne');

		$docs = DB::select('EXEC dbo.LN_contrapartes_ ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array('DOCUMENTOS_GESTION_ACTIVA', $contraparte, null, null, null, null, null, null, null, null, null, null, null, null, null));

		$cumpldoc = SQLConnection::backendStoreProcedure('LN_dashboard_cliente', array('indicadores_contraparte',null,null,null,$contraparte,'CUMPL_DOC'), 'selectOne');

        $files_id = self::obtenerTaxIDFotos($contraparte,$busqueda);
        // dd($files_id);

		$files = [];
		$n = -1;
		foreach ($docs as $k => $doc) {
			if ($doc->estado_doc == 'N' || $doc->estado_doc == 'I' || $doc->estado_doc == 'R' || $doc->estado_doc == 'V') {
				$n++;
				$file_path = env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '.pdf';
				$file_url = env('RUTA_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '.pdf' . '?rnd=' . time();

				$file_exists = file_exists($file_path);

				$files[$n]['path'] = $file_path;
				$files[$n]['url'] = $file_url;
				$files[$n]['exists'] = $file_exists;
			}
		}
        // dd($busqueda);

        // ANTECEDENTES
        $path_antecedentes = env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$busqueda->cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$busqueda->gestion.DIRECTORY_SEPARATOR.'evidencias'.DIRECTORY_SEPARATOR.'antecedentes_policiales.png';
        $ruta_antecedentes = null;
        if ( file_exists($path_antecedentes) ){
            $ruta_antecedentes = env('RUTA_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$busqueda->cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$busqueda->gestion.DIRECTORY_SEPARATOR.'evidencias'.DIRECTORY_SEPARATOR.'antecedentes_policiales.png';
        }
        // JUICIOS
        $path_juicios = env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$busqueda->cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$busqueda->gestion.DIRECTORY_SEPARATOR.'evidencias'.DIRECTORY_SEPARATOR.'juicios.pdf';
        $ruta_juicios = null;
        if ( file_exists($path_juicios) ){
            $ruta_juicios = env('RUTA_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$busqueda->cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$busqueda->gestion.DIRECTORY_SEPARATOR.'evidencias'.DIRECTORY_SEPARATOR.'juicios.pdf';
        }
        // INPEC
        $path_inpec = env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$busqueda->cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$busqueda->gestion.DIRECTORY_SEPARATOR.'evidencias'.DIRECTORY_SEPARATOR.'inpec.png';
        $ruta_inpec = null;
        if ( file_exists($path_inpec) ){
            $ruta_inpec = env('RUTA_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$busqueda->cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$busqueda->gestion.DIRECTORY_SEPARATOR.'evidencias'.DIRECTORY_SEPARATOR.'inpec.png';
        }
        // PROCU
        $path_procu = env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$busqueda->cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$busqueda->gestion.DIRECTORY_SEPARATOR.'evidencias'.DIRECTORY_SEPARATOR.'proc.pdf';
        $ruta_procu = null;
        if ( file_exists($path_procu) ){
            $ruta_procu = env('RUTA_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$busqueda->cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$busqueda->gestion.DIRECTORY_SEPARATOR.'evidencias'.DIRECTORY_SEPARATOR.'proc.pdf';
        }
        // CEDULA
        $path_cedula = env('PATH_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$busqueda->cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$busqueda->gestion.DIRECTORY_SEPARATOR.'evidencias'.DIRECTORY_SEPARATOR.'ced_ciu.pdf';
        $ruta_cedula = null;
        if ( file_exists($path_cedula) ){
            $ruta_cedula = env('RUTA_DOCUMENTOS_IV').DIRECTORY_SEPARATOR.$busqueda->cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$busqueda->gestion.DIRECTORY_SEPARATOR.'evidencias'.DIRECTORY_SEPARATOR.'ced_ciu.pdf';
        }

		/* Traducciones de los nombres de documento */
		// Traducciones::$blade = 'attachments_panel_control';
		// SQLConnection::obtenerTraducciones(Traducciones::$blade); 
        //
        $hit = false;
        if ( $contraparte == '205415' ){
            $hit = true;
        }
        //
        // dd($contraparte);   
		return view('/iv_hr/attachments_panel_control')->with(compact(['busqueda', 'docs', 'files', 'cumpldoc','files_id','contraparte','ruta_antecedentes','ruta_juicios','ruta_inpec','ruta_procu','ruta_cedula']));
	}

    public static function attachments() {
		$iv_busqueda = Request::input('iv_busqueda');
		$contraparte = Request::input('contraparte');
		$busqueda = SQLConnection::backendStoreProcedure('IV_busquedas_', array('search', $iv_busqueda), 'selectOne');
        //
		$docs = DB::select('EXEC dbo.LN_contrapartes_ ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array('DOCUMENTOS_GESTION_ACTIVA', $contraparte, null, null, null, null, null, null, null, null, null, null, null, null, null));
        //
		$files = [];
		$n = -1;
		foreach ($docs as $k => $doc) {
			// if ( $doc->estado_doc == 'V' && $doc->es_evidencia && ( $doc->tipo_doc == '1252' || $doc->tipo_doc == '1253' || $doc->tipo_doc == '1254' || $doc->tipo_doc == '1255' || $doc->tipo_doc == '1286' || $doc->tipo_doc == '1284' || $doc->tipo_doc == '1290' ) ){
			if ( $doc->estado_doc == 'V' && $doc->es_evidencia && $doc->es_hit){
				$n++;
				$file_path = env('PATH_DOCUMENTOS_IV') . DIRECTORY_SEPARATOR . $doc->cliente . DIRECTORY_SEPARATOR . $doc->contraparte . DIRECTORY_SEPARATOR . $doc->gestion . DIRECTORY_SEPARATOR .'evidencias' . DIRECTORY_SEPARATOR . $doc->doc_id . '.pdf';
				$file_url = env('RUTA_DOCUMENTOS_IV') . DIRECTORY_SEPARATOR . $doc->cliente . DIRECTORY_SEPARATOR . $doc->contraparte . DIRECTORY_SEPARATOR . $doc->gestion . DIRECTORY_SEPARATOR . 'evidencias' . DIRECTORY_SEPARATOR . $doc->doc_id . '.pdf' . '?rnd=' . time();
                //
				$file_exists = file_exists($file_path);
                //
                /*if ( $doc->tipo_doc == '1252' ){
                    $files[$n]['nombre'] = 'Colombian Judicial Court System database';
                } elseif ( $doc->tipo_doc == '1253' ){
                    $files[$n]['nombre'] = 'Colombian National Police certificate';
                } elseif ( $doc->tipo_doc == '1254' ){
                    $files[$n]['nombre'] = 'Colombian Registry of the Population Deprived of Liberty (INPEC)';
                } elseif ( $doc->tipo_doc == '1255' ){
                    $files[$n]['nombre'] = 'Attorney General of the Nation (Procuraduría)';
                } elseif ( $doc->tipo_doc == '1286' ){
                    $files[$n]['nombre'] = 'Criminal Courts';
                } elseif ( $doc->tipo_doc == '1284' ){
                    $files[$n]['nombre'] = 'Judicial Certificate';
                } else {
                    $files[$n]['nombre'] = $doc->nombre_tipo_doc;
				}*/
                $files[$n]['nombre'] = $doc->nombre_tipo_doc;
                //
				$files[$n]['path'] = $file_path;
				$files[$n]['url'] = $file_url;
				$files[$n]['exists'] = $file_exists;
			}
		}
		//
		return view('/iv_hr/attachments_panel_control')->with(compact(['busqueda', 'docs', 'files','contraparte']));
	}

    private static function obtenerTaxIDFotos($contraparte,$busqueda){
        $session_data = Session::get('usuario');
        // dd($session_data);
		$path_dni_frente = env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$session_data->cliente["client_id"].DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$busqueda->gestion.DIRECTORY_SEPARATOR.'1_dni_'.$contraparte.'_'.$busqueda->gestion.'.png';
		$path_dni_dorso = env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$session_data->cliente["client_id"].DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$busqueda->gestion.DIRECTORY_SEPARATOR.'2_dni_'.$contraparte.'_'.$busqueda->gestion.'.png';
		$response = new \stdClass;
		$response->frente_existe = false;
		$response->dorso_existe = false;
		//
        $files_array = ['.pdf','.png','.jpeg','.jpg'];
        $ruta_dni2 = null;
        foreach ($files_array as $e) {
            $path_dni1 = env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$session_data->cliente["client_id"].DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$busqueda->gestion.DIRECTORY_SEPARATOR.'1_dni_'.$contraparte.'_'.$busqueda->gestion.$e;
            $path_dni2 = env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$session_data->cliente["client_id"].DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$busqueda->gestion.DIRECTORY_SEPARATOR.'2_dni_'.$contraparte.'_'.$busqueda->gestion.$e;
            if ( file_exists($path_dni1) ){
                $response->frente_existe = true;
                $response->frente_path = env('RUTA_DOCUMENTOS').DIRECTORY_SEPARATOR.$session_data->cliente["client_id"].DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$busqueda->gestion.DIRECTORY_SEPARATOR.'1_dni_'.$contraparte.'_'.$busqueda->gestion.$e;
            }
            if ( file_exists($path_dni2) && !$ruta_dni2 ){
                $response->dorso_existe = true;
                $response->dorso_path = env('RUTA_DOCUMENTOS').DIRECTORY_SEPARATOR.$session_data->cliente["client_id"].DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$busqueda->gestion.DIRECTORY_SEPARATOR.'2_dni_'.$contraparte.'_'.$busqueda->gestion.$e;
            }
        }
		return $response;
	}

    public static function vistaEdicionOrden(){
		$contraparte = Request::input('contraparte');
		$iv_busqueda = Request::input('iv_busqueda');
        $docs = DB::select('EXEC dbo.LN_contrapartes_ ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array('DOCUMENTOS_GESTION_ACTIVA', $contraparte, null, null, null, null, null, null, null, null, null, null, null, null, null));
		$busqueda = SQLConnection::backendStoreProcedure('IV_busquedas_', array('search', $iv_busqueda), 'selectOne');
        $datos_informe = SQLConnection::backendStoreProcedure('IV_panel_reports',array('informe_by_id',Session::get('usuario')->user_id,null,null,null,$busqueda->informe),'selectOne');
		//
		//
        $identificador = $busqueda->identificador;
        if ( $busqueda->identificador == 'CUIT' || $busqueda->identificador == 'CUIL' ){
            $identificador = 'DNI';
        }
		//
        foreach ($docs as $k => $doc) {
            if ($doc->quien_carga != 'C'){
                unset($docs[$k]);
            }
        }

        $nota = $datos_informe->datos_comerciales;
		$formulario_carga = [];
        $foto_tax_id = null;
        $consent_foto = null;
        $estado_doc_carga = null;
        $estado_doc_tax_id = null;
        $estado_doc_consent = null;
        $doc_id_conset = '';
        //
        foreach ($docs as $doc) {
            $aux_fld = self::generarCamposDocumento($doc->doc_id,'edicion_orden');
            /* if ($doc->tipo_doc == '1248' || $doc->tipo_doc == '1277' ) {
                $formulario_carga = $aux_fld['data'];                
                $estado_doc_carga = $aux_fld['doc_data']->estado_doc;
            } */
            if ( $doc->es_dni == 1 && $doc->es_evidencia == 0 ){
            //if ($doc->tipo_doc == '1250') {
                $foto_tax_id = $aux_fld;
                $estado_doc_tax_id = $foto_tax_id['doc_data']->estado_doc;
            }
            //if ($doc->tipo_doc == '1249') {
            elseif ( $doc->consentimiento == 1 && $doc->es_evidencia == 0 ){
                $doc_id_conset = $doc->doc_id;
                $consent_foto = $aux_fld;
                $estado_doc_consent = $consent_foto['doc_data']->estado_doc;
            } else {
				$formulario_carga[] = $aux_fld['data'];
                $estado_doc_carga = $aux_fld['doc_data']->estado_doc;
            }
        }        

        $files_id = self::obtenerTaxIDFotos($contraparte,$busqueda);
        $file_consent = env('PATH_DOCUMENTOS').DIRECTORY_SEPARATOR.$busqueda->cliente.DIRECTORY_SEPARATOR.$contraparte.DIRECTORY_SEPARATOR.$busqueda->gestion.DIRECTORY_SEPARATOR.$doc_id_conset.'.pdf';
        
        if (!file_exists($file_consent)) {
            $file_consent = null;
        } else {
            $file_consent = str_replace(env('PATH_DOCUMENTOS'),env('RUTA_DOCUMENTOS'),$file_consent);
        }
        $estado_inf = $busqueda->estado_informe;
        $id_padron = $datos_informe->id_padron;
        return view('/iv_hr/edicion_orden')->with(compact('nota','formulario_carga','foto_tax_id','consent_foto','estado_doc_carga','estado_doc_tax_id','estado_doc_consent','estado_inf','files_id','file_consent','contraparte','iv_busqueda','busqueda','id_padron','identificador'));
    }

    private static function generarCamposDocumento($docid,$blade_name=null) {
		//
		$temp = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('GENERATE', $docid, null, null, null, null, null, null, null, null), 'select');
		$doc = SQLConnection::backendStoreProcedure('LN_docs_', array('select', $docid, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null), 'selectOne');
		$flds = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('search', $docid, null, null, null, null, null, null, null, null), 'select');
		//
		// Traducciones::$blade = 'doc_etiquetas';
		// SQLConnection::obtenerTraducciones(Traducciones::$blade);
        Traducciones::$blade = $blade_name;
		SQLConnection::obtenerTraducciones(Traducciones::$blade);
		//** Documento foto de Inquiro vitae
		$foto_perfil_url = NULL;
		if ($doc->es_foto_perfil > 0) {
			$busqueda = SQLConnection::backendStoreProcedure('IV_busquedas_', array('search', NULL, $doc->contraparte), 'selectOne');
			if (!empty($busqueda)) {
				$foto_perfil_url = env('RUTA_DOCUMENTOS_IV') . '/' . $busqueda->foto;
			}
		}
		//
		$hay_campos = false;
		$hay_archivo = false;
		foreach ($flds as $fld) {
			$hay_campos = !$hay_campos ? ($fld->tipo_campo != 'F' ? true : $hay_campos) : $hay_campos;
			$hay_archivo = !$hay_archivo ? ($fld->tipo_campo == 'F' ? true : $hay_archivo) : $hay_archivo;
		}
		//
		$secciones = [];
		//
        $data_padre = [];
		$data = [];
		foreach ($flds as $k => $fld) {
			/*if ($doc->tipo_doc == '1147' && $fld->campo == '87'){
				unset($flds[$k]);
			}*/
			if ($fld->tipo_campo=='G') {
				/* encabezados de la tabla */
				$c1 = SQLConnection::backendStoreProcedure('LN_campos_col_', array('search', $fld->campo, null, null, null, null, null, null), 'select');
				$cols=[];
				foreach ($c1 as $clm) {
					$clm->etiqueta = Traducciones::get($clm->etiqueta);
					$cols[] = $clm->etiqueta;
				}
				/* configuración de los campos y valores de la tabla */
				$c2 = SQLConnection::backendStoreProcedure('LN_doc_campos_col_', array($fld->doc_id, $fld->seccion, $fld->campo), 'select');
				// $c2 = SQLConnection::backendStoreProcedure('LN_doc_campos_col_', array(310812, 0, 638), 'select');
				// var_dump($c2);
				$valores = [];
				foreach ($c2 as $k1 => $valor) {
					$valores[$valor->fila][$valor->col]['valor_texto'] = $valor->valor_texto;
					$valores[$valor->fila][$valor->col]['valor_fecha'] = $valor->valor_fecha;
					$valores[$valor->fila][$valor->col]['valor_fecha_str'] = $valor->valor_fecha_str;
					$valores[$valor->fila][$valor->col]['valor_numerico'] = $valor->valor_numerico;
					$valores[$valor->fila][$valor->col]['tipo_campo'] = $valor->tipo_campo;
					$valores[$valor->fila][$valor->col]['longitud'] = $valor->longitud;
					$valores[$valor->fila][$valor->col]['decimales'] = $valor->decimales;
					$valores[$valor->fila][$valor->col]['etiqueta'] = $valor->etiqueta;
					//-------
					//$valores[$valor->fila]['es_vacio'] = (empty($valor->valor_texto) and empty($valor->valor_fecha) and empty($valor->valor_numerico)) ? 1 : 0;
					//
					if ($valor->tipo_campo == 'S' or $valor->tipo_campo == 'R' or $valor->tipo_campo == 'C') {
						if (strlen($valor->opciones) > 0) {
							$r = explode("^", $valor->opciones);
							$txt = [];
							$val = [];
							if (sizeof($r) >= 2) {
								$txt = explode("|", $r[0]);
								$val = explode("|", $r[1]);
							}
							//
							$text_len = count($txt);
							for($i=0;$i < $text_len;$i++){
								$txt[$i] = Traducciones::get($txt[$i]);
							}
							//
							$valores[$valor->fila][$valor->col]['opciones']['txt'] = $txt;
							$valores[$valor->fila][$valor->col]['opciones']['val'] = $val;
						}
					}
				}
				//
				$fld->headers = $cols;
				$fld->values = $valores;
			} else {
				$fld->etiqueta = Traducciones::get($fld->etiqueta);
				/* campo no tabla */
				if (($fld->tipo_campo == 'S' or $fld->tipo_campo == 'R' or $fld->tipo_campo == 'C')) {
					$valores = [];
					//
					if (strlen($fld->opciones) > 0) {
						$r = explode("^", $fld->opciones);
						$txt = [];
						$val = [];
						if (sizeof($r) >= 2) {
							$txt = explode("|", $r[0]);
							$val = explode("|", $r[1]);
						}
						//
						$text_len = count($txt);
						for($i=0;$i < $text_len;$i++){
							$txt[$i] = Traducciones::get($txt[$i]);
						}
						//
						$valores[] = $txt;
						$valores[] = $val;
					}
					$fld->opciones = $valores;
				} elseif ( $fld->tipo_campo == 'W' || $fld->tipo_campo == 'Z' ) {
                    // Paises y Nacionalidades
                    $data_padre[$fld->campo] = $fld->valor_texto;
                    $inserted = SQLConnection::backendStoreProcedure('LN_doc_campos_opciones', array($fld->tipo_campo), 'select');
                    $fld->opciones = $inserted;
                } elseif ( $fld->tipo_campo == 'X' || $fld->tipo_campo == 'Y' ) {
                    // Provincias y Localidades
                    $country_code = NULL;
                    $prv_code = NULL;
                    //
                    if ( $fld->tipo_campo == 'X' && isset($data_padre[$fld->tipo_campo_padre]) ){
                        $country_code = $data_padre[$fld->tipo_campo_padre];
                        $data_padre[$fld->campo] = $fld->valor_texto;
                    } elseif( $fld->tipo_campo == 'Y' && isset($data_padre[$fld->tipo_campo_padre]) ){
                        $prv_code = $data_padre[$fld->tipo_campo_padre];
                    }
                    //
                    if ( !is_null($country_code) || !is_null($prv_code) ){
                        $inserted = SQLConnection::backendStoreProcedure('LN_doc_campos_opciones', array($fld->tipo_campo,$country_code,$prv_code), 'select');
                        $fld->opciones = $inserted;
                    }
                }
			}
			//
			$data[$fld->titulo_seccion][] = $fld;
			//
			if ($fld->titulo_seccion != '') {
				$secciones[$fld->titulo_seccion]['texto_bajada'] = $fld->texto_bajada;
				$secciones[$fld->titulo_seccion]['texto_pie'] = $fld->texto_pie;
			}
		}
		//
		if ($doc->es_balance > 0) {
			$file_path = env('PATH_COMPARTIDO') . '/' . $doc->ruta_archivo;
			$file_url = env('RUTA_COMPARTIDO') . '/' . $doc->ruta_archivo;
		} else {
			$file_path = env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '.pdf';
			$file_url = env('RUTA_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '.pdf';
		}
		//
		$file_exists = file_exists($file_path);
		//
		$search_array = array( '%inicio_vigencia_fecha%' , '%fin_vigencia_fecha%' , '%inicio_vigencia_periodo%' , '%fin_vigencia_periodo%' );
		$replace_array = array( $doc->inicio_vigencia , $doc->fecha_vigencia , (null !== $doc->inicio_vigencia) ? substr($doc->inicio_vigencia, 3, 7) : null , (null !== $doc->fecha_vigencia) ? substr($doc->fecha_vigencia, 3, 7) : null );
		//
		return ['docid' => $docid,'doc_data' => $doc,'data' => $data,'secciones' => $secciones,'file_path' => $file_path,'file_url' => $file_url,'file_exists' => $file_exists,'hay_campos' => $hay_campos,'hay_archivo' => $hay_archivo,'search_array' => $search_array, 'replace_array' => $replace_array,'foto_perfi_url' => $foto_perfil_url];
		//return [$docid, $doc, $data, $secciones,$file_path,$file_url, $file_exists, $hay_campos, $hay_archivo, $search_array, $replace_array, $foto_perfil_url];
	}

    /** 
     * Funcion que cambia el estado del informe
     * @access public
     * @return int
     */
    public function editarCancelarCamposOrden(){
        if ( isset($_POST['accion']) && isset($_POST['contraparte']) && isset($_POST['informe']) && isset($_POST['add_notas_candidato']) ) {
            $accion = Request::input('accion');
            $contraparte = Request::input('contraparte');
            $informe = Request::input('informe');
	    $email = Request::input('email-contraparte');
            //
            $user_id = Session::get('usuario')->user_id;
            $nota_contraparte = '[' . Session::get('usuario')->first_name . ' ' . Session::get('usuario')->last_name . '-' . gmdate("Y-m-d H:i", time()) .']: ' . Request::input('add_notas_candidato');
            $estado_informe = 'N';
            $msj_trazabilidad = 'El cliente cambió el estado del informe a Anulado';
            $cod_trazabilidad = 'CANCEL_IV';
            //
            $datos_informe = SQLConnection::backendStoreProcedure('IV_panel_reports',array('informe_by_id',$user_id,null,null,null,$informe),'selectOne');
            $busqueda = SQLConnection::backendStoreProcedure('IV_busquedas_', array('search', NULL,$contraparte), 'selectOne');
            $referencia = $busqueda->referencia_externa;
            //
            if( $accion == 'E') {
                $estado_informe = 'E';
                $msj_trazabilidad = 'El cliente cambió el estado del informe a En Proceso';
                $cod_trazabilidad = 'DEVOBS_IV';
                $docs = SQLConnection::backendStoreProcedure('LN_contrapartes_',array('DOCUMENTOS_GESTION_ACTIVA', $contraparte, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL));
                foreach( $docs as $doc ){
                    if ($doc->quien_carga != 'C') {
                        continue;
                    }
                    //
                    if ( $doc->es_dni == 1 && !empty($_FILES)){
                        $this->guardarImgDNI($doc->doc_id,$contraparte,$doc->gestion);
                    } elseif ( $doc->consentimiento == 1 ){
                        $this->guardarConsentimiento($doc->doc_id,$contraparte,$doc->gestion,$busqueda->iv_busqueda);
                    } else {
                        $this->guardarDocData($doc->doc_id);
                    }
                    // Cambiar estados de los docs
                    $docs = SQLConnection::backendStoreProcedure('LN_docs_backend', array('enviar', $doc->doc_id, 'I', $user_id), 'select');
                    SQLConnection::logTrazabilidad('El cliente modificó el documento del informe','UPD_DOC',env('ID_PLATAFORMA'),Session::get('usuario')->user_id,$datos_informe->servicio_contratado,$datos_informe->cliente,$contraparte,$doc->doc_id);
                }
                //
				$tareas = SQLConnection::backendStoreProcedure('LN_Blue_Tareas_Informe',array('TAREAS_TIPODOC',NULL,$informe));
				//agrega el campo email a la tabla contrapartes
                if ( !is_null($email) ){
                    SQLConnection::backendStoreProcedure('LN_contrapartes_',array('UPDATE_CONTACT', $contraparte, NULL, NULL, NULL, NULL, NULL, $email, NULL, NULL, NULL, NULL, NULL, NULL));
                }
				//
                foreach ($tareas as $tarea) {
                    SQLConnection::backendStoreProcedure('LN_Blue_UPDAGB',array('UPD_ESTADO',NULL,$tarea->tarea,Session::get('usuario')->user_id,NULL,NULL,NULL,NULL,'A'));
                    SQLConnection::logTrazabilidad('El cliente modificó el estado de la tarea','UPD_ESTADO_TAREA',env('ID_PLATAFORMA'),Session::get('usuario')->user_id,$datos_informe->servicio_contratado,$datos_informe->cliente,$contraparte,null,null,null,null,null,$tarea->tarea);
                }
            }
            // Agrega nota
            SQLConnection::backendStoreProcedure('LN_Blue_UPDAGB',array('UPD_INFORME_OBS',$contraparte,$informe,$user_id,NULL,NULL,null,null,null,null,NULL,null,null,NULL,NULL,null,NULL,NULL,null,null,$nota_contraparte),'selectOne');
            // Cambia el estado del informe según la acción
            if ( $accion == 'E' ){
                $actualizar = SQLConnection::backendStoreProcedure('LN_Blue_UPDAGB',array('UPD_informe',$datos_informe->contraparte,$informe,$user_id,NULL,NULL,$datos_informe->id_tipo_informe,$datos_informe->informe_prioridad,$estado_informe,NULL,NULL,$datos_informe->userIDAsigandoInforme,$datos_informe->cliente,NULL,NULL,$datos_informe->fecha_comprometida_informe,NULL,NULL,$datos_informe->idioma,$datos_informe->inicio_informe));
            } else {
                $cancelado_time = new \DateTime();
                $cancelado = $cancelado_time->format('Y-m-d H:m:i.v');
                $actualizar = SQLConnection::backendStoreProcedure('LN_Blue_UPDAGB',array('CANCELA_INFORME',$datos_informe->contraparte,$informe,$user_id,NULL,NULL,$datos_informe->id_tipo_informe,$datos_informe->informe_prioridad,$estado_informe,NULL,NULL,$datos_informe->userIDAsigandoInforme,$datos_informe->cliente,NULL,NULL,$datos_informe->fecha_comprometida_informe,NULL,NULL,$datos_informe->idioma,$datos_informe->inicio_informe));
                // SQLConnection::logTrazabilidad('Las tareas del informe fueron cerradas.','CERRAR_TAREAS_INFORME',env('ID_PLATAFORMA'),Session::get('usuario')->user_id,$datos_informe->servicio_contratado,$datos_informe->cliente,$contraparte,null,null,null,$informe);
            }
            //
            SQLConnection::logTrazabilidad($msj_trazabilidad,$cod_trazabilidad,env('ID_PLATAFORMA'),Session::get('usuario')->user_id,$datos_informe->servicio_contratado,$datos_informe->cliente,$contraparte,null,null,null,$informe);
            SQLConnection::logTrazabilidad('Se reinicio el informe','START_IV',env('ID_PLATAFORMA'),Session::get('usuario')->user_id,$datos_informe->servicio_contratado,$datos_informe->cliente,$contraparte,null,null,null,$informe);
            //
            if ( $estado_informe == 'N' ){
                $this->emailHR($referencia,$estado_informe);
            }
            //
            return 1;
        } else {
            return 0;
        }
    }

    public function HRExcelPanelControl(){
		ini_set('memory_limit','4096M');
		ini_set('max_execution_time', 10000); // 1000 segundos
		set_time_limit(0); 
		//
		$servicio_actual  = Request::input('servicio_excel') ?? Session::get('servicio_actual');
		$cliente          = Request::input('cliente_excel')  ?? Session::get('usuario')->cliente['client_id'];
		$cron             = Request::input('cliente_excel')  ? 'SI' : 'NO';
		
		$ids = null != Request::input('ids') ? Request::input('ids') : null;

		$periodo_historico = null; 
		$periodo_archivo = Request::input('periodo') ?? null;
		if ($periodo_archivo !== null) {
			/* El archivo de un mes, tiene los datos del periodo_anterior 
			Por ejemplo: El panel al 31/01/2022 tienen los datos del periodo 202112 */ 
			$fecha = substr($periodo_archivo,0,4) . '-' . substr($periodo_archivo,4,2) . '-01';
			$date = new DateTime($fecha);
			$dt = date_format($date, 'Y-m-d'); 
			$periodo_historico = date("Ym",strtotime($dt."- 1 day")); 

			$dt2 = date("Y-m-d",strtotime($dt."+ 1 month")); 
			$fecha_archivo = date("Y-m-d",strtotime($dt2."- 1 day")); 
			/* para que le ponga el ultimo dia del mes le sumamos 1 mes y le restamos 1 dia */
		}

		$array_ids = explode(",", $ids);
        $personas = SQLConnection::backendStoreProcedure('IV_panel_control', array('panel_control_uid', Session::get('usuario')->cliente["client_id"],Session::get('usuario')->user_id), 'select');
        
        $selected_arr = [];
        if (!empty($array_ids) && count($array_ids) != count($personas)) {
            foreach ($array_ids as $selected) {
                foreach ($personas as $reg) {
                    if ($selected == $reg->contraparte) {
                        array_push($selected_arr,$reg);
                    }
                }
            }
        }
        $file = '<table border="1"><tr><td>Flag</td><td>Country</td><td>Service Type</td><td>Reference</td><td>Requested by</td><td>Start Date</td><td>End Date</td><td>TAT</td><td>Status</td></tr>';
        if (!empty($array_ids) && count($array_ids) != count($personas)) {
            $personas = $selected_arr;
        }
        foreach ($personas as $reg) {
            if ( $reg->estado_informe == 'R'){
                $status = 'To be reviewed';
            } elseif ( $reg->estado_informe == 'C') {
                $status = 'Rejected';
            } elseif ( $reg->estado_informe == 'A') {
                $status = 'Submitted';
            } elseif ( $reg->publicado == '0' && ( $reg->estado_informe == 'P' || $reg->estado_informe == 'W' || $reg->estado_informe == 'E' || $reg->estado_informe == 'T' )){
                $status = 'In progress';
            } elseif ( $reg->publicado == '1' && $reg->estado_informe == 'K' && $reg->informe_hit == '0' ) {
                $status = 'No Hit Order';
            } elseif ( $reg->publicado == '1' && $reg->estado_informe == 'K' && $reg->informe_hit == '1' ) {
                $status = 'Hit Order';
            } elseif ( $reg->estado_informe == 'N' ){
                $status = 'Cancelled';
            }/*  elseif ( $reg->estado_informe == 'T' ){
                $status = 'Answered';
            } */ else {
                $status = 'Done';
            }            
			//
			$reg->fecha_finalizado = ( is_null($reg->fecha_finalizado) ) ? NULL : ((new \DateTime($reg->fecha_finalizado))->format('d/m/Y'));
			//
            $file .= '<tr><td>'.$reg->country_code.'</td><td>'.$reg->country_name.'</td><td>'.$reg->nombre_tipo_informe.'</td><td>'.$reg->id_referencia.'</td><td>'.$reg->ingresado_por.'</td><td>'.$reg->created.'</td><td>'.$reg->fecha_finalizado.'</td><td>'.$reg->TAT_front.'</td><td>'.$status.'</td></tr>';
        }
        
        $file .= '</table>';

        header('Content-disposition: attachment; filename=Orders.xls');
        header('Content-type: application/vnd.ms-excel; charset=utf-8');
        $file = utf8_decode($file); 
        //echo $file;
        /* 14/02/2020 lo cambiamos por: */
        $response =  array(
            'op' => 'ok',
            'archivo' => 'Orders.xls', 
            'file' => "data:application/vnd.ms-excel;base64,".base64_encode($file)
        );
        die(json_encode($response));

        return 1;
		
		// if ($periodo_historico==null) {
		// 	$fecha = date("Y-m-d");
		// 	if ($cron == 'SI')
		// 	{
		// 		$file = utf8_decode($file); 
		// 		$file_txt  = env('PATH_COMPARTIDO') .  '/reportes/Reporte_Contrapartes_' . $servicio_actual . '_' . $cliente . '_' .  $fecha . '.xls'; 
		// 		file_put_contents($file_txt, $file);
		// 		chmod($file_txt,0777);
		// 		echo "Fin"; 
		// 	}
		// 	else 
		// 	{
		// 		header('Content-disposition: attachment; filename=Reporte_Contrapartes_' . $fecha . '.xls');
		// 		header('Content-type: application/vnd.ms-excel; charset=utf-8');
		// 		$file = utf8_decode($file); 
		// 		//echo $file;
		// 		/* 14/02/2020 lo cambiamos por: */
		// 		$response =  array(
		// 			'op' => 'ok',
		// 			'archivo' => 'Reporte_Contrapartes_' . $fecha . '.xls', 
		// 			'file' => "data:application/vnd.ms-excel;base64,".base64_encode($file)
		// 		);
		// 		die(json_encode($response));
		// 	}
		// } else {
		// 	header('Content-disposition: attachment; filename=Reporte_al_' . $fecha_archivo . '.xls');
		// 	header('Content-type: application/vnd.ms-excel; charset=utf-8');
		// 	$file = utf8_decode($file);
		// 	echo $file;
		// 	return; 
		// }
  	}

    public static function emailHR($referencia,$estado=NULL){
        //
        $usuario_creador = (Session::get('usuario')->first_name.' '.Session::get('usuario')->last_name);
        $to = Session::get('usuario')->email;
        $app_id = 99;
        $servicio = 10; 
        $cliente = 738156811; 
        $web = SQLConnection::backendStoreProcedure('multi_web_', array('mail_cliente', NULL, $app_id, $cliente, null, $servicio), 'selectOne');
        $sender = $web->sender ?? 'no-reply@inquirovitae.com';
        //
        $url = $web->http_host ?? 'https://www.inquirovitae.com';
        $protocol = (strpos($url, 'https://', 0)===0) ? ('https' . chr(58) . chr(47) . chr(47)) : ('https' . chr(58) . chr(47) . chr(47));
        $url = (strpos($url, 'http', 0)===0) ? $url : $protocol . $url ;
        $logo_url = (!empty($url) and !empty($web->uri_email_logo)) ? ((strpos($web->uri_email_logo, 'http', 0)===0) ? $web->uri_email_logo : ($url . $web->uri_email_logo)) : 'https://www.fidelitas.com.ar/img/mail_logo.png';
        //
        $mail_subject = NULL;
        $texto = NULL;
        // Informe Ingresado
        if ( is_null($estado) ){
            // Informe Ingresado
            $texto = "Dear $usuario_creador <br>
            Your submitted order $referencia is waiting to be processed. <br>
            Please contact HireRight.support@inquirovitae.com if you require any further information.";
            // $mail_subject = "Your submitted order $referencia is being processed";
	    $mail_subject = "Your submitted order $referencia has been placed";
        } elseif ( $estado == 'N' ){
            // Informe Anulado
            $texto = "Dear <b>$usuario_creador</b> <br>
            Your order <i>$referencia</i> has been cancelled. <br>
            Please contact HireRight.support@inquirovitae.com if you require any further information.";
            $mail_subject = "Your order $referencia has been cancelled";
        }
        //
        if ( !is_null($texto) ){
            $texto = "
                <table width='100%' border='0' cellspacing='0' cellpadding='3' class='HeaderTable'>
                <tr>
                    <td valign='top' valign='middle'><img src='$logo_url' alt='' border='0' height='34'></td>
                </tr>
                <tr>
                    <td>
                        <br />
                        $texto
                        <br />
                        <br />
                    </td>
                </tr>
                </table>
            ";
            //
            Mailer::from($sender);
            Mailer::to($to);
            Mailer::bcc('HireRight.support@inquirovitae.com');
            Mailer::replyto('HireRight.support@inquirovitae.com');
            Mailer::text($texto,$mail_subject);
            Mailer::send();
            return true;
        }
        //
        return false;
    }

    public function updatePadron(){
        if ( isset($_POST['identificacion']) && isset($_POST['identificador']) ){ 
			$id_padron = Request::input('id_padron'); 
			$identificacion = Request::input('identificacion'); 
			$identificador = Request::input('identificador');
			$contraparte = Request::input('contraparte');
			$nombre = strtoupper(trim(Request::input('nombre'))); 
			$apellido = strtoupper(trim(Request::input('apellido')));
			$fecha_nacimiento = Request::input('fecha_nacimiento');
			// 
			$razon_social = $apellido.' '.$nombre; 
			// SQLConnection::backendStoreProcedure('padrones_extranjeros',array($id_padron,$identificador,$identificacion,'F',$razon_social,$apellido,$nombre,null,$fecha_nacimiento));
            // SQLConnection::logTrazabilidad('Se actualizó el registro del padrón','UPD_PADRON',env('ID_PLATAFORMA'),Session::get('usuario')->user_id,Session::get('servicio_actual'),Session::get('usuario')->cliente['client_id'],$contraparte);
			// 
			return Response::JSON(['error' => 0,'mensaje' => 'OK']); 
		}
        return 0;
    }

    public function addTicket(){
        if (!empty($_POST['msg'])) {
            $contraparte = Request::input('contraparte');
            $gestion = Request::input('gestion');
            $cliente = Request::input('cliente');
            $msg = Request::input('msg');
            
            $wsp = SQLConnection::backendStoreProcedure('LN_tickets_', array('ADDTICKET', $contraparte,$gestion,Session::get('servicio_actual'),$cliente,Session::get('usuario')->user_id,$msg,'F'));

        } else {
            return 0;
        }
    }

     /**
     * Funcion que hace las traducciones
     * de los nacionalidades y paises
     * @access private
     * @param array una matriz con los objetos a traducir
     * @return void
     */
    private function traducirPaises(&$array){
        Traducciones::$blade = 'traduccion_campos_select_especiales';
        $trad = SQLConnection::obtenerTraduccionesPHP(Traducciones::$blade);
        //
        foreach( $array as $option ){
            if ( isset($trad[$option->etiqueta]) ){
                $option->etiqueta = $trad[$option->etiqueta];
            } else {
                Traducciones::set($option->etiqueta,Traducciones::$blade);
            }
        }
		//
        usort($array,function($a,$b){
            return strcmp($a->etiqueta,$b->etiqueta);
        });
    }

	/**
     * Funcion que hace las traducciones
     * a las opciones de campo select
     * @access private
     * @param array una vector con las etiquetas de las opciones
     * @return void
     */
    private function traducirSelect(&$array){
        Traducciones::$blade = 'traduccion_campos_select_especiales';
        $trad = SQLConnection::obtenerTraduccionesPHP(Traducciones::$blade);
        //
        foreach( $array as $option => $etiqueta ){
            if ( isset($trad[$etiqueta]) ){
                $array[$option] = $trad[$etiqueta];
            } else {
                Traducciones::set($etiqueta,Traducciones::$blade);
            }
        }
    }

	public function componentesEntregables(){
        $contraparte = Request::input('contraparte');
        $iv_busqueda = Request::input('iv_busqueda');
        $busqueda = SQLConnection::backendStoreProcedure('IV_busquedas_', array('search', NULL,$contraparte), 'selectOne');
        if ( !is_null($busqueda) ){
            $params = http_build_query(['cliente' => $busqueda->cliente,'contraparte' => $busqueda->contraparte,'informe' => $busqueda->informe,'gestion' => $busqueda->gestion,'idioma' => 'eng']);
            $response = Misc::CURLCall(env('API_COMPONENTES_ENTREGABLES'),$params);
            $response = json_decode($response);
            //
            if ( $response->error == 0 ){
                $componentes = $response->componentes;
                foreach( $componentes as $componente ){
                    if ( !is_null($componente->cuerpo) ){
                        $componente->cuerpo = utf8_decode($componente->cuerpo);    
                    }
                }
                //
                $vista = \View::make('/iv_hr/front_components')->with(compact('componentes'))->render();
                //
                return Response::json(['error' => 0,'mensaje' => 'OK','vista' => $vista]);
            }
            //
            return Response::json(['error' => 2,'mensaje' => 'Los componentes no fueron devueltos.']);    
        }
        return Response::json(['error' => 1,'mensaje' => 'La busqueda no existe.']);
    }

}

