private void Awake() { var settings = MainSettings.Load(); if (settings != null) { this.settings = settings; } }
static void Main(string[] args) { FileName = FileLocation = DocumentName = DocumentType = RucNumber = SummaryDate = ""; //Variables que se usaran dentro del proceso de Validacion/GeneracionXML/IngresoBD List <string> DataTXT = new List <string>(); DateTime hi = DateTime.Now; // Inicializa Configuración Inicial MainSettings MS = new MainSettings(); GeneraLog = MS.GeneraLog; GeneraLog.LecturaArchivo("= = = = INICIO DE LECTURA DE ARCHIVO = = ="); // Verificamos si es que la ruta está en args[] if (args.Length < 1) { args = new string[1]; GeneraLog.LecturaArchivo(": : MODO MANUAL"); GeneraLog.LecturaArchivo("Ingrese el nombre del archivo a procesar: "); args[0] = Console.ReadLine(); GeneraLog.LecturaArchivo("Nombre del archivo ingresado manualmente: " + args[0]); } // Armamos la ruta y nombre del archivo MS.FileName = FileName = args[0]; MS.FileLocation = FileLocation = MS.ITXT + FileName; // Si es que el FileName es vacío if (args[0].Length == 0) { GeneraLog.LecturaArchivo($"No se ha ingresado nombre del archivo a Procesar"); GeneraLog.LecturaArchivo("= = = = FIN DE LECTURA DE ARCHIVO = = =\n"); GeneraLog.RegistraError(FileName); goto EndProgram; } GeneraLog.LecturaArchivo($"Ruta completa del Archivo a Verificar:{MS.ITXT + args[0]}"); // bool archivoTxt = File.Exists(FileLocation+".txt"); // Ahora verificamos que el archivo indicado exista. if (!File.Exists(FileLocation)) { GeneraLog.LecturaArchivo($"Archivo en: {FileLocation} no existe"); GeneraLog.LecturaArchivo("= = = = FIN DE LECTURA DE ARCHIVO = = =\n"); return; } if (!MS.ok) { if (File.Exists(MS.IERR + FileName)) { File.Delete(MS.IERR + FileName); } File.Move(FileLocation, MS.IERR + FileName); GeneraLog.LecturaArchivo("Se movió el archivo a la ruta " + MS.IERR + FileName); GeneraLog.RegistraError(FileName); goto EndProgram; } GeneraLog.LecturaArchivo($"Empezando a leer el archivo {FileName} "); using (StreamReader sr = new StreamReader(FileLocation, System.Text.Encoding.GetEncoding("ISO-8859-1"))) { ContentWriteRC_In = string.Empty; string line = ""; while ((line = sr.ReadLine()) != null) { ContentWriteRC_In = line; line = line.Replace("§", "°"); line = line.Replace("¥", "Ñ"); DataTXT.Add(line); if (line.StartsWith("CABECERA-PRINCIPAL")) { DocumentType = line; } if (line.StartsWith("CABECERA-EMISOR")) { RucNumber = line; } } } if (DocumentType.ToString() != "") { string[] HTemp = DocumentType.Split('|'); string[] ETemp = RucNumber.Split('|'); try { int n; DocumentType = HTemp[1].Trim(); SummaryDate = HTemp[2]; if (!DocumentType.StartsWith("R")) { RucNumber = ETemp[2]; } else { RucNumber = HTemp[3]; } if (int.TryParse(DocumentType, out n)) { string docs = "01|03|07|08|20|40|RA|RC|RR"; if (docs.Contains(DocumentType)) { GeneraLog.LecturaArchivo("Documento detectado: " + DocumentType); } else { GeneraLog.LecturaArchivo("El tipo de documento del archivo no es válido"); if (File.Exists(MS.IERR + FileName)) { File.Delete(MS.IERR + FileName); } File.Move(FileLocation, MS.IERR + FileName); GeneraLog.LecturaArchivo("Se movió el archivo a la ruta " + MS.IERR + FileName); GeneraLog.RegistraError(FileName); goto EndProgram; } } else { if (DocumentType.StartsWith("R")) { SummaryDate = HTemp[2]; if (HTemp.Length > 4) { TypeRC = HTemp[4]; } else { TypeRC = "XGN"; } GeneraLog.LecturaArchivo("El archivo corresponde a un Resumen"); } } } catch (Exception e) { GeneraLog.LecturaArchivo("No se pudo obtener el tipo de documento del archivo"); if (File.Exists(MS.IERR + FileName)) { File.Delete(MS.IERR + FileName); } File.Move(FileLocation, MS.IERR + FileName); GeneraLog.LecturaArchivo($"Se movió el archivo a la ruta{MS.IERR + FileName}"); GeneraLog.RegistraError(FileName); goto EndProgram; } } else { GeneraLog.LecturaArchivo("Tag CABECERA-PRINCIPAL es obligatorio"); if (File.Exists(MS.IERR + FileName)) { File.Delete(MS.IERR + FileName); } File.Move(FileLocation, MS.IERR + FileName); GeneraLog.LecturaArchivo($"Se movió el archivo a la ruta{MS.IERR + FileName}"); GeneraLog.RegistraError(FileName); goto EndProgram; } MS.DocumentType = DocumentType; MS.SummaryDate = SummaryDate; if (!MS.Load(RucNumber)) { if (File.Exists(MS.IERR + FileName)) { File.Delete(MS.IERR + FileName); } File.Move(FileLocation, MS.IERR + FileName); GeneraLog.LecturaArchivo($"La empresa con el RUC:{RucNumber} no está habilitada"); GeneraLog.RegistraError(FileName); goto EndProgram; } GeneraLog.LecturaArchivo("= = = = FIN DE LECTURA DE ARCHIVO = = =\n"); // Inicia Validación en ingreso a base de datos VD = new Validation(MS); if (VD.ValidateInterface(DataTXT) || DocumentType.StartsWith("R")) { MS = VD.MS; MS.getFileNames(); XMLGeneration XML = new XMLGeneration(MS, VD); //bool res = (bool)XML.Generate(); //var list = (Extras.Common.Method.ListUtilClass)XML.Generate(TypeRC); var list = XML.Generate(TypeRC); //if ((bool)XML.Generate()) ItsCantDocs = 0; LowDocs = new List <RBoletasDetalle>(); LowDocs = list.ListBoletasLow; ItsCantDocs = list.CantDocs; //aqui ListNoteDocs = list.ListNotesDoc; if (list.Generate == true) { if (DocumentType.StartsWith("R")) { MS = XML.MS; } //var xd = new DatabaseIncome(MS).InsertInDatabase(XML.Document, new Extras.Common.Method.ListUtilClass()); var xd = new DatabaseIncome(MS).InsertInDatabase(XML.Document, list, TypeRC); if (xd) { DatabaseConnection DB = new DatabaseConnection(MS); GenerateMAILPDF(MS, DB, "2"); } if (File.Exists(MS.IPRC + FileName)) { File.Delete(MS.IPRC + FileName); } File.Move(FileLocation, MS.IPRC + FileName); goto EndProgram; } else { if (File.Exists(MS.IERR + FileName)) { File.Delete(MS.IERR + FileName); } File.Move(FileLocation, MS.IERR + FileName); GeneraLog.RegistraError(FileName); goto EndProgram; } } else { if (File.Exists(MS.IERR + FileName)) { File.Delete(MS.IERR + FileName); } File.Move(FileLocation, MS.IERR + FileName); GeneraLog.RegistraError(FileName); goto EndProgram; } EndProgram: DateTime hf = DateTime.Now; GeneraLog.LecturaArchivo("Duración : " + (hf - hi).TotalMinutes + " ms"); GeneraLog.LecturaArchivo("Fin del Proceso.."); GeneraLog.LecturaArchivo("-----------------------------------------------------"); GeneraLog.RegistraLog(FileName); //si se encontro documentos en estado anulado then escribe un txt para resumen de bajas //genera un nuevo txt //if(LowDocs.Count > 0 && !ContentWriteRC_In.Contains("ANS")) //{ // PathWriteRC_In = string.Empty; // PathWriteRC_In = Path.GetFullPath(Path.Combine(MS.IERR, "../../../")); // PathWriteRC_In += @"_ADE\in\" + FileName; // using (StreamWriter sw = new StreamWriter(PathWriteRC_In)) // { // sw.Write(ContentWriteRC_In + "|ANS"); // } //} if (ListNoteDocs.Count > 0) { PathWriteRC_In = string.Empty; PathWriteRC_In = Path.GetFullPath(Path.Combine(MS.IERR, "../../../")); PathWriteRC_In += @"_ADE\in\" + FileName; using (StreamWriter sw = new StreamWriter(PathWriteRC_In)) { sw.Write(ContentWriteRC_In + "|NCD"); } } else { if (ItsCantDocs > LowDocs.Count) { PathWriteRC_In = string.Empty; PathWriteRC_In = Path.GetFullPath(Path.Combine(MS.IERR, "../../../")); PathWriteRC_In += @"_ADE\in\" + FileName; using (StreamWriter sw = new StreamWriter(PathWriteRC_In)) { sw.Write(ContentWriteRC_In); } } else { if (LowDocs.Count > 0 && !ContentWriteRC_In.Contains("ANS")) { PathWriteRC_In = string.Empty; PathWriteRC_In = Path.GetFullPath(Path.Combine(MS.IERR, "../../../")); PathWriteRC_In += @"_ADE\in\" + FileName; using (StreamWriter sw = new StreamWriter(PathWriteRC_In)) { if (ContentWriteRC_In.Contains("NCD")) { ContentWriteRC_In = ContentWriteRC_In.Replace("NCD", "ANS"); } else { ContentWriteRC_In = ContentWriteRC_In + "|ANS"; } sw.Write(ContentWriteRC_In); } } } //if (LowDocs.Count > 0 && !ContentWriteRC_In.Contains("ANS")) //{ // PathWriteRC_In = string.Empty; // PathWriteRC_In = Path.GetFullPath(Path.Combine(MS.IERR, "../../../")); // PathWriteRC_In += @"_ADE\in\" + FileName; // using (StreamWriter sw = new StreamWriter(PathWriteRC_In)) // { // if (ContentWriteRC_In.Contains("NCD")) // { ContentWriteRC_In = ContentWriteRC_In.Replace("NCD", "ANS"); } // else // { ContentWriteRC_In = ContentWriteRC_In + "|ANS"; } // sw.Write(ContentWriteRC_In); // } //} } if (ItsCantDocs > 0) { PathWriteRC_In = string.Empty; PathWriteRC_In = Path.GetFullPath(Path.Combine(MS.IERR, "../../../")); PathWriteRC_In += @"_ADE\in\" + FileName; using (StreamWriter sw = new StreamWriter(PathWriteRC_In)) { sw.Write(ContentWriteRC_In); } } //EnvioSunat(MS); }
static void Main(string[] args) { // Inicializa Configuración Inicial MainSettings MS = new MainSettings(); if (!MS.ok) { return; } GeneraLog = MS.GeneraLog; GeneraLog.EnvioSunat01("= = = = INICIO DE ENVÍO A SUNAT = = = ="); // Verificamos si es que el nombre del documento está en args[] if (args.Length < 1) { //args = new string[2]; GeneraLog.EnvioSunat01(": : MODO MANUAL"); GeneraLog.EnvioSunat01("Ingrese el nombre del documento a procesar: "); args = Console.ReadLine().Split(' '); GeneraLog.EnvioSunat01("Nombre del documento ingresado manualmente: " + args[0]); } GeneraLog.EnvioSunat01("Nombre del Documento a envíar a SUNAT: " + args[0]); //DocumentName = "20544014189-RR-20171024-1"; DocumentName = args[0]; if (args.Length > 1) { if (args[1].ToUpper() == "Q") { isQuery = true; } } if (!Fill()) { return; } MS.DocumentName = DocumentName; MS.DocumentType = DocumentType; MS.RucNumber = RucNumber; MS.getFileNames(); if (MS.DocumentType.StartsWith("R")) { isSummary = true; if (MS.DocumentType == "RC") { SummaryType = "B"; } if (MS.DocumentType == "RA") { SummaryType = "A"; } if (MS.DocumentType == "RR") { SummaryType = "A"; } } string typedoc = string.Empty; if (MS.DocumentName.ToLower().Contains("r")) { if (MS.DocumentName.ToLower().Contains("rc-")) { typedoc = "B"; } if (MS.DocumentName.ToLower().Contains("ra-")) { typedoc = "A"; } if (MS.DocumentName.ToLower().Contains("rr-")) { typedoc = "A"; } } #region Validacion de RUC if (!MS.Load(RucNumber)) { if (MS.Envi == "") { GeneraLog.LecturaArchivo($"El Tipo de Documento {DocumentType} no está habilitado para el envío a Sunat"); GeneraLog.EnvioSunat01("= = = = FIN DE ENVÍO A SUNAT = = = ="); return; } else { GeneraLog.LecturaArchivo($"La empresa con el RUC:{RucNumber} no está habilitada"); GeneraLog.EnvioSunat01("= = = = FIN DE ENVÍO A SUNAT = = = ="); return; } } #endregion DatabaseConnection DB = new DatabaseConnection(MS); // Verificamos en la Base de Datos el numero de Documento ingresado int a = DB.SP_ObtenerDocumentoXML(DocumentName); MS = DB.MS; #region Error de Consulta if (a == -1) { GeneraLog.EnvioSunat01("Error al momento de consultar el documento"); } #endregion #region Documento no Existe else if (a == 0) { GeneraLog.EnvioSunat01($"El Documento {DocumentName} no existe en base de datos"); } #endregion #region Documento ya ha sido enviado else if (a == 1) { GeneraLog.EnvioSunat01($"El Documento {DocumentName} ya ha sido enviado a SUNAT"); } #endregion #region Documento puede ser enviado else if (a == 2) { GeneraLog.EnvioSunat01($"El Documento {DocumentName} está listo para ser enviado a SUNAT"); if (zipFile(DB, MS)) { GeneraLog.EnvioSunat01($"Documento comprimido en {MS.ZIPEFileLocation}"); SunatConnection SN = null; if ("20|40|RR".Contains(DocumentType)) { SN = new SunatConnection("Retenciones", MS); } else if ("01|07|08|RC|RA".Contains(DocumentType) && !DocumentSerie.StartsWith("B")) { SN = new SunatConnection("Documentos", MS); } else if ("03|".Contains(DocumentType) || DocumentSerie.StartsWith("B")) { if (MS.Envi == "HML") { SN = new SunatConnection("Documentos", MS); } } else { GeneraLog.EnvioSunat01($"Documento {DocumentType} no configurado en ambiente {MS.Envi}"); } //Thread.Sleep(5000); if (SN != null) { #region Consulta de Ticket if (isQuery) { Tuple <string, bool> XQ = null; XQ = SN.ObtenerEstadoUnit(MS.im); if (XQ.Item2) { #region my change if (XQ.Item1 != null && XQ.Item1.Length > 200)//valida que sea un xml { //aqui descomprime el cdr if (UnZipCDR(MS, XQ.Item1)) { //obtiene el codigo de respuesta en el cdr #region insert cdr and update document header var rs = ADE.Extras.Common.Method.Methods.Instance.GetActionCodeResponse_CDR(MS); switch (rs) { case "SOK": //ok case "OBS": //obsv { DB.SP_InsertaCDRResumen(CDR, MS.id, SummaryType); GeneraLog.EnvioSunat01("CDR guardado correctamente"); GetNotes(DB, MS); GeneraLog.EnvioSunat01("Documento ha sido aceptado correctamente por SUNAT"); //DB.addRSunatResponse(MS.id, "7", CDRmsg, MS.im, SummaryType); DB.addRSunatResponse(MS.id, "SOK", CDRmsg, MS.im, SummaryType); #region RA, RR NOTIFICACION string path = Directory.GetCurrentDirectory(); string pathlog = MS.LOGS + "7_NotificacionBaja.log"; //if (typedoc.Contains("A")) //{ var list = DB.Get_ListDocument_AN(MS.id); if (list.Count > 0) { foreach (var d in list) { if (d.TO.Length > 5 && d.TypeRC == "ANS") { var res = ADE.Extras.Common.Method.Methods.Instance.SendNotify(path, d); ADE.Extras.Common.Method.Methods.Instance.WriteLog(pathlog, "------------------------- INICIO -------------------------"); ADE.Extras.Common.Method.Methods.Instance.WriteLog(pathlog, "Enviando notificación de baja"); ADE.Extras.Common.Method.Methods.Instance.WriteLog(pathlog, "Documento : " + d.Num_CE); ADE.Extras.Common.Method.Methods.Instance.WriteLog(pathlog, "Email Destino: " + d.TO); ADE.Extras.Common.Method.Methods.Instance.WriteLog(pathlog, "Resultado : " + res); ADE.Extras.Common.Method.Methods.Instance.WriteLog(pathlog, "-------------------------- FIN ---------------------------"); ADE.Extras.Common.Method.Methods.Instance.ConsoleLog("------------------------- INICIO -------------------------"); ADE.Extras.Common.Method.Methods.Instance.ConsoleLog("Enviando notificación de baja"); ADE.Extras.Common.Method.Methods.Instance.ConsoleLog("Documento : " + d.Num_CE); ADE.Extras.Common.Method.Methods.Instance.ConsoleLog("Email Destino: " + d.TO); ADE.Extras.Common.Method.Methods.Instance.ConsoleLog("Resultado : " + res); ADE.Extras.Common.Method.Methods.Instance.ConsoleLog("-------------------------- FIN ---------------------------"); } } } //typedoc = string.Empty; //} #endregion break; } case "RCHZ": //rechazado { string item1 = string.Empty; if (XQ.Item1 != null && XQ.Item1.Length > 200) { item1 = "CDR"; } else { item1 = XQ.Item1; } DB.SP_InsertaCDRResumen(CDR, MS.id, SummaryType); GeneraLog.EnvioSunat01("CDR guardado correctamente"); GetNotes(DB, MS); GeneraLog.EnvioSunat01("Documento fue enviado pero tiene errores: " + item1); //DB.addRSunatResponse(MS.id, "6", CDRmsg, MS.im, SummaryType); DB.addRSunatResponse(MS.id, "SRE", CDRmsg, MS.im, SummaryType); break; } case "EXC": //exception { string item1 = string.Empty; if (XQ.Item1 != null && XQ.Item1.Length > 200) { item1 = "CDR"; } else { item1 = XQ.Item1; } GeneraLog.EnvioSunat01("Se detectaron excepciones al enviar el archivo: " + item1); break; } case "": //cuando no se obtuvo codigo del cdr { string item1 = string.Empty; if (XQ.Item1 != null && XQ.Item1.Length > 200) { item1 = "CDR"; } else { item1 = XQ.Item1; } GeneraLog.EnvioSunat01("El procedimiento no devolvio un cdr: " + item1); break; } } #endregion } else { GeneraLog.EnvioSunat01("Error al descomprimir cdr"); } } else { GeneraLog.EnvioSunat01("El procedimiento no devolvio un cdr: " + XQ.Item1); } #endregion //aqui va el unzip de consulta ticket //aqui ternima el unzip de consulta ticket } else { #region code 99 if (XQ.Item1 != null && XQ.Item1.Length > 200)//valida que sea un xml { if (UnZipCDR(MS, XQ.Item1)) { DB.SP_InsertaCDRResumen(CDR, MS.id, SummaryType); GeneraLog.EnvioSunat01("CDR guardado correctamente"); GetNotes(DB, MS); string item1 = string.Empty; if (XQ.Item1 != null && XQ.Item1.Length > 200) { item1 = "CDR"; } else { item1 = XQ.Item1; } GeneraLog.EnvioSunat01("Documento fue enviado pero tiene errores: " + item1); //DB.addRSunatResponse(MS.id, "6", CDRmsg, MS.im, SummaryType); DB.addRSunatResponse(MS.id, "SRE", CDRmsg, MS.im, SummaryType); } } else { string item1 = string.Empty; if (XQ.Item1 != null && XQ.Item1.Length > 200) { item1 = "CDR"; } else { item1 = XQ.Item1; } GeneraLog.EnvioSunat01("El proceso devolvio: " + item1 + ", " + XQ.Item2); } #endregion //GeneraLog.EnvioSunat01("El procedimiento no devolvio un cdr: " + XQ.Item1); //GeneraLog.EnvioSunat01("Resumen ha sido rechazado"); //descomentar //DB.addRSunatResponse(MS.id, "6", "", MS.im, SummaryType); //descomentar } } #endregion #region Envío a Sunat else { Tuple <string, bool> XA = null; if (isSummary) { XA = SN.EnviarResumen(ZIP, MS.ZIPEFileName); } else { XA = SN.EnviarDocumento(ZIP, MS.ZIPEFileName); } #region Envio Correcto if (XA.Item2) { #region Resumenes-solo se enviara hasta el ticket, if (isSummary) { //aqui quite una parte DB.addRSunatResponse(MS.id, "ESX", "", XA.Item1, SummaryType); //aqui termina } #endregion #region Documentos else { if (UnZipCDR(MS, XA.Item1)) { DB.SP_InsertaCDR(CDR, DocumentName, "3"); GeneraLog.EnvioSunat01("CDR guardado correctamente"); GetNotes(DB, MS); int SNCode; if (int.TryParse(CDRcod, out SNCode)) { if (SNCode == 0) { GeneraLog.EnvioSunat01("Documento ha sido aceptado correctamente por SUNAT"); var res = DB.SP_ActualizaEstado(MS.id, "7", DocumentName); if (res < 0) { DB.SP_ActualizaEstado(MS.id, "7", DocumentName); } GenerateMAILPDF(MS, DB, "7"); } if (SNCode >= 2000 && SNCode <= 3999) { GeneraLog.EnvioSunat01("Documento ha sido rechazado por SUNAT"); DB.SP_ActualizaEstado(MS.id, "6", DocumentName); GenerateMAILPDF(MS, DB, "6"); } if (SNCode >= 4000 || CDRnotes.Count > 0) { GeneraLog.EnvioSunat01("Documento fue aceptado pero tiene observaciones"); DB.SP_ActualizaEstado(MS.id, "5", DocumentName); GenerateMAILPDF(MS, DB, "5"); } } } else { GeneraLog.EnvioSunat01($"Se produjo un error en la descompresión del documento"); } } #endregion } #endregion #region Error/Excepcion de Envio else { int ErrCode; string ErrSunat = (XA.Item1.Length > 3 ? XA.Item1.Substring(XA.Item1.Length - 4, 4) : XA.Item1); #region Error Conocido if (int.TryParse(ErrSunat, out ErrCode)) { if (isSummary) { if (ErrCode >= 2000 && ErrCode <= 3999) { MS.GeneraLog.EnvioSunat01($"El Documento ha sido rechazado por Sunat"); //DB.addRSunatResponse(MS.id, "6", $"{ErrCode.ToString()} - El Documento ha sido rechazado por Sunat", "", SummaryType); DB.addRSunatResponse(MS.id, "SRE", $"{ErrCode.ToString()} - El Documento ha sido rechazado por Sunat", "", SummaryType); } } else { if ("20|40".Contains(DocumentType)) { if (ErrCode == 2282) { MS.GeneraLog.EnvioSunat01($"El Documento ya ha sido enviado a Sunat anteriormente"); MS.GeneraLog.EnvioSunat01($"Actualizando estado en Base de Datos"); DB.SP_ActualizaEstado(MS.id, "7", DocumentName); DB.SP_InsertaMensajeRespuesta(MS.id, "0", $"El Comprobante numero {DocumentSplit[2]}-{DocumentSplit[3]}, ha sido aceptado"); } else { if (ErrCode >= 2000 && ErrCode <= 3999) { MS.GeneraLog.EnvioSunat01($"El Documento ha sido rechazado por Sunat"); DB.SP_ActualizaEstado(MS.id, "6", DocumentName); //Cambio del dia 10-05-2018 DB.SP_InsertaMensajeRespuesta_2(MS.id, XA.Item1); GenerateMAILPDF(MS, DB, "6"); } } } else { DB.SP_ActualizaEstado(MS.id, "4", DocumentName); } } } #endregion #region Error Desconocido else { if (isSummary) { } else { DB.SP_ActualizaEstado(MS.id, "4", DocumentName); } } #endregion } #endregion } #endregion } } else { GeneraLog.EnvioSunat01($"Se produjo un error en la compresión del documento"); GeneraLog.EnvioSunat01("= = = = FIN DE ENVÍO A SUNAT = = = ="); return; } } #endregion GeneraLog.EnvioSunat01("= = = = FIN DE ENVÍO A SUNAT = = = ="); GeneraLog.RegistraLog(DocumentName + ".txt"); }