Exemple #1
0
 public void get_maildata_sapstr(MAIL_DATA_BE mail, ref IRfcStructure p_maildata)
 {
     p_maildata.SetValue("UIDL", mail.UIDL);
     p_maildata.SetValue("MAIL", mail.MAIL);
     p_maildata.SetValue("DATUM", mail.DATUM);
     p_maildata.SetValue("ZTIME", mail.TIME);
     p_maildata.SetValue("FILES", mail.FILES);
     p_maildata.SetValue("SUBJECT", mail.SUBJECT);
     p_maildata.SetValue("CONTA", mail.CONTA);
 }
Exemple #2
0
        public string SAVE_MAIL_DATA(MAIL_DATA_BE mail_data, List <Attachment_BE> attachs, List <Relacionados> relacionados, SharedSettings.Settings settings)
        {
            byte[] pdf;
            try
            {
                //Establecemos conexion con SAP
                RfcConfigParameters rfc = SAP_Connection.GetParameters(settings);

                RfcDestination rfcDest = null;
                rfcDest = RfcDestinationManager.GetDestination(rfc);

                //Creamos repositorio para la función
                RfcRepository repo      = rfcDest.Repository;
                IRfcFunction  save_mail = repo.CreateFunction("Z_MAIL_SAVE");


                IRfcStructure p_maildata     = save_mail.GetStructure("P_MAILDATA");
                IRfcTable     p_attachments  = save_mail.GetTable("P_ATTACHMENTS");
                IRfcTable     p_relacionados = save_mail.GetTable("P_RELACIONADOS");


                get_maildata_sapstr(mail_data, ref p_maildata);

                get_mailattach_saptab(attachs, ref p_attachments);
                get_relacionados_saptab(relacionados, ref p_relacionados);

                //Ejecutamos la consulta
                save_mail.Invoke(rfcDest);

                pdf = save_mail.GetByteArray("FILEPDFGEN");
                IRfcStructure bapiret = save_mail.GetStructure("BAPIRET");

                //string res = save_mail.GetString("MSG");

                //Revisamos que la consulta haya sido exitosa
                if (pdf.Length > 0 && String.IsNullOrEmpty(attachs[0].PATHFILEPDF) == false)
                {
                    if (System.IO.File.Exists(attachs[0].PATHFILEPDF) == false)
                    {
                        System.IO.File.WriteAllBytes(attachs[0].PATHFILEPDF, pdf);
                    }
                }
                if (bapiret.GetString("TYPE") == "E")
                {
                    string mensajeError = bapiret.GetString("MESSAGE");
                    return(mensajeError); //Hubo un error
                }
                else
                {
                    return(""); //Guardado exitoso
                }
            }
            catch (RfcCommunicationException e)
            {
                throw e;
            }
            catch (RfcLogonException e)
            {
                // user could not logon...
                throw e;
            }
            catch (RfcAbapRuntimeException e)
            {
                // serious problem on ABAP system side...
                throw e;
            }
            catch (RfcAbapBaseException e)
            {
                // The function module returned an ABAP exception, an ABAP message
                // or an ABAP class-based exception...
                throw e;
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        private static void Procesar(FileInfo[] fileInfosxml, FileInfo[] fileInfospdf, string clase)
        {
            XmlDocument         xmlobj       = new XmlDocument();
            TimbreFiscalDigital timbre       = new TimbreFiscalDigital();
            Comprobante         comprobante  = new Comprobante();
            Comprobante2        comprobante2 = new Comprobante2();
            Nomina               nomina      = new Nomina();
            XmlSerializer        serializer;
            Pagos                pagos        = new Pagos();
            DataLayer            dataLayer    = new DataLayer();
            Attachment_BE        attach       = new Attachment_BE();
            List <Attachment_BE> attachments  = new List <Attachment_BE>();
            List <Relacionados>  relacionados = new List <Relacionados>();
            string               xml          = "";
            bool errorxml = false;

            MostrarMensajeConsola("Se encontraron " + fileInfosxml.Length + "XML y " + fileInfospdf.Length + " PDFs");
            for (int i = 0; i < fileInfosxml.Length; i++)
            {
                MostrarLinea("*");
                MostrarMensajeConsola((i + 1) + " de " + fileInfosxml.Length);
                MostrarMensajeConsola(fileInfosxml[i].Name);
                xmlobj.Load(new MemoryStream(cargaArch(fileInfosxml[i].Name, fileInfosxml, false)));
                attach.XML = xml = xmlobj.InnerXml;
                if (xml.Contains("Version=\"3.3\""))
                {
                    serializer  = new XmlSerializer(typeof(Comprobante));
                    comprobante = (Comprobante)serializer.Deserialize(new StringReader(xml));
                    serializer  = new XmlSerializer(typeof(TimbreFiscalDigital));
                    timbre      = (TimbreFiscalDigital)serializer.Deserialize(
                        new StringReader(comprobante.Complemento[0].Any.Where(x => x.LocalName == "TimbreFiscalDigital").Select(x => x.OuterXml).ToArray()[0]));
                    attach.Desc_Error = EstatusCFDI(comprobante.Emisor.Rfc, comprobante.Receptor.Rfc, comprobante.Total.ToString(), timbre.UUID);
                    attach.WRBTR      = decimal.Round(comprobante.Total, 2);
                    if (clase == "P")
                    {
                        attach.EXT = "XML";
                        if (xml.Contains("pago10:Pagos"))
                        {
                            serializer = new XmlSerializer(typeof(Pagos));
                            pagos      = (Pagos)serializer.Deserialize(
                                new StringReader(comprobante.Complemento[0].Any.Where(x => x.LocalName == "Pagos").Select(x => x.OuterXml).ToArray()[0]));
                            attach.WRBTR = decimal.Round(pagos.Pago.Sum(x => x.Monto), 2);
                        }
                    }
                    else if (clase == "C")
                    {
                        attach.EXT = "CTE";
                        if (xml.Contains("nomina12:Nomina"))
                        {
                            serializer = new XmlSerializer(typeof(Nomina));
                            nomina     = (Nomina)serializer.Deserialize(
                                new StringReader(comprobante.Complemento[0].Any.Where(x => x.LocalName == "Nomina").Select(x => x.OuterXml).ToArray()[0]));
                            attach.EXT = "NOM";
                        }
                    }
                    if (comprobante.Impuestos != null)
                    {
                        if (comprobante.Impuestos.TotalImpuestosRetenidos != 0)
                        {
                            attach.RETENCION = "X";
                        }
                    }
                    attach.RFC_VENDOR     = "X";
                    attach.RFC_COMPANY    = "X";
                    attach.WAERS          = comprobante.Moneda;
                    attach.FechaDocumento = comprobante.Fecha;
                    attach.SerFolio       = comprobante.Serie + " " + comprobante.Folio;
                    attach.BLDAT          = FechaFormatoSAP(comprobante.Fecha);
                    attach.FILE           = fileInfosxml[i].Name;
                    attach.RFC_VEND       = comprobante.Emisor.Rfc;
                    attach.RFC_COMP       = comprobante.Receptor.Rfc;
                    attach.XBLNR          = comprobante.Serie + comprobante.Folio;
                    attach.UUID_XML       = timbre.UUID.ToUpper();
                    if (clase == "P")
                    {
                        try
                        {
                            dataLayer.VALIDATE_XML(ref attach, comprobante.MetodoPago, settings);
                        }
                        catch (Exception e)
                        {
                            errorxml = true;
                            //MostrarMensajeConsola(e.Message, false);
                        }
                    }
                    relacionados.Clear();
                    if (pagos.Pago != null)
                    {
                        for (int j = 0; j < pagos.Pago.Length; j++)
                        {
                            if (pagos.Pago[j].DoctoRelacionado != null)
                            {
                                foreach (var relacionado in pagos.Pago[j].DoctoRelacionado)
                                {
                                    if (relacionados.Exists(x => x.UUID == relacionado.IdDocumento.ToUpper()) == false)
                                    {
                                        relacionados.Add(new Relacionados(
                                                             attach.BUKRS,
                                                             timbre.UUID.ToUpper(),
                                                             relacionado.IdDocumento.ToUpper(),
                                                             fileInfosxml[i].Name,
                                                             relacionado.ImpPagado,
                                                             relacionado.Folio,
                                                             relacionado.Serie,
                                                             relacionado.MonedaDR.ToString(),
                                                             relacionado.MetodoDePagoDR.ToString(),
                                                             ""
                                                             ));
                                    }
                                }
                            }
                            else
                            {
                                errorxml = true;
                                MostrarMensajeConsola("Coprobante de pago tiene estructura incorrecta");
                                break;
                            }
                        }
                    }
                    pagos = new Pagos();
                }
                else if (xml.Contains("Version=\"3.2\""))
                {
                    serializer        = new XmlSerializer(typeof(Comprobante2));
                    comprobante2      = (Comprobante2)serializer.Deserialize(new StringReader(xml));
                    serializer        = new XmlSerializer(typeof(TimbreFiscalDigital));
                    timbre            = (TimbreFiscalDigital)serializer.Deserialize(new StringReader(comprobante.Complemento[0].ToString()));
                    attach.Desc_Error = EstatusCFDI(comprobante2.Emisor.rfc, comprobante2.Receptor.rfc, comprobante2.total.ToString(), timbre.UUID);
                    if (comprobante2.Impuestos.totalImpuestosRetenidos != 0)
                    {
                        attach.RETENCION = "X";
                    }
                    attach.EXT            = "XML";
                    attach.RFC_VENDOR     = comprobante2.Emisor.rfc;
                    attach.RFC_COMPANY    = comprobante2.Receptor.rfc;
                    attach.WRBTR          = decimal.Round(comprobante2.total, 2);
                    attach.WAERS          = comprobante2.Moneda;
                    attach.FechaDocumento = comprobante2.fecha;
                    attach.SerFolio       = comprobante2.serie + " " + comprobante2.folio;
                    attach.BLDAT          = FechaFormatoSAP(comprobante2.fecha);
                    attach.FILE           = fileInfosxml[i].Name;
                    attach.RFC_VEND       = comprobante2.Emisor.rfc;
                    attach.RFC_COMP       = comprobante2.Receptor.rfc;
                    attach.XBLNR          = comprobante2.serie + comprobante2.folio;
                    attach.UUID_XML       = timbre.UUID.ToUpper();
                    if (clase == "P")
                    {
                        try
                        {
                            dataLayer.VALIDATE_XML(ref attach, comprobante2.metodoDePago, settings);
                        }
                        catch (Exception e)
                        {
                            errorxml = true;
                            //MostrarMensajeConsola(e.Message, false);
                        }
                    }
                }
                if (attach.Desc_Error.Contains("Vigente"))
                {
                    attach.SAT     = "X";
                    attach.RES_PDF = cargaArch(fileInfosxml[i].Name, fileInfospdf, true);
                }
                else
                {
                    attach.XML = "";
                }

                if (attach.RFC_COMPANY == "" && attach.RFC_VENDOR == "")
                {
                    attach.Desc_Error = attach.Desc_Error + "<@>" + "El RFC de la empresa y proveedor son incorrectos";
                    MostrarMensajeConsola("El RFC de la empresa y proveedor son incorrectos");
                }
                else
                {
                    if (attach.RFC_COMPANY == "")
                    {
                        attach.Desc_Error = attach.Desc_Error + "<@>" + "El RFC de la empresa es incorrecto";
                        MostrarMensajeConsola("El RFC de la empresa es incorrecto");
                    }
                    if (attach.RFC_VENDOR == "")
                    {
                        attach.Desc_Error = attach.Desc_Error + "<@>" + "El RFC del proveedor es incorrecto";
                    }
                }
                if (attach.XML != "")
                {
                    MAIL_DATA_BE mail_data = new MAIL_DATA_BE();
                    attachments.Add(attach);
                    string r = "";
                    if (errorxml == false)
                    {
                        try
                        {
                            r = dataLayer.SAVE_MAIL_DATA(mail_data, attachments, relacionados, settings);
                        }
                        catch (Exception e)
                        {
                            errorxml = true;
                            //MostrarMensajeConsola(e.Message, false);
                        }
                    }
                    if (errorxml == false)
                    {
                        MostrarMensajeConsola("Información guardada en SAP");
                        Mover(fileInfosxml[i], attach.EXT, true);
                        if (fileInfospdf.Length > 0)
                        {
                            FileInfo info = fileInfospdf.Where(x => x.Name.Substring(0, x.Name.Length - 4) == (fileInfosxml[i].Name.Substring(0, (fileInfosxml[i].Name.Length - 4)))).SingleOrDefault();
                            if (info != null)
                            {
                                Mover(info, attach.EXT, true);
                            }
                        }
                    }
                    else
                    {
                        MostrarMensajeConsola(r);
                        Mover(fileInfosxml[i], attach.EXT, false);
                        if (fileInfospdf.Length > 0)
                        {
                            FileInfo info = fileInfospdf.Where(x => x.Name.Substring(0, x.Name.Length - 4) == (fileInfosxml[i].Name.Substring(0, (fileInfosxml[i].Name.Length - 4)))).SingleOrDefault();
                            if (info != null)
                            {
                                Mover(info, attach.EXT, false);
                            }
                        }
                    }
                    attachments.Clear();
                }
                else
                {
                    Mover(fileInfosxml[i], attach.EXT, false);
                    if (fileInfospdf.Length > 0)
                    {
                        FileInfo info = fileInfospdf.Where(x => x.Name.Substring(0, x.Name.Length - 4) == (fileInfosxml[i].Name.Substring(0, (fileInfosxml[i].Name.Length - 4)))).SingleOrDefault();
                        if (info != null)
                        {
                            Mover(info, attach.EXT, false);
                        }
                    }
                }
                attach = new Attachment_BE();
                MostrarLinea("*");
                errorxml = false;
            }
        }