private void GenerateDocument()
        {
            DataSet data = parseXML(file);

            string eConnectConnectionString = string.Format("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog={1};Data Source={0};", this.server, this.db);

            string DOCID = GPHelper.InvoiceDOCID(this.StringConnection).Trim();


            //Now we create the eConnect XML Document
            XmlDocument eConnectXMLDocument = new XmlDocument();
            XmlNode     NodeeConnect;
            XmlNode     NodeSchema;
            XmlNode     taSopHdrNode;
            XmlNode     taSopLine_ItemsNode;
            XmlNode     taSopLineNode;
            XmlNode     taCreateSopPaymentInsertRecord_Items;
            XmlNode     taCreateSopPaymentInsertRecord;

            XmlNode NodeElement;

            if (data.Tables["HEADER"].Rows.Count > 0 && data.Tables["LINES"].Rows.Count > 0)
            {
                DataRow header = data.Tables["HEADER"].Rows[0];


                if (header["DOCID"].ToString().Length <= 0)
                {
                    DOCID = GPHelper.returnDOCID(this.StringConnection).Trim();
                }
                else
                {
                    DOCID = header["DOCID"].ToString();
                }

                if (header["DOCNUMBE"].ToString() == "")
                {
                    IEvent w = new WarningEvent("", "", "El documento no posee código, se intentará generar uno para proceder con el mismo.");
                    w.Publish();


                    header["DOCNUMBE"] = "";
                }
                NodeeConnect = eConnectXMLDocument.CreateElement("eConnect");
                NodeSchema   = eConnectXMLDocument.CreateElement("SOPTransactionType");

                //Header
                taSopHdrNode = eConnectXMLDocument.CreateElement("taSopHdrIvcInsert");

                NodeElement           = eConnectXMLDocument.CreateElement("SOPTYPE");
                NodeElement.InnerText = "3"; // INVOICE
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("DOCID");
                NodeElement.InnerText = DOCID;
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("DEFPRICING");
                NodeElement.InnerText = "1";
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("CREATETAXES");
                NodeElement.InnerText = "1";
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("DEFTAXSCHDS");
                NodeElement.InnerText = "1";
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("BACHNUMB");
                NodeElement.InnerText = DOCID + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year;
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("SOPNUMBE");
                NodeElement.InnerText = header["DOCNUMBE"].ToString();
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("ORIGNUMB");
                NodeElement.InnerText = header["ORIGNUMB"].ToString();
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("ORIGTYPE");
                NodeElement.InnerText = header["ORIGTYPE"].ToString();
                taSopHdrNode.AppendChild(NodeElement);

                if (header["TAXSCHID"].ToString().Length <= 0)
                {
                    NodeElement           = eConnectXMLDocument.CreateElement("TAXSCHID");
                    NodeElement.InnerText = this.ITBMS;
                    taSopHdrNode.AppendChild(NodeElement);
                }
                else
                {
                    NodeElement           = eConnectXMLDocument.CreateElement("TAXSCHID");
                    NodeElement.InnerText = header["TAXSCHID"].ToString();
                    taSopHdrNode.AppendChild(NodeElement);
                }


                NodeElement           = eConnectXMLDocument.CreateElement("FRTSCHID");
                NodeElement.InnerText = header["FRTSCHID"].ToString();
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("MSCSCHID");
                NodeElement.InnerText = header["MSCSCHID"].ToString();
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("SHIPMTHD");
                NodeElement.InnerText = header["SHIPMTHD"].ToString();
                taSopHdrNode.AppendChild(NodeElement);

                //if ((Decimal)header["TAXAMNT"] > 0)
                //{
                //    NodeElement = eConnectXMLDocument.CreateElement("TAXAMNT");
                //    NodeElement.InnerText = header["TAXAMNT"].ToString();
                //    taSopHdrNode.AppendChild(NodeElement);
                //}


                NodeElement           = eConnectXMLDocument.CreateElement("LOCNCODE");
                NodeElement.InnerText = header["LOCNCODE"].ToString();
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("DOCDATE");
                NodeElement.InnerText = DateTime.Parse(header["DOCDATE"].ToString()).Year + "-" + DateTime.Parse(header["DOCDATE"].ToString()).Month + "-" + DateTime.Parse(header["DOCDATE"].ToString()).Day;
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("FREIGHT");
                NodeElement.InnerText = header["FREIGHT"].ToString();
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("MISCAMNT");
                NodeElement.InnerText = header["MISCAMNT"].ToString();
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("TRDISAMT");
                NodeElement.InnerText = header["TRDISAMT"].ToString();
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("CUSTNMBR");
                NodeElement.InnerText = header["CUSTOMER"].ToString();
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("CSTPONBR");
                NodeElement.InnerText = header["CSTPONBR"].ToString();
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("SUBTOTAL");
                NodeElement.InnerText = header["SUBTOTAL"].ToString();
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("DOCAMNT");
                NodeElement.InnerText = header["DOCAMNT"].ToString();
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("SALSTERR");
                NodeElement.InnerText = header["SALSTERR"].ToString();
                taSopHdrNode.AppendChild(NodeElement);

                NodeElement           = eConnectXMLDocument.CreateElement("SLPRSNID");
                NodeElement.InnerText = header["SLPRSNID"].ToString();
                taSopHdrNode.AppendChild(NodeElement);


                #region Lines
                // Details

                taSopLine_ItemsNode = eConnectXMLDocument.CreateElement("taSopLineIvcInsert_Items");

                foreach (DataRow item in data.Tables["LINES"].Rows)
                {
                    taSopLineNode         = eConnectXMLDocument.CreateElement("taSopLineIvcInsert");
                    NodeElement           = eConnectXMLDocument.CreateElement("SOPTYPE");
                    NodeElement.InnerText = "3"; //return
                    taSopLineNode.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("DEFPRICING");
                    NodeElement.InnerText = "1";
                    taSopHdrNode.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("SOPNUMBE");
                    NodeElement.InnerText = header["DOCNUMBE"].ToString();
                    taSopLineNode.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("CUSTNMBR");
                    NodeElement.InnerText = header["CUSTOMER"].ToString();
                    taSopLineNode.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("DOCDATE");
                    NodeElement.InnerText = DateTime.Parse(header["DOCDATE"].ToString()).Year + "-" + DateTime.Parse(header["DOCDATE"].ToString()).Month + "-" + DateTime.Parse(header["DOCDATE"].ToString()).Day;
                    taSopLineNode.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("LOCNCODE");
                    NodeElement.InnerText = item["LOCNCODE"].ToString();
                    taSopLineNode.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("ITEMNMBR");
                    NodeElement.InnerText = item["ITEMNMBR"].ToString();
                    taSopLineNode.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("UNITPRCE");
                    NodeElement.InnerText = item["UNITPRCE"].ToString();
                    taSopLineNode.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("XTNDPRCE");
                    NodeElement.InnerText = item["XTNDPRCE"].ToString();
                    taSopLineNode.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("QUANTITY");
                    NodeElement.InnerText = item["QUANTITY"].ToString();
                    taSopLineNode.AppendChild(NodeElement);

                    //NodeElement = eConnectXMLDocument.CreateElement("QTYONHND");
                    //NodeElement.InnerText = item["QUANTITY"].ToString();
                    //taSopLineNode.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("MRKDNAMT");
                    NodeElement.InnerText = item["MRKDNAMT"].ToString();
                    taSopLineNode.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("UOFM");
                    NodeElement.InnerText = item["UOFM"].ToString();
                    taSopLineNode.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("USERDEF1");
                    NodeElement.InnerText = item["USERDEF1"].ToString();
                    taSopLineNode.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("USERDEF2");
                    NodeElement.InnerText = item["USERDEF2"].ToString();
                    taSopLineNode.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("USERDEF3");
                    NodeElement.InnerText = item["USERDEF3"].ToString();
                    taSopLineNode.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("USERDEF4");
                    NodeElement.InnerText = item["USERDEF4"].ToString();
                    taSopLineNode.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("USERDEF5");
                    NodeElement.InnerText = item["USERDEF5"].ToString();
                    taSopLineNode.AppendChild(NodeElement);

                    taSopLine_ItemsNode.AppendChild(taSopLineNode);
                }
                #endregion
                // Payments
                // Details
                Decimal totalPaid = 0;

                taCreateSopPaymentInsertRecord_Items = eConnectXMLDocument.CreateElement("taCreateSopPaymentInsertRecord_Items");

                foreach (DataRow item in data.Tables["PAYMENTS"].Rows)
                {
                    taCreateSopPaymentInsertRecord = eConnectXMLDocument.CreateElement("taCreateSopPaymentInsertRecord");
                    NodeElement           = eConnectXMLDocument.CreateElement("SOPTYPE");
                    NodeElement.InnerText = "3"; //return
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("SOPNUMBE");
                    NodeElement.InnerText = header["DOCNUMBE"].ToString();
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("CUSTNMBR");
                    NodeElement.InnerText = header["CUSTOMER"].ToString();
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);


                    NodeElement           = eConnectXMLDocument.CreateElement("DOCDATE");
                    NodeElement.InnerText = DateTime.Parse(item["DOCDATE"].ToString()).Year + "-" + DateTime.Parse(header["DOCDATE"].ToString()).Month + "-" + DateTime.Parse(header["DOCDATE"].ToString()).Day;
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("DOCAMNT");
                    NodeElement.InnerText = item["DOCAMNT"].ToString();
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    totalPaid += (Decimal)item["DOCAMNT"];

                    NodeElement           = eConnectXMLDocument.CreateElement("CHEKBKID");
                    NodeElement.InnerText = item["CHEKBKID"].ToString();
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("CARDNAME");
                    NodeElement.InnerText = item["CARDNAME"].ToString();
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("CHEKNMBR");
                    NodeElement.InnerText = item["CHEKNMBR"].ToString();
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("RCTNCCRD");
                    NodeElement.InnerText = item["RCTNCCRD"].ToString();
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    //NodeElement = eConnectXMLDocument.CreateElement("QTYONHND");
                    //NodeElement.InnerText = item["QUANTITY"].ToString();
                    //taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("AUTHCODE");
                    NodeElement.InnerText = item["AUTHCODE"].ToString();
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("EXPNDATE");
                    NodeElement.InnerText = ((DateTime)item["EXPNDATE"]).ToString("yyyy-MM-dd");
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("PYMTTYPE");
                    NodeElement.InnerText = item["PYMTTYPE"].ToString();
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("DOCNUMBR");
                    NodeElement.InnerText = item["DOCNUMBR"].ToString();
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("USRDEFND1");
                    NodeElement.InnerText = item["USERDEF1"].ToString();
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("USERDEF2");
                    NodeElement.InnerText = item["USERDEF2"].ToString();
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("USERDEF3");
                    NodeElement.InnerText = item["USERDEF3"].ToString();
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("USERDEF4");
                    NodeElement.InnerText = item["USERDEF4"].ToString();
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    NodeElement           = eConnectXMLDocument.CreateElement("USERDEF5");
                    NodeElement.InnerText = item["USERDEF5"].ToString();
                    taCreateSopPaymentInsertRecord.AppendChild(NodeElement);

                    taCreateSopPaymentInsertRecord_Items.AppendChild(taCreateSopPaymentInsertRecord);
                }

                NodeElement           = eConnectXMLDocument.CreateElement("PYMTRCVD");
                NodeElement.InnerText = totalPaid.ToString().Replace(",", ".").Replace(".", ".");
                taSopHdrNode.AppendChild(NodeElement);

                NodeSchema.AppendChild(taSopLine_ItemsNode);
                NodeSchema.AppendChild(taCreateSopPaymentInsertRecord_Items);
                NodeSchema.AppendChild(taSopHdrNode);

                // Document
                NodeeConnect.AppendChild(NodeSchema);
                eConnectXMLDocument.AppendChild(NodeeConnect);

                //Dim eConnectXMLDocString As String = eConnectXMLDocument.OuterXml;
                //MsgBox(eConnectXMLDocString)


                if (!GPHelper.eConnectSendToGP(eConnectXMLDocument.OuterXml, eConnectConnectionString))
                {
                    ((IEvent)(new ErrorEvent("", "", "Se detectó un error en la transacción e connect, se procederá con el rollback de la transación."))).Publish();
                    if (File.Exists(this.HistPathIn + "\\ERR_" + this.fname.Replace("\\", "")))
                    {
                        File.Delete(this.HistPathIn + "\\ERR_" + this.fname.Replace("\\", ""));
                    }
                    File.Move(this.file, this.HistPathIn + "\\ERR_" + this.fname.Replace("\\", ""));
                }
                else
                {
                    ((IEvent)(new InfoEvent("", "", "La transacción culminó satisfactoriamente."))).Publish();
                    if (File.Exists(this.HistPathIn + "\\OK_" + this.fname.Replace("\\", "")))
                    {
                        File.Delete(this.HistPathIn + "\\OK_" + this.fname.Replace("\\", ""));
                    }
                    File.Move(this.file, this.HistPathIn + "\\OK_" + this.fname.Replace("\\", ""));

                    /* FALTA AHCER LA CONSULTA PARA AÑADIR LA INFORMACIÓN FISCAL */
                    GPHelper.insertFiscalInfo(header["DOCNUMBE"].ToString(),
                                              header["COO"].ToString(),
                                              header["DATEGEN"].ToString(),
                                              header["SERIALPRINTER"].ToString(),
                                              StringConnection);
                    /* FALTA AHCER LA CONSULTA PARA AÑADIR LA INFORMACIÓN FISCAL */
                }
            }
        }