Example #1
0
 public ActionResult Error(ErrCode errcode, object data = null)
 {
     return(Json(new
     {
         code = (int)errcode,
         msg = errcode.ToString(),
         data = data
     }, JsonRequestBehavior.AllowGet));
 }
Example #2
0
        private static string[] InitFmlaErr()
        {
            Array ErrCodes = TCompactFramework.EnumGetValues(typeof(TFlxFormulaErrorValue));

            string[] Result = new string[64];             //It should be the real number but...
            foreach (TFlxFormulaErrorValue ErrCode in ErrCodes)
            {
                Result[(int)ErrCode] = rm.GetString("fm" + ErrCode.ToString());
            }

            return(Result);
        }
Example #3
0
        public string GetError()
        {
            if (Error != null)
            {
                return(Error.ToString());
            }
            switch (ErrCode)
            {
            case -1: return("Canceled");

            default: return(ErrCode.ToString());
            }
        }
Example #4
0
        public Error(ErrCode code, string userId = null, string detail = null)
        {
            char type = code.ToString().First();

            switch (type)
            {
            case 'S':
                Message = "[" + code.ToString() + "系統錯誤] 請通知管理員<*****@*****.**>";
                break;

            case 'N':
                Message = "[" + code.ToString() + "系統正常] " + detail + "\n來自: " + userId;
                break;

            case 'D':
                Message = "[" + code.ToString() + "資料庫異常] " + detail + "\n來自: " + userId;
                break;

            default:
                break;
            }
        }
Example #5
0
        public static IntPtr AcquireContext(string conName, string provName, ProvType provType, ContextFlag conFlag)
        {
            IntPtr  hProv;
            bool    retVal = Crypto.CryptAcquireContext(out hProv, conName, provName, (uint)provType, (uint)conFlag);
            ErrCode ec     = Error.HandleRetVal(retVal, ErrCode.NTE_BAD_KEYSET);

            if (ec == ErrCode.NTE_BAD_KEYSET)            //try creating a new key container
            {
                retVal = Crypto.CryptAcquireContext(out hProv, conName, provName, (uint)provType, (uint)ContextFlag.NEWKEYSET);
                ec     = Error.HandleRetVal(retVal);
            }
            if (hProv == IntPtr.Zero)
            {
                throw new Exception("bNb.Sec: " + ec.ToString());
            }
            return(hProv);
        }
Example #6
0
        public static IntPtr GetUserKey(IntPtr prov, KeySpec keySpec)
        {
            IntPtr  key;
            bool    retVal = NativeMethods.CryptGetUserKey(prov, (uint)keySpec, out key);
            ErrCode ec     = Error.HandleRetVal(retVal, ErrCode.NTE_NO_KEY);

            if (ec == ErrCode.NTE_NO_KEY)            //2148073485
            {
                retVal = NativeMethods.CryptGenKey(prov, (uint)keySpec, (uint)GenKeyParam.EXPORTABLE, out key);
                ec     = Error.HandleRetVal(retVal);
                //is this necessary? why not just use key from GenKey?
                //retVal = Crypto.CryptGetUserKey(prov, (uint) keySpec, out key);
            }
            if (key == IntPtr.Zero)
            {
                throw new Exception(ec.ToString());
            }
            return(key);
        }
Example #7
0
        public static ErrCode HandleRetVal(bool retVal, ErrCode [] expected)
        {
            ErrCode ec = ErrCode.SUCCESS;

            if (retVal == false)
            {
                uint lastErr = (uint)Marshal.GetLastWin32Error();
                ec = (ErrCode)lastErr;
                bool isExpected = false;
                foreach (ErrCode expect in expected)
                {
                    if (ec == expect)
                    {
                        isExpected = true;
                    }
                }
                if (isExpected == false)
                {
                    throw new Exception("bNb.Sec: " + ec.ToString());
                }
            }
            return(ec);
        }
Example #8
0
        /// <summary>
        /// INVALID_PARAMETER. call Context.AcquireContext with minimal values instead
        /// </summary>
        public static string GetDefaultProvider(ProvType provType, ProvDefaultFlag provDefFlag)
        {
            uint          reserved = 0;
            uint          flags    = (uint)provDefFlag;
            uint          dataLen  = 0;
            StringBuilder provName = new StringBuilder();
            bool          retVal   = Crypto.CryptGetDefaultProvider((uint)provType, ref reserved, flags, provName, ref dataLen);
            ErrCode       ec       = Error.HandleRetVal(retVal, ErrCode.MORE_DATA);

            if (ec == ErrCode.MORE_DATA)
            {
                provName = new StringBuilder((int)dataLen);
                retVal   = Crypto.CryptGetDefaultProvider((uint)provType, ref reserved, flags, provName, ref dataLen);
                ec       = Error.HandleRetVal(retVal);
            }
            string name = provName.ToString();

            if (name == null || name == String.Empty)
            {
                throw new Exception(ec.ToString());
            }
            return(name);
        }
Example #9
0
 public override string ToString()
 {
     return(string.Format("<Response><ErrCode>{0}</ErrCode><ErrDesc>{1}</ErrDesc></Response>", ErrCode.ToString(), ErrDesc));
 }
Example #10
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");
        }
Example #11
0
 public BIException(ErrCode code, string msg = "Ok")
     : base(code.ToString())
 {
     mCode = code;
     mMsg  = msg;
 }
Example #12
0
 public JsonResult(object Data, ErrCode Error = ErrCode.CMD_SUCCESS)
 {
     this.Data = Data;
     this.Result = Error == ErrCode.CMD_SUCCESS;
     this.Error = Error.ToString();
 }
Example #13
0
 public JsonResult(object Data, bool Result = true, ErrCode Error = ErrCode.CMD_SUCCESS)
 {
     this.Data = Data;
     this.Result = Result;
     this.Error = Error.ToString();
 }
Example #14
0
 private void Mba_Error(ErrCode ec)
 {
     Log("PRX_ERR: " + ec.ToString(), LogType.Critical);
 }