<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Response;

use App\Custom\Misc;
use App\Custom\SQLConnection;

class ICNewController extends Controller
{
    // ESTA FUNCION DEVUELVE BRIEF INFORME COMERCIAL
    public function obtenerBrief($json = true, $graf_pdf_financiero = '', $graf_pdf_empleados = '', $graf_pdf_cheques = '', $graf_pdf_score = '', $graf_pdf_comex = '', $incluye_balance = 1, $cliente_login = 0)
    {
        //--  ARRAY PARA GUARDAR LOS DATOS EN LOS CUALES SE GENERA ALGUN TIPO DE ERROR  --//
        $partes_del_informe = '';
        try {
            $cuit = Request::input("cuit");
            $user_id = Session::get('usuario')->user_id;
            $razon_social = SQLConnection::obtenerRazonSocial($cuit)->nombre_persona;
            // $partes_del_informe .= "datos_usuario -> Cuit: ".$cuit." - User Id: ".$user_id.'<br>';
            $partes_del_informe .= "<b>DATOS DE USUARIO<br>Cuit: " . $cuit . " - User Id: " . $user_id . '</b><br><br>';
            if (isset(Session::get('usuario')->cliente[ENV('ID_INFORME_COMERCIAL')])) {
                $servicio = SQLConnection::consumirServicio($user_id, $cuit, ENV('ID_INFORME_COMERCIAL'));
            } else if (isset(Session::get('usuario')->cliente[ENV('INFORME_API')])) {
                $servicio = SQLConnection::consumirServicio($user_id, $cuit, ENV('INFORME_API'));
            } else {
                $servicio = new \stdClass;
                $servicio->sumar = 0;
            }

            if ($servicio->sumar == 1) {
                if (isset(Session::get('usuario')->cliente[ENV('ID_INFORME_COMERCIAL')])) {
                    // SQLConnection::insertarRegistroActividad("INFORME COMERCIAL",$cuit);
                    Session::get('usuario')->cliente[ENV('ID_INFORME_COMERCIAL')]->usuario_consumido++;
                    Session::get('usuario')->cliente[ENV('ID_INFORME_COMERCIAL')]->cliente_consumido++;
                }
            }
            /* Fin 08/10/2020 */
            /* 1 es lo que se toma por default, si está en 1, vemos si tenemos algo distinto en la sesion */
            if ($incluye_balance == 1) {
                $incluye_balance = session::get('incluye_balance') ?? 1;
            }
            /* vemos si tenemos algo distinto en la sesion */
            if ($cliente_login == 0) {
                $cliente_login = Session::get('cliente_login') ?? Session::get('usuario')->cliente['client_id'];
            }

            $idp = Request::input('idp');
            $cuit = Request::input("cuit");
            $imagen_fidelitas = Misc::obtenerImagenFidelitas();
            $afip_respuesta = [];

            if (ENV('SERVICIOS_AFIP') == true) {
                $afip_respuesta = AFIPController::obtenerPadron_test($cuit); //--> LINEA CON MEJORAS, PARA VOLVER AL ESTADO ANTERIOR DESCOMENTAR LA DE ABAJO Y COMENTAR ESTA.
                //$afip_respuesta = AFIPController::obtenerPadron($cuit); //--> LINEA ORIGINAL
                // $partes_del_informe .= 'obtenerPadron_test: si <br>';
                $partes_del_informe .= '<ul><li>Consulta AFIP --> Si </li>';
            } else {
                // $partes_del_informe .= 'obtenerPadron_test: no <br>';
                $partes_del_informe .= '<ul><li>Consulta AFIP --> No </li>';
            }

            // Agregado 10/07/2018: Si es persona fisica, ve si puede completar datos con Padron Electoral (ultimo domicilio, año de nacimiento)
            $fisica_juridica = Misc::tipoPersona($cuit);
            $p_fisica = ($fisica_juridica == 'F') ? true : false;
            if ($p_fisica) {
                $actualiza = SQLConnection::actualizarDatosConPadron($cuit, '0');
                // $partes_del_informe .= 'actualizarDatosConPadron: si <br>';
                $partes_del_informe .= '<li>Persona física --> Si </li>';
            } else {
                // $partes_del_informe .= 'actualizarDatosConPadron: no <br>';
                $partes_del_informe .= '<li>Persona física --> No </li>';
            }
            // Obtener Bancos para calcular si amerita por situación uno y sumar al score
            // Se almacenan en variable de clase para ser reutilizadas en la pestaña de bancos
            $obtener_bancos = SQLConnection::obtenerBancos($cuit);
            // $partes_del_informe .= 'obtenerBancos: si <br>';
            if ($obtener_bancos != []) {
                $partes_del_informe .= '<li>Cálculo Bancos --> Si, registra ' . strval(count($obtener_bancos)) . ' resultados de la consulta</li>';
            } else {
                $partes_del_informe .= '<li>Cálculo Bancos --> No, registra ' . strval(count($obtener_bancos)) . ' resultados de la consulta</li>';
            }

            $situacion_1 = Misc::ameritaPorSituacionUno($obtener_bancos);
            // $partes_del_informe .= 'ameritaPorSituacionUno: si <br>';
            if ($obtener_bancos != []) {
                $partes_del_informe .= '<li>Amerita Score --> Si</li>';
            } else {
                $partes_del_informe .= '<li>Amerita Score --> No</li>';
            }

            $amerita_situacion_1 = $situacion_1['amerita'];
            $cantidad_situacion_1 = $situacion_1['cantidad'];

            $link_pdf = env('AFIP_URL_COMPARTIDO_LEER') . '/' . substr($cuit, 0, 2) . '/' . substr($cuit, 2, 3) . '/' . substr($cuit, 5, 3) . '/' . $cuit . '.pdf';
            $tiene_pdf = file_exists($link_pdf);
            // $partes_del_informe .= 'tiene_pdf: si <br>';
            if (file_exists($link_pdf)) {
                $partes_del_informe .= '<li>Pdf AFIP --> Existe </li>';
            } else {
                $partes_del_informe .= '<li>Pdf AFIP --> No existe </li>';
            }

            $card_score = [];
            $card_bancos = [];
            $card_cheques = [];
            $card_domicilios = [];
            $card_empleados = [];
            $card_comex = [];
            $card_personas_relacionadas = [];
            $card_sociedades_relacionadas = [];
            $partes_del_informe .= '<li>cards_varios --> si </li>';

            //$p_fisica                     = (substr($cuit,0,1) == 3) ? false : true;
            $fisica_juridica = Misc::tipoPersona($cuit);
            $p_fisica = ($fisica_juridica == 'F') ? true : false;
            $periodo = [];
            $grafico_cheques_ordenados = [];
            $cheques[] = new \stdClass;
            $env = Misc::obtenerColoresEnv();
            $score_ordenado = [];
            $defuncion = [];
            /*CALCULO SCORE inicio*/
            $debug_score = '';
            $sesion_externa = (Session::get('externo')) ? true : false;
            $partes_del_informe .= '<li>config_panel --> si </li>';

            $comex_impo = SQLConnection::obtenerComex($cuit);
            // $partes_del_informe .= 'obtenerComex: si <br>';
            if ($comex_impo != []) {
                $partes_del_informe .= '<li>Servicio de ComEx --> Si tiene</li>';
            } else {
                $partes_del_informe .= '<li>Servicio de ComEx --> No tiene</li>';
            }

            if (!$sesion_externa) {
                if (isset(Session::get('usuario')->cliente[env('ID_INFORME_COMERCIAL')])) {
                    $cliente = Session::get('usuario')->cliente[ENV('ID_INFORME_COMERCIAL')]->nombre_cliente;
                }
            } else {
                $cliente = 'Externo';
            }

            /* card 6 empleados inicio*/

            if (!$p_fisica) {
                $card_fiscales = SQLConnection::obtenerCardFiscales($cuit);
                //$card_fiscales); //error con AKAPOL SA CUIT 30504065207 (12/09/2017) 
                if (is_null($card_fiscales)) {
                    $card_fiscales = '';
                } else {
                    $card_fiscales->inicio_actividad = Misc::convertirFormatoFecha($card_fiscales->inicio_actividad, 'Y-m-d', 'd/m/Y');
                }
            } else {
                $card_fiscales = SQLConnection::obtenerCardFiscalesPF($cuit);
                $edad = Misc::obtenerEdadPersonaFisica($cuit);
            }

            $sircreb = SQLConnection::obtenerSircreb($cuit);
            $riesgo_fiscal = 'NO';
            if ($sircreb) {
                foreach ($sircreb as $info) {
                    $hoy = date('Y-m-d h:i:s');
                    if (($hoy > $info->vigencia_desde) && ($hoy < $info->vigencia_hasta)) {
                        $riesgo_fiscal = 'SI';
                    } else if ($hoy > $info->vigencia_desde) {
                        $riesgo_fiscal = '--';
                    }
                }
            }
            $partes_del_informe .= '<li>card_6_empleados --> si </li>';
            /* card 6 empleados fin*/
            if (!$tiene_pdf && empty($card_fiscales)) {
                $observado = true;
            }
            $respuesta_score = '';
            if (strlen($cuit) == 11) {
                $respuesta_score = json_decode(ApiControllerV1::obtenerServicioScore($cuit, $incluye_balance), true);
                // $partes_del_informe .= 'obtenerServicioScore: si <br>';
                $partes_del_informe .= '<li>obtenerServicioScore --> si </li>';

            } else {
                $partes_del_informe .= '<li>obtenerServicioScore --> no </li>';
            }

            $resp_constancia = $respuesta_score['resp_constancia'] ?? '';

            if ($respuesta_score == '') {
                $score = 0;
                $debug_score = '';
            } else {
                $score = $respuesta_score['score'];
                $debug_score = $respuesta_score['debug_score'];
            }
            if ($p_fisica) {
                $defuncion = SQLConnection::obtenerDefuncion($cuit);
                $dni = (int) substr($cuit, 2, -1);
                $partes_del_informe .= '<li>obtenerDefuncion --> Si </li>';
            } else {
                $partes_del_informe .= '<li>obtenerDefuncion --> no </li>';
            }
            if (env('SERVICIOS_AFIP') == FALSE) {
                $debug_score .= "<br>---------------<br><strong>RESPUESTA AFIP</strong><br>---------------<br><strong>EL LLAMADO A AFIP SE ENCUENTRA DESHABILITADO</strong><br>";
            }

            // En el detalle del score, se muestra la respuesta de AFIP
            if (ENV('SERVICIOS_AFIP') == true) {
                $afip_ordenado = '';
                $afip_decode = [];
                if (is_array($afip_respuesta)) {
                    foreach ($afip_respuesta as $afip) {
                        $afip_decode[] = json_decode($afip, true);
                    }
                    $afip_respuesta = $afip_decode;
                }

                if (!is_array($afip_respuesta)) {
                    $afip_ordenado .= "<br>" . $afip_respuesta;

                } else {
                    foreach ($afip_respuesta as $key => $value) {
                        if (!is_array($value)) {
                            $afip_ordenado .= "<strong><br>" . $key . ":</strong> " . $value;
                        } else {
                            $afip_ordenado .= "<strong><br>" . $key . ":" . "</strong>";
                            foreach ($value as $key2 => $value2) {
                                if (!is_array($value2)) {
                                    $afip_ordenado .= "<strong><br>   " . $key2 . ":</strong> " . $value2;
                                } else {
                                    $afip_ordenado .= "<strong><br>   " . $key2 . ":" . "</strong>";

                                    foreach ($value2 as $key3 => $value3) {
                                        if (!is_array($value3)) {
                                            $afip_ordenado .= "<strong><br>      " . $key3 . ":</strong> " . $value3;
                                        } else {
                                            foreach ($value3 as $key4 => $value4) {
                                                if (!is_array($value4)) {
                                                    $afip_ordenado .= "<strong><br>      " . $key4 . ":</strong> " . $value4;
                                                } else {

                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                if ($afip_ordenado != '') {
                    $debug_score .= "<br>---------------<br><strong>RESPUESTA AFIP</strong><br>---------------" . $afip_ordenado;
                }

            }
            $debug_score .= "<br>---------------<br><strong>RESPUESTA CONSTANCIA CUIT</strong><br>---------------<br><br>";
            if (!empty($resp_constancia)) {
                $debug_score .= "RESPUESTA : " . $resp_constancia['response'] . "<br>ERROR:" . $resp_constancia['constancia_error'];
            }
            $partes_del_informe .= '<li>debug_score --> si </li>';

            if (!$p_fisica) {
                $datos_card_score = SQLConnection::obtenerCardScore($cuit);
            } else {
                $datos_card_score = SQLConnection::obtenerCardScorePF($cuit);
            }
            $partes_del_informe .= '<li>obtenerCardScorePF --> si </li>';
            /*CALCULO SCORE fin*/
            /*card 1 inicio */
            $vitalidad = 1;
            $motivo_vitalidad = 1;
            // CALCULO DE EDAD
            $menor_de_edad = 0;
            if ($p_fisica) {
                $edad = Misc::obtenerEdadPersonaFisica($cuit);
                //--
                if ($edad < 18) {
                    $menor_de_edad = 1;
                }
            }
            //
            $cheque_ultimo_rechazo_desde = '';
            if (!$p_fisica && strlen($cuit) == 11) {
                $sintomas = SQLConnection::backendStoreProcedure('obtener_sintomas_de_vitalidad', array($cuit), true);
                $cheque_ultimo_rechazo_desde = SQLConnection::backendStoreProcedure('obtener_no_cheqrech_desde', array($cuit), true);
                $vitalidad = 1;
                if ((!$p_fisica) && isset($sintomas->vitalidad) && $sintomas->vitalidad == 0) {
                    $score = 0;
                    $vitalidad = 0;
                    $motivo_vitalidad = $sintomas->motivo;
                }
            }
            $card_score['score'] = $score;
            $card_score['datos'] = $datos_card_score;

            // $partes_del_informe .= 'card_1: si <br>';
            $partes_del_informe .= '<li>Card Score --> Si </li>';
            /*card 1 fin */

            /*card 2 inicio */
            $garantias = SQLConnection::obtenerGarantiasBrief($cuit);
            $financiero = SQLConnection::obtenerFinancieroBrief($cuit);
            $card_bancos = SQLConnection::obtenerCardBancos($cuit);

            // $partes_del_informe .= 'card_2: si <br>';
            $partes_del_informe .= '<li>Card Financiero --> Si </li>';
            /*card 2 fin */

            /* card 3 cheques rechazados inicio*/
            $card_cheques = SQLConnection::obtenerCardChequesRechazados($cuit);
            $grafico_cheques = SQLConnection::graficoCardChequesRechazados($cuit);
            // return response()->json($grafico_cheques);
            $grafico_cheques = self::generarGraficoCheques($grafico_cheques, 24);

            // $partes_del_informe .= 'card_3: si <br>';
            $partes_del_informe .= '<li>Card Cheques --> Si </li>';
            /* card 3 cheques rechazados fin*/

            /* card 4 domicilios inicio*/
            $domicilios = new \stdClass;
            $formales = SQLConnection::obtenerDomicilios($cuit);
            $domicilios->otros_domicilios = '';
            $domicilios->domicilio_legal = '';
            $domicilios->domicilio = '';
            $domicilios->domicilio_fiscal = '';

            foreach ($formales as $formal) {
                /* Domicilio Legal */
                if (strpos($formal->tipo_domicilio, 'L') !== false) {
                    if (isset($domicilios->domicilio_legal) && $domicilios->domicilio_legal != '') {
                        if (strpos($formal->tipo_domicilio, 'D') === false && strpos($formal->tipo_domicilio, 'E') === false && strpos($formal->tipo_domicilio, 'F') === false) {
                            $domicilios->otros_domicilios .= Misc::armarDomicilio($formal->domicilio, $formal->codpos, $formal->loc_nombre, $formal->prv_nombre, $formal->pai_nombre) . '<br>';
                        }
                    } else {
                        $domicilios->domicilio_legal = Misc::armarDomicilio($formal->domicilio, $formal->codpos, $formal->loc_nombre, $formal->prv_nombre, $formal->pai_nombre);
                    }
                }
                /* Domicilio Fiscal */
                if (strpos($formal->tipo_domicilio, 'F') !== false) {
                    if (isset($domicilios->domicilio_fiscal) && $domicilios->domicilio_fiscal != '') {
                        if (strpos($formal->tipo_domicilio, 'D') === false && strpos($formal->tipo_domicilio, 'E') === false && strpos($formal->tipo_domicilio, 'L') === false) {
                            $domicilios->otros_domicilios .= Misc::armarDomicilio($formal->domicilio, $formal->codpos, $formal->loc_nombre, $formal->prv_nombre, $formal->pai_nombre) . '<br>';
                        }
                    } else {
                        $domicilios->domicilio_fiscal = Misc::armarDomicilio($formal->domicilio, $formal->codpos, $formal->loc_nombre, $formal->prv_nombre, $formal->pai_nombre);
                    }
                }

                /* Domicilio Principal */
                if (strpos($formal->tipo_domicilio, 'D') !== false || strpos($formal->tipo_domicilio, 'E') !== false) {
                    if (isset($domicilios->domicilio) && $domicilios->domicilio != '') {
                        if (strpos($formal->tipo_domicilio, 'F') === false && strpos($formal->tipo_domicilio, 'L') === false) {
                            $domicilios->otros_domicilios .= Misc::armarDomicilio($formal->domicilio, $formal->codpos, $formal->loc_nombre, $formal->prv_nombre, $formal->pai_nombre) . '<br>';
                        }
                    } else {
                        $domicilios->domicilio = Misc::armarDomicilio($formal->domicilio, $formal->codpos, $formal->loc_nombre, $formal->prv_nombre, $formal->pai_nombre);
                    }
                }
                /* Otros Domicilios */
                if (strpos($formal->tipo_domicilio, 'O') !== false && strpos($formal->tipo_domicilio, 'D') === false && strpos($formal->tipo_domicilio, 'E') === false && strpos($formal->tipo_domicilio, 'L') === false && strpos($formal->tipo_domicilio, 'F') === false) {
                    $domicilios->otros_domicilios .= Misc::armarDomicilio($formal->domicilio, $formal->codpos, $formal->loc_nombre, $formal->prv_nombre, $formal->pai_nombre) . '<br>';
                }
            }

            if ($domicilios->domicilio == '' && $domicilios->domicilio_fiscal != '') {
                $domicilios->domicilio .= $domicilios->domicilio_fiscal;
            }

            $card_domicilios['domicilios'] = $domicilios;

            // $partes_del_informe .= 'card_4: si <br>';
            $partes_del_informe .= '<li>Card Domicilio --> Si </li>';
            /* card 4 domicilios fin*/

            /* card 5 empleados inicio*/
            $card_empleados = SQLConnection::obtenerEmpleados($cuit);
            // $partes_del_informe .= 'card_5: si <br>';
            $partes_del_informe .= '<li>Card Empleados --> Si </li>';
            /* card 5 empleados fin*/

            /* card 7 empleados inicio*/
            $primero = date('Y');
            $segundo = date('Y') - 1;
            $tercero = date('Y') - 2;
            $mostrar_grafico_card_comex = false;
            $card_comex[$primero] = SQLConnection::obtenerCardComex($cuit, $primero);
            $card_comex[$segundo] = SQLConnection::obtenerCardComex($cuit, $segundo);
            $card_comex[$tercero] = SQLConnection::obtenerCardComex($cuit, $tercero);
            foreach ($card_comex as $comex) {
                foreach ($comex as $info) {
                    if (!empty($info) && $info->total_anual != null) {
                        $mostrar_grafico_card_comex = true;
                    }
                }
            }
            // $partes_del_informe .= 'card_7: si <br>';
            $partes_del_informe .= '<li>Card Comex --> Si </li>';
            /* card 7 empleados fin*/
            /* card 8 empleados inicio*/
            $card_personas_relacionadas = SQLConnection::obtenerCardPersonasRelacionadas($cuit);
            // $partes_del_informe .= 'card_8: si <br>';
            $partes_del_informe .= '<li>Card Relacionadas --> Si </li>';
            /* card 8 empleados fin*/

            /* card 9 empleados inicio*/
            $tipo_persona = (substr($cuit, 0, 1) != '3') ? 'f' : 'j';
            $card_sociedades_relacionadas = SQLConnection::obtenerCardSociedadesRelacionadas($cuit, $tipo_persona);

            // $partes_del_informe .= 'card_9: si <br>';
            $partes_del_informe .= '<li>Card Sociedades --> Si </li>';
            /* card 9 empleados fin*/

            /*card 10 Juicios*/
            $razon_social_legales = Misc::diccionarioSinonimos2020($razon_social);
            $cuit_enmascarado = $cuit;

            $dni = '';
            if ($p_fisica) {
                $dni = (int) substr($cuit, 2, -1);
            }
            $mask = substr($cuit_enmascarado, 1, 1);
            $mask .= '-';
            $cuit_enmascarado = substr_replace($cuit_enmascarado, $mask, 1, 1);
            $mask = substr($cuit_enmascarado, -1, -1);
            $mask .= '-';
            $cuit_enmascarado = substr_replace($cuit_enmascarado, $mask, -1, -1);

            $card_juicios = new \stdClass();
            $card_juicios->concursos_quiebras = [];
            $card_juicios->pedidos_quiebra = [];
            $card_juicios->remates = SQLConnection::obtenerRemates($cuit, $cuit_enmascarado, $dni);
            $card_juicios->otros_juicios_comerciales = [];
            $card_juicios->remates = sizeof($card_juicios->remates);

            $resultado_nombres_ant = [];
            $razon_social_completa = '';

            if ($p_fisica == false) {
                //P Juridica
                $nombres_anteriores = SQLConnection::backendCambiosNombres($cuit);
                if ($nombres_anteriores) {
                    foreach ($nombres_anteriores as $nombre_ant) {
                        $resultado_nombres_ant[] = $nombre_ant->nombre;
                    }
                    $resultado_nombres_ant[] = $razon_social;
                }

                $sinonimos = Misc::diccionarioSinonimosTest($resultado_nombres_ant);
                $count_sinonimo = count($sinonimos) - 1;

                foreach ($sinonimos as $key => $rs) {
                    if (strlen($rs) < 3) {
                        continue;
                    }

                    if (!($key == $count_sinonimo)) {
                        $razon_social_completa .= $rs . 'OR';
                    } else {
                        $razon_social_completa .= $rs;
                    }
                }

                if (!$razon_social_completa) {
                    $razon_social_completa = $razon_social_legales;
                }
            } else {//caso PF
                $razon_social_completa = "\"" . $razon_social . "\"";
            }

            $razon_social_legales = $razon_social_completa;
            $juicios_cantidades = new \stdClass();

            if (strlen($razon_social_legales) >= 4 && $razon_social_legales !== '"DE"') {
                $razon_social_legales = (Misc::parche_cla($razon_social_legales));
                try {
                    $juicios_cantidades = SQLConnection::backendStoreProcedure('obtener_count_juicios', array($cuit, $razon_social_legales), true);
                    $card_juicios->otros_juicios_comerciales = $juicios_cantidades->cantidad_ojc;
                    $card_juicios->concursos_quiebras = $juicios_cantidades->cantidad_cyq;
                    $card_juicios->pedidos_quiebra = $juicios_cantidades->cantidad_pq;
                    $card_juicios->actor = $juicios_cantidades->cantidad_actor;
                    $card_juicios->demandado_homonimo = $juicios_cantidades->cantidad_demandado_homonimo;
                    $card_juicios->actores_homonimos = $juicios_cantidades->cantidad_actor_homonimo;
                } catch (\Throwable $th) {
                    $card_juicios->otros_juicios_comerciales = '0';
                    $card_juicios->concursos_quiebras = '0';
                    $card_juicios->pedidos_quiebra = '0';
                    $card_juicios->actor = '0';
                    $card_juicios->demandado_homonimo = '0';
                    $card_juicios->actores_homonimos = '0';
                }
            } else {
                $card_juicios->otros_juicios_comerciales = '0';
                $card_juicios->concursos_quiebras = '0';
                $card_juicios->pedidos_quiebra = '0';
                $card_juicios->actor = '0';
                $card_juicios->demandado_homonimo = '0';
                $card_juicios->actores_homonimos = '0';
            }
            $card_juicios->total = $card_juicios->actores_homonimos + $card_juicios->demandado_homonimo + $card_juicios->actor + $card_juicios->otros_juicios_comerciales + $card_juicios->remates + $card_juicios->concursos_quiebras + $card_juicios->pedidos_quiebra;
            // $partes_del_informe .= 'card_10: si <br>';
            $partes_del_informe .= '<li>Card Juicios --> Si </li>';
            $secciones = [];
            //$sesion_externa = (Session::get('externo')) ? true : false;
            if (isset(Session::get('usuario')->cliente[env('ID_INFORME_COMERCIAL')])) {
                $secciones = array_keys(Session::get('usuario')->cliente[ENV('ID_INFORME_COMERCIAL')]->secciones);
            } else if (isset(Session::get('usuario')->cliente[env('INFORME_API')])) {
                $secciones = array_keys(Session::get('usuario')->cliente[ENV('INFORME_API')]->secciones);
            }

            $antiguedad_situacion_1 = SQLConnection::backendStoreProcedure('obtener_cendeu_sit1_desde', array($cuit), true);

            $nivel_socioeconomico = new \stdClass();
            if ($tipo_persona == 'j') {
                if ($score > 50) {
                    $nivel_socioeconomico = SQLConnection::backendStoreProcedure('obtener_nivel_socioeconomico_2021', array($cuit, $tipo_persona), true);

                } else {
                    $nivel_socioeconomico->error = 'El Nivel del rango de ventas de la compañia no puede ser calculado';
                }
            } else {
                $nivel_socioeconomico = SQLConnection::backendStoreProcedure('obtener_nivel_socioeconomico_2021', array($cuit, $tipo_persona), true);
            }
            $sujeto_obligado = 0;
            $apocrifas = SQLConnection::backendStoreProcedure('obtener_apocrifas', array($cuit), true);
            $client_id = isset(Session::get('usuario')->cliente['client_id']) ? Session::get('usuario')->cliente['client_id'] : 0;
            if ($client_id > 0 and ($client_id == '2254875' || $client_id == '745239806')) {
                $respuestaso = SQLConnection::backendStoreProcedure('obtener_sujeto_obligado', array($cuit), true);
                if (!empty($respuestaso)) {
                    $sujeto_obligado = $respuestaso->sujeto_obligado;
                }
            }
            /* 06/11/2020 : Card de Limite de Crédito - Dependencia Económica */
            $solicitado = new \stdClass;
            $otorgado = new \stdClass;
            $cme = new \stdClass;
            $otorgado_cme = new \stdClass;
            $multiple = new \stdClass;
            $multiples_montos = [];
            $depecon = new \stdClass;
            $depebal = new \stdClass;
            $fecha_bal = new \stdClass;
            $datos_dep = new \stdClass;
            $contraparte_lcs = 0;
            $contraparte_de = 0;

            $contrapartes = SQLConnection::backendStoreProcedure('LN_cuit_contraparte_lcs', array($cliente_login, $cuit, 'LCS'), 'select');

            if (!empty($contrapartes)) {
                $id = $contrapartes[0]->contraparte;
                $contraparte_lcs = $id;
                $solicitado = SQLConnection::backendStoreProcedure('LN_dashboard_cliente', array('indicadores_contraparte', NULL, NULL, NULL, $id, 'monto_solicitado'), 'selectOne');
                $otorgado = SQLConnection::backendStoreProcedure('LN_dashboard_cliente', array('indicadores_contraparte', NULL, NULL, NULL, $id, 'monto_otorgado'), 'selectOne');
                $cme = SQLConnection::backendStoreProcedure('LN_dashboard_cliente', array('indicadores_contraparte', NULL, NULL, NULL, $id, 'CAPACIDAD_ENDEUDAMIENTO'), 'selectOne');
                $otorgado_cme = SQLConnection::backendStoreProcedure('LN_dashboard_cliente', array('indicadores_contraparte', NULL, NULL, NULL, $id, 'MONTO_OTORGADO_CME'), 'selectOne');
                $multiple = SQLConnection::backendStoreProcedure('LN_dashboard_cliente', array('indicadores_contraparte', NULL, NULL, NULL, $id, 'PORCENTAJE_CREDITO'), 'selectOne');
                if (!empty($multiple)) {
                    $multiples_montos = SQLConnection::backendStoreProcedure('LN_limite_credito_multiple', array($id), 'select');
                }
            }

            $contrapartes = SQLConnection::backendStoreProcedure('LN_cuit_contraparte_lcs', array($cliente_login, $cuit, 'DE'), 'select');

            if (!empty($contrapartes)) {
                $id = $contrapartes[0]->contraparte;
                $contraparte_de = $id;
                $depecon = SQLConnection::backendStoreProcedure('LN_dependencia_economica', array($id), 'selectOne');
                $depebal = SQLConnection::backendStoreProcedure('LN_dashboard_cliente', array('indicadores_contraparte', $cliente_login, null, null, $id, 'DEP_ECON_BALANCE'), 'selectOne');
                $fecha_bal = SQLConnection::backendStoreProcedure('LN_dashboard_cliente', array('indicadores_contraparte', $cliente_login, null, null, $id, 'DEP_ECON_BALANCE_FECHA'), 'selectOne');
                $datos_dep = SQLConnection::backendStoreProcedure('LN_dependencia_economica_balance', array($id), 'selectOne');
            }
            //
            $vista = view('informe-comercial-nuevo/brief_nuevo')->with(compact('card_score', 'card_bancos', 'card_cheques', 'card_domicilios', 'card_empleados', 'card_fiscales', 'apocrifas', 'card_comex', 'card_personas_relacionadas', 'card_sociedades_relacionadas', 'json', 'p_fisica', 'debug_score', 'riesgo_fiscal', 'graf_pdf_empleados', 'graf_pdf_financiero', 'graf_pdf_cheques', 'graf_pdf_score', 'mostrar_grafico_card_comex', 'graf_pdf_comex', 'idp', 'card_juicios', 'nivel_socioeconomico', 'antiguedad_situacion_1', 'cheque_ultimo_rechazo_desde', 'sujeto_obligado', 'solicitado', 'otorgado', 'cme', 'otorgado_cme', 'multiple', 'multiples_montos', 'depecon', 'depebal', 'fecha_bal', 'datos_dep', 'contraparte_de', 'contraparte_lcs', 'partes_del_informe'))->render();
            //
            if (!$json) {
                return $vista;
            }
            return \Response::json(
                array(
                    'view' => $vista,
                    'info' => compact('score', 'cheques', 'financiero', 'env', 'card_empleados', 'grafico_cheques', 'secciones', 'p_fisica', 'card_comex', 'mostrar_grafico_card_comex', 'defuncion', 'card_fiscales', 'vitalidad', 'motivo_vitalidad', 'menor_de_edad', 'card_bancos', 'idp', 'imagen_fidelitas', 'cuit', 'partes_del_informe')
                ),
                200,
                [],
                JSON_NUMERIC_CHECK
            );

        } catch (\Throwable $th) {
            echo ($th->getMessage() . ' ' . $th->getLine());
            die();
            /* SQLConnection::control_erores('MainController', 'obtenerBrief', $th->getMessage() . " L: " . $th->getLine() . " - DESARROLLO");
            Misc::enviarMail_errores('rami.aleid@fidelitas.com.ar', 'alejandro.burgol@fidelitas.com.ar', $partes_del_informe . $th->getMessage() . " L: " . $th->getLine() . " - DESARROLLO", $subject = "Fidelitas");
            http_response_code(500);
            die(); */
        }
    }

    // FUNCION UTILIZADA POR BRIEF
    public function generarGraficoCheques($grafico_cheques, $meses)
    {
        $grafico_cheques_ordenados['total'] = 0;
        for ($i = 0; $i < $meses; $i++) {
            $periodo[$i] = date("Y-m", strtotime(date("Y-m") . " -$i months"));
            $grafico_cheques_ordenados['abonado'][$periodo[$i]] = 0;
            $grafico_cheques_ordenados['pendiente_de_pago'][$periodo[$i]] = 0;
            $grafico_cheques_ordenados['defectos_formales'][$periodo[$i]] = 0;
        }
        sort($periodo);
        //$periodo = array_values($periodo);
        if ($grafico_cheques) {
            foreach ($grafico_cheques as $key_cheque => $cheque) {
                foreach ($periodo as $key_mes => $mes) {

                    if ($mes == $cheque->fecha) {
                        if ($cheque->id_causa == 1) {
                            $grafico_cheques_ordenados['total'] += 1;
                            $grafico_cheques_ordenados['defectos_formales'][$mes] += 1;
                        } else {
                            if ($cheque->abonado == 1) {
                                $grafico_cheques_ordenados['total'] += 1;
                                $grafico_cheques_ordenados['abonado'][$mes] += 1;
                            } else {
                                $grafico_cheques_ordenados['total'] += 1;
                                $grafico_cheques_ordenados['pendiente_de_pago'][$mes] += 1;
                            }
                        }
                    }
                }
            }
        }
        //sort($grafico_cheques_ordenados['abonado']);
        if (isset($grafico_cheques_ordenados['defectos_formales'])) {
            ksort($grafico_cheques_ordenados['defectos_formales']);
        }
        if (isset($grafico_cheques_ordenados['abonado'])) {
            ksort($grafico_cheques_ordenados['abonado']);
        }
        if (isset($grafico_cheques_ordenados['pendiente_de_pago'])) {
            ksort($grafico_cheques_ordenados['pendiente_de_pago']);
        }
        return $grafico_cheques_ordenados;
    }

    // FUNCION QUE DEVUELVE SECCION FORMALES PARA IC
    public static function obtenerFormales($json = true)
    {
        $imagen_fidelitas = Misc::obtenerImagenFidelitas();
        $cuit = Request::input('cuit') ?? null;
        $id_padron = Request::input('idp') ?? null;

        /* 07/10/2021: para poder llamarlo desde led */
        $es_led = false;
        $id = Request::input('contraparte') ?? null;
        if (!$cuit) {
            $qcontrap = \DB::selectOne('EXEC dbo.LN_contrapartes_ ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array('select', $id, null, null, null, null, null, null, null, null, null, null, null, null, null));
            $cuit = $qcontrap->identificacion ?? null;
            $json = false;
            $es_led = true;
        }

        if (!$id_padron) {
            $idp = SQLConnection::obtenerIdPadron($cuit);
            $id_padron = $idp->id_padron;
        }

        $fisica_juridica = Misc::tipoPersona($cuit);
        $persona_fisica = ($fisica_juridica == 'F') ? true : false;
        $persona = [];
        $sociedades = [];
        $empleado_de = [];
        $empleados = [];
        $defuncion = [];
        $razon_social = SQLConnection::obtenerRazonSocial($cuit)->nombre_persona;
        $usuario = Session::get('usuario');
        $cliente = $usuario->cliente['client_id'];
        $comentarios = SQLConnection::obtenerComentario($cuit, $cliente);
        $inscripciones = SQLConnection::obtenerInscripciones($cuit);
        $padron_actividades = SQLConnection::obtenerPadronActividades($cuit);

        if (!$persona_fisica) {
            $nombres_anteriores = SQLConnection::backendCambiosNombres($cuit);
            $empleados = SQLConnection::obtenerEmpleados($cuit);
            $sociedades = SQLConnection::obtenerSociedades($cuit);
        } else {
            $dni = (int) substr($cuit, 2, -1);
            $defuncion = SQLConnection::obtenerDefuncion($cuit);
            $persona = SQLConnection::obtenerPersona($cuit);
            $empleado_de = SQLConnection::obtenerEmpleadoDe($cuit);
            $persona->edad = '';
            if (!empty($persona->fecha_nacimiento)) {
                $edad = Misc::calcularEdad($persona->fecha_nacimiento);
                if ($edad) {
                    $persona->edad = $edad;
                }
            }
        }

        $domicilios = new \stdClass;
        $formales = SQLConnection::obtenerDomicilios($cuit);
        $telefonos = SQLConnection::backendStoreProcedure('obtener_telefono', array($id_padron));
        $generales = [];
        //        
        $domicilios->telefonos = '';
        $domicilios->domicilio_fiscal = '';
        $domicilios->domicilio_legal = '';
        $domicilios->otros_domicilios = '';
        $domicilios->domicilio = '';
        foreach ($formales as $formal) {
            /* Telefonos */
            if (isset($formal->telefono) && $formal->telefono != "") {
                $domicilios->telefonos .= $formal->telefono . ' <br> ';
            }
            /* Domicilio Legal */
            if (strpos($formal->tipo_domicilio, 'L') !== false) {
                if (isset($domicilios->domicilio_legal) && $domicilios->domicilio_legal != '') {
                    if (strpos($formal->tipo_domicilio, 'D') === false && strpos($formal->tipo_domicilio, 'E') === false && strpos($formal->tipo_domicilio, 'F') === false) {
                        $domicilios->otros_domicilios .= Misc::armarDomicilio($formal->domicilio, $formal->codpos, $formal->loc_nombre, $formal->prv_nombre, $formal->pai_nombre) . '<br>';
                    }
                } else {
                    $domicilios->domicilio_legal = Misc::armarDomicilio($formal->domicilio, $formal->codpos, $formal->loc_nombre, $formal->prv_nombre, $formal->pai_nombre);
                }
            }
            /* Domicilio Fiscal */
            if (strpos($formal->tipo_domicilio, 'F') !== false) {
                if (isset($domicilios->domicilio_fiscal) && $domicilios->domicilio_fiscal != '') {
                    if (strpos($formal->tipo_domicilio, 'D') === false && strpos($formal->tipo_domicilio, 'E') === false && strpos($formal->tipo_domicilio, 'L') === false) {
                        $domicilios->otros_domicilios .= Misc::armarDomicilio($formal->domicilio, $formal->codpos, $formal->loc_nombre, $formal->prv_nombre, $formal->pai_nombre) . '<br>';
                    }
                } else {
                    $domicilios->domicilio_fiscal = Misc::armarDomicilio($formal->domicilio, $formal->codpos, $formal->loc_nombre, $formal->prv_nombre, $formal->pai_nombre);
                }
            }

            /* Domicilio Principal */
            if (strpos($formal->tipo_domicilio, 'D') !== false || strpos($formal->tipo_domicilio, 'E') !== false) {
                if (isset($domicilios->domicilio) && $domicilios->domicilio != '') {
                    if (strpos($formal->tipo_domicilio, 'F') === false && strpos($formal->tipo_domicilio, 'L') === false) {
                        $domicilios->otros_domicilios .= Misc::armarDomicilio($formal->domicilio, $formal->codpos, $formal->loc_nombre, $formal->prv_nombre, $formal->pai_nombre) . '<br>';
                    }
                } else {
                    $domicilios->domicilio = Misc::armarDomicilio($formal->domicilio, $formal->codpos, $formal->loc_nombre, $formal->prv_nombre, $formal->pai_nombre);
                }
            }
            /* Otros Domicilios */

            if (strpos($formal->tipo_domicilio, 'O') !== false && strpos($formal->tipo_domicilio, 'D') === false && strpos($formal->tipo_domicilio, 'E') === false && strpos($formal->tipo_domicilio, 'L') === false && strpos($formal->tipo_domicilio, 'F') === false) {
                $domicilios->otros_domicilios .= Misc::armarDomicilio($formal->domicilio, $formal->codpos, $formal->loc_nombre, $formal->prv_nombre, $formal->pai_nombre) . '<br>';
            }

        }

        if ($domicilios->domicilio == '' && $domicilios->domicilio_fiscal != '') {
            $domicilios->domicilio .= $domicilios->domicilio_fiscal;
        }

        if (isset($domicilios->domicilio_legal) && $domicilios->domicilio_legal != '') {
            $domicilios->otros_domicilios .= $domicilios->domicilio_legal . '<br>';
        }

        //$inscripciones  = SQLConnection::obtenerInscripciones($cuit,$id_padron);
        $claes = SQLConnection::obtenerClae($cuit);
        if ($claes) {
            foreach ($claes as $clae) {
                if ($clae->fecha_inicio_actividad) {
                    $fecha_inicio_actividad = $clae->fecha_inicio_actividad;
                }
            }
        }
        /*
            if ($es_led)
            {
                return view('/informes/formales')->with(compact(['sociedades','inscripciones','formales','domicilios','generales','claes','persona_fisica','persona','empleado_de','fecha_inicio_actividad','defuncion','empleados','razon_social','cuit','comentarios','padron_actividades', 'json','nombres_anteriores','id_padron','telefonos']));
            }
        */
        if (!isset($fecha_inicio_actividad)) {
            $fecha_inicio_actividad = NULL;
        }
        //--
        if (!isset($nombres_anteriores)) {
            $nombres_anteriores = NULL;
        }

        $logo_name = null;
        $logo_url = null;
        $file_exists = false;
        if (file_exists(env('PATH_DOCUMENTOS') . '/logos/' . $id . '.png')) {
            $logo_name = $id . '.png';
            $logo_url = env('RUTA_DOCUMENTOS') . '/logos/' . $logo_name;
        }
        if (null == $logo_name) {
            if (file_exists(env('PATH_DOCUMENTOS') . '/logos/' . $id . '.jpg')) {
                $logo_name = $id . '.jpg';
                $logo_url = env('RUTA_DOCUMENTOS') . '/logos/' . $logo_name;
            }
        }
        if (null == $logo_name) {
            if (file_exists(env('PATH_DOCUMENTOS') . '/logos/' . $id . '.gif')) {
                $logo_name = $id . '.gif';
                $logo_url = env('RUTA_DOCUMENTOS') . '/logos/' . $logo_name;
            }
        }

        $vista = \View::make('informe-comercial-nuevo/formales_nuevo')->with(compact('sociedades', 'inscripciones', 'formales', 'domicilios', 'generales', 'claes', 'persona_fisica', 'persona', 'empleado_de', 'fecha_inicio_actividad', 'defuncion', 'empleados', 'razon_social', 'cuit', 'comentarios', 'padron_actividades', 'json', 'nombres_anteriores', 'id_padron', 'telefonos', 'logo_url'))->render();

        if (!$json) {
            return $vista;
        }
        return \Response::json(
            array(
                'view' => $vista,
                'info' => compact('sociedades', 'persona', 'persona_fisica', 'imagen_fidelitas')

            )
            ,
            200,
            [],
            JSON_NUMERIC_CHECK
        );
    }

    // FUNCION QUE DEVUELVE SECCION COMERCIALES PARA IC
    public function obtenerComerciales($json = true)
    {
        $imagen_fidelitas = Misc::obtenerImagenFidelitas();
        $cuit = Request::input('cuit');

        /* 07/10/2021: para poder llamarlo desde led */

        $es_led = false;
        $id = Request::input('contraparte') ?? null;
        if (!$cuit) {
            $qcontrap = \DB::selectOne('EXEC dbo.LN_contrapartes_ ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array('select', $id, null, null, null, null, null, null, null, null, null, null, null, null, null));
            $cuit = $qcontrap->identificacion ?? null;
            $json = false;
            $es_led = true;
        }

        $consultas_ramos = SQLConnection::obtenerConsultasPorRamos($cuit);
        $seguros = SQLConnection::backendSeguros($cuit);
        $datos_generales = SQLConnection::obtenerDatosGenerales($cuit);
        $misc_truncate = '\App\Custom\Misc::truncate';
        $marcas = $this->obtenerMarcas();

        foreach ($datos_generales as $datos) {
            if ($datos->titulo == 'MARCAS, PATENTES Y LICENCIAS') {
                $datos->titulo = 'MPL';
            }
            $datos_generales_ordenados[$datos->titulo][] = $datos;
        }

        if (isset($datos_generales_ordenados)) {
            $datos_generales = $datos_generales_ordenados;
        } else {
            $datos_generales = '';
        }

        $consultas = [];
        $ramo = "";
        if ($consultas_ramos) {
            foreach ($consultas_ramos as $consulta) {
                $consultas[$consulta->descripcion][$consulta->antiguedad] = $consulta->cantidad;
            }
            foreach ($consultas as $key => $consulta) {
                if (!isset($consultas[$key]['entre_0_1'])) {
                    $consultas[$key]['entre_0_1'] = 0;
                }
                if (!isset($consultas[$key]['entre_1_2'])) {
                    $consultas[$key]['entre_1_2'] = 0;
                }
                if (!isset($consultas[$key]['entre_2_5'])) {
                    $consultas[$key]['entre_2_5'] = 0;
                }
                ksort($consultas[$key]);
            }

        }
        //$enviar_mail = '\App\Custom\Misc::enviarMail';
        $vista = \View::make('informe-comercial-nuevo/comerciales_nuevo')->with(compact('consultas', 'seguros', 'datos_generales', 'marcas', 'misc_truncate', 'json', 'es_led'))->render();
        //Session::put($cuit." ".date('Y-m-d').".comerciales",json_encode($vista));
        if (!$json) {
            return $vista;
        }
        /*
        if(!$json){
            return \View::make('informes/comerciales')->with(compact('consultas'))->render();
        }*/
        return \Response::json(
            array(
                'view' => $vista,
                'info' => compact('seguros', 'datos_generales', 'consultas', 'marcas', 'imagen_fidelitas')
            ),
            200,
            [],
            JSON_NUMERIC_CHECK
        );
    }

    // FUNCION UTILIZADA POR COMERCIALES
    public static function obtenerMarcas()
    {
        $token = Request::input('_token');
        $cuit = Request::input('cuit');
        /* 07/10/2021: para poder llamarlo desde led */

        $es_led = false;
        $id = Request::input('contraparte') ?? null;
        if (!$cuit) {
            $qcontrap = \DB::selectOne('EXEC dbo.LN_contrapartes_ ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array('select', $id, null, null, null, null, null, null, null, null, null, null, null, null, null));
            $cuit = $qcontrap->identificacion ?? null;
            $json = false;
            $es_led = true;
        }

        $marcas = SQLConnection::obtenerMarcas($cuit);
        if ($marcas) {
            $marcas_unificadas = [];
            foreach ($marcas as $key => $value) {
                if ($key == 0) {
                    $marcas_unificadas[] = $value;
                } else {
                    $item = false;
                    $index = false;
                    foreach ($marcas_unificadas as $key2 => $mu) {
                        if ($value->marca == $mu->marca && $value->tipo == $mu->tipo) {
                            $item = $value;
                            $index = $key2;
                            break;
                        }
                    }

                    if ($item) {
                        $marcas_unificadas[$index]->clase .= ',' . $value->clase;
                    } else {
                        $marcas_unificadas[] = $value;
                    }

                }

            }
            $marcas = $marcas_unificadas;
            foreach ($marcas as $key => $value) {
                //si no encuentra nuestra imagen , va a buscarla afuera
                $marcas[$key]->encontrada = false;
                if ($value->web == 'null') {
                    //obtener Imagen fuente externa
                    if (!file_exists('/var/www/html/compartido/marcas/' . $value->num_boletin . '/marcas/' . $value->num_acta . '.gif')) {
                        SQLConnection::cargarEstadoMarcasExterno($cuit, 0, 'web', $value->num_acta);
                        $value->web = 0;
                        $marcas[$key]->encontrada = false;
                    } else {
                        SQLConnection::cargarEstadoMarcasExterno($cuit, 1, 'web', $value->num_acta);
                        $value->web = 1;
                        $marcas[$key]->encontrada = true;
                    }
                }

                if ($value->directorio == null && $value->web == 0) {
                    //$imagen_marca_externa = Misc::obtenerImagenMarcasExterno($value->num_acta,$value->num_boletin);
                    $imagen_marca_externa = false;
                    if ($imagen_marca_externa) {
                        $marcas[$key]->encontrada = true;
                        SQLConnection::cargarEstadoMarcasExterno($cuit, 1, 'directorio', $value->num_acta);
                    } else {
                        $marcas[$key]->encontrada = false;
                        SQLConnection::cargarEstadoMarcasExterno($cuit, 0, 'directorio', $value->num_acta);
                    }

                }

                if ($value->web == 1 || $value->directorio == 1) {
                    $marcas[$key]->encontrada = true;
                }
                //$Web-$directorio ordenamiento en presentacion imagenes  
                $web[$key] = $value->web;
                $directorio[$key] = $value->directorio;
                $clase[$key] = $value->clase;

                //Ordenamiento de las clases de menor a mayor Y eliminacion de numeros repetidos
                $stringParts = str_split($marcas[$key]->clase);
                $out = explode(',', $marcas[$key]->clase);
                sort($out);
                $out = implode(',', $out);
                $marcas[$key]->clase = $out;
                $marcas[$key]->clase = implode(', ', array_unique(explode(',', $marcas[$key]->clase)));

                $nombre_marcas = trim($value->marca);
                $marcas[$key]->marca = $nombre_marcas;
                $tipo_marca = $value->tipo;
                if ($tipo_marca == 'D') {
                    $marcas[$key]->tipo = 'DENOMINATIVA';
                } elseif ($tipo_marca == 'F') {
                    $marcas[$key]->tipo = 'FIGURATIVA';
                } elseif ($tipo_marca == 'M') {
                    $marcas[$key]->tipo = 'MIXTA';
                }


            }//endforeach
            //ordena array para que se muestren marcas con imagenes en los primeros resultados
            array_multisort($web, SORT_DESC, $directorio, SORT_DESC, $marcas);
        } else {
            return $marcas = '';
        }

        return $marcas;
    }

    // FUNCION QUE DEVUELVE SECCION FISCALES
    public function obtenerFiscales($json = true, $pdf_inscripcion = '')
    {
        $imagen_fidelitas = Misc::obtenerImagenFidelitas();
        $cuit = Request::input('cuit');
        $id_padron = Request::input('idp');

        /* 07/10/2021: para poder llamarlo desde led */
        $es_led = false;
        $id = Request::input('contraparte') ?? null;
        if (!$cuit) {
            $qcontrap = \DB::selectOne('EXEC dbo.LN_contrapartes_ ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array('select', $id, null, null, null, null, null, null, null, null, null, null, null, null, null));
            $cuit = $qcontrap->identificacion ?? null;
            $json = false;
            $es_led = true;
        }

        if (!$id_padron) {
            $idp = SQLConnection::obtenerIdPadron($cuit);
            $id_padron = $idp->id_padron;
        }

        $inscripciones = SQLConnection::obtenerInscripciones($cuit);
        $arba = SQLConnection::obtenerArba($cuit);
        $claes = SQLConnection::obtenerClae($cuit);
        $sircreb = SQLConnection::obtenerSircreb($cuit);
        $fuentes_procesadas = SQLConnection::obtenerUltimoPeriodoProcesado("sircreb");
        $padron_impuestos = SQLConnection::obtenerPadronImpuestos($id_padron);
        $padron_actividades = SQLConnection::obtenerPadronActividades($id_padron);
        $padron_caracterizaciones = SQLConnection::obtenerPadronCaracterizaciones($id_padron);
        $obtener_domicilios = SQLConnection::obtenerDomicilios($cuit);
        $domicilios = new \stdClass;
        $domicilios->domicilio_fiscal = '';
        $tipo_persona = (substr($cuit, 0, 1) != '3') ? 'f' : 'j';
        $razon_social = SQLConnection::obtenerRazonSocial($cuit)->nombre_persona;
        $defuncion = SQLConnection::obtenerDefuncion($cuit);

        foreach ($padron_impuestos as $key => $value) {
            if (isset($value->fecha_inscripcion)) {
                $value->fecha_inscripcion = Misc::convertirFormatoFecha($value->fecha_inscripcion, 'Y-m-d', 'd/m/Y');
            } else {
                $value->fecha_inscripcion = '';
            }
        }

        foreach ($obtener_domicilios as $domicilio) {
            //if($domicilio->tipo_domicilio == 'F'){
            if (strpos($domicilio->tipo_domicilio, 'F') !== false) {
                if ($domicilio->domicilio != '') {
                    $domicilios->domicilio_fiscal = Misc::armarDomicilio($domicilio->domicilio, $domicilio->codpos, $domicilio->loc_nombre, $domicilio->prv_nombre, $domicilio->pai_nombre);
                    break;
                } else {
                    $domicilios->domicilio_fiscal = '';
                }
            }
        }

        $fiscal_sircreb = array();

        if ($sircreb) {
            // Estableciendo las fechas correctas
            foreach ($sircreb as $key => $info) {
                $sircreb[$key]->fecha_publicacion = Misc::convertDate($info->fecha_publicacion, 'd/m/Y');
                $sircreb[$key]->vigencia_hasta = Misc::convertDate($info->vigencia_hasta, 'd/m/Y');
                $sircreb[$key]->vigencia_desde = Misc::convertDate($info->vigencia_desde, 'd/m/Y');
            }
            $anio_actual = date("Y");
            $mes_actual = date("n");
            $fiscal_sircreb_anios = array();
            $fiscal_trimestres = array(
                0 => array(1, 2, 3),
                1 => array(4, 5, 6),
                2 => array(7, 8, 9),
                3 => array(10, 11, 12),
            );
            // Recorriendo fechas 
            foreach ($sircreb as $key => $value) {
                //$fiscal_mes  = substr($value->fecha_publicacion, 3,2);
                //$fiscal_anio = substr($value->fecha_publicacion, 6,4);
                $fiscal_mes = substr($value->vigencia_desde, 3, 2);
                $fiscal_mes = (int) $fiscal_mes;
                $fiscal_anio = substr($value->vigencia_desde, 6, 4);
                $fiscal_anio = (int) $fiscal_anio;
                // Años fiscales desde/hasta
                if ($key == 0) {
                    $diferencia_anios = $anio_actual - $fiscal_anio;
                    for ($x = 0; $x <= $diferencia_anios; $x++) {
                        $nuevo_anio = $fiscal_anio + $x;
                        $fiscal_sircreb_anios[$nuevo_anio] = $nuevo_anio;
                    }
                }
                // Estableciendo Trimestres
                foreach ($fiscal_trimestres as $key2 => $trimestre) {
                    foreach ($trimestre as $value_trimestre) {
                        if ($fiscal_mes == $value_trimestre) {
                            $fiscal_sircreb[$fiscal_anio][$key2] = "Riesgo Fiscal";
                        } else {
                            if (!isset($fiscal_sircreb[$fiscal_anio][$key2])) {
                                $fiscal_sircreb[$fiscal_anio][$key2] = "-";
                            }
                        }
                    }
                }
            }
            if ($fuentes_procesadas) {
                $fuentes_procesadas = Misc::convertDate($fuentes_procesadas, 'd/m/Y');
                $mes_fuente_procesada = substr($fuentes_procesadas, 3, 2);
            }
            // Estableciendo los años/trimestres completos
            foreach ($fiscal_sircreb_anios as $anio) {
                if (!isset($fiscal_sircreb[$anio])) {
                    foreach ($fiscal_trimestres as $key => $trimestre) {
                        foreach ($trimestre as $value_trimestre) {
                            // Evaluando si existe registro fiscal en el año que esta transcurriendo
                            if (($anio_actual == $anio) && ($value_trimestre >= $mes_actual)) {
                                if ((isset($mes_fuente_procesada)) && ($value_trimestre == $mes_fuente_procesada)) {
                                    $fiscal_sircreb[$anio][$key] = "-";
                                } else {
                                    $fiscal_sircreb[$anio][$key] = "";
                                }
                            } else {
                                $fiscal_sircreb[$anio][$key] = "-";
                            }
                        }
                    }
                }
            }
            ksort($fiscal_sircreb);
        }

        /*
        if($claes){
            foreach($claes as $clae){
            if($clae->fecha_inicio_actividad){
            $fecha_inicio_actividad =  $clae->fecha_inicio_actividad;
            }
            }
        }
        */

        $link_pdf = env('AFIP_URL_COMPARTIDO_PEGAR') . '/' . substr($cuit, 0, 2) . '/' . substr($cuit, 2, 3) . '/' . substr($cuit, 5, 3) . '/' . $cuit . '.pdf';
        $link_imagen = env('AFIP_URL_COMPARTIDO_PEGAR') . '/' . substr($cuit, 0, 2) . '/' . substr($cuit, 2, 3) . '/' . substr($cuit, 5, 3) . '/' . $cuit . '.png';
        // $link_pdf_vista = env('AFIP_URL_COMPARTIDO_LEER').'/'.substr($cuit, 0, 2).'/'.substr($cuit, 2, 3).'/'.substr($cuit, 5, 3).'/'.$cuit.'.pdf';
        $link_pdf_vista = env('AFIP_URL_COMPARTIDO_LEER') . '/' . substr($cuit, 0, 2) . '/' . substr($cuit, 2, 3) . '/' . substr($cuit, 5, 3) . '/' . $cuit . '.png';
        $pdf_disponible = false;
        $texto_pdf = '';

        //if (file_exists($link_pdf) && (filesize($link_pdf) > 3000)) {
        if ((file_exists($link_pdf) && Session::get('html')) || (file_exists($link_imagen) && !Session::get('html'))) {
            $pdf_disponible = true;
        } else {
            $exec = SQLConnection::backendStoreProcedure('afip_texto_sin_constancia', array($id_padron), true);
            $texto_pdf = ($exec->texto_constancia) ?? '';
        }

        $apocrifas = SQLConnection::backendStoreProcedure('obtener_apocrifas', array($cuit), false);
        $aportes = ($tipo_persona == 'f') ? SQLConnection::backendStoreProcedure('backend_mis_aportes', array($cuit, NULL, 12, 1), false) : SQLConnection::backendStoreProcedure('mis_aportes_empresa', array($cuit), false);
        $misaportes = [];

        if ($tipo_persona == 'f') {
            foreach ($aportes as $x => $aporte) {
                $misaportes[$aporte->nombre_empleador . ' - ' . $aporte->identificador_empleador . ' ' . $aporte->cuit_empleador][$aporte->periodo_str]['ddjj'] = $aporte->ddjj;
                $misaportes[$aporte->nombre_empleador . ' - ' . $aporte->identificador_empleador . ' ' . $aporte->cuit_empleador][$aporte->periodo_str]['aportes_os'] = $aporte->aportes_os;
                $misaportes[$aporte->nombre_empleador . ' - ' . $aporte->identificador_empleador . ' ' . $aporte->cuit_empleador][$aporte->periodo_str]['aportes_ss'] = $aporte->aportes_ss;
                $misaportes[$aporte->nombre_empleador . ' - ' . $aporte->identificador_empleador . ' ' . $aporte->cuit_empleador][$aporte->periodo_str]['contr_patronal'] = $aporte->contr_patronal;
            }
        } else {
            foreach ($aportes as $x => $aporte) {
                /*
                $misaportes[$aporte->periodo_str]['ddjj'] = $aporte->ddjj;
                $misaportes[$aporte->periodo_str]['aportes_os'] = $aporte->aportes_os;
                $misaportes[$aporte->periodo_str]['aportes_ss'] = $aporte->aportes_ss;
                $misaportes[$aporte->periodo_str]['contr_patronal'] = $aporte->contr_patronal;
                */
                /*
                Si hay distintos en el mismo periodo gana el mayor 
                tomando este orden
                IMPAGO
                PAGO PARCIAL 
                PAGO (lo pasamos como PAGO TOTAL para que la comparacion de < haga el ordenamiento que queremos (pago total > pago parcial), despues lo volvemos a poner como PAGO)
                */
                if ($aporte->ddjj == 'PAGO') {
                    $aporte->ddjj = 'PAGO TOTAL';
                }
                if (!isset($misaportes[$aporte->periodo_str]['ddjj']) || $misaportes[$aporte->periodo_str]['ddjj'] < $aporte->ddjj) {
                    $misaportes[$aporte->periodo_str]['ddjj'] = $aporte->ddjj;
                }

                if ($aporte->aportes_os == 'PAGO') {
                    $aporte->aportes_os = 'PAGO TOTAL';
                }
                if (!isset($misaportes[$aporte->periodo_str]['aportes_os']) || $misaportes[$aporte->periodo_str]['aportes_os'] < $aporte->aportes_os) {
                    $misaportes[$aporte->periodo_str]['aportes_os'] = $aporte->aportes_os;
                }

                if ($aporte->aportes_ss == 'PAGO') {
                    $aporte->aportes_ss = 'PAGO TOTAL';
                }
                if (!isset($misaportes[$aporte->periodo_str]['aportes_ss']) || $misaportes[$aporte->periodo_str]['aportes_ss'] < $aporte->aportes_ss) {
                    $misaportes[$aporte->periodo_str]['aportes_ss'] = $aporte->aportes_ss;
                }

                if ($aporte->contr_patronal == 'PAGO') {
                    $aporte->contr_patronal = 'PAGO TOTAL';
                }
                if (!isset($misaportes[$aporte->periodo_str]['contr_patronal']) || $misaportes[$aporte->periodo_str]['contr_patronal'] < $aporte->contr_patronal) {
                    $misaportes[$aporte->periodo_str]['contr_patronal'] = $aporte->contr_patronal;
                }
            }

            foreach ($misaportes as $x => $aporte) {
                foreach ($aporte as $z => $ap) {
                    if ($ap == 'PAGO TOTAL') {
                        $misaportes[$x][$z] = 'PAGO';
                    }
                }
            }


        }

        /*$aporteshtml = (sizeof($misaportes) > 0) ? utf8_decode(Misc::decrypt($misaportes[0]->source_html)) : NULL;*/
        // Se agrego esta ruta para que en backend7 pueda verse la imagen cuando se genera el pdf.
        $link_pdf_vista = env('URL_COMPARTIDO_VISTAPDF') . env('AFIP_URL_COMPARTIDO_LEER') . '/' . substr($cuit, 0, 2) . '/' . substr($cuit, 2, 3) . '/' . substr($cuit, 5, 3) . '/' . $cuit . '.png';
        //$link_pdf_vista = asset(env('AFIP_URL_COMPARTIDO_LEER').'/'.substr($cuit, 0, 2).'/'.substr($cuit, 2, 3).'/'.substr($cuit, 5, 3).'/'.$cuit.'.png');

        //$vista = \View::make('informes/fiscales')->with(compact('inscripciones','arba','claes','fecha_inicio_actividad','datos_generales','sircreb','domicilios', 'fiscal_sircreb','pdf_disponible','padron_impuestos','padron_actividades','padron_caracterizaciones','tipo_persona','razon_social','defuncion', 'texto_pdf','pdf_inscripcion','link_pdf_vista', 'apocrifas', 'misaportes'))->render();
        $vista = \View::make('informe-comercial-nuevo/fiscales_nuevo')->with(compact('inscripciones', 'arba', 'claes', 'sircreb', 'domicilios', 'fiscal_sircreb', 'pdf_disponible', 'padron_impuestos', 'padron_actividades', 'padron_caracterizaciones', 'tipo_persona', 'razon_social', 'defuncion', 'texto_pdf', 'pdf_inscripcion', 'link_pdf_vista', 'apocrifas', 'misaportes'))->render();
        //Session::put($cuit." ".date('Y-m-d').".fiscales",json_encode($vista));

        if (!$json) {
            return $vista;
        }
        return \Response::json(
            array(
                'view' => $vista,
                'info' => ['pdf_disponible' => $pdf_disponible],
                'info_varios' => compact('domicilios', 'inscripciones', 'padron_impuestos', 'padron_actividades', 'padron_caracterizaciones', 'fiscal_sircreb', 'arba', 'pdf_disponible', 'defuncion', 'imagen_fidelitas', 'link_pdf_vista', 'apocrifas', 'misaportes')
            ),
            200,
            [],
            JSON_NUMERIC_CHECK
        );
    }

    // FUNCION QUE DEVUELVE SECCION CONTABLES
    public function obtenerContables($json = true, $grafico_capital_de_trabajo = '', $grafico_patrimonial = '', $grafico_solvencia = '', $grafico_liquidez_corriente = '', $grafico_endeudamiento_corriente = '', $grafico_performance = '', $grafico_efecto_palanca = '', $grafico_ventas = '', $grafico_gastos_totales_sobre_ventas = '', $tipo_impresion = '')
    {
        $imagen_fidelitas = Misc::obtenerImagenFidelitas();
        $cuit = Request::input('cuit');
        $ver_todos = 'N';
        $respuesta_activo = self::arrayRever(SQLConnection::obtenerActivoResumido($cuit, $ver_todos));
        //$respuesta_activo               = Misc::procesarBalance($respuesta_activo);
        $respuesta_pasivo = self::arrayRever(SQLConnection::obtenerPasivoResumido($cuit, $ver_todos));
        //$respuesta_pasivo               = Misc::procesarBalance($respuesta_pasivo);
        $respuesta_estado = self::arrayRever(SQLConnection::obtenerEstadodeResultadosResumido($cuit, $ver_todos));
        //$respuesta_estado               = Misc::procesarBalance($respuesta_estado);
        $indices_de_gestion = self::arrayRever(SQLConnection::obtenerIndicesDeGestionResumido($cuit, $ver_todos));
        //$indices_de_gestion             = Misc::procesarBalance($indices_de_gestion);
        $respuesta_activo_extendido = self::arrayRever(SQLConnection::obtenerActivo($cuit, $ver_todos));
        //$respuesta_activo_extendido     = Misc::procesarBalance($respuesta_activo_extendido);
        $respuesta_pasivo_extendido = self::arrayRever(SQLConnection::obtenerPasivo($cuit, $ver_todos));
        //$respuesta_pasivo_extendido     = Misc::procesarBalance($respuesta_pasivo_extendido);
        $respuesta_estado_extendido = self::arrayRever(SQLConnection::obtenerEstadodeResultados($cuit, $ver_todos));
        //$respuesta_estado_extendido     = Misc::procesarBalance($respuesta_estado_extendido);
        $indices_de_gestion_extendido = self::arrayRever(SQLConnection::obtenerIndicesDeGestion($cuit, $ver_todos));
        //$indices_de_gestion_extendido   = Misc::procesarBalance($indices_de_gestion_extendido);

        $contables = self::calcularContables($respuesta_activo, $respuesta_pasivo, $respuesta_estado, $indices_de_gestion);
        $contables_extendido = self::calcularContables($respuesta_activo_extendido, $respuesta_pasivo_extendido, $respuesta_estado_extendido, $indices_de_gestion_extendido);
        $activo_extendido = $contables_extendido['activo'];
        $pasivo_extendido = $contables_extendido['pasivo'];
        $estado_de_resultados_extendido = $contables_extendido['estado_de_resultados'];
        $indices_extendido = $contables_extendido['indices_de_gestion'];
        $activo = $contables['activo'];
        $pasivo = $contables['pasivo'];
        $estado_de_resultados = $contables['estado_de_resultados'];
        $indices = $contables['indices_de_gestion'];
        $grafico_contable = $contables['graficos'];
        $registros_contables = $this->obtenerRegistrosContables($respuesta_activo, $respuesta_estado, $indices_de_gestion, $respuesta_activo_extendido, $respuesta_pasivo_extendido, $respuesta_estado_extendido, $indices_de_gestion_extendido);
        $traducciones_graficos = Misc::obtenerTraduccionesGraficos();
        $registro_act = $registros_contables['registro_act'];
        $registro_estado = $registros_contables['registro_estado'];
        $registro_ind_gestion = $registros_contables['registro_ind_gestion'];
        $registro_gestion_ext = $registros_contables['registro_gestion_ext'];
        $registro_act_ext = $registros_contables['registro_act_ext'];
        $registro_pas_ext = $registros_contables['registro_pas_ext'];
        $registro_estado_ext = $registros_contables['registro_estado_ext'];
        $registro_gestion_ext = $registros_contables['registro_gestion_ext'];
        $tipo_persona = (substr($cuit, 0, 1) != '3') ? 'f' : 'j';
        //------ VISTA ANTERIOR DE CONTABLES
        /* $vista = \View::make('informes/contables')->with(compact('activo','pasivo','estado_de_resultados','indices',
            'activo_extendido','pasivo_extendido','estado_de_resultados_extendido','indices_extendido','grafico_capital_de_trabajo','grafico_patrimonial','grafico_solvencia','grafico_liquidez_corriente','grafico_endeudamiento_corriente','grafico_performance','grafico_efecto_palanca','grafico_ventas','grafico_gastos_totales_sobre_ventas','json','registro_act',
            'registro_estado','registro_ind_gestion','registro_gestion_ext','registro_act_ext','registro_pas_ext','registro_estado_ext','registro_gestion_ext','tipo_impresion','ver_todos'))->render(); */
        //----- NUEVA SECCION DE CONTABLES
        $hay_analisis = 0;
        $nuevo_extendido = null;
        // SE FORZA QUE LA VERSION DEL BALANCE SEA LA EXTENDIDA
        $productobalance = (object) ['version_balance' => 'F'];
        // VARIABLE QUE DETERMINA QUE LA LLAMADA ES DESDE PARA EL INFORME COMERCIAL
        $desde_infomre = true;
        //-----
        $balances_data = SQLConnection::backendStoreProcedure('LN_balances_data', array($cuit, null, null), 'select');
        //------
        foreach ($balances_data as $key => $datos_balance) {
            $nuevo_extendido['endeudamiento_corriente'][] = $datos_balance->endeudamiento_corriente;
            $nuevo_extendido['capital_corriente_sobre_activo'][] = $datos_balance->capital_corriente_sobre_activo;
            $nuevo_extendido['rotacion_pasivo_corriente'][] = $datos_balance->rotacion_pasivo_corriente;
            $nuevo_extendido['rotacion_activos'][] = $datos_balance->rotacion_activos;
            $nuevo_extendido['meses_deuda'][] = $datos_balance->meses_deuda;
            $nuevo_extendido['dias_deuda'][] = $datos_balance->dias_deuda;
            $nuevo_extendido['margen_operativo'][] = $datos_balance->margen_operativo;
            $nuevo_extendido['ebitda'][] = $datos_balance->ebitda;
            $nuevo_extendido['ebitda_ventas'][] = $datos_balance->ebitda_ventas;
            $nuevo_extendido['etitda_intereses'][] = $datos_balance->etitda_intereses;
            $nuevo_extendido['gastos_financieros_ventas'][] = $datos_balance->gastos_financieros_ventas;
            $nuevo_extendido['gastos_comerciales_ventas'][] = $datos_balance->gastos_comerciales_ventas;
            $nuevo_extendido['gastos_administracion_ventas'][] = $datos_balance->gastos_administracion_ventas;
            $nuevo_extendido['gastos_totales_ventas'][] = $datos_balance->gastos_totales_ventas;
            $nuevo_extendido['inversiones_bienes_uso'][] = $datos_balance->inversiones_bienes_uso;
            $nuevo_extendido['vida_restante_bienes_uso'][] = $datos_balance->vida_restante_bienes_uso;
        }
        // CONFIGURACIONES DEL IDIOMA
        $servicios = isset(Session::get('usuario')->servicios) ? Session::get('usuario')->servicios : null;
        $idioma = 'esp';
        if (!is_null($servicios)) {
            foreach ($servicios as $servicio => $config) {
                if ($config->id_producto == env('ID_INFORME_COMERCIAL')) {
                    $idioma = $config->userLanguage;
                }
                continue;
            }
        }
        // FIN DE LA CONFIGURACION DE IDIOMA
        //-----
        $vista = \View::make('/informe-comercial-nuevo/contables_ext_nuevo')->with(compact(
            'productobalance',
            'nuevo_extendido',
            'hay_analisis',
            'activo',
            'pasivo',
            'estado_de_resultados',
            'indices',
            'activo_extendido',
            'pasivo_extendido',
            'estado_de_resultados_extendido',
            'indices_extendido',
            'grafico_capital_de_trabajo',
            'grafico_patrimonial',
            'grafico_solvencia',
            'grafico_liquidez_corriente',
            'grafico_endeudamiento_corriente',
            'grafico_performance',
            'grafico_efecto_palanca',
            'grafico_ventas',
            'grafico_gastos_totales_sobre_ventas',
            'json',
            'registro_act',
            'registro_estado',
            'registro_ind_gestion',
            'registro_gestion_ext',
            'registro_act_ext',
            'registro_pas_ext',
            'registro_estado_ext',
            'registro_gestion_ext',
            'tipo_impresion',
            'desde_infomre'
        ))->render();
        //--- FIN DE NUEVA SECCION CONTABLES
        if (!$json) {
            return $vista;
        }
        //Session::put($cuit." ".date('Y-m-d').".contables",json_encode($vista));
        $grafico_exportable = false;
        if (isset(Session::get('usuario')->cliente[env('ID_INFORME_COMERCIAL')])) {
            if (Session::get('usuario')->cliente[env('ID_INFORME_COMERCIAL')]->client_id == 2254875) {
                $grafico_exportable = true;
            }
        }
        return \Response::json(
            array(
                'view' => $vista,
                'info' => compact('activo', 'pasivo', 'estado_de_resultados', 'indices', 'grafico_contable', 'grafico_exportable', 'traducciones_graficos', 'tipo_persona', 'imagen_fidelitas', 'idioma')
            )
            ,
            200,
            [],
            JSON_NUMERIC_CHECK
        );
    }

    // FUNCION UTILIZADA POR CONTABLES
    private function obtenerRegistrosContables($respuesta_activo, $respuesta_estado, $indices_de_gestion, $respuesta_activo_extendido, $respuesta_pasivo_extendido, $respuesta_estado_extendido, $indices_de_gestion_extendido)
    {
        $registro_act = [];
        $registro_estado = [];
        $registro_ind_gestion = [];
        $registro_act_ext = [];
        $registro_pas_ext = [];
        $registro_estado_ext = [];
        $registro_gestion_ext = [];
        //ACTIVO-PASIVO-PN resumido
        foreach ($respuesta_activo as $key_array => $objeto) {

            $registro_act['periodo'][] = $objeto->fecha_balance;
            $registro_act['estado'][] = $objeto->estado;
            $registro_act['ac_total'][] = $objeto->ac_total;
            $registro_act['anc_total'][] = $objeto->anc_total;
            $registro_act['act_total'][] = $objeto->act_total;
            $registro_act['pc_total'][] = $objeto->pc_total;
            $registro_act['pnc_total'][] = $objeto->pnc_total;
            $registro_act['pas_total'][] = $objeto->pas_total;
            $registro_act['patrimonio'][] = $objeto->patrimonio;
            $registro_act['nombre_moneda'] = $objeto->nombre_moneda;
            $registro_act['ruta_archivo'][] = $objeto->ruta_archivo;
            $registro_act['fecha_amd'][] = $objeto->fecha_order;
            $registro_act['cuit'][] = $objeto->cuit;
        }
        //ESTADO DE RESULTADO resumido
        foreach ($respuesta_estado as $key_array => $objeto) {
            $registro_estado['periodo'][] = $objeto->fecha_balance;
            $registro_estado['estado'][] = $objeto->estado;
            $registro_estado['res_vtanet'][] = $objeto->res_vtanet;
            $registro_estado['ganancia'][] = $objeto->ganancia;
            $registro_estado['nombre_moneda'] = $objeto->nombre_moneda;
        }
        //INDICE DE GESTION resumido
        foreach ($indices_de_gestion as $key_array => $objeto) {
            $registro_ind_gestion['periodo'][] = $objeto->fecha_balance;
            $registro_ind_gestion['estado'][] = $objeto->estado;
            $registro_ind_gestion['ind_liqcorr'][] = $objeto->ind_liqcorr;
            $registro_ind_gestion['ind_endeu'][] = $objeto->ind_endeu;
            //se cambio "ind_solvencia_pat" x "ind_solvencia"
            //se cambio "ind_solvencia" x "ind_solvencia_pat" 28-12-2017 a pedido de edu
            $registro_ind_gestion['ind_solvencia_pat'][] = $objeto->ind_solvencia_pat;
            $registro_ind_gestion['ind_captra'][] = $objeto->ind_captra;
            $registro_ind_gestion['ind_rentabilidad'][] = $objeto->ind_rentabilidad;
            $registro_ind_gestion['ind_rotact'][] = $objeto->ind_rotact;
            $registro_ind_gestion['ind_rotinv'][] = $objeto->ind_rotinv;
            $registro_ind_gestion['ind_marbru'][] = $objeto->ind_marbru;
            $registro_ind_gestion['nombre_moneda'] = $objeto->nombre_moneda;
        }

        // ACTIVO extendido
        foreach ($respuesta_activo_extendido as $key_array => $objeto) {
            $registro_act_ext['periodo'][] = $objeto->fecha_balance;
            $registro_act_ext['estado'][] = $objeto->estado;
            $registro_act_ext['ac_cajban'][] = $objeto->ac_cajban;
            $registro_act_ext['ac_inver'][] = $objeto->ac_inver;
            $registro_act_ext['ac_crevta'][] = $objeto->ac_crevta;
            $registro_act_ext['ac_otrcre'][] = $objeto->ac_otrcre;
            $registro_act_ext['ac_biecam'][] = $objeto->ac_biecam;
            $registro_act_ext['ac_bietan'][] = $objeto->ac_bietan;
            $registro_act_ext['ac_otract'][] = $objeto->ac_otract;
            $registro_act_ext['ac_total'][] = $objeto->ac_total;
            $registro_act_ext['anc_crevta'][] = $objeto->anc_crevta;
            $registro_act_ext['anc_otrcre'][] = $objeto->anc_otrcre;
            $registro_act_ext['anc_inver'][] = $objeto->anc_inver;
            $registro_act_ext['anc_actint'][] = $objeto->anc_actint;
            $registro_act_ext['anc_otract'][] = $objeto->anc_otract;
            $registro_act_ext['anc_bieuso'][] = $objeto->anc_bieuso;
            $registro_act_ext['anc_bieusovo'][] = $objeto->anc_bieusovo;
            $registro_act_ext['anc_depacu'][] = $objeto->anc_depacu;
            $registro_act_ext['anc_total'][] = $objeto->anc_total;
            $registro_act_ext['act_total'][] = $objeto->act_total;
            $registro_act_ext['nombre_moneda'] = $objeto->nombre_moneda;
        }
        //PASIVOS extendidos
        foreach ($respuesta_pasivo_extendido as $key_array => $objeto) {
            $registro_pas_ext['periodo'][] = $objeto->fecha_balance;
            $registro_pas_ext['estado'][] = $objeto->estado;
            $registro_pas_ext['pc_ctapag'][] = $objeto->pc_ctapag;
            $registro_pas_ext['pc_presta'][] = $objeto->pc_presta;
            $registro_pas_ext['pc_remune'][] = $objeto->pc_remune;
            $registro_pas_ext['pc_carfis'][] = $objeto->pc_carfis;
            $registro_pas_ext['pc_antcli'][] = $objeto->pc_antcli;
            $registro_pas_ext['pc_otrpas'][] = $objeto->pc_otrpas;
            $registro_pas_ext['pc_total'][] = $objeto->pc_total;
            $registro_pas_ext['pnc_cuepag'][] = $objeto->pnc_cuepag;
            $registro_pas_ext['pnc_previ'][] = $objeto->pnc_previ;
            $registro_pas_ext['pnc_presta'][] = $objeto->pnc_presta;
            $registro_pas_ext['pnc_otrpas'][] = $objeto->pnc_otrpas;
            $registro_pas_ext['pnc_deufis'][] = $objeto->pnc_deufis;
            $registro_pas_ext['pnc_total'][] = $objeto->pnc_total;
            $registro_pas_ext['pas_total'][] = $objeto->pas_total;
            $registro_pas_ext['capsoc'][] = $objeto->capsoc;
            $registro_pas_ext['res_noasig'][] = $objeto->res_noasig;
            $registro_pas_ext['patrimonio'][] = $objeto->patrimonio;
            $registro_pas_ext['nombre_moneda'] = $objeto->nombre_moneda;

        }
        //ESTADO DE RESULTADO extendido
        foreach ($respuesta_estado_extendido as $key_array => $objeto) {
            $v1 = $objeto->res_vtanet;
            $v2 = $objeto->res_cosmer;
            $resultado_bruto = $v1 - $v2;
            $registro_estado_ext['periodo'][] = $objeto->fecha_balance;
            $registro_estado_ext['estado'][] = $objeto->estado;
            $registro_estado_ext['res_vtanet'][] = $objeto->res_vtanet;
            $registro_estado_ext['res_compras'][] = $objeto->res_compras;
            $registro_estado_ext['res_cosmer'][] = $objeto->res_cosmer;
            $registro_estado_ext['amortiza'][] = $objeto->amortiza;
            $registro_estado_ext['res_gascom'][] = $objeto->res_gascom;
            $registro_estado_ext['res_gasadm'][] = $objeto->res_gasadm;
            $registro_estado_ext['res_gasfin'][] = $objeto->res_gasfin;
            $registro_estado_ext['res_otrosegr'][] = $objeto->res_otrosegr;
            $registro_estado_ext['res_otrosing'][] = $objeto->res_otrosing;
            $registro_estado_ext['res_resfin'][] = $objeto->res_resfin;
            $registro_estado_ext['res_iva'][] = $objeto->res_iva;
            $registro_estado_ext['ganancia'][] = $objeto->ganancia;
            $registro_estado_ext['resultado_bruto'][] = $resultado_bruto;
            $registro_estado_ext['nombre_moneda'] = $objeto->nombre_moneda;
        }
        //INDICE DE GESTION extendido
        foreach ($indices_de_gestion_extendido as $key_array => $objeto) {
            $registro_gestion_ext['periodo'][] = $objeto->fecha_balance;
            $registro_gestion_ext['estado'][] = $objeto->estado;
            $registro_gestion_ext['ind_liqcorr'][] = $objeto->ind_liqcorr;
            $registro_gestion_ext['ind_liqseca'][] = $objeto->ind_liqseca;
            $registro_gestion_ext['ind_endeu'][] = $objeto->ind_endeu;
            $registro_gestion_ext['ind_endeuact'][] = $objeto->ind_endeuact;
            //$registro_gestion_ext['ind_solvencia'][] = $objeto->ind_solvencia; se remplazo el 28/12/2017 a pedido de Edu x "ind_solvencia_pat"
            $registro_gestion_ext['ind_solvencia_pat'][] = $objeto->ind_solvencia_pat;
            $registro_gestion_ext['ind_captra'][] = $objeto->ind_captra;
            //$registro_gestion_ext['ind_cappro'][] = $objeto->ind_cappro;
            $registro_gestion_ext['ind_invbu'][] = $objeto->ind_invbu;
            //$registro_gestion_ext['ind_inmact'][] = $objeto->ind_inmact;
            //$registro_gestion_ext['ind_inmpat'][] = $objeto->ind_inmpat;
            $registro_gestion_ext['ind_retpat'][] = $objeto->ind_retpat;
            $registro_gestion_ext['ind_rotvta'][] = $objeto->ind_rotvta;
            $registro_gestion_ext['ind_marbru'][] = $objeto->ind_marbru;
            $registro_gestion_ext['ind_utilfin'][] = $objeto->ind_utilfin;
            $registro_gestion_ext['ind_rentabilidad'][] = $objeto->ind_rentabilidad;
            $registro_gestion_ext['ind_ebipas'][] = $objeto->ind_ebipas;
            $registro_gestion_ext['ind_indrot'][] = $objeto->ind_indrot;
            $registro_gestion_ext['ind_rotinv'][] = $objeto->ind_rotinv;
            $registro_gestion_ext['ind_prest_pn'][] = $objeto->ind_prest_pn;
            $registro_gestion_ext['ind_prest_vtas'][] = $objeto->ind_prest_vtas;
            $registro_gestion_ext['ind_rotact'][] = $objeto->ind_rotact;
            $registro_gestion_ext['nombre_moneda'] = $objeto->nombre_moneda;

        }
        $resp['registro_act'] = $registro_act;
        $resp['registro_estado'] = $registro_estado;
        $resp['registro_ind_gestion'] = $registro_ind_gestion;
        $resp['registro_gestion_ext'] = $registro_gestion_ext;
        $resp['registro_act_ext'] = $registro_act_ext;
        $resp['registro_pas_ext'] = $registro_pas_ext;
        $resp['registro_estado_ext'] = $registro_estado_ext;
        return $resp;
    }

    // FUNCION UTILIZADA POR CONTABLES
    private function calcularContables($respuesta_activo, $respuesta_pasivo, $respuesta_estado, $indices_de_gestion)
    {
        $activo = [];
        $pasivo = [];
        $estado_de_resultados = [];
        $indices = [];
        $grafico_contable = [];
        ksort($respuesta_activo);
        ksort($respuesta_pasivo);
        ksort($respuesta_estado);
        ksort($indices_de_gestion);

        foreach ($indices_de_gestion as $key_indice => $indice) {
            //Cuenta 'Efecto Palanca' 
            $ganancia = $indice->ganancia;
            $activo_total = $indice->act_total;
            if ($activo_total > 0) {
                $resultado_efecto_palanca = $ganancia / $activo_total;
            } else {
                $resultado_efecto_palanca = 0;
            }
            $grafico_contable['periodo'][] = $indice->fecha_balance;
            $grafico_contable['solvencia'][$key_indice][] = $indice->ind_solvencia_pat;
            $grafico_contable['liquidez_corriente'][$key_indice][] = $indice->ind_liqcorr;
            $grafico_contable['endeudamiento_corriente'][$key_indice][] = $indice->ind_endeu;
            $grafico_contable['utilidad_neta'][$key_indice][] = $indice->ind_utilfin;
            $grafico_contable['efecto_palanca'][$key_indice][] = $resultado_efecto_palanca;
            $indices = true;
        }

        foreach ($respuesta_activo as $key_respuesta => $balances) {
            $grafico_contable['periodo'][] = $balances->fecha_balance;
            $grafico_contable['total_activo_corriente'][$key_respuesta][] = $balances->ac_total;
            $grafico_contable['activo'][$key_respuesta][] = $balances->act_total;
            $activo = true;
        }

        foreach ($respuesta_pasivo as $key_respuesta => $balances) {
            $grafico_contable['periodo'][] = $balances->fecha_balance;
            $grafico_contable['total_pasivo_corriente'][$key_respuesta][] = $balances->pc_total;
            $grafico_contable['pasivo'][$key_respuesta][] = $balances->pas_total;
            $grafico_contable['patrimonio_neto'][$key_respuesta][] = $balances->patrimonio;
            $respuesta_pasivo = true;
        }

        foreach ($respuesta_estado as $key_respuesta => $balances) {
            //Cuenta GASTOS TOTALES SOBRE VENTAS
            $gasto_adm = $balances->res_gasadm;
            $gasto_fin = $balances->res_gasfin;
            $gasto_comer = $balances->res_gascom;
            $venta = ($grafico_contable['res_vtanet'][$key_respuesta][] = $balances->res_vtanet);
            $gastos_totales_sobre_ventas = ($venta > 0) ? ((($gasto_adm + $gasto_fin + $gasto_comer) * 100) / $venta) : 0;
            $grafico_contable['gastos_totales_sobre_ventas'][$key_respuesta][] = $gastos_totales_sobre_ventas;
            $grafico_contable['periodo'][] = $balances->fecha_balance;
            //$grafico_contable['efecto_palanca'][$key_respuesta][] = number_format( ($balances / $grafico_contable['activo'][$key_respuesta][1]),2);
            $grafico_contable['ventas'][$key_respuesta][] = $balances->res_vtanet;
            $respuesta_estado = true;
        }

        if (!$grafico_contable) {
            $grafico_contable = [];
        }
        $return['graficos'] = $grafico_contable;
        $return['activo'] = $activo;
        $return['pasivo'] = $pasivo;
        $return['estado_de_resultados'] = $estado_de_resultados;
        $return['indices_de_gestion'] = $indices;
        return $return;
    }

    // FUNCION UTILIZADA POR CONTABLES
    public static function arrayRever($arreglo)
    {
        // SE CREA UN NUEVO ARRAY
        $nuevo = array();
        // RECORREMOS EL ARRAY PASADO COMO PARAMETRO EMPEZANDO DEL FINAL HASTA EL PRINCIPIO
        for ($i = count($arreglo) - 1; $i >= 0; $i--) {
            // CREAMOS UN OBJETO GENERICO AL QUE DESPUES PODEMOS AGREGARLE PROPIEDADES.
            $n = new \stdClass;
            // EN ESTE CASO LE AGREGAMOS CADA OBJETO DEL ARRAY PASADO COMO PARAMETRO.
            $n = $arreglo[$i];
            // LUEGO PUSHEAMOS AL ARRAY NUEVO CON LOS VALORES DEL OBJETO GENERICO.
            array_push($nuevo, $n);
        }
        return $nuevo;
    }

    // FUNCION QUE DEVUELVE SECCION SOCIEDADES
    public function obtenerSociedades($json = true, $relaciones_en_color = 'false')
    {
        $apikey = Request::input('apikey');
        $imagen_fidelitas = Misc::obtenerImagenFidelitas();
        $mostrar_homonimos = false;
        $incluir_homonimos_impresion = Request::input('incluir_homonimos_impresion');
        //
        if ($json == false) {
            if ($incluir_homonimos_impresion == 'on') {
                $mostrar_homonimos = true;
            } else {
                $mostrar_homonimos = false;
            }
        } else {
            /* if ( isset(Session::get('usuario')->preferencias->incluir_homonimos) && (!(Session::get('usuario')->preferencias->incluir_homonimos)) ){
                $mostrar_homonimos = false;
            } */
            if (isset(Session::get('usuario')->preferencias->incluir_homonimos) && (Session::get('usuario')->preferencias->incluir_homonimos)) {
                $mostrar_homonimos = true;
            }
        }
        $cuit = Request::input('cuit');
        $razon_social_todos = [];
        $razon_social = Request::input('razon_social');
        if (!$razon_social) {
            $razon_social = SQLConnection::obtenerRazonSocial($cuit)->nombre_persona;
        }
        //
        $razon_social = str_replace('#', 'ñ', $razon_social);
        //
        $razon_social_todos[5] = $razon_social;
        $razon_social_f = Request::input('razon_social');
        $razon_social_f = str_replace('#', 'ñ', $razon_social_f);
        $razon_social_f = preg_replace('/\(|\)/', '', $razon_social);
        $malla_razon_social = $razon_social;
        $participaciones_ordenados = [];
        $resultado_razon_social = [];
        $sociedades = SQLConnection::obtenerSociedades($cuit);
        $accionista_de = SQLConnection::obtenerAccionistasDe($cuit);
        $tipo_persona = (Misc::tipoPersona($cuit) == 'F') ? 'f' : 'j';
        $resultado_nombres_ant = [];
        //busca nombres anteriores de la empresa relacionados con el CUIT
        $nombres_anteriores = SQLConnection::backendCambiosNombres($cuit);
        $resultado_nombres_ant[] = $razon_social;
        if ($tipo_persona == 'j') {
            $accionistas = SQLConnection::obtenerAccionistasNew($cuit);
            if ($nombres_anteriores) {
                foreach ($nombres_anteriores as $nombre_ant) {
                    $resultado_nombres_ant[] = $nombre_ant->nombre;
                }
            }
        } else {
            $accionistas = '';
        }
        //
        $participaciones = SQLConnection::obtenerParticipacionSociosDirectores($cuit);
        //formateo de fechas - participaciones
        foreach ($participaciones as $key => $value) {
            $participaciones[$key]->desde = Misc::convertirFormatoFecha($value->desde, 'Y-m', 'm-Y');
            $participaciones[$key]->hasta = Misc::convertirFormatoFecha($value->hasta, 'Y-m', 'm-Y');
        }
        //
        $edictos_homonimos = [];
        $edictos = SQLConnection::obtenerEdictos($cuit);
        $socios_directores = SQLConnection::obtenerSociosDirectores($cuit, $tipo_persona);
        $sinonimos = '';
        $razon_social_completa = '';
        $razon_social_explode = explode(" ", $razon_social_f);
        //formateo de fechas - socios_directores
        foreach ($socios_directores as $key => $value) {
            $socios_directores[$key]->c04_periodo_desde = Misc::convertirFormatoFecha($value->c04_periodo_desde, 'Y-m', 'm-Y');
            $socios_directores[$key]->c04_periodo_hasta = Misc::convertirFormatoFecha($value->c04_periodo_hasta, 'Y-m', 'm-Y');
            $socios_directores[$key]->fecha_cons = Misc::convertirFormatoFecha($value->fecha_cons, 'Y-m-d', 'd-m-Y');
        }
        //formateo de fechas - accionistas_de
        foreach ($accionista_de as $key => $value) {
            $accionista_de[$key]->fecha_ins_rpc = Misc::convertirFormatoFecha($value->fecha_ins_rpc, 'Y-m-d', 'd-m-Y');
            $accionista_de[$key]->fecha_cons = Misc::convertirFormatoFecha($value->fecha_cons, 'Y-m-d', 'd-m-Y');
        }
        //Elimina de las combinaciones los valores que contienen una letra 
        $explode_aux = [];
        foreach ($razon_social_explode as $key => $value) {
            if (isset($value) && (strlen($value) > 1)) {
                $explode_aux[] = $value;
            }
        }
        $razon_social_explode = $explode_aux;
        //P. FISICA
        if ($tipo_persona == 'f') {
			/* 
			Parameter #1 $array (list<non-falsy-string>) of array_values is already a list, call has no effect.\
			🪪  arrayValues.list  
			No es necesario, razon_social_explode ya es un array indexado
		     $razon_social_explode = array_values($razon_social_explode);
            */	
            $razon_social_explode = array_values($razon_social_explode);
            $resultado_razon_social = Misc::resultadoCombinaciones($razon_social_explode);
            //Limita a 10 resultados las combinaciones en PF
            $resultado_razon_social = array_slice($resultado_razon_social, -10);
            $cant_resultado_razon_social = count($resultado_razon_social);
            //
            if ($cant_resultado_razon_social < 10) {
                foreach ($resultado_razon_social as $key => $rs) {
                    if (!(end($resultado_razon_social) == $rs)) {
                        $razon_social_completa .= 'NEAR((' . str_replace(" ", ",", $rs) . '),0,true) OR ';
                    } else {
                        $razon_social_completa .= 'NEAR((' . str_replace(" ", ",", $rs) . '),0,true)';
                    }
                }
            } else {
                $razon_social_completa = "\"" . $razon_social_f . "\"";
            }
        }
        // P. JURIDICA
        //INCLUIR HOMONIMOS EN LA BUSQUEDA POR PERFIL DE USUARIO
        if ($mostrar_homonimos) {
            if ($tipo_persona == 'j') {
                $sinonimos = Misc::diccionarioSinonimosTEST($resultado_nombres_ant);
                $count_sinonimo = count($sinonimos) - 1;
                foreach ($sinonimos as $key => $rs) {
                    if (!($key == $count_sinonimo)) {
                        $razon_social_completa .= $rs . 'OR';
                    } else {
                        $razon_social_completa .= $rs;
                    }
                }
                if (!$razon_social_completa) {
                    $razon_social_completa = "\"" . $razon_social . "\"";
                }
                $edictos_homonimos = SQLConnection::obtenerEdictosHomonimos($razon_social_completa);
            } else {
                //Edictos para PF
                $edictos_homonimos = SQLConnection::obtenerEdictosHomonimos($razon_social_completa);
                $sinonimos = $razon_social_completa;
            }
            //
            if ($edictos_homonimos) {
                if ($json == true && !$apikey) {
                    if ($tipo_persona == 'f') {
                        $edictos_homonimos = Misc::ResaltarResultadosEdictosHomonimosPF($edictos_homonimos, $resultado_razon_social);
                    } else {
                        $edictos_homonimos = Misc::ResaltarResultadosEdictosHomonimosNombresAnt($edictos_homonimos, $sinonimos);
                    }
                }
            }
        }
        //fin de incluir homonimos por perfil de usuario    
        if ($edictos) {
            $palabras_agregar = [];
            $sinonimos = [];
            $razon_social_segmentada = [];
            $razon_social = Misc::diccionarioSinonimos2020($razon_social_todos[5]);
            $razon_social = str_replace('"', '', $razon_social);
            //inicio - Obtener Sinonimos
            $palabras = explode(' ', $razon_social);
            //sinonimos PF usa combinacion de nombres que obtiene de $resultado_razon_social
            if ($tipo_persona == 'f') {
                $sinonimos = $resultado_razon_social;
                if ($json == true && !$apikey) {
                    $edictos = Misc::ResaltarResultadosEdictos($edictos, '', $sinonimos);
                }
            } else {
                if ($json == true && !$apikey) {
                    $edictos = Misc::ResaltarResultadosEdictos($edictos, $razon_social, '');
                }
            }
            //
            foreach ($palabras as $key => $palabra) {
                if (strlen($palabra) > 1) {
                    $razon_social_segmentada[] = $palabra;
                }
            }
            //
            foreach ($razon_social_segmentada as $sinonimo) {
                $resp = SQLConnection::obtenerSinonimos($sinonimo);
                if (empty($resp)) {
                    if ($json == true && !$apikey) {
                        $edictos = Misc::ResaltarResultadosEdictos($edictos, $razon_social, '');
                    }
                } else {
                    $palabras_agregar[] = $resp;
                }
            }
            foreach ($palabras_agregar as $key => $value) {
                foreach ($value as $sinonimo) {
                    if (!empty($sinonimo)) {
                        $sinonimos[] = $palabras[0] . " " . $sinonimo;
                    }
                }
            }

            if ($sinonimos) {
                if ($json == true && !$apikey) {
                    $edictos = Misc::ResaltarResultadosEdictos($edictos, '', $sinonimos);
                }
            }

        }
        //
        foreach ($participaciones as $participacion) {
            $participaciones_ordenados[$participacion->nombre_socio][] = $participacion;
        }
        //
        $malla_societaria = SQLConnection::grafoSociedades($cuit, $tipo_persona);
        //
        if (Misc::tieneRepetidos($malla_societaria)) {
            $malla_societaria = Misc::quitarRepetidos($malla_societaria);
        }
        //
        if (isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'backend') !== false) {
            $relaciones_en_color = 'true';
        } else {
            $relaciones_en_color = 'false';
        }

        if ($relaciones_en_color == 'true') {
            //--------------------------------------------------------------------------------------------------
            // ESTA PARTE ES PARA QUE SE MUESTRE CADA RELACIONADO, CON EL CIRCULITO DEL COLOR SEGUN SU SCORE. (Todo lo demás gris)
            //--------------------------------------------------------------------------------------------------
            foreach ($malla_societaria as $key => $malla) {
                $malla_societaria[$key]->score_color = '#cccccc';
                /* 03/03/2021: Se saco el if que solo lo hacia para socios, que lo haga para todas las vinculaciones 
                Solicitado por AGB */
                //if (($malla->seccion == "SOCIOS" || $malla->seccion == 'SOCIEDADES')) 
                //{
                $w_cuit = $malla->cuit;
                // Score de cada uno de los socios_directores 
                $params = 'cuit=' . $w_cuit . '&apikey=1F44A3FAA0C15C42';
                $html = Misc::CURLCall(env("API_SCORE_INFORME_COMERCIAL"), $params, 'POST');
                $w_score = isset(json_decode($html)->score) ? json_decode($html)->score : 0;
                usleep(100000);
                if ($w_score <= 50) {
                    $w_color = "#A72B2A";
                }
                if ($w_score > 50 && $w_score < 65) {
                    $w_color = "#FFB81C";
                }
                if ($w_score >= 65) {
                    $w_color = "#63b68c";
                }
                $malla_societaria[$key]->score = $w_score;
                $malla_societaria[$key]->score_color = $w_color;
                //}
            }
        } else {
            foreach ($malla_societaria as $key => $malla) {
                $w_color = '#cccccc';
                if ($malla->seccion == "SOCIOS" || $malla->seccion == 'SOCIEDADES') {
                    $w_color = '#5E8AB4';
                }
                if ($malla->seccion == 'ACCIONISTAS') {
                    $w_color = '#309e99';
                }
                if ($malla->seccion == 'VINCULACIONES_OTRAS') {
                    $w_color = '#006064';
                }
                if ($malla->seccion == 'CONTROLADAS') {
                    $w_color = '#977CD1';
                }
                if ($malla->seccion == 'CONTROLANTES') {
                    $w_color = '#004D40';
                }
                if ($malla->seccion == 'FIRMANTES') {
                    $w_color = '#793D87';
                }
                if ($malla->seccion == 'ACCIONISTA_DE') {
                    $w_color = '#793D87';
                }
                if ($malla->seccion == 'EMPLEADO_DE') {
                    $w_color = '#AB47BC';
                }
                if ($malla->seccion == 'FAMILIARES') {
                    $w_color = '#793D87';
                }
                $malla_societaria[$key]->score_color = $w_color;
            }
        }
        //
        foreach ($malla_societaria as $malla) {
            $malla_societaria[$malla->seccion] = true;
            if ($relaciones_en_color == 'true') {
                $malla_societaria['COLORES'] = true;
            } else {
                $malla_societaria['COLORES'] = false;
            }
        }
        //
        $vinculaciones = SQLConnection::obtenerVinculaciones($cuit);
        //formateo de fechas - vinculaciones
        foreach ($vinculaciones as $key => $value) {
            $vinculaciones[$key]->desde = Misc::convertirFormatoFecha($value->desde, 'Y-m', 'm-Y');
            $vinculaciones[$key]->hasta = Misc::convertirFormatoFecha($value->hasta, 'Y-m', 'm-Y');
        }
        $vinculaciones_indirectas = SQLConnection::obtenerVinculacionesIndirectas($cuit);
        $vista = \View::make('informe-comercial-nuevo/sociedades_nuevo')->with(compact('sociedades', 'socios_directores', 'accionista_de', 'edictos', 'vinculaciones', 'vinculaciones_indirectas', 'participaciones_ordenados', 'accionistas', 'edictos', 'json', 'edictos_homonimos', 'tipo_persona', 'malla_societaria', 'nombres_anteriores', 'malla_razon_social', 'mostrar_homonimos'))->render();
        if (!$json) {
            return $vista;
        }
        return \Response::json(
            array(
                'view' => $vista,
                //'info'=> compact('malla_societaria','tipo_persona','socios_directores','accionistas','accionista_de','vinculaciones','participaciones_ordenados','vinculaciones_indirectas','edictos','edictos_homonimos', 'mostrar_homonimos', 'idp','nombres_anteriores','malla_razon_social','imagen_fidelitas')
                'info' => compact('malla_societaria', 'tipo_persona', 'socios_directores', 'accionistas', 'accionista_de', 'vinculaciones', 'participaciones_ordenados', 'vinculaciones_indirectas', 'edictos', 'edictos_homonimos', 'mostrar_homonimos', 'nombres_anteriores', 'malla_razon_social', 'imagen_fidelitas')

            )
            ,
            200,
            [],
            JSON_NUMERIC_CHECK
        );
    }

    // FUNCION QUE DEVUELVE SECCION LEGALES
    public function obtenerLegales($json = true)
    {
        $imagen_fidelitas = Misc::obtenerImagenFidelitas();
        //$mostrar_homonimos = true;
        $mostrar_homonimos = false;
        $incluir_homonimos_impresion = Request::input('incluir_homonimos_impresion');
        if ($json == false) {
            if ($incluir_homonimos_impresion == 'on') {
                $mostrar_homonimos = true;
            } else {
                $mostrar_homonimos = false;
            }
        } else {
            // MODIFICACION PARA MOSTRAR HOMINIMOS EN CASO QUE ESTE SETEADO EN EL PERFIL DEL USUARIO
            /*if (isset(Session::get('usuario')->preferencias->incluir_homonimos) && (!(Session::get('usuario')->preferencias->incluir_homonimos)) ){
                $mostrar_homonimos = false;
            }*/
            if (isset(Session::get('usuario')->preferencias->incluir_homonimos) && Session::get('usuario')->preferencias->incluir_homonimos) {
                $mostrar_homonimos = true;
            }
        }
        //
        if (isset(Session::get('usuario')->preferencias->cantidad_juicios)) {
            $cantidad = is_numeric(Session::get('usuario')->preferencias->cantidad_juicios) ? Session::get('usuario')->preferencias->cantidad_juicios : 500;
        } else {
            $cantidad = 500;
        }
        //
        $mostrar_todos_los_juicios = Request::input('mostrar_todos');
        //  
        if ($mostrar_todos_los_juicios == 'true') {
            $mostrar_todos_los_juicios = true;
        } else {
            $mostrar_todos_los_juicios = false;
        }

        $razon_social = Request::input('razon_social');
        $razon_social = str_replace('#', 'ñ', $razon_social);
        $malla_razon_social = $razon_social;

        //inicio -var- nombres-anteriores
        $razon_social_todos = [];
        $razon_social_todos[5] = $razon_social;
        //inicio -var- nombres-anteriores
        $cuit = Request::input('cuit');
        $cuit_enmascarado = $cuit;
        $otros_juicios_comerciales = [];
        $concursos_quiebras = [];
        $pedidos_quiebra = [];

        // AGREGADO POR RAMI
        if (!$razon_social) {
            $razon_social = SQLConnection::obtenerRazonSocial($cuit)->nombre_persona;
        }
        /* 07/10/2021: para poder llamarlo desde led */
        $es_led = false;
        $id = Request::input('contraparte') ?? null;
        if (!$cuit) {
            $qcontrap = \DB::selectOne('EXEC dbo.LN_contrapartes_ ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array('select', $id, null, null, null, null, null, null, null, null, null, null, null, null, null));
            $cuit = $qcontrap->identificacion ?? null;
            $json = false;
            $es_led = true;
        }

        if ($mostrar_todos_los_juicios) {
            $demandados = SQLConnection::backendStoreProcedure('obtener_juicios_demandado_actor', array(null, 'D', $cuit, 60, 1));
            $actor = SQLConnection::backendStoreProcedure('obtener_juicios_demandado_actor', array(null, 'A', $cuit, 60, 1));
        } else {
            $demandados = SQLConnection::backendStoreProcedure('obtener_juicios_demandado_actor', array(null, 'D', $cuit, 60, 1, $cantidad));
            $actor = SQLConnection::backendStoreProcedure('obtener_juicios_demandado_actor', array(null, 'A', $cuit, 60, 1, $cantidad));
        }
        $dni = '';
        $sinonimos = [];
        $demandado_homonimo = [];
        $actores_homonimos = [];
        //$p_fisica = (substr($cuit,0,1) == 3) ? false : true;
        $fisica_juridica = Misc::tipoPersona($cuit);
        $p_fisica = ($fisica_juridica == 'F') ? true : false;

        $mask = substr($cuit_enmascarado, 1, 1);
        $mask .= '-';
        $cuit_enmascarado = substr_replace($cuit_enmascarado, $mask, 1, 1);
        $mask = substr($cuit_enmascarado, -1, -1);
        $mask .= '-';
        $cuit_enmascarado = substr_replace($cuit_enmascarado, $mask, -1, -1);
        $razon_social_completa = '';
        $resultado_nombres_ant = [];
        $nombres_anteriores = [];
        //  
        if ($p_fisica) {
            $dni = (int) substr($cuit, 2, -1);
        }

        //if($json == true){
        if ($p_fisica == false) {
            //P Juridica
            $nombres_anteriores = SQLConnection::backendCambiosNombres($cuit);
            if ($nombres_anteriores) {
                foreach ($nombres_anteriores as $nombre_ant) {
                    $resultado_nombres_ant[] = $nombre_ant->nombre;
                }
                $resultado_nombres_ant[] = $razon_social;
            }
            //$razon_social = "\"".$razon_social."\"";

            $sinonimos = Misc::diccionarioSinonimosTest($resultado_nombres_ant);
            //print_r("sinonimos: "); 
            //var_dump($sinonimos); 
            $count_sinonimo = count($sinonimos) - 1;
            foreach ($sinonimos as $key => $rs) {
                if (strlen($rs) < 3) {
                    continue;
                }
                if (!($key == $count_sinonimo)) {
                    $razon_social_completa .= $rs . 'OR';
                } else {
                    $razon_social_completa .= $rs;
                }
            }
            //$razon_social_legales = Misc::diccionarioSinonimos($razon_social);
            $razon_social_legales = Misc::diccionarioSinonimos2020($razon_social);
            //print_r('COMPLETA: ' . $razon_social_completa . '---');
            //print_r('legales: ' . $razon_social_legales  . '---');
            if (!$razon_social_completa) {
                $razon_social_completa = $razon_social_legales;
            }
        } else {//caso PF
            $razon_social_completa = "\"" . $razon_social . "\"";
        }
        //print_r('COMPLETA: ' . $razon_social_completa  . '---');

        //print_r("razon_social: "); 
        //var_dump($razon_social);   
        //AGB
        /*
        print_r("razon_social_legales: "); 
        var_dump($razon_social_legales);
        print_r("razon_social_completa: "); 
        var_dump($razon_social_completa);
        
*/
        /*
                print_r("sinonimos: "); 
                var_dump($sinonimos); 
                print_r("razon social: "); 
                var_dump($razon_social); 
                print_r("razon_social_legales: "); 
                var_dump($razon_social_legales); 
                print_r("razon_social_completa: "); 
                var_dump($razon_social_completa);
        */
        if (strlen($razon_social_completa) >= 3 && $mostrar_homonimos) {
            $razon_social_completa = (Misc::parche_cla($razon_social_completa));
            if ($mostrar_todos_los_juicios) {
                //$demandado_homonimo = SQLConnection::backendStoreProcedure('obtener_juicios_homonimos', array($razon_social_legales,'D'));
                //$actores_homonimos  = SQLConnection::backendStoreProcedure('obtener_juicios_homonimos', array($razon_social_legales,'A'));
                // Abril 2019: Se empiezan a mostrar los homonimos de nombres anteriores 
                // si se quiere que solo se muestre los homonimos de la razon social actual volver a cambiar por las dos lineas anteriores (buscar $razon_social_legales)
                //DICIEMBRE 2020 CAMBIAMOS POR RAZON SOCIAL PORQUE NO SALEN LOS HOMÓNIMOS
                $demandado_homonimo = SQLConnection::backendStoreProcedure('obtener_juicios_homonimos', array($razon_social_completa, 'D', $cantidad));
                $actores_homonimos = SQLConnection::backendStoreProcedure('obtener_juicios_homonimos', array($razon_social_completa, 'A', $cantidad));
                //$demandado_homonimo = SQLConnection::backendStoreProcedure('obtener_juicios_homonimos', array($razon_social,'D', $cantidad));
                //$actores_homonimos  = SQLConnection::backendStoreProcedure('obtener_juicios_homonimos', array($razon_social,'A', $cantidad));
            } else {
                /*print_r($razon_social);
                print_r($cantidad);*/
                //$demandado_homonimo = SQLConnection::backendStoreProcedure('obtener_juicios_homonimos', array($razon_social_legales,'D', $cantidad));
                //$actores_homonimos  = SQLConnection::backendStoreProcedure('obtener_juicios_homonimos', array($razon_social_legales,'A', $cantidad));
                // Abril 2019: Se empiezan a mostrar los homonimos de nombres anteriores
                // si se quiere que solo se muestre los homonimos de la razon social actual volver a cambiar por las dos lineas anteriores (buscar $razon_social_legales)
                //DICIEMBRE 2020 CAMBIAMOS POR RAZON SOCIAL PORQUE NO SALEN LOS HOMÓNIMOS
                $demandado_homonimo = SQLConnection::backendStoreProcedure('obtener_juicios_homonimos', array($razon_social_completa, 'D', $cantidad));
                $actores_homonimos = SQLConnection::backendStoreProcedure('obtener_juicios_homonimos', array($razon_social_completa, 'A', $cantidad));
                //$demandado_homonimo = SQLConnection::backendStoreProcedure('obtener_juicios_homonimos', array($razon_social,'D', $cantidad));
                //$actores_homonimos  = SQLConnection::backendStoreProcedure('obtener_juicios_homonimos', array($razon_social,'A', $cantidad));
                // foreach ($actores_homonimos as $key => $value) {
                //  if (isset($value->actor) || isset($value->id_tipo_causa) || isset($value->nombre_causa) || isset($value->tipo_de_novedad) ) {
                //    $actores_homonimos;
                //  }else{
                //    $actores_homonimos = [];
                //  }
                // }
            }
        }
        //}
        //var_dump(array($razon_social_completa,'A', $cantidad));die();
        //$actores_homonimos  = SQLConnection::backendStoreProcedure('obtener_juicios_homonimos', array($razon_social_completa,'A', $cantidad));
        //$actores_homonimos  = SQLConnection::backendStoreProcedure('obtener_juicios_homonimos', array($razon_social_completa,'A'));
        //var_dump($actores_homonimos);die();
        if ($mostrar_todos_los_juicios) {
            $remates = SQLConnection::obtenerRemates($cuit, $cuit_enmascarado, $dni);
        } else {
            $remates = SQLConnection::backendStoreProcedure('obtener_remates', array($cuit, $cuit_enmascarado, $dni, $cantidad));
        }
        //
        if ($remates) {
            $remates = Misc::ResaltarResultadosRemates($remates, $razon_social);
        }
        //  $concursos_quiebras = SQLConnection::obtenerConcursosQuiebras($cuit);
        if ($demandados) {
            foreach ($demandados as $demandado) {
                if ($demandado->grupo == 'OJC') {
                    $otros_juicios_comerciales[] = $demandado;
                } elseif ($demandado->grupo == 'CYQ') {
                    $concursos_quiebras[] = $demandado;
                } elseif ($demandado->grupo == 'PQ') {
                    $pedidos_quiebra[] = $demandado;
                }
            }
        }
        /*
        if ($demandado_homonimo) {
            foreach ($demandado_homonimo as $key => $value) {
            $fecha_causa_dmy = $value->fecha_causa_dmy;
            $demandado_homonimo[$key]->fecha_causa_dmy =  str_replace('/', '-', $fecha_causa_dmy); 
            }    
        }
        */
        //$vista = \View::make('informes/legales')->with(compact('actor','pedidos_quiebra','concursos_quiebras','otros_juicios_comerciales','remates','actores_homonimos','p_fisica','json','nombre','demandado_homonimo', 'mostrar_homonimos', 'mostrar_todos_los_juicios','malla_razon_social','nombres_anteriores'))->render();
        $vista = \View::make('informe-comercial-nuevo/legales_nuevo')->with(compact('actor', 'pedidos_quiebra', 'concursos_quiebras', 'otros_juicios_comerciales', 'remates', 'actores_homonimos', 'p_fisica', 'json', 'demandado_homonimo', 'mostrar_homonimos', 'mostrar_todos_los_juicios', 'malla_razon_social', 'nombres_anteriores'))->render();
        //
        if (!$json) {
            return $vista;
        }
        return \Response::json(
            array(
                'view' => $vista,
                'info_varios' => compact('concursos_quiebras', 'remates', 'pedidos_quiebra', 'otros_juicios_comerciales', 'actor', 'actores_homonimos', 'demandado_homonimo', 'mostrar_homonimos', 'imagen_fidelitas', 'malla_razon_social', 'nombres_anteriores')
            )
            ,
            200,
            [],
            JSON_NUMERIC_CHECK
        );
    }

    ////////////////////////////////////
    ////////// SECCION COMEX ///////////
    ////////////////////////////////////

    // FUNCION QUE DEVUELVE SECCION COMEX
    public function obtenerComex($json = true, $grafico_impo_comex = '', $grafico_expo_comex = '', $grafico_pais_impo_comex = '', $grafico_rubro_impo_comex = '', $grafico_pais_expo_comex = '', $grafico_rubro_expo_comex = '')
    {
        $meses = 24;
        $imagen_fidelitas = Misc::obtenerImagenFidelitas();
        $cuit = Request::input("cuit");
        $periodo = '';
        $periodos_null = '';
        $periodo_expo = '';
        $consumo = '';
        $temporal = '';
        $deposito = '';
        $zonafranca = '';
        $total = '';
        $comex_pais_impo = [];
        $comex_pais_expo = [];
        $comex_grafico_impo = [];
        $otros_pais_impo = 0;
        $otros_pais_expo = 0;
        $periodo_procesado = SQLConnection::obtenerUltimoPeriodoProcesado('comercio_exterior');
        $comex_impo = SQLConnection::obtenerComex($cuit);
        $tipo_persona = (substr($cuit, 0, 1) != '3') ? 'f' : 'j';

        if ($comex_impo) {
            for ($i = 0; $i <= 24; $i++) {
                $periodos_null[$i] = date("Ym", strtotime($periodo_procesado . " -$i months"));
                $anio = substr($periodos_null[$i], 0, 4);
                $mes = substr($periodos_null[$i], 4, 6);
                $comex_grafico_impo[$i] = new \stdClass;
                $comex_grafico_impo[$i]->mes = $mes;
                $comex_grafico_impo[$i]->anio = $anio;
                $comex_grafico_impo[$i]->consumo = 0;
                $comex_grafico_impo[$i]->temporal = 0;
                $comex_grafico_impo[$i]->procesado = 0;
                $comex_grafico_impo[$i]->date = 0;
                $comex_grafico_impo[$i]->Date = 0;
                $comex_grafico_impo[$i]->deposito = 0;
                $comex_grafico_impo[$i]->zonafranca = 0;
                $comex_grafico_impo[$i]->total = 0;
            }
            $number = 0;
            /* $total_consumo     = '';
            $total_temporal    = '';  
            $total_deposito    = '';  
            $total_zona_franca = '';  
            $total_totales     = '';  */
            $total_consumo = array();
            $total_temporal = array();
            $total_deposito = array();
            $total_zona_franca = '';
            $total_totales = array();
            foreach ($comex_impo as $key => $impo) {
                //totales que se muestran en 'tabla_comex'
                /* $total_consumo[$key]    = $impo->consumo;
                $total_temporal[$key]   = $impo->temporal;
                $total_deposito[$key]   = $impo->deposito;
                $total_zonafranca[$key] = $impo->zonafranca;
                $total_totales[$key]    = $impo->total; */
                array_push($total_consumo, isset($impo->consumo) ? $impo->consumo : 0);
                array_push($total_temporal, isset($impo->temporal) ? $impo->temporal : 0);
                array_push($total_deposito, isset($impo->deposito) ? $impo->deposito : 0);
                $total_zonafranca = $impo->zonafranca;
                array_push($total_totales, isset($impo->total) ? $impo->total : 0);
                foreach ($comex_grafico_impo as $key => $graf) {
                    if ($impo->anio == $graf->anio && $impo->mes == $graf->mes) {
                        //if($key == 0){

                        $number = $key;
                        //}
                        if ($graf->total != 0) {
                            $number++;
                            $comex_grafico_impo[$number] = $impo;

                        } else {
                            $comex_grafico_impo[$number] = $impo;
                            $number++;
                        }
                    }
                    //sort($comex_grafico_impo['ordenar']);
                }
            }
            //totales que se muestran en 'tabla_comex'
            $total_consumo = array_sum($total_consumo);
            $total_temporal = array_sum($total_temporal);
            $total_deposito = array_sum($total_deposito);
            $total_totales = array_sum($total_totales);
        }
        $comex_expo = SQLConnection::obtenerGraficoExportaciones($cuit);
        $periodo_procesado = SQLConnection::obtenerUltimoPeriodoProcesado('comex_pais_rubro');
        $comex_grafico_exportaciones = [];
        $comex_grafico_exportaciones[] = new \stdClass;

        if ($comex_expo) {
            for ($i = 0; $i <= 24; $i++) {
                $periodos_null[$i] = date("Ym", strtotime($periodo_procesado . " -$i months"));
                $comex_grafico_exportaciones[$i] = new \stdClass;
                $comex_grafico_exportaciones[$i]->valor_mensual = 0;
                $comex_grafico_exportaciones[$i]->periodo = $periodos_null[$i];
            }

            foreach ($comex_expo as $expo) {
                foreach ($comex_grafico_exportaciones as $key => $graf) {
                    if ($expo->periodo == $graf->periodo) {
                        $comex_grafico_exportaciones[$key] = $expo;
                    }
                }
            }

            foreach ($comex_grafico_exportaciones as $key => $expo) {
                $comex_grafico_exportaciones[$key]->anio = substr($expo->periodo, 0, 4);
                $comex_grafico_exportaciones[$key]->mes = substr($expo->periodo, 4, 6) - 1;
            }
        }
        $comex_paises = SQLConnection::obtenerComexPais($cuit);
        $comex_rubros = SQLConnection::obtenerComexRubros($cuit);
        $comex_totales = SQLConnection::obtenerComexTotales($cuit, 24);
        $ni = 0;
        $ne = 0;
        $total_pais_impo = 0;
        $total_pais_expo = 0;
        //Importacion/Exportacion PAISES
        foreach ($comex_paises as $key => $comex_pais) {

            if ($comex_pais->tipo_operacion == 'IMPO') {
                if ($ni < 5) {
                    $ni++;
                    $comex_pais_impo[] = $comex_pais;
                    $comex_pais->nombre = mb_strtoupper($comex_pais->nombre);
                } else {
                    $otros_pais_impo += $comex_pais->fob;
                }
                $total_pais_impo += $comex_pais->fob;
            }

            if ($comex_pais->tipo_operacion == 'EXPO') {
                if ($ne < 5) {
                    $ne++;
                    $comex_pais_expo[] = $comex_pais;
                    $comex_pais->nombre = mb_strtoupper($comex_pais->nombre);
                } else {
                    $otros_pais_expo += $comex_pais->fob;
                }
                $total_pais_expo += $comex_pais->fob;
            }

        }
        if ($otros_pais_expo > 0) {
            $object = new \stdClass();
            $object->tipo_operacion = 'EXPO';
            $object->nombre = 'Otros';
            $object->fob = (string) $otros_pais_expo;
            $comex_pais_expo[] = $object;
        }

        $object = new \stdClass();
        $object->tipo_operacion = 'EXPO';
        $object->nombre = 'Totales';
        $object->fob = (string) $total_pais_expo;
        if ($total_pais_expo > 0) {
            $comex_pais_expo[] = $object;
        }

        if ($otros_pais_impo > 0) {
            $object = new \stdClass();
            $object->tipo_operacion = 'IMPO';
            $object->nombre = 'Otros';
            $object->fob = (string) $otros_pais_impo;
            $comex_pais_impo[] = $object;
        }

        $object = new \stdClass();
        $object->tipo_operacion = 'IMPO';
        $object->nombre = 'Totales';
        $object->fob = (string) $total_pais_impo;
        if ($total_pais_impo > 0) {
            $comex_pais_impo[] = $object;
        }
        //Importacion/Exportacion RUBROS
        $comex_rubro_impo = [];
        $comex_rubro_expo = [];
        $ni_r = 0;
        $ne_r = 0;
        $total_rubro_impo = 0;
        $total_rubro_expo = 0;
        $otros_rubro_impo = 0;
        $otros_rubro_expo = 0;

        foreach ($comex_rubros as $key => $comex_rubro) {

            if ($comex_rubro->tipo_operacion == 'IMPO') {
                if ($ni_r < 5) {
                    $ni_r++;
                    $comex_rubro_impo[] = $comex_rubro;
                } else {
                    $otros_rubro_impo += $comex_rubro->fob;
                }
                $total_rubro_impo += $comex_rubro->fob;
            }

            if ($comex_rubro->tipo_operacion == 'EXPO') {
                if ($ne_r < 5) {
                    $ne_r++;
                    $comex_rubro_expo[] = $comex_rubro;
                } else {
                    $otros_rubro_expo += $comex_rubro->fob;
                }
                $total_rubro_expo += $comex_rubro->fob;
            }
        }

        if ($otros_rubro_expo > 0) {
            $obj = new \stdClass();
            $obj->tipo_operacion = 'EXPO';
            $obj->descripcion = 'Otros';
            $obj->fob = (string) $otros_rubro_expo;
            $comex_rubro_expo[] = $obj;
        }
        $obj = new \stdClass();
        $obj->tipo_operacion = 'EXPO';
        $obj->descripcion = 'Totales';
        $obj->fob = (string) $total_rubro_expo;
        if ($total_rubro_expo > 0) {
            $comex_rubro_expo[] = $obj;
        }
        if ($otros_rubro_impo > 0) {
            $obj = new \stdClass();
            $obj->tipo_operacion = 'IMPO';
            $obj->descripcion = 'Otros';
            $obj->fob = (string) $otros_rubro_impo;
            $comex_rubro_impo[] = $obj;
        }

        $obj = new \stdClass();
        $obj->tipo_operacion = 'IMPO';
        $obj->descripcion = 'Totales';
        $obj->fob = (string) $total_rubro_impo;
        if ($total_rubro_impo > 0) {
            $comex_rubro_impo[] = $obj;
        }
        $esled = '';

        //----
        if (!isset($total_consumo)) {
            $total_consumo = NULL;
        }
        //---
        if (!isset($total_temporal)) {
            $total_temporal = NULL;
        }
        //---
        if (!isset($total_deposito)) {
            $total_deposito = NULL;
        }
        //---
        if (!isset($total_zonafranca)) {
            $total_zonafranca = NULL;
        }
        //---
        if (!isset($total_totales)) {
            $total_totales = NULL;
        }
        //$vista =  \View::make('informes/comex')->with(compact('total_pais_impo','total_pais_expo','periodo','consumo','temporal','deposito','zonafranca','total','comex_totales','json','grafico_impo_comex','grafico_expo_comex','grafico_pais_impo_comex','grafico_rubro_impo_comex','grafico_pais_expo_comex','grafico_rubro_expo_comex','comex_pais_impo','comex_pais_expo','comex_rubro_impo','comex_rubro_expo','total_rubro_impo','total_rubro_expo','comex_impo','comex_expo','total_consumo','total_temporal','total_deposito','total_zonafranca','total_totales','meses','esled'))->render();
        $vista = \View::make('informe-comercial-nuevo/comex_nuevo')->with(compact('total_pais_impo', 'total_pais_expo', 'periodo', 'consumo', 'temporal', 'deposito', 'zonafranca', 'total', 'comex_totales', 'json', 'grafico_impo_comex', 'grafico_expo_comex', 'grafico_pais_impo_comex', 'grafico_rubro_impo_comex', 'grafico_pais_expo_comex', 'grafico_rubro_expo_comex', 'comex_pais_impo', 'comex_pais_expo', 'comex_rubro_impo', 'comex_rubro_expo', 'total_rubro_impo', 'total_rubro_expo', 'comex_impo', 'comex_expo', 'meses', 'esled'))->render();

        if (!$json) {
            return $vista;
        }
        Session::put($cuit . " " . date('Y-m-d') . ".comex", json_encode($vista));
        $comex_json = json_encode($comex_impo);
        return \Response::json(
            array(
                'view' => $vista,
                //'info'=>compact('comex_impo','comex_expo','maximo','sort_pais_impo','sort_pais_expo','sort_rubros_impo','sort_rubros_expo','comex_grafico_exportaciones','comex_pais_expo','comex_pais_impo','comex_rubro_impo','comex_rubro_expo','tipo_persona','total_consumo','total_temporal','total_deposito','total_zonafranca','total_totales')
                'info' => compact('comex_impo', 'comex_expo', 'comex_grafico_exportaciones', 'comex_pais_expo', 'comex_pais_impo', 'comex_rubro_impo', 'comex_rubro_expo', 'tipo_persona', 'total_consumo', 'total_temporal', 'total_deposito', 'total_zonafranca', 'total_totales')
            )
        );
    }

    ////////////////////////////////////
    ////////// SECCION BANCOS //////////
    ////////////////////////////////////

    // FUNCION QUE DEVUELVE SECCION BANCOS
    public function obtenerBancos($json = true, $grafico_cheques_bancos = '', $grafico_financiero = '', $grafico_situaciones = '', $grafico_garantias = '')
    {
        $imagen_fidelitas = Misc::obtenerImagenFidelitas();
        $id_persona = Request::input('idp');
        $cuit = Request::input("cuit");
        $vinculados_segun_bcra = SQLConnection::backendStoreProcedure('obtener_vinculados_segun_BCRA', array($cuit));
        $cheques_ordenados = [];
        //
        $periodo_maximo = SQLConnection::obtenerPeriodoMaximo($cuit);
        $card_status_bancario = SQLConnection::obtenerStatusBancario($cuit);
        $periodos_ordenados = [];
        $periodos_graficos = [];
        $bancos_ordenados = [];
        $bancos_ordenados_separados = [];
        $tipo_persona = (substr($cuit, 0, 1) != '3') ? 'f' : 'j';
        $fecha = time();
        $n = 0;
        //
        if (isset(Session::get('usuario')->preferencias->cantidad_cheques)) {
            $cantidad = is_numeric(Session::get('usuario')->preferencias->cantidad_cheques) ? Session::get('usuario')->preferencias->cantidad_cheques : 500;
        } else {
            $cantidad = 500;
        }
        //$cheques      = SQLConnection::obtenerCheques($cuit,$id_persona);
        $cheques = SQLConnection::backendStoreProcedure('obtener_cheques', array($cuit, $id_persona, $cantidad));
        /*Cuadro de Cheques - Inicio */
        $cuadro_cheques = [];
        $cuadro_cheques = SQLConnection::backendStoreProcedure('obtener_cuadro_cheques2', array($cuit));
        $cuadro_cheques_totales = [];
        $total_cheques = [];
        $total_cheques['1propio']['cantidad'] = 0;
        $total_cheques['2empresa']['cantidad'] = 0;
        $total_cheques['1propio']['monto'] = 0;
        $total_cheques['2empresa']['monto'] = 0;
        //
        if (!isset($cuadro_cheques_totales['1propio']['LEVANTADOS']['SIN FONDOS'])) {
            $cuadro_cheques_totales['1propio']['LEVANTADOS']['SIN FONDOS'] = new \stdClass();
            $cuadro_cheques_totales['1propio']['LEVANTADOS']['SIN FONDOS']->cantidad = 0;
            $cuadro_cheques_totales['1propio']['LEVANTADOS']['SIN FONDOS']->monto = 0;
        }
        //
        if (!isset($cuadro_cheques_totales['1propio']['LEVANTADOS']['DEFECTOS FORMALES'])) {
            $cuadro_cheques_totales['1propio']['LEVANTADOS']['DEFECTOS FORMALES'] = new \stdClass();
            $cuadro_cheques_totales['1propio']['LEVANTADOS']['DEFECTOS FORMALES']->cantidad = 0;
            $cuadro_cheques_totales['1propio']['LEVANTADOS']['DEFECTOS FORMALES']->monto = 0;
        }
        //
        if (!isset($cuadro_cheques_totales['1propio']['SIN LEVANTAR']['SIN FONDOS'])) {
            $cuadro_cheques_totales['1propio']['SIN LEVANTAR']['SIN FONDOS'] = new \stdClass();
            $cuadro_cheques_totales['1propio']['SIN LEVANTAR']['SIN FONDOS']->cantidad = 0;
            $cuadro_cheques_totales['1propio']['SIN LEVANTAR']['SIN FONDOS']->monto = 0;
        }
        //
        if (!isset($cuadro_cheques_totales['1propio']['SIN LEVANTAR']['DEFECTOS FORMALES'])) {
            $cuadro_cheques_totales['1propio']['SIN LEVANTAR']['DEFECTOS FORMALES'] = new \stdClass();
            $cuadro_cheques_totales['1propio']['SIN LEVANTAR']['DEFECTOS FORMALES']->cantidad = 0;
            $cuadro_cheques_totales['1propio']['SIN LEVANTAR']['DEFECTOS FORMALES']->monto = 0;
        }
        //
        if (!isset($cuadro_cheques_totales['1propio']['CHEQUES']['SIN FONDOS'])) {
            $cuadro_cheques_totales['1propio']['CHEQUES']['SIN FONDOS'] = new \stdClass();
            $cuadro_cheques_totales['1propio']['CHEQUES']['SIN FONDOS']->cantidad = 0;
            $cuadro_cheques_totales['1propio']['CHEQUES']['SIN FONDOS']->monto = 0;
        }
        //  
        if (!isset($cuadro_cheques_totales['1propio']['CHEQUES']['DEFECTOS FORMALES'])) {
            $cuadro_cheques_totales['1propio']['CHEQUES']['DEFECTOS FORMALES'] = new \stdClass();
            $cuadro_cheques_totales['1propio']['CHEQUES']['DEFECTOS FORMALES']->cantidad = 0;
            $cuadro_cheques_totales['1propio']['CHEQUES']['DEFECTOS FORMALES']->monto = 0;
        }
        //
        foreach ($cuadro_cheques as $key => $value) {
            if (!isset($cuadro_cheques_totales[$value->tipo][$value->cheques_o_levantados][$value->causal]->cantidad)) {
                $cuadro_cheques_totales[$value->tipo][$value->cheques_o_levantados][$value->causal] = new \stdClass();
                $cuadro_cheques_totales[$value->tipo][$value->cheques_o_levantados][$value->causal]->cantidad = 0;
                $cuadro_cheques_totales[$value->tipo][$value->cheques_o_levantados][$value->causal]->monto = 0;
            }
            //
            $cuadro_cheques_totales[$value->tipo][$value->cheques_o_levantados][$value->causal]->cantidad = $value->cantidad;
            $cuadro_cheques_totales[$value->tipo][$value->cheques_o_levantados][$value->causal]->monto = $value->monto;
            //
            if ($value->cheques_o_levantados == 'CHEQUES') {
                $total_cheques[$value->tipo]['cantidad'] = $total_cheques[$value->tipo]['cantidad'] + $value->cantidad;
                $total_cheques[$value->tipo]['monto'] = $total_cheques[$value->tipo]['monto'] + $value->monto;
            }
        }
        //
        if (isset($cuadro_cheques_totales['2empresa'])) {
            krsort($cuadro_cheques_totales['2empresa']['CHEQUES']);
        }
        /*Cuadro de Cheques - Fin */
        $cheques_vinculaciones_todas = SQLConnection::backendStoreProcedure('obtener_cheques_vinculaciones_todas', array($cuit, $id_persona, $cantidad));
        $financiero = SQLConnection::obtenerFinancieroBrief($cuit);
        //Gráfico de Situaciones
        $situaciones = SQLConnection::obtenerSituacionesBancos($cuit);
        //
        $sit_mayor_cero = false;
        if ($situaciones) {
            foreach ($situaciones as $situacion) {
                foreach ($situacion as $key => $value) {
                    if ($key == 'periodo') {
                        $situacion->$key = str_replace('-', ',', $value);
                    }
                    //
                    if ($value == null) {
                        $situacion->$key = 0;
                    } elseif ($key != 'periodo') {
                        $sit_mayor_cero = true;
                    }
                }
            }
        }
        //
        if (!$sit_mayor_cero) {
            $situaciones = null;
        }
        //
        for ($i = 0; $i <= 23; $i++) {
            $periodos_graficos[$i] = date("Ym", strtotime($periodo_maximo . " -$i months"));
        }
        //Gráfico de garantías  
        $garantias = SQLConnection::backendStoreProcedure('obtener_garantias_bancos', array($cuit));
        $garantias = self::procesarGraficoGarantias($garantias, $periodos_graficos);
        //
        if ($garantias) {
            foreach ($garantias as $key => $garantia) {
                foreach ($garantia as $key2 => $value) {
                    if ($key2 == 'periodo') {
                        $garantias[$key][$key2] = str_replace('-', ',', $value);
                    }
                }
            }
        }
        //tabla de bancos
        for ($i = 0; $i <= 23; $i++) {
            if ($i % 8 == 0) {
                $periodo[$i] = date("Ym", strtotime($periodo_maximo . " -$i months"));
            } else {
                $periodo[$i] = date("Ym", strtotime($periodo_maximo . " -$i months"));
            }
        }
        krsort($periodo);
        $periodo = array_values($periodo);
        $obtenerBancos = SQLConnection::obtenerBancos($cuit);
        //
        if ($obtenerBancos) {
            foreach ($obtenerBancos as $key_banco => $banco) {
                foreach ($periodo as $key_mes => $mes) {
                    if ($mes == $banco->fec_inf) {
                        if (!isset($bancos_ordenados['TOTAL_PERIODO'][$mes]['TOTAL_PERIODO'])) {
                            $bancos_ordenados['TOTAL_PERIODO'][$mes]['TOTAL_PERIODO'] = 0;
                        }
                        //
                        $bancos_ordenados[$banco->nombre][$mes]['situacion'] = ($obtenerBancos[$key_banco]->situacion) ? $obtenerBancos[$key_banco]->situacion : '';
                        //
                        if (($obtenerBancos[$key_banco]->situacion && $obtenerBancos[$key_banco]->situacion > 1)) {
                            $bancos_ordenados[$banco->nombre][$mes]['desplegar'] = 1;
                        }
                        $bancos_ordenados[$banco->nombre][$mes]['total'] = ($obtenerBancos[$key_banco]->total) ? $obtenerBancos[$key_banco]->total : '';
                        $bancos_ordenados['TOTAL_PERIODO'][$mes]['TOTAL_PERIODO'] += ($obtenerBancos[$key_banco]->total) ? $obtenerBancos[$key_banco]->total : 0;
                    }
                }
            }
            //
            foreach ($bancos_ordenados as $key_bo => $bancos) {
                foreach ($periodo as $key_mes => $mes) {
                    if (!array_key_exists($mes, $bancos)) {
                        $bancos_ordenados[$key_bo][$mes]['situacion'] = '';
                        $bancos_ordenados[$key_bo][$mes]['total'] = '';
                        $bancos_ordenados[$key_bo][$mes]['TOTAL_PERIODO'] = '';
                    }
                }
            }
            //
            foreach ($bancos_ordenados as $key_bo => $bancos) {
                ksort($bancos_ordenados[$key_bo]);
            }
            //
            foreach ($bancos_ordenados as $key_bo => $bancos) {
                $i = 0;
                $n = 0;
                foreach ($bancos as $key_b => $banco) {
                    if ($n % 8 == 0) {
                        $i++;
                    }
                    //
                    $bancos_ordenados_separados[$key_bo][$i][$key_b] = $banco;
                    $n++;
                }
            }
            $i = 0;
            foreach ($periodo as $key_mes => $mes) {
                if ($key_mes % 8 == 0) {
                    $i++;
                }
                $periodos_ordenados[$i][$key_mes] = $mes;
            }
        }
        //
        $periodo = $periodos_ordenados;
        $bancos_ordenados_separados = array_reverse($bancos_ordenados_separados);
        //
        $obtener_bancos = $bancos_ordenados_separados;
        //
        if ($cheques || $cheques_vinculaciones_todas) {
            foreach ($cheques as $key => $cheque) {
                $cheques_ordenados[$cheque->tipo][] = $cheque;
            }
            //
            if ($cheques_vinculaciones_todas) {
                foreach ($cheques_vinculaciones_todas as $key => $vinculacion_anterior) {
                    $vinculacion_encontrada = false;
                    //
                    if (isset($cheques_ordenados['vinculaciones'])) {
                        foreach ($cheques_ordenados['vinculaciones'] as $key => $vinculacion) {
                            if ($vinculacion_anterior->cuit_firmante == $vinculacion->cuit_firmante) {
                                $vinculacion_encontrada = true;
                            }
                        }
                    }
                    if ($vinculacion_encontrada === false) {
                        $vinculacion_anterior->cantidad = 0;
                        $cheques_ordenados['vinculaciones'][] = $vinculacion_anterior;
                    }
                }
            }
            $cheques_ordenados['cantidad_propios'] = 0;
            $cheques_ordenados['cantidad_propios'] += isset($cheques_ordenados['propio'][0]->total_cheques) ? $cheques_ordenados['propio'][0]->total_cheques : 0;
            $cheques_ordenados['cantidad_propios'] += isset($cheques_ordenados['a_nombre_de_empresa'][0]->total_cheques) ? $cheques_ordenados['a_nombre_de_empresa'][0]->total_cheques : 0;
            $cheques_ordenados['cantidad_empresas'] = isset($cheques_ordenados['empresa']) ? sizeof($cheques_ordenados['empresa']) : 0;
            $cheques_ordenados['cantidad_vinculaciones'] = isset($cheques_ordenados['vinculaciones']) ? sizeof($cheques_ordenados['vinculaciones']) : 0;
        }
        //
        $grafico_cheques = SQLConnection::graficoCardChequesRechazados($cuit);
        $cancelaciones = SQLConnection::obtenerCancelacion($cuit);
        $grafico_cheques = self::generarGraficoCheques($grafico_cheques, 24);
        $persona_fisica = (substr($cuit, 0, 1) != '3') ? true : false;
        $cheques = $cheques_ordenados;
        $env = Misc::obtenerColoresEnv();
        //
        $obtener_morosos = SQLConnection::backendStoreProcedure('obtener_morosos', array($cuit));
        //
        $vista = \View::make('/informe-comercial-nuevo/bancos_nuevo')->with(compact(
            'periodo',
            'obtener_morosos',
            'obtener_bancos',
            'cheques',
            'persona_fisica',
            'card_status_bancario',
            'json'
            ,
            'grafico_cheques_bancos',
            'grafico_financiero',
            'grafico_situaciones',
            'grafico_garantias',
            'cancelaciones',
            'id_persona',
            'cuit',
            'vinculados_segun_bcra',
            'grafico_cheques',
            'cuadro_cheques',
            'cuadro_cheques_totales',
            'total_cheques'
        ))->render();
        //
        if (!$json) {
            return $vista;
        }
        //
        return \Response::json(array(
            'view' => $vista,
            'info' => compact('financiero', 'situaciones', 'garantias', 'env', 'grafico_cheques', 'cheques', 'obtener_morosos', 'obtener_bancos', 'cancelaciones', 'imagen_fidelitas')
        ), 200, [], JSON_NUMERIC_CHECK);
    }

    // FUNCION QUE GENERA LOS DATOS DEL GRAFICO DE GARANTIAS USADA SOLAMENTE DENTRO DE LA FUNCION DE BANCOS
    private static function procesarGraficoGarantias($data, $periodos)
    {
        $grafico_ordenado = [];
        $n = 0;
        foreach ($data as $key_info => $info) {
            foreach ($periodos as $key_periodo => $periodo) {
                $fecha = substr($periodo, 0, 4) . '-' . substr($periodo, 4, 6) . '-' . '01';
                if ($info->periodo == $fecha) {
                    $grafico_ordenado[$fecha]['periodo'] = $fecha;

                    if (isset($grafico_ordenado[$fecha]['con_garantias_a'])) {
                        $grafico_ordenado[$fecha]['con_garantias_a'] += $info->con_garantias_a;
                    } else {
                        $grafico_ordenado[$fecha]['con_garantias_a'] = ($info->con_garantias_a) ? $info->con_garantias_a : 0;
                    }

                    if (isset($grafico_ordenado[$fecha]['con_garantias_b'])) {
                        $grafico_ordenado[$fecha]['con_garantias_b'] += $info->con_garantias_b;
                    } else {
                        $grafico_ordenado[$fecha]['con_garantias_b'] = ($info->con_garantias_b) ? $info->con_garantias_b : 0;
                    }

                    if (isset($grafico_ordenado[$fecha]['sin_garantias'])) {
                        $grafico_ordenado[$fecha]['sin_garantias'] += $info->sin_garantias;
                    } else {
                        $grafico_ordenado[$fecha]['sin_garantias'] = ($info->sin_garantias) ? $info->sin_garantias : 0;
                    }

                    if (isset($grafico_ordenado[$fecha]['total'])) {
                        $grafico_ordenado[$fecha]['total'] += $info->total;
                    } else {
                        $grafico_ordenado[$fecha]['total'] = ($info->total) ? $info->total : 0;
                    }
                } else {
                    if (!isset($grafico_ordenado[$fecha]['periodo'])) {
                        $grafico_ordenado[$fecha]['periodo'] = $fecha;
                        $grafico_ordenado[$fecha]['con_garantias_a'] = 0;
                        $grafico_ordenado[$fecha]['con_garantias_b'] = 0;
                        $grafico_ordenado[$fecha]['sin_garantias'] = 0;
                        $grafico_ordenado[$fecha]['total'] = 0;
                    }
                }
            }
        }
        //arreglo periodos vacíos. 2019-10-07
        foreach ($grafico_ordenado as $fecha => $value) {
            $total = $grafico_ordenado[$fecha]['total'] - ($grafico_ordenado[$fecha]['con_garantias_a'] + $grafico_ordenado[$fecha]['con_garantias_b'] + $grafico_ordenado[$fecha]['sin_garantias']);
            if ($total > 0) {
                if ((int) $grafico_ordenado[$fecha]['sin_garantias'] > 0) {
                    $grafico_ordenado[$fecha]['sin_garantias'] = $grafico_ordenado[$fecha]['sin_garantias'] + $total;
                } else {
                    $grafico_ordenado[$fecha]['sin_garantias'] = $total;

                }
            }
        }
        return array_values($grafico_ordenado);
    }
}
