/** * * */ private static void saveAndValidate(Fallo fallo, Corte corte) { //Verificamos el numero de caracteres int numeroCaracteresTexto = int.Parse(Settings.Default.NumeroCaracteres); if (fallo.numeroCaracteres < numeroCaracteresTexto) { FirstTestCase.regLog("[Info] El fallo rol: " + fallo.rol + ", emitido por el tribunal " + corte.jurisdiccion + ", No cumple con el mínimo numero de caracteres (" + numeroCaracteresTexto + ")."); return; } //Realizamos la verificacion fallo, rol, tribunal //Devuelve true si el fallo ya se encuentra registrado en la base de datos if (fallo.Existe()) { FirstTestCase.regLog("[Info] El fallo rol: " + fallo.rol + ", emitido por el tribunal " + corte.jurisdiccion + ", Ya se encuentra registrado en la base de datos de acuerdo a su fecha, tribunal y rol."); return; } //Realizamos la verificacion de acuerdo a palabras claves en las partes string[] cortesExluir = new string[2] { "1", "8" }; if (!fallo.partes.ToLower().Contains("isapre") && cortesExluir.Contains(fallo.tribunal)) { FirstTestCase.regLog("El fallo ROL: " + fallo.rol + ", emitido por el tribunal " + corte.jurisdiccion + ",no contiene las palabras(Isapre) buscadas en sus partes [" + fallo.partes + "]"); return; } //Si el fallo no existe lo insertamos en la base if (!fallo.Save(log)) { FirstTestCase.regLog("[ERROR] No es posible grabar lo datos del fallo."); } }
/** * * */ internal int traerRegSinProcesar(Corte corte, string fecha) { SQLiteConnection con = this.crearConneccion(); try { List <Corte> cortes = new List <Corte>(); string query = string.Empty; query = "select count(*) from registro where fecha = '" + fecha + "' and idtribunal = " + corte.id + " and procesado = 0"; SQLiteCommand command = new SQLiteCommand(query, con); Int32 registros = Convert.ToInt32(command.ExecuteScalar()); con.Close(); return(registros); } catch (Exception ex) { if (con.State != System.Data.ConnectionState.Closed) { con.Close(); } return(0); } }
//Traemos las cortes a las cuales no se ha descargado su archivo excel de exportacion public List <Corte> traerTodas() { SQLiteConnection con = this.crearConneccion(); List <Corte> cortes = new List <Corte>(); try { string query = string.Empty; query = "select id, jurisdiccion, tribunal, modulo, fuentedocumento, loesid, codtribunalpj FROM tribunal order by id asc"; SQLiteCommand command = new SQLiteCommand(query, con); SQLiteDataReader reader = command.ExecuteReader(); while (reader.Read()) { Corte corte = new Corte(); corte.id = reader.GetInt32(0); corte.jurisdiccion = reader.GetString(1); corte.tribunal = reader.GetString(2); corte.modulo = reader.GetString(3); corte.fuentedocumento = reader.GetString(4); corte.loesid = reader.GetInt32(5); corte.codtribunalpj = reader.GetString(6); cortes.Add(corte); } reader.Close(); con.Close(); } catch (Exception ex) { if (con.State != System.Data.ConnectionState.Closed) { con.Close(); } } return(cortes); }
internal int traerImportados(Corte c, string fecha) { try { string query = string.Empty; query = "SELECT count(*) FROM FalloJuris3 as f where f.esmasivo=1 and falTribunal1 = " + c.loesid.ToString() + " and convert(varchar, f.falFecha, 103) = '" + fecha + "'"; SqlConnection con = new SqlConnection(Settings.Default.PJCS); con.Open(); SqlCommand command = new SqlCommand(query, con); Int32 resultados = Convert.ToInt32(command.ExecuteScalar()); con.Close(); return(resultados); } catch (Exception ex) { return(0); } }
/** * * */ private static void enviarEmail() { string emailBody = FirstTestCase.getTemplateXML(); string rowIndicador = string.Empty; IFormatProvider culture = new CultureInfo("es-ES", true); string fecha = DateTime.Today.AddDays(-1).ToString("dd/MM/yyyy", culture); emailBody = emailBody.Replace("[##Fecha##]", DateTime.Now.ToString("dd.MM.yyyy")); Corte cortesList = new Corte(); Registro registro = new Registro(); Fallo fallo = new Fallo(); emailBody = emailBody.Replace("[##Cola##]", registro.traerDocSinProcesar(fecha).ToString()); int totalCola = 0; int totalProcesados = 0; int totalImportados = 0; //las carpetas de cada corte int i = 0; foreach (Corte c in cortesList.traerTodas()) { int sinprocesar = registro.traerRegSinProcesar(c, fecha); totalCola += sinprocesar; int procesados = registro.traerProcesados(c, fecha); totalProcesados += procesados; int importados = fallo.traerImportados(c, fecha); totalImportados += importados; rowIndicador += FirstTestCase.getRowTemplate(i++, fecha, c.jurisdiccion, c.loesid.ToString(), sinprocesar, procesados, importados); } rowIndicador += FirstTestCase.getRowTemplate(i++, fecha, "Total", "0", totalCola, totalProcesados, totalImportados); emailBody = emailBody.Replace("[##FALLOS##]", rowIndicador); FirstTestCase.grabarEmail(emailBody); }
static void Main(string[] args) { log4net.Config.XmlConfigurator.Configure(); string pathExcel = Settings.Default.ExcelPath; /** * Vamos a extraer el estado diario * Rol * Partes * Fecha * Tribunal * Texto Completo */ //Folder donde ejecutar, validar argumentos //1.- Download Excels diarios //2.- Procesar Excels //3.- Procesar Cola string command = args[0]; switch (command) { //1.- Download Excels diarios case "1": Corte corteInfo = new Corte(); List <Corte> cortes = corteInfo.traerTodas(); IFormatProvider culture = new CultureInfo("es-ES", true); string fecha = DateTime.Today.AddDays(-1).ToString("dd/MM/yyyy", culture); foreach (Corte corte in cortes) { if (corte.tienePlanillaDiaria(fecha)) { continue; } Console.WriteLine("==================================================================="); Console.Write("Descargando planilla: " + corte.jurisdiccion); string docImportSrc = string.Empty; string excelDocPath = string.Empty; string fileName = string.Empty; try { //Tratamos de descargar el archivo using (WebClient webClient = new WebClient()) { docImportSrc = "https://www.pjud.cl/estado-diario?p_p_id=estadodiario_WAR_estadodiarioportlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_cacheability=cacheLevelPage&p_p_col_id=column-3&p_p_col_pos=1&p_p_col_count=2&_estadodiario_WAR_estadodiarioportlet_campoTribunal=" + corte.codtribunalpj + "&_estadodiario_WAR_estadodiarioportlet_cur=1&tipoArchivo=EXCEL&fechaComun=" + fecha + "&campoSecretaria=&codTribunal=" + corte.codtribunalpj; fileName = corte.jurisdiccion + "-" + fecha.Replace("/", "") + ".xls"; excelDocPath = @pathExcel + "\\" + fileName; webClient.DownloadFile(docImportSrc, @excelDocPath); } Console.WriteLine("........Ok"); } catch (Exception ex) { FirstTestCase.regLog("[Fatal Error]\r\n" + ex.Message + "\r\n" + ex.StackTrace + "\r\n" + ex.InnerException + "\r\n" + ex.Source); Console.WriteLine("........Fail"); //si no logra descargar no registra nada en la db continue; } Console.WriteLine("-Registramos en la base de datos"); Planilla planilla = new Planilla(); planilla.idtribunal = corte.id; planilla.fecha = fecha; planilla.ruta = fileName; if (planilla.Grabar()) { Console.WriteLine("Guardado...........................Ok"); } else { Console.WriteLine("Guardado.........................Fail"); } } break; //2.- Procesar Excels case "2": Planilla planillaInfo = new Planilla(); foreach (Planilla planilla in planillaInfo.traerSinProcesar()) { //Procesamos el excel e insertamos en la tabla registro if (planilla.cargarExcel()) { planilla.procesar = 1; planilla.Grabar(); } } break; //3.- Procesar Cola case "3": Registro registroInfo = new Registro(); List <Registro> registrosCola = registroInfo.traerSinProcesar(Settings.Default.DocumentosLote); //Limpiamos lod directorios //Principal pdf FirstTestCase.cleanWorkingDir(Settings.Default.PDFPath); Corte cortesList = new Corte(); //las carpetas de cada corte foreach (Corte c in cortesList.traerTodas()) { FirstTestCase.cleanWorkingDir(@Settings.Default.PathTxt + "\\" + c.loesid.ToString()); } foreach (Registro r in registrosCola) { Corte corte = new Corte(); corte.id = r.idtribunal; corte.traer(); try{ string fileName = string.Empty; string pdfDocPath = string.Empty; //Descargamos el archivo using (WebClient webClient = new WebClient()) { //Antes de hacer la descarga verificamos que el documento no este registrado en la base de datos de manera de optimizar el proceso Fallo fallo = new Fallo(); fallo.fecha = r.fecha; fallo.rol = r.rol; fallo.tribunal = corte.loesid.ToString(); if (fallo.Existe()) { FirstTestCase.regLog("El fallo ROL: " + r.rol + ", del tribunal " + corte.jurisdiccion + ", y fecha " + fallo.fecha + ", ya se encuentra registrado."); continue; } string falloImportSrc = "https://www.pjud.cl/estado-diario?p_p_id=estadodiario_WAR_estadodiarioportlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_cacheability=cacheLevelPage&p_p_col_id=column-3&p_p_col_pos=1&p_p_col_count=2&_estadodiario_WAR_estadodiarioportlet_campoTribunal=" + corte.codtribunalpj + "&_estadodiario_WAR_estadodiarioportlet_cur=1&crr_documento=" + r.traerNumerodocumento() + "&tipoModulo=" + corte.modulo + "&fuenteDocumento=" + corte.fuentedocumento; fileName = r.rol + "-" + r.ndocumento.ToString() + ".pdf"; pdfDocPath = @Settings.Default.PDFPath + "\\" + fileName; webClient.DownloadFile(falloImportSrc, pdfDocPath); FirstTestCase.regLog("El fallo ROL: " + r.rol + ", del tribunal " + corte.jurisdiccion + ", ha sido descargado"); ConvertFiles(r, corte, fileName); r.procesado = 1; r.Save(); } }catch (Exception ex) { FirstTestCase.regLog("El fallo ROL: " + r.rol + ", del tribunal " + corte.jurisdiccion + ", No ha podido ser descargado"); } } break; //3.- Procesar Cola case "4": FirstTestCase.enviarEmail(); break; } }
/** * * */ private static void ConvertFiles(Registro registro, Corte corte, string FileName) { bool procesar = false; string fileNameTxt = string.Empty; string path = Settings.Default.PDFPath; FileInfo file = new FileInfo(Settings.Default.PDFPath + "\\" + FileName); try { //Intentamos convertirlo en pdf FirstTestCase.regLog("Convirtiendo archivo:" + FileName); System.Diagnostics.Process pProcess = new System.Diagnostics.Process(); pProcess.StartInfo.FileName = @Settings.Default.PathToPdfToText; pProcess.StartInfo.Arguments = file.FullName; pProcess.StartInfo.UseShellExecute = false; pProcess.StartInfo.RedirectStandardOutput = true; pProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; pProcess.StartInfo.CreateNoWindow = true; //not diplay a windows pProcess.Start(); Console.WriteLine(pProcess.StandardOutput.ReadToEnd()); //The output result pProcess.WaitForExit(); fileNameTxt = file.FullName.Replace(file.Extension, "") + ".txt"; procesar = true; FirstTestCase.regLog(FileName + ", Tranformado a PDF"); }catch (Exception ex) { try{ //Tratamos de convertirlo en doc FirstTestCase.regLog("Convirtiendo archivo:" + file.Name); System.Diagnostics.Process pProcess = new System.Diagnostics.Process(); pProcess.StartInfo.FileName = @Settings.Default.PathToLibreOffice; pProcess.StartInfo.Arguments = " --convert-to txt --outdir " + file.FullName; pProcess.StartInfo.UseShellExecute = false; pProcess.StartInfo.RedirectStandardOutput = true; pProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; pProcess.StartInfo.CreateNoWindow = true; //not diplay a windows pProcess.Start(); Console.WriteLine(pProcess.StandardOutput.ReadToEnd()); //The output result pProcess.WaitForExit(); fileNameTxt = file.FullName.Replace(file.Extension, "") + ".txt"; procesar = true; FirstTestCase.regLog(FileName + ", Tranformado a DOC"); }catch (Exception exp) { fileNameTxt = file.FullName.Replace(file.Extension, "") + ".txt"; file.CopyTo(fileNameTxt); procesar = true; FirstTestCase.regLog(FileName + ", Tranformado a txt"); } } //Guardamos los datos en la base de datos if (File.Exists(fileNameTxt) && procesar == true) { try { //creamos el Fallo Fallo fallo = new Fallo(); fallo.tribunal = corte.loesid.ToString(); fallo.rol = registro.rol.Trim(); fallo.fecha = registro.fecha.Trim(); fallo.partes = registro.partes.Trim(); string fileNameTxtClean = @Settings.Default.PathTxt + "\\" + corte.loesid.ToString() + "\\" + fallo.rol + ".txt"; File.Copy(fileNameTxt, fileNameTxtClean, true); FirstTestCase.regLog("Limpiando archivo (" + file.Name + ")" + fileNameTxtClean); FirstTestCase.cleanFile(fileNameTxtClean, ref fallo); FirstTestCase.saveAndValidate(fallo, corte); } catch (Exception ex) { FirstTestCase.regLog(ex.Message + "\r\n" + ex.InnerException); FirstTestCase.regLog("[ERROR] Linea 380, posiblemente copy, delete, clean o save and validate"); } } else { FirstTestCase.regLog("[ERROR] El archivo " + fileNameTxt + ", no existe."); } }