public bool isValid(DocumentoModel doc) { bool valid = true; String xmlCaf = String.Empty; String cafDir = String.Empty; fileAdmin file = new fileAdmin(); string rut = doc.RUTEmisor; try { switch (doc.TipoDTE) { case 33: cafDir = @"C:\AdmToSii\cafs\" + rut + @"\factura\"; break; case 61: cafDir = @"C:\AdmToSii\cafs\" + rut + @"\notacredito\"; break; case 56: cafDir = @"C:\AdmToSii\cafs\" + rut + @"\notadebito\"; break; case 52: cafDir = @"C:\AdmToSii\cafs\" + rut + @"\Guia\"; break; case 34: cafDir = @"C:\AdmToSii\cafs\" + rut + @"\facturaexenta\"; break; } xmlCaf = file.nextFile(cafDir, "*.xml"); String xml = String.Empty; if (xmlCaf != null) { StreamReader objReader = new StreamReader(xmlCaf, System.Text.Encoding.Default, true); objReader.ToString(); xml = objReader.ReadToEnd(); } int start = xml.IndexOf("<TD") + 4; int end = xml.IndexOf("</TD>"); int largo = end - start; // Valida tipo de documento String td = xml.Substring(start, largo); if (td != doc.TipoDTE.ToString()) { valid = false; } start = xml.IndexOf("<FA>") + 4; end = xml.IndexOf("</FA>"); largo = end - start; // Valida FECHA de documento String fch = xml.Substring(start, largo); DateTime fchCaf = DateTime.ParseExact(fch, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture); DateTime fEmis = DateTime.ParseExact(fch, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture); if (fEmis > fchCaf) { valid = false; } start = xml.IndexOf("<D>") + 3; end = xml.IndexOf("</D>"); largo = end - start; String d = xml.Substring(start, largo); start = xml.IndexOf("<H>") + 3; end = xml.IndexOf("</H>"); largo = end - start; String h = xml.Substring(start, largo); // Valida Folio del documento dentro del rango CAF int ds = Convert.ToInt32(d); int hs = Convert.ToInt32(h); // TO DO: Descomentar esta linea para el proceso de producción // if (!((folio < hs) && (folio >ds)) ) valid = false; // OTRAS VALIDACIONES if (doc.CiudadRecep == null || doc.CiudadRecep == String.Empty) { valid = false; } if (doc.CmnaRecep == null || doc.CmnaRecep == String.Empty) { valid = false; } } catch (Exception e) { Console.WriteLine("The file CAF could not be read:"); Console.WriteLine(e.Message); } return(valid); }
public DocumentoModel lectura(String fileJson, bool moveFile, String dirOrigen) { DocumentoModel doc = new DocumentoModel(); fileAdmin file = new fileAdmin(); String fileName = String.Empty; if (dirOrigen == "") { dirOrigen = @"C:\AdmToSii\file"; } if (fileJson == "") { fileName = file.nextFile(dirOrigen, "*.json"); } else { fileName = dirOrigen + fileJson; } if (fileName != null) { StreamReader objReader = new StreamReader(fileName, System.Text.Encoding.Default, true); objReader.ToString(); String data = objReader.ReadToEnd(); DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(DocumentoModel)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(data)); try { doc = (DocumentoModel)js.ReadObject(ms); } catch (Exception e) { Console.WriteLine(e.Message); // MessageBox.Show("Error de lectura JSON"+ e.Message); } // Datos del Emisor // Cargo datos en laclase Documento desde sqlite string oc = bd.GetOC(); if (oc == "True") { doc.NroOrdenCompra = Convert.ToInt32(getOrdenCompra(data)); doc.NroCita = getNroCita(data); doc.Sello = getSello(data); } if (doc.RUTEmisor == null) { try { SQLiteConnection myConn = bd.ConnectSqlite(); myConn.Open(); string sql = "select * from empresa"; SQLiteCommand command = new SQLiteCommand(sql, myConn); SQLiteDataReader reader = command.ExecuteReader(); while (reader.Read()) { doc.RUTEmisor = reader["RutEmisor"].ToString(); doc.RznSoc = reader["RznSoc"].ToString(); doc.GiroEmis = reader["GiroEmis"].ToString(); doc.Telefono = reader["Telefono"].ToString(); doc.CorreoEmisor = reader["CorreoEmisor"].ToString(); doc.Acteco = Convert.ToInt32(reader["Acteco"]); doc.CdgSIISucur = Convert.ToInt32(reader["CdgSIISucur"]); doc.DirMatriz = reader["DirMatriz"].ToString(); doc.CmnaOrigen = reader["CmnaOrigen"].ToString(); doc.CiudadOrigen = reader["CiudadOrigen"].ToString(); doc.DirOrigen = reader["DirOrigen"].ToString(); doc.NombreCertificado = reader["NomCertificado"].ToString(); doc.SucurEmisor = reader["SucurEmisor"].ToString(); doc.FchResol = reader["FchResol"].ToString(); doc.RutEnvia = reader["RutCertificado"].ToString(); doc.NumResol = reader["NumResol"].ToString(); doc.CondEntrega = reader["CondEntrega"].ToString(); } myConn.Close(); } catch (Exception e) { Console.WriteLine("ERROR: {0}", e.ToString()); } } else { try { SQLiteConnection myConn = bd.ConnectSqlite(); //myConn.Open(); string sql = "select * from empresa where empresa.RutEmisor = '" + doc.RUTEmisor.ToString() + "'"; SQLiteCommand command = new SQLiteCommand(sql, myConn); SQLiteDataReader reader = command.ExecuteReader(); while (reader.Read()) { doc.Telefono = reader["Telefono"].ToString(); doc.CorreoEmisor = reader["CorreoEmisor"].ToString(); doc.Acteco = Convert.ToInt32(reader["Acteco"]); doc.DirRegionalSII = reader["sucurSII"].ToString(); doc.DirMatriz = reader["DirMatriz"].ToString(); doc.NombreCertificado = reader["NomCertificado"].ToString(); doc.SucurEmisor = reader["SucurEmisor"].ToString(); doc.FchResol = reader["FchResol"].ToString(); doc.RutEnvia = reader["RutCertificado"].ToString(); doc.NumResol = reader["NumResol"].ToString(); doc.CondEntrega = reader["CondEntrega"].ToString(); doc.PrnMtoNeto = reader["PrnMtoNeto"].ToString(); doc.PrnTwoCopy = reader["PrnTwoCopy"].ToString(); } myConn.Close(); } catch (Exception e) { Console.WriteLine("ERROR: {0}", e.ToString()); } } objReader.Close(); ms.Close(); if (moveFile) { file.mvFile(fileName, dirOrigen, "C:/AdmToSii/fileProcess/"); } CafModel caf = new CafModel(); if (!caf.isValid(doc)) { doc = null; } if (fileJson == "") { doc.fileName = fileName; } else { doc.fileName = fileJson; } return(doc); } else { return(null); } }