<?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 DateTime;
use stdClass;


class AsignacionCuitsABMController extends Controller {

	public function index() {
		return view('asignacion-cuits/sc/asignacion_cuits_sc');

	}
	/*
	  public static function parsearBusquedaPadron($campo){
		$campo = Misc::limpiarString($campo);
		$exploded_uno = explode(" ", $campo);
		$full_search = "";
		$exploded = [];
		foreach($exploded_uno as $key => $part) {
		  if (strlen($part) >= 2) {
			$exploded[] = $part; 
		  } 
		}
		
		if (sizeof($exploded) == 1 && strlen($campo) > 2) {
		  return "\"".$campo."\"";
		} elseif ((sizeof($exploded) == 2) && ((strlen($exploded[0]) + strlen($exploded[1])) > 2)) {
		  return "\"".$exploded[0]."\" NEAR "."\"*".$exploded[1]."*\"";
		} elseif (sizeof($exploded) > 2) {
		  foreach($exploded as $key => $part) {
			if($key == 0 && $part != '') {
			  $full_search = "\"".$part."\"";
			} elseif ($part != '') {
			  $full_search .= " NEAR "."\"*".$part."*\"";
			}
		  }
		  return $full_search;
		}
		return $full_search;
	  }
	*/

	/*
	public static function parsearBusquedaPadron($campo){
	  $campo = Misc::limpiarString($campo);
	  $exploded = explode(" ", $campo);
	  $full_search = "";
	  if (sizeof($exploded) == 1 && strlen($campo) > 2) {
		return "\"".$campo."\"";
	  } elseif ((sizeof($exploded) == 2) && ((strlen($exploded[0]) + strlen($exploded[1])) > 2)) {
		return "\"".$exploded[0]."\" NEAR "."\"*".$exploded[1]."*\"";
	  } elseif (sizeof($exploded) > 2) {
		foreach($exploded as $key => $part) {
		  if($key == 0 && $part != '') {
			$full_search = "\"".$part."\"";
		  } elseif ($part != '') {
			$full_search .= " NEAR "."\"*".$part."*\"";
		  }
		}
		return $full_search;
	  }
	  return $full_search;
	}
	*/

	public function obtenerNoAsignados() {
		$letra = Request::input('letra');
		$busqueda = Request::input('busqueda');
		$page = Request::input('page');
		$tipo_busqueda = Request::input('tipo_busqueda');
		$sc = [];
		$no_asignados = [];
		//$no_encontrados = [];
		$query_string = '';
		//$total = SQLConnection::backendStoreProcedure('backend_obtener_total_no_asignados_SC', array(null, 0), true);
		$total = new stdClass;
		$total->cantidad = 'N/A';
		if ((isset($letra) && ($letra != '')) || (isset($busqueda) && ($busqueda != ''))) {
			$exec = [];
			if (isset($busqueda) && ($busqueda != '')) {
				$busqueda = Misc::limpiarString($busqueda);
				if (strlen($busqueda) >= 3) {
					$exec = SQLConnection::backendStoreProcedure('backend_obtener_no_asignados_filtro_por_razon_social', array($busqueda, $tipo_busqueda));
					$query_string = self::organizarQueryString('busqueda', $busqueda, $query_string);
				}
			} else {
				$exec = SQLConnection::backendStoreProcedure('backend_obtener_no_asignados_filtro_por_letra', array($letra[0], $tipo_busqueda));
				//$total_por_letra = SQLConnection::backendStoreProcedure('backend_obtener_total_no_asignados_SC', array($letra[0],$tipo_busqueda ?? 0), true);
				$total_por_letra = new stdClass;
				$total_por_letra->cantidad = 'N/A';
				$query_string = self::organizarQueryString('letra', $letra[0], $query_string);
			}

			$i = 1;
			foreach ($exec as $pos => $row) {
				$row->id = $i;
				$nombre_sociedad = $row->soc_nombre;
				if (isset($nombre_sociedad)) {
					$row->nombre_sociedad = $nombre_sociedad;
				}
				$contenido_resumido = $row->pub_contenido;
				$contenido_resumido = substr($contenido_resumido, 0, 200);
				if (isset($contenido_resumido)) {
					$row->contenido_resumido = $contenido_resumido;
				}

				$row = (object) Misc::convertirStringsVaciosEnNull((array) $row);
				$row->soc_no_procesada = ($row->es_sociedad == 1) ? true : false;

				// obtener integrantes
				$params = [
					'razon_social' => $row->soc_nombre,
					'nombre_file' => $row->pub_archivo,
					'codigo_archivo' => $row->pub_codigo,
				];
				$row->integrantes = SQLConnection::backendStoreProcedure('backend_obtener_integrantes_de_sociedad_SC', array_values($params));
				//$row->int_no_procesado = (($row->procesado == null) || ($row->procesado == 0)) ? true : false;

				$row->integrantes = self::agruparIntegrantes($row->integrantes);

				$no_asignados[] = $row;
				$i++;
			}

			//$no_asignados = self::agruparIntegrantesNoAsignados($no_asignados);
			//$no_encontrados = self::agruparIntegrantesNoEcontrados($no_encontrados);
			//$no_asignados = self::limpiarSociedadesIntegrantesYaProcesados($no_asignados);

			if (isset($busqueda) && ($busqueda != '')) {
				$total_encontrados = sizeof($no_asignados);
			}

		}

		if (isset($page) && ($page != '')) {
			$query_string = self::organizarQueryString('page', $page, $query_string);
		}
		if (isset($tipo_busqueda) && ($tipo_busqueda != '')) {
			$query_string = self::organizarQueryString('tipo_busqueda', $tipo_busqueda, $query_string);
		}

		$no_asignados = Misc::paginarArray($no_asignados, 'sc/' . $query_string);
		//$no_encontrados = Misc::paginarArray($no_encontrados, 'sc/'.$query_string);

		$convertirFormatoFecha = '\App\Custom\Misc::convertirFormatoFecha';
		$tipo_tabla = 'tabla_no_asignados';
		$view_no_asignados = view('asignacion-cuits/sc/lista_no_asignados')->with(compact('no_asignados', 'tipo_tabla', 'convertirFormatoFecha', 'total', 'total_por_letra', 'letra', 'total_encontrados', 'busqueda', 'tipo_busqueda'))->render();
		/*
		$no_asignados = $no_encontrados;
		$tipo_tabla = 'tabla_no_encontrados';
		$view_no_encontrados = view('asignacion-cuits/sc/lista_no_asignados')->with(compact('no_asignados', 'tipo_tabla', 'convertirFormatoFecha', 'total', 'total_por_letra', 'letra', 'total_encontrados', 'busqueda'))->render();
		*/
		return response()->json([
			'view_no_asignados' => $view_no_asignados,
			// 'view_no_encontrados' => $view_no_encontrados
		]);
	}

	private static function organizarQueryString($name, $value, $query_string) {
		if (strlen($query_string) == 0) {
			$query_string .= '?' . $name . '=' . $value;
		} else {
			$query_string .= '&' . $name . '=' . $value;
		}
		return $query_string;
	}

	private static function agruparIntegrantes($array = []) {
		$result = [];
		foreach ($array as $pos_1 => $row_1) {
			if ($pos_1 == 0) {
				$row_1->ids = [];
				$row_1->ids[] = $row_1->id;
				$result[] = $row_1;
			} else {
				$encontrado = false;
				foreach ($result as $pos_2 => $row_2) {
					if ($row_1->nombre == $row_2->nombre) {
						$result[$pos_2]->ids[] = $row_1->id;
						if ($result[$pos_2]->procesado && !$row_1->procesado) {
							$result[$pos_2]->procesado = $row_1->procesado;
						}
						$encontrado = true;
					}
				}
				if (!$encontrado) {
					$row_1->ids = [];
					$row_1->ids[] = $row_1->id;
					$result[] = $row_1;
				}
			}
		}
		return $result;
	}

	private static function agruparIntegrantesNoAsignados($array = []) {
		$result = [];
		foreach ($array as $pos_1 => $row_1) {
			if ($pos_1 == 0) {
				$row_1->integrantes = [];
				if ($row_1->es_sociedad == 0) {
					$row_1->integrantes[] = self::asignarIntegrante($row_1);
				}
				$result[] = $row_1;
			} else {
				$encontrado = false;
				foreach ($result as $pos_2 => $row_2) {
					if (($row_1->soc_nombre == $row_2->soc_nombre) && ($row_1->pub_archivo == $row_2->pub_archivo)) {
						if ($row_1->es_sociedad == 0) {
							$result[$pos_2]->integrantes[] = self::asignarIntegrante($row_1);
						}
						$encontrado = true;
					}
				}
				if (!$encontrado) {
					$row_1->integrantes = [];
					if ($row_1->es_sociedad == 0) {
						$row_1->integrantes[] = self::asignarIntegrante($row_1);
					}
					$result[] = $row_1;
				}
			}
		}
		return self::limpiarDatosIntegrantes($result);
	}

	private static function agruparIntegrantesNoEcontrados($array = []) {
		$result = [];
		foreach ($array as $pos_1 => $row_1) {
			if ($pos_1 == 0) {
				$row_1->integrantes = [];
				if ((isset($row_1->int_nombre) || isset($row_1->int_cuit_1) || isset($row_1->int_cuit_2) || isset($row_1->int_documento_1) || isset($row_1->int_documento_2))) {
					$row_1->integrantes[] = self::asignarIntegrante($row_1);
				}
				$result[] = $row_1;
			} else {
				$encontrado = false;
				foreach ($result as $pos_2 => $row_2) {
					if (($row_1->soc_nombre == $row_2->soc_nombre) && ($row_1->pub_archivo == $row_2->pub_archivo)) {
						if ((isset($row_1->int_nombre) || isset($row_1->int_cuit_1) || isset($row_1->int_cuit_2) || isset($row_1->int_documento_1) || isset($row_1->int_documento_2))) {
							$result[$pos_2]->integrantes[] = self::asignarIntegrante($row_1);
						}
						$encontrado = true;
					}
				}
				if (!$encontrado) {
					$row_1->integrantes = [];
					if ((isset($row_1->int_nombre) || isset($row_1->int_cuit_1) || isset($row_1->int_cuit_2) || isset($row_1->int_documento_1) || isset($row_1->int_documento_2))) {
						$row_1->integrantes[] = self::asignarIntegrante($row_1);
					}
					$result[] = $row_1;
				}
			}
		}
		return self::limpiarDatosIntegrantes($result);
	}

	private static function asignarIntegrante($row) {
		$integrante = new stdClass();
		$integrante->id = $row->id;
		$integrante->nombre = $row->int_nombre;
		$integrante->cuit_1 = $row->int_cuit_1;
		$integrante->cuit_2 = $row->int_cuit_2;
		$integrante->tipo_documento = $row->int_tipo_documento;
		$integrante->documento_1 = $row->int_documento_1;
		$integrante->documento_2 = $row->int_documento_2;
		$integrante->domicilio = $row->int_domicilio;
		$integrante->localidad = $row->int_localidad;
		$integrante->provincia_1 = $row->int_provincia_1;
		$integrante->provincia_2 = $row->int_provincia_2;
		$integrante->nacionalidad = $row->int_nacionalidad;
		$integrante->cargo_1 = $row->int_cargo_1;
		$integrante->cargo_2 = $row->int_cargo_2;
		$integrante->estado_civil = $row->int_estado_civil;
		$integrante->profesion = $row->int_profesion;
		$integrante->fecha_nac = $row->int_fecha_nac;
		$integrante->no_procesado = $row->int_no_procesado;
		return $integrante;
	}

	private static function limpiarDatosIntegrantes($array) {
		foreach ($array as $pos => $row) {
			unset($row->int_nombre);
			unset($row->int_cuit_1);
			unset($row->int_cuit_2);
			unset($row->int_tipo_documento);
			unset($row->int_documento_1);
			unset($row->int_documento_2);
			unset($row->int_domicilio);
			unset($row->int_localidad);
			unset($row->int_provincia_1);
			unset($row->int_provincia_2);
			unset($row->int_nacionalidad);
			unset($row->int_cargo_1);
			unset($row->int_cargo_2);
			unset($row->int_estado_civil);
			unset($row->int_profesion);
			unset($row->int_fecha_nac);
			unset($row->int_no_procesado);
			$array[$pos] = $row;
		}
		return $array;
	}

	// DATOS PADRONES SIMILARES ---------------------------------------------------------------------------

	public function obtenerPadronesSimilares() {
		$nombre = Request::input('nombre');
		$razon_social = Request::input('razon_social');
		$es_sociedad = Request::input('es_sociedad');
		$id_sc = Request::input('id_sc');
		$ids = Request::input('ids');
		$archivo = Request::input('archivo');
		$codigo_archivo = Request::input('codigo_archivo');
		$domicilio = Request::input('domicilio');
		$localidad = Request::input('localidad');
		$provincia = Request::input('provincia');
		$fecha_nac = Request::input('fecha_nac');
		$profesion = Request::input('profesion');
		$cargo = Request::input('cargo');
		$color_general = Request::input('color_general');
		$color_sociedad = Request::input('color_sociedad');
		$cargo = Request::input('cargo');
		$es_sociedad = (int) $es_sociedad;
		$padrones_similares = [];

		$razon_social_original = $razon_social;

		$razon_social = (isset($razon_social) && ($razon_social != '')) ? $razon_social : null;
		$nombre = (isset($nombre) && ($nombre != '')) ? $nombre : null;

		if ($es_sociedad) {
			$razon_social = Misc::limpiarString($razon_social);
			//$diccionario = Misc::diccionarioRazonesSociales($razon_social);
			$diccionario = (isset($diccionario) && is_array($diccionario)) ? $diccionario : [$razon_social];
		} else {
			$nombre = Misc::limpiarString($nombre);
			$fecha_nac = str_replace('"', '', $fecha_nac);
			$fecha_nac = str_replace("'", '', $fecha_nac);
		}

		/*
		$params = array(
		  'cuit'           => null,
		  'dni'            => null,
		  'nombre'         => (!$es_sociedad && isset($nombre)) ? $nombre : null,
		  'domicilio'      => null,
		  'razon_social'   => ($es_sociedad && isset($razon_social)) ? '"'.$razon_social.'"' : null,
		);

		$params = Misc::convertirStringsVaciosEnNull($params);
		$padrones_similares = self::busquedaPadron('backend_busqueda_padron_personalizada', $params, $diccionario ?? null);

		if ( is_array($padrones_similares) && sizeof($padrones_similares) == 0) {
		  $params = array(
			'razon_social'   => ($es_sociedad && isset($razon_social)) ? '"'.$razon_social.'"' : null,
			'domicilio'      => isset($domicilio) ? Misc::limpiarString($domicilio) :  null,
			'localidad'      => isset($localidad) ? Misc::limpiarString($localidad) :  null,
			'provincia'      => isset($provincia) ? Misc::limpiarString($provincia) :  null,
			'nombre'         => (!$es_sociedad && isset($nombre)) ? $nombre :  null,
			'fecha_nac'      => isset($fecha_nac) ? $fecha_nac :  null,
			'profesion'      => isset($profesion) ? Misc::limpiarString($profesion) :  null,
			'cargo'          => isset($cargo)     ? Misc::limpiarString($cargo) : null,
			'cuit_soc'       => null,
		  );
		  $params = Misc::convertirStringsVaciosEnNull($params);
		  $padrones_similares = self::busquedaPadron('backend_busqueda_asociativa_para_ABM', $params, $diccionario ?? null);
		}
		*/

		if (is_array($padrones_similares) && sizeof($padrones_similares) == 0) {
			$params = array(
				'razon_social' => ($es_sociedad && isset($razon_social)) ? Misc::parsearBusquedaPadron($razon_social) : Misc::parsearBusquedaPadron($nombre),
				'pais' => 1,
			);
			$exec = self::busquedaPadron('busqueda_padron', $params, $diccionario ?? null);


			$padrones_similares = [];
			if (isset($exec) && is_array($exec) && sizeof($exec) > 0) {
				foreach ($exec as $pos => $row) {
					$aux = new stdClass();
					$aux->cuit = $row->identificacion;
					$aux->id_padron = $row->id_padron;
					$aux->nombre_persona = $row->nombre_persona;
					$padrones_similares[] = $aux;
				}
			}

		}

		$busqueda = ($es_sociedad && isset($razon_social)) ? $razon_social : $nombre;
		$tipo_tabla = 'tabla_lista_similares';

		$view = view('asignacion-cuits/sc/lista_similares')->with(compact('padrones_similares', 'id_sc', 'nombre', 'razon_social', 'es_sociedad', 'archivo', 'codigo_archivo', 'busqueda', 'domicilio', 'localidad', 'provincia', 'tipo_tabla', 'razon_social_original', 'ids', 'color_sociedad', 'color_general', 'cargo'))->render();

		$buscador = view('asignacion-cuits/sc/buscador')->with(compact('id_sc', 'nombre', 'razon_social', 'es_sociedad', 'archivo', 'codigo_archivo', 'domicilio', 'localidad', 'provincia', 'razon_social_original', 'ids', 'color_sociedad', 'color_general', 'cargo'))->render();

		return response()->json([
			'view' => $view,
			'buscador' => $buscador,
		]);
	}

	private static function busquedaPadron($stored_procedure, $params, $diccionario = null) {
		if (isset($diccionario)) {
			foreach ($diccionario as $razon_social) {
				if ($stored_procedure == 'busqueda_padron') {
					$params['razon_social'] = Misc::parsearBusquedaPadron($razon_social);
				} else {
					$params['razon_social'] = '"' . $razon_social . '"';
				}
				$padrones_similares = SQLConnection::backendStoreProcedure($stored_procedure, array_values($params));
				if (is_array($padrones_similares) && sizeof($padrones_similares) > 0) {
					break;
				}
			}
		} else {
			$padrones_similares = SQLConnection::backendStoreProcedure($stored_procedure, array_values($params));
		}
		return $padrones_similares;
	}

	public function busquedaAlternativa() {
		$busqueda = Request::input('busqueda');
		$nombre = Request::input('nombre');
		$razon_social = Request::input('razon_social');
		$razon_social_original = Request::input('razon_social_original');
		$es_sociedad = Request::input('es_sociedad');
		$id_sc = Request::input('id_sc');
		$ids = Request::input('ids');
		$archivo = Request::input('archivo');
		$codigo_archivo = Request::input('codigo_archivo');
		$domicilio = Request::input('domicilio');
		$localidad = Request::input('localidad');
		$provincia = Request::input('provincia');
		$color_general = Request::input('color_general');
		$color_sociedad = Request::input('color_sociedad');
		$cargo = Request::input('cargo');

		$busqueda_limpia = Misc::parsearBusquedaPadron($busqueda);
		if (!empty($busqueda_limpia)) {
			$exec = SQLConnection::backendStoreProcedure('busqueda_padron', array($busqueda_limpia, 1));
		}

		$padrones_similares = [];

		if (isset($exec) && is_array($exec) && sizeof($exec) > 0) {
			foreach ($exec as $pos => $row) {
				$aux = new stdClass();
				$aux->cuit = $row->identificacion;
				$aux->id_padron = $row->id_padron;
				$aux->nombre_persona = $row->nombre_persona;
				$padrones_similares[] = $aux;
			}
		}

		$tipo_tabla = 'tabla_busqueda';

		$view = view('asignacion-cuits/sc/lista_similares')->with(compact('padrones_similares', 'id_sc', 'nombre', 'razon_social', 'es_sociedad', 'archivo', 'codigo_archivo', 'busqueda', 'domicilio', 'localidad', 'provincia', 'tipo_tabla', 'razon_social_original', 'ids', 'color_general', 'color_sociedad', 'cargo'))->render();

		$buscador = view('asignacion-cuits/sc/buscador')->with(compact('id_sc', 'nombre', 'razon_social', 'es_sociedad', 'archivo', 'codigo_archivo', 'domicilio', 'localidad', 'provincia', 'razon_social_original', 'ids', 'color_general', 'color_sociedad', 'cargo'))->render();

		return response()->json([
			'view' => $view,
			'buscador' => $buscador,
		]);
	}

	public function obtenerFormales() {
		$id_padron = Request::input('id_padron');
		$id_sc = Request::input('id_sc');
		$ids = Request::input('ids');
		$cuit = Request::input('cuit');
		$nombre = Request::input('nombre');
		$nombre_original = Request::input('nombre_original');
		$razon_social_original = Request::input('razon_social_original');
		$archivo = Request::input('archivo');
		$codigo_archivo = Request::input('codigo_archivo');
		$es_sociedad = Request::input('es_sociedad');
		$domicilio = Request::input('domicilio');
		$localidad = Request::input('localidad');
		$provincia = Request::input('provincia');
		$color_general = Request::input('color_general');
		$color_sociedad = Request::input('color_sociedad');
		$cargo = Request::input('cargo');
		$es_sociedad = (int) $es_sociedad;

		$cargos = SQLConnection::obtenerCodigos("obtener_Cargos");

		$domicilios = SQLConnection::backendStoreProcedure('obtener_domicilios_new', array($cuit, 0));
		$info = SQLConnection::backendStoreProcedure('backend_obtener_info_de_cuit', array($id_padron, $es_sociedad), true);

		$tipo_domicilio = [
			"D" => "DOMICILIO",
			"L" => "LEGAL",
			"F" => "FISCAL",
			"O" => "OTRO"
		];
		$convertirStringsVaciosEnNull = '\App\Custom\Misc::convertirStringsVaciosEnNull';


		$view = view('asignacion-cuits/sc/formales')->with(compact('id_padron', 'id_sc', 'cuit', 'nombre', 'nombre_original', 'razon_social_original', 'info', 'domicilios', 'es_sociedad', 'tipo_domicilio', 'archivo', 'codigo_archivo', 'domicilio', 'localidad', 'provincia', 'convertirStringsVaciosEnNull', 'cargos', 'ids', 'color_sociedad', 'color_general', 'cargo'))->render();

		return response()->json([
			'view' => $view
		]);
	}

	public function obtenerRelaciones() {
		$id_padron = Request::input('id_padron');
		$id_sc = Request::input('id_sc');
		$cuit = Request::input('cuit');
		$nombre = Request::input('nombre');
		$nombre_original = Request::input('nombre_original');
		$razon_social_original = Request::input('razon_social_original');
		$archivo = Request::input('archivo');
		$codigo_archivo = Request::input('codigo_archivo');
		$es_sociedad = Request::input('es_sociedad');
		$domicilio = Request::input('domicilio');
		$localidad = Request::input('localidad');
		$provincia = Request::input('provincia');
		$es_sociedad = (int) $es_sociedad;

		$params = [
			'id_socio' => null,
			'cuit' => $cuit,
			'visible' => 1,
			'tipo_persona' => ($es_sociedad) ? 'j' : 'f',
		];

		$convertirFormatoFecha = '\App\Custom\Misc::convertirFormatoFecha';
		$convertirStringsVaciosEnNull = '\App\Custom\Misc::convertirStringsVaciosEnNull';

		$socios = SQLConnection::backendStoreProcedure('backend_obtener_socios', array_values($params));

		$view = view('asignacion-cuits/sc/relaciones')->with(compact('id_padron', 'id_sc', 'cuit', 'nombre', 'nombre_original', 'razon_social_original', 'socios', 'es_sociedad', 'archivo', 'codigo_archivo', 'domicilio', 'localidad', 'provincia', 'convertirFormatoFecha', 'convertirStringsVaciosEnNull'))->render();

		return response()->json([
			'view' => $view
		]);
	}

	public function busquedaEnTextos() {
		$busqueda = Request::input('busqueda');
		$tipo_busqueda = Request::input('tipo_busqueda');
		$view = '';

		if (isset($busqueda) && isset($tipo_busqueda)) {
			$params = [
				'nombre' => null,
				'documento' => null,
			];
			$diccionario = [];

			if ($tipo_busqueda == 'nombre') {
				$busqueda = Misc::limpiarString($busqueda);
				if (!is_numeric($busqueda)) {
					$diccionario = Misc::diccionarioRazonesSociales($busqueda);
					$diccionario = is_array($diccionario) ? $diccionario : [$busqueda];
				}
			} elseif ($tipo_busqueda == 'cuit') {
				$busqueda = Misc::limpiarString($busqueda);
				if (is_numeric($busqueda)) {
					$diccionario = Misc::diccionarioCuits($busqueda);
				}
			} elseif ($tipo_busqueda == 'dni') {
				$busqueda = Misc::limpiarString($busqueda);
				if (is_numeric($busqueda)) {
					$diccionario = Misc::diccionarioDNIs($busqueda);
				}
			}

			$textos = self::busquedaEdictos('backend_obtener_edictos_por_contenido_archivo', $params, $diccionario, $tipo_busqueda);
			$view = view('/asignacion-cuits/sc/lista_textos')->with(compact('textos'))->render();
		}

		return response()->json([
			'view' => $view,
		]);
	}

	private static function busquedaEdictos($stored_procedure, $params, $diccionario, $tipo_busqueda) {
		$textos = [];
		$diccionario_aux = $diccionario;
		if (isset($diccionario)) {
			foreach ($diccionario as $busqueda) {
				if ($tipo_busqueda == 'nombre') {
					$params['nombre'] = '"' . $busqueda . '"';
				} elseif (($tipo_busqueda == 'cuit') || ($tipo_busqueda == 'dni')) {
					$params['documento'] = $busqueda;
				}
				$exec = SQLConnection::backendStoreProcedure($stored_procedure, array_values($params));
				if (is_array($exec) && sizeof($exec) > 0) {
					foreach ($exec as $key => $archivo) {
						$tamaño_original = strlen($archivo->texto);
						foreach ($diccionario_aux as $value) {
							$exec[$key]->texto = Misc::resaltarStringEnContenido(str_replace('"', '', $value), $archivo->texto);
							if (strlen($exec[$key]->texto) > $tamaño_original) {
								break;
							}
						}
					}
					$textos = array_merge($textos, $exec);
				}
			}
		}
		return $textos;
	}

	private static function limpiarSociedadesIntegrantesYaProcesados($sociedades) {
		$aux = $sociedades;
		foreach ($sociedades as $pos => $soc) {
			if (!isset($soc->soc_no_procesada) || (isset($soc->soc_no_procesada) && ($soc->soc_no_procesada === false))) {
				$eliminar = 0;
				foreach ($soc->integrantes as $key => $int) {
					if ($int->no_procesado === false) {
						$eliminar++;
					}
				}
				if ($eliminar == sizeof($soc->integrantes)) {
					unset($aux[$pos]);
				}
			}
		}
		return $aux;
	}

	public function asignarCuit() {
		$id_sc = Request::input('id_sc');
		$ids = Request::input('ids');
		$cuit = Request::input('cuit');
		$nombre_original = Request::input('nombre_original');
		$razon_social_original = Request::input('razon_social_original');
		$archivo = Request::input('archivo');
		$codigo_archivo = Request::input('codigo_archivo');
		$es_sociedad = Request::input('es_sociedad');
		$es_sociedad = (int) $es_sociedad;
		$asignar_domicilio = Request::input('asignar_domicilio');
		$asignar_cargo = Request::input('asignar_socios');
		$tipo_domicilio = Request::input('tipo_domicilio');
		$domicilio_edited = Request::input('domicilio_edited');
		$localidad_edited = Request::input('localidad_edited');
		$provincia_edited = Request::input('provincia_edited');
		$cargo_cargo = Request::input('cargo_cargo');
		$cargo_ultimo = Request::input('cargo_ultimo');
		$cargo_desde = Request::input('cargo_desde');
		$cargo_hasta = Request::input('cargo_hasta');
		$asignado = true;

		if ($es_sociedad) {
			$params = [
				'nombre' => $nombre_original,
				'archivo' => $archivo,
				'codigo_archivo' => $codigo_archivo,
				'cuit' => $cuit,
				'es_sociedad' => $es_sociedad,
				'razon_social' => $razon_social_original,
				'id_sc' => $id_sc,
			];
			$exec_1 = SQLConnection::backendStoreProcedure('backend_procesar_asignacion_de_cuit_SC', array_values($params), true);
			if (!isset($exec_1->id_sc)) {
				$asignado = false;
			}
		} else {
			$ids = (isset($ids) && $ids != '') ? explode(',', $ids) : [$id_sc];
			foreach ($ids as $id) {
				$params = [
					'nombre' => $nombre_original,
					'archivo' => $archivo,
					'codigo_archivo' => $codigo_archivo,
					'cuit' => $cuit,
					'es_sociedad' => $es_sociedad,
					'razon_social' => $razon_social_original,
					'id_sc' => $id,
				];
				$exec_1 = SQLConnection::backendStoreProcedure('backend_procesar_asignacion_de_cuit_SC', array_values($params), true);
				if (!isset($exec_1->id_sc)) {
					$asignado = false;
				}
			}
		}

		if (isset($asignar_domicilio) && (isset($domicilio_edited) || isset($localidad_edited) || isset($provincia_edited))) {
			$params = [
				'codpos' => null,
				'cuit' => $cuit,
				'domicilio' => $domicilio_edited,
				'email' => null,
				'fax' => null,
				'id_domicilio' => 0,
				'loc_codigo' => null,
				'loc_nombre' => $localidad_edited,
				'pai_codigo' => null,
				'pai_nombre' => null,
				'prv_codigo' => null,
				'prv_nombre' => $provincia_edited,
				'telefono' => null,
				'tipo_domicilio' => $tipo_domicilio,
			];
			$params = Misc::convertirStringsVaciosEnNull($params);
			$exec_2 = SQLConnection::backendStoreProcedure('procesar_domicilio', array_values($params), true);
		}
		if (isset($asignar_cargo) && (isset($cargo_cargo) || isset($cargo_ultimo) || isset($cargo_desde) || isset($cargo_hasta))) {
			$params = [
				'cargo' => $cargo_cargo,
				'cuit' => $cuit,
				'desde' => $cargo_desde,
				'hasta' => $cargo_hasta,
				'id_sc' => $id_sc,
				'ultimo' => $cargo_ultimo,
			];
			$exec_3 = SQLConnection::backendStoreProcedure('procesar_cargo', array_values($params), true);
		}
		return response()->json([
			"success_cuit" => isset($exec_1->id_sc),
			"asignar_domicilio" => isset($asignar_domicilio),
			"success_domicilio" => (isset($exec_2) && isset($exec_2->id_domicilio)) ? true : false,
			"asignar_cargo" => isset($asignar_cargo),
			"success_cargo" => (isset($exec_3) && isset($exec_3->id_socio)) ? true : false,
		]);
	}

	public function actualizarTotales() {
		$letra = Request::input('letra');
		$total_por_letra = new stdClass();
		if (isset($letra) && $letra != '') {
			$total_por_letra = SQLConnection::backendStoreProcedure('backend_obtener_total_no_asignados_SC', array($letra, 0), true);
		}

		$total = SQLConnection::backendStoreProcedure('backend_obtener_total_no_asignados_SC', array(null, 0), true);

		return response()->json([
			"total" => $total->cantidad ?? 'N/A',
			"total_por_letra" => $total_por_letra->cantidad ?? 'N/A',
		]);
	}

}
