<?php namespace App\Http\Controllers;

use App\Custom\SQLConnection; 
use App\Custom\Misc;
use App\Custom\Mailer;
use Request;
use Session;
use DateTime;
use Illuminate\Support\Facades\Input;
use DB;
use stdClass;

// use Illuminate\Session\TokenMismatchException;

class IVController extends Controller {

	public static function ivDashboard() {

		return view('/iv/iv_dashboard');
	}


	public static function ivPanelControl() {
		/* si el usuario / cliente tienen producto y cupo para solicitar un nuevo informe */
		$consumo = SQLConnection::backendStoreProcedure('IV_panel_control', array('control_consumo', NULL, Session::get('usuario')->user_id, env('IV_PRODUCTO')), 'selectOne');
//dd($consumo);
		return view('/iv/iv_panel_control')->with(compact(['consumo']));
	}

	public static function ivPanelControlInfo() {
		$cliente = Session::get('usuario')->cliente['client_id'];
		$user_id = Session::get('usuario')->user_id;

		/* 30/09/2020 El sp con la accion columnasr y indicadores_panel_controlr devuelven solo las columnas que el usuario tiene autorizadas */
		$columnas = SQLConnection::backendStoreProcedure('IV_panel_control', array('columnasr', $cliente, $user_id), 'select'); 
		$indicadores = SQLConnection::backendStoreProcedure('IV_panel_control', array('indicadores_panel_controlr', $cliente, $user_id), 'select');

		$personas = SQLConnection::backendStoreProcedure('IV_panel_control', array('panel_control', $cliente), 'select');
		//dd($personas);

		/*---------------------------------------------------------------
		// 25/09/2020
		// en $columnas agregamos el valor de hidden siempre en 0
		// y ponemos hidden = 1 las columnas de indicadores que el usuario tenga restringidas 

		foreach ($columnas as $key => $value) {
			$columnas[$key]->hidden = 0; 
		}
		$usuarios_restricciones = Session::get('usuarios_restricciones');
		$servicio_actual = Session::get('servicio_actual');
		if(!empty($usuarios_restricciones)){
			foreach ($usuarios_restricciones as $key_ur => $value_ur) {
				if($servicio_actual == $key_ur){
					foreach ($value_ur as $key_n2 => $value_n2) {
						foreach ($columnas as $key => $value) {
							if ($value->indicador == $value_n2->indicador)
								{
									//$columnas[$key]->hidden = 1; 
									unset($columnas[$key]); 
								}
						}
					}
				}
			}
		}*/
		/*---------------------------------------------------------------*/
		$indic = [];
		foreach ($columnas as $y => $col) {
			// se descartan las columnas fijas
			if ($col->orden_producto > 0) {
				$indic[] = $col->clave_indicador;
			}
		}

		$pais		= [];
		//$cv			= [];
		$familias 	= [];
		$data 		= [];
		foreach ($personas as $k => $cand) {
			$cc = strtolower($cand->country_code);

			$pais[$k]['info'] = $cc;
			$pais[$k]['cls'] = 'flag-icon-' . $cc;
			$pais[$k]['val'] = '<span class=flag-icon flag-icon-background flag-icon-' . $cc .'></span>';

			$familias[$k]['value'] = $cand->familia;
			//$cv[$k]['info'] = $cand->cv;	
			//$cv[$k]['cls'] = $cand->cv;	
			$data[$cand->contraparte] = (array) $cand;
			//$iv_cv[$cand->contraparte] = $cand->cv_existe;
			foreach ($indic as $j => $indica) {
				$data[$cand->contraparte][$indica] = NULL;
			}
		}
		foreach ($data as $k => $iv) {
			$data[$k]['foto_60'] = '<img src="'. env('RUTA_DOCUMENTOS_IV') . '/' . $data[$k]['foto_60'] . '?r=' . time() .  '" border="0" class="img img-responsive" />';
			//$data[$k]['country'] = '<span class="flag-icon flag-icon-background flag-icon-' . strtolower($data[$k]['country_code']) . '"></span>';
			$data[$k]['country'] = strtolower($data[$k]['country_code']);
		}
		$cv_iv			    = [];
		$valoracion_iv		= [];
		$academico			= [];
		$profesional 		= [];
		$comercial_legal 	= [];
		$compliance 		= [];
		$prensaiv 			= [];
		// var_dump($indicadores); die();
		foreach ($indicadores as $n => $valores) {

			//si no está publicado no se muestran íconos
			if ($valores->visible == 0)
			{
				//$cls = 'text-muted';
				$cls = 'XX';
				//$icon = 'fas fa-user-clock fa-2x';
				$icon = 'fas fa-spinner fa-2x';
				$color = 'style=color:#d3d3d3';
				$titulo = 'En proceso';

			}
			else {
				if($valores->clave_indicador == 'IV_CV') {
					if  ($valores->valor_numerico == '1') {
						//$cls = 'text-success';  //--> 15-01-2021
						$cls = 'S';
						$icon =  'fas fa-check-circle fa-2x';
						$color = 'style=color:#89ab5f';
						$titulo = 'Ingresado';
					} else {
						//$cls = 'text-danger';   --> 15-01-2021
						$cls = 'D';
						$icon = 'fas fa-times-circle fa-2x';
						$color = 'style=color:#a72b2a';
						$titulo = 'No presentado';

					}
					//$color = 'style=color:#89ab5f';
					//$cv_iv[$n]['info'] = $icon . ' ' . $cls;
					$cv_iv[$n]['info'] = $titulo;
					$cv_iv[$n]['cls']  = $icon . ' ' . $cls;
					$cv_iv[$n]['color'] = $color;
					$cv_iv[$n]['title'] = $titulo;
				}
				else
				{
					if ($valores->clave_indicador !== NULL) 
					{
/*
- Ok:  fa-check-circle (#89ab5f)
- Con observaciones:  fa-exclamation-circle (#fab724)
- Alerta:  fa-times-circle (#a72b2a)  
- No obtenido:  fa-circle (#d3d3d3)  
- No contratado:  fa-minus (#d3d3d3)  
- En proceso: fa-spinner (#d3d3d3)

*/
						//si no está publicado no se muestran íconos
						if ($valores->visible == 0)
						{
							$cls = 'XX2';
							//$icon = 'fas fa-user-clock fa-2x';
							//$icon = 'fas fa-spinner fa-2x" style=color:#777';
						}
						else
						{
							switch ($valores->valor_texto) 
							{
								case 'P': //VERDE 
									$cls = 'S';
									$icon = 'fas fa-check-circle fa-2x';
									$color = 'style=color:#89ab5f';
									$titulo = 'Ok';
									break;
								case 'O': //AMARILLO
									$cls = 'W';
									$icon =  'fa fa-exclamation-circle fa-2x';
									$color = 'style=color:#fab724';
									$titulo = 'Con Observaciones';
									break;
								case 'N'://ROJO
									$cls = 'D';
									$icon = 'fas fa-times-circle fa-2x';
									$color = 'style=color:#a72b2a';
									$titulo = 'Alerta';
									break;				 	
								case 'X'://GRIS
									$cls = 'I';
									$icon = 'fas fa-circle fa-1x'; //fa-circle-o
									$color = 'style=color:#d3d3d3';
									$titulo = 'No obtenido';
									break;				 	
								case 'S'://GRIS
									$cls = 'I';
									$icon = 'fas fa-minus fa-2x';
									$color = 'style=color:#d3d3d3';
									$titulo = 'No contratado';
									break;				 	
								default:
									$cls = 'XX3';
									$icon = 'fas fa-spinner fa-2x';
									$color = 'style=color:#d3d3d3';
									$titulo = 'En proceso';
									break;
							}

						}	

						if($valores->clave_indicador == 'VALORACION_IV'){
							//$valoracion_iv[$n]['info'] = $icon . ' ' . $cls;
							$valoracion_iv[$n]['info'] = $titulo;
							$valoracion_iv[$n]['cls'] = $icon . ' ' . $cls;
							$valoracion_iv[$n]['color'] = $color;
							$valoracion_iv[$n]['title'] = $titulo;
						}
						if($valores->clave_indicador == 'ACADEMICO'){
							//$academico[$n]['info'] = $icon . ' ' . $cls;
							$academico[$n]['info'] = $titulo;
							$academico[$n]['cls'] = $icon . ' ' . $cls;
							$academico[$n]['color'] = $color;
							$academico[$n]['title'] = $titulo;
						}
						if($valores->clave_indicador == 'PROFESIONAL'){
							//$profesional[$n]['info'] = $icon . ' ' . $cls;
							$profesional[$n]['info'] = $titulo;
							$profesional[$n]['cls'] = $icon . ' ' . $cls;
							$profesional[$n]['color'] = $color;
							$profesional[$n]['title'] = $titulo;
						}
						if($valores->clave_indicador == 'COMERCIAL_LEGAL'){
							//$comercial_legal[$n]['info'] = $icon . ' ' . $cls;
							$comercial_legal[$n]['info'] = $titulo;
							$comercial_legal[$n]['cls'] = $icon . ' ' . $cls;
							$comercial_legal[$n]['color'] = $color;
							$comercial_legal[$n]['title'] = $titulo;
						}
						if($valores->clave_indicador == 'COMPLIANCE'){
							//$compliance[$n]['info'] = $icon . ' ' . $cls;
							$compliance[$n]['info'] = $titulo;
							$compliance[$n]['cls'] = $icon . ' ' . $cls;
							$compliance[$n]['color'] = $color;
							$compliance[$n]['title'] = $titulo;
						}
						if($valores->clave_indicador == 'PRENSAIV'){
							//$prensaiv[$n]['info'] = $icon . ' ' . $cls;
							$prensaiv[$n]['info'] = $titulo;
							$prensaiv[$n]['cls'] = $icon . ' ' . $cls;
							$prensaiv[$n]['color'] = $color;
							$prensaiv[$n]['title'] = $titulo;
						}



					}
				}
			}

			$data[$valores->contraparte][$valores->clave_indicador] = $icon.'|'.$cls.'|'.$color.'|'.$titulo;
			

			/*$data[$valores->contraparte][$valores->clave_indicador][0] = $valores->valor_numerico;
			$data[$valores->contraparte][$valores->clave_indicador][1] = $valores->valor_fecha;
			$data[$valores->contraparte][$valores->clave_indicador][2] = $valores->valor_texto;*/
		}


		$pais	   		= array_map("unserialize", array_unique(array_map("serialize", $pais)));
		//$cv	   			= array_map("unserialize", array_unique(array_map("serialize", $cv)));
		$familias		= array_map("unserialize", array_unique(array_map("serialize", $familias)));
		$cv_iv	   		= array_map("unserialize", array_unique(array_map("serialize", $cv_iv)));
		$valoracion_iv	= array_map("unserialize", array_unique(array_map("serialize", $valoracion_iv)));
		$academico		= array_map("unserialize", array_unique(array_map("serialize", $academico)));
		//var_dump($academico); die(); 
		$profesional	= array_map("unserialize", array_unique(array_map("serialize", $profesional)));
		$comercial_legal= array_map("unserialize", array_unique(array_map("serialize", $comercial_legal)));
		$compliance		= array_map("unserialize", array_unique(array_map("serialize", $compliance)));
		$prensaiv		= array_map("unserialize", array_unique(array_map("serialize", $prensaiv)));
		$inquiro = [];
		foreach ($data as $contraparte => $nd) {
			$pp = [];
			foreach ($columnas as $x => $col) {
				$g = (array) $col;
				//dd(  $g['clave_indicador']  );
				//dd( $nd [ $g['clave_indicador'] ] );
				$pp[$g['clave_indicador']] = $nd[ $g['clave_indicador'] ];
			}

			$pp['contraparte'] = $nd['contraparte'];
			$pp['iv_busqueda'] = $nd['iv_busqueda'];
			$pp['country_code'] = $nd['country_code'];

			$inquiro[] = $pp;
		}
		return json_encode( array(
			'columnas' => $columnas,
			'data' => $inquiro,
			'pais' => $pais ,
			'familias' => $familias,
			//'cv' => $cv,
			'cv_iv' => $cv_iv,
			'valoracion_iv' => $valoracion_iv,
			'academico' => $academico,
			'profesional' => $profesional,
			'comercial_legal' => $comercial_legal,
			'compliance' => $compliance,
			'prensa' => $prensaiv
		));

	}

	public static function ivExportarExcel() {
		$cliente = Session::get('usuario')->cliente['client_id'];
		$contrapartes = Request::input('contrapartes');

		$acontr = explode(',', $contrapartes); 

		$candidatos = SQLConnection::backendStoreProcedure('IV_panel_control', array('panel_control_excel', $cliente), 'select');

		/* 30/09/2020 El sp con la accion indicadores_panel_controlr devuelve solo las columnas que el usuario tiene autorizadas */
		$user_id = Session::get('usuario')->user_id;
		$columnas = SQLConnection::backendStoreProcedure('IV_panel_control', array('columnasr', $cliente, $user_id), 'select'); 
		$indicadores = SQLConnection::backendStoreProcedure('IV_panel_control', array('indicadores_panel_controlr', $cliente, $user_id), 'select');

		foreach($candidatos as $cand) {
			if (in_array($cand->contraparte, $acontr)) {
				$data[$cand->contraparte]['pais'] = $cand->country_name;
				$data[$cand->contraparte]['familia'] = $cand->familia;
				$data[$cand->contraparte]['nombre'] = $cand->nombre_persona;
				$data[$cand->contraparte]['fecha'] = $cand->creado;
				$data[$cand->contraparte]['referencia'] = $cand->ref . ' - ' . $cand->ref_nombre;
				$data[$cand->contraparte]['sector'] = $cand->ref_seccion;
				$data[$cand->contraparte]['cargo'] = $cand->ref_cargo;
				$data[$cand->contraparte]['tipo'] = $cand->abreviatura;
				$data[$cand->contraparte]['documento'] = $cand->identificacion;
				$data[$cand->contraparte]['email'] = $cand->email_candidato;
				$data[$cand->contraparte]['telefono'] = $cand->telefono_candidato;
				//$data[$cand->contraparte]['cv'] = $cand->cv_existe > 0 ? 'SI' : 'NO';
			}
		}

		// Acá hago corte de control por ID de contraparte para no buscar en array por cada registro de indicadores
		$last = 0;
		foreach($indicadores as $indica) {
			if ($indica->contraparte != $last) {
				$cand = $indica->contraparte;
				$incluye = in_array($cand, $acontr);
			}

			if ($incluye) {
				if($indica->clave_indicador == 'IV_CV')
				{
					if ($indica->valor_numerico == '1') 
						 {	$data[$cand][$indica->clave_indicador] = 'SI'; }
					else {	$data[$cand][$indica->clave_indicador] = 'NO'; }
				} 
				else
				{
				$data[$cand][$indica->clave_indicador] = $indica->valor_texto != NULL ? ( ($indica->valor_texto == 'P') ? 'Positivo' : (($indica->valor_texto == 'O') ? 'Observado' : 'Alerta') ) : NULL;
				}
			}

			$last = $cand;
		}
		
		$file = '<table border="1">';
		$file .= '<tr><th>País</th><th>Familia</th><th>Apellido y Nombres</th><th>Fecha</th><th>Referencia</th><th>Sector</th><th>Cargo</th>';
		$file .= '<th>Tipo</th><th>Documento</th><th>E-mail</th><th>Teléfono</th>';
		//$file .= '<th>CV</th><th>Valoración</th><th>Académico</th><th>Profesional</th><th>Comercial/Legal</th><th>Compliance</th><th>Prensa</th></tr>'; 
		/* 30/09/2020 No son mas columnas fijas, son las que devuelve el SP, que el usuario tiene habilitadas */ 
		foreach($columnas as $j => $col) {
			if ($col->orden_producto <= 0) { continue; }
			$file .= '<th>' . $col->etiqueta_indicador . '</th>';
		}
		$file .= '</tr>';
		
		foreach($data as $x => $candidato) {
			$file .= '<tr>';
			$file .= '<td style="text-align:center;">' . $candidato['pais'] . '</td>';
			$file .= '<td>' . $candidato['familia'] . '</td>';
			$file .= '<td>' . $candidato['nombre'] . '</td>';
			$file .= '<td style="text-align:center;">' . $candidato['fecha'] . '</td>';
			$file .= '<td>' . $candidato['referencia'] . '</td>';
			$file .= '<td>' . $candidato['sector'] . '</td>';
			$file .= '<td>' . $candidato['cargo'] . '</td>';
			$file .= '<td>' . $candidato['tipo'] . '</td>';
			$file .= '<td style="mso-number-format:\'@\';">' . $candidato['documento'] . '</td>';
			$file .= '<td>' . $candidato['email'] . '</td>';
			$file .= '<td style="mso-number-format:\'@\';">' . $candidato['telefono'] . '</td>';
			//$file .= '<td style="text-align:center;">' . $candidato['cv'] . '</td>';
			foreach($columnas as $j => $col) {
				if ($col->orden_producto <= 0) { continue; }
				$file .= '<td style="text-align:center;">' .(isset($candidato[$col->clave_indicador]) ? $candidato[$col->clave_indicador] : '') . '</td>';
				/*
				if ($col->clave_indicador == 'IV_CV') { 
					$file .= '<td style="text-align:center;">' .(isset($candidato['IV_CV']) ? $candidato['IV_CV'] : '') . '</td>';
				}
				if ($col->clave_indicador == 'VALORACION_IV') { 
					$file .= '<td style="text-align:center;">' . (isset($candidato['VALORACION_IV']) ? $candidato['VALORACION_IV'] : '') . '</td>';
				}
				if ($col->clave_indicador == 'ACADEMICO') { 
					$file .= '<td style="text-align:center;">' . (isset($candidato['ACADEMICO']) ? $candidato['ACADEMICO'] : '') . '</td>';
				}
				if ($col->clave_indicador == 'PROFESIONAL') { 
					$file .= '<td style="text-align:center;">' . (isset($candidato['PROFESIONAL']) ? $candidato['PROFESIONAL'] : '') . '</td>';
				}
				if ($col->clave_indicador == 'COMERCIAL_LEGAL') { 
					$file .= '<td style="text-align:center;">' .(isset($candidato['COMERCIAL_LEGAL']) ? $candidato['COMERCIAL_LEGAL'] : '') . '</td>';
				}
				if ($col->clave_indicador == 'COMPLIANCE') { 
					$file .= '<td style="text-align:center;">' .(isset($candidato['COMPLIANCE']) ? $candidato['COMPLIANCE'] : '') . '</td>';
				}
				if ($col->clave_indicador == 'PRENSAIV') { 
					$file .= '<td style="text-align:center;">' .(isset($candidato['PRENSAIV']) ? $candidato['PRENSAIV'] : '') . '</td>';
				}
				*/
			}
			$file .= '</tr>';
		}
		$file .= '</table>';

		$fecha = date("Y-m-d");
		header('Content-disposition: attachment; filename=Reporte_InquiroVitae_' . $fecha . '.xls');
		header('Content-type: application/vnd.ms-excel; charset=utf-8');

		$file = utf8_decode($file); 
		$response =  array(
			'op' => 'ok',
			'archivo' => 'Reporte_InquiroVitae_' . $fecha . '.xls', 
			'file' => "data:application/vnd.ms-excel;base64,".base64_encode($file)
		);
		die(json_encode($response));

	}



	public static function ivNuevaBusqueda() {
		$cliente = Session::get('usuario')->cliente['client_id'];
		//$prod = SQLConnection::backendStoreProcedure('IV_panel_control', array('productos', $cliente), 'select');

		$id_tipo_informe = !empty(Request::input('id_tipo_informe')) ? Request::input('id_tipo_informe') : NULL;
		$id_padron = !empty(Request::input('id_padron')) ? Request::input('id_padron') : NULL;

		$familia = !empty(Request::input('familia')) ? Request::input('familia') : NULL;
		$referencia = !empty(Request::input('referencia')) ? Request::input('referencia') : NULL;
		$ref = !empty(Request::input('ref')) ? Request::input('ref') : NULL;
		$ref_nombre = !empty(Request::input('ref_nombre')) ? Request::input('ref_nombre') : NULL;
		$ref_seccion = !empty(Request::input('ref_seccion')) ? Request::input('ref_seccion') : NULL;
		$ref_cargo = !empty(Request::input('ref_cargo')) ? Request::input('ref_cargo') : NULL;
		$email_candidato  = !empty(Request::input('email_candidato')) ? Request::input('email_candidato') : NULL;
		$telefono_candidato  = !empty(Request::input('telefono_candidato')) ? Request::input('telefono_candidato') : NULL;
		$notas_candidato  = !empty(Request::input('notas_candidato')) ? Request::input('notas_candidato') : NULL;


		$familias = SQLConnection::backendStoreProcedure('LN_familias_', array('inquirovitae', null, null, $cliente, null, 1, null), 'select');
		$prod = SQLConnection::backendStoreProcedure('IV_panel_control', array('productos_backend', NULL, Session::get('usuario')->user_id, env('IV_PRODUCTO')), 'select');

		return view('/iv/iv_nueva_busqueda')->with(compact(['prod', 'familias', 'id_tipo_informe', 'id_padron', 'familia', 'referencia', 'ref', 'ref_nombre', 'ref_seccion', 'ref_cargo', 'email_candidato', 'telefono_candidato', 'notas_candidato']));
	}

	public static function ivBusquedaCandidato() { 
		$id_tipo_informe = !empty(Request::input('id_tipo_informe')) ? Request::input('id_tipo_informe') : NULL;
		$id_padron = !empty(Request::input('id_padron')) ? Request::input('id_padron') : NULL;

		$familia = !empty(Request::input('familia')) ? Request::input('familia') : NULL;
		$referencia = !empty(Request::input('referencia')) ? Request::input('referencia') : NULL;
		$ref = !empty(Request::input('ref')) ? Request::input('ref') : NULL;
		$ref_nombre = !empty(Request::input('ref_nombre')) ? Request::input('ref_nombre') : NULL;
		$ref_seccion = !empty(Request::input('ref_seccion')) ? Request::input('ref_seccion') : NULL;
		$ref_cargo = !empty(Request::input('ref_cargo')) ? Request::input('ref_cargo') : NULL;
		$email_candidato  = !empty(Request::input('email_candidato')) ? Request::input('email_candidato') : NULL;
		$telefono_candidato  = !empty(Request::input('telefono_candidato')) ? Request::input('telefono_candidato') : NULL;
		$notas_candidato  = !empty(Request::input('notas_candidato')) ? Request::input('notas_candidato') : NULL;


		$persona = null;
		if ($id_padron != null) {
			$persona = SQLConnection::backendStoreProcedure('backend_obtener_id_padron', array($id_padron), 'selectOne');
		}

		return view('/iv/iv_busqueda_candidato')->with(compact(['id_tipo_informe', 'id_padron', 'persona', 'familia', 'referencia', 'ref', 'ref_nombre', 'ref_seccion', 'ref_cargo', 'email_candidato', 'telefono_candidato', 'notas_candidato']));;	
	}

	public static function ivBusquedaPadron() {
		$data = [];
		$search = !empty(Request::input('input_search')) ? Request::input('input_search') : NULL;
		if (null != $search) {
			$data = SQLConnection::busquedaPadronAutocomplete($search, true);
		}
		return view('/iv/iv_tabla_busqueda_padron')->with(compact(['data']));
	}

	public static function ivDatosBusqueda() {
		$familia = !empty(Request::input('familia')) ? Request::input('familia') : NULL;
		$id_tipo_informe = !empty(Request::input('id_tipo_informe')) ? Request::input('id_tipo_informe') : NULL;
		$id_padron = !empty(Request::input('id_padron')) ? Request::input('id_padron') : NULL;

		$cliente = Session::get('usuario')->cliente['client_id'];
		$familias = SQLConnection::backendStoreProcedure('LN_familias_', array('inquirovitae', null, null, $cliente, null, 1, null), 'select');

		$referencia = !empty(Request::input('referencia')) ? Request::input('referencia') : NULL;
		$ref = !empty(Request::input('ref')) ? Request::input('ref') : NULL;
		$ref_nombre = !empty(Request::input('ref_nombre')) ? Request::input('ref_nombre') : NULL;
		$ref_seccion = !empty(Request::input('ref_seccion')) ? Request::input('ref_seccion') : NULL;
		$ref_cargo = !empty(Request::input('ref_cargo')) ? Request::input('ref_cargo') : NULL;
		$email_candidato  = !empty(Request::input('email_candidato')) ? Request::input('email_candidato') : NULL;
		$telefono_candidato  = !empty(Request::input('telefono_candidato')) ? Request::input('telefono_candidato') : NULL;
		$notas_candidato  = !empty(Request::input('notas_candidato')) ? Request::input('notas_candidato') : NULL;


		if ($id_tipo_informe != null) {
			$tipoinforme = SQLConnection::backendStoreProcedure('LN_informes', array('tipo_informe', NULL, NULL, NULL, NULL, NULL, $id_tipo_informe), 'selectOne');
		}
		if ($id_padron != null) {
			$persona = SQLConnection::backendStoreProcedure('backend_obtener_id_padron', array($id_padron), 'selectOne');
		}

		$referencias = SQLConnection::backendStoreProcedure('IV_panel_control', array('referencias', Session::get('usuario')->cliente['client_id']), 'select');
		$file_name = null;
		$file_url = null;
		$dircliente = env('PATH_DOCUMENTOS_IV_TEMP') . '/' . $cliente . '/' . Session::get('usuario')->user_id;
		if (is_dir($dircliente)) {
			$dirhandle = opendir($dircliente);
			if ($dirhandle) {
				while (($archivo = readdir($dirhandle)) !== false) {
					if (is_file( env('PATH_DOCUMENTOS_IV_TEMP') . '/' . $cliente . '/' . Session::get('usuario')->user_id. '/' . $archivo )) {
						$file_name = $archivo;
						$file_url = env('RUTA_DOCUMENTOS_IV_TEMP') . '/' . $cliente . '/' . Session::get('usuario')->user_id. '/' . $archivo;
						break;
					}
				}
			}
		}
		$n = SQLConnection::backendStoreProcedure('LN_informes', array('tipos_informe_cliente', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, Session::get('usuario')->cliente['client_id']));
		$resultado = SQLConnection::backendStoreProcedure('backend_contratos_consumos', array(Session::get('usuario')->cliente['client_id'], self::depurador_contador_consumo($n, $id_tipo_informe)));
		
		foreach ($resultado as $key) {
			$consumido = ($key->consumido != null) ? $key->consumido : '0';
			$disponible = ($key->disponible != null) ? $key->disponible : '0';
		}
		
		return view('/iv/iv_datos_busqueda')->with(compact(['familia', 'tipoinforme', 'persona', 'familias', 'familia', 'referencias', 'referencia', 'ref', 'ref_nombre', 'ref_seccion', 'ref_cargo', 'email_candidato', 'telefono_candidato', 'notas_candidato','file_name', 'file_url', 'consumido', 'disponible']));
	}

	//--  METODO DEPURADOR PARA OBTENER CONSUMOS, USADO POR EL METODO 'ivDatosBusqueda'  --//
	static function depurador_contador_consumo($resuktado_store, $id_tipo_informe) {
		$nuevo = array();

		foreach($resuktado_store as $key) {
			$nuevo[$key->id_tipo_informe] = $key->item_contrato;
		}

		foreach($nuevo as $key => $value) {
			if($key == $id_tipo_informe) {
				return $value;
			}
		}
		return 0;
	}


	public static function ivSubirCv() {
		$cliente = Session::get('usuario')->cliente['client_id'];

		$id_tipo_informe = !empty(Request::input('id_tipo_informe')) ? Request::input('id_tipo_informe') : NULL;
		$id_padron = !empty(Request::input('id_padron')) ? Request::input('id_padron') : NULL;

		$familia = !empty(Request::input('familia')) ? Request::input('familia') : NULL;
		$referencia = !empty(Request::input('referencia')) ? Request::input('referencia') : NULL;
		$ref = !empty(Request::input('ref')) ? Request::input('ref') : NULL;
		$ref_nombre = !empty(Request::input('ref_nombre')) ? Request::input('ref_nombre') : NULL;
		$ref_seccion = !empty(Request::input('ref_seccion')) ? Request::input('ref_seccion') : NULL;
		$ref_cargo = !empty(Request::input('ref_cargo')) ? Request::input('ref_cargo') : NULL;
		$email_candidato  = !empty(Request::input('email_candidato')) ? Request::input('email_candidato') : NULL;
		$telefono_candidato  = !empty(Request::input('telefono_candidato')) ? Request::input('telefono_candidato') : NULL;
		$notas_candidato  = !empty(Request::input('notas_candidato')) ? Request::input('notas_candidato') : NULL;


		if ($id_tipo_informe != null) {
			$tipoinforme = SQLConnection::backendStoreProcedure('LN_informes', array('tipo_informe', NULL, NULL, NULL, NULL, NULL, $id_tipo_informe), 'selectOne');
		}
		if ($id_padron != null) {
			$persona = SQLConnection::backendStoreProcedure('backend_obtener_id_padron', array($id_padron), 'selectOne');
		}

		$file_name = null;
		$file_url = null;
		$dircliente = env('PATH_DOCUMENTOS_IV_TEMP') . '/' . $cliente . '/' . Session::get('usuario')->user_id;
		if (is_dir($dircliente)) {
			$dirhandle = opendir($dircliente);
			if ($dirhandle) {
				while (($archivo = readdir($dirhandle)) !== false) {
					if (is_file( env('PATH_DOCUMENTOS_IV_TEMP') . '/' . $cliente . '/' . Session::get('usuario')->user_id. '/' . $archivo )) {
						$file_name = $archivo;
						$file_url = env('RUTA_DOCUMENTOS_IV_TEMP') . '/' . $cliente . '/' . Session::get('usuario')->user_id. '/' . $archivo;
						break;
					}
				}
			}
		}
		return view('/iv/iv_subir_cv')->with(compact(['tipoinforme', 'persona', 'familia', 'referencia', 'ref', 'ref_nombre', 'ref_seccion', 'ref_cargo', 'email_candidato', 'telefono_candidato', 'notas_candidato', 'file_name', 'file_url']));
	}


	public static function ivUploadFile() {

		$cliente = Session::get('usuario')->cliente['client_id'];

		if(!empty($_FILES['archivo']) && $_FILES['archivo']['name'] !== '') {

			$userfile_name = $_FILES['archivo']['name'];
			$userfile_extn = substr($userfile_name, strrpos($userfile_name, '.')+1);
			$file_url = env('RUTA_DOCUMENTOS_IV_TEMP') . '/' . $cliente . '/' . Session::get('usuario')->user_id. '/' . $userfile_name;

			$ftype = strtolower($userfile_extn); 

			if($ftype !== 'pdf' and $ftype !== 'doc' and $ftype !== 'docx') {
				$rslt = 5;
				$msg = 'El tipo de archivo especificado no está permitido. - Por favor ingrese un archivo del tipo PDF o Word.';
				return json_encode(array( 'error' => $rslt , 'mensaje' => $msg , 'archivo' => $file_url, 'nombre' => $userfile_name));
			}

			if( basename($userfile_name) != '' ) {

				/* Creacion de la carpeta del cliente para el storage de IV */
				$path_cli = env('PATH_DOCUMENTOS_IV') . '/' . $cliente;
				if (!is_dir( $path_cli )) {
			    	$carpeta_cliente = mkdir( $path_cli );
				}
				else {
					$carpeta_cliente = true;	
				}

				/* Creacion de la carpeta temporaria del cliente / usuario para el storage de IV */
				$path_temp = env('PATH_DOCUMENTOS_IV_TEMP') . '/' . $cliente . '/' . Session::get('usuario')->user_id;
				if (!is_dir( $path_temp )) {
			    	$carpeta_cliente_temp = mkdir( $path_temp , 0777, true );
				}
				else {
					$carpeta_cliente_temp = true;	
				}


				if($carpeta_cliente AND $carpeta_cliente_temp) {

					// Como todavía no creé la carpeta de la contraparte, va a la carpeta temporal 

					// Vacío la carpeta temporal del cliente
					$dirhandle = opendir($path_temp);
					if ($dirhandle) {
						while (($archivo_preexistente = readdir($dirhandle)) !== false) {
							if (is_file( $path_temp . '/' . $archivo_preexistente )) {
								unlink( $path_temp . '/' . $archivo_preexistente );
							}
						}
					}

					$path = env('PATH_DOCUMENTOS_IV_TEMP') . '/' . $cliente . '/' . Session::get('usuario')->user_id. '/' . $userfile_name;


					if(move_uploaded_file($_FILES['archivo']['tmp_name'], $path)) {
						$rslt = 0;
						$msg = 'Archivo subido exitosamente';

						$file_name = $userfile_name;
						$form = \View::make('/iv/iv_buscar_cv_temp')->with(compact(['file_name', 'file_url']))->render();

						return \Response::json(array( 'error' => $rslt ,
																	'mensaje' => $msg , 
																	'archivo' => $file_url, 
																	'nombre' => $userfile_name, 
																	'formulario' => $form),
															200,
															[],
															JSON_NUMERIC_CHECK);
					}
					else {
						$rslt = 4;
						$msg = 'No se pudo guardar el archivo seleccionado.';
						return json_encode(array( 'error' => $rslt , 'mensaje' => $msg , 'archivo' => $file_url, 'nombre' => $userfile_name));										
					}

				}
				else {
					$rslt = 3;
					$msg = 'No se pudo crear la carpeta correspondiente para almacenar el archivo.';
					return json_encode(array( 'error' => $rslt , 'mensaje' => $msg , 'archivo' => $file_url, 'nombre' => $userfile_name));
				}
			}
			else {
				$rslt = 2;
				$msg = 'El nombre del archivo especificado es inválido.';
				return json_encode(array( 'error' => $rslt , 'mensaje' => $msg , 'archivo' => $file_url, 'nombre' => $userfile_name));
			}
		}
		else {
			$rslt = 1;
			$msg = 'No se ha especificado el archivo a subir.';
			return json_encode(array( 'error' => $rslt , 'mensaje' => $msg , 'archivo' => NULL, 'nombre' => NULL));
		}

	}


	public static function ivBuscarCvTemp() {
		$cliente = Session::get('usuario')->cliente['client_id'];
		$dircliente = env('PATH_DOCUMENTOS_IV_TEMP') . '/' . $cliente . '/' . Session::get('usuario')->user_id;

		$file_name = null;
		$file_url = null;
		if (is_dir($dircliente)) {
			$dirhandle = opendir($dircliente);
			if ($dirhandle) {
				while (($archivo = readdir($dirhandle)) !== false) {
					if (is_file( $dircliente . '/' . $archivo )) {
						$file_name = $archivo;
						$file_url = env('RUTA_DOCUMENTOS_IV_TEMP') . '/' . $cliente . '/' . Session::get('usuario')->user_id. '/' . $archivo;
						break;
					}
				}
			}
		}

		return view('/iv/iv_buscar_cv_temp')->with(compact(['file_name', 'file_url']));
	}


	public static function ivDeleteFile() {
		$cliente = Session::get('usuario')->cliente['client_id'];
		$dircliente = env('PATH_DOCUMENTOS_IV_TEMP') . '/' . $cliente . '/' . Session::get('usuario')->user_id;

		$rslt = 0;
		$msg = '';

		if (is_dir($dircliente)) {

			$dirhandle = opendir($dircliente);

			if ($dirhandle) {
				while (($archivo = readdir($dirhandle)) !== false) {
					if (is_file( $dircliente . '/' . $archivo )) {
						unlink( $dircliente . '/' . $archivo );
						$rslt = 0;
						$msg = "Archivo eliminado.";
						break;
					}
				}
			}
		}

		return \Response::json(array( 'error' => $rslt ,
													'mensaje' => $msg , 
													'formulario' => NULL),
											200,
											[],
											JSON_NUMERIC_CHECK);

	}


	public static function ivIngresarBusqueda() {
		$cliente = Session::get('usuario')->cliente['client_id'];

		$id_tipo_informe = !empty(Request::input('id_tipo_informe')) ? Request::input('id_tipo_informe') : NULL;
		$id_padron = !empty(Request::input('id_padron')) ? Request::input('id_padron') : NULL;

		$familia = !empty(Request::input('familia')) ? Request::input('familia') : NULL;
		$referencia = !empty(Request::input('referencia')) ? Request::input('referencia') : NULL;
		$ref = !empty(Request::input('ref')) ? Request::input('ref') : NULL;
		$ref_nombre = !empty(Request::input('ref_nombre')) ? Request::input('ref_nombre') : NULL;
		$ref_seccion = !empty(Request::input('ref_seccion')) ? Request::input('ref_seccion') : NULL;
		$ref_cargo = !empty(Request::input('ref_cargo')) ? Request::input('ref_cargo') : NULL;
		$email_candidato  = !empty(Request::input('email_candidato')) ? Request::input('email_candidato') : NULL;
		$telefono_candidato  = !empty(Request::input('telefono_candidato')) ? Request::input('telefono_candidato') : NULL;
		$notas_candidato  = !empty(Request::input('notas_candidato')) ? Request::input('notas_candidato') : NULL;


		if ($cliente != null AND $id_tipo_informe != null AND $id_padron != null AND $familia != null) {

			$params = array('ingresar_busqueda', 
										$cliente,
										Session::get('usuario')->user_id,
										env('IV_PRODUCTO'),
										$id_tipo_informe,
										$id_padron,
										$familia,
										$referencia,
										$ref,
										$ref_nombre,
										$ref_seccion,
										$ref_cargo,
										$email_candidato,
										$telefono_candidato,
										$notas_candidato,
										env('FILIAL_DEFAULT'),
										env('IDIOMA_DEFAULT'),
										env('DATAMANAGER_DEFAULT'),
										env('ASIGNADO_DEFAULT'),
										env('ESTADO_INFORME_INICIAL'));

			$nueva_busqueda = SQLConnection::backendStoreProcedure('IV_panel_control', $params, 'selectOne');
			/* Ese SP lo manda al queue */

			if (!empty($nueva_busqueda)) {

				$rootcliente = env('PATH_DOCUMENTOS_IV') . '/' . $cliente;
				$dir_temp = env('PATH_DOCUMENTOS_IV_TEMP') . '/' . $cliente . '/' . Session::get('usuario')->user_id;

				$path_legajo = $rootcliente . '/' . $nueva_busqueda->contraparte . '/' . $nueva_busqueda->gestion;
		    	$legajo = mkdir( $path_legajo , 0777, true );

		    	if ($legajo) {

		    		/* Copiar el CV en la carpeta temporal al legajo del candidato */
					if (is_dir($dir_temp)) {
						$dirhandle = opendir($dir_temp);
						if ($dirhandle) {
							while (($archivo = readdir($dirhandle)) !== false) {
								if (is_file( $dir_temp . '/' . $archivo )) {

									$target_name = str_pad($nueva_busqueda->iv_busqueda, 8, '0', STR_PAD_LEFT) . '_' . str_replace(' ', '_', $archivo);
									if (copy( $dir_temp . '/' . $archivo , $path_legajo . '/' . $target_name )) {

										unlink( $dir_temp . '/' . $archivo );

										$temp = SQLConnection::backendStoreProcedure('IV_busquedas_', array('subir_cv', $nueva_busqueda->iv_busqueda), 'selectOne');
									}

								}
							}
						}
					}

					$err = 0;
					$msg = "La búsqueda se ingresó correctamente.";
		    	}
		    	else {
					$err = 3;
					$msg = "No se ha podido generar la carpeta de documentos para el candidato.";
		    	}
			}
			else {
				$err = 2;
				$msg = "No se ha podido generar la búsqueda. Por favor reintente.";
			}
		}
		else {
			$err = 1;
			$msg = "Parámetros incorrectos.";
		}
		return \Response::json(array('error'=>$err, 'mensaje'=>$msg));

	}


	public static function ivDatosCandidato() {
		$iv_busqueda = Request::input('iv_busqueda');
		$contraparte = Request::input('contraparte');
		// este es el nombre del index (valor texto) de la columna clickeada en la fancy.
		$column = Request::input('column');
		$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');

		$files = self::getIVFiles($iv_busqueda);
		$cv_exists = $files['cv_exists'];
		$cv_full_url = $files['cv_full_url'];
		$foto_exists = $files['foto_exists'];
		$foto_full_url = $files['foto_full_url'];

		$iv_exists = FALSE;
		$iv_full_url = NULL;
		if (file_exists( env('PATH_DOSSIER_IV') . '/' . $busqueda->cliente . '/' . $busqueda->contraparte . '/' . $busqueda->contraparte . '_' . $busqueda->gestion . '.pdf' )) {
			$iv_exists = TRUE;
			$iv_full_url = env('RUTA_DOSSIER_IV') . '/' . $busqueda->cliente . '/' . $busqueda->contraparte . '/' . $busqueda->contraparte . '_' . $busqueda->gestion . '.pdf?rnd=' . time();
		}

		$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');

		/*---------------------------------------------------------------*/
		// 25/09/2020
		// sacamos los indicadores que el usuario tiene restringidos para que no se vean 
	
		$usuarios_restricciones = Session::get('usuarios_restricciones');
		$servicio_actual = Session::get('servicio_actual');
		if(!empty($usuarios_restricciones)){
			foreach ($usuarios_restricciones as $key_ur => $value_ur) {
				if($servicio_actual == $key_ur){
					foreach ($value_ur as $key_n2 => $value_n2) {
						foreach ($indicadores as $key => $value) {
							if ($value->indicador == $value_n2->indicador)
								{
									unset ($indicadores[$key]);
								}
						}
					}
				}
			}
		}
//var_dump($indicadores); die(); 

		$vista = \View::make('/iv/iv_datos_candidato')->with(compact(['contrap', 'familia', 'busqueda', 'column', 'cv_exists', 'cv_full_url', 'foto_exists', 'foto_full_url', 'iv_exists', 'iv_full_url', 'indicadores']))->render();

		return json_encode(array('nombre_persona' => $contrap->nombre_persona,
												'abreviatura' => $contrap->abreviatura,
												'identificacion' => $contrap->identificacion,
												'country' =>  '<span class="flag-icon flag-icon-background flag-icon-' . strtolower($contrap->country_code) . '"></span>',
												'vista' => $vista));

	}


	public static function getIVFiles($iv_busqueda = null) {

		$cv_exists = FALSE;
		$cv_full_url = NULL;
		$foto_exists = FALSE;
		$foto_full_url = NULL;
		
		if (!empty($iv_busqueda)) {
			$pattern = str_pad($iv_busqueda, 8, '0', STR_PAD_LEFT) . '_*.*';
			
			$busqueda = SQLConnection::backendStoreProcedure('IV_busquedas_', array('search', $iv_busqueda), 'selectOne');
			
			// Buscar el archivo de CV -- puede ser PDF o Word  y la foto de perfil
			$rootpath = env('PATH_DOCUMENTOS_IV') . '/' . $busqueda->cliente . '/' . $busqueda->contraparte . '/' . $busqueda->gestion;
			
			$foto_file = str_pad($iv_busqueda, 8, '0', STR_PAD_LEFT) . '_foto_120.jpg';
			$foto_full_url = env('RUTA_DOCUMENTOS_IV') . '/' . $busqueda->cliente . '/' . $busqueda->contraparte . '/' . $busqueda->gestion . '/' . $foto_file . '?r=' . time();
			
			if (is_dir($rootpath)) {
				
				$files = glob( $rootpath . '/' . $pattern );
				foreach ($files as $f => $file) {
					$extn = strtolower(substr($file, strrpos($file, '.') + 1));
					
					if ($cv_full_url == NULL) {
						if ($extn == 'pdf' /*OR $extn == 'doc' OR $extn == 'docx'*/) {
							$cv_file = basename($file);
							
							$cv_full_url = env('RUTA_DOCUMENTOS_IV') . '/' . $busqueda->cliente . '/' . $busqueda->contraparte . '/' . $busqueda->gestion . '/' . $cv_file . '?r=' . time();
							$cv_exists = TRUE;
						}
					}
					
				}
			}
		
		}

		return array('cv_exists' => $cv_exists, 'cv_full_url' => $cv_full_url, 'foto_exists' => $foto_exists, 'foto_full_url' => $foto_full_url);
	}


	public static function ivDatosCV() {
		$iv_busqueda = Request::input('iv_busqueda');

		$files = self::getIVFiles($iv_busqueda);
		$cv_exists = $files['cv_exists'];
		$cv_full_url = $files['cv_full_url'];
		$foto_exists = $files['foto_exists'];
		$foto_full_url = $files['foto_full_url'];

		return view('/iv/iv_datos_cv')->with(compact(['files']));
	}

	public static function ivDatosAnexos() {
		$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 = [];
		$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($files);

		/* Traducciones de los nombres de documento */
		Traducciones::$blade = 'iv_datos_anexos';
		SQLConnection::obtenerTraducciones(Traducciones::$blade); 

		return view('/iv/iv_datos_anexos')->with(compact(['busqueda', 'docs', 'files', 'cumpldoc']));
	}


	public static function ivDatosInforme() {
		$iv_busqueda = Request::input('iv_busqueda');
		$contraparte = Request::input('contraparte');
		$busqueda = SQLConnection::backendStoreProcedure('IV_busquedas_', array('search', $iv_busqueda), 'selectOne');
		$informe = SQLConnection::backendStoreProcedure('IV_busquedas_', array('informe', $iv_busqueda), 'selectOne');

		$iv_exists = FALSE;
		$iv_full_url = NULL;

		if (file_exists( env('PATH_DOSSIER_IV') . '/' . $busqueda->cliente . '/' . $busqueda->contraparte . '/' . $busqueda->contraparte . '_' . $busqueda->gestion . '.pdf' )) {
			$iv_exists = TRUE;
			$iv_full_url = env('RUTA_DOSSIER_IV') . '/' . $busqueda->cliente . '/' . $busqueda->contraparte . '/' . $busqueda->contraparte . '_' . $busqueda->gestion . '.pdf' . '?rnd=' . time();
		}

		$valoracion = SQLConnection::backendStoreProcedure('LN_dashboard_cliente', array('indicadores_contraparte', $busqueda->cliente, null, null, $contraparte, 'VALORACION_IV'), 'selectOne'); 

		return view('/iv/iv_datos_informe')->with(compact(['busqueda', 'informe', 'valoracion', 'iv_exists', 'iv_full_url']));
	}

	public static function ivInformeComercial() {

		$id = Request::input('contraparte');
		$qcontrap = DB::selectOne('EXEC dbo.LN_contrapartes_ ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array('select', $id, null, null, null, null, null, null, null, null, null, null, null, null, null));
		//$prod = Request::input('producto');
		//$qproducto = SQLConnection::backendStoreProcedure('LN_productos_', array('select', $prod, null, null, null, null, null, null, null, null, null, null, null, null, null), 'selectOne');
		
		$apikey = env('API_KEY');

		return view('/iv/iv_informe_comercial')->with(compact('qcontrap', 'apikey'));
	}

}
