<?php

namespace App\Http\Controllers;

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

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

use DB;

class BlueController extends Controller {

    public function index() {
        $clientes = self::totalClients();
        if (Request::input('ruta') !== null) {
            $ruta = '/' . Request::input('ruta');
        } else {
            $ruta = '/';
        }
        //
        $nuevo_cliente = Request::input('nuevo_cliente') ?? 0;
        //
        $paises = self::paisesSinRepetir();
        $navbarSeccionesNuevoCliente = 1;
        $titulo_navbar = 'Departamento Comercial';
        return view('/blue/panel_clientes')->with(compact('clientes', 'ruta', 'navbarSeccionesNuevoCliente', 'paises', 'titulo_navbar', 'nuevo_cliente'));
    }
    public function busquedaClientes() {
        $cliente = $_POST['cliente'];
        $ifx = $_POST['ifx'] ?? '0';
        //---
        #Se agrega para que devuelva el ramo y subramo del cliente - TB 26062024
        $consulta = [];
        $ramo_descripcion = "";
        $cod_clae = "";
        $sub_ramo = "";
        $ramos = SQLConnection::backendStoreProcedure("obtener_clae", array($cliente));

        if (!empty($ramos) && !is_null($ramos)) {
            foreach ($ramos as $ramo) {
                if ($ramo->principal == 1) {
                    $cod_clae = $ramo->cod_clae;
                    break; // Salir del bucle una vez encontrado el valor
                }
            }

            if (!empty($cod_clae)) {
                $subramos = SQLConnection::backendStoreProcedure('obtener_ramos_subramos', array($cod_clae));

                if (!empty($subramos) && !is_null($subramos)) {
                    foreach ($subramos as $subramo) {
                        $ramo_descripcion = $subramo->ramo;
                        $cod_ramo = $subramo->cod_ramo;
                        $sub_ramo = $subramo->subramo;
                        $subramo_cod = $subramo->cod_subramo;
                        break; // Salir del bucle una vez encontrado el valor
                    }
                }
            }
        }

        if (preg_match('/^[0-9]{3,6}$/', $cliente) == 1) {
            $consulta = SQLConnection::busquedaClientes($cliente, '', '', $ifx);
            foreach ($consulta as $resultado) {
                $cliente = $resultado->cliente;
                $params = array($cliente);
                $datos_cliente = SQLConnection::backendStoreProcedure("backend_datos_clientes", $params, 'selectOne');
                $resultado->email = isset($datos_cliente->email) ? $datos_cliente->email : null;

            }
        } else if ($cliente <= '8' && preg_match('/^[0-9]{2}$/', $cliente) == 1) {
            $consulta = SQLConnection::busquedaClientes($cliente, '', '', $ifx);
            foreach ($consulta as $resultado) {
                $cliente = $resultado->cliente;
                $params = array($cliente);
                $datos_cliente = SQLConnection::backendStoreProcedure("backend_datos_clientes", $params, 'selectOne');
                $resultado->email = $datos_cliente->email;

            }
        } else if (preg_match('/^[32]{1}[0-9]{3,10}$/', $cliente) == 1) {
            $consulta = SQLConnection::busquedaClientes('', $cliente, '', $ifx);
            foreach ($consulta as $resultado) {
                $cliente = $resultado->cliente;
                $params = array($cliente);
                $datos_cliente = SQLConnection::backendStoreProcedure("backend_datos_clientes", $params, 'selectOne');
                $resultado->email = $datos_cliente->email;

            }
        } else {
            $consulta = SQLConnection::busquedaClientes('', '', $cliente, $ifx);
            foreach ($consulta as $resultado) {
                $cliente = $resultado->cliente;
                $params = array($cliente);
                $datos_cliente = SQLConnection::backendStoreProcedure("backend_datos_clientes", $params, 'selectOne');
                $resultado->email = $datos_cliente->email;
            }
        }

        if (!empty($consulta)) {
            $consulta[0]->ramo = isset($ramo_descripcion) ? $ramo_descripcion : 'No informado';
            $consulta[0]->subramo = isset($sub_ramo) ? $sub_ramo : 'No informado';
        } else {
            $consulta[0] = [
                'ramo' => isset($ramo_descripcion) ? $ramo_descripcion : 'No informado',
                'subramo' => isset($sub_ramo) ? $sub_ramo : 'No informado',
                'cod_ramo' => isset($cod_ramo) ? $cod_ramo : 0,
                'cod_subramo' => isset($subramo_cod) ? $subramo_cod : 0
            ];
        }
        return $consulta;
    }

    public function ClientesLED() {
        /** selector de LED / inquiro vitae **/
        $producto_fidelitas = (NULL !== Request::input('prod')) ? Request::input('prod') : 47;
        // todos los productos : 47 - 10 (paso 0)
        // $clientes = SQLConnection::backendStoreProcedure('Clientes_', array(ENV('PLATAFORMA')), 'select');
        // $clientes = SQLConnection::backendStoreProcedure('LED_Clientes', array('SELECT',NULL,NULL,NULL,NULL, 0, ENV('PLATAFORMA')), 'select');
        $clientes = SQLConnection::backendStoreProcedure('LED_Clientes', array('SELECT', NULL, NULL, NULL, NULL, 0, '47,73'), 'select');
        foreach ($clientes as $cliente) {
            // if ($cliente->cliente == 1758083682){
            // 	dd($cliente);
            // }
            $servicios = SQLConnection::backendStoreProcedure('usuarios_restricciones_', array('servicios', $cliente->cliente), 'select');
            foreach ($servicios as $servicio) {
                if ($servicio->producto == env('IV_PRODUCTO')) {
                    $cliente->inquiro = $servicio;
                } elseif ($servicio->producto == env('IMPE_PRODUCTO')) {
                    $cliente->imperium = $servicio;
                } elseif ($servicio->producto == env('LED_PRODUCTO')) {
                    $cliente->led = $servicio;
                }
            }
        }
        $titulo_navbar = 'Panel Cliente';
        //
        return view('/blue/clientes/panel_clientes_led')->with(compact(['clientes', 'producto_fidelitas', 'titulo_navbar']));
    }

    // FUNCION ENCARGADA DE DEVOLVER LA VISTA DE SERVICIOS CONTRATADOS DE CLIENTE
    public function serviciosContratadosCliente() {
        $cli_codigo = trim(Request::input('cli_codigo'));
        $cliente = trim(Request::input('cliente'));
        $nombre_cliente = Request::input('cliente_nombre');
        $cli_cuit = Request::input('cli_cuit');
        $estado = Request::input('estado');
        $id_producto = Request::input('id_producto');
        $tipo_paquete_cliente = Request::input('tipo_paquete_cliente');
        $nombre_producto = Request::input('prod_nombre_cliente');
        $limite_consumo_cliente = Request::input('limite_consumo_cliente');
        $fecha_desde = Request::input('fecha_desde');
        $fecha_hasta = Request::input('fecha_hasta');
        $estado_bloquea = Request::input('estado_bloquea_cliente');
        $estado_producto = Request::input('estado_producto_cliente');
        $modalidad_de_pago = Request::input('modalidad_de_pago');
        $impe_acceso = Request::input('impe_acceso');
        $impe_doc = Request::input('impe_doc');
        //---
        //$productos_todos = SQLConnection::backendStoreProcedure("obtener_productos_cliente",array($cliente,'N','N',env('PLATAFORMA')),'select');
        $productos_todos = SQLConnection::backendStoreProcedure("obtener_productos_cliente", array($cliente), 'select');

        //--- SE HABILITAN LAS SECCIONES DE ACCIONES PARA CIERTOS PRODUCTOS
        $habilitar_secciones = 1;
        if ($estado_producto == 'INACTIVO' || $estado == 'AGREGAR' || ($estado == 'MODIFICAR' && $id_producto != env('IMPE_PRODUCTO') && $id_producto != env('LED_PRODUCTO') && $id_producto != env('IV_PRODUCTO'))) {
            --$habilitar_secciones;
        }
        // SE DETECTAN SE EL CLIENTE TIENE PRODUCTO,FAMILIAS E CONTRAPARTES PARA LOS SERVICIOS ESPECIALES
        $hay_productos = 0;
        $hay_familias = 0;
        $hay_contrapartes = 0;
        //
        if ($habilitar_secciones) {
            //
            $prodcli = SQLConnection::backendStoreProcedure('LN_cliente_productos_', array('PRODUCTXSERV', $cliente, null, null, null, null, Session::get('usuario')->user_id, null, null, $id_producto), 'select');
            $hay_productos = (empty($prodcli)) ? 0 : 1;
            //
            if ($hay_productos == 1) {
                $familias = SQLConnection::backendStoreProcedure('LN_familias_sc', array('search', NULL, NULL, $cliente, null, NULL, NULL, NULL, NULL, NULL, NULL, $id_producto), 'select');
                $hay_familias = (empty($familias)) ? 0 : 1;

                //
                if ($hay_familias == 1) {
                    //
                    $contrap = SQLConnection::backendStoreProcedure('LN_contrapartes_DEV', array('search_informes_contraparte', null, null, $cliente, null, null, null, null, null, null, null, null, null, null, Session::get('usuario')->user_id, null, null, $id_producto), 'select');
                    $hay_contrapartes = (empty($contrap)) ? 0 : 1;
                }
            }
        }
        //
        $seccion_especial = 0;
        if ($id_producto == env('IMPE_PRODUCTO')) {
            $seccion_especial = 1;
        }
        //---

        $facturacion = SQLConnection::backendStoreProcedure('clientes_condiciones_facturacion_', array('SELECT', $cliente, $id_producto), 'selectOne');
        $productos_factura = SQLConnection::backendStoreProcedure('productos_facturas_', array($id_producto), 'select');
        $listas = SQLConnection::backendStoreProcedure('listas_precios_', array('LISTAS'), 'select');

        $titulo_navbar = 'Producto';
        $consumido = new \stdClass();
        if ($modalidad_de_pago == 'PP' || $modalidad_de_pago == 'CP') {
            $params = array($cliente, '0', $id_producto);
            $consumido = SQLConnection::backendStoreProcedure("obtener_control_consumos", $params, 'selectOne');
            $consumido->disponible = null;
            if (isset($consumido->limite_cliente) && $consumido->limite_cliente !== '0') {
                $consumido->disponible = $consumido->limite_cliente - $consumido->consumido_cliente;
            }
        }
        return view('blue/servicios_contratados')->with(compact('cliente', 'cli_codigo', 'productos_todos', 'estado', 'id_producto', 'tipo_paquete_cliente', 'nombre_producto', 'limite_consumo_cliente', 'fecha_desde', 'fecha_hasta', 'estado_bloquea', 'estado_producto', 'habilitar_secciones', 'nombre_cliente', 'modalidad_de_pago', 'cli_cuit', 'hay_familias', 'hay_productos', 'hay_contrapartes', 'impe_doc', 'impe_acceso', 'titulo_navbar', 'facturacion', 'productos_factura', 'listas', 'consumido'));
    }

    // FUNCION ENCARGADA DE DEVOLVER LA VISTA DE SERVICIOS CONTRATADOS DEL USUARIO
    public function serviciosContratadosUsuario() {
        $cli_codigo = trim(Request::input('cli_codigo'));
        $cliente = trim(Request::input('cliente'));
        $nombre_cliente = Request::input('cliente_nombre');
        $cli_cuit = Request::input('cli_cuit');
        $estado = Request::input('estado');
        $user_id = Request::input('usuario');
        $username = Request::input('login');
        $email = Request::input('email');
        $first_name = Request::input('first_name');
        $last_name = Request::input('last_name');
        $password = Request::input('password');
        $nombre_producto = Request::input('nombre_producto');
        $limite_consumo = Request::input('limite_consumo');
        $id_producto = Request::input('id_producto');
        $estado_login = Request::input('estado_login');
        $estado_producto = Request::input('estado_producto');
        // el js llena el html
        $titulo_navbar = '';
        // --verifica si el $password viene encriptado o no.
        // --segun eso el input de la vista se va a mostrar tipo text o tipo password
        $type = '';
        if (str_contains($password, '*')) {
            $type = 'password';
        } else {
            $type = 'text';
        }
        //--
        $servicios = SQLConnection::backendStoreProcedure('usuarios_restricciones_', array('servicios', $cliente), 'select');
        $tieneVisibilidad = 0;
        foreach ($servicios as $serv) {
            if ($id_producto == $serv->producto) {
                $tieneVisibilidad = 1;
                break;
            }
        }
        // Define indicadores para decidir en vista que tipo de checkbox mostrar
        $checkbox_inquiro = 0;
        $checkbox_imperium = 0;
        if ($id_producto == '10' || $id_producto == '38') {
            $checkbox_inquiro = 1;
        }
        if ($id_producto == '73') {
            $checkbox_imperium = 1;
        }
        $params = array('LISTAR', $cliente, $user_id, 1, null, null, null, null, null, null, null, null, null);
        $checkbox_impe_inq_led = SQLConnection::backendStoreProcedure("usuarios_servicios_abm", $params, 'selectOne');
        //--
        //
        $selectedRoleId = isset($checkbox_impe_inq_led) ? $checkbox_impe_inq_led->id_tipo_user : null;
        //
        $roles = SQLConnection::backendStoreProcedure("usuarios_servicios_abm", array('TIPOUSUARIOS',0,0,1), 'select');
        //
        return view('blue/servicios_usuarios')->with(compact('roles','cliente', 'cli_codigo', 'estado', 'user_id', 'username', 'email', 'first_name', 'last_name', 'password', 'nombre_producto', 'limite_consumo', 'id_producto', 'estado_login', 'estado_producto', 'tieneVisibilidad', 'nombre_cliente', 'servicios', 'checkbox_inquiro', 'checkbox_imperium', 'cli_cuit', 'checkbox_impe_inq_led', 'type', 'titulo_navbar','selectedRoleId'));
    }

    // FUNCION QUE REALIZA LA BUSQUEDA CON CLI CODIGO, CUIT O NOMBRE DE CLIENTE PARA LOS CLIENTES DE LED
    public function buscarClienteLed() {
        $busqueda = $_POST['cliente'];
        //
        $clientes = SQLConnection::backendStoreProcedure('LED_Clientes', array('SELECT', NULL, NULL, NULL, NULL, 0, env('PLATAFORMA')), 'select');
        //
        $resultado = [];
        //
        if (preg_match('/^[0-9]{3,6}$/', $busqueda)) {
            // CLI CODIGO
            foreach ($clientes as $indice_cliente => $cliente) {
                if (strpos($cliente->cli_codigo, $busqueda) !== false) {
                    array_push($resultado, $cliente);
                }
            }
        } else if (preg_match('/^[32]{1}[0-9]{3,10}$/', $busqueda)) {
            // CUIT
            foreach ($clientes as $indice_cliente => $cliente) {
                if (strpos($cliente->numero, $busqueda) !== false) {
                    array_push($resultado, $cliente);
                }
            }
        } else {
            // RAZON SOCIAL
            foreach ($clientes as $indice_cliente => $cliente) {
                if (strpos($cliente->nombre_cliente, $busqueda) !== false) {
                    array_push($resultado, $cliente);
                }
            }
        }
        //
        return $resultado;
    }


    public function buscar_cliente() {
        if (isset($_POST['clienteOk']) && !Misc::tieneCaracterRaroBase($_POST['clienteOk'])) {
            $valoresConsulta = $_POST['clienteOk'];
            $data = explode('-', trim($valoresConsulta));
            $ruta = '/administracion-clientes';
            $cli_codigo = trim($data[0]);
            $cliente = $data[1];
            $informe_comercial_id = ENV('ID_INFORME_COMERCIAL');
            $titulo_navbar = 'Datos del cliente';
            //
            $subramos = SQLConnection::obtenerCodigos("obtener_ramos_subramos");
            //
            $params = array($cliente);
            $datos_cliente = SQLConnection::backendStoreProcedure("backend_datos_clientes", $params, 'selectOne');	//	SP con datos del cliente									
            $cliente_productos = SQLConnection::backendStoreProcedure("backend_clientes_productos", $params, 'select');	//	SP de productos del cliente
            // dd($cliente_productos);
            $cantidadComentarios = SQLConnection::backendStoreProcedure("backend_datos_clientes_comentarios", $params, 'select');
            $cantidadComentarios = strval(count($cantidadComentarios));
            $tieneApi = 0;
            //	Recorre la variable $cliente_productos 
            foreach ($cliente_productos as $key => $cli_prod) {
                if ($cliente_productos[$key]->tipo_producto == 'API') {
                    $tieneApi = 1;
                    break;
                }
                continue;
            }
            $tieneIT = 0;
            $datos_it = new \stdClass();
            $conexiones_it = [];
            foreach ($cliente_productos as $key => $cli_prod) {
                if ($cliente_productos[$key]->id_producto == '102') {
                    $tieneIT = 1;
                    $params = array('select', $cliente);
                    $datos_it = SQLConnection::backendStoreProcedure("ITerceros_clientes", $params, 'selectOne');
                    $conexiones_it = SQLConnection::backendStoreProcedure("ITerceros_conexiones_select", array($cliente), 'select');
                    break;
                }
                continue;
            }
            $params = array($cliente);
            $usuario_producto = SQLConnection::backendStoreProcedure("backend_usuarios_productos", $params, 'select');
            $params = array($cliente, 'S', 'N');
            $productos_todos = SQLConnection::backendStoreProcedure("obtener_productos_cliente", $params, 'select');
            //
            $params = array($cliente, 'S', 'S');
            $productos = SQLConnection::backendStoreProcedure("obtener_productos_cliente", $params, 'select');
            //
            $temp = [];
            $usuarios_distintos = [];
            foreach ($usuario_producto as $producto) {
                $temp[$producto->username][$producto->id_producto]['user_id'] = $producto->user_id;
                $temp[$producto->username][$producto->id_producto]['cli_codigo'] = $producto->cli_codigo;
                $temp[$producto->username][$producto->id_producto]['username'] = $producto->username;
                $temp[$producto->username][$producto->id_producto]['email'] = $producto->email;
                $temp[$producto->username][$producto->id_producto]['first_name'] = $producto->first_name;
                $temp[$producto->username][$producto->id_producto]['last_name'] = $producto->last_name;
                $temp[$producto->username][$producto->id_producto]['password'] = $producto->password;
                $temp[$producto->username][$producto->id_producto]['id_producto'] = $producto->id_producto;
                $temp[$producto->username][$producto->id_producto]['consumido'] = null;
                //	
                // $params = array($cliente,$producto->user_id,$producto->id_producto);
                // $consumido = SQLConnection::backendStoreProcedure("backend_obtener_total_consumos",$params,'selectOne');
                // $temp[$producto->username][$producto->id_producto]['consumido'] = $consumido->consultas; 
                //
                $temp[$producto->username][$producto->id_producto]['nombre_producto'] = $producto->nombre_producto;
                $temp[$producto->username][$producto->id_producto]['sigla'] = $producto->sigla;
                $temp[$producto->username][$producto->id_producto]['limite_consumo'] = $producto->limite_consumo;
                $temp[$producto->username][$producto->id_producto]['last_name'] = $producto->last_name;
                $temp[$producto->username][$producto->id_producto]['first_name'] = $producto->first_name;
                $temp[$producto->username][$producto->id_producto]['password'] = ($producto->password != '@encripted' ? $producto->password : '**********');
                $temp[$producto->username][$producto->id_producto]['bloquea'] = $producto->bloquea;
                $temp[$producto->username][$producto->id_producto]['estado_login'] = $producto->estado_login;
                $temp[$producto->username][$producto->id_producto]['estado_producto'] = $producto->estado_producto;
                $temp[$producto->username][$producto->id_producto]['seccion'][] = ($producto->id_seccion) ? '(' . $producto->id_seccion . ') ' . $producto->nombre_seccion : '';
                $temp[$producto->username][$producto->id_producto]['ids_secciones'][] = ($producto->id_seccion) ? $producto->id_seccion : '';
                //
                if ($producto->user_id !== null) {
                    $usuarios_distintos[$producto->user_id] = new \stdClass();
                    $usuarios_distintos[$producto->user_id]->user_id = $producto->user_id;
                    $usuarios_distintos[$producto->user_id]->username = $producto->username;
                    $usuarios_distintos[$producto->user_id]->first_name = $producto->first_name;
                    $usuarios_distintos[$producto->user_id]->last_name = $producto->last_name;
                }
            }
            //
            $usuarios = [];
            $usuarios = $temp;
            //
            $paises = self::paisesSinRepetir();
            $datos_cliente->altura = explode(' ', $datos_cliente->domicilio);
            $datos_cliente->altura = end($datos_cliente->altura);
            // Variable definida para generar secciones en el navbar de clientes enviada para la vista MENU INTERNO SIMPLE
            $navbarSeccionesClientes = 1;
            // BLOQUE SI SE ESTA ACCEDIENDO CON UN REDIRECT
            $desde_servicios = 0;
            $desde_usuarios = 0;
            $desde_datos = 0;
            $desde_api = 0;
            //
            if (isset($_POST['redirect'])) {
                $redirect = $_POST['redirect'];
                if ($redirect == 'servicios') {
                    ++$desde_servicios;
                } elseif ($redirect == 'usuarios') {
                    ++$desde_usuarios;
                } elseif ($redirect == 'datos') {
                    ++$desde_datos;
                } elseif ($redirect == 'api') {
                    ++$desde_api;
                }
            }
            $nombre_cliente = $datos_cliente->nombre;
            $cli_cuit = $datos_cliente->cuit;
            $servicios = SQLConnection::backendStoreProcedure('usuarios_restricciones_', array('servicios', $cliente), 'select');
            //------			
            return view('blue/datos_cliente')->with(compact('datos_cliente', 'subramos', 'cliente_productos', 'cli_codigo', 'cliente', 'usuarios', 'productos_todos', 'productos', 'ruta', 'valoresConsulta', 'usuarios_distintos', 'tieneApi', 'tieneIT', 'datos_it', 'conexiones_it', 'paises', 'navbarSeccionesClientes', 'cantidadComentarios', 'desde_servicios', 'desde_usuarios', 'desde_datos', 'desde_api', 'nombre_cliente', 'cli_cuit', 'titulo_navbar', 'servicios'));
        } else {
            return 0;
        }
    }

    public function actualizarDatosIntegracionTerceros() {
        //var_dump('actualizarDatosIntegracionTerceros'); die(); 
        $cliente = Request::input('cliente');
        $usuario = Request::input('usuario');
        $codEmpresa = Request::input('codEmpresa');
        $ptoTrabajo = Request::input('ptoTrabajo');
        $escenario = Request::input('escenario');
        $vista = Request::input('vista');
        $url = Request::input('url');
        $params = array('update', $cliente, $usuario, $codEmpresa, $ptoTrabajo, $escenario, $vista, $url);
        $actualiza = SQLConnection::backendStoreProcedure('ITerceros_clientes', $params, 'selectOne');
        return json_encode($actualiza->error ?? 1);
    }

    // FUNCION ENCARGADA DE DEVOLVER LA VISTA DE VISIBILIDAD
    public function vistaVisibilidad() {
        $estado = Request::input('estado');
        $cli_codigo = trim(Request::input('cli_codigo'));
        $cliente = trim(Request::input('cliente'));
        $cli_cuit = Request::input('cli_cuit');
        $nombre_cliente = Request::input('cliente_nombre');
        $user_id = Request::input('usuario');
        $username = Request::input('login');
        $email = Request::input('email');
        $first_name = Request::input('first_name');
        $last_name = Request::input('last_name');
        $password = Request::input('password');
        $nombre_producto = Request::input('nombre_producto');
        $limite_consumo = Request::input('limite_consumo');
        $id_producto = Request::input('id_producto');
        $estado_login = Request::input('estado_login');
        $estado_producto = Request::input('estado_producto');
        //-------------------------------------------------------
        // PAISES X PRODUCTO
        $paises = SQLConnection::backendStoreProcedure('backend_cliente_paises', array('obtener_cliente_paisesxserv', $cliente, $id_producto), 'select');
        // $cliente_paises = SQLConnection::backendStoreProcedure('backend_cliente_paises', array('obtener_cliente_paises', $cliente), 'select');
        // foreach ($cliente_paises as $key => $value) {
        // 	if ($value->servicio_contratado == $id_producto){
        // 	array_push($paises, $value);
        // 	}
        // }
        $prod_pais_popul = 0;
        if ($paises != []) {
            $prod_pais_popul = 1;
        }
        //-------------------------------------------------------
        // FAMILIAS X PRODUCTO	
        // $cliente_familias = SQLConnection::backendStoreProcedure('backend_cliente_familias', array('obtener_cliente_familias', $cliente), 'select');
        $familias = SQLConnection::backendStoreProcedure('backend_cliente_familias', array('obtener_cliente_familiasxserv', $cliente, $id_producto), 'select');
        // foreach ($cliente_familias as $key => $value) {
        // 	if ($value->servicio_contratado == $id_producto){
        // 	array_push($familias, $value);
        // 	}
        // }
        $prod_familias_popul = 0;
        if ($familias != []) {
            $prod_familias_popul = 1;
        }
        //-------------------------------------------------------	
        // INDICADORES X PRODUCTO
        $indicadores = SQLConnection::backendStoreProcedure('usuarios_restricciones_', array('indicadoresxservicio', $cliente, null, $id_producto), 'select');
        //-------------------------------------------------------
        // PAISES RESTRINGIDOS X PRODUCTO
        $paises_restringidos = SQLConnection::backendStoreProcedure('usuarios_restricciones_', array('paises_restringidos', $cliente, $user_id, $id_producto), 'select');

        // Agrega al objeto atributo ver pais para seleccionar o deselccionar checkbox
        foreach ($paises as $key => $pais_Servicio) {
            $pais_Servicio->vepais = 'si';
            foreach ($paises_restringidos as $pai_res) {
                if ($pai_res->pais_servicio == $pais_Servicio->country_code) {
                    $paises[$key]->vepais = 'no';
                    break;
                }
            }
        }
        //-------------------------------------------------------
        // FAMILIAS RESTRINGIDAS X PRODUCTO
        $familias_restringidas = SQLConnection::backendStoreProcedure('usuarios_restricciones_', array('familias_restringidas', $cliente, $user_id, $id_producto), 'select');

        // Agrega al objeto atributo ver familia para seleccionar o deselccionar checkbox
        foreach ($familias as $key => $fam_Servicio) {
            $fam_Servicio->veflia = 'si';
            foreach ($familias_restringidas as $fam_res) {
                if ($fam_res->familia == $fam_Servicio->familia) {
                    $familias[$key]->veflia = 'no';
                    break;
                }
            }
        }

        //-------------------------------------------------------
        // INDICADORES RESTRINGIDOS X PRODUCTO

        $indicadores_restringidos = SQLConnection::backendStoreProcedure('usuarios_restricciones_', array('indicadores_restringidos', $cliente, $user_id, $id_producto), 'select');

        // Agrega al objeto atributo ver indicador para seleccionar o deselccionar checkbox
        foreach ($indicadores as $key => $ind_Servicio) {
            $ind_Servicio->veind = 'si';
            foreach ($indicadores_restringidos as $ind_res) {
                if ($ind_res->indicador == $ind_Servicio->indicador) {
                    $indicadores[$key]->veind = 'no';
                    break;
                }
            }
        }
        return view('/blue/visibilidad')->with(compact('cli_codigo', 'cliente', 'user_id', 'estado', 'username', 'email', 'first_name', 'last_name', 'password', 'nombre_producto', 'limite_consumo', 'id_producto', 'estado_login', 'estado_producto', 'familias', 'indicadores', 'familias_restringidas', 'indicadores_restringidos', 'paises', 'paises_restringidos', 'prod_pais_popul', 'prod_familias_popul', 'nombre_cliente', 'cli_cuit'));
    }

    public function seccionesProductos() {
        $prod_codigo = Request::input('prod_codigo');
        $user_id = Request::input('usuario');
        $params = array($prod_codigo, $user_id);
        $cliente=(int) Request::input('cliente'); 

        $buscar_secciones = ($prod_codigo != env('LED_PRODUCTO') || $cliente == 323510573 || $cliente == 65912267 || $cliente == 1218931240);
        //----------
        $secciones = [];
        $todas = "";
        $anteriores = "";
        if( $buscar_secciones ){
            $secciones = SQLConnection::backendStoreProcedure("obtener_productos_secciones", $params, 'select');
            foreach ($secciones as $seccion) {
                if ($todas != '') {
                    $todas .= ',';
                }
                $todas .= $seccion->id_seccion;
                if ($seccion->activo == 1) {
                    if ($anteriores != '') {
                        $anteriores .= ',';
                    }
                    $anteriores .= $seccion->id_seccion;
                }
            }
        }
        

        return json_encode(view('blue/secciones')->with(compact('secciones', 'todas', 'anteriores'))->render());
    }

    public function seccionesProductosBkp() {
        $prod_codigo = Request::input('prod_codigo');
        $user_id = Request::input('usuario');
        $params = array($prod_codigo, $user_id);
        $cliente=(int) Request::input('cliente'); 
        //----------
        $secciones = SQLConnection::backendStoreProcedure("obtener_productos_secciones", $params, 'select');
        $todas = "";
        $anteriores = "";
        foreach ($secciones as $seccion) {
            if ($todas != '') {
                $todas .= ',';
            }
            $todas .= $seccion->id_seccion;
            if ($seccion->activo == 1) {
                if ($anteriores != '') {
                    $anteriores .= ',';
                }
                $anteriores .= $seccion->id_seccion;
            }
        }
        return json_encode(view('blue/secciones')->with(compact('secciones', 'todas', 'anteriores'))->render());
    }

    //-------- FUNCION ENCARGADA DE DAR ALTA O MODIFICAR UN USUARIO
    public function altaModificacionUsuarioProducto() {
        //-----
        //if ( Misc::validacionesGenerica(trim($_POST['cli_codigo']),'numero') && Misc::validacionesGenerica(trim($_POST['cliente']),'numero') && ($_POST['accion'] == 'A' || !empty($_POST['usuario'])) && ( $_POST['accion'] == 'A' || !empty($_POST['usuario']) ) && Misc::validacionesGenerica(trim($_POST['login']),'login') && ($_POST['estado_login'] == 'Y' || $_POST['estado_login'] == 'N') && Misc::validacionesGenerica(trim($_POST['email']),'email') && Misc::validacionesGenerica(trim(strtoupper($_POST['first_name'])),'razon_social') && Misc::validacionesGenerica(trim($_POST['last_name']),'razon_social') && (Misc::validacionesGenerica($_POST['password'],'password') || $_POST['password'] == '@encripted') && /*Misc::validacionesGenerica($_POST['prod_nombre'],'password',1) && */($_POST['estado_producto'] == '1' || $_POST['estado_producto'] == '0') && ($_POST['producto_sin_secciones'] == 'N' || $_POST['producto_sin_secciones'] == 'S') && Misc::validacionesGenerica($_POST['limites_consumo'],'numero',1) && Misc::validacionesGenerica($_POST['limites_usuarios'],'numero',1) && ($_POST['accion'] == 'A' || $_POST['accion'] == 'M') ){			
        $cli_codigo = Request::input('cli_codigo');
        $cliente = Request::input('cliente');
        $informe_comercial_id = ENV('ID_INFORME_COMERCIAL');
        //-----
        $user_id = (Request::input('usuario')) ? Request::input('usuario') : '';
        $login = Request::input('login');
        $first_name = Request::input('first_name');
        $last_name = Request::input('last_name');
        $password = Request::input('password');
        $estado_login = Request::input('estado_login');
        //------
        $email = Request::input('email');
        $serv_codigo = Request::input('prod_codigo');
        $estado_producto = Request::input('estado_producto');
        //------
        $tipo_usuario = Request::input('tipo_usuario');
        $limites_consumo = Request::input('limites_consumo');
        if ($limites_consumo == "") {
            $limites_consumo = null;
        }
        //------
        $bloquear = Request::input('bloquear');
        $bloquear = '0';
        //------
        $producto_sin_secciones = Request::input('producto_sin_secciones');
        //------
        $usuario = Session::get("usuario")->user_id;
        //------
        $accion = Request::input('accion');
        //------
        $params = array($accion, $cli_codigo, $user_id, $login, $estado_login, $serv_codigo, $estado_producto, $email, $usuario, $first_name, $last_name, $password);
        //---------
        $mensaje = SQLConnection::backendStoreProcedure("backend_abm_usuarios_productos", $params, 'selectOne');
        $anteriores = [];
        if ($accion == "M" && $producto_sin_secciones == "N") {
            $anteriores = explode(',', Request::input('anteriores'));
        }
        //----------
        $secciones_hab = [];
        if ($producto_sin_secciones == 'S') {
            $secciones_hab[0] = '0';
        } else {
            $secciones_hab = (Request::input('secciones_hab')) ? Request::input('secciones_hab') : [];
        }
        //----------
        $bajas = [];
        $altas = [];
        //----------
        foreach ($anteriores as $ant) {
            if (!in_array($ant, $secciones_hab)) {
                $bajas[] = $ant;
            }
        }
        //----------
        foreach ($secciones_hab as $ahora) {
            if (!in_array($ahora, $anteriores)) {
                $altas[] = $ahora;
            }
        }
        //----------
        // ALTAS DE NUEVAS SECCIONES 
        foreach ($altas as $seccion) {
            $params = array('A', $cliente, $user_id, $login, $serv_codigo, $seccion, $estado_producto, $limites_consumo, $bloquear, $usuario);
            $mensaje_alta = SQLConnection::backendStoreProcedure("backend_abm_usuarios_productos_secciones", $params, 'selectOne');
        }
        // BAJAS DE SECCIONES QUE YA NO ESTAN ACTIVAS
        //--------
        foreach ($bajas as $seccion) {
            $params = array('B', $cliente, $user_id, $login, $serv_codigo, $seccion, $estado_producto, $limites_consumo, $bloquear, $usuario);
            $mensaje_baja = SQLConnection::backendStoreProcedure("backend_abm_usuarios_productos_secciones", $params, 'selectOne');
        }
        //---------
        // MODIFICACIONES DE SECCIONES (en todas las secciones activas)
        $params = array('M', $cliente, $user_id, $login, $serv_codigo, '', $estado_producto, $limites_consumo, $bloquear, $usuario);
        $mensaje_mod = SQLConnection::backendStoreProcedure("backend_abm_usuarios_productos_secciones", $params, 'selectOne');
        //---------
        $error = '0';
        if ($accion == "M") {
            $mensaje = 'Modificacion OK';
        } else {
            $mensaje = 'Alta OK';
        }
        //-----
        $params = array($cliente, 'S', 'S');
        $productos = SQLConnection::backendStoreProcedure("obtener_productos_cliente", $params, 'select');
        //-----
        $params = array($cliente);
        $usuarios_productos = SQLConnection::backendStoreProcedure("backend_usuarios_productos", $params, 'select');

        $temp = [];
        $user_id_checkbox = '';
        foreach ($usuarios_productos as $producto) {
            $temp[$producto->username][$producto->id_producto]['user_id'] = $producto->user_id;
            $temp[$producto->username][$producto->id_producto]['cli_codigo'] = $producto->cli_codigo;
            $temp[$producto->username][$producto->id_producto]['username'] = $producto->username;
            $temp[$producto->username][$producto->id_producto]['email'] = $producto->email;
            $temp[$producto->username][$producto->id_producto]['first_name'] = $producto->first_name;
            $temp[$producto->username][$producto->id_producto]['last_name'] = $producto->last_name;
            $temp[$producto->username][$producto->id_producto]['password'] = $producto->password;
            $temp[$producto->username][$producto->id_producto]['id_producto'] = $producto->id_producto;
            $temp[$producto->username][$producto->id_producto]['consumido'] = null;
            //if ($producto->id_producto == $informe_comercial_id)
            //{
            $params = array($cliente, $producto->user_id, $producto->id_producto);
            $consumido = SQLConnection::backendStoreProcedure("backend_obtener_total_consumos", $params, 'selectOne');
            $temp[$producto->username][$producto->id_producto]['consumido'] = $consumido->consultas;
            //}
            $temp[$producto->username][$producto->id_producto]['nombre_producto'] = $producto->nombre_producto;
            $temp[$producto->username][$producto->id_producto]['sigla'] = $producto->sigla;
            $temp[$producto->username][$producto->id_producto]['limite_consumo'] = $producto->limite_consumo;
            $temp[$producto->username][$producto->id_producto]['bloquea'] = $producto->bloquea;
            $temp[$producto->username][$producto->id_producto]['estado_login'] = $producto->estado_login;
            $temp[$producto->username][$producto->id_producto]['estado_producto'] = $producto->estado_producto;
            $temp[$producto->username][$producto->id_producto]['seccion'][] = ($producto->id_seccion) ? '(' . $producto->id_seccion . ') ' . $producto->nombre_seccion : '';
            $temp[$producto->username][$producto->id_producto]['ids_secciones'][] = ($producto->id_seccion) ? $producto->id_seccion : '';
            if ($producto->id_producto == $serv_codigo && $producto->username == $login && $user_id == '') {
                $user_id_checkbox = $producto->user_id; // En caso de usuario creado se recura el id
            }
        }
        $usuarios = $temp;
        //-- CHECKBOXES
        $user_autologin = 0;
        $impe_clientes = 0;
        $impe_control_ingreso = 0;
        $impe_auth_excep = 0;
        $impe_verifica_doc = 0;
        $inq_nueva_solicitud = 0;
        $inq_consulta_busqueda = 0;
        $inq_consulta_cliente = 0;
        $led_panel = 0;
        $led_dashboard = 0;
        $avoid_watermark = 0; 
        $usuario_publicador = 0;
        $doc_verif_rech = 0;
        $reporte_legajos = 0;
        $acciones_en_curso = 0;
        //
        if ($serv_codigo == env('IMPE_PRODUCTO')) {
            $impe_clientes = isset($_POST['impe_clientes']) ? 1 : 0;
            $impe_control_ingreso = isset($_POST['impe_control_ingreso']) ? 1 : 0;
            $impe_auth_excep = isset($_POST['impe_auth_excep']) ? 1 : 0;
            $impe_verifica_doc = isset($_POST['impe_verifica_doc']) ? 1 : 0;

            $action_excepcion = $impe_auth_excep ? 'AUTORIZA_EXCEPCION' : 'NO_AUTORIZA_EXCEPCION';
            $nombre_completo = $first_name . ' ' . $last_name;
            
            $id_usuario_para_sp = ($user_id != '') ? $user_id : $user_id_checkbox;

            if ($id_usuario_para_sp != '') {
                $params_excepcion = [
                    $action_excepcion,
                    $cliente,
                    $id_usuario_para_sp,
                    $nombre_completo,
                    $email
                ];
                // Se ejecuta el stored procedure
                SQLConnection::backendStoreProcedure("LN_autoriza_excepcion_usuario", $params_excepcion, 'execute');
            }
        } elseif ($serv_codigo == '38' || $serv_codigo == '10') {
            $inq_nueva_solicitud = isset($_POST['inq_nueva_solicitud']) ? 1 : 0;
            $inq_consulta_busqueda = isset($_POST['inq_consulta_busqueda']) ? 1 : 0;
            $inq_consulta_cliente = isset($_POST['inq_consulta_cliente']) ? 1 : 0;
        }
        $user_autologin = isset($_POST['user_autologin']) ? 1 : 0;
        $led_panel = isset($_POST['led_panel']) ? 1 : 0;
        $led_dashboard = isset($_POST['led_dashboard']) ? 1 : 0;
        $estado_login_checkbox = $estado_login == 'Y' ? 1 : 0;
        $avoid_watermark    = (Request::input('avoid_watermark', 0) == '1') ? 1 : 0;
        $usuario_publicador = (Request::input('usuario_publicador', 0) == '1') ? 1 : 0;
        $doc_verif_rech     = (Request::input('doc_verif_rech', 0) == '1') ? 1 : 0;
        $reporte_legajos     = (Request::input('reporte_legajos', 0) == '1') ? 1 : 0;
        $reporte_fidetasks  = (Request::input('reporte_fidetasks', 0) == '1') ? 1 : 0;
        $administrador_contrapartes = (Request::input('administrador_contrapartes', 0) == '1') ? 1 : 0;
        $acciones_en_curso = (Request::input('acciones_en_curso', 0) == '1') ? 1 : 0;
        //--
        // Consulta para usuario existente como recién creado y almacena segun el caso con user_id o user_id_checkbox respectivamente
        $params = array('LISTAR', $cliente, $user_id_checkbox, 1, null, null, null, null, null, null, null, null, null, null,$tipo_usuario);
        $checkbox_impe_inq_led_datos_add = SQLConnection::backendStoreProcedure("usuarios_servicios_abm", $params, 'selectOne');
        $params = array('LISTAR', $cliente, $user_id, 1, null, null, null, null, null, null, null, null, null,null,$tipo_usuario);
        $checkbox_impe_inq_led_datos_mod = SQLConnection::backendStoreProcedure("usuarios_servicios_abm", $params, 'selectOne');
        if ($checkbox_impe_inq_led_datos_add == null && $checkbox_impe_inq_led_datos_mod == null) {
            if ($user_id_checkbox != '') {
                $params = array('AGREGAR', $cliente, $user_id_checkbox, $estado_login_checkbox, $led_dashboard, $led_panel, $inq_nueva_solicitud, $inq_consulta_busqueda, $inq_consulta_cliente, $impe_control_ingreso, $impe_clientes, $impe_verifica_doc, $impe_auth_excep, $user_autologin,$tipo_usuario,$avoid_watermark,$usuario_publicador,$doc_verif_rech,$reporte_legajos, $reporte_fidetasks, $administrador_contrapartes, $acciones_en_curso);
            } else {
                $params = array('AGREGAR', $cliente, $user_id, $estado_login_checkbox, $led_dashboard, $led_panel, $inq_nueva_solicitud, $inq_consulta_busqueda, $inq_consulta_cliente, $impe_control_ingreso, $impe_clientes, $impe_verifica_doc, $impe_auth_excep, $user_autologin,$tipo_usuario,$avoid_watermark,$usuario_publicador,$doc_verif_rech,$reporte_legajos, $reporte_fidetasks, $administrador_contrapartes, $acciones_en_curso);
            }
            $checkbox_impe_inq_led = SQLConnection::backendStoreProcedure("usuarios_servicios_abm", $params);
        } else {
            $params = array('MODIFICAR', $cliente, $user_id, $estado_login_checkbox, $led_dashboard, $led_panel, $inq_nueva_solicitud, $inq_consulta_busqueda, $inq_consulta_cliente, $impe_control_ingreso, $impe_clientes, $impe_verifica_doc, $impe_auth_excep, $user_autologin,$tipo_usuario,$avoid_watermark,$usuario_publicador,$doc_verif_rech,$reporte_legajos, $reporte_fidetasks, $administrador_contrapartes, $acciones_en_curso);
            $checkbox_impe_inq_led = SQLConnection::backendStoreProcedure("usuarios_servicios_abm", $params);
        }
        //------
        return json_encode(array('error' => $error, 'mensaje' => $mensaje, 'tabla' => view('/blue/tabla_productos_usuarios')->with(compact('usuarios', 'productos', 'cli_codigo', 'cliente'))->render()));
        //}
        //else{
        //	return 'error';
        //}		
    }

    public function mostrarConsumosUsuario() {

        $params = array($_POST['cliente'], $_POST['id_usuario'], $_POST['id_producto']);
        $consumido = SQLConnection::backendStoreProcedure("backend_obtener_total_consumos", $params, 'selectOne');
        $usuario_producto = SQLConnection::backendStoreProcedure("backend_usuarios_productos", [$_POST['cliente']], 'select');

        // dd($usuario_producto);
        foreach ($usuario_producto as $producto) {
            if ($producto->id_producto == $_POST['id_producto'] && $producto->user_id == $_POST['id_usuario']) {
                if ($producto->limite_consumo == null) {
                    $consumido->limite = '0';
                } else {
                    $consumido->limite = $producto->limite_consumo;
                }
                $consumido->prod_nombre = $producto->nombre_producto;
                $consumido->usuario = $producto->username;
                if ($producto->email == '') {
                    $consumido->email = 'S/D';
                } else {
                    $consumido->email = $producto->email;
                }
                $consumido->estado_login = $producto->estado_login;
                $consumido->estado_prod = $producto->estado_producto;
            }
        }

        return json_encode($consumido);
    }

    //-------- FUNCION ENCARGADA DE CHEQUEAR LIMITES DE USO DE PRODUCTO
    public function chequeaLimites() {
        //------
        $cli_codigo = Request::input('cli_codigo');
        $cliente = Request::input('cliente');
        $user_id = Request::input('usuario');
        $prod_codigo = Request::input('prod_codigo');
        //------
        $params = array($cliente, $user_id, $prod_codigo);
        $limites = SQLConnection::backendStoreProcedure("limites_consumos_usuarios_productos", $params, 'selectOne');
        //------
        return json_encode(array('limite_cliente' => $limites->limite_cliente, 'limites_usuarios' => $limites->limites_usuarios));
    }

    //----- FUNCION QUE LIMPIA LA SECCION DE PRODUCTOS DE LOS USUARIOS DE CLIENTE
    public function limpiarSeccionUsuario() {
        $secciones = [];
        $todas = "";
        $anteriores = "";
        //---------
        return json_encode(view('blue/secciones')->with(compact('secciones', 'todas', 'anteriores'))->render());
    }

    //----- FUNCION QUE GENERA LA VISTA DE NUEVO CLIENTE.
    public function vistaNuevoCliente() {
        $clientes = self::totalClients();
        $paises = self::paisesSinRepetir();
        $ruta = '/nuevo-clientes';
        $navbarSeccionesDatosCliente = 1;
        return view('/blue/nuevo_cliente', with(compact('clientes', 'paises', 'ruta', 'navbarSeccionesDatosCliente')));
    }

    // FUNCION ENCARGADA DE GRABAR CAMBIOS DE VISIBILIDAD DE FAMILIAS
    public static function visibilidadGrabarFamilia() {

        $cli = Request::input('cliente');
        $user_id = Request::input('user_id');
        //$servicio_actual = Request::input('servicio_actual');
        $servicio_actual = Request::input('servicio_actual_fam');

        $familias = (null != Request::input('familia_servicio')) ? Request::input('familia_servicio') : [];
        $familias = (is_array($familias) != 1) ? explode(',', Request::input('familia_servicio')) : $familias;

        $pais_servicios = (null != Request::input('pais_servicios')) ? Request::input('pais_servicios') : [];
        $pais_servicios = (is_array($pais_servicios) != 1) ? explode(',', Request::input('pais_servicios')) : $pais_servicios;

        $usuario = Session::get('usuario')->user_id;

        // Tener en cuenta que lo que dejamos tildado, es lo que SI tiene que ver, y en la BD se graban las restricciones, o sea, lo que no tiene que ver!!!

        // Tomamos solo los paises y las familias del servicio_actual, que es el que estamos toc&&o  
        $pais_serv = [];
        $pais_serv = $pais_servicios[$servicio_actual] ?? [];

        if (!empty($pais_serv)) {
            $lista_paises = implode(",", $pais_serv);
            $graba_paises = SQLConnection::backendStoreProcedure('usuarios_restricciones_paises', array($cli, $user_id, $servicio_actual, $lista_paises, $usuario), 'select');
        }

        $familia = [];
        $familia = $familias[$servicio_actual] ?? [];
        $lista_familias = '';
        // Por cada pais tildado, tomamos las familias tildadas
        foreach ($pais_serv as $pais) {
            $lista_familias = '';
            // array_push($familia[0], $pais);
            $lista_familias = implode(",", $familia[0]);

            $graba_paises = SQLConnection::backendStoreProcedure('usuarios_restricciones_paises_familias', array($cli, $user_id, $servicio_actual, $pais, $lista_familias, $usuario), 'select');
        }
        if (empty($pais_serv)) {
            if (!empty($familia[0])) {
                $lista_familias = implode(",", $familia[0]);
                $graba_paises = SQLConnection::backendStoreProcedure('usuarios_restricciones_paises_familias', array($cli, $user_id, $servicio_actual, NULL, $lista_familias, $usuario), 'select');
            }
        }

        return 'ok';
    }

    //----- FUNCION QUE LIMPIA EL ARRAY DE ELEMENTOS REPETIDOS DE CODIGO DE PAISES.
    public function paisesSinRepetir() {
        $paises = self::codigoPaises();
        $aux = array();
        foreach ($paises as $p) {
            if (!self::esRepetido($aux, $p->pai_codigo)) {
                $aux[$p->pai_codigo] = $p->pai_nombre;
            }
        }
        return $aux;
    }

    //----- FUNCION QUE DEVUELVE TIPO DE IDENTIFICACIÓN SEGUN PAÍS.
    public function codigoPaises() {
        $codigo = (isset($_POST['_codigo'])) ? $_POST['_codigo'] : null;
        return SQLConnection::PaisesTipoIdentificacion($codigo);
    }

    //-- FUNCION QUE ACTUALIZA LOS DATOS DEL CLIENTE
    public function actualizarDatosCliente() {

        //----		
        if (Misc::validacionesGenerica($_POST['cli_codigo'], 'numero') && Misc::validacionesGenerica($_POST['cli_nombre'], 'razon_social') && (($_POST['pai_nombre'] == 'ARG' && Misc::validacionesGenerica($_POST['cli_cuit'], 'cuit')) || Misc::validacionesGenerica($_POST['cli_cuit'], 'taxid')) && Misc::validacionesGenerica(trim($_POST['cli_identificador']), 'identificador') && (Misc::validacionesGenerica($_POST['sra_codigo'], 'numero') || $_POST['sra_codigo'] == '') && Misc::validacionesGenerica($_POST['ramo'], 'nombre') && Misc::validacionesGenerica($_POST['domicilio'], 'calle') && Misc::validacionesGenerica($_POST['pai_nombre'], 'nombre') && Misc::validacionesGenerica($_POST['provincia'], 'nombre') && Misc::validacionesGenerica($_POST['localidad'], 'localidad') && (Misc::validacionesGenerica($_POST['altura'], 'numero') || $_POST['altura'] == '') && (Misc::validacionesGenerica($_POST['piso'], 'piso', 1) || $_POST['piso'] == '') && (Misc::validacionesGenerica($_POST['dpto'], 'dpto', 1) || $_POST['dpto'] == '') && Misc::validacionesGenerica($_POST['cod_postal'], 'codigo_postal') && Misc::validacionesGenerica($_POST['telefono'], 'telefono') && Misc::validacionesGenerica($_POST['email'], 'email') && (Misc::validacionesGenerica($_POST['sitio_web'], 'web', 1) || $_POST['sitio_web'] == '') && (Misc::validacionesGenerica($_POST['nombre_otro'], 'nombre', 1) || $_POST['nombre_otro'] == '') && (Misc::validacionesGenerica($_POST['telefono_otro'], 'telefono', 1) || $_POST['telefono_otro'] == '') && (Misc::validacionesGenerica($_POST['email_otro'], 'email', 1) || $_POST['email_otro'] == '') && (Misc::validacionesGenerica($_POST['nombre_otro2'], 'nombre', 1) || $_POST['nombre_otro2'] == '') && (Misc::validacionesGenerica($_POST['telefono_otro2'], 'telefono', 1) || $_POST['telefono_otro2'] == '') && (Misc::validacionesGenerica($_POST['email_otro2'], 'email', 1) || $_POST['email_otro2'] == '') && (Misc::validacionesGenerica($_POST['nombre_otro3'], 'nombre', 1) || $_POST['nombre_otro3'] == '') && (Misc::validacionesGenerica($_POST['telefono_otro3'], 'telefono', 1) || $_POST['telefono_otro3'] == '') && (Misc::validacionesGenerica($_POST['email_otro3'], 'email', 1) || $_POST['email_otro3'] == '')) {
            $nombre_comprador = '';
            $telefono_comprador = '';
            $email_comprador = '';
            $codigo_factura = '';
            $nombre_factura = '';
            $cuit_factura = '';
            $email_factura = '';
            if (isset($_POST['comprador_nombre']) && isset($_POST['comprador_telefonos']) && isset($_POST['comprador_email'])) {
                if (Misc::validacionesGenerica($_POST['comprador_nombre'], 'nombre') && Misc::validacionesGenerica($_POST['comprador_telefonos'], 'telefono') && Misc::validacionesGenerica($_POST['comprador_email'], 'email')) {
                    $nombre_comprador = $_POST['comprador_nombre'];
                    $telefono_comprador = $_POST['comprador_telefonos'];
                    $email_comprador = $_POST['comprador_email'];
                }
            }
            if (isset($_POST['cli_codigo_factura']) && isset($_POST['cli_nombre_factura']) && isset($_POST['cli_cuit_factura']) && isset($_POST['email_factura'])) {
                if (Misc::validacionesGenerica($_POST['cli_codigo_factura'], 'numero') && Misc::validacionesGenerica($_POST['cli_nombre_factura'], 'nombre') && Misc::validacionesGenerica($_POST['cli_cuit_factura'], 'cuit') && Misc::validacionesGenerica($_POST['email_factura'], 'email')) {
                    $codigo_factura = $_POST['cli_codigo_factura'];
                    $nombre_factura = $_POST['cli_nombre_factura'];
                    $cuit_factura = $_POST['cli_cuit_factura'];
                    $email_factura = $_POST['email_factura'];
                }
            }

            if (isset($_POST['cliente_factura_unificada']) && !empty($_POST['cliente_factura_unificada'])) {
                $factura_unificada = Request::input('cliente_factura_unificada');
                $datos_factura_unificada = explode('|', $factura_unificada);

                $codigo_factura = $datos_factura_unificada[0];
                $nombre_factura = $datos_factura_unificada[1];
                $cuit_factura = $datos_factura_unificada[2];
                $email_factura = $datos_factura_unificada[3];

            }

            //---
            $cliente = $_POST['cliente'];
            $cli_codigo = $_POST['cli_codigo'];
            $cli_nombre = $_POST['cli_nombre'];
            $cli_identificacion = $_POST['cli_cuit'];
            $cli_identificador = $_POST['cli_identificador'];
            $codigo_actividad = $_POST['sra_codigo'];
            if ($_POST['ramo'] = 'NO INFORMADO') {
                $ramo = '0';
            } else {
                $ramo = empty($_POST['ramo']) ? null : $_POST['ramo'];
            }
            $domicilio = $_POST['domicilio'];
            // $domicilio = explode(' ',$domicilio);
            // if (count($domicilio) != 0){

            // }
            // $datos_cliente->altura = end($datos_cliente->altura);
            // $_POST['altura'];
            $codigo_pais = $_POST['pai_codigo'];
            $pais = $_POST['pai_nombre'];
            $provincia = $_POST['provincia'];
            $localidad = $_POST['localidad'];
            $piso = empty($_POST['piso']) ? null : $_POST['piso'];
            $dpto = empty($_POST['dpto']) ? null : $_POST['dpto'];
            // $altura = $_POST['altura'];
            $codigo_postal = $_POST['cod_postal'];
            $telefono = $_POST['telefono'];
            $email = $_POST['email'];
            $sitio_web = empty($_POST['sitio_web']) ? null : $_POST['sitio_web'];
            $otro_nombre = empty($_POST['nombre_otro']) ? null : $_POST['nombre_otro'];
            $otro_telefono = empty($_POST['telefono_otro']) ? null : $_POST['telefono_otro'];
            $otro_email = empty($_POST['email_otro']) ? null : $_POST['email_otro'];
            $otro_nombre2 = empty($_POST['nombre_otro2']) ? null : $_POST['nombre_otro2'];
            $otro_telefono2 = empty($_POST['telefono_otro2']) ? null : $_POST['telefono_otro2'];
            $otro_email2 = empty($_POST['email_otro2']) ? null : $_POST['email_otro2'];
            $otro_nombre3 = empty($_POST['nombre_otro3']) ? null : $_POST['nombre_otro3'];
            $otro_telefono3 = empty($_POST['telefono_otro3']) ? null : $_POST['telefono_otro3'];
            $otro_email3 = empty($_POST['email_otro3']) ? null : $_POST['email_otro3'];
            // var_dump($otro_nombre3,$otro_telefono3,$otro_email3);
            // $comentario = empty($_POST['comentario']) ? null : $_POST['comentario'];
            $NOSE_ven_codigo = '0';
            $NOSE_telefonos_pagos = '';
            $REORGANIZAR_contacto1 = '';
            $REORGANIZAR_contacto2 = '';
            $NO_EXISTE_cargo = '';
            //---
            $user_id = Session::get('usuario')->user_id;
            //--- SE DEFINEN LOS PARAMETROS QUE RECIBIRA LA BASE DE DATOS
            $params = array(
                $cliente,
                $cli_codigo,
                $cli_nombre,
                $cli_identificacion,
                $codigo_actividad,
                $ramo,
                $NOSE_ven_codigo,
                $domicilio,
                $codigo_postal,
                $codigo_pais,
                $provincia,
                $localidad,
                $telefono,
                $NOSE_telefonos_pagos,
                $email,
                $REORGANIZAR_contacto1,
                $REORGANIZAR_contacto2,
                $nombre_comprador,
                $NO_EXISTE_cargo,
                $telefono_comprador,
                $email_comprador,
                $codigo_factura,
                $email_factura
            );
            $mensaje = SQLConnection::backendStoreProcedure("backend_abm_datos_clientes", $params, 'selectOne');
            //---
            if ($mensaje->error == '0') {
                return json_encode(array('error' => '0', 'mensaje' => $mensaje));
            } else {
                return 'error_escritura';
            }
        } else {
            // dd(Misc::validacionesGenerica($_POST['cli_codigo'],'numero')) ;
            // dd(Misc::validacionesGenerica($_POST['cli_nombre'],'razon_social'));
            // dd( ( $_POST['pai_nombre'] == 'ARG' && Misc::validacionesGenerica($_POST['cli_cuit'],'cuit')) || Misc::validacionesGenerica($_POST['cli_cuit'],'taxid')) ;
            // dd(Misc::validacionesGenerica($_POST['cli_identificador'],'identificador'));
            // dd( Misc::validacionesGenerica($_POST['sra_codigo'],'numero') || $_POST['sra_codigo'] == '' );
            // dd(Misc::validacionesGenerica($_POST['ramo'],'nombre'));
            // dd(Misc::validacionesGenerica($_POST['domicilio'],'calle')) ;
            // dd(Misc::validacionesGenerica($_POST['pai_nombre'],'nombre'));
            // dd(Misc::validacionesGenerica($_POST['provincia'],'nombre')) ;
            // dd(Misc::validacionesGenerica($_POST['localidad'],'localidad'));
            // dd( Misc::validacionesGenerica($_POST['altura'],'numero') || $_POST['altura'] == '' );
            // dd( Misc::validacionesGenerica($_POST['piso'],'piso',1) || $_POST['piso'] == '' );
            // dd( Misc::validacionesGenerica($_POST['dpto'],'dpto',1) || $_POST['dpto'] == '' );
            // dd(Misc::validacionesGenerica($_POST['cod_postal'],'codigo_postal'));
            // dd(Misc::validacionesGenerica($_POST['telefono'],'telefono'));
            // dd(Misc::validacionesGenerica($_POST['email'],'email'));
            // dd( Misc::validacionesGenerica($_POST['sitio_web'],'web',1) || $_POST['sitio_web'] == '' );
            // dd( Misc::validacionesGenerica($_POST['nombre_otro'],'nombre',1) || $_POST['nombre_otro'] == '' );
            // dd( Misc::validacionesGenerica($_POST['telefono_otro'],'telefono',1) || $_POST['telefono_otro'] == '' );
            // dd( Misc::validacionesGenerica($_POST['email_otro'],'email',1) || $_POST['email_otro'] == '' );
            // dd(Misc::validacionesGenerica($_POST['nombre_otro2'],'nombre',1) || $_POST['nombre_otro2'] == '' );
            // dd( Misc::validacionesGenerica($_POST['telefono_otro2'],'telefono',1) || $_POST['telefono_otro2'] == '' );
            // dd( Misc::validacionesGenerica($_POST['email_otro2'],'email',1) || $_POST['email_otro2'] == '' );
            // dd(Misc::validacionesGenerica($_POST['nombre_otro3'],'nombre',1) || $_POST['nombre_otro3'] == '' );
            // dd( Misc::validacionesGenerica($_POST['telefono_otro3'],'telefono',1) || $_POST['telefono_otro3'] == '' );
            // dd( Misc::validacionesGenerica($_POST['email_otro3'],'email',1) || $_POST['email_otro3'] == '' );
            // dd( ( Misc::validacionesGenerica($_POST['dpto'],'dpto',1) || $_POST['dpto'] == '' ) );
            return 'error_datos';
        }
    }

    //----- FUNCION QUE DA DE ALTA UN NUEVO CLIENTE Y DEVUELVE SUS DATOS.
    public function agregarNuevoCliente() {
        //---- SE VALIDAN LOS DATOS RECIBIDOS DEL CONTROLADOR		
        if (Misc::validacionesGenerica($_POST['nombreCliente'], 'razon_social') && 
            Misc::validacionesGenerica($_POST['selectPais'], 'country_code') && 
            //Misc::validacionesGenerica($_POST['tipoIdentificador'], 'identificador') && 
            //Misc::validacionesGenerica($_POST['nroIdentificacion'], 'cuit') && 
            Misc::validacionesGenerica($_POST['codFacturacionCliente'], 'numero') && 
            Misc::validacionesGenerica($_POST['domicilioCliente'], 'calle') && 
            Misc::validacionesGenerica($_POST['alturaCliente'], 'numero') && 
            Misc::validacionesGenerica($_POST['pisoCliente'], 'piso', 1) && 
            Misc::validacionesGenerica($_POST['deptoCliente'], 'dpto', 1) && 
            Misc::validacionesGenerica($_POST['localidadCliente'], 'localidad') && 
            Misc::validacionesGenerica($_POST['provinciaCliente'], 'nombre') && 
            Misc::validacionesGenerica($_POST['cpCliente'], 'codigo_postal') && 
            Misc::validacionesGenerica($_POST['telCliente'], 'telefono') && 
            Misc::validacionesGenerica($_POST['webCliente'], 'web', 1) && 
            Misc::validacionesGenerica($_POST['mailCliente'], 'email') && 
            Misc::validacionesGenerica($_POST['nombreContactoFactura'], 'nombre') && 
            Misc::validacionesGenerica($_POST['telContactoFactura'], 'telefono') && 
            Misc::validacionesGenerica($_POST['emailFacturacion'], 'email') && 
            Misc::validacionesGenerica($_POST['nombreContacto1'], 'nombre', 1) && 
            Misc::validacionesGenerica($_POST['telContacto1'], 'telefono', 1) && 
            Misc::validacionesGenerica($_POST['emailContacto1'], 'email', 1) && 
            Misc::validacionesGenerica($_POST['nombreContacto2'], 'nombre', 1) && 
            Misc::validacionesGenerica($_POST['telContacto2'], 'telefono', 1) && 
            Misc::validacionesGenerica($_POST['emailContacto2'], 'email', 1) && 
            Misc::validacionesGenerica($_POST['comentarios'], 'razon_social', 1)) {
            if ((($_POST['tipoIdentificador'] == 'CUIT' || $_POST['tipoIdentificador'] == 'CUIL') && 
                Misc::validacionesGenerica($_POST['nroIdentificacion'], 'cuit')) 
                || 
                (($_POST['tipoIdentificador'] != 'CUIT' && $_POST['tipoIdentificador'] != 'CUIL') && 
                Misc::validacionesGenerica($_POST['nroIdentificacion'], 'razon_social'))
                ) {
                //--- SE DEFINEN LOS VARIABLES
                $cli_codigo = $_POST['codFacturacionCliente'];
                $cli_nombre = $_POST['nombreCliente'];
                $codigo_pais = $_POST['selectPais'];
                $cli_identificador = $_POST['tipoIdentificador'];
                $cli_identificacion = $_POST['nroIdentificacion'];
                $domicilio = $_POST['domicilioCliente'];
                $altura = $_POST['alturaCliente'];
                $piso = empty($_POST['pisoCliente']) ? null : $_POST['pisoCliente'];
                $dpto = empty($_POST['deptoCliente']) ? null : $_POST['deptoCliente'];
                $localidad = $_POST['localidadCliente'];
                $provincia = $_POST['provinciaCliente'];
                $codigo_postal = $_POST['cpCliente'];
                $telefono = $_POST['telCliente'];
                $sitio_web = empty($_POST['webCliente']) ? null : $_POST['webCliente'];
                $email = $_POST['mailCliente'];
                $nombre_factura = $_POST['nombreContactoFactura'];
                $telefono_factura = $_POST['telContactoFactura'];
                $email_factura = $_POST['emailFacturacion'];
                $otro_nombre1 = empty($_POST['nombreContacto1']) ? null : $_POST['nombreContacto1'];
                $otro_telefono1 = empty($_POST['telContacto1']) ? null : $_POST['telContacto1'];
                $otro_email1 = empty($_POST['emailContacto1']) ? null : $_POST['emailContacto1'];
                $otro_nombre2 = empty($_POST['nombreContacto2']) ? null : $_POST['nombreContacto2'];
                $otro_telefono2 = empty($_POST['telContacto2']) ? null : $_POST['telContacto2'];
                $otro_email2 = empty($_POST['emailContacto2']) ? null : $_POST['emailContacto2'];
                $comentario = empty($_POST['comentarios']) ? null : $_POST['comentarios'];
                $ramo = $_POST['ramo_cod'] ?? null;
                $subramo = $_POST['subramo_cod'] ?? null;
                $user_id = Session::get('usuario')->user_id;

                //--- SE DEFINEN LOS PARAMETROS QUE RECIBIRA LA BASE DE DATOS
                $params = array($cli_codigo, $cli_nombre, $codigo_pais, $cli_identificador, $cli_identificacion, $domicilio, $altura, $piso, $dpto, $codigo_postal, $localidad, $provincia, $email, $telefono, $sitio_web, $nombre_factura, $email_factura, $telefono_factura, $otro_nombre1, $otro_telefono1, $otro_email1, $otro_nombre2, $otro_telefono2, $otro_email2, null, null, $comentario, $ramo, $subramo, $user_id);
                $datos = SQLConnection::backendStoreProcedure('clientes_insertar', $params);

                //--- SI HAY ALGUN ERROR DEVUELVE LA VISTA ANTERIOR CON UN ERROR
                $datos = $datos[0];
                if ($datos->cod_error == 0) {
                    //---- PREPARA LAS VARIABLES PARA REDIRECCIONAR A LA VISTA DE DATOS USUARIO ==> No hace el redireccionamiento
                    $codigo_cliente = $datos->cli_codigo;
                    $id_cliente = $datos->id_cliente;
                    $_POST['clienteOk'] = $codigo_cliente . '-' . $id_cliente;

                    //---- REDIRECCIONA A LA VISTA DE DATOS USUARIOS
                    $request = Request::create('/blue_buscar_cliente', 'POST', ['_token' => csrf_token()]);
                    $response = \Route::dispatch($request);

                    return $response;
                } else {

                    return json_encode($datos->mensaje_error);
                }
            }
        } else {
            dd('ERROR');
        }
    }

    //----- FUNCION ENCARGADA DE RECIBIR DATOS DEL CLIENTE Y DEVOLVER SU PAQUETE DE PRODUCTOS
    public function paquetesProductos() {
        $prod_codigo = Request::input('prod_codigo_cliente');
        if ($prod_codigo == null) {
            $prod_codigo = Request::input('prod_codigo_cliente_2');
        }
        $tipo_paquete_cliente = Request::input('tipo_paquete_cliente_2');
        $params = array($prod_codigo);
        $paquetes = SQLConnection::backendStoreProcedure("obtener_paquetes", $params, 'select');
        return json_encode(view('blue/paquetes')->with(compact('paquetes', 'tipo_paquete_cliente'))->render());
    }

    //-------- FUNCION ENCARGADA DE DAR ALTA O MODIFICAR UN PRODUCTO DE CLIENTE
    public function altaModificacionClienteProducto() {

        if (Misc::validacionesGenerica(trim($_POST['cli_codigo']), 'numero') && Misc::validacionesGenerica(trim($_POST['cliente']), 'numero') && (Misc::validacionesGenerica($_POST['prod_codigo_cliente'], 'numero') || $_POST['prod_codigo_cliente'] == '') && (Misc::validacionesGenerica($_POST['prod_codigo_cliente_2'], 'numero') || $_POST['prod_codigo_cliente_2'] == '') && ($_POST['estado_producto_cliente'] == '1' || $_POST['estado_producto_cliente'] == '0') && ($_POST['prod_sin_paquete'] == 'N' || $_POST['prod_sin_paquete'] == 'S') && Misc::validacionesGenerica($_POST['limites_consumo_cliente'], 'numero', 1) && ($_POST['bloquear_cliente'] == '1' || $_POST['bloquear_cliente'] == '0') && ($_POST['accion_cliente'] == 'AGREGAR' || $_POST['accion_cliente'] == 'MODIFICAR') && ($_POST['fecha_desde'] < $_POST['fecha_hasta']) && (isset($_POST['cuenta_corriente']) || isset($_POST['prepago']))) {
            //--------
            $valoresConsulta = '';
            $error = '0';
            $cli_codigo = Request::input('cli_codigo');
            $cliente = Request::input('cliente');
            $accion = Request::input('accion_cliente');
            $prod_sin_paquete = Request::input('prod_sin_paquete');
            $tipo_paquete = Request::input('tipo_paquete_cliente');
            //---------
            $estado_producto = Request::input('estado_producto_cliente');
            $bloquear = Request::input('bloquear_cliente');
            $limites_consumo = Request::input('limites_consumo_cliente');
            if ($limites_consumo == "") {
                $limites_consumo = null;
            }
            // SI EL LIMITE DE CONSUMO ES 0 ENTONCES BLOQUEAR ES SIEMPRE 0
            if ($limites_consumo == 0) {
                $bloquear = 0;
            }
            $fecha_desde = Request::input('fecha_desde');
            $fecha_hasta = Request::input('fecha_hasta');
            $usuario = Session::get("usuario")->user_id;
            //-- MODALIDAD DE PAGO
            $cuenta_corriente = (isset($_POST['cuenta_corriente'])) ? $_POST['cuenta_corriente'] : NULL;
            $prepago = (isset($_POST['prepago'])) ? $_POST['prepago'] : NULL;
            //
            $modalidad_de_pago = '';
            if ($cuenta_corriente && $prepago) {
                $modalidad_de_pago = 'CP';
            } elseif ($cuenta_corriente) {
                $modalidad_de_pago = $cuenta_corriente;
            } else {
                $modalidad_de_pago = $prepago;
            }
            //---------
            if ($accion == "MODIFICAR") {
                $prod_codigo = Request::input('prod_codigo_cliente_2');
            } else {
                $prod_codigo = Request::input('prod_codigo_cliente');
                if ($prod_sin_paquete == 'S') {
                    $tipo_paquete = null;
                }
            }
            //-- SECCION ESPECIAL
            $imperium_control_acceso = isset($_POST['imperium_control_acceso']) ? 1 : 0;
            $imperium_control_documentos = isset($_POST['imperium_control_documentos']) ? 1 : 0;
            // $led_panel = isset($_POST['led_panel']) ? 1 : 0;
            //---------
            $params = array($accion, $cliente, $cli_codigo, $prod_codigo, $tipo_paquete, $estado_producto, $limites_consumo, $fecha_desde, $fecha_hasta, $bloquear, $usuario, $modalidad_de_pago, $imperium_control_documentos, $imperium_control_acceso);
            $mensaje = SQLConnection::backendStoreProcedure("backend_abm_clientes_productos", $params, 'selectOne');
            $error = $mensaje->error;

            // Datos para facturar
            $no_factura = (Request::input('no_factura') == NULL) ? '0' : '1';
            $prod_codigo_factura = Request::input('prod_codigo_factura');
            $como = Request::input('como');
            $cuando = Request::input('cuando');
            $lista = Request::input('lista');
            $tipo = Request::input('tipo');
            $moneda = Request::input('moneda');
            $precio_especial = Request::input('precio_especial');
            $precio_especial_excedentes = Request::input('precio_especial_excedentes');
            $moneda_cuotas = Request::input('moneda_cuotas');
            $cantidad_cuotas = Request::input('cantidad_cuotas');
            $valor_cuota = Request::input('valor_cuota');
            $bonificacion_porcentaje = Request::input('bonificacion_porcentaje');
            $bonificacion_desde = Request::input('bonificacion_desde');
            $bonificacion_hasta = Request::input('bonificacion_hasta');

            if ($prod_codigo_factura == '') {
                $prod_codigo_factura = null;
            }
            if ($como == '') {
                $como = null;
            }
            if ($cuando == '') {
                $cuando = null;
            }
            if ($lista == '') {
                $lista = null;
            }
            if ($tipo == '') {
                $tipo = null;
            }
            if ($moneda == '') {
                $moneda = null;
            }
            if ($precio_especial == '') {
                $precio_especial = null;
            }
            if ($precio_especial_excedentes == '') {
                $precio_especial_excedentes = null;
            }
            if ($moneda_cuotas == '') {
                $moneda_cuotas = null;
            }
            if ($cantidad_cuotas == '') {
                $cantidad_cuotas = null;
            }
            if ($valor_cuota == '') {
                $valor_cuota = null;
            }
            if ($bonificacion_porcentaje == '') {
                $bonificacion_porcentaje = null;
            }
            if ($bonificacion_desde == '') {
                $bonificacion_desde = null;
            }
            if ($bonificacion_hasta == '') {
                $bonificacion_hasta = null;
            }


            if ($no_factura == '1') {
                $como = null;
                $cuando = null;
                $prod_codigo_factura = null;
                $lista = null;
                $tipo = null;
                $moneda = null;
                $precio_especial = null;
                $precio_especial_excedentes = null;
                $moneda_cuotas = null;
                $cantidad_cuotas = null;
                $valor_cuota = null;
            }

            if ($como == 'L') {
                $tipo = null;
                $moneda = null;
                $precio_especial = null;
                $precio_especial_excedentes = null;
                $moneda_cuotas = null;
                $cantidad_cuotas = null;
                $valor_cuota = null;
            }
            if ($como == 'E') {
                $lista = null;
                $moneda_cuotas = null;
                $cantidad_cuotas = null;
                $valor_cuota = null;
            }
            if ($como == 'C') {
                $lista = null;
                $tipo = null;
                $moneda = null;
                $precio_especial = null;
                $precio_especial_excedentes = null;
            }


            $params = array('GRABAR',
                $cliente,
                $prod_codigo,
                $usuario,
                $no_factura,
                $prod_codigo_factura,
                $cuando,
                $como,
                $lista,
                $tipo,
                $moneda,
                $precio_especial,
                $precio_especial_excedentes,
                $cantidad_cuotas,
                $moneda_cuotas,
                $valor_cuota,
                $bonificacion_porcentaje,
                $bonificacion_desde,
                $bonificacion_hasta);


            $facturacion = SQLConnection::backendStoreProcedure('clientes_condiciones_facturacion_', $params, 'selectOne');
            return json_encode(array('error' => $error, 'mensaje' => $mensaje));
        } else {
            return 'error';
        }

    }

    public function productosCli() {
        $cliente = $_POST['cliente'];
        $params = array($cliente);
        $productos = SQLConnection::backendStoreProcedure("backend_clientes_productos", $params, 'select');
        return $productos;
    }

    public function usuariosCli() {
        $cliente = Request::input('cliente');
        $cli_codigo = Request::input('cli_codigo');
        $params = array($cliente, 'S', 'S');
        $productos = SQLConnection::backendStoreProcedure("obtener_productos_cliente", $params, 'select');
        //-----
        $params = array($cliente);
        $usuarios_productos = SQLConnection::backendStoreProcedure("backend_usuarios_productos", $params, 'select');
        $temp = [];
        foreach ($usuarios_productos as $producto) {
            $temp[$producto->username][$producto->id_producto]['user_id'] = $producto->user_id;
            $temp[$producto->username][$producto->id_producto]['cli_codigo'] = $producto->cli_codigo;
            $temp[$producto->username][$producto->id_producto]['username'] = $producto->username;
            $temp[$producto->username][$producto->id_producto]['email'] = $producto->email;
            $temp[$producto->username][$producto->id_producto]['first_name'] = $producto->first_name;
            $temp[$producto->username][$producto->id_producto]['last_name'] = $producto->last_name;
            $temp[$producto->username][$producto->id_producto]['password'] = $producto->password;
            $temp[$producto->username][$producto->id_producto]['id_producto'] = $producto->id_producto;
            $temp[$producto->username][$producto->id_producto]['consumido'] = null;
            //if ($producto->id_producto == $informe_comercial_id)
            //{
            $params = array($cliente, $producto->user_id, $producto->id_producto);
            $consumido = SQLConnection::backendStoreProcedure("backend_obtener_total_consumos", $params, 'selectOne');
            $temp[$producto->username][$producto->id_producto]['consumido'] = $consumido->consultas;
            //}
            $temp[$producto->username][$producto->id_producto]['nombre_producto'] = $producto->nombre_producto;
            $temp[$producto->username][$producto->id_producto]['sigla'] = $producto->sigla;
            $temp[$producto->username][$producto->id_producto]['limite_consumo'] = $producto->limite_consumo;
            $temp[$producto->username][$producto->id_producto]['bloquea'] = $producto->bloquea;
            $temp[$producto->username][$producto->id_producto]['estado_login'] = $producto->estado_login;
            $temp[$producto->username][$producto->id_producto]['estado_producto'] = $producto->estado_producto;
            $temp[$producto->username][$producto->id_producto]['seccion'][] = ($producto->id_seccion) ? '(' . $producto->id_seccion . ') ' . $producto->nombre_seccion : '';
            $temp[$producto->username][$producto->id_producto]['ids_secciones'][] = ($producto->id_seccion) ? $producto->id_seccion : '';
        }
        $usuarios = $temp;
        //------

        return json_encode(array('tabla' => view('/blue/tabla_productos_usuarios')->with(compact('usuarios', 'productos', 'cli_codigo', 'cliente'))->render()));
    }

    // FUNCION ENCARGADA DE DEVOLVER LOS DATOS DE PRODUCTOS QUE TIENE EL CLIENTE
    public function usuariosProd() {
        $cliente = Request::input('cliente');
        $params = array($cliente);
        $cliente_productos = SQLConnection::backendStoreProcedure("backend_clientes_productos", $params, 'select');	//	SP de productos del cliente
        return $cliente_productos;
    }

    public function filtroUsuariosApi() {
        if (isset($_POST['clienteOk']) && !Misc::tieneCaracterRaroBase($_POST['clienteOk']) && !Misc::tieneCaracterRaroBase($_POST['apiSel'])) {
            $valoresConsulta = $_POST['clienteOk'];
            $apiSeleccionada = $_POST['apiSel'];
            $data = explode('-', trim($valoresConsulta));
            $prod = explode(',', trim($apiSeleccionada));
            $apiSeleccionada = trim($prod[0]);
            $fecha_desde = trim($prod[1]);
            $fecha_hasta = trim($prod[2]);
            $cli_codigo = $data[0];
            $cliente = $data[1];
            $params = array($cliente);
            $usuario_producto = SQLConnection::backendStoreProcedure("backend_usuarios_productos", $params, 'select');
            //
            $usuarios_api = [];
            $usuarioTemp = '';
            $usuarioRepe = '';
            if ($fecha_desde != '' && $fecha_hasta != '') {
                foreach ($usuario_producto as $key => $usuario) {
                    if ($usuario->id_producto == $apiSeleccionada && $usuario->estado_producto == 'ACTIVO') {
                        $usuarioTemp = [$usuario->user_id, $usuario->first_name . ' ' . $usuario->last_name, $usuario->estado_producto, $usuario->active_user];
                        if ($usuarioTemp == $usuarioRepe) {
                            continue;
                        } else {
                            array_push($usuarios_api, $usuarioTemp);
                        }
                        $usuarioRepe = $usuarioTemp;
                    }
                }
                if ($usuarios_api == []) {
                    $usuarios_api = [['', 'SIN USUARIO ASOCIADO AL PRODUCTO SELECCIONADO']];
                }
                return $usuarios_api;
            } else {
                return ['error fechas vacías', $apiSeleccionada];
            }
        } else {
            return 'error datos';
        }
    }

    //-------- FUNCION ENCARGADA DE ACTIVAR CLIENTE
    public function activarCliente() {
        $cliente = Request::input('cliente');
        $activar = 'A';
        $usuario = Session::get("usuario")->user_id;
        $params = array($cliente, $activar, $usuario);
        $mensaje = SQLConnection::backendStoreProcedure("backend_activar_desactivar_clientes", $params, 'selectOne');
        return json_encode(array('error' => $mensaje->error, 'mensaje' => $mensaje->mensaje));
    }

    //-------- FUNCION ENCARGADA DE DESACTIVAR CLIENTE
    public function desactivarCliente() {
        $cliente = Request::input('cliente');
        $activar = 'N';
        $usuario = Session::get("usuario")->user_id;
        $params = array($cliente, $activar, $usuario);
        $mensaje = SQLConnection::backendStoreProcedure("backend_activar_desactivar_clientes", $params, 'selectOne');
        return json_encode(array('error' => $mensaje->error, 'mensaje' => $mensaje->mensaje));
    }

    //----- FUNCION GENÉRICA QUE IDENTIFICA ELEMENTOS REPETIDOS DENTRO DE UN ARRAY.
    //-----	REQUIERE: 1-arreglo o array. 2- el elemento que no debe repetirse.
    //-----	RETORNA: Valor booleano. Si encuentra repetido devuelve True.
    public function esRepetido($arreglo, $elemento) {
        foreach ($arreglo as $e) {
            if ($e == $elemento) {
                return true;
            }
        }
        return false;
    }

    // FUNCION ENCARGADA DE MOSTRAR ADMINISTRADOR DE COMENTARIOS
    public function clienteComentarios() {
        $data_send = $_POST['clienteDataNum'];
        $data_show = $_POST['clienteData'];
        $cli_codigo = $_POST['cli_codigo'];
        $cli_cuit = $_POST['cli_cuit'];
        $nombre_cliente = $_POST['cliente_nombre'];
        $data_send = explode('-', trim($data_send));
        $cliente = $data_send[1];
        $titulo_navbar = 'COMENTARIOS';

        $params = array($cliente);
        $cliente_comentarios = SQLConnection::backendStoreProcedure("backend_datos_clientes_comentarios", $params, 'select');
        $data_send = $_POST['clienteDataNum'];

        foreach ($cliente_comentarios as $comentario) {
            $comentario->fecha = strtotime($comentario->fecha);
        }

        usort($cliente_comentarios, function ($first, $second) {
            return $first->fecha < $second->fecha;
        });

        foreach ($cliente_comentarios as $comentario) {
            $comentario->fecha = date('d-m-Y H:i:s', $comentario->fecha);
        }

        $cliente_comentarios2 = json_encode($cliente_comentarios);

        return view('/blue/admin_comentario')->with(compact('cliente_comentarios', 'cliente_comentarios2', 'data_send', 'data_show', 'cli_codigo', 'cliente', 'cli_cuit', 'nombre_cliente', 'titulo_navbar'));
    }

    // FUNCION ENCARGADA DE AGREGAR COMENTARIOS A LA BASE DE DATOS
    public function addClienteComentarios() {
        if (isset($_POST['cliente_data']) && isset($_POST['comentario'])) {
            $cliente_data = $_POST['cliente_data'];
            $cliente_data = explode('-', trim($cliente_data));
            $cliente = trim($cliente_data[1]);
            $usuario = Session::get("usuario")->user_id;
            $comentarios = $_POST['comentario'];
            // Arma array con datos y nuevo comentario para guardar en BBDD
            $valores = [];
            $valores[] = $cliente;
            $valores[] = $usuario;
            $valores[] = $comentarios;
            if ($cliente != '' && Misc::validacionesGenerica($cliente, 'numero') && $usuario != '') {
                // Guarda en DB
                $mensaje = SQLConnection::backendStoreProcedure("backend_abm_clientes_comentarios", $valores, 'selectOne');
                // Consulta DB con comentario nuevo
                $params = array($cliente);
                $cliente_comentarios = SQLConnection::backendStoreProcedure("backend_datos_clientes_comentarios", $params, 'select');
                // Transforma string de fecha en tipo date para luego ordenar de menor a mayor
                foreach ($cliente_comentarios as $comentario) {
                    $comentario->fecha = strtotime($comentario->fecha);
                }
                usort($cliente_comentarios, function ($first, $second) {
                    return $first->fecha < $second->fecha;
                });
                // Captura último comentario, castea fecha y devuelva para el update de la fancy
                $comentario_update = $cliente_comentarios[0];
                $comentario_update->fecha = date('d-m-Y H:i:s', $comentario_update->fecha);

                return json_encode($comentario_update);
            } else {
                return 'error';
            }
        }
    }

    // FUNCION ENCARGADA DE GRABAR CAMBIOS DE VISIBILIDAD DE INDICADORES
    public static function visibilidadGrabarIndicadores() {
        $usuario = Session::get('usuario')->user_id;
        $cli = Request::input('cliente');
        $user_id = Request::input('user_id');
        $servicio_actual = Request::input('servicio_actual_ind');

        $indicadores = (null != Request::input('indicadores')) ? Request::input('indicadores') : [];
        $indicadores = (is_array($indicadores) != 1) ? explode(',', Request::input('indicadores')) : $indicadores;
        $lista_usuario = '';
        if ($indicadores != []) {
            $lista_usuario = implode(",", $indicadores[$servicio_actual]);
        }
        $indicadores_todos = SQLConnection::backendStoreProcedure('usuarios_restricciones_', array('indicadores', $cli), 'select');
        $lista_completa = '';
        foreach ($indicadores_todos as $ind) {
            if (empty($lista_completa)) {
                $lista_completa = $ind->indicador;
            } else {
                $lista_completa .= ',' . $ind->indicador;
            }
        }
        $graba_indicadores = SQLConnection::backendStoreProcedure('usuarios_restricciones_indicadores', array($cli, $user_id, $servicio_actual, $lista_completa, $lista_usuario, $usuario), 'select');
        return 'ok';
    }

    // FUNCION QUE DEVUELVE LA VISTA DE CONTRAPARTES GENERICOS
    public function contrapartesGenerico() {
        $cliente = Request::input('cliente');
        $tieneApi = Request::input('tieneApi');
        $nombre_cliente = Request::input('cliente_nombre');
        $cli_codigo = Request::input('cli_codigo');
        $cli_cuit = Request::input('cli_cuit');
        //
        $servicios = [];
        $servicios = SQLConnection::backendStoreProcedure('usuarios_restricciones_', array('servicios', $cliente), 'select');
        $key = sizeof($servicios);
        $titulo_navbar = 'Contrapartes';
        //
        $contrap = [];
        //		
        $cli = SQLConnection::backendStoreProcedure('LED_Clientes', array('select', $cliente, NULL, NULL, NULL, 47), 'selectOne');
        //
        $contrap1 = SQLConnection::backendStoreProcedure('LN_contrapartes_DEV', array('search_informes_contraparte', null, null, $cliente, null, null, null, null, null, null, null, null, null, null, Session::get('usuario')->user_id, null, null, null), 'select');
        // Si hay contrapartes de un servicio que tiene inactivo no se van a ver, solo toma la de los servicios activos.
        // EN ESTA SECCION SE AGREGA FILTRA LAS CONTRAPARTES DE LOS PRODUCTOS ACTIVOS
        foreach ($contrap1 as $key => $cont) {
            foreach ($servicios as $ser) {
                if ($ser->producto == $cont->servicio_contratado) {
                    array_push($contrap, $contrap1[$key]);
                }
            }
        }
        //
        $navbarSeccionesContrapartes = 1;
        //
        $contrap = json_encode($contrap);
        //
        return view('/blue/contrapartes_genericos')->with(compact('contrap', 'cli', 'navbarSeccionesContrapartes', 'tieneApi', 'cli_codigo', 'nombre_cliente', 'cli_cuit', 'titulo_navbar', 'cliente'));
    }

    //----- FUNCION QUE ARMA VISTA DE CONSUMOS
    public function consumos_cliente() {
        $cliente = Request::input('cliente');
        $producto = Request::input('producto');
        $consulta = Request::input('consulta');
        $seccion = Request::input('seccion_acordeon');
        $producto_nombre = Request::input('producto_nombre');
        $ruta = '/blue_buscar_cliente';
        //-------
        if (isset($_POST['_fechaDesde']) && isset($_POST['_fechaHasta'])) {
            if (Misc::validacionesGenerica($_POST['_fechaDesde'], 'fecha') && Misc::validacionesGenerica($_POST['_fechaDesde'], 'fecha') && ($_POST['_fechaDesde'] < $_POST['_fechaHasta'])) {
                $busqueda = self::filtro_consumos_cliente($_POST['_cliente'], $_POST['_fechaDesde'], $_POST['_fechaHasta'], $_POST['_prod'], $producto_nombre, $seccion);
                return $busqueda;
            } else {
                return 'error';
            }
        }
        $titulo_navbar = 'Registro de Consumo';
        return view('/blue/consumos_cliente')->with(compact('producto_nombre', 'cliente', 'producto', 'consulta', 'ruta', 'titulo_navbar'));
    }

    //----- FUNCION QUE DEVUELVE LOS DATOS DE CONSUMO SEGÚN RANGO SELECCIONADO
    public function filtro_consumos_cliente($cliente, $fecha_desde, $fecha_hasta, $producto, $producto_nombre, $seccion) {
        $user_id = 0;
        if ($fecha_desde == '') {
            $fecha_desde = ' ';
        }
        if ($fecha_hasta == '') {
            $fecha_hasta = ' ';
        }
        $fecha_desde_dmy = substr($fecha_desde, 8, 2) . "/" . substr($fecha_desde, 5, 2) . "/" . substr($fecha_desde, 0, 4);
        $fecha_hasta_dmy = substr($fecha_hasta, 8, 2) . "/" . substr($fecha_hasta, 5, 2) . "/" . substr($fecha_hasta, 0, 4);
        $union = 0;
        $union = DB::selectOne("SELECT top 1 cliente from clientes_union where cliente_union = " . $cliente); // UNA CONSULTA SQL A PELO --REVISAR!
        $tipo = 'C'; // ve las consultas de todo el cliente
        if (isset($union)) {
            $tipo = 'F'; // ve todas las consultas de todos los clientes unificados en la facturacion
        }
        $params = array($cliente, $user_id, $fecha_desde, $fecha_hasta, $producto, $tipo);

        $registros = SQLConnection::backendStoreProcedure('obtener_Registro_Consumos', $params, 'select');

        $totales = [];
        $total_gral = 0;
        foreach ($registros as $registro) {
            $total_gral += 1;
            if (isset($totales[$registro->username])) {
                $totales[$registro->username] += 1;
            } else {
                $totales[$registro->username] = 1;
            }
        }

        return array('fecha_hasta_dmy' => $fecha_hasta_dmy, 'fecha_desde_dmy' => $fecha_desde_dmy, 'registros' => $registros, 'totales' => $totales, 'total_gral' => $total_gral, 'producto' => $producto, 'producto_nombre' => $producto_nombre, 'seccion_anterior' => $seccion);
        // return view('blue/tabla_consumos_cliente')->with(compact('registros','totales','total_gral','fecha_desde_dmy','fecha_hasta_dmy','producto','producto_nombre','busqueda'));
    }

    // FUNCION QUE DEVUELVE LA VISTA PARA EDITAR LA CONTRAPARTE DEL FANCY
    public function contraparteGenericoEditar() {
        $cliente = Request::input('cliente');
        $producto = Request::input('producto');
        $nombre_producto = Request::input('nombre_producto');
        $contraparte = Request::input('contraparte');
        $id_padron = Request::input('id_padron');
        $tieneApi = Request::input('tieneApi');
        //
        $cli = SQLConnection::backendStoreProcedure('LED_Clientes', array('select', $cliente, NULL, NULL, NULL, $producto), 'selectOne');
        $nombre_cliente = $cli->nombre_cliente;
        $cli_codigo = $cli->cli_codigo;
        $cli_cuit = $cli->cuit;
        $contrap1 = SQLConnection::backendStoreProcedure('LN_contrapartes_DEV', array('search_contraparte', $contraparte, $id_padron, $cliente, null, null, null, null, null, null, null, null, null, null, Session::get('usuario')->user_id, null, null, $producto), 'select');
        //var_dump($contrap1);die();
        //
        $servicio_elegido = (object) ['producto' => $producto, 'nombre_producto' => $nombre_producto];
        // Si hay contrapartes de un servicio que tiene inactivo no se van a ver, solo toma la de los servicios activos.
        $tiene_de = 0;
        $tiene_lcs = 0;
        $tiene_mlcs = 0;
        $tiene_pp = 0;
        //
        foreach ($contrap1 as $key => $cont) {
            if ($servicio_elegido->producto == $cont->servicio_contratado) {
                $contrap[$cont->servicio_contratado][$key] = $contrap1[$key];
                $tiene_de = ($cont->tiene_de == 1) ? 1 : 0;
                $tiene_lcs = ($cont->tiene_lcs == 1) ? 1 : 0;
                $tiene_mlcs = ($cont->tiene_mlcs == 1) ? 1 : 0;
                $tiene_pp = ($cont->tiene_PP == 1) ? 1 : 0;
            }
        }
        //
        $tiene_exterior = SQLConnection::backendStoreProcedure('LN_demo_', array('TIENE_SCORE_IC', NULL, $cli->cliente), 'select');
        // chequeo de producto Dossier / Business Report 
        $dossierdemo = SQLConnection::backendStoreProcedure('LN_demo_', array('check_dossier_cliente', NULL, $cli->cliente), 'selectOne');
        $businessreport = SQLConnection::backendStoreProcedure('LN_demo_', array('check_business_report_cliente', NULL, $cli->cliente), 'selectOne');
        $businessreport = (is_null($businessreport)) ? '' : $businessreport;
        //
        $inquirovitae = SQLConnection::backendStoreProcedure('LN_demo_', array('check_inquirovitae_cliente', NULL, $cli->cliente), 'selectOne');
        // chequeo de producto Fidecheck demo 
        $fidecheckdemo = SQLConnection::backendStoreProcedure('LN_demo_', array('check_fidecheck_cliente', NULL, $cli->cliente), 'selectOne');
        // chequeo de producto wordcheck demo 
        $wordcheck = SQLConnection::backendStoreProcedure('LN_demo_', array('check_wordcheck_cliente', NULL, $cli->cliente), 'selectOne');
        $familias_wordcheck = SQLConnection::backendStoreProcedure('LN_demo_', array('check_wordcheck_familias', NULL, $cli->cliente), 'select');
        // chequeo de producto Score VRM demo 
        $scorevrm = SQLConnection::backendStoreProcedure('LN_demo_', array('check_scorevrm_cliente', NULL, $cli->cliente), 'selectOne');
        $familias_scorevrm = SQLConnection::backendStoreProcedure('LN_demo_', array('check_scorevrm_familias', NULL, $cli->cliente), 'select');
        // chequeo de producto Informe del Exterior demo 
        $infexterior = SQLConnection::backendStoreProcedure('LN_demo_', array('check_infexterior_cliente', NULL, $cli->cliente), 'selectOne');
        // chequeo de producto Rep.Risk 
        $reprisk = SQLConnection::backendStoreProcedure('LN_demo_', array('check_reprisk_cliente', NULL, $cli->cliente), 'selectOne');
        $familias_reprisk = SQLConnection::backendStoreProcedure('LN_demo_', array('check_reprisk_familias', NULL, $cli->cliente), 'select');
        // chequeo de producto Prensa 
        $prensa = SQLConnection::backendStoreProcedure('LN_demo_', array('check_prensa_cliente', NULL, $cli->cliente), 'selectOne');
        // check recomendador credito 
        $recomend = SQLConnection::backendStoreProcedure('recomendadorCredito_', array($cli->cliente), 'selectOne');
        $recomend = (is_null($recomend)) ? '' : $recomend;
        $wordcheck = (is_null($wordcheck)) ? '' : $wordcheck;
        $scorevrm = (is_null($scorevrm)) ? '' : $scorevrm;
        //
        $monedas = DB::select('EXEC obtener_Monedas', array());
        //
        $es_inquiro = ($producto == env('IV_PRODUCTO')) ? '1' : '0';
        //
        return view('/blue/contraparte_generico_edit')->with(compact(['cli', 'contrap', 'dossierdemo', 'businessreport', 'inquirovitae', 'fidecheckdemo', 'infexterior', 'recomend', 'tiene_exterior', 'prensa', 'producto', 'tiene_de', 'tiene_lcs', 'tiene_mlcs', 'tiene_pp', 'monedas', 'cliente', 'reprisk', 'wordcheck', 'familias_wordcheck', 'scorevrm', 'familias_scorevrm', 'familias_reprisk', 'servicio_elegido', 'tieneApi', 'es_inquiro', 'id_padron', 'contraparte', 'nombre_cliente', 'cli_codigo', 'cli_cuit']));
    }

    // FUNCION QUE DEVUELVE LA VISTA PARA EDITAR LA CONTRAPARTE DEL FANCY
    public function contraparteGenericoEmail() {
        $cl = Request::input('cliente');
        $servicio = Request::input('servicio');
        $nombre_servicio = Request::input('nombre_servicio');
        $contraparte = Request::input('contraparte');
        $id_padron = Request::input('id_padron');
        $tieneApi = Request::input('tieneApi');
        //
        $nombre_persona = Request::input('nombre_persona');
        $nombre_cliente = Request::input('cliente_nombre');
        $cli_cuit = Request::input('cli_cuit');
        $cli_codigo = Request::input('cli_codigo');
        $country_name = Request::input('country_code');
        $nombre_familia = Request::input('nombre_familia');
        $abreviatura = Request::input('abreviatura');
        $identificacion = Request::input('identificacion');
        $nombre_contacto = Request::input('nombre_contacto');
        $email_contacto = Request::input('email_contacto');
        $fecha_desde = Request::input('fecha_desde');
        $fecha_hasta = Request::input('fecha_hasta');
        $last_login = Request::input('last_login');
        //
        $date = \DateTime::createFromFormat('d/m/Y', $fecha_hasta);
        $fecha_hasta = $date->format('Y-m-d');
        //
        $cliente = SQLConnection::backendStoreProcedure('LED_Clientes', array('select', $cl, NULL, NULL, NULL), 'selectOne');
        //
        $es_imperium = ($servicio == env('IMPE_PRODUCTO')) ? 1 : 0;
        //
        return view('/blue/contraparte_generico_email')->with(compact(['cliente', 'servicio', 'es_imperium', 'nombre_servicio', 'contraparte', 'id_padron', 'tieneApi', 'nombre_persona', 'country_name', 'nombre_familia', 'abreviatura', 'identificacion', 'nombre_contacto', 'email_contacto', 'fecha_desde', 'fecha_hasta', 'last_login', 'nombre_cliente', 'cli_cuit', 'cli_codigo']));
    }

    // FUNCION QUE DEVUELVE EL MODAL DE DEFINIR SERVICIO DE LAS CONTRAPARTES GENERICOS
    public function contrapartesGenericoDefinirServicio() {
        $cli = Request::input('cliente');
        $servicios = SQLConnection::backendStoreProcedure('usuarios_restricciones_', array('servicios', $cli), 'select');
        return view('/blue/contrapartes_genericos_definir_servicio')->with(compact(['servicios']));
    }

    // ------------------  FUNCION QUE GENERA EL PDF ---------------- //
    public function generarContenidoExportable() {
        $contenido = $_POST['contenido'];
        //return view('/blue/reports/export_pdf/plantilla_formulario_inteligente')->with(compact('contenido'))->render();
        $html = '';
        $html .= view('/blue/reports/export_pdf/plantilla_formulario_inteligente')->with(compact('contenido'))->render();
        $nombre = "formulario_prueba.html";
        //
        $file = ENV('GENERATE_FORMULARIO_INTELIGENTE') . '/' . $nombre;
        $file_download = ENV('GENERATE_FORMULARIO_INTELIGENTE') . '/' . str_replace('.html', '.pdf', $nombre);
        // 
        $html_iso = iconv('UTF-8', 'ISO-8859-1', $html);
        file_put_contents($file, $html_iso);
        chmod($file, 0777);
        //
        exec("wkhtmltopdf -d 300 -L 10 -R 10 -T 10 -B 10 --enable-local-file-access --header-font-size 8 --header-right ' [page] de [toPage]'  --viewport-size 500x750 --zoom 1 " . ENV('GENERATE_FORMULARIO_INTELIGENTE') . "/" . $nombre . " " . ENV('GENERATE_FORMULARIO_INTELIGENTE') . "/" . str_replace('.html', '.pdf', $nombre));
        return response()->download($file_download);
    }

    public function bajaUsuarioCliente() {
        $user_id = Request::input("user_id");
        $cli_codigo = Request::input("cli_codigo");
        $params = array('D', $cli_codigo, $user_id, null, null, null, null, null, null, null, null, null);
        SQLConnection::backendStoreProcedure('backend_abm_usuarios_productos', $params);
    }

    //NUEVAS FUNCIONES PARA EL DEPARTAMENTO COMERCIAL
    public function departamentoComercial() {
        $clientes = self::totalClients();

        if (Request::input('ruta') !== null) {
            $ruta = '/' . Request::input('ruta');
        } else {
            $ruta = '/';
        }

        $nuevo_cliente = Request::input('nuevo_cliente') ?? 0;

        $paises = self::paisesSinRepetir();
        $navbarSeccionesNuevoCliente = 1;
        $titulo_navbar = 'Departamento Comercial';

        return view('/blue/panel_clientes_comercial')->with(compact('clientes', 'ruta', 'navbarSeccionesNuevoCliente', 'paises', 'titulo_navbar', 'nuevo_cliente'));
    }

    //----- FUNCION QUE REALIZA BUSQUEDA EN PADRON DE UNA PERSONA SELECCIONADA, SI NO CUMPLE REQUISITOS DEVUELVE STRING '0'.
    public function buscarPersona() {
        if (isset($_POST['persona']) && !Misc::tieneCaracterRaroBase($_POST['persona'])) {
            return SQLConnection::busquedaPadronAutocomplete($_POST['persona'], true);
        }
        return '0';
    }


    /* 10/06/2025: Usamos la api de busqueda padron, que hace todas las validaciones */
    public function buscarPersonav2() {
        $persona = Request::input('persona');

        $data = Misc::CURLCall(env('API_BUSCAR_PADRON'), http_build_query(['apikey' => env('APIKEY_BUSCAR_PADRON'), 'identificacion' => null, 'pais_busqueda' => 'AR', 'razon_social' => $persona, 'pais' => 'AR', 'tipo_identificacion' => null, 'tipo_persona' => null, 'sexo' => null])); // Llamada al api
        $insert_data1 = json_decode($data);

        $data = Misc::CURLCall(env('API_BUSCAR_PADRON'), http_build_query(['apikey' => env('APIKEY_BUSCAR_PADRON'), 'identificacion' => null, 'pais_busqueda' => 'OTRO', 'razon_social' => $persona, 'pais' => 'OTRO', 'tipo_identificacion' => null, 'tipo_persona' => null, 'sexo' => null])); // Llamada al api
        $insert_data2 = json_decode($data);
        
        $datos_padron = new \stdClass;
        $datos_padron->Response = [];
        $datos_padron->Response = array_merge($insert_data1->Response, $insert_data2->Response);

        return Response::json($datos_padron);
    }


    public function buscarPersonav2_10062025() {
        $persona = Request::input('persona');
        #Revisa si persona es una razon social o cuit/cuil
        $patron_cuit = '/[0-9]{11}/';
        $patron_razon_social = '/[a-zA-z]+/';

        $puede_ser_extranjero = false;
        if (preg_match($patron_cuit, $persona)) {
            $tipo_busqueda = 'identificacion';
        } elseif (preg_match($patron_razon_social, $persona)) {
            $tipo_busqueda = 'razon_social';
            $puede_ser_extranjero = true;
        } else {
            // Si no m&&a cuit o nombre persona, devuelve un error
            return 0;
        }

        $params = ['apikey' => env('APIKEY_BUSCAR_PADRON'), 'pais_busqueda' => 'AR', $tipo_busqueda => $persona];
        $request_padron = Misc::CURLCall(env('API_BUSCAR_PADRON'), http_build_query($params), 'POST');
        $request_padron = json_decode($request_padron);
        $datos_padron = new \stdClass;
        $datos_padron->Response = [];
        if ( !is_null($request_padron) && !empty($request_padron->Response) ){
            $datos_padron->Response = $request_padron->Response;
        }
        //
        if ( $puede_ser_extranjero ){
            $params_ext = ['apikey' => env('APIKEY_BUSCAR_PADRON'), 'pais_busqueda' => 'OTRO', $tipo_busqueda => $persona];
            $request_padron_ext = Misc::CURLCall(env('API_BUSCAR_PADRON'), http_build_query($params_ext), 'POST');
            $request_padron_ext = json_decode($request_padron_ext);
            if ( !is_null($request_padron_ext) && !empty($request_padron_ext->Response) ){
                $datos_padron->Response = array_merge($datos_padron->Response,$request_padron_ext->Response);
            }
        }
        //
        return Response::json($datos_padron);
    }

    //-- DATOS PARA FOOTER DEL BUSCADOR
    public function totalClients() {
        $total = SQLConnection::totalClientes();
        return array('activos' => $total[0]->activos, 'inactivos' => $total[0]->inactivos);
    }

    public function totalUsu() {
        $total = SQLConnection::totalUsu();
        return array('activos' => $total[0]->activos, 'inactivos' => $total[0]->inactivos);
    }

    public function busquedaClientePorUsuario(){
        $usuario = Request::input('usuario');
        $params = array();
        if(preg_match('/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/', $usuario) == 1) {
            $params= array(null,$usuario);
        }else{
            $params= array($usuario,null);
        }
        $busquedaUsuarioCliente = SQLConnection::backendStoreProcedure('buscar_usuarios',$params);
        return $busquedaUsuarioCliente;
    }

    public function indexUsuarios() {
        $usuarios = self::totalUsu();
        if (Request::input('ruta') !== null) {
            $ruta = '/' . Request::input('ruta');
        } else {
            $ruta = '/';
        }
        //
        $nuevo_cliente = Request::input('nuevo_cliente') ?? 0;
        //
        $paises = self::paisesSinRepetir();
        $navbarSeccionesNuevoCliente = 1;
        $titulo_navbar = 'Departamento Comercial';
        return view('/blue/panel_usuarios_abm')->with(compact('usuarios', 'ruta', 'navbarSeccionesNuevoCliente', 'paises', 'titulo_navbar', 'nuevo_cliente'));
    }

    public function obtener_datos_usuario(){        
        $userid = $_POST['clienteOk'];                  

        $datos_cliente = [];
        $datos_cliente = SQLConnection::backendStoreProcedure('dbo.user_data',array($userid));
        //
        return response()->json($datos_cliente);    
    }
    
    public function Guardardatos_usuario(){

        $userid = $_POST['user_id'];   
        $username = $_POST['username'];   
        $active_user = $_POST['act_user'];
        $email = $_POST['email'];     
        $firstname = $_POST['firstname'];   
        $lastname = $_POST['lastname'];
        $password = $_POST['password'];   
        
        $preferencias = $_POST['preferencias'];    
        //no tenog password
        $p_country = $_POST['p_country'];  
        $p_iso_idioma = $_POST['p_iso_idioma']; 
        $p_simul_login = $_POST['p_simul_login']; 
          

        // dd($p_simul_login);
        $datos_cliente = SQLConnection::backendStoreProcedure('dbo.users_backend', array('M', $userid, $username, $active_user,$email,$firstname,$lastname,$password,$preferencias,$p_country,$p_iso_idioma,$p_simul_login));
        
        return response()->json($datos_cliente); 
    }
}
