<?php namespace App\Http\Controllers; 

use App\Custom\SQLConnection;
use App\Custom\Misc;
use App\Custom\DashboardJSON;
use Request;
use Session;
use DateTime;
use DB;
use Response;


class DashboardController extends Controller {

    public static function mostrarDashboard(){
		return view('/led/led-nuevo-dashboard');
	}

    public static function dataContingenciaDeuda(){
        $cliente = Session::get('usuario')->cliente['client_id'];
        $servicio_actual = Session::get('servicio_actual'); 
        $valorDeuda = SQLConnection::backendStoreProcedure('LN_dashboard_cliente', array('DSH22_CONTADOR_monto_deuda_previsional', $cliente, null,null, null,null,null,null,null,null,null,null,null,null,null,$servicio_actual,null), 'select');
        $valorContingencia = SQLConnection::backendStoreProcedure('LN_dashboard_cliente', array('DSH22_CONTADOR_contingencia_laboral', $cliente, null,null, null,null,null,null,null,null,null,null,null,null,null,$servicio_actual,null), 'select');
        $valores = [];

        $valores[0] = $valorDeuda[0]->valor_deuda;
        $valores[1] = $valorContingencia[0]->valor_contingencia;    

        return $valores; 
    }

	public static function dataCards(){
        $servicio_actual = Session::get('servicio_actual'); 
		$cliente = Session::get('usuario')->cliente['client_id'];
        $productos = SQLConnection::backendStoreProcedure('LN_dashboard_graficos_segun_servicio', array('GRAFICOS_INDICADORES',$cliente,$servicio_actual), 'select');
        $graficos_todos = [];
        
        foreach ($productos as $i => $prod) {
            if($prod->clave_indicador == 'COUNT_CONTRATISTAS' || $prod->clave_indicador == 'COUNT_SUBCONTRATISTAS' || $prod->clave_indicador == 'COUNT_EMPLEADOS'){
                $graficos_todos[$prod->clave_indicador] = SQLConnection::backendStoreProcedure('LN_dashboard_graficos_segun_servicio', array($prod->clave_indicador, $cliente,$servicio_actual), 'select');
                $graficos_todos[$prod->clave_indicador] = $graficos_todos[$prod->clave_indicador][0]->Total; 
            }
        }
        return $graficos_todos;
	}

    public static function dataset(){
        $cliente = Session::get('usuario')->cliente['client_id'];
        $servicio_actual = Session::get('servicio_actual');
        $user_id = Session::get('usuario')->user_id;
        if(isset($_POST['variable'])){
            $variable = $_POST['variable'];
        
            switch ($variable) {
                case 'grafico1':
                    $store_deuda_prev = SQLConnection::backendStoreProcedure('LN_graficos_imperium', array('DEUDA_PREVISIONAL', $cliente, $servicio_actual, $user_id), 'select');
                    // -----
                    $nuevo = [];
                    //
                    $nombre_familias = [];
                    $orden = [];
                    $orden_list = [];
                    //
                    foreach($store_deuda_prev as $i => $info){
                        $etiqueta = $info->orden.'-'.$info->titulo;
                        // $info->nombre_familia = substr($info->nombre_familia,0,4);
                        if ( !in_array($etiqueta,$orden_list) ){
                            array_push($orden,(object) array('orden' => $info->orden,'color' => '#'.$info->color_default, 'valor' => $info->detalle, 'titulo' => $info->titulo));
                            array_push($orden_list,$etiqueta);
                        }
                        if ( !in_array($info->nombre_familia,$nombre_familias) ){
                            
                            array_push($nombre_familias,$info->nombre_familia);
                        }
                        continue;
                    }
                    //
                    $valores = [];
                    $lista_nueva = [];
                    //
                    foreach( $orden as $ord ){
                        //
                        $data = new \stdClass;
                        if (!in_array($ord->orden,$lista_nueva)){
                            $data->label = $ord->valor;
                            array_push($lista_nueva,$ord->orden);
                        }
                        $data->data = [];
                        $data->backgroundColor = $ord->color;
                        $data->stack = $ord->titulo;
                        $data->order = $ord->orden;
                        $data->orden = $ord->orden;
                        //
                        foreach($store_deuda_prev as $i => $info){
                            if ( $info->orden == $ord->orden && $info->titulo == $ord->titulo ){
                                array_push($data->data,$info->cantidad);
                            }
                        }
                        //
                        array_push($valores,$data);
                    }
                    return json_encode(array('values' => $valores , 'families' => $nombre_familias));    
                case 'grafico2':
                    $store_resp_civil = SQLConnection::backendStoreProcedure('LN_graficos_imperium', array('RESP_CIVIL', $cliente, $servicio_actual, $user_id), 'select');
                    
                    $nuevo = [];
                    //
                    $nombre_familias = [];
                    $orden = [];
                    $orden_list = [];
                    //
                    foreach($store_resp_civil as $i => $info){
                        // $info->nombre_familia = substr($info->nombre_familia,0,4);
                        if ( !in_array($info->orden,$orden_list) ){
                            array_push($orden,(object) array('orden' => $info->orden,'color' => '#'.$info->color_default, 'valor' => $info->detalle));
                            array_push($orden_list,$info->orden);
                        }
                        if ( !in_array($info->nombre_familia,$nombre_familias) ){
                            
                            array_push($nombre_familias,$info->nombre_familia);
                        }
                        continue;
                    }
                    //
                    $valores = [];
                    //
                    foreach( $orden as $ord ){
                        //
                        $data = new \stdClass;
                        $data->label = $ord->valor;
                        $data->data = [];
                        $data->backgroundColor = $ord->color;
                        //
                        foreach($store_resp_civil as $i => $info){
                            if ( $info->orden == $ord->orden ){
                                array_push($data->data,$info->cantidad);
                            }
                        }
                        //
                        array_push($valores,$data);
                    }
                    return json_encode(array('values' => $valores , 'families' => $nombre_familias));               
                case 'grafico3':   
                    $store_planes_pago = SQLConnection::backendStoreProcedure('LN_graficos_imperium', array('PLANES_PAGO', $cliente, $servicio_actual, $user_id), 'select');
                    $meses = [];
                    $monto_adeudado_en_millones = [];
                    $empresas_con_plan = [];
                    $titulo_1 = '';
                    $titulo_2 = '';
                    $color = '';

                    foreach($store_planes_pago as $i => $info){
                        array_push($monto_adeudado_en_millones,$info->monto_total_planes_en_millones);
                        array_push($empresas_con_plan,$info->empresas_con_plan);
                        array_push($meses,$info->periodo_mes_anio);
                        $titulo_1 = $info->titulo_1;
                        $titulo_2 = $info->titulo_2;
                        $color = $info->color;
                    }

                    $data = new \stdClass;
                    $data->set1 = $monto_adeudado_en_millones;
                    $data->set2 = $empresas_con_plan;
                    $data->labels = $meses;
                    $data->label_monto_total = $titulo_1;
                    $data->label_empresas_PP = $titulo_2;
                    $data->fillColor_mon_total = "blue";
                    $data->fillColor_emp_pp = "black";
                    $data->backgroundColor_mon_total = '#'.$color;
                    $data->backgroundColor_emp_pp = 'rgba(0, 0, 0, 0.1)';
                    $data->border_color_mon_total = "#5e8ab4";
                    $data->border_color_mon_emp_pp = "#808080";
                    return json_encode($data);   
                case 'grafico4':
                    $store_cump_ult_mes = SQLConnection::backendStoreProcedure('LN_graficos_imperium', array('CUMPLIMIENTO_ULTIMO_MES', $cliente, $servicio_actual, $user_id), 'select');            
                    $nuevo = [];
                    //
                    $nombre_familias = [];
                    $orden = [];
                    $orden_list = [];
                    //
                    foreach($store_cump_ult_mes as $i => $info){
                        // $info->nombre_familia = substr($info->nombre_familia,0,4);
                        if ( !in_array($info->orden,$orden_list) ){
                            array_push($orden,(object) array('orden' => $info->orden,'color' => '#'.$info->color_default, 'valor' => $info->detalle));
                            array_push($orden_list,$info->orden);
                        }
                        if ( !in_array($info->nombre_familia,$nombre_familias) ){
                            
                            array_push($nombre_familias,$info->nombre_familia);
                        }
                        continue;
                    }
                    //
                    $valores = [];
                    //
                    foreach( $orden as $ord ){
                        $data = new \stdClass;
                        // convert string to lowercase
                        $res = strtolower($ord->valor);
                        // convert string to uppercase
                        $res = ucwords($res); 
                        $data->label = $res;
                        $data->data = [];
                        $data->backgroundColor = $ord->color;
                        //
                        foreach($store_cump_ult_mes as $i => $info){
                            if ( $info->orden == $ord->orden ){
                                array_push($data->data,$info->cantidad);
                            }
                        }
                        //
                        array_push($valores,$data);
                    }
                    return json_encode(array('values' => $valores , 'families' => $nombre_familias));                
                case 'grafico5':
                    $store_cump_anual = SQLConnection::backendStoreProcedure('LN_graficos_imperium', array('CUMPLIMIENTO_ANUAL', $cliente, $servicio_actual, $user_id), 'select');
                    $nuevo = [];
                    //
                    $nombre_familias = [];
                    $orden = [];
                    $orden_list = [];
                    //
                    foreach($store_cump_anual as $i => $info){
                        // $info->nombre_familia = substr($info->nombre_familia,0,4);
                        if ( !in_array($info->orden,$orden_list) ){
                            array_push($orden,(object) array('orden' => $info->orden,'color' => '#'.$info->color_default, 'valor' => $info->detalle));
                            array_push($orden_list,$info->orden);
                        }
                        if ( !in_array($info->nombre_familia,$nombre_familias) ){
                            
                            array_push($nombre_familias,$info->nombre_familia);
                        }
                        continue;
                    }
                    //
                    $valores = [];
                    //
                    foreach( $orden as $ord ){
                        //
                        $data = new \stdClass;
                        // convert string to lowercase
                        $res = strtolower($ord->valor);
                        // convert string to uppercase
                        $res = ucwords($res); 
                        $data->label = $res;
                        $data->data = [];
                        $data->backgroundColor = $ord->color;
                        //
                        foreach($store_cump_anual as $i => $info){
                            if ( $info->orden == $ord->orden ){
                                array_push($data->data,$info->cantidad);
                            }
                        }
                        //
                        array_push($valores,$data);
                    }
                    return json_encode(array('values' => $valores , 'families' => $nombre_familias));
                case 'grafico6':    
                    $cliente = Session::get('usuario')->cliente['client_id'];	
                    $mes['E'] = 0;
                    $mes['R'] = 0;
                    $mes['P'] = 0;
                    $mes['N'] = 0;
                    $mes['I'] = 0;
                    $mes['V'] = 0;

                    $hay = 'NO'; 
                    $compliance = [];
                    $compliance = SQLConnection::backendStoreProcedure('Imperium_vista_contratista_Cumplimiento_Mensual_Todos', array(null,$cliente), 'select');

                    $hoy = count($compliance) > 0 ? date_create_from_format('!Y-m-d',$compliance[0]->fecha_periodo_vencido) : date_create_from_format('!Y-m-d', date('Y-m-d'));
                    $hoy = date_add($hoy,date_interval_create_from_date_string('-12 month'));

                    for($x = 0; $x < 12; $x++) {
                        $hoy = date_add($hoy,date_interval_create_from_date_string('+1 month'));
                        $per = date_format( $hoy, 'Ym');
                        $lbl = date_format( $hoy , 'm/Y');
                        $data[] = array('periodo' => $per, 'docs' => $mes , 'label' => $lbl );
                    }

                    foreach ($compliance as $cump) {
                        $hay = 'SI'; 
                        $pp = $cump->periodo;
                        foreach ($data as $k => $gmo) {
                            if ($gmo['periodo'] == $pp) {
                                $data[$k]['docs'][$cump->estado_doc] = $cump->cantidad;
                                break;
                            }
                        }		
                    }
                    return json_encode( array('cumplimiento' => $data, 'hay' => $hay));
                    break;
                default:
                    return false;
                    break;
            }
        } else{
            return false;
        }
    }

    ///////////////////////////////
	/////// IV DASHBOARD //////////
	///////////////////////////////

    // FUNCION QUE DEVUELVE LA VISTA DEL DASHBOARD
    public static function ivDashboard(){
        $servicio_actual = Session::get('servicio_actual');
		$cliente = Session::get('usuario')->cliente['client_id'];
        $user_id = Session::get('usuario')->user_id;
	  	// $qcontrap = DB::select('EXEC dbo.LN_contrapartes_ ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array('search',null,null,$cliente,null,1,null,null,null,null,null,null,null,null,null));
		// SE BUSCAN LOS INDICADORES
        $productos	= SQLConnection::backendStoreProcedure('LN_dashboard_graficos_segun_servicio', array('GRAFICOS_INDICADORES',$cliente,$servicio_actual), 'select');
        //
        /*if ( Session::get('usuario')->led_dashboard ){
            return redirect('/iv/iv-panel-control');
        }*/
        $error = 0;
        //
        if ( !count($productos) ){
            $error = 1;
            return view('/iv/new/iv-dashboard')->with(compact('error'));
        }
        //
        $graficos_todos = [];
        $totales_datos_graficos = []; // ARRAY QUE VA A TENER LOS CALCULOS TOTALES DE CADA GRAFICO
        // SE GENERAN LOS DATOS DE LOS GRAFICOS DE LOS INDICADORES
        foreach( $productos as $i => $producto ){
            if ( isset($producto->clave_indicador) ){
                //
                if ( $producto->clave_indicador == 'GRAPH_CONTRAPARTES_CUMPLIMIENTO' || ( ($servicio_actual == env('LED_PRODUCTO') || $servicio_actual == env('IV_PRODUCTO') ) && $producto->clave_indicador !== 'ENRIESGO' && $producto->clave_indicador !== 'OPORTUNIDADES' )  ){
                    $graficos_todos[$producto->clave_indicador] = SQLConnection::backendStoreProcedure('LN_dashboard_graficos_filtrado', array($producto->clave_indicador, $cliente,null,$servicio_actual,$user_id), 'select');
                } else {
                    $graficos_todos[$producto->clave_indicador] = SQLConnection::backendStoreProcedure('LN_dashboard_graficos_segun_servicio', array($producto->clave_indicador, $cliente,$servicio_actual), 'select');
                }
                //
                if ( $producto->clave_indicador == 'GRAPH_CONTRATISTAS' || $producto->clave_indicador == 'GRAPH_SUBCONTRATISTAS'|| $producto->clave_indicador == 'GRAPH_EMPLEADOS'|| $producto->clave_indicador == 'GRAPH_VEHICULOS'|| $producto->clave_indicador == 'GRAPH_IMPE_STATUS'|| $producto->clave_indicador == 'GRAFICO_INFORME_COMERCIAL'|| $producto->clave_indicador == 'GRAFICO_SCORE_BALANCE'|| $producto->clave_indicador == 'GRAFICO_SCORE_FINAL'|| $producto->clave_indicador == 'GRAFICO_PAGO'|| $producto->clave_indicador == 'GRAFICO_PAGO_AR'|| $producto->clave_indicador == 'GRAFICO_PAGO_BR'|| $producto->clave_indicador == 'GRAFICO_PAGO_US' ){
                    $totales_datos_graficos[$producto->clave_indicador] = 0;
                    // SE RECORREN LOS DATOS DE LOS GRAFICOS DEL PRODUCTO
                    if ( count($graficos_todos[$producto->clave_indicador]) ){
                        foreach( $graficos_todos[$producto->clave_indicador] as $v => $value ){
                            $totales_datos_graficos[$producto->clave_indicador] += $value->total;
                        }
                    }
                }            
            }
        }
        // TRADUCCIONES
        Traducciones::$blade = 'iv_dashboard';
		$trad = SQLConnection::obtenerTraduccionesPHP(Traducciones::$blade);
		$grafico_trad   = []; 
        $grafico_etiquetas = []; // ARRAY DE LOS TITULOS DE LOS GRAFICOS
		if(isset($graficos_todos['GRAFICO_INFORME_COMERCIAL'])) 		{ $grafico_trad[] = 'GRAFICO_INFORME_COMERCIAL'; $grafico_etiquetas['GRAFICO_INFORME_COMERCIAL'] = 'Informe Comercial'; }
		if(isset($graficos_todos['GRAPH_CLI_PROV'])) 					{ $grafico_trad[] = 'GRAPH_CLI_PROV';  $grafico_etiquetas['GRAPH_CLI_PROV'] = 'Clientes Proveedores'; }
		if(isset($graficos_todos['GRAFICO_FIDECHECK'])) 				{ $grafico_trad[] = 'GRAFICO_FIDECHECK';  $grafico_etiquetas['GRAFICO_FIDECHECK'] = 'Fidecheck'; }
        if(isset($graficos_todos['GRAFICO_APOCRIFAS']))                 { $grafico_trad[] = 'GRAFICO_APOCRIFAS';  $grafico_etiquetas['GRAFICO_APOCRIFAS'] = 'Facturas Apócrifas'; }
		if(isset($graficos_todos['GRAFICO_SCORE_DOSSIER'])) 			{ $grafico_trad[] = 'GRAFICO_SCORE_DOSSIER';  $grafico_etiquetas['GRAFICO_SCORE_DOSSIER'] = 'Score Dossier'; }
		if(isset($graficos_todos['GRAFICO_SCORE_FINAL'])) 				{ $grafico_trad[] = 'GRAFICO_SCORE_FINAL';  $grafico_etiquetas['GRAFICO_SCORE_FINAL'] = 'Score Final'; }
		if(isset($graficos_todos['GRAFICO_SCORE_BALANCE'])) 			{ $grafico_trad[] = 'GRAFICO_SCORE_BALANCE';  $grafico_etiquetas['GRAFICO_SCORE_BALANCE'] = 'Score de Balance'; }
		if(isset($graficos_todos['GRAFICO_SCORE_DOCUMENTOS'])) 			{ $grafico_trad[] = 'GRAFICO_SCORE_DOCUMENTOS';  $grafico_etiquetas['GRAFICO_SCORE_DOCUMENTOS'] = 'Score de Documentos'; }
		if(isset($graficos_todos['GRAFICO_PAGO']))      				{ $grafico_trad[] = 'GRAFICO_PAGO';  $grafico_etiquetas['GRAFICO_PAGO'] = 'Estados de Pagos'; }
		if(isset($graficos_todos['GRAFICO_PAGO_AR']))   				{ $grafico_trad[] = 'GRAFICO_PAGO_AR'; $grafico_etiquetas['GRAFICO_PAGO_AR'] = 'Estados de Pagos AR'; }
		if(isset($graficos_todos['GRAFICO_PAGO_BR']))   				{ $grafico_trad[] = 'GRAFICO_PAGO_BR'; $grafico_etiquetas['GRAFICO_PAGO_BR'] = 'Estados de Pagos BR'; }
		if(isset($graficos_todos['GRAFICO_PAGO_US']))   				{ $grafico_trad[] = 'GRAFICO_PAGO_US'; $grafico_etiquetas['GRAFICO_PAGO_US'] = 'Estados de Pagos US'; }
		if(isset($graficos_todos['GRAFICO_DEPENDENCIA_ECONOMICA'])) 	{ $grafico_trad[] = 'GRAFICO_DEPENDENCIA_ECONOMICA'; $grafico_etiquetas['GRAFICO_DEPENDENCIA_ECONOMICA'] = 'Dependencia Económica'; }
		if(isset($graficos_todos['GRAFICO_CONTROL_INGRESO'])) 			{ $grafico_trad[] = 'GRAFICO_CONTROL_INGRESO'; $grafico_etiquetas['GRAFICO_CONTROL_INGRESO'] = 'Auditoria'; }
        //
        if(isset($graficos_todos['GRAPH_CONTRATISTAS'])) 			{ $grafico_trad[] = 'GRAPH_CONTRATISTAS'; $grafico_etiquetas['GRAPH_CONTRATISTAS'] = 'Contratistas'; }
        if(isset($graficos_todos['GRAPH_SUBCONTRATISTAS'])) 			{ $grafico_trad[] = 'GRAPH_SUBCONTRATISTAS'; $grafico_etiquetas['GRAPH_SUBCONTRATISTAS'] = 'Subcontratistas'; }
        if(isset($graficos_todos['GRAPH_EMPLEADOS'])) 			{ $grafico_trad[] = 'GRAPH_EMPLEADOS'; $grafico_etiquetas['GRAPH_EMPLEADOS'] = 'Empleados'; }
        if(isset($graficos_todos['GRAPH_VEHICULOS'])) 			{  $grafico_trad[] = 'GRAPH_VEHICULOS'; $grafico_etiquetas['GRAPH_VEHICULOS'] = 'Vehiculos'; }
        if(isset($graficos_todos['GRAPH_CONTRAPARTES_PAISES'])) 			{  $grafico_trad[] = 'GRAPH_CONTRAPARTES_PAISES'; $grafico_etiquetas['GRAPH_CONTRAPARTES_PAISES'] = 'Contrapartes por Pais'; }
        if(isset($graficos_todos['GRAPH_CONTRAPARTES_PAIS_SERVICIO'])) 			{  $grafico_trad[] = 'GRAPH_CONTRAPARTES_PAIS_SERVICIO'; $grafico_etiquetas['GRAPH_CONTRAPARTES_PAIS_SERVICIO'] = 'Contrapartes por Pais de servicio'; }
        if(isset($graficos_todos['GRAPH_IMPE_STATUS'])) 			{  $grafico_trad[] = 'GRAPH_IMPE_STATUS'; $grafico_etiquetas['GRAPH_IMPE_STATUS'] = 'Status'; }
        if(isset($graficos_todos['GRAPH_CONTRAPARTES_CUMPLIMIENTO'])) 			{  $grafico_trad[] = 'GRAPH_CONTRAPARTES_CUMPLIMIENTO'; $grafico_etiquetas['GRAPH_CONTRAPARTES_CUMPLIMIENTO'] = 'Documentos - Empresas en Cumplimiento'; }
        if(isset($graficos_todos['GRAPH_CONTRAPARTES_FAMILIAS'])) 			{  $grafico_trad[] = 'GRAPH_CONTRAPARTES_FAMILIAS'; $grafico_etiquetas['GRAPH_CONTRAPARTES_FAMILIAS'] = 'Contrapartes Familias'; }
        if(isset($graficos_todos['GRAPH_CUMPLIMIENTO_MENSUAL'])) 			{  $grafico_trad[] = 'GRAPH_CUMPLIMIENTO_MENSUAL'; $grafico_etiquetas['GRAPH_CUMPLIMIENTO_MENSUAL'] = 'Cumplimiento Mensual'; }
        if(isset($graficos_todos['GRAPH_VALORACION_IV'])) 			{  $grafico_trad[] = 'GRAPH_VALORACION_IV'; $grafico_etiquetas['GRAPH_VALORACION_IV'] = 'Score final'; }
        if(isset($graficos_todos['GRAPH_COMPLIANCE'])) 			{  $grafico_trad[] = 'GRAPH_COMPLIANCE'; $grafico_etiquetas['GRAPH_COMPLIANCE'] = 'Compliance'; }
		if(isset($graficos_todos['GRAPH_ACADEMICO'])) 			{  $grafico_trad[] = 'GRAPH_ACADEMICO'; $grafico_etiquetas['GRAPH_ACADEMICO'] = 'Académico'; }
		if(isset($graficos_todos['GRAPH_PROFESIONAL'])) 			{  $grafico_trad[] = 'GRAPH_PROFESIONAL'; $grafico_etiquetas['GRAPH_PROFESIONAL'] = 'Profesional'; }
		if(isset($graficos_todos['GRAPH_COMERCIAL_LEGAL'])) 			{  $grafico_trad[] = 'GRAPH_COMERCIAL_LEGAL'; $grafico_etiquetas['GRAPH_COMERCIAL_LEGAL'] = 'Comercial legal'; }
        if(isset($graficos_todos['GRAFICO_ARCOR_FINAL'])) 			{  $grafico_trad[] = 'GRAFICO_ARCOR_FINAL'; $grafico_etiquetas['GRAFICO_ARCOR_FINAL'] = 'Score Final'; }
        if(isset($graficos_todos['GRAFICO_ARCOR_BCRA'])) 			{  $grafico_trad[] = 'GRAFICO_ARCOR_BCRA'; $grafico_etiquetas['GRAFICO_ARCOR_BCRA'] = 'Score BCRA'; }
        if(isset($graficos_todos['GRAFICO_ARCOR_AYC']))            {  $grafico_trad[] = 'GRAFICO_ARCOR_AYC'; $grafico_etiquetas['GRAFICO_ARCOR_AYC'] = 'Aportes y Contribuciones'; }
        if(isset($graficos_todos['GRAFICO_SITUACION'])) 			{  $grafico_trad[] = 'GRAFICO_SITUACION'; $grafico_etiquetas['GRAFICO_SITUACION'] = 'Situación'; }
        if(isset($graficos_todos['GRAPH_KPI_1'])) 			{  $grafico_trad[] = 'GRAPH_KPI_1'; $grafico_etiquetas['GRAPH_KPI_1'] = 'Reconocer'; }
        if(isset($graficos_todos['GRAPH_KPI_2'])) 			{  $grafico_trad[] = 'GRAPH_KPI_2'; $grafico_etiquetas['GRAPH_KPI_2'] = 'OTIF'; }
        if(isset($graficos_todos['GRAPH_KPI_3'])) 			{  $grafico_trad[] = 'GRAPH_KPI_3'; $grafico_etiquetas['GRAPH_KPI_3'] = 'Monoprov'; }
        if(isset($graficos_todos['GRAPH_KPI_4'])) 			{  $grafico_trad[] = 'GRAPH_KPI_4'; $grafico_etiquetas['GRAPH_KPI_4'] = 'Calidad'; }
        if(isset($graficos_todos['GRAPH_KPI_5'])) 			{  $grafico_trad[] = 'GRAPH_KPI_5'; $grafico_etiquetas['GRAPH_KPI_5'] = 'Canal Rojo'; }
        if(isset($graficos_todos['GRAPH_CONTRAPARTES_PAISES_ROJO'])) 			{  $grafico_trad[] = 'GRAPH_CONTRAPARTES_PAISES_ROJO'; $grafico_etiquetas['GRAPH_CONTRAPARTES_PAISES_ROJO'] = 'Contrapartes por Pais Score Rojo'; }
        if(isset($graficos_todos['GRAPH_CONTRAPARTES_FAMILIAS_ROJO'])) 			{  $grafico_trad[] = 'GRAPH_CONTRAPARTES_FAMILIAS_ROJO'; $grafico_etiquetas['GRAPH_CONTRAPARTES_FAMILIAS_ROJO'] = 'Contrapartes Familias Score Rojo'; }
        // Hace las traducciones de las etiquetas de graficos 
		foreach ($grafico_trad as $value) {
			foreach ($graficos_todos[$value] as $key => $value_n1) {
                if ( isset($value_n1->etiqueta) ){
                    if( isset($trad[$value_n1->etiqueta]) ){
                        $graficos_todos[$value][$key]->etiqueta = $trad[$value_n1->etiqueta];
                        if (isset($graficos_todos[$value][$key]->etiqueta_texto)) {
                            $graficos_todos[$value][$key]->etiqueta_texto = $graficos_todos[$value][$key]->etiqueta;
                        }
                    } else {
                        // Si no esta traducido, lo guarda en la tabla traducciones
                        Traducciones::set($value_n1->etiqueta,Traducciones::$blade);
                    }
                }
			}
		}
        // SE HACEN LAS TRADUCCIONES DE LOS TITULOS DE LOS GRAFICOS
        foreach ($grafico_trad as $value){
            foreach( $grafico_etiquetas as $key => $etiqueta ){
                if ( isset($trad[$etiqueta]) ){
                    $grafico_etiquetas[$key] = $trad[$etiqueta];
                    continue;
                } else {
                    Traducciones::set($etiqueta,Traducciones::$blade);
                }
            }
        }
        //
		UserController::obtenerTraduccionesBotones();
        //
        $nombre_servicio = 'IV';
        //
        if ( $servicio_actual == env('LED_PRODUCTO') ){
            $nombre_servicio = 'LED';
        }
        // CALCULOS DE TRAZABILIDAD
        $hay_familias = 0;
        $trazabilidad = SQLConnection::backendStoreProcedure('obtener_trazabilidad', array($cliente,$nombre_servicio,60,200,$servicio_actual), 'select');
        if ( count($trazabilidad) > 0 && isset($trazabilidad[0]->idFamilia) ){
            $hay_familias++;
        }
        //
        $familias = [];
        $familias_agregadas = [];
		$fechas = [];
        //
        if ( $hay_familias == 1 ){
            foreach ($trazabilidad as $key => $value) {
                if ( !in_array($value->idFamilia,$familias_agregadas) ){
                    array_push($familias_agregadas,$value->idFamilia);
                    $obj = (object) ['idFamilia' => $value->idFamilia,'nombre_familia' => $value->nombre_familia];
                    array_push($familias,$obj);
                }
            }
        }
        //
		foreach ($trazabilidad as $key => $value) {
            //
			$fechas[$value->fecha] = (object) []; 
			$fechas[$value->fecha]->fecha = $value->fecha; 
            //
		}
        //
        //-- UNICAMENTE PARA ARCOR 517726215 --//
        $graficos_info_general = [];
        $graficos_indic_fidelitas = [];
        $graficos_kpi_arcor = [];
        if( $cliente == '861672084'){
            foreach($graficos_todos as $key => $graf ){
                if( $key == 'GRAFICO_ARCOR_FINAL' || $key == 'GRAPH_CONTRAPARTES_FAMILIAS' ){
                    $graficos_info_general[$key] = $graf;
                } elseif( $key == 'GRAFICO_ARCOR_BCRA' || $key == 'GRAFICO_ARCOR_AYC'  || $key == 'GRAFICO_INFORME_COMERCIAL' || 
                    $key == 'GRAFICO_FIDECHECK' || $key == 'GRAFICO_APOCRIFAS' ) {
                    $graficos_indic_fidelitas[$key] = $graf;
                } elseif( $key == 'GRAPH_KPI_1' || $key == 'GRAPH_KPI_2' || $key == 'GRAPH_KPI_3' || $key == 'GRAPH_KPI_4' || $key == 'GRAPH_KPI_5' ){
                    $graficos_kpi_arcor[$key] = $graf;
                }
            }
        }
        //
        if( $cliente == '1562620024'){
            foreach($graficos_todos as $key => $graf ){
                if( $key == 'GRAFICO_ARCOR_FINAL' || $key == 'GRAPH_CONTRAPARTES_FAMILIAS' ){
                    $graficos_indic_fidelitas[$key] = $graf;
                } elseif( $key == 'GRAFICO_ARCOR_BCRA' || $key == 'GRAFICO_ARCOR_AYC'  || $key == 'GRAFICO_INFORME_COMERCIAL' || 
                    $key == 'GRAFICO_FIDECHECK' || $key == 'GRAFICO_APOCRIFAS' ) {
                    $graficos_indic_fidelitas[$key] = $graf;
                } elseif( $key == 'GRAPH_KPI_1' || $key == 'GRAPH_KPI_2' || $key == 'GRAPH_KPI_3' || $key == 'GRAPH_KPI_4' || $key == 'GRAPH_KPI_5' ){
                    $graficos_kpi_arcor[$key] = $graf;
                }
            }
        }
        //--
        return view('/iv/new/iv-dashboard')->with(compact('graficos_todos','grafico_etiquetas','totales_datos_graficos','trazabilidad','fechas','servicio_actual','familias','graficos_info_general','graficos_indic_fidelitas','graficos_indic_fidelitas','graficos_kpi_arcor','cliente'));
    }

    /////////////////////////////////////////////
    ///////////// NEW DASHBOARD /////////////////
    /////////////////////////////////////////////

    // FUNCION QUE DEVUELVE LA VISTA DEL DASHBOARD
    public function DashboardOrg(){
        $servicio = Session::get('servicio_actual');
		$cliente = Session::get('usuario')->cliente['client_id'];
        $user_id = Session::get('usuario')->user_id;
		//
        $error = 0;
        if ( !$this->tieneDashboard() ){
            $error = 2;
            return view('/dashboard/main')->with(compact('error'));
        }
        // obtenemos los graficos
        $graficos = $this->obtenerIndicadoresGraficos($cliente,$servicio);
        // en caso de no tener indicadores
        if ( !count($graficos) ){
            $error = 1;
            return view('/dashboard/main')->with(compact('error'));
        }
        //
        return view('/dashboard/main')->with(compact('graficos','cliente','servicio','error'));
        // funcion graficoData
        // CALCULO DE TOTALES PARA CIERTOS GRAFICOS
        // var_dump($graficos);die();
        /* if ( $producto->clave_indicador == 'GRAPH_CONTRATISTAS' || $producto->clave_indicador == 'GRAPH_SUBCONTRATISTAS'|| $producto->clave_indicador == 'GRAPH_EMPLEADOS'|| $producto->clave_indicador == 'GRAPH_VEHICULOS'|| $producto->clave_indicador == 'GRAPH_IMPE_STATUS'|| $producto->clave_indicador == 'GRAFICO_INFORME_COMERCIAL'|| $producto->clave_indicador == 'GRAFICO_SCORE_BALANCE'|| $producto->clave_indicador == 'GRAFICO_SCORE_FINAL'|| $producto->clave_indicador == 'GRAFICO_PAGO'|| $producto->clave_indicador == 'GRAFICO_PAGO_AR'|| $producto->clave_indicador == 'GRAFICO_PAGO_BR'|| $producto->clave_indicador == 'GRAFICO_PAGO_US' ){
            $totales_datos_graficos[$producto->clave_indicador] = 0;
            // SE RECORREN LOS DATOS DE LOS GRAFICOS DEL PRODUCTO
            if ( count($graficos) ){
                foreach( $graficos as $v => $value ){
                    $totales_datos_graficos[$producto->clave_indicador] += $value->total;
                }
            }
        } */
        //
    }

    /**
     * Funcion que devuelve la
     * vista del nuevo dashboard
     * de json
     * @access public
     *  */ 
    public function Dashboard(){
        $servicio = Session::get('servicio_actual');
		$cliente = Session::get('usuario')->cliente['client_id'];
        $user_id = Session::get('usuario')->user_id;
		//
        $error = 0;
        if ( !$this->tieneDashboard() ){
            // si el usuario no tiene permiso de dashboard
            $error = 2;
            return view('/dashboard/main')->with(compact('error','servicio'));
        }
        // obtenemos el json del dashboard
        $json = new DashboardJSON($cliente,$servicio,$user_id);
        //
        if ( !$json->tieneJSON() ){
            if ( $json->cantGraficosIndicadores() ){
                // si no tiene JSON pero tiene graficos indicados
                // se genera el JSON , es importante hacer la consulta
                // de cuantos graficos puede tener porque si no recarga infinitamente
                return view('/dashboard/loading');
            }
        }
        //
        $data = $json->obtenerJSON();
        //
        $contadores = isset($data->contadores) ? $data->contadores : [];
        $graficos = isset($data->graficos) ? $data->graficos : [];
        $tipos_graficos = $data->tipos_graficos ?? NULL;
        //
        if ( empty($graficos) && empty($contadores) ){
            $error = 1;
            return view('/dashboard/main')->with(compact('error','servicio'));
        }
        //
        $graficos = $this->traduccionesDashboard($graficos);
        //
        return view('/dashboard/main')->with(compact('contadores','graficos','tipos_graficos','cliente','servicio','error'));    
    }

    /**
     * Funcion que traduce los
     * titulos de los graficos y
     * los titulos de los series
     * @access private
     * @param array el arreglo de datos de los graficos
     * @return array
     */
    private function traduccionesDashboard($graficos){
        Traducciones::$blade = 'main'; // se setea el valor desde esa funcion y es utilizado en las otras funciones
		$trad = SQLConnection::obtenerTraduccionesPHP(Traducciones::$blade);
        //
        foreach( $graficos as $grafico ){
            $this->traduccionGraficoGenerico($trad,$grafico); // modifica el objeto por referencia
            //if ( $grafico->clave_indicador == 'GRAPH_COMPLIANCE' || $grafico->clave_indicador == 'GRAFICO_FIDECHECK' ){
            /* if ( $grafico->clave_indicador == 'GRAFICO_FIDECHECK' ){
                $this->traduccionGraficoComplianceFidecheck($trad,$grafico); // modifica el objeto por referencia
            } else {
                $this->traduccionGraficoGenerico($trad,$grafico); // modifica el objeto por referencia
            } */
        }
        //
        return $graficos;
    }

    /**
     * Funcion que traduce los
     * titulos de los graficos y
     * los titulos de los series
     * del grafico de compliance
     * y fidecheck
     * @access private
     * @param array &array el arreglo de traducciones
     * @param object el objeto que tiene los datos del grafico
     * @return void modifica el objeto por referencia
     */
    private function traduccionGraficoComplianceFidecheck(&$trad,$grafico){
        if ( isset($grafico->datos) ){
            foreach( $grafico->datos as $series ){
                if ( isset($series->etiqueta) ){
                    if ( isset($trad[$series->etiqueta]) ){
                        $series->etiqueta = $trad[$series->etiqueta];
                    } else {
                        Traducciones::set($series->etiqueta,Traducciones::$blade);
                    }
                }
            }
        }
    }

    /**
     * Funcion que traduce los
     * titulos de los graficos y
     * los titulos de los series
     * @access private
     * @param array &array el arreglo de traducciones
     * @param object el objeto que tiene los datos del grafico
     * @return void modifica el objeto por referencia
     */
    private function traduccionGraficoGenerico(&$trad,$grafico){
        // traducciones de los titulos de la series
        if ( isset($grafico->datos) && isset($grafico->datos->valores) ){
            foreach( $grafico->datos->valores as $series ){
                if ( isset($series->name) ){
                    if ( isset($trad[$series->name]) ){
                        $series->name = $trad[$series->name];    
                    } else {
                        Traducciones::set($series->name,Traducciones::$blade);
                    }
                }
            }
        }
        // traducciones de los titulos de los graficos
        if ( isset($grafico->titulo_grafico) ){
            if ( isset($trad[$grafico->titulo_grafico]) ){
                $grafico->titulo_grafico = $trad[$grafico->titulo_grafico];
            } else {
                Traducciones::set($grafico->titulo_grafico,Traducciones::$blade);
            }
        }
    }

    /**
     * Funcion que valida el permiso
     * de graficos de dashboard
     * @access private
     * @return bool
     */
    private function tieneDashboard(){
        return ( isset(Session::get('usuario')->led_dashboard) && Session::get('usuario')->led_dashboard ) ? true : false;
    }

    /////////// TRAZABILIDAD //////////////
    
    /**
     * Funcion que devuelve
     * la trazabilidad del cliente
     * @access public
     */
    public function trazabilidad(){
        $servicio_contratado = Session::get('servicio_actual'); // servicio contratado
        $cliente = Session::get('usuario')->cliente['client_id']; // cliente
        //
        $es_inquiro = false;
        $nombre_servicio = 'LED';
        if ( $servicio_contratado == env('IV_PRODUCTO') ){
            $nombre_servicio = 'IV';    
            $es_inquiro = true;
        }
        // CALCULOS DE TRAZABILIDAD
        $hay_familias = false;
        $trazabilidad = SQLConnection::backendStoreProcedure('obtener_trazabilidad',array($cliente,$nombre_servicio,60,200,$servicio_contratado),'select');
        if ( count($trazabilidad) > 0 && isset($trazabilidad[0]->idFamilia) ){
            $hay_familias = true;
        }
        // Obtenemos las familias
        $familias = [];
        if ( $hay_familias ){
            foreach ($trazabilidad as $key => $value) {
                if ( !isset($familias[$value->idFamilia]) ){
                    $familias[$value->idFamilia] = $value->nombre_familia;
                }
            }
        }
        $cant_familias = count($familias);
        //
        return view('/dashboard/trazabilidad')->with(compact('trazabilidad','familias','cant_familias','es_inquiro'));
    }

    /////// GENERAR JSON DASHBOARD ////////

    /**
     * Funcion que genera
     * el json del dashboard
     * de un cliente de uno
     * de sus servicios
     * @access public
     * @return string
     */
    public function generarJSONOrg(){
        header('Content-Type: application/json');
        if ( isset($_GET['cliente']) && isset($_GET['servicio_contratado']) ){
            $reg = "/^[0-9]{1,20}$/"; // validacion
            $cliente = $_GET['cliente'];
            $servicio_contratado = $_GET['servicio_contratado'];
            if ( preg_match($reg,$cliente) && preg_match($reg,$servicio_contratado) ){
                if ( $servicio_contratado != env('IV_PRODUCTO') ){
                    return Response::JSON(['error' => 3, 'mensaje' => 'El JSON solo es disponible para inquirovitae.']); // se usa para que devuelve el content type
                }
                $json = new DashboardJSON($cliente,$servicio_contratado,NULL);
                $json->generarJSON();
                //
                return Response::JSON(['error' => 0, 'mensaje' => 'El JSON se generó con exíto.']);
            } else {
                return Response::JSON(['error' => 2, 'mensaje' => 'Los datos recibidos son invalidos.']);
            }
        } else {
            return Response::JSON(['error' => 1, 'mensaje' => 'No se recibieron los datos correspondientes.']);
        }
    }

    /**
     * Funcion que genera
     * el json del dashboard
     * de un cliente de uno
     * de sus servicios
     * @access public
     * @return string
     */
    public function generarUsuarioJSON(){
        if ( isset($_GET['cliente']) && isset($_GET['servicio_contratado']) && isset($_GET['usuario']) ){
            $reg = "/^[0-9]{1,20}$/"; // validacion
            $cliente = $_GET['cliente'];
            $servicio_contratado = $_GET['servicio_contratado'];
            $user = $_GET['usuario'];
            //
            if ( preg_match($reg,$cliente) && preg_match($reg,$servicio_contratado) && preg_match($reg,$user) ){
                if ( $servicio_contratado != env('IV_PRODUCTO') && $servicio_contratado != env('LED_PRODUCTO') ){
                    // return Response::JSON(['error' => 3, 'mensaje' => 'El JSON solo es disponible para inquirovitae.']); // se usa para que devuelve el content type
                    return Response::JSON(['error' => 3, 'mensaje' => 'El JSON no esta disponible para este servicio.']); // se usa para que devuelve el content type
                }
                $json = new DashboardJSON($cliente,$servicio_contratado,$user);
                $json->generarJSON();
                //
                return Response::JSON(['error' => 0, 'mensaje' => 'El JSON se generó con exíto.']);
            } else {
                return Response::JSON(['error' => 2, 'mensaje' => 'Los datos recibidos son invalidos.']);
            }
        } else {
            return Response::JSON(['error' => 1, 'mensaje' => 'No se recibieron los datos correspondientes.']);
        }
    }

    /**
     * Funcion que genera
     * el json del dashboard
     * de un cliente de uno
     * de sus servicios
     * @access public
     * @return string
     */
    public function generarUsuariosJSON(){
        if ( isset($_GET['cliente']) && isset($_GET['servicio_contratado']) ){
            $reg = "/^[0-9]{1,20}$/"; // validacion
            $cliente = $_GET['cliente'];
            $servicio_contratado = $_GET['servicio_contratado'];
            //
            if ( preg_match($reg,$cliente) && preg_match($reg,$servicio_contratado) ){
                if ( $servicio_contratado != env('IV_PRODUCTO') && $servicio_contratado != env('LED_PRODUCTO') ){
                    // return Response::JSON(['error' => 3, 'mensaje' => 'El JSON solo es disponible para inquirovitae.']); // se usa para que devuelve el content type
                    return Response::JSON(['error' => 3, 'mensaje' => 'El JSON no esta disponible para este servicio.']); // se usa para que devuelve el content type
                }
                //
                $json = new DashboardJSON($cliente,$servicio_contratado);
                if ( $json->esJSONPorUsuario() ){
                    if ( $json->regenerarUsersJSON() ){
                        return Response::JSON(['error' => 0, 'mensaje' => 'Los archivos JSON se regeneraron con exito.']);    
                    }
                    //
                    return Response::JSON(['error' => 0, 'mensaje' => 'No hay archivos JSON para regenerar.']);
                } else {
                    $json->generarJSON();
                    //
                    return Response::JSON(['error' => 0, 'mensaje' => 'El JSON se generó con exíto.']);
                }
                
            } else {
                return Response::JSON(['error' => 2, 'mensaje' => 'Los datos recibidos son invalidos.']);
            }
        } else {
            return Response::JSON(['error' => 1, 'mensaje' => 'No se recibieron los datos correspondientes.']);
        }
    }

    /**
     * Funcion que genera
     * el json del dashboard
     * para el usuario logueado
     * en el servicio que se encuentra
     * @access public
     * @return string
     */
    public function generarJSONLogueadoDashboard(){
        $servicio = Session::get('servicio_actual');
        $cliente = Session::get('usuario')->cliente['client_id'];
        $user_id = Session::get('usuario')->user_id;
        //
        $json = new DashboardJSON($cliente,$servicio,$user_id);
        $json->generarJSON();
        //
        return Response::JSON(['error' => 0, 'mensaje' => 'OK.']);
    }
}
