<?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 App\Custom\Procesar;
//TODO: HtmlDomParser -> BUSCAR ALTERNATIVA -> PARA EL FUTURO
//use Sunra\PhpSimple\HtmlDomParser;

class ProcesosController extends Controller {

	/*Esto es todo el código viejo de Leonardo*/
	private static $root_dir;
	private static $archivos_src_dir;
	private static $archivos_des_dir;
	private static $directorio_log;
	private static $directorio_fuente;
	private static $directorio_destino;

	private static $fuentes;
	private static $fuente;
	private static $fuente_key;
	private static $archivos;
	private static $consultar_errores;

	private static $fields;
	private static $linea;
	private static $store_procedure;

	private static $separador_campos;
	private static $separadores_campos;

	private static $log;
	private static $log_url;
	private static $errorlog;

	// custom vars
	private static $juicios_csv_fields_arr;


	function __construct() {
		// max execution time infinito
		ini_set('max_execution_time', 0);

		self::$root_dir = ENV('RUTA_PROCESOS');
		self::$archivos_src_dir = realpath(ENV('RUTA_PROCESOS_ARCHIVOS'));
		self::$archivos_des_dir = realpath(ENV('RUTA_PROCESOS_PROCESADOS'));
		self::$directorio_log = realpath(ENV('RUTA_PROCESOS_LOGS'));
		self::$fuentes = Procesar::getFuentes();
	}


	/*****************
	 * INDEX
	 ******************/
	public function obtenerProcesos() {
		//valido si el usuario tiene el permiso correspondiente para acceder a la sección solicitada.
		$valido = Misc::restriccionPermiso('PROCESOS');
		if (!$valido) {
			return redirect('/menu');
		}
		//obtenemos los permisos para el menu, ésta variable debe asignarse al compact de la vista.
		$menu = Misc::obtenerPermisosNavigatorNoCuit();
		$fuentes = Procesar::getFuentes();
		return view('procesos/index')->with(compact('fuentes', 'menu'));
	}

	/**********************************
	 * PROCESOS FUENTES
	 * Flujo obtenerEjecutar():
	 *	> initProceso()							=> se identifica la fuente y los archivos
	 *	> init*Fuente*()						=> set custom vars
	 *		- pre operaciones *fuente*
	 *		> procesarArchivos() 			=> foreach(files)(lines)
	 *			> parseLine*Fuente*()		=> custom parsing line
	 *			- insert line into db via store procedure
	 *			- muevo files y end
	 *		- post operaciones *fuente*
	 ***********************************/
	public function obtenerEjecutar() {
		//valido si el usuario tiene el permiso correspondiente para acceder a la sección solicitada.
		$valido = Misc::restriccionPermiso('PROCESOS');
		if (!$valido) {
			return redirect('/menu');
		}
		//obtenemos los permisos para el menu, ésta variable debe asignarse al compact de la vista.
		$menu = Misc::obtenerPermisosNavigatorNoCuit();
		$jbt = Request::input('juicios_bt');
		self::$linea = Request::input('linea');

		//init proceso
		self::initProceso();


		//init fuente
		switch (self::$fuente_key) {

			case 'aduana':
				self::initAduana();
				break;

			case 'arba':
				self::initArba();
				break;

			case 'cheques':
				self::initCheques();
				break;

			case 'defunciones':
				self::initDefunciones();
				break;

			case 'inscripciones':
				self::initInscripciones();
				break;

			case 'juicios_bt':
				self::initJuiciosBT();
				break;

			case 'juicios_myf':
				self::initJuiciosMYF();
				break;

			case 'juicios_jurad':
				self::initJuiciosJurad();
				break;

			case 'sociedades_bt':
				self::initSociedadesBT();
				break;

			case 'sociedades_gj':
				self::initSociedadesGJ();
				break;

			default:
				# code...
				break;
		}

		$log_url = self::$log_url;
		return view('procesos/ejecutar')->with(compact('log_url', 'menu'));
	}



	/*************************
	 PRIVATE FUNCTION PROCESAR
	*************************/

	// inicializo proceso
	public function initProceso() {
		self::$fuente_key = Request::input("fuente");
		if (!self::$fuente_key) {
			$res = "Fuente no identificada.";
			return view('procesos/ejecutar')->with(compact('res'));
		}

		// set $fuente
		self::$fuente = self::$fuentes[self::$fuente_key];

		// set store_procedure and fields
		//self::$fields = self::$fuente['fields'];
		self::$store_procedure = self::$fuente['store_procedure'];

		// set separador_campos
		self::$separador_campos = self::$fuente['separador_campos'];

		// define separadores campos
		self::$separadores_campos = array('\t', ';', '|');

		// set directorios
		self::$directorio_fuente = self::$archivos_src_dir . DIRECTORY_SEPARATOR . self::$fuente['folder'];
		self::$directorio_destino = self::$archivos_des_dir . DIRECTORY_SEPARATOR . self::$fuente['folder'];

		// set logs filesnames
		$logbasename = preg_replace("/%timestamp%/", date("Ymd_His"), strtoupper(self::$fuente_key) . "_%timestamp%.html");
		self::$log_url = ENV('RUTA_PROCESOS_LOGS') . DIRECTORY_SEPARATOR . $logbasename;
		self::$log = self::$directorio_log . DIRECTORY_SEPARATOR . $logbasename;
		$errorlogbasename = preg_replace("/%timestamp%/", date("Ymd_His"), strtoupper(self::$fuente_key) . "_errores_%timestamp%.log");
		self::$errorlog = self::$directorio_log . DIRECTORY_SEPARATOR . $errorlogbasename;

		// buscar $archivos
		list($res, $data) = self::getArchivos(self::$directorio_fuente);

		if ($res === 0) {
			return array(0, $data); //no hay archivos o error
		} else {
			self::$archivos = $data;
		}

		self::$consultar_errores = 0;

		// start procesamiento
		self::Log("<strong>Importando " . strtoupper(self::$fuente_key) . "...</strong>");

		return 0;
	}


	/*************************
	 PRIVATE FUNCTION INIT FUENTE
	*************************/

	private function initAduana() {
		$mes = sprintf('%02d', Request::input("aduana_mes"));
		$anio = Request::input("aduana_anio");
		self::procesarArchivos(compact('mes', 'anio'));
	}

	private function initArba() {
		self::procesarArchivos();
		self::operacionesArba();
	}

	private function initCheques() {
		$res = self::operacionesCheques();
		if ($res[0] == 0)
			return 0;
		self::procesarArchivos();

	}

	private function initDefunciones() {
		self::procesarArchivos();
	}

	private function initInscripciones() {
		self::procesarArchivos();
	}

	private function initJuiciosBT() {
		self::procesarArchivos();
	}

	private function initJuiciosMYF() {
		self::procesarArchivos();
	}

	private function initJuiciosJurad() {
		self::procesarArchivos();
	}

	private function initSociedadesBT() {
		self::procesarArchivos();
	}

	private function initSociedadesGJ() {
		self::procesarArchivos();
	}




	// hace foreach de cada archivo y envia cada linea a funcion especifica fuente
	private function procesarArchivos($params = []) {
		$juicios_bt = Request::input('juicios_bt');

		if ($juicios_bt) {
			self::$store_procedure = str_replace('_insertar', '_' . $juicios_bt . '_insertar', self::$store_procedure);
		}
		foreach (self::$archivos as $filename) {

			if (file_exists($filename)) {

				$file = fopen($filename, "r");

				$lineas_ok = 0;
				$lineas_error = 0;
				$n_linea = 1;

				$nombre_file = ltrim(str_replace(self::$directorio_fuente, "", $filename), "/");

				while (($LINE = fgets($file)) !== FALSE) {

					// iconv() - utf_encode()
					if (!preg_match('!!u', $LINE)) {
						$try_utf8 = TRUE;
						if (mb_detect_encoding($LINE) === FALSE) {
							try {
								$try_utf8 = FALSE;
								$LINE = iconv("windows-1252", "UTF-8", $LINE);
							} catch (\Exception $e) {
								self::ErrorLog("Error en la conversion con iconv(). [" . $nombre_file . ":" . $n_linea . "]");
								$try_utf8 = TRUE;
							}

						} elseif ($try_utf8) {
							try {
								$LINE = mb_convert_encoding($LINE, 'UTF-8', 'ISO-8859-1');
							} catch (\Exception $e) {
								self::ErrorLog("Error en la conversion con utf8_encode(). [" . $nombre_file . ":" . $n_linea . "]");
								$n_linea++;
								continue;
							}
						}
					}

					/* parse line */
					$values_arr = []; // array de arrays: puede haber mas de una linea para insertar 


					switch (self::$fuente_key) {
						case 'aduana':
							$values_arr = self::parseLineAduana($LINE, $nombre_file, $params);
							break;

						case 'arba':
							$values_arr = self::parseLineArba($LINE, $nombre_file);
							break;

						case 'cheques':
							$values_arr = self::parseLineCheques($LINE, $nombre_file);
							break;

						case 'defunciones':
							$values_arr = self::parseLineDefunciones($LINE, $nombre_file, $n_linea);
							break;

						case 'inscripciones':
							$values_arr = self::parseLineInscripciones($LINE, $nombre_file);
							break;

						case 'juicios_bt':
							// tomo la primera linea para identificar los campos que se utilizaran
							if ($n_linea == 1) {
								$LINE = rtrim(trim($LINE), self::$separador_campos);
								self::$juicios_csv_fields_arr = array_map("trim", explode(self::$separador_campos, $LINE));
								$n_linea++;
								break;
							}
							$values_arr = self::parseLineJuiciosBT($LINE, $nombre_file, $n_linea);
							break;

						case 'juicios_myf':
							$values_arr = self::parseLineJuiciosMYF($LINE, $nombre_file, $n_linea);
							break;

						case 'juicios_jurad':
							// primera linea con nombres campos
							if ($n_linea == 1) {
								break;
							}
							$values_arr = self::parseLineJuiciosJurad($LINE, $nombre_file, $n_linea);
							break;

						case 'sociedades_bt':
							$values_arr = self::parseLineSociedadesBT($LINE, $nombre_file, $n_linea);
							//print_r($values_arr);die();
							break;

						case 'sociedades_gj':
							$values_arr = self::parseLineSociedadesGJ($LINE, $nombre_file, $n_linea);
							break;

						default:
							# code...
							break;
					}

					$n_linea++;
					if ($values_arr === 0) {
						$lineas_error++;
						self::$consultar_errores = 1;
						break;
					}
					$fuente = Request::input('fuente');
					/* insert via store procedure */
					$ok = 0;
					if (!self::$linea) {
						self::$linea == 0;
					}
					foreach ($values_arr as $values) {
						if ($n_linea >= self::$linea) {
							$res = Procesar::procesosInsertDinamicoSP(self::$store_procedure, $values, $LINE, $fuente);
							if ($res == 1) {
								self::ErrorLog("[ERROR SP " . self::$store_procedure . "][" . $nombre_file . ":" . $n_linea . "] VALUES: " . implode(",", $values));
							} else {
								$ok++;
							}
							if ($ok < count($values_arr)) {
								self::$consultar_errores = 1;
							}

							$lineas_ok++;
						}
					}

				} //end WHILE (lines)

				self::Log("Procesado " . $filename);
				self::Log("Lineas procesadas: <strong>" . $lineas_ok . "</strong>");

				if ($lineas_error > 0)
					self::Log("<span style='color:red;'>Lineas no procesadas: <strong>" . $lineas_error . "</strong></span>");

				fclose($file);

				//muevo file
				//$fileinfo = pathinfo($filename);
				//$destfile = self::$directorio_destino.DIRECTORY_SEPARATOR.$fileinfo["basename"];
				$destfile = str_replace(self::$directorio_fuente, self::$directorio_destino, $filename);
				$res = self::moverArchivo($filename, $destfile);
				if ($res == 1) {
					self::Log("Muevo $filename a " . self::$directorio_destino);
				} else {
					self::Log("No se pudo mover el file $filename a " . self::$directorio_destino . ": $res");
					self::ErrorLog("No se pudo mover el file $filename a " . self::$directorio_destino . ": $res");
				}

			} else {
				self::Log("No se pudo abrir el archivo $filename");
				self::ErrorLog("No se pudo abrir el archivo $filename");
			}

		} // end FOREACH (file)

		if (self::$consultar_errores) {
			self::Log("<span style='color:red;'><strong>ATENCION:</strong></span> Consultar log de errores " . self::$errorlog);
		} else {
			self::Log("<strong>Procesamiento " . strtoupper(self::$fuente_key) . " finalizado.</strong>");
		}

		//exit();

	}

	/*************************
	 PRIVATE FUNCTIONS FUENTES
	*************************/

	/*** ADUANA ***/
	private function parseLineAduana($LINE, $nombre_file, $params) {

		$LINE = trim($LINE);

		$values_arr = [];

		$mes = $params['mes'];
		$anio = $params['anio'];

		//START parsing
		$lineArr = [];

		$lineArr[0] = trim(mb_substr($LINE, 0, 11, "UTF-8"));   //#0	Cuit
		$lineArr[1] = trim(mb_substr($LINE, 11, 18, "UTF-8"));   //#1	Consumo
		$lineArr[2] = trim(mb_substr($LINE, 29, 18, "UTF-8"));   //#2	Temporal
		$lineArr[3] = trim(mb_substr($LINE, 47, 18, "UTF-8"));   //#3	Deposito
		$lineArr[4] = trim(mb_substr($LINE, 65, 18, "UTF-8"));   //#4	ZF (zona franca)

		// trim values
		foreach ($lineArr as $k => $v) {
			$lineArr[$k] = trim($v);
		}

		//#[1,2,3,4] -> ultimos dos digitos decimales
		$fields = [1, 2, 3, 4];
		foreach ($fields as $k) {
			$lineArr[$k] = ($lineArr[$k] == "0,00") ? "" : preg_replace("/^(\d+)\,(\d\d)/u", "$1.$2", $lineArr[$k]);
		}

		//END parsing

		//Consumo - id=12
		if ($lineArr[1] != "")
			$values_arr[] = array($lineArr[0], $lineArr[1], '12', $mes, $anio, $nombre_file);
		//Temporal - id=83
		if ($lineArr[2] != "")
			$values_arr[] = array($lineArr[0], $lineArr[2], '83', $mes, $anio, $nombre_file);
		//Deposito - id=89
		if ($lineArr[3] != "")
			$values_arr[] = array($lineArr[0], $lineArr[3], '89', $mes, $anio, $nombre_file);
		//ZF - id=21
		if ($lineArr[4] != "")
			$values_arr[] = array($lineArr[0], $lineArr[4], '21', $mes, $anio, $nombre_file);

		return $values_arr;
	}


	/*** ARBA ***/
	private function parseLineArba($LINE, $nombre_file) {

		$LINE = trim($LINE);

		$LINE = str_replace("‹", "Ñ", $LINE);
		$LINE = str_replace("¬", "Ñ", $LINE);
		$LINE = str_replace("#", "Ñ", $LINE);

		$values_arr = [];

		//START parsing
		$lineArr = [];

		$lineArr[0] = trim(mb_substr($LINE, 0, 1, "UTF-8"));     //#0	tipo_movimiento Tipo Movimiento
		$lineArr[1] = trim(mb_substr($LINE, 1, 1, "UTF-8"));     //#1	motivo_baja Motivo Baja
		$lineArr[2] = trim(mb_substr($LINE, 2, 10, "UTF-8"));    //#2	nro_identificacion_arba Nro Identificación Arba
		$lineArr[3] = trim(mb_substr($LINE, 12, 80, "UTF-8"));   //#3	razon_social Razón Social
		$lineArr[4] = trim(mb_substr($LINE, 92, 11, "UTF-8"));   //#4	numero_cuit Número Cuit
		$lineArr[5] = trim(mb_substr($LINE, 103, 1, "UTF-8"));   //#5	tipo_documento Tipo Documento
		$lineArr[6] = trim(mb_substr($LINE, 104, 8, "UTF-8"));   //#6	numero_documento Número Documento
		$lineArr[7] = trim(mb_substr($LINE, 112, 2, "UTF-8"));   //#7	impuesto Impuesto
		$lineArr[8] = trim(mb_substr($LINE, 114, 16, "UTF-8"));  //#8	objeto Objeto
		$lineArr[9] = trim(mb_substr($LINE, 130, 6, "UTF-8"));   //#9	numero_interno_de_juicio Número Interno de Juicio
		$lineArr[10] = trim(mb_substr($LINE, 136, 8, "UTF-8"));   //#10	fecha_de_inicio_de_juicio Fecha de Inicio de Juicio
		$lineArr[11] = trim(mb_substr($LINE, 144, 15, "UTF-8"));  //#11	importe_deuda_del_juicio Importe Deuda del Juicio-Objeto
		$lineArr[12] = trim(mb_substr($LINE, 159, 2, "UTF-8"));   //#12	departamento_judicial Departamento Judicial
		$lineArr[13] = trim(mb_substr($LINE, 161, 2, "UTF-8"));   //#13	numero_de_juzgado Número de Juzgado
		$lineArr[14] = trim(mb_substr($LINE, 163, 2, "UTF-8"));   //#14	secretaria Secretaria
		$lineArr[15] = trim(mb_substr($LINE, 165, 35, "UTF-8"));  //#15	domicilio_calle Domicilio-Calle
		$lineArr[16] = trim(mb_substr($LINE, 200, 6, "UTF-8"));   //#16	domicilio_numero Domicilio-Número
		$lineArr[17] = trim(mb_substr($LINE, 206, 3, "UTF-8"));   //#17	domicilio_sin_numero Domicilio-Sin Número
		$lineArr[18] = trim(mb_substr($LINE, 209, 3, "UTF-8"));   //#18	domicilio_piso Domicilio-Piso
		$lineArr[19] = trim(mb_substr($LINE, 212, 4, "UTF-8"));   //#19	domicilio_departamento Domicilio-Departamento
		$lineArr[20] = trim(mb_substr($LINE, 216, 35, "UTF-8"));  //#20	domicilio_localidad Domicilio-Localidad
		$lineArr[21] = trim(mb_substr($LINE, 251, 8, "UTF-8"));   //#21	domicilio_codigo_postal Domicilio-Código-Postal
		$lineArr[22] = trim(mb_substr($LINE, 259, 1, "UTF-8"));   //#22	estado_de_medida_cautelar Estado de Medida Cautelar
		$lineArr[23] = trim(mb_substr($LINE, 260, 1, "UTF-8"));   //#23	estado_de_plan_de_pagos Estado de Plan de Pagos
		$lineArr[24] = trim(mb_substr($LINE, 261, 8, "UTF-8"));   //#24	fecha_de_plan_de_pagos Fecha de Plan de Pagos
		$lineArr[25] = trim(mb_substr($LINE, 269, 1, "UTF-8"));   //#25	cancelacion_del_juicio Cancelación del Juicio
		$lineArr[26] = trim(mb_substr($LINE, 270, 8, "UTF-8"));   //#26	fecha_de_cancelacion Fecha de Cancelación
		$lineArr[27] = trim(mb_substr($LINE, 278, 10, "UTF-8"));  //#27	fecha_de_proceso_arba Fecha de Proceso

		//#11 -> ultimos dos digitos decimales
		$lineArr[11] = preg_replace("/0*(\d+)(\d\d)/u", "$1.$2", $lineArr[11]);

		//#[10-24-26] -> date or NULL
		$regex_date = "/(\d{4})(\d{2})(\d{2})/u"; // yyyymmdd
		$fields = [10, 24, 26];
		foreach ($fields as $k) { //foreach array index
			$res = preg_match($regex_date, $lineArr[$k]);
			if ($res === 0 or $res === FALSE or $lineArr[$k] == "00000000")
				$lineArr[$k] = "";
			else
				$lineArr[$k] = preg_replace($regex_date, "$1-$2-$3", $lineArr[$k]); //fecha
		}

		//#[27] -> smalldatetime or NULL
		$k = 27;
		$regex_date = "/(\d{4})(\d{2})(\d{2})(\d{2})/u"; // yyyymmdd
		$res = preg_match($regex_date, $lineArr[$k]);
		if ($res === 0 or $res === FALSE or $lineArr[$k] == "0000000000")
			$lineArr[$k] = ""; //NULL
		else
			$lineArr[$k] = preg_replace($regex_date, "$1-$2-$3 $4:00:00", $lineArr[$k]); //fecha

		//END parsing

		/* Agrego campo filename con path relativo */
		$lineArr[] = $nombre_file;

		$values_arr = array($lineArr);

		return $values_arr;
	}


	/*** CHEQUES ***/
	private function parseLineCheques($LINE, $nombre_file) {

		$LINE = trim($LINE);

		$values_arr = [];

		//START parsing
		$lineArr = [];

		//START parsing
		$lineArr[0] = trim(mb_substr($LINE, 0, 11, "UTF-8"));  //#0 cuit_firmante
		$lineArr[1] = trim(mb_substr($LINE, 11, 10, "UTF-8")); //#1 nro_cheque
		$lineArr[2] = trim(mb_substr($LINE, 21, 8, "UTF-8"));  //#2 fecha_rechazo
		$lineArr[3] = trim(mb_substr($LINE, 29, 15, "UTF-8")); //#3 importe
		$lineArr[4] = trim(mb_substr($LINE, 44, 1, "UTF-8"));  //#4 id_causa
		$lineArr[5] = trim(mb_substr($LINE, 45, 8, "UTF-8"));  //#5 fecha_levantamiento
		//$lineArr[6] = trim(mb_substr($LINE,53,1,"UTF-8"));  //#6 art16
		//$lineArr[7] = trim(mb_substr($LINE,54,1,"UTF-8"));  //#7 art38
		$lineArr[6] = trim(mb_substr($LINE, 55, 11, "UTF-8")); //#8 Cuit_relacionado
		$lineArr[7] = trim(mb_substr($LINE, 66, 15, "UTF-8")); //#9 fecha_pago

		//comilla a doble comilla
		foreach ($lineArr as $k => $v) {
			$v = preg_replace("/'/u", "''", trim($v));
			//$v = iconv('windows-1252', 'utf-8', $v);
			$lineArr[$k] = $v;
		}

		//#3 -> importe: ultimos dos digitos decimales
		$lineArr[3] = preg_replace("/(\d+)(\d\d)/u", "$1.$2", $lineArr[3]);

		//#2, #5, #9 -> check dates
		$regex_date_1 = "/(\d{4})(\d{2})(\d{2})/u"; // yyyymmdd
		$regex_date_2 = "/(\d{2})\/(\d{2})\/(\d{4})/u"; // dd/mm/yyyy

		//#2 date or NULL
		$res = preg_match($regex_date_1, $lineArr[2]);
		if ($res === 0 or $res === FALSE)
			$lineArr[2] = "";
		else
			$lineArr[2] = preg_replace($regex_date_1, "$1-$2-$3", $lineArr[2]); //fecha

		//#5 date or NULL
		$res = preg_match($regex_date_1, $lineArr[5]);
		if ($res === 0 or $res === FALSE)
			$lineArr[5] = "";
		else
			$lineArr[5] = preg_replace($regex_date_1, "$1-$2-$3", $lineArr[5]); //fecha

		//#9 date or NULL (or string IMPAGO SUSPENDIDO)
		$res = preg_match($regex_date_2, $lineArr[7]);
		if ($res === 0 or $res === FALSE)
			$lineArr[7] = ""; //"'".$lineArr[9]."'";
		//$lineArr[7] = "'".$lineArr[9]."'";
		else
			$lineArr[7] = preg_replace($regex_date_2, "$3-$2-$1", $lineArr[7]); //fecha

		//END parsing

		/* Agrego campo filename con path relativo */
		$lineArr[] = $nombre_file;

		$values_arr = array($lineArr);

		return $values_arr;
	}


	/*** DEFUNCIONES ***/
	private function parseLineDefunciones($LINE, $nombre_file, $n_linea) {
		//print_r($LINE);die();
		$LINE = trim($LINE);

		$values_arr = [];

		//START parsing
		$lineArr = [];

		//START parsing
		$lineArr = explode(self::$separador_campos, $LINE);

		$n_campos = count($lineArr);

		if ($n_campos != 5) {
			//Numero de campos equivocado
			self::ErrorLog("Error en los numeros de campos (" . $n_campos . "), linea:" . $n_linea . ", file: " . $nombre_file);
			return 0;
		}

		// parse cada campo
		foreach ($lineArr as $k => $v) {

			//$v = iconv('windows-1252', 'utf-8', $v);

			//escape quote
			$v = trim($v);
			$v = str_replace("'", "''", $v);

			// campos fecha #0, #3 
			if (in_array($k, [5, 29, 30, 31, 34, 36, 38])) {
				$reg = "/(\d\d?)\/(\d\d?)\/(\d{4})/u";
				$res = preg_match($reg, $v);
				if ($res === 0 or $res === FALSE or $v == "00000000" or $v == "//")
					$v = "";
				else
					$v = preg_replace($reg, "$3-$2-$1", $v);
			}

			//actualizo valor
			$lineArr[$k] = $v;

		} //end foreach lineArr

		//END parsing

		/* Agrego campo filename con path relativo */
		$lineArr[] = $nombre_file;

		$values_arr = array($lineArr);

		return $values_arr;
	}


	/*** INSCRIPCIONES ***/
	private function parseLineInscripciones($LINE, $nombre_file) {

		$LINE = trim($LINE);

		$values_arr = [];

		//START parsing
		$lineArr = [];

		//START parsing
		$lineArr[0] = trim(mb_substr($LINE, 0, 11, "UTF-8"));  //cuit
		$lineArr[1] = trim(mb_substr($LINE, 11, 30, "UTF-8")); //denominacion
		$lineArr[2] = trim(mb_substr($LINE, 41, 2, "UTF-8"));  //imp_ganancias
		$lineArr[3] = trim(mb_substr($LINE, 43, 2, "UTF-8"));  //imp_iva
		$lineArr[4] = trim(mb_substr($LINE, 45, 2, "UTF-8"));  //monotributo
		$lineArr[5] = trim(mb_substr($LINE, 47, 1, "UTF-8"));  //integrante_soc
		$lineArr[6] = trim(mb_substr($LINE, 48, 1, "UTF-8"));  //empleador
		$lineArr[7] = trim(mb_substr($LINE, 49, 2, "UTF-8"));  //actividad_monotributo

		//trim y comilla a doble comilla
		foreach ($lineArr as $k => $v) {
			$v = preg_replace("/'/u", "''", trim($v));
			//$v = iconv('windows-1252', 'utf-8', $v);
			$lineArr[$k] = $v;
		}

		//END parsing

		/* Agrego campo country_code='AR' */
		$lineArr[] = 'AR';

		/* Agrego campo filename con path relativo */
		$lineArr[] = $nombre_file;

		$values_arr = array($lineArr);

		return $values_arr;
	}


	/*** JUICIOS BT ***/
	private function parseLineJuiciosBT($LINE, $nombre_file, $n_linea) {
		$LINE = trim($LINE);
		$values_arr = [];
		//START parsing
		$lineArr = [];

		$lineArr[0] = trim(mb_substr($LINE, 0, 6, "UTF-8")); // id_boletin
		// print_r($lineArr[0]);
		// die();
		$lineArr[1] = trim(mb_substr($LINE, 0, 11, "UTF-8")); // @p_fecha_publicacion
		$lineArr[3] = trim(mb_substr($LINE, 0, 11, "UTF-8")); // @p_tipo_de_novedad
		$lineArr[4] = trim(mb_substr($LINE, 0, 11, "UTF-8")); // @p_localidad_del_juzgado
		$lineArr[5] = trim(mb_substr($LINE, 0, 11, "UTF-8")); // @p_radicacion
		$lineArr[6] = trim(mb_substr($LINE, 0, 11, "UTF-8")); // @p_juzgado
		$lineArr[7] = trim(mb_substr($LINE, 0, 11, "UTF-8")); // @p_secretaria
		$lineArr[8] = trim(mb_substr($LINE, 0, 11, "UTF-8")); // @p_expediente
		$lineArr[9] = trim(mb_substr($LINE, 0, 11, "UTF-8")); // @p_autos_caratula
		$lineArr[10] = trim(mb_substr($LINE, 0, 11, "UTF-8"));// @p_inf_articulo_35
		$lineArr[11] = trim(mb_substr($LINE, 0, 11, "UTF-8"));// @p_verificaciones
		$lineArr[12] = trim(mb_substr($LINE, 0, 11, "UTF-8"));// @p_inf_articulo_39
		$lineArr[13] = trim(mb_substr($LINE, 0, 11, "UTF-8"));// @p_aud_informativa
		$lineArr[14] = trim(mb_substr($LINE, 0, 11, "UTF-8"));// tipo entidad  ??????
		$lineArr[15] = trim(mb_substr($LINE, 0, 11, "UTF-8"));// nombre  ??????
		$lineArr[16] = trim(mb_substr($LINE, 0, 11, "UTF-8"));// documento
		$lineArr[17] = trim(mb_substr($LINE, 0, 11, "UTF-8"));// provincia
		$lineArr[18] = trim(mb_substr($LINE, 0, 11, "UTF-8"));// @p_proceso
		$lineArr[19] = trim(mb_substr($LINE, 0, 11, "UTF-8"));// @p_texto

		/*

			  1 - idboletin  = 8000003
			  2 - fecha publicacion = 20171101
			  3 - tipo de publicacion = CONCURSO
			  4 - localidad juzgado = CIUDAD AUTONOMA DE BUENOS AIRES
			  5 - tipo de juzgado = NACIONAL PRIMERA INSTANCIA EN LO COMERCIAL
			  6 - nro juzgado = 27
			  7 - nro secretaria = 54
			  8 - nro expediente = 9738/2017
			  9 - autos = VERONESI, JAVIER DOMINGO S/ CONCURSO PREVENTIVO
			  10 - fecha decreto = 20171012
			  11 - fecha verificacion = 20180403
			  12 - fecha individual = 20180215
			  13 - fecha inf gral = 20180516
			  14 - tipo entidad = CONCURSADO
			  15 - nombre = NÉLIDA AGUIAR
			  16 - documento = 2745102
			  17 - provincia = BUENOS AIRES
			  18 - novedad = APERTURA DE CONCURSO
			  19 - nro archivo = A8000003.TXT
			  
			  */
		//$lineArr[0] = trim(mb_substr($LINE,0,11,"UTF-8")); // id_boletin
		//START parsing
		$lineArr = explode(self::$separador_campos, $LINE);


		$n_campos = count($lineArr);
		$csv_fields_count = count(self::$juicios_csv_fields_arr);

		if ($n_campos < $csv_fields_count) {
			//Numero de campos equivocado
			self::ErrorLog("[" . $nombre_file . ":" . $n_linea . "] Error numero de campos: " . $n_campos . " (esperados: " . $csv_fields_count . ")");
			return 0;
		}
		// si los campos son mas, unir los excedentes con el ultimo campo UTIL (=TEXTO)
		elseif ($n_campos > $csv_fields_count) {
			$campos_excedentes = array_slice($lineArr, $csv_fields_count);
			$lineArr[$csv_fields_count - 1] = $lineArr[$csv_fields_count - 1] . "; " . implode("; ", $campos_excedentes);
			$lineArr = array_slice($lineArr, 0, $csv_fields_count);
		}

		// parse cada campo
		foreach ($lineArr as $k => $v) {
			//escape quote
			$v = trim($v);
			$v = str_replace("'", "''", $v);

			if ($v == "") {
				$v = NULL;
			}
			// campos fecha #1 
			/*if ( $k==1 ) {
						 $reg1 = "/(\d\d)\/(\d\d)\/(\d\d\d\d)/u";
						 $reg2 = "/(\d\d\d\d)-(\d\d)-(\d\d)/u";
						 $res1 = preg_match($reg1, $v);
						 $res2 = preg_match($reg2, $v);
						 if ($res1!==0 and $res1!==FALSE) 
							 $v = preg_replace($reg1, "$3-$2-$1", $v);
						 elseif ($res2===0 or $res2===FALSE)
							 $v = "";
					 }*/

			//actualizo valor
			$lineArr[$k] = $v;
		}
		//END parsing

		/* normalizo los valores. Ver normalizarValoresJuiciosBT() */
		//$lineArr = self::normalizarValoresJuiciosBT($lineArr);

		/* Agrego campo filename con path relativo */
		$lineArr[] = $nombre_file;

		$values_arr = array($lineArr);
		return $values_arr;
	}


	/*** JUICIOS MYF ***/
	private function parseLineJuiciosMYF($LINE, $nombre_file, $n_linea) {
		$LINE = trim($LINE);
		$values_arr = [];

		//START parsing
		$lineArr = [];

		//START parsing
		$lineArr = explode(self::$separador_campos, $LINE);
		$n_campos = count($lineArr);
		if ($n_campos == 26) {
			/* Agrego campos vacios en las ss. posiciones 
						 (empiezo desde el fondo para no alterar las claves sucesivas) */
			//#12 agrego 6 campos varchar vacios 
			array_splice($lineArr, 12, 0, array_fill(0, 6, ""));
			//#10 agrego 6 campos varchar vacios
			array_splice($lineArr, 10, 0, array_fill(0, 6, ""));
			//#7 agrego 2 campos varchar vacios
			array_splice($lineArr, 7, 0, array_fill(0, 2, ""));
		} elseif ($n_campos != 41) {
			//Numero de campos equivocado
			self::ErrorLog("[" . $nombre_file . ":" . $n_linea . "] Error numero de campos: " . $n_campos . " (esperados: 39)");
			return 0;
		}

		// parse cada campo
		foreach ($lineArr as $k => $v) {
			//$v = iconv('windows-1252', 'utf-8', $v);

			//escape quote
			$v = trim($v);
			$v = str_replace("'", "''", $v);

			// campos fecha #5, #29, #30, #31, #34, #36, #38 
			// 22/8 campos fecha: #5,#29,#30,#31,#32,#35,#37,#39

			if (in_array($k, [5, 29, 30, 31, 32, 35, 37, 39])) {
				$reg = "/^[^\d]*(\d\d?)\/(\d\d?)\/(\d\d\d\d)[^\d]*$/u";
				$res = preg_match($reg, $v);
				if ($res === 0 or $res === FALSE or $v == "00000000" or $v == "//")
					$v = NULL;
				else {
					$v = preg_replace($reg, "$3-$1-$2", $v);
					$v_arr = explode("-", $v);
					$ano = $v_arr[0];
					$mes = $v_arr[1];
					$dia = $v_arr[2];
					if (!checkdate($mes, $dia, $ano)) {
						if (checkdate($dia, $mes, $ano)) {
							$v = "$ano-$dia-$mes";
						} else {
							$v = "";
						}
					}
				}
			}
			// campo tipo_novedad
			elseif ($k == 6) {
				$v = self::uppercaseTrimQuotes($v);
			}
			// campos varchar
			else {
				$reg = '/^"(.*)"$/u';
				$res = preg_match($reg, $v);
				if ($res !== 0 and $res !== FALSE)
					$v = preg_replace('/^"?(.*[^"])"?$/', "$1", $v);
			}

			//actualizo valor
			$lineArr[$k] = $v;

		} //end foreach lineArr
		/* Organismo solicitante */
		// Buscar palabras claves
		/*$keywords = self::$fuente['organismos_solicitantes'];
			  $organismo_solicitante = [];
			  foreach ($keywords as $keyword) {
				  if (stripos($LINE,$keyword)!==FALSE) $organismo_solicitante[] = $keyword;
			  }
			  $organismo_solicitante = implode(", ", $organismo_solicitante);
			  $lineArr[] = $organismo_solicitante;
	  */
		//END parsing

		/* Agrego campo filename con path relativo */
		$lineArr[] = $nombre_file;

		$values_arr = array($lineArr);

		return $values_arr;
	}


	/*** JUICIOS JURAD ***/
	private function parseLineJuiciosJurad($LINE, $nombre_file, $n_linea) {

		//$LINE = trim($LINE); //pueden existir campos vacios (tabulados finales)

		$values_arr = [];

		//START parsing
		$lineArr = [];

		//START parsing
		$lineArr = explode(self::$separador_campos, $LINE);

		$n_campos = count($lineArr);

		if ($n_campos != 20) {
			//Numero de campos equivocado
			self::ErrorLog("[" . $nombre_file . ":" . $n_linea . "] Error numero de campos: " . $n_campos . " (esperados: 20)");
			return 0;
		}

		// parse cada campo
		foreach ($lineArr as $k => $v) {

			//$v = iconv('windows-1252', 'utf-8', $v);

			//escape quote
			$v = trim($v);
			$v = str_replace("'", "''", $v);

			// campos fecha #5, #29, #30, #31, #34, #36, #38 
			if ($k == 6) {
				$reg = "/^[^\d]*(\d\d?)\/(\d\d?)\/(\d\d\d\d)[^\d]*$/u";
				$res = preg_match($reg, $v);
				if ($res === 0 or $res === FALSE or $v == "00000000" or $v == "//")
					$v = "";
				else {
					$v = preg_replace($reg, "$3-$2-$1", $v);
					$v_arr = explode("-", $v);
					$ano = $v_arr[0];
					$mes = $v_arr[1];
					$dia = $v_arr[2];
					if (!checkdate($mes, $dia, $ano)) {
						if (checkdate($dia, $mes, $ano)) {
							$v = "$ano-$dia-$mes";
						} else {
							$v = "";
						}
					}
				}
			}

			//actualizo valor
			$lineArr[$k] = $v;

		} //end foreach lineArr

		//END parsing

		/* Agrego campo filename con path relativo */
		$lineArr[] = $nombre_file;

		$values_arr = array($lineArr);

		return $values_arr;
	}


	/*** SOCIEDADES BT ***/
	private function parseLineSociedadesBT($LINE, $nombre_file, $n_linea) {
		$LINE = trim($LINE);
		$LINE = preg_replace("/\\" . self::$separador_campos . "$/u", "", $LINE); //elimino pipes al final de la linea

		$values_arr = [];

		//START parsing
		$lineArr = [];

		//START parsing
		$lineArr = explode(self::$separador_campos, $LINE);

		$n_campos = count($lineArr);

		if ($n_campos != 19) {
			//Numero de campos equivocado
			self::ErrorLog("[" . $nombre_file . ":" . $n_linea . "] Error numero de campos: " . $n_campos . " (esperados: 19)");
			return 0;
		}

		// parse cada campo
		foreach ($lineArr as $k => $v) {

			//escape quote
			$v = trim($v);
			$v = str_replace("'", "''", $v);

			// campo id_boletin #0
			if ($k == 0) {
				if ($v == "") {
					$v = "";
				} else {
					$v = preg_replace("/^[^\d]*(\d+)[^\d]*$/u", "$1", $v);
				}
			}
			// campo fecha_publicacion #6 y #10
			else if ($k == 6 or $k == 10) {
				$reg = "/(\d{4})(\d{2})(\d{2})/u";
				$res = preg_match($reg, $v);
				if ($res === 0 or $res === FALSE or $v == "00000000")
					$v = "";
				else {
					$v = preg_replace($reg, "$1-$2-$3", $v);
				}
			}

			//actualizo valor
			$lineArr[$k] = $v;

		} //end foreach lineArr

		//END parsing

		// Agrego campo contenido_archivo
		$dir_src_edictos = self::$archivos_src_dir . DIRECTORY_SEPARATOR . self::$fuente['folder_edictos'];
		$dir_des_edictos = self::$archivos_des_dir . DIRECTORY_SEPARATOR . self::$fuente['folder_edictos'];

		$archivo_filename = str_replace("'", "", $lineArr[18]);

		// busco archivo
		$archivo = self::buscarArchivo($dir_src_edictos, $archivo_filename);

		if ($archivo === 0) {
			$lineArr[] = "";
		} elseif ($archivo === FALSE) {
			self::Log("ERROR en la busqueda del archivo $archivo_filename");
			self::$consultar_errores = 1;
		} else {
			$archivo_content = file_get_contents($archivo);
			$archivo_content = preg_replace("/^([^A-Z\d]*)/", "", $archivo_content);
			$archivo_content = preg_replace("/'/", "''", $archivo_content);
			$lineArr[] = $archivo_content;

			/** NO MOVER - EL ARCHIVO PODRIA SER UTIL PARA OTRO REGISTRO**/
			// muevo archivo
			//$archivo_des = str_replace($dir_src_edictos, $dir_des_edictos, $archivo);
			//
			//$res = self::moverArchivo($archivo, $archivo_des);
			//if ($res==1) {
			//	self::Log("Muevo $archivo_src a $archivo_des.");
			//} else {
			//	self::Log("No se pudo mover el file $archivo_src a $archivo_des: $res");
			//	self::$consultar_errores = 1;
			//}
		}

		/* Agrego campo filename con path relativo */
		$lineArr[] = $nombre_file;

		$values_arr = array($lineArr);

		return $values_arr;
	}


	/*** SOCIEDADES GJ ***/
	private function parseLineSociedadesGJ($LINE, $nombre_file, $n_linea) {

		$values_arr = [];

		//START parsing
		$lineArr = [];

		//START parsing
		$lineArr = explode(self::$separador_campos, $LINE);

		$n_campos = count($lineArr);

		if (!in_array($n_campos, [22, 23, 25])) {
			//Numero de campos equivocado
			self::ErrorLog("[" . $nombre_file . ":" . $n_linea . "] Error numero de campos: " . $n_campos . " (esperados: 22|23|25)");
			return 0;
		}

		// parse cada campo
		foreach ($lineArr as $k => $v) {

			// campo id_boletin #0
			if ($k == 0) {
				if ($v == "") {
					$v = "";
				}
			}
			// campos fecha #2, #9, #13(22/25 campos) o #14(23) 
			elseif ($k == 2 or $k == 9 or ($n_campos != 23 && $k == 13) or ($n_campos == 23 && $k == 14)) {
				$reg = "/(\d{2})\/(\d{2})\/(\d{4})/u";
				$res = preg_match($reg, $v);
				if ($res === 0 or $res === FALSE or $v == "00000000" or $v == "//")
					$v = "";
				else
					$v = preg_replace($reg, "$3-$2-$1", $v);
			}

			//actualizo valor
			$lineArr[$k] = $v;

		} //end foreach lineArr

		// Arreglo el numero de campos:
		// >> Pueden haber files con nro. campos:
		//   - 22/23 (con o sin el campo #10:contenido_archivo)
		//   - 25 (+#24:duracion, +#25:objeto)
		// >> Los campos #6 y #19 pueden venir en formatos diferentes, van en campos diferentes:
		//    #6:localidad_sociedad_cod, #7:localidad_sociedad, #21:localidad_integrante_cod, #22:localidad_integrante
		//    - 22: +#6:"", #7:value, +#21:"", #22:value
		//    - 23/25: #6:value, +#7:"", #21:value, +#22:""

		/** 22/23 campos **/
		if (in_array($n_campos, [22, 23])) {
			if ($n_campos == 22) {
				array_splice($lineArr, 10, 0, "");
			}
			$lineArr[] = ""; // +Campo 'duracion'
			$lineArr[] = ""; // +Campo 'objeto'
		}
		/** 25 campos **/ else {
			// contenido_archivo va de posicion #22 a #10.
			// Posiciones #23 y #24 bajan a #22 y #23 

			$contenido_archivo = $lineArr[22];
			$_23 = $lineArr[23];
			$_24 = $lineArr[24];
			$lineArr[22] = $_23;
			$lineArr[23] = $_24;
			unset($lineArr[24]);

			array_splice($lineArr, 10, 0, $contenido_archivo);
		}

		// campos 6/7 y 20/21
		if ($n_campos == 23) {
			array_splice($lineArr, 6, 0, "");
			array_splice($lineArr, 21, 0, "");
		} else {
			array_splice($lineArr, 7, 0, "");
			array_splice($lineArr, 22, 0, "");
		}

		//END parsing

		/* Agrego campo filename con path relativo */
		$lineArr[] = $nombre_file;

		$values_arr = array($lineArr);

		return $values_arr;
	}


	/***************************
	 *	Operaciones especificas de pre/post procesamiento
	 ****************************/

	private function operacionesArba() {
		/*self::Log("Ejecuto store procedure [ARBA_relacionar_id_padron]");
			  $res = Procesar::relacionarIdPadronArba();
			  self::Log("Resultado store procedure: [".$res."]");*/
	}
	// update bajas
	private function operacionesCheques() {
		$procesar_altas = false;
		$procesar_bajas = false;
		if (!empty($_FILES["bajas"]['name'])) {
			$procesar_bajas = true;
		}
		if (!empty($_FILES['archivo']['name'])) {
			$procesar_altas = true;
		}
		/*if (empty($_FILES["cheques"]['name'])) {
				  return [0, "Error (archivo de bajas no seleccionado)."];
			  }*/

		if ($procesar_bajas) {
			self::Log("<strong>Procesando bajas.</strong>");
			// get archivo bajas
			$dir_src_bajas = self::$archivos_src_dir . DIRECTORY_SEPARATOR . self::$fuente['folder_bajas'];
			$dir_des_bajas = self::$archivos_des_dir . DIRECTORY_SEPARATOR . self::$fuente['folder_bajas'];


			$archivobajas = $dir_src_bajas . DIRECTORY_SEPARATOR . basename($_FILES["bajas"]["name"]);
			$archivobajas_dest = $dir_des_bajas . DIRECTORY_SEPARATOR . basename($_FILES["bajas"]["name"]);
			$res = move_uploaded_file($_FILES["bajas"]["tmp_name"], $archivobajas);

			if (!$res) {
				return [0, "No se pudo subir el archivo " . $_FILES["bajas"]["name"] . ". $res"];
			}

			// procesar archivo
			$file = fopen($archivobajas, "r");
			$nros_cheques = [];
			$i = 0;

			if ($file) {
				while (($line = fgets($file)) !== FALSE) {
					if (count($nros_cheques) >= 1000) { // WHERE ... IN (!!!MAX 1000!!!)
						// mando de a 1000 porque de a 1 tarda mucho mas
						Procesar::updateChequesBajas(implode(",", $nros_cheques));
						$nros_cheques = [];
					}
					$nros_cheques[] = trim($line);
					$i++;
				}
				// ultimos
				if (count($nros_cheques) >= 0) {
					Procesar::updateChequesBajas(implode(",", $nros_cheques));
				}

				self::Log("$i bajas actualizadas.");

				fclose($file);

				//muevo file
				$res = self::moverArchivo($archivobajas, $archivobajas_dest);
				if ($res == 1) {
					self::Log("Muevo $archivobajas a $archivobajas_dest.");
				} else {
					self::Log("No se pudo mover el file $archivobajas a $archivobajas_dest: $res");
				}

			} else {
				self::Log("No se pudo abrir el archivo de bajas " . $archivobajas);
			}
			if (!$procesar_altas) {
				return [0, "Finalizó la carga de las bajas."];
			}
		}
		if ($procesar_altas) {
			self::Log("<strong>Procesando Altas.</strong>");
			// get archivo bajas
			$dir_src_altas = self::$archivos_src_dir . DIRECTORY_SEPARATOR . self::$fuente['folder'];
			$dir_des_altas = self::$archivos_des_dir . DIRECTORY_SEPARATOR . self::$fuente['folder'];


			$archivoaltas = $dir_src_altas . DIRECTORY_SEPARATOR . basename($_FILES["archivo"]["name"]);
			$archivoaltas_dest = $dir_des_altas . DIRECTORY_SEPARATOR . basename($_FILES["archivo"]["name"]);

			/*	$res = move_uploaded_file($_FILES["archivo"]["tmp_name"], $archivoaltas);
					  if (!$res) {
						  return [0, "No se pudo subir el archivo ".$_FILES["archivo"]["name"].". $res"];
					  }
		  */

		}
		return [1, ""];
	}

	/****************************
		   Funciones genericas fuentes
	   *****************************/

	/* function normalizarJuiciosBT()
		   Los archivos de Juicios BT pueden venir con campos variables en numero y ordenamiento.
		   Puedo conocer el nombre y posicion de cada campo porque estan indicados en la primera linea
		   de cada archivo (self::$juicios_csv_fields_arr, se actualiza en procesarArchivos():switch:juicios_bt).
		   Esta funcion normaliza el array que contiene los valores que deben ser insertados ($csv_values_arr) 
		   ordenando correctamente los campos y agregando eventuales campos faltantes, para que puedan ser 
		   pocesados por una store procedure univoca.
		   Devuelve el array normalizado con los valores para insertar ($csv_values_arr_norm).
		   El array self::$fuente['normalizar'] contiene la definicion normalizada de los campos (o sea con el mismo 
		   ordenamiento que los parametros de ingreso de la store procedure) y esta definido en Procesar::$fuentes['juicios_bt'].
	   */
	private static function normalizarValoresJuiciosBT($csv_values_arr) {
		$csv_values_arr_norm = array();
		$csv_arr = array_combine(self::$juicios_csv_fields_arr, $csv_values_arr);
		foreach (self::$fuente['normalizar'] as $field => $table_field) {
			$v = (isset($csv_arr[$field])) ? $csv_arr[$field] : "";
			if ($field == "OBJETO")
				$v = self::uppercaseTrimQuotes($v);
			$csv_values_arr_norm[] = $v;
		}
		return $csv_values_arr_norm;
	}

	private static function uppercaseTrimQuotes($v) {
		// uppercase + trim espacios y comillas dobles
		return preg_replace("/  +/", " ", trim(strtoupper($v), ' "'));
	}


	/********************
		   Funciones genericas
		   - getArchivos()
		   - buscarArchivos()
		   - ErrorLog()				log errores txt
		   - Log()					log html
		   - insertar()				inserta via query
		   - moverArchivo()
	   *********************/

	// busca los archivos
	private function getArchivos($directorio_fuente) {

		if ((!isset($_POST["fuente"]) or !isset($_POST["upload"]) or !isset($_POST["filename"]))) {
			$msg = "Error en los parametros del form.";
			return array(0, $msg);
		}

		$archivos = [];

		$upload_archivo = ($_POST["upload"] == "server") ? 0 : 1;
		$filename = $_POST["filename"];

		//uploaded file
		if ($upload_archivo) {
			if (!isset($_FILES)) {
				$msg = "Error (POST FILES)";
				return array(0, $msg);
			}

			$archivo = $directorio_fuente . DIRECTORY_SEPARATOR . basename($_FILES["archivo"]["name"]);
			$res = move_uploaded_file($_FILES["archivo"]["tmp_name"], $archivo);
			if ($res) {
				$archivos = [realpath($archivo)];
			} else {
				$msg = "No se pudo subir el archivo. $res";
				return array(0, $msg);
			}
		}
		//search in source folder
		else {
			$filename = str_replace(".", "\.", $filename);
			$filename = str_replace("*", ".*", $filename);

			$archivos = self::buscarArchivos(1, $directorio_fuente, $filename);
		}

		return array(1, $archivos);
	}

	// busca archivos (regex:filename) en $dir
	private function buscarArchivos($recursive, $dir, $filename, &$files_arr = array()) {
		$files = scandir($dir);

		foreach ($files as $f) {
			$path = realpath($dir . DIRECTORY_SEPARATOR . $f);
			if (!is_dir($path)) {
				if (preg_match("/^" . $filename . "$/i", $f) == 1) {
					$files_arr[] = $path;
				}
			} else if ($f != "." && $f != "..") {
				if ($recursive) {
					self::buscarArchivos($recursive, $path, $filename, $files_arr);
				}
			}
		}
		return $files_arr;
	}

	// write to error log
	private function ErrorLog($txt) {
		self::$consultar_errores = 1;
		$f_errorlog = fopen(self::$errorlog, "a");
		$now = Procesar::now();
		$txt = "[" . $now . "] " . $txt . "\n";
		fwrite($f_errorlog, $txt);
		fclose($f_errorlog);
		return 0;
	}

	// write to html log
	private function Log($txt) {
		$f_log = fopen(self::$log, "a");
		$now = Procesar::now();
		$html = "<span style='font-size:12px; color:#666'>[" . $now . "]</span> " . $txt;
		fwrite($f_log, $html . "<br>");
		fclose($f_log);
		return 0;
	}

	// move file
	private function moverArchivo($file, $destfile) {
		$resp = '';
		try {
			//$destfile = str_replace(self::$directorio_fuente, self::$directorio_destino, $file);
			$destdir = pathinfo($destfile)["dirname"];

			// genero nuevo directorio
			if (!file_exists($destdir)) {
				try {
					$um = umask(0);
					$res = mkdir($destdir, 0777, true);
					umask($um);
				} catch (\Exception $e) {
					throw new \Exception("Error fatal creando el nuevo directorio de destino: " . $destdir);
				}
				if ($res === FALSE) {
					throw new \Exception("No se pudo crear el nuevo directorio de destino: " . $destdir);
				}
			}

			// copio file
			try {
				$res = copy($file, $destfile);
			} catch (\Exception $e) {
				throw new \Exception("Error fatal copiando el archivo: " . $file);
			}
			if ($res === FALSE) {
				throw new \Exception("No se pudo copiar el archivo: " . $file);
			}

			// elimino file
			try {
				$res = unlink($file);
			} catch (\Exception $e) {
				throw new \Exception("Error fatal eliminando el archivo: " . $file);
			}
			if ($res === FALSE) {
				throw new \Exception("No se pudo eliminar el archivo " . $file);
			}

			return 1;

		} catch (\Exception $e) {
			return $res;
		}
	}

	// buscar files codigo
	private function buscarArchivo($dir, $filename) {

		try {
			$files = scandir($dir);

			foreach ($files as $f) {
				$path = realpath($dir . DIRECTORY_SEPARATOR . $f);
				if (!is_dir($path)) {
					if (strtoupper($filename) == strtoupper($f)) {
						return $path;
					}
				} else if ($f != "." && $f != "..") {
					return self::buscarArchivo($path, $filename);
				}
			}

			return 0;

		} catch (\Exception $e) {
			self::ErrorLog("Error durante la busqueda del archivo $filename");
			return FALSE;
		}
	}

	public static function obtenerMarcas() {
		$menu = Misc::obtenerPermisosNavigatorNoCuit();
		$marcas = SQLConnection::obtenerMarcasConCuit();
		return view('procesos/marcas')->with(compact('menu', 'marcas'));
	}
	
	//procesa HTML marcas
	public static function obtenerHtmlMarcas() {
		$menu = Misc::obtenerPermisosNavigatorNoCuit();
		$marcas_con_cuit = SQLConnection::obtenerMarcasConCuit();
		$html_no_procesados = '';
		$html_procesados = '';
		foreach ($marcas_con_cuit as $key => $value) {
			if ($value->html == NULL) {
				$html = Misc::obtenerHtmlPortalTramites($value->num_acta, $value->num_boletin);
				if ($html == 'ok') {
					SQLConnection::cargarEstadoMarcasExterno($value->cuit, 1, 'html', $value->num_acta);
					$html_procesados[] = 'El cuit:' . $value->cuit . ' con Numero de Acta: ' . $value->num_acta . ' se proceso correctamente';
				} elseif ($html == 'no_html_portal') {
					SQLConnection::cargarEstadoMarcasExterno($value->$cuit, 0, 'html', $value->num_acta);
					$html_no_procesados[] = 'El cuit:' . $value->cuit . ' con Numero de Acta: ' . $value->num_acta . ' no se pudo obtener de fuentes externas';
				}
			}
			usleep(30000);
		}//end foreach
		return \Response::json(array('info' => compact('html_no_procesados', 'html_procesados', 'html')), 200, [], JSON_NUMERIC_CHECK);

	}
	// pasar por parametro : $num_boletin
	public static function parseoHtmlMarcas() {
		/*
		Bienvenido amable programador. 
			*La siguiente funcion recorre un HTML (pesimamente armado, con errores que llevan a realizar un parseo horrible) en busca de datos para 
				insertarlos o actualizarlos en las tablas : "marcas_test" (originalmente deberia pegar en MARCAS) y "marcas_transferencias"

				stored procedures : "actualizar_marcas" y "marcas_transferencias_" 
		*/
		$files = scandir('/var/www/html/compartido/marcas_procesar/');

		$resultados_t = [];
		$resultados_d = [];
		$fecha_resolucion = '';
		$num_resolucion = '';
		$tipo_resolucion = '';
		$num_agente = '';
		$fecha_presentacion = '';
		$num_acta = '';
		$nombre_denominacion = '';
		$tipo_marca = '';
		$num_boletin = '';
		$clase = '';
		$nombre_titular = [];
		$cuit = [];
		$pais = [];
		$fecha_publicacion = '';
		$file_origen = '';
		$file_destino = '';
		$unico_registro = false;//usado para el caso donde se encuentran mas de un nombre de titular
		$cantidad_registros_nombres_titulares = '';
		/*	foreach($folders as $k => $folder){
			if($folder != '.' && $folder != '..' && $folder != '0'  && $folder != 'procesados') {
				//$path_completo 								   = '/var/www/html/compartido/marcas_html/3657103.html'; // caso 2 titulares
				//$path_completo 								   = '/var/www/html/compartido/marcas_html/3654262.html'; //caso 1 titular
				$files = scandir('/var/www/html/compartido/marcas_html/'.$folder.'/marcas/');

				foreach($files as $k => $file){
					if($file != '.' && $file != '..' && $file != '0' && $file != 'procesados') {*/
		foreach ($files as $k => $file) {

			if ($file != '.' && $file != '..' && $file != '0' && $file != 'procesados' && $file != 'error') {
				//$path_completo 								   = '/var/www/html/compartido/marcas_html/3657103.html'; // caso 2 titulares
				//$path_completo 								   = '/var/www/html/compartido/marcas_html/3654262.html'; //caso 1 titular
				$file_origen = '/var/www/html/compartido/marcas_procesar/' . $file;
				$file_destino = '/var/www/html/compartido/marcas_procesar/procesados/' . $file;
				$path_completo = '/var/www/html/compartido/marcas_procesar/' . $file;
				$html = HtmlDomParser::file_get_html($path_completo);
				$datos_parseo = [];
				$todos_tr = $html->find('div[id="tabla"] tr');//60 tr
				$registros_adquiriente_cedente = $html->find('td[colspan*=5]');// encuentra cedentes y adquirientes
				$datos_transferencia = [];
				$porcentajes_adquiriente_cedente = $html->find('td[width*=2%]');// encuentra porcentajes de cedentes y adquirientes
				$tabla_datos_titulares = $html->find("table[width=787], table[height=77]");//usado para extraccion de mas de un nombre de titular
				$cantidad_registros_nombres_titulares = sizeof($tabla_datos_titulares);
				//si el html tiene mas de un nombre de titular, va a generar en el HTML las tablas respecto a la cantidad de nombres
				//2 titulares = 2 tablas 
				if ($cantidad_registros_nombres_titulares > 1) {
					$unico_registro = false;
				} else {
					$unico_registro = true;
				}
				//recorre todos los TR encontrados en el HTML				
				foreach ($todos_tr as $key => $value) {
					$fecha_publicacion = '';
					$numero_boletin = '';
					//NUM ACTA
					if ($key == 0) {
						$num_acta = isset($value->find('td', 0)->plaintext) ? $value->find('td', 0)->plaintext : '';
						if (preg_match('~[0-9]~', $num_acta)) {
							$num_acta = trim(explode('ACTA', $num_acta)[1]);
						} else {
							$num_acta = '';
						}

					}
					// FECHA DE PRESENTACION / NOMBRE DENOMINACION / TIPO DE MARCA
					if ($key == 2) {
						//nombre denominacion
						$leyenda_denominacion = isset($value->find('td', 2)->plaintext) ? trim($value->find('td', 2)->plaintext) : '';
						if (strpos($leyenda_denominacion, 'Denominaci') !== false) {
							$nombre_denominacion = isset($value->find('td', 3)->plaintext) ? trim($value->find('td', 3)->plaintext) : '';
						} else {
							$nombre_denominacion = '';
						}

						//fecha presentacion
						$fecha_presentacion = isset($value->find('td', 1)->plaintext) ? trim($value->find('td', 1)->plaintext) : '';
						$fecha_presentacion_exp = explode(' ', $fecha_presentacion);
						$count_f_presentacion = sizeof($fecha_presentacion_exp);

						if ($count_f_presentacion > 1) {
							$fecha_presentacion = self::parseoFechasDatosHtmlMarcas($fecha_presentacion_exp[0]);
						} else {
							$fecha_presentacion = '';
						}
						$tipo_marca = isset($value->find('td', 4)->plaintext) ? trim($value->find('td', 4)->plaintext) : '';
						$tipo_marca = trim(explode('Tipo Marca :', $tipo_marca)[1]);

						if ($tipo_marca == 'Denominativa') {
							$tipo_marca = 'D';
						} elseif ($tipo_marca == 'Mixta') {
							$tipo_marca = 'M';
						} elseif ($tipo_marca == 'Figurativa') {
							$tipo_marca = 'F';
						} else {
							$tipo_marca = '-';
						}
					}

					//RENOV_DE - RENOV_POR
					if ($key == 4) {
						$primer_td = isset(($value->find('td', 0)->plaintext)) ? trim($value->find('td', 0)->plaintext) : '';
						if ($primer_td == 'Renov. de') {
							$renov_de = isset($value->find('td', 1)->plaintext) ? trim($value->find('td', 1)->plaintext) : '';
							$renov_de = trim(str_ireplace('-', '', $renov_de));
							$renov_por = isset($value->find('td', 3)->plaintext) ? trim($value->find('td', 3)->plaintext) : '';
							$renov_por = trim(str_ireplace('-', '', $renov_por));
						}

					}

					//FECHA DE PUBLICACION
					if ($key == 23) {
						$primer_td = $value->find('td', 0)->plaintext;
						$fecha_publicacion = isset($todos_tr[$key + 1]->find('td', 1)->plaintext) ? trim($todos_tr[$key + 1]->find('td', 1)->plaintext) : '';
						$fecha_publicacion = self::parseoFechasDatosHtmlMarcas($fecha_publicacion);
						$numero_boletin = isset($todos_tr[$key + 1]->find('td', 4)->plaintext) ? trim($todos_tr[$key + 1]->find('td', 4)->plaintext) : '';
						$numero_boletin = str_replace("&nbsp;", "", trim($numero_boletin));
						if (is_numeric($numero_boletin)) {
							//$datos_parseo['num_boletin'] = $numero_boletin;
							$num_boletin = $numero_boletin;
						} else {
							$num_boletin = '';
						}

					}
					//RESOLUCIONES : NUMERO,FECHA,TIPO
					if ($key == 28 || $key == 29 || $key == 30) {
						$leyenda_resolucion = $value->find('td', 0)->plaintext;
						if (strpos($leyenda_resolucion, 'Resoluci') !== false) {
							//fecha resolucion
							$fecha_resolucion = isset($todos_tr[$key + 1]->find('td', 0)->plaintext) ? $todos_tr[$key + 1]->find('td', 0)->plaintext : '';
							$fecha_resolucion = explode(':', $fecha_resolucion);
							if (!empty($fecha_resolucion[1])) {
								$fecha_resolucion = isset($fecha_resolucion[1]) ? trim($fecha_resolucion[1]) : '';
								$fecha_resolucion = self::parseoFechasDatosHtmlMarcas($fecha_resolucion);
							}

							//num resolucion
							$leyenda_num_resolucion = $todos_tr[$key + 1]->find('td', 1)->plaintext;
							if (strpos($leyenda_num_resolucion, 'Nro') !== false) {
								$num_resolucion = isset($todos_tr[$key + 1]->find('td', 1)->plaintext) ? $todos_tr[$key + 1]->find('td', 1)->plaintext : '';
								$num_resolucion = explode(':', $num_resolucion);
								if (!empty($num_resolucion[1])) {
									$num_resolucion = isset($num_resolucion[1]) ? trim($num_resolucion[1]) : '';
								}
							} else {
								$num_resolucion = '';
							}

							//tipo resolucion
							$leyenda_resolucion_tipo = isset($todos_tr[$key + 1]->find('td', 2)->plaintext) ? $todos_tr[$key + 1]->find('td', 2)->plaintext : '';
							if ($leyenda_resolucion_tipo == 'Tipo:') {
								$tipo_resolucion = isset($todos_tr[$key + 1]->find('td', 3)->plaintext) ? trim($todos_tr[$key + 1]->find('td', 3)->plaintext) : '';
								$tipo_resolucion = str_replace("&nbsp;", "", $tipo_resolucion);
							}
						}
					}

					//FECHA DE TRANSFERENCIA - ADQUIRIENTE/CEDENTE/TIPO TITULAR/PORCENTAJE
					if ($key == 54 || $key == 55 || $key == 52 || $key == 44 || $key == 50 || $key == 48 || $key == 55 || $key == 49 || $key == 43 || $key == 46 || $key == 45 || $key == 39 || $key == 42 || $key == 47) {
						$primer_td = isset(($value->find('td', 0)->plaintext)) ? trim($value->find('td', 0)->plaintext) : '';
						if ($primer_td == 'Num Agente') {
							//NUMERO DE AGENTE
							if (isset($todos_tr[$key + 1])) {
								$num_agente = isset($todos_tr[$key + 1]->find('td', 0)->plaintext) ? trim($todos_tr[$key + 1]->find('td', 0)->plaintext) : '';
							}

							if (!preg_match('/[0-9]/', $num_agente)) {
								$num_agente = '';
							}
							if (isset($todos_tr[$key + 1])) {
								$row1 = count($todos_tr[$key + 1]->find('td'));
							}
							$row1 = '';
							if ($row1 > 1) {
								//recorre nombres y tipos de adq/ced
								foreach ($registros_adquiriente_cedente as $c => $reg) {
									if ($reg->hasAttribute('colspan') && $reg->hasAttribute('valign') && $reg->hasAttribute('class')) {
										/* 
																	   EJEMPLO ACTA 3187019
																	   0 => "ADQUIRENTE -- VERKOM S.A."
																	   1 => "CEDENTE -- COMPAÑIA HEIPON S. A."
																   */
										if ($reg->plaintext != 'tipo y Nombre del Titular') {
											$valores_tipo_y_nombre_tranferencias[] = trim($reg->plaintext);
										}
										//$resultados_t[$k-2] = $datos_parseo['acta']; recorre los files buscando registros que tengan adq/ced
									}
								}
								//PORCENTAJES
								foreach ($porcentajes_adquiriente_cedente as $c_por => $v_por) {
									$valores_porcentajes[] = trim($v_por->plaintext);
								}
								//TRANSFERENCIAS 
								if (sizeof($valores_tipo_y_nombre_tranferencias) > 0 && sizeof($valores_porcentajes) > 0) {
									foreach ($valores_tipo_y_nombre_tranferencias as $k_val => $v_val) {
										$valor_exp = explode('--', $v_val);
										$valor_exp[1] = isset($valor_exp[1]) ? str_ireplace(array('%', ','), array('', ''), trim($valor_exp[1])) : '';
										$datos_transferencia['acta'] = $num_acta;
										$datos_transferencia['tipo_titular'] = isset($valor_exp[0]) ? trim($valor_exp[0]) : '';
										$datos_transferencia['nombre_titular'] = isset($valor_exp[1]) ? trim($valor_exp[1]) : '';
										$datos_transferencia['porcentaje'] = isset($valores_porcentajes[$k_val]) ? $valores_porcentajes[$k_val] : '';
										//inserta en tabla : marcas_transferencias
										$res = SQLConnection::backendStoreProcedure('marcas_transferencias_', array($datos_transferencia['acta'], $datos_transferencia['tipo_titular'], $datos_transferencia['nombre_titular'], $datos_transferencia['porcentaje']), true, false);
									}
								}
							}
						}// fin $primer_td == 'Num Agente' 

					}
					//CLASE
					if ($key == 5) {
						$leyenda_datos_titular = isset(($value->find('td', 0)->plaintext)) ? trim($value->find('td', 0)->plaintext) : '';
						if ($leyenda_datos_titular == 'Datos de titulares') {
							$clase = isset(($todos_tr[$key + 1]->find('td', 1)->plaintext)) ? trim($todos_tr[$key + 1]->find('td', 1)->plaintext) : '';
						}
					}

				}//endForeach find TR

				//DATOS DE TITULARES (CLASE - NOMBRE - PORCENTAJE DE TITULARIDAD - CUIT - DOMICILIO REAL - CODIGO POSTAL)
				foreach ($tabla_datos_titulares as $k_tabla => $v_tabla) {

					foreach ($v_tabla->children() as $k_tr => $v_tr) {
						$leyenda = $v_tr->find('td', 0)->plaintext;
						/*
									   leyenda =  me ubica en un TD. Ejemplo: si encuentra el valor "Nombre", el siguiente TD , sera el valor de "Nombre"
									   
									   Ej:
									   PRIMER TD ('td',0) : <td width="86"  class="Estilo44"><p>Nombre</p>                  </td>
									   SEGUNDO TD('td',1): <td width="274" class="Estilo44"><span class="titulorojo">NEJAMEN, MABEL ALICIA 50 %</span></td>
									   */

						//CLASE
						//$clase 	 = isset($v_tr->find('td',0)->plaintext) ? trim($v_tr->find('td',0)->plaintext) : '';
						//NOMBRE TITULAR
						if (strpos($leyenda, 'Nombre') !== false) {
							$nombre_titular[$k_tabla] = isset($v_tr->find('td', 1)->plaintext) ? trim($v_tr->find('td', 1)->plaintext) : '';
							$nombre_titular[$k_tabla] = preg_replace('/\d/', '', trim($nombre_titular[$k_tabla]));
							$nombre_titular[$k_tabla] = str_replace('%', '', $nombre_titular[$k_tabla]);
							$nombre_titular[$k_tabla] = str_replace(',', '', $nombre_titular[$k_tabla]);
						}
						//PAIS
						if (strpos($leyenda, 'Pa') !== false) {
							$pais[$k_tabla] = isset($v_tr->find('td', 1)->plaintext) ? trim($v_tr->find('td', 1)->plaintext) : '';
							if ($pais[$k_tabla] == 'ARGENTINA') {
								$pais[$k_tabla] = 'AR';
							} else {
								$pais[$k_tabla] = 'OTRO PAIS';
							}
							//CUIT
							$leyenda_cuit = isset($v_tr->find('td', 2)->plaintext) ? trim($v_tr->find('td', 2)->plaintext) : '';
							if ($leyenda_cuit == 'Cuit') {
								$cuit[$k_tabla] = isset($v_tr->find('td', 3)->plaintext) ? trim($v_tr->find('td', 3)->plaintext) : '';
								$cuit[$k_tabla] = str_ireplace("-", '', trim($cuit[$k_tabla]));
							}
						}
					}//fin foreach $v_tabla->children() 	

					$datos_parseo['nombre_denominacion'] = $nombre_denominacion;
					$datos_parseo['tipo_marca'] = $tipo_marca;
					$datos_parseo['clase'] = $clase;
					$datos_parseo['acta'] = $num_acta;
					$datos_parseo['num_boletin'] = $num_boletin;
					$datos_parseo['fecha_publicacion'] = $fecha_publicacion;
					$datos_parseo['renov_de'] = $renov_de;
					$datos_parseo['renov_por'] = $renov_por;
					$datos_parseo['fecha_resolucion'] = $fecha_resolucion;
					$datos_parseo['num_resolucion'] = $num_resolucion;
					$datos_parseo['tipo_resolucion'] = $tipo_resolucion;
					$datos_parseo['num_agente'] = $num_agente;
					//dd($unico_registro,'+1 nombre');

					if ($unico_registro !== true) {
						$resp_stored = SQLConnection::backendStoreProcedure('actualizar_marcas', array($datos_parseo['nombre_denominacion'], $datos_parseo['tipo_marca'], $datos_parseo['clase'], $datos_parseo['acta'], $datos_parseo['num_boletin'], $datos_parseo['fecha_publicacion'], $cuit[$k_tabla], $datos_parseo['renov_de'], $datos_parseo['renov_por'], $pais[$k_tabla], $datos_parseo['fecha_resolucion'], $datos_parseo['num_resolucion'], $datos_parseo['tipo_resolucion'], $nombre_titular[$k_tabla], $datos_parseo['num_agente'], $file), true, false);
						$resultados_d[] = $resp_stored;
					}


				}//fin foreach tabla_datos_titulares

				//casos con un unico nombre titular
				if ($unico_registro !== false) {
					$datos_parseo['nombre_denominacion'] = $nombre_denominacion;
					$datos_parseo['tipo_marca'] = $tipo_marca;
					$datos_parseo['clase'] = $clase;
					$datos_parseo['acta'] = $num_acta;
					$datos_parseo['num_boletin'] = $num_boletin;
					$datos_parseo['fecha_publicacion'] = $fecha_publicacion;
					$datos_parseo['cuit'] = $cuit[0];
					$datos_parseo['renov_de'] = $renov_de;
					$datos_parseo['renov_por'] = $renov_por;
					$datos_parseo['cod_pais'] = $pais[0];
					$datos_parseo['fecha_resolucion'] = $fecha_resolucion;
					$datos_parseo['num_resolucion'] = $num_resolucion;
					$datos_parseo['tipo_resolucion'] = $tipo_resolucion;
					$datos_parseo['nombre_titular'] = $nombre_titular[0];
					$datos_parseo['num_agente'] = $num_agente;

					//limpia valores de caracteres invalidos
					foreach ($datos_parseo as $c => $val) {
						$datos_parseo[$c] = str_replace("&nbsp;", "", trim($val));
					}
					$res_stored = SQLConnection::backendStoreProcedure('actualizar_marcas', array($datos_parseo['nombre_denominacion'], $datos_parseo['tipo_marca'], $datos_parseo['clase'], $datos_parseo['acta'], $datos_parseo['num_boletin'], $datos_parseo['fecha_publicacion'], $datos_parseo['cuit'], $datos_parseo['renov_de'], $datos_parseo['renov_por'], $datos_parseo['cod_pais'], $datos_parseo['fecha_resolucion'], $datos_parseo['num_resolucion'], $datos_parseo['tipo_resolucion'], $datos_parseo['nombre_titular'], $datos_parseo['num_agente'], $file), true, false);
					$resultados_t[] = $res_stored;
				}

			}//if file
			if (is_file($file_origen)) {
				if (self::mycopy($file_origen, $file_destino)) {
					unlink($file_origen);
				}
			}
			//		}//foreach files
			//	}//end if folder


		}//endForeach folders
		// dd($resultados_t,$resultados_d);
		return 'fin marca';
	}

	public static function mycopy($s1, $s2) {
		$path = pathinfo($s2);
		if (!file_exists($path['dirname'])) {
			mkdir($path['dirname'], 0777, true);
		}
		return copy($s1, $s2);
	}

	public static function parseoFechasDatosHtmlMarcas($fecha) {
		if (strpos($fecha, '/')) {
			$fecha_exp = explode('/', $fecha);
			//$fecha = $fecha_exp[2].'-'.$fecha_exp[1].'-'.$fecha_exp[0];
			if (isset($fecha_exp) && is_numeric($fecha_exp)) {
				$fecha = $fecha_exp[0] . '-' . $fecha_exp[1] . '-' . $fecha_exp[2];
			}
		} else {
			$fecha = '';
		}
		return trim($fecha);
	}

	//parseo de marcas 2019 ( marcas nuevas )
	public static function parseo2019() {
		$files = scandir('/var/www/html/compartido/marcas2019/');

		$resultados_t = [];
		$resultados_d = [];
		$fecha_resolucion = '';
		$num_resolucion = '';
		$tipo_resolucion = '';
		$num_agente = '';
		$num_acta = '';
		$num_boletin = '';
		$nombre_titular = [];
		$cuit = [];
		$pais = [];
		$file_origen = '';
		$file_destino = '';
		$unico_registro = false;//usado para el caso donde se encuentran mas de un nombre de titular
		$cantidad_registros_nombres_titulares = '';
		foreach ($files as $k => $file) {
			if ($k == 1000) {
				break;
			}
			if ($file != '.' && $file != '..' && $file != '0' && $file != 'procesados' && $file != 'error' && $file != 'cifs6ec2' && $file != 'cifs9182') {
				//accordion-1
				$fecha_presentacion = '';
				$nombre_denominacion = '';
				$tipo_marca = '';
				$domicilio_legal = '';
				$renovacion_de = '';
				$renovacion_por = '';
				$fecha_publicacion = '';

				//accordion-2
				$clase = '';
				$proteccion = '';
				$limitacion = '';
				$nombre = '';
				$porcentaje_titularidad = '';
				$dni = '';
				$pais = '';
				$cuit = '';
				$territorio_legal = '';
				$domicilio_real = '';
				$piso = '';
				$depto = '';
				$localidad = '';
				$codigo_postal = '';
				$path_completo = '/var/www/html/compartido/marcas2019/' . $file;
				//$path_completo	= '/var/www/html/compartido/marcas2019/3815462.html';
				$html = HtmlDomParser::file_get_html($path_completo);
				$num_acta = str_replace('.html', '', $file);
				if (!empty($html) && !empty(trim($html->find("#accordion-1", 0)))) {
					//empieza el parseo, agarró el primer accordion que es el de datos generales
					$datos_generales = $html->find("#accordion-1", 0);



					$img = isset($html->find('#logo img', 0)->src) ? $html->find('#logo img', 0)->src : '';

					// Check allowed mime type
					if ($img) {
						$mimeType = mime_content_type($img);
						if ($mimeType != 'image/jpg') {
							$mimeType = 'image/jpg';
						}
						//file_put_contents('/var/www/html/compartido/marcas/image.png', $img);
						$img = str_replace('data:' . $mimeType . ';base64,', '', $img);
						$img = str_replace(' ', '+', $img);
						$data = base64_decode($img);
						$file_png = '/var/www/html/compartido/marcas/logos/' . substr($num_acta, 0, 4) . '/' . $num_acta . '.png';
						$path = pathinfo($file_png);
						if (!file_exists($path['dirname'])) {
							mkdir($path['dirname'], 0777, true);
						}
						$success = file_put_contents($file_png, $data);
					}

					if (!empty(trim($datos_generales))) {

						$fecha_presentacion = explode('PRESENTACIÓN:', trim($datos_generales->find("label", 0)->plaintext));
						$fecha_presentacion = isset($fecha_presentacion[1]) ? Misc::convertirFormatoFecha(trim($fecha_presentacion[1])) : NULL;

						$nombre_denominacion = explode('DENOMINACIÓN:', trim($datos_generales->find("label", 1)->plaintext));
						$nombre_denominacion = isset($nombre_denominacion[1]) ? mb_convert_encoding(trim($nombre_denominacion[1]), 'UTF-8', 'ISO-8859-1') : NULL;

						$tipo_marca = explode('TIPO DE MARCA:', trim($datos_generales->find("label", 2)->plaintext));
						$tipo_marca = isset($tipo_marca[1]) ? trim($tipo_marca[1]) : NULL;

						$domicilio_legal = explode('DOMICILO LEGAL:', trim($datos_generales->find("label", 3)->plaintext));
						$domicilio_legal = isset($domicilio_legal[1]) ? mb_convert_encoding(trim($domicilio_legal[1]), 'UTF-8', 'ISO-8859-1') : NULL;

						if (isset($datos_generales->find("label", 4)->plaintext)) {
							$renovacion_de = explode('RENOVACION DE:', trim($datos_generales->find("label", 4)->plaintext));
							$renovacion_de = isset($renovacion_de[1]) ? trim(str_replace('-', '', $renovacion_de[1])) : NULL;
						}
						if (isset($datos_generales->find("label", 5)->plaintext)) {
							$renovacion_por = explode('RENOVACION POR:', trim($datos_generales->find("label", 5)->plaintext));
							$renovacion_por = isset($renovacion_por[1]) ? trim($renovacion_por[1]) : NULL;
						}
					}

					//$logo				= $datos_generales->find("div[id=logo]")->plaintext;
					$titular1 = [];
					$titular2 = [];
					$titular3 = [];
					$titular4 = [];
					$cantidad_titulares = 0;

					$titularidad = $html->find("#accordion-2", 0);

					$publicacion = $html->find("#accordion-6", 0);
					$fecha_publicacion = NULL;
					$numero_boletin = '';

					if (!empty($publicacion) && trim(strtolower($publicacion->plaintext)) != 'publicaciÓn' && trim(strtolower($publicacion->plaintext)) != 'publicacion') {

						$fecha_publicacion = explode('FECHA:', trim($publicacion->find("label", 0)->plaintext));
						$fecha_publicacion = (isset($fecha_publicacion[1]) && !empty(trim($fecha_publicacion[1]))) ? Misc::convertirFormatoFecha(trim($fecha_publicacion[1])) : NULL;
						if (trim($fecha_publicacion == '1900-01-01')) {
							$fecha_publicacion = '';
						}
						$numero_boletin = explode('NUMERO:', trim($publicacion->find("label", 1)->plaintext));
						$numero_boletin = isset($numero_boletin[1]) ? trim($numero_boletin[1]) : NULL;


					}

					if (!empty(trim($html->find("#accordion-2", 0))) && trim(strtolower($titularidad->plaintext)) != 'titularidad') {
						$cantidad_titulares = sizeOf($titularidad->find('label'));
						$titular1 = self::parseoTitulares($titularidad, 0, $k);
						self::grabarMarca($num_acta, $file, $fecha_presentacion, $nombre_denominacion, $tipo_marca, $domicilio_legal, $renovacion_de, $renovacion_por, $titular1, $fecha_publicacion, $numero_boletin, $k);
					}
					if ($cantidad_titulares > 20) {
						$titular2 = self::parseoTitulares($titularidad, 11, $k);
						self::grabarMarca($num_acta, $file, $fecha_presentacion, $nombre_denominacion, $tipo_marca, $domicilio_legal, $renovacion_de, $renovacion_por, $titular2, $fecha_publicacion, $numero_boletin, $k);
					}
					if ($cantidad_titulares > 30) {
						$titular3 = self::parseoTitulares($titularidad, 22, $k);
						self::grabarMarca($num_acta, $file, $fecha_presentacion, $nombre_denominacion, $tipo_marca, $domicilio_legal, $renovacion_de, $renovacion_por, $titular3, $fecha_publicacion, $numero_boletin, $k);
					}
					if ($cantidad_titulares > 40) {
						$titular4 = self::parseoTitulares($titularidad, 33, $k);
						self::grabarMarca($num_acta, $file, $fecha_presentacion, $nombre_denominacion, $tipo_marca, $domicilio_legal, $renovacion_de, $renovacion_por, $titular4, $fecha_publicacion, $numero_boletin, $k);
					}
				}
				$file_destino = '/var/www/html/compartido/marcas2019/procesados/' . $file;
				if (is_file($path_completo)) {
					if (self::mycopy($path_completo, $file_destino)) {
						unlink($path_completo);
					}
				}

			}
		}
	}

	/*
	$clase,
	$proteccion,
	$limitacion,
	$nombre,
	$porcentaje_titularidad,
	$dni,
	$pais,
	$cuit,
	$territorio_legal,
	$domicilio_real,
	$piso,
	$depto,
	$localidad,
	$codigo_postal,
	*/

	private static function grabarMarca($num_acta, $file, $fecha_presentacion, $nombre_denominacion, $tipo_marca, $domicilio_legal, $renovacion_de, $renovacion_por,
		$titular, $fecha_publicacion, $numero_boletin, $k) {

		$res_stored = SQLConnection::backendStoreProcedure('actualizar_marcas_actas',
			array(
				$num_acta,
				$file,
				$fecha_presentacion,
				$nombre_denominacion,
				$tipo_marca,
				$domicilio_legal,
				$renovacion_de,
				$renovacion_por,
				$titular['clase'],
				$titular['proteccion'],
				$titular['limitacion'],
				$titular['nombre'],
				$titular['porcentaje_titularidad'],
				$titular['dni'],
				$titular['pais'],
				$titular['cuit'],
				$titular['territorio_legal'],
				$titular['domicilio_real'],
				$titular['piso'],
				$titular['depto'],
				$titular['localidad'],
				$titular['codigo_postal'],
				$fecha_publicacion,
				$numero_boletin
			)
			, true, false);
		/*if ($k >= 381) {
							print_r($titular);
					}*/

	}

	private static function parseoTitulares($titularidad, $key, $k) {
		$titular = [];


		$titular['clase'] = explode('CLASE:', trim($titularidad->find("label", (0 + $key))->plaintext));
		$titular['clase'] = isset($titular['clase'][1]) ? trim($titular['clase'][1]) : NULL;


		$titular['proteccion'] = explode('PROTECCION:', trim($titularidad->find("label", (1 + $key))->plaintext));
		$titular['proteccion'] = isset($titular['proteccion'][1]) ? trim($titular['proteccion'][1]) : NULL;

		$titular['limitacion'] = explode('LIMITACION:', trim($titularidad->find("label", (2 + $key))->plaintext));
		$titular['limitacion'] = isset($titular['limitacion'][1]) ? trim($titular['limitacion'][1]) : NULL;
		$titular['limitacion'] = mb_convert_encoding($titular['limitacion'], 'UTF-8', 'ISO-8859-1');
		$titular['nombre'] = explode('NOMBRE:', trim($titularidad->find("label", (3 + $key))->plaintext));
		$titular['nombre'] = isset($titular['nombre'][1]) ? trim($titular['nombre'][1]) : NULL;

		$titular['porcentaje_titularidad'] = '';
		if (strpos($titular['nombre'], '%') > 0) {
			$titular['porcentaje_titularidad'] = explode('.', last(explode(' ', $titular['nombre'])))[0];
			$titular['nombre'] = trim(preg_replace('/[^A-Za-z? ]/', '', $titular['nombre']));
		}

		$titular['dni'] = explode('DNI:', trim($titularidad->find("label", (5 + $key))->plaintext));
		$titular['dni'] = isset($titular['dni'][1]) ? trim($titular['dni'][1]) : null;

		$titular['pais'] = explode('PAIS:', trim($titularidad->find("label", (6 + $key))->plaintext));
		$titular['pais'] = isset($titular['pais'][1]) ? trim($titular['pais'][1]) : null;

		$titular['cuit'] = explode('CUIT:', trim($titularidad->find("label", (7 + $key))->plaintext));
		$titular['cuit'] = isset($titular['cuit'][1]) ? trim(str_replace('-', '', $titular['cuit'][1])) : null;

		$titular['territorio_legal'] = explode('TERRITORIO LEGAL:', trim($titularidad->find("label", (8 + $key))->plaintext));
		$titular['territorio_legal'] = isset($titular['territorio_legal'][1]) ? trim($titular['territorio_legal'][1]) : null;

		$titular['domicilio_real'] = explode('DOMICILIO REAL:', trim($titularidad->find("label", (9 + $key))->plaintext));
		$titular['domicilio_real_completo'] = isset($titular['domicilio_real'][1]) ? trim($titular['domicilio_real'][1]) : null;
		$titular['domicilio_real'] = isset($titular['domicilio_real_completo']) ? explode('Piso', trim($titular['domicilio_real_completo']))[0] : null;
		$titular['domicilio_real'] = mb_convert_encoding($titular['domicilio_real'], 'UTF-8', 'ISO-8859-1');
		$titular['piso'] = '';
		if (strpos($titular['domicilio_real_completo'], 'Piso') > 0) {
			$titular['piso'] = explode('Piso', $titular['domicilio_real_completo'])[1];
			$titular['piso'] = explode('Depto', $titular['piso']);
			$titular['piso'] = isset($titular['piso'][0]) ? trim($titular['piso'][0]) : '';
			if ($titular['piso'] == '-') {
				$titular['piso'] = '';
			}
		}
		$titular['depto'] = '';
		if (strpos($titular['domicilio_real_completo'], 'Piso') > 0) {
			$titular['depto'] = explode('Depto', $titular['domicilio_real_completo']);
			$titular['depto'] = isset($titular['depto'][1]) ? trim($titular['depto'][1]) : '';

			if ($titular['depto'] == '-') {
				$titular['depto'] = '';
			}
		}
		$titular['localidad_arr'] = explode('LOCALIDAD:', trim($titularidad->find("label", (10 + $key))->plaintext));
		$titular['localidad_arr'] = isset($titular['localidad_arr'][1]) ? trim($titular['localidad_arr'][1]) : null;
		$titular['localidad'] = trim(explode('CP', $titular['localidad_arr'])[0]);
		$titular['codigo_postal'] = '';
		if (strpos($titular['localidad_arr'], 'CP.') > 0) {
			$titular['codigo_postal'] = trim(explode('CP.', $titular['localidad_arr'])[1]);
		}
		return $titular;
	}


	public static function SFLegal() {
		$ruta_files = '/var/www/html/backend2/storage/sflegal/juicios/';
		$files = scandir($ruta_files);
		$texto = [];
		foreach ($files as $k => $file) {
			$texto = [];
			if ($file != '.' && $file != '..' && $file != '0' && $file != 'procesados' && $file != 'error' && $file != 'cifs6ec2' && $file != 'cifs9182') {
				$fn = file_get_contents($ruta_files . $file);
				$lineas = explode("\r\n", $fn);
				foreach ($lineas as $key => $linea) {
					$pos1 = strpos($linea, '... ');
					$pos2 = strpos($linea, 'Términos encontrados');
					if ($pos1 === false && $pos2 === false) {
						$texto[] = $linea;
					}

				}

				foreach ($texto as $key => $linea) {
					$autos = '';
					$camara = '';
					$expediente = '';
					$localidad = '';
					$fecha_causa = '';
					$actor1 = '';
					$actor2 = '';
					$actor3 = '';
					$demandado1 = '';
					$demandado2 = '';
					$demandado3 = '';
					$actor_otros = '';
					$causa = '';
					$radicacion = '';
					$solo_actor = false;
					$autos = $linea;

					$find = strpos($linea, 'INCIDENTE DE IMPUGNACIÓN AL CONSEJO');
					if ($find !== false) {
						continue;
					}

					$find = strpos($linea, 'CÁMARA DE APELACIONES EN LO LABORAL');
					if ($find !== false) {
						$radicacion = 'LABORAL';
					}

					$find = strpos($linea, 'EN LO CIVIL Y COMERCIAL');
					if ($find !== false) {
						$radicacion = 'CIVIL Y COMERCIAL';
					}

					$find = strpos($linea, 'EN LO CIVIL Y COMERCIAL Y LABORAL');
					if ($find !== false) {
						$radicacion = 'CIVIL Y COMERCIAL Y LABORAL';
					}

					$find = strpos($linea, 'CIVIL, COMERCIAL Y LABORAL');
					if ($find !== false) {
						$radicacion = 'CIVIL Y COMERCIAL Y LABORAL';
					}

					$find = strpos($linea, 'CONTENCIOSO ADMINISTRATIVO');
					if ($find !== false) {
						$radicacion = 'CONTENCIOSO ADMINISTRATIVO';
					}

					$find = strpos($linea, 'CORTE SUPREMA DE JUSTICIA DE LA PROVINCIA');
					if ($find !== false) {
						$radicacion = 'CORTE SUPREMA DE JUSTICIA DE LA PROVINCIA';
					}

					$linea = str_ireplace('CÁMARA DE APELACIONES EN LO LABORAL ', '', $linea);
					$linea = str_ireplace('CÁMARA DE APELACIONES EN LO CIVIL, COMERCIAL Y LABORAL DE ', '', $linea);
					$linea = str_ireplace('CÁMARA DE APELACIÓN EN LO CIVIL, COMERCIAL Y LABORAL DE ', '', $linea);
					$linea = str_ireplace('CÁMARA DE APELACIÓN EN LO PENAL DE ', '', $linea);
					$linea = str_ireplace('CÁMARA DE APELACIONES EN LO LABORAL ', '', $linea);
					$linea = str_ireplace('CÁMARA DE LO CONTENCIOSO ADMINISTRATIVO N 1 - ', '', $linea);
					$linea = str_ireplace('CÁMARA DE LO CONTENCIOSO ADMINISTRATIVO N 2 - ', '', $linea);
					$linea = str_ireplace('CORTE SUPREMA DE JUSTICIA DE LA PROVINCIA DE ', '', $linea);
					$linea = str_ireplace(', SALA III ', '', $linea);
					$linea = str_ireplace(', SALA II ', '', $linea);
					$linea = str_ireplace(', SALA I ', '', $linea);
					$linea = str_ireplace(', SALA IV ', '', $linea);
					$linea = str_ireplace(', SALA V ', '', $linea);
					$linea = str_ireplace(', SALA VI ', '', $linea);
					$linea = str_ireplace(', SALA 2 ', '', $linea);
					$linea = str_ireplace(', SALA 1 ', '', $linea);
					$linea = str_ireplace(', SALA 3 ', '', $linea);
					$linea = str_ireplace(', SALA 4 ', '', $linea);
					$find = strpos($linea, 'RAFAELA - ');
					if ($find !== false) {
						$linea = str_ireplace('RAFAELA - ', '', $linea);
						$localidad = 'RAFAELA';
					}
					$find = strpos($linea, 'VENADO TUERTO - ');
					if ($find !== false) {
						$linea = str_ireplace('VENADO TUERTO - ', '', $linea);
						$localidad = 'VENADO TUERTO';
					}
					$find = strpos($linea, 'SANTA FE - ');
					if ($find !== false) {
						$linea = str_ireplace(' SANTA FE - ', '', $linea);
						$localidad = 'SANTA FE';
					}
					$find = strpos($linea, 'ROSARIO - ');
					if ($find !== false) {
						$linea = str_ireplace('ROSARIO - ', '', $linea);
						$localidad = 'ROSARIO';
					}

					$find = strpos($linea, '(EXPTE. ');
					if ($find !== false) {
						$explode_expte = explode('(EXPTE. ', $linea);
						$expediente = str_replace(')', '', $explode_expte[1]);
						$linea = str_replace('(EXPTE. ' . $expediente . ')', '', $linea);
						//echo $linea;
					}

					if (is_numeric($linea[0]) && is_numeric($linea[1]) && is_numeric($linea[3]) && is_numeric($linea[4]) && is_numeric($linea[6]) && is_numeric($linea[7]) && is_numeric($linea[8]) && is_numeric($linea[9])) {
						$fecha_causa = $linea[6] . $linea[7] . $linea[8] . $linea[9] . '-' . $linea[3] . $linea[4] . '-' . $linea[0] . $linea[1];
						$linea = str_ireplace(substr($linea, 0, 12), '', $linea);
					}
					$linea = trim($linea);


					$actores_demandados = explode('C/', $linea);
					if (sizeof($actores_demandados) == 1) {
						$solo_actor = true;
						$actor1 = explode('S/', $actores_demandados[0])[0];
					} else {
						$actores = $actores_demandados[0];
						$actores_separados = explode('Y', $actores);
						foreach ($actores_separados as $key_actor => $actor) {
							if ($key_actor == 0) {
								$actor1 = trim(str_replace("\"", "", str_replace(',', '', $actor)));
							}
							if ($key_actor == 1) {
								$actor2 = trim(str_replace("\"", "", str_replace(',', '', $actor)));
							}
							if ($key_actor == 2) {
								$actor3 = trim(str_replace("\"", "", str_replace(',', '', $actor)));
							}
						}
					}
					if (isset($actores_demandados[1]) && isset(explode('S/', $actores_demandados[1])[0]) && $solo_actor == false) {
						$demandados = explode('S/', $actores_demandados[1])[0];
						$demandados_separados = explode('Y', $demandados);

						foreach ($demandados_separados as $key_demandado => $demandado) {
							if ($key_demandado == 0) {
								$demandado1 = trim(str_replace("\"", "", str_replace(',', '', $demandado)));
							}
							if ($key_demandado == 1) {
								$demandado2 = trim(str_replace("\"", "", str_replace(',', '', $demandado)));
							}
							if ($key_demandado == 2) {
								$demandado3 = trim(str_replace("\"", "", str_replace(',', '', $demandado)));
							}
						}
					}

					if (isset($actores_demandados[1])) {
						$causa = explode('S/', $actores_demandados[1]);
						$causa = isset($causa[1]) ? trim($causa[1]) : '';
					}
					$res = SQLConnection::backendStoreProcedure('juicios_sf_legal', array($autos, $radicacion, $expediente, $actor1, $actor2, $demandado1, $demandado2, $demandado3
						, $fecha_causa, $causa, $file), true, false);
				}
			}
		}
	}

	private static function filterNumber($string) {
		$number = str_replace('-', '', str_replace('.', '', str_replace(',', '', $string)));
		return $number;
	}

	private static function filterDay($day) {
		$days = ['Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', '°', 'º'];
		$day = trim(str_replace($days, [''], $day));
		if ($day < 10) {
			$day = '0' . $day;
		}
		return $day;
	}

	private static function filterDNI($string) {
		$size = sizeOf($string);
		if ($size == 8) {
			return $string;
		}
		if ($size < 8) {
			return str_pad($string, 8, "0", STR_PAD_LEFT);
		}
		return false;
	}

	public static function SFLegalCYQ() {
		$ruta_files = '/var/www/html/backend2/storage/sflegal/Concursos y Quiebras/Año 2015/Rosario y Zona Sur/';
		$files = scandir($ruta_files);
		$texto = [];
		foreach ($files as $k => $file) {
			$texto = [];
			if ($file != '.' && $file != '..' && $file != '0' && $file != 'procesados' && $file != 'error' && $file != 'cifs6ec2' && $file != 'cifs9182') {
				$fn = file_get_contents($ruta_files . $file);
				$lineas = explode("\r\n", $fn);
				/*foreach($lineas as $key => $linea){
								   if ($pos1 === false && $pos2 === false) {
									   $texto[] = $linea;
								   }

							   }*/
				$months = [
					' de Enero de ' => '01',
					' de Febrero de ' => '02',
					' de Marzo de ' => '03',
					' de Abril de ' => '04',
					' de Mayo de ' => '05',
					' de Junio de ' => '06',
					' de Julio de ' => '07',
					' de Agosto de ' => '08',
					' de Septiembre de ' => '09',
					' de Setiembre de ' => '09',
					' de Octubre de ' => '10',
					' de Noviembre de ' => '11',
					' de Diciembre de ' => '12',
				];

				foreach ($lineas as $key => $linea) {
					foreach ($months as $key => $month) {
						$find = stripos(strtoupper($linea), strtoupper($key));
						if ($linea[0] == '(') {
							return 'continue';
						}
						if ($find !== false) {
							$mes = $month;
							$dia_año = explode($key, $linea);
							$año = $dia_año[1];
							$dia = self::filterDay($dia_año[0]);
							$fecha_publicacion = $año . '-' . $mes . '-' . $dia;
							break;
						}
					}
					$demandado = '';
					$cuit = '';
					$dni = '';
					$radicacion = '';
					$expediente = '';
					$cuij = '';
					if (isset($linea[0]) && (trim($linea[0]) == '(' || trim($linea) == '' || trim($linea) == 'Feria Judicial')) {
						continue;
					}
					//	print_r($linea);echo "<br>";
					$autos = $linea;
					$find = stripos($linea, '(EXPTE. ');
					if ($find !== false) {
						$explode_expte = explode('(EXPTE. ', strtoupper($linea));
						$expediente = str_replace(')', '', $explode_expte[1]);
						$linea = str_replace('(EXPTE. ' . $expediente . ')', '', $linea);
					}

					$find = stripos($linea, '(C.U.I.J. ');
					if ($find !== false) {
						$explode_expte = explode('(C.U.I.J. ', strtoupper($linea));
						$cuij = str_replace(')', '', $explode_expte[1]);
						preg_match("/[2][0-9]{1}.[0-9]{8}.[0-9]{1}/", $linea, $numeros);
						$cuij = self::filterNumber($numeros[0]);
					}

					if ($key < 20) {
						$linea_separada = explode(' - ', $linea);
						foreach ($linea_separada as $key => $value) {
							$find = stripos($linea, ' s/');
							if ($find !== false) {
								$causa = explode(' s/', $linea);
								$causa = $causa[1];
								$causa = explode(' (', $causa)[0];
								if (stripos($causa, 'Hoy Quiebra') !== false) {
									$causa = 'Quiebra decretada';
								} else {
									if (stripos($causa, ' -') !== false) {
										$causa = explode(' -', $causa)[0];
									}
								}
							}
							$find = stripos($linea, 'Juzgado');
							if ($find !== false) {

								$find = stripos($linea, 'EN LO CIVIL Y COMERCIAL');
								if ($find !== false) {
									$radicacion = 'CIVIL Y COMERCIAL';
								}

								$find = stripos($linea, 'EN LO CIVIL Y COMERCIAL Y LABORAL');
								if ($find !== false) {
									$radicacion = 'CIVIL Y COMERCIAL Y LABORAL';
								}

								$find = stripos($linea, 'CIVIL, COMERCIAL Y LABORAL');
								if ($find !== false) {
									$radicacion = 'CIVIL Y COMERCIAL Y LABORAL';
								}

								$find = stripos($linea, 'CONTENCIOSO ADMINISTRATIVO');
								if ($find !== false) {
									$radicacion = 'CONTENCIOSO ADMINISTRATIVO';
								}

								$find = stripos($linea, 'CORTE SUPREMA DE JUSTICIA DE LA PROVINCIA');
								if ($find !== false) {
									$radicacion = 'CORTE SUPREMA DE JUSTICIA DE LA PROVINCIA';
								}
							}
						}

						$matches = '';
						$find = stripos($linea, 'C.U.I.T.');
						if ($find !== false) {
							preg_match("/[3][0-9]{1}.[0-9]{8}.[0-9]{1}/", $linea, $matches);
							$tipo = 'CUIT';
							$cuit = self::filterNumber($matches);
						}
						$find = stripos($linea, 'D.N.I.');
						if ($find !== false) {
							preg_match("/[0-9]{1,2}.[0-9]{3}.[0-9]{3}/", $linea, $matches);
							$tipo = 'DNI';
							$dni = self::filterNumber($matches);
							$dni = self::filterDNI($dni[0]);
						}
						$demandado_causa = explode('s/', $linea);
						if (isset($demandado_causa[0]) && sizeOf($demandado_causa) > 1) {
							$demandado = trim(str_replace("\"", "", str_replace(',', '', $demandado_causa[0])));
						}
						/*var_dump($demandado);
											 var_dump($cuij);
											 var_dump($causa);
											 var_dump($cuit);
											 var_dump($dni);
											 var_dump($radicacion);
											 var_dump($expediente);
											 var_dump($autos);
											 var_dump ( '---------------');
				 */
					}
					$autos = '';
					$camara = '';
					$expediente = '';
					$localidad = '';
					$fecha_causa = '';
					$actor1 = '';
					$actor2 = '';
					$actor3 = '';
					$demandado1 = '';
					$demandado2 = '';
					$demandado3 = '';
					$actor_otros = '';
					$causa = '';
					$radicacion = '';
					$solo_actor = false;
				}
			}
		}
	}


}