Exemple #1
0
        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);
        }
Exemple #2
0
        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");
        }
Exemple #3
0
        public bool GenerateXML()
        {
            bool isGenerated = false;

            RAD = DBConnection.ObtieneResumenAnulados();

            if (RAD.Count == 0)
            {
                MS.GeneraLog.IngresoBD01($"No se obtuvieron documentos anulados de la fecha {MS.SummaryDate}");
                return(false);
            }

            RAC.TOT_DOC = RAD.Count;

            //getDocumentName(RAC.FEC_REF.ToString("yyyy-MM-dd"));
            getDocumentName(Convert.ToDateTime(MS.SummaryDate).ToString("yyyy-MM-dd"));

            MS.getFileNames();

            try
            {
                MS.GeneraLog.GeneracionXML("-----  Inicio de Generación de Archivo: " + MS.XMLIFileLocation);
                XmlSerializer           mySerializer = new XmlSerializer(typeof(VoidedDocumentsType));
                XmlSerializerNamespaces ns           = getNamespaces();
                XmlWriterSettings       setting      = getSettings();

                VoidedDocumentsType voi = new VoidedDocumentsType();

                voi.AccountingSupplierParty = getSupplierPartyType();
                voi.Signature       = getSignatureType();
                voi.UBLVersionID    = getUBLVersionID();
                voi.CustomizationID = getCustomizationID();
                voi.ID = getID();
                //voi.IssueDate = getIssueDate();
                voi.ReferenceDate = getReferenceDate();
                voi.IssueDate     = getIssueDate(voi.ReferenceDate.Value);

                voi.VoidedDocumentsLine = getVoidedDocumentsLine();
                voi.UBLExtensions       = getUBLExtensions();

                StringWriterWithEncoding iso88591StringWriter = new StringWriterWithEncoding(ISO_8859_1);
                XmlSerializer            serializer           = new XmlSerializer(typeof(VoidedDocumentsType));
                XmlWriter writerx = XmlWriter.Create(iso88591StringWriter, setting);
                serializer.Serialize(writerx, voi, ns);

                XMLI = iso88591StringWriter.ToString();

                XMLI = XMLI.Replace("&lt;", "<");
                XMLI = XMLI.Replace("&gt;", ">");
                XMLI = XMLI.Replace("&amp;", "&");

                using (StreamWriter sw = new StreamWriter(MS.XMLIFileLocation, false, ISO_8859_1))
                {
                    sw.Write(XMLI);
                }

                SXMLI = GenerateStreamFromString(XMLI);

                isGenerated = true;
            }
            catch (Exception ex)
            {
                MS.GeneraLog.GeneracionXML("Ocurrió un error al momento de generar el XML Inicial");
                MS.GeneraLog.GeneracionXML("Error: " + ex.Message);
            }
            return(isGenerated);
        }
        public bool GenerateXML()
        {
            bool isGenerated = false;

            InsertaTC();
            RBD = ordenaResumen();
            if (RBD.Count == 0)
            {
                MS.GeneraLog.IngresoBD01($"No se obtuvieron boletas y/o documentos asociados de la fecha {MS.SummaryDate}");
                return(false);
            }
            else
            {
                if (!DBConnection.ExchangueRateExists && DBConnection.DocumentDolarExists)
                {
                    MS.GeneraLog.IngresoBD01($"No se ha configurado el tipo de cambio para el día {MS.SummaryDate}");
                    return(false);
                }
            }

            getDocumentName();
            MS.getFileNames();

            try
            {
                MS.GeneraLog.GeneracionXML("-----  Inicio de Generación de Archivo: " + MS.XMLIFileLocation);
                XmlSerializer           mySerializer = new XmlSerializer(typeof(SummaryDocumentsType));
                XmlSerializerNamespaces ns           = getNamespaces();
                XmlWriterSettings       setting      = getSettings();

                SummaryDocumentsType sum = new SummaryDocumentsType();

                sum.AccountingSupplierParty = getSupplierPartyType();
                sum.Signature       = getSignatureType();
                sum.UBLVersionID    = getUBLVersionID();
                sum.CustomizationID = getCustomizationID();
                sum.ID                   = getID();
                sum.IssueDate            = getIssueDate();
                sum.ReferenceDate        = getReferenceDate();
                sum.Note                 = getNote();
                sum.SummaryDocumentsLine = getSummaryDocumentsLine();
                sum.UBLExtensions        = getUBLExtensions();

                StringWriterWithEncoding iso88591StringWriter = new StringWriterWithEncoding(ISO_8859_1);
                XmlSerializer            serializer           = new XmlSerializer(typeof(SummaryDocumentsType));
                XmlWriter writerx = XmlWriter.Create(iso88591StringWriter, setting);
                serializer.Serialize(writerx, sum, ns);

                XMLI = iso88591StringWriter.ToString();

                XMLI = XMLI.Replace("&lt;", "<");
                XMLI = XMLI.Replace("&gt;", ">");
                XMLI = XMLI.Replace("&amp;", "&");

                using (StreamWriter sw = new StreamWriter(MS.XMLIFileLocation, false, ISO_8859_1))
                {
                    sw.Write(XMLI);
                }

                SXMLI = GenerateStreamFromString(XMLI);

                isGenerated = true;
            }
            catch (Exception ex)
            {
                MS.GeneraLog.GeneracionXML("Ocurrió un error al momento de generar el XML Inicial");
                MS.GeneraLog.GeneracionXML("Error: " + ex.Message);
            }
            return(isGenerated);
        }
        //public bool GenerateXML()
        public Extras.Common.Method.ListUtilClass GenerateXML(string TypeRC)
        {
            //ListDocs.ListBoletas = new List<RBoletasDetalle>();
            ListDocs = new Extras.Common.Method.ListUtilClass();
            bool isGenerated = false;

            //InsertaTC(); exchange rate
            RBD = ordenaResumen(TypeRC);
            var temp = new List <RBoletasDetalle>();

            var temp_XGN = new List <RBoletasDetalle>();
            var temp_NCD = new List <RBoletasDetalle>();
            var temp_ANS = new List <RBoletasDetalle>();

            foreach (var doc in RBD)
            {
                if (doc.SYSTEM_STATUS == "XGN")
                {
                    if (doc.SUMMARY == 0)
                    {
                        temp_XGN.Add(doc);
                    }
                }
                else if (doc.SYSTEM_STATUS == "ANS")
                {
                    if (doc.VOIDED == 0)
                    {
                        temp_ANS.Add(doc);
                    }

                    if (doc.SUMMARY == 0)
                    {
                        temp_XGN.Add(doc);
                    }
                }

                if (doc.TPO_CPE.Contains("07") || doc.TPO_CPE.Contains("08"))
                {
                    temp_NCD.Add(doc);
                }
            }

            if (TypeRC == "ANS")
            {
                //temp = temp_ANS;

                foreach (var ans in temp_ANS)
                {
                    if (ans.STATUS_RC_DOC != 3)
                    {
                        temp.Add(ans);
                    }
                }
            }
            else if (TypeRC == "XGN")
            {
                foreach (var d in temp_XGN)
                {
                    if (!d.TPO_CPE.Contains("07") && !d.TPO_CPE.Contains("08") && d.STATUS_RC_DOC < 1)
                    {
                        temp.Add(d);
                    }
                }

                if (temp_NCD.Count > 0)
                {
                    ListDocs.ListNotesDoc = temp_NCD;
                }

                //if(temp_ANS.Count > 0)
                //{
                //    ListDocs.ListBoletasLow = temp_ANS;
                //}
                //ListDocs.ListBoletasLow = temp_ANS;
                ListDocs.ListBoletasLow.Add(new RBoletasDetalle()
                {
                    NUM_CPE = ""
                });
            }
            else
            {
                foreach (var ncd in temp_NCD)
                {
                    if (ncd.STATUS_RC_DOC <= 1)
                    {
                        temp.Add(ncd);
                    }
                }

                //temp = temp_NCD;

                //if (temp_ANS.Count > 0)
                //{
                //    ListDocs.ListBoletasLow = temp_ANS;
                //}
                //ListDocs.ListBoletasLow = temp_ANS;
                ListDocs.ListBoletasLow.Add(new RBoletasDetalle()
                {
                    NUM_CPE = ""
                });
            }

            #region old
            ////if (TypeRC == "ANS")
            ////{
            ////    foreach (var b in RBD)
            ////    {
            ////        if (b.SYSTEM_STATUS.Contains(TypeRC) && b.VOIDED == 0) { temp.Add(b); }
            ////    }
            ////}
            ////else if (TypeRC == "NCD")
            ////{
            ////    foreach (var b in RBD)
            ////    {
            ////        if (b.SYSTEM_STATUS.ToUpper().Contains("ANS"))
            ////        {
            ////            ListDocs.ListBoletasLow.Add(b);
            ////        }

            ////        if (!b.TPO_CPE.Contains("03") && (b.SUMMARY <= 0))
            ////        {
            ////            temp.Add(b);
            ////        }
            ////    }
            ////}
            ////else
            ////{
            ////    foreach (var b in RBD)
            ////    {
            ////        if (b.SYSTEM_STATUS.ToUpper().Contains("ANS"))
            ////        {
            ////            ListDocs.ListBoletasLow.Add(b);
            ////        }

            ////        if (b.TPO_CPE == "07" || b.TPO_CPE == "08")
            ////        {
            ////            ListDocs.ListNotesDoc.Add(b);
            ////        }

            ////        if (b.SUMMARY == 0 && !b.TPO_CPE.Contains("07") && !b.TPO_CPE.Contains("08"))
            ////        {
            ////            temp.Add(b);
            ////        }
            ////    }
            ////}
            //if (TypeRC == "ANS")
            //{
            //    foreach (var b in RBD)
            //    {
            //        if (b.SYSTEM_STATUS.Contains(TypeRC) && b.VOIDED == 0)
            //        {
            //            temp.Add(b);
            //        }
            //    }
            //}
            //else
            //{
            //    foreach (var b in RBD)
            //    {
            //        if (b.SYSTEM_STATUS.ToUpper().Contains("ANS"))
            //        {
            //            ListDocs.ListBoletasLow.Add(b);
            //        }

            //        if (b.SUMMARY == 0)
            //        {
            //            temp.Add(b);
            //        }

            //        if (b.TPO_CPE == "07" || b.TPO_CPE == "08")
            //        {
            //            ListDocs.ListNotesDoc.Add(b);
            //        }
            //    }
            //}

            //foreach (var b in RBD)
            //{
            //if (b.SYSTEM_STATUS.ToUpper().Contains("ANS"))
            //{
            //    ListDocs.ListBoletasLow.Add(b);
            //}
            //if (b.SYSTEM_STATUS.ToUpper().Contains(TypeRC))
            //{
            //    temp.Add(b);
            //}
            //}
            #endregion

            #region old cant
            //if (temp.Count > 1000)
            //{
            //    var tmp = new List<RBoletasDetalle>();
            //    for (int i = 0; i < 1000; i++)
            //    {
            //        tmp.Add(temp[i]);
            //    }
            //    RBD = tmp;
            //    ListDocs.CantDocs = temp.Count - 1000;
            //}
            //else
            //{
            //    RBD = temp;
            //}
            #endregion

            if (temp.Count > 500)
            {
                var tmp = new List <RBoletasDetalle>();
                for (int i = 0; i < 500; i++)
                {
                    tmp.Add(temp[i]);
                }
                RBD = tmp;
                ListDocs.CantDocs = temp.Count - 500;
            }
            else
            {
                RBD = temp;
            }


            if (RBD.Count == 0)
            {
                MS.GeneraLog.IngresoBD01($"No se obtuvieron boletas y/o documentos asociados de la fecha {MS.SummaryDate}");
                //return false;
                return(ListDocs);
            }
            else
            {
                if (!DBConnection.ExchangueRateExists && DBConnection.DocumentDolarExists)
                {
                    MS.GeneraLog.IngresoBD01($"No se ha configurado el tipo de cambio para el día {MS.SummaryDate}");
                    //return false;
                    return(ListDocs);
                }
            }

            getDocumentName();
            MS.getFileNames();

            try
            {
                MS.GeneraLog.GeneracionXML("-----  Inicio de Generación de Archivo: " + MS.XMLIFileLocation);
                XmlSerializer           mySerializer = new XmlSerializer(typeof(SummaryDocumentsType));
                XmlSerializerNamespaces ns           = getNamespaces();
                XmlWriterSettings       setting      = getSettings();

                SummaryDocumentsType sum = new SummaryDocumentsType();

                sum.AccountingSupplierParty = getSupplierPartyType();
                sum.Signature       = getSignatureType();
                sum.UBLVersionID    = getUBLVersionID();
                sum.CustomizationID = getCustomizationID();
                sum.ID                   = getID();
                sum.IssueDate            = getIssueDate();
                sum.ReferenceDate        = getReferenceDate();
                sum.Note                 = getNote();
                sum.SummaryDocumentsLine = getSummaryDocumentsLine(1, "", TypeRC);
                sum.UBLExtensions        = getUBLExtensions();

                StringWriterWithEncoding iso88591StringWriter = new StringWriterWithEncoding(ISO_8859_1);
                XmlSerializer            serializer           = new XmlSerializer(typeof(SummaryDocumentsType));
                XmlWriter writerx = XmlWriter.Create(iso88591StringWriter, setting);
                serializer.Serialize(writerx, sum, ns);

                XMLI = iso88591StringWriter.ToString();

                XMLI = XMLI.Replace("&lt;", "<");
                XMLI = XMLI.Replace("&gt;", ">");
                XMLI = XMLI.Replace("&amp;", "&");

                using (StreamWriter sw = new StreamWriter(MS.XMLIFileLocation, false, ISO_8859_1))
                {
                    sw.Write(XMLI);
                }

                SXMLI = GenerateStreamFromString(XMLI);

                isGenerated = true;
            }
            catch (Exception ex)
            {
                MS.GeneraLog.GeneracionXML("Ocurrió un error al momento de generar el XML Inicial");
                MS.GeneraLog.GeneracionXML("Error: " + ex.Message);
            }
            //return isGenerated;
            return(ListDocs);
        }