public void RetornoNotaFiscal(SAPbobsCOM.Company oCompany)
        {
            try
            {
                if (oCompany.Connected)
                {
                    OrdersDAL orders = new OrdersDAL(oCompany);

                    SAPbobsCOM.Recordset recordSet = (Recordset)oCompany.GetBusinessObject(BoObjectTypes.BoRecordset);

                    recordSet = orders.RecuperarNumeroNF();

                    if (recordSet != null && recordSet.RecordCount > 0)
                    {
                        for (int i = 0; i < recordSet.RecordCount; i++)
                        {
                            Repositorio repositorio = new Repositorio();
                            Invoice     invoice     = new Invoice();

                            invoice.InvoicedIssueDate = String.Concat(recordSet.Fields.Item("invoiceDate").Value.ToString());
                            //invoice.InvoicedIssueDate = String.Concat(recordSet.Fields.Item("invoiceDate").Value.ToString("yyyy-MM-dd HH:mm:ss").Replace(" ","T"), "Z");
                            invoice.InvoicedNumber = recordSet.Fields.Item("invoiceNumber").Value.ToString();
                            invoice.InvoicedKey    = recordSet.Fields.Item("nfeKey").Value.ToString();
                            invoice.OrderStatus    = "INVOICED";
                            invoice.InvoicedLine   = 0;
                            string externalId              = recordSet.Fields.Item("externalId").Value.ToString();
                            string idOrderIntegraCommerce  = recordSet.Fields.Item("idOrderIntegraCommerce").Value.ToString();
                            string idOrderIntegraCommerce2 = recordSet.Fields.Item("idOrderIntegraCommerce2").Value.ToString();
                            string docSAP = recordSet.Fields.Item("docSAP").Value.ToString();
                            string docNPV = recordSet.Fields.Item("docNPIntegraCommerce").Value.ToString();

                            //invoice.invoiceValue = recordSet.Fields.Item("totalNF").Value.ToString().Replace(",","");
                            //invoice.courier = recordSet.Fields.Item("shippingMethod").Value.ToString();

                            int updatePedidoNum = 0;

                            if (!string.IsNullOrEmpty(idOrderIntegraCommerce))
                            {
                                invoice.IdOrder = idOrderIntegraCommerce;
                            }
                            else if (!string.IsNullOrEmpty(idOrderIntegraCommerce2))
                            {
                                invoice.IdOrder = idOrderIntegraCommerce2;
                            }

                            Task <HttpResponseMessage> responseOrder = repositorio.BuscarPedido(idOrderIntegraCommerce);

                            if (responseOrder.Result.IsSuccessStatusCode)
                            {
                                var jsonOrder = responseOrder.Result.Content.ReadAsStringAsync().Result;

                                var _order = JsonConvert.DeserializeObject <OrderIntegraCommerce>(jsonOrder);


                                //Para validar para enviar só se o pedido não estiver cancelado
                                if (!_order.OrderStatus.Equals("CANCELED"))
                                {
                                }

                                if (!string.IsNullOrEmpty(invoice.IdOrder))
                                {
                                    Task <HttpResponseMessage> response = repositorio.RetornoNotaFiscal(invoice);

                                    if (response.Result.IsSuccessStatusCode)
                                    {
                                        //Atualizando campo de usuário U_EnvioNFVTEX
                                        updatePedidoNum = orders.AtualizarPedidoVenda(oCompany, Convert.ToInt32(externalId));

                                        if (updatePedidoNum == 0)
                                        {
                                            this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, invoice.IdOrder, docSAP, EnumStatusIntegracao.Sucesso, "Número NF " + invoice.InvoicedNumber + " enviado para IntegraCommerce com sucesso.");
                                            this.log.WriteLogRetornoNF("Número NF para o Pedido de Venda " + docSAP + " enviado para IntegraCommerce com sucesso.");
                                        }
                                        else
                                        {
                                            this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, invoice.IdOrder, docSAP, EnumStatusIntegracao.Erro, "Número NF " + invoice.InvoicedNumber + " retornado porém não foi possivél atualizar campo de usuário (U_EnvioNFIC) do Pedido de Venda");
                                            this.log.WriteLogRetornoNF("Falha ao atualizar Pedido de Venda " + docSAP);
                                        }
                                    }
                                    else
                                    {
                                        var responseNFJson = response.Result.Content.ReadAsStringAsync().Result;
                                        var responseBody   = JsonConvert.DeserializeObject <RetNFResponse>(responseNFJson);

                                        var responseMessage = string.Empty;

                                        foreach (Error err in responseBody.Errors)
                                        {
                                            if (!String.IsNullOrEmpty(err.Message))
                                            {
                                                responseMessage = err.Message;
                                            }
                                            else
                                            {
                                                responseMessage = response.Result.ReasonPhrase;
                                            }
                                        }

                                        this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, invoice.IdOrder, externalId, EnumStatusIntegracao.Erro, responseMessage);
                                        this.log.WriteLogRetornoNF("Falha ao retornar número da Nota Fiscal " + externalId + " para IntegraCommerce");

                                        //Atualizando campo de usuário U_EnvioNFVTEX
                                        updatePedidoNum = orders.AtualizarPedidoVenda(oCompany, Convert.ToInt32(externalId));

                                        if (updatePedidoNum != 0)
                                        {
                                            //this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, invoice.IdOrder, docSAP, EnumStatusIntegracao.Erro, "Número NF " + invoice.InvoicedNumber + " retornado porém não foi possivél atualizar campo de usuário (U_EnvioNFIntegraC) do Pedido de Venda");
                                            this.log.WriteLogRetornoNF("Falha ao atualizar Pedido de Venda " + docSAP);
                                        }
                                    }
                                }
                                else
                                {
                                    this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, invoice.IdOrder, externalId, EnumStatusIntegracao.Erro, "Id do Pedido IntegraCommerce (NumAtCard e U_NumPedEXT) do Pedido de Venda " + docNPV + " em branco.");
                                    this.log.WriteLogRetornoNF("Falha ao retornar número da Nota Fiscal " + externalId + " para a Vtex - Id do Pedido IntegraCommerce (NumAtCard) do Pedido de Venda " + docNPV + " em branco.");

                                    //Atualizando campo de usuário U_EnvioNFVTEX
                                    updatePedidoNum = orders.AtualizarPedidoVenda(oCompany, Convert.ToInt32(externalId));

                                    if (updatePedidoNum != 0)
                                    {
                                        this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, invoice.IdOrder, docSAP, EnumStatusIntegracao.Erro, "Número NF " + invoice.InvoicedNumber + " retornado porém não foi possivél atualizar campo de usuário (U_EnvioNFIntegraC) do Pedido de Venda");
                                        this.log.WriteLogRetornoNF("Falha ao atualizar Pedido de Venda " + docSAP);
                                    }
                                }
                            }

                            recordSet.MoveNext();
                        }
                    }

                    if (recordSet != null)
                    {
                        System.Runtime.InteropServices.Marshal.ReleaseComObject(recordSet);
                    }
                }
            }
            catch (Exception e)
            {
                this.log.WriteLogRetornoNF("Exception RetornoNotaFiscal " + e.Message);
                //throw;
            }
        }
        public void RetornoNotaFiscal(SAPbobsCOM.Company oCompany)
        {
            try
            {
                this.log.WriteLogRetNF("Inicio do Processo de Integração de Retorno de NF");

                Repositorio repositorio = new Repositorio();

                string resultado = "Não há nenhuma NF a ser retornada.";
                int    contador  = 0;

                Task <HttpResponseMessage> responseFeed = repositorio.ConsultarMyFeed();

                if (responseFeed.Result.IsSuccessStatusCode)
                {
                    var jsonMyFeed = responseFeed.Result.Content.ReadAsStringAsync().Result;

                    var myFeeds = JsonConvert.DeserializeObject <MyFeedResponse>(jsonMyFeed);

                    if (myFeeds.messages.Length > 0)
                    {
                        foreach (Entity.Message feed in myFeeds.messages)
                        {
                            if (feed.topic.Equals("shipments"))
                            {
                                Task <HttpResponseMessage> responseShipment = repositorio.RecuperarShipmentId(feed.resource);

                                if (responseShipment.Result.IsSuccessStatusCode)
                                {
                                    var jsonShipments = responseShipment.Result.Content.ReadAsStringAsync().Result;

                                    var shipment = JsonConvert.DeserializeObject <Shipments>(jsonShipments);

                                    if (shipment.status.Equals("ready_to_ship"))
                                    {
                                        resultado = "Foi encontrado " + contador + 1 + "NF a ser enviado para o ML. (status_ready_to_ship)";

                                        //retornar os dados da NF -> xml
                                        this.log.WriteLogRetNF("Entrou no ready_to_ship e invoice_pending");

                                        List <string> fileList     = new List <string>();
                                        FileService   _fileService = new FileService();

                                        string _filePath = ConfigurationManager.AppSettings["FilePath"];

                                        //Verificar se existe arquivo
                                        fileList = _fileService.FileExists(_filePath);

                                        if (fileList.Count > 0)
                                        {
                                            if (oCompany.Connected)
                                            {
                                                OrdersDAL orders = new OrdersDAL(oCompany);

                                                SAPbobsCOM.Recordset recordSet = (Recordset)oCompany.GetBusinessObject(BoObjectTypes.BoRecordset);

                                                recordSet = orders.RecuperarNumeroNF();

                                                if (recordSet != null && recordSet.RecordCount > 0)
                                                {
                                                    for (int i = 0; i < recordSet.RecordCount; i++)
                                                    {
                                                        int updatePedidoNum = 0;

                                                        string nfKey      = recordSet.Fields.Item("nfeKey").Value.ToString();
                                                        string docSAP     = recordSet.Fields.Item("docSAP").Value.ToString();
                                                        string externalId = recordSet.Fields.Item("externalId").Value.ToString();

                                                        string idOrderML = recordSet.Fields.Item("idOrderML").Value.ToString();

                                                        string invoiceNumber = recordSet.Fields.Item("invoiceNumber").Value.ToString();

                                                        DateTime invoiceDate = DateTime.Parse(recordSet.Fields.Item("invoiceDate").Value.ToString());

                                                        if (invoiceDate.Date.Year >= DateTime.Now.Date.Year)
                                                        {
                                                            foreach (string _file in fileList)
                                                            {
                                                                if (Path.GetFileNameWithoutExtension(_file).Length == 51)
                                                                {
                                                                    string _fileName = Path.GetFileNameWithoutExtension(_file).Substring(7);

                                                                    if (nfKey.Equals(_fileName))
                                                                    {
                                                                        XmlDocument _xml = new XmlDocument {
                                                                            XmlResolver = null
                                                                        };
                                                                        _xml.Load(_file);
                                                                        string xmlToPOST = _xml.InnerXml.Replace("\\", "").ToString();


                                                                        //Fazer POST xml
                                                                        Task <HttpResponseMessage> responseEnvioXml = repositorio.EnvioXmlNF(feed.resource, xmlToPOST);

                                                                        if (responseEnvioXml.Result.IsSuccessStatusCode)
                                                                        {
                                                                            //Atualizando campo de usuário U_EnvioNFVTEX
                                                                            updatePedidoNum = orders.AtualizarPedidoVenda(oCompany, Convert.ToInt32(externalId));

                                                                            if (updatePedidoNum == 0)
                                                                            {
                                                                                this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, idOrderML, docSAP, EnumStatusIntegracao.Sucesso, "Dados NF " + invoiceNumber + " enviado para a ML com sucesso.");
                                                                                this.log.WriteLogRetNF("Dados da NF do Pedido de Venda " + docSAP + " enviado ao Mercado Livre com sucesso.");
                                                                            }
                                                                            else
                                                                            {
                                                                                this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, idOrderML, docSAP, EnumStatusIntegracao.Erro, "Dados NF " + invoiceNumber + " retornado porém não foi possivél atualizar campo de usuário (U_EnvioNFML) do Pedido de Venda");
                                                                                this.log.WriteLogRetNF("Falha ao atualizar Pedido de Venda " + docSAP);
                                                                            }
                                                                        }
                                                                        else if (responseEnvioXml.Result.StatusCode.Equals("401"))
                                                                        {
                                                                            GetNewAccessToken();
                                                                        }
                                                                        else if (!responseEnvioXml.Result.IsSuccessStatusCode)
                                                                        {
                                                                            var jsonResponseRetNF = responseEnvioXml.Result.Content.ReadAsStringAsync().Result;

                                                                            var _retNfresponse = JsonConvert.DeserializeObject <RetNFResponse>(jsonResponseRetNF);

                                                                            string mensagemErro = string.Empty;

                                                                            mensagemErro += "Status: " + _retNfresponse.status;

                                                                            if (!string.IsNullOrEmpty(_retNfresponse.error))
                                                                            {
                                                                                mensagemErro += " - Erro:" + _retNfresponse.error;
                                                                            }
                                                                            if (!string.IsNullOrEmpty(_retNfresponse.message))
                                                                            {
                                                                                mensagemErro += " - Detalhe do erro: " + _retNfresponse.message;
                                                                            }

                                                                            this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, idOrderML, docSAP, EnumStatusIntegracao.Erro, mensagemErro);
                                                                            this.log.WriteLogRetNF("Não foi possível retornar o XML:" + responseEnvioXml.Result.Content.ReadAsStringAsync().Result);

                                                                            //Atualizando campo de usuário U_EnvioNFML
                                                                            updatePedidoNum = orders.AtualizarPedidoVenda(oCompany, Convert.ToInt32(externalId));

                                                                            if (updatePedidoNum != 0)
                                                                            {
                                                                                this.log.WriteLogRetNF("Não foi possível atualizar o Pedido Venda " + docSAP);
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }


                                                        recordSet.MoveNext();
                                                    }
                                                }
                                            }
                                            #region

                                            /*
                                             * if (oCompany.Connected)
                                             * {
                                             *  OrdersDAL orders = new OrdersDAL(oCompany);
                                             *
                                             *  SAPbobsCOM.Recordset recordSet = (Recordset)oCompany.GetBusinessObject(BoObjectTypes.BoRecordset);
                                             *
                                             *  recordSet = orders.RecuperarNumeroNF();
                                             *
                                             *  if (recordSet != null && recordSet.RecordCount > 0)
                                             *  {
                                             *      for (int i = 0; i < recordSet.RecordCount; i++)
                                             *      {
                                             *          Repositorio repositorio = new Repositorio();
                                             *          Invoice invoice = new Invoice();
                                             *
                                             *          //invoice.type = "Output";
                                             *          //invoice.issuanceDate = recordSet.Fields.Item("invoiceDate").Value.ToString("yyyy-MM-dd");
                                             *          invoice.invoiceNumber = recordSet.Fields.Item("invoiceNumber").Value.ToString();
                                             *          invoice.invoiceKey = recordSet.Fields.Item("nfeKey").Value.ToString();
                                             *          string externalId = recordSet.Fields.Item("externalId").Value.ToString();
                                             *          string idOrderVtex = recordSet.Fields.Item("idOrderVtex").Value.ToString();
                                             *          string idOrderVtex2 = recordSet.Fields.Item("idOrderVtex2").Value.ToString();
                                             *          string docSAP = recordSet.Fields.Item("docSAP").Value.ToString();
                                             *          string docNPV = recordSet.Fields.Item("docNPV").Value.ToString();
                                             *
                                             *          invoice.invoiceValue = recordSet.Fields.Item("totalNF").Value.ToString().Replace(",","");
                                             *          invoice.courier = recordSet.Fields.Item("shippingMethod").Value.ToString();
                                             *
                                             *          int updatePedidoNum = 0;
                                             *          string idPedidoVTEX = string.Empty;
                                             *
                                             *          string tempDocNPV = string.Empty;
                                             *
                                             *          List<ItemNF> listaItem = new List<ItemNF>();
                                             *
                                             *          for (int j = 0; j < recordSet.RecordCount ; j++)
                                             *          {
                                             *              tempDocNPV = recordSet.Fields.Item("docNPV").Value.ToString();
                                             *
                                             *              if (docNPV.Equals(tempDocNPV))
                                             *              {
                                             *                  ItemNF item = new ItemNF();
                                             *
                                             *                  item.id = recordSet.Fields.Item("codItem").Value.ToString();
                                             *                  item.price = System.Convert.ToInt32(recordSet.Fields.Item("precoItem").Value.ToString().Replace(",", ""));
                                             *                  item.quantity = System.Convert.ToInt32(recordSet.Fields.Item("qtdItem").Value.ToString());
                                             *
                                             *                  listaItem.Add(item);
                                             *              }
                                             *
                                             *              recordSet.MoveNext();
                                             *          }
                                             *
                                             *          invoice.items = listaItem;
                                             *
                                             *          if (!string.IsNullOrEmpty(idOrderVtex))
                                             *          {
                                             *              idPedidoVTEX = idOrderVtex;
                                             *          }
                                             *          else if (!string.IsNullOrEmpty(idOrderVtex2))
                                             *          {
                                             *              idPedidoVTEX = idOrderVtex2;
                                             *          }
                                             *
                                             *          if (!string.IsNullOrEmpty(idOrderVtex) && !string.IsNullOrEmpty(idOrderVtex2))
                                             *          {
                                             *
                                             *              Task<HttpResponseMessage> response = repositorio.RetornoNotaFiscal(invoice, idPedidoVTEX);
                                             *
                                             *              if (response.Result.IsSuccessStatusCode)
                                             *              {
                                             *                  //Atualizando campo de usuário U_EnvioNFVTEX
                                             *                  updatePedidoNum = orders.AtualizarPedidoVenda(oCompany, Convert.ToInt32(externalId));
                                             *
                                             *                  if (updatePedidoNum == 0)
                                             *                  {
                                             *                      this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, idPedidoVTEX, docSAP, EnumStatusIntegracao.Sucesso, "Número NF " + invoice.invoiceNumber + " enviado para a Vtex com sucesso.");
                                             *                      this.log.WriteLogPedido("Número NF para o Pedido de Venda " + docSAP + " enviado para a Vtex com sucesso.");
                                             *                  }
                                             *                  else
                                             *                  {
                                             *                      this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, idPedidoVTEX, docSAP, EnumStatusIntegracao.Erro, "Número NF " + invoice.invoiceNumber + " retornado porém não foi possivél atualizar campo de usuário (U_EnvioNFVTEX) do Pedido de Venda");
                                             *                      this.log.WriteLogPedido("Falha ao atualizar Pedido de Venda " + docSAP);
                                             *                  }
                                             *
                                             *              }
                                             *              else
                                             *              {
                                             *                  this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, idPedidoVTEX, externalId, EnumStatusIntegracao.Erro, response.Result.ReasonPhrase);
                                             *                  this.log.WriteLogPedido("Falha ao retornar número da Nota Fiscal " + externalId + " para a Vtex");
                                             *              }
                                             *          }
                                             *          else
                                             *          {
                                             *              this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, idPedidoVTEX, externalId, EnumStatusIntegracao.Erro, "Id do Pedido VTEX (NumAtCard e U_NumPedEXT) do Pedido de Venda " + docNPV + " em branco.");
                                             *              this.log.WriteLogPedido("Falha ao retornar número da Nota Fiscal " + externalId + " para a Vtex - Id do Pedido VTEX (NumAtCard) do Pedido de Venda " + docNPV + " em branco.");
                                             *
                                             *              //Atualizando campo de usuário U_EnvioNFVTEX
                                             *              updatePedidoNum = orders.AtualizarPedidoVenda(oCompany, Convert.ToInt32(externalId));
                                             *
                                             *              if (updatePedidoNum != 0)
                                             *              {
                                             *                  this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, idPedidoVTEX, docSAP, EnumStatusIntegracao.Erro, "Número NF " + invoice.invoiceNumber + " retornado porém não foi possivél atualizar campo de usuário (U_EnvioNFVTEX) do Pedido de Venda");
                                             *                  this.log.WriteLogPedido("Falha ao atualizar Pedido de Venda " + docSAP);
                                             *              }
                                             *          }
                                             *          recordSet = orders.RecuperarNumeroNF();
                                             *          //recordSet.MoveNext();
                                             *      }
                                             *  }
                                             *
                                             *  if (recordSet != null)
                                             *  {
                                             *      System.Runtime.InteropServices.Marshal.ReleaseComObject(recordSet);
                                             *  }
                                             * }*/
                                            #endregion //old
                                        }
                                    }
                                }
                                else if (responseShipment.Result.StatusCode.Equals("401"))
                                {
                                    GetNewAccessToken();
                                }
                            }
                        }

                        this.log.WriteLogRetNF(resultado);
                    }
                }
                else if (responseFeed.Result.StatusCode.Equals("401"))
                {
                    GetNewAccessToken();
                }
            }
            catch (Exception e)
            {
                this.log.WriteLogRetNF("Exception RetornoNotaFiscal Inner: " + e.InnerException + " - exception: " + e.Message + " - stack trace: " + e.StackTrace);
                //throw;
            }
        }
        public void RetornoNotaFiscal(SAPbobsCOM.Company oCompany)
        {
            try
            {
                if (oCompany.Connected)
                {
                    OrdersDAL orders = new OrdersDAL(oCompany);

                    SAPbobsCOM.Recordset recordSet = (Recordset)oCompany.GetBusinessObject(BoObjectTypes.BoRecordset);

                    recordSet = orders.RecuperarNumeroNF();

                    SAPbobsCOM.Recordset tempRecordSet = (Recordset)oCompany.GetBusinessObject(BoObjectTypes.BoRecordset);

                    tempRecordSet = orders.RecuperarNumeroNF();

                    if (recordSet != null && recordSet.RecordCount > 0)
                    {
                        while (!recordSet.EoF)
                        {
                            if (!recordSet.EoF)
                            {
                                Repositorio repositorio = new Repositorio();
                                Invoice     invoice     = new Invoice();

                                invoice.type         = "Output";
                                invoice.issuanceDate = recordSet.Fields.Item("invoiceDate").Value.ToString();
                                CultureInfo provider       = CultureInfo.InvariantCulture;
                                DateTime    issuanceDateDT = DateTime.ParseExact(invoice.issuanceDate, "dd/MM/yyyy 00:00:00", provider);

                                invoice.issuanceDate  = issuanceDateDT.ToString("yyyy-MM-dd");
                                invoice.invoiceNumber = recordSet.Fields.Item("invoiceNumber").Value.ToString();
                                invoice.invoiceKey    = recordSet.Fields.Item("nfeKey").Value.ToString();

                                string externalId   = string.Empty;
                                string idOrderVtex  = string.Empty;
                                string idOrderVtex2 = string.Empty;
                                string docSAP       = string.Empty;
                                string docNPV       = string.Empty;

                                externalId   = recordSet.Fields.Item("externalId").Value.ToString();
                                idOrderVtex  = recordSet.Fields.Item("idOrderVtex").Value.ToString();
                                idOrderVtex2 = recordSet.Fields.Item("idOrderVtex2").Value.ToString();
                                docSAP       = recordSet.Fields.Item("docSAP").Value.ToString();
                                docNPV       = recordSet.Fields.Item("docNPV").Value.ToString();

                                invoice.invoiceValue = recordSet.Fields.Item("totalNF").Value.ToString().Replace(",", "");
                                invoice.courier      = recordSet.Fields.Item("shippingMethod").Value.ToString();

                                int    updatePedidoNum = 0;
                                string idPedidoVTEX    = string.Empty;

                                string tempDocNPV = string.Empty;

                                List <ItemNF> listaItem = new List <ItemNF>();

                                for (int j = 0; j < tempRecordSet.RecordCount; j++)
                                {
                                    if (!tempRecordSet.EoF)
                                    {
                                        tempDocNPV = tempRecordSet.Fields.Item("docNPV").Value.ToString();

                                        if (docNPV.Equals(tempDocNPV))
                                        {
                                            ItemNF item = new ItemNF();

                                            item.id       = tempRecordSet.Fields.Item("codItem").Value.ToString();
                                            item.price    = System.Convert.ToInt32(tempRecordSet.Fields.Item("precoItem").Value.ToString().Replace(",", ""));
                                            item.quantity = System.Convert.ToInt32(tempRecordSet.Fields.Item("qtdItem").Value.ToString());

                                            listaItem.Add(item);
                                        }

                                        if (j >= 10)
                                        {
                                            break;
                                        }
                                        tempRecordSet.MoveNext();
                                    }
                                }

                                invoice.items = listaItem;

                                if (!string.IsNullOrEmpty(idOrderVtex))
                                {
                                    idPedidoVTEX = idOrderVtex;
                                }
                                else if (!string.IsNullOrEmpty(idOrderVtex2))
                                {
                                    idPedidoVTEX = idOrderVtex2;
                                }

                                if (!string.IsNullOrEmpty(idOrderVtex) && !string.IsNullOrEmpty(idOrderVtex2))
                                {
                                    //recuperar pedido e validar status
                                    Task <HttpResponseMessage> responseOrder = repositorio.BuscarPedido(idOrderVtex);

                                    if (responseOrder.Result.IsSuccessStatusCode)
                                    {
                                        string jsonPedido = responseOrder.Result.Content.ReadAsStringAsync().Result;

                                        var order = JsonConvert.DeserializeObject <Pedido>(jsonPedido);

                                        if (!order.status.Equals("canceled"))
                                        {
                                            Task <HttpResponseMessage> response = repositorio.RetornoNotaFiscal(invoice, idPedidoVTEX);

                                            if (response.Result.IsSuccessStatusCode)
                                            {
                                                this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, idPedidoVTEX, docSAP, EnumStatusIntegracao.Sucesso, "Número NF " + invoice.invoiceNumber + " enviado para a Vtex com sucesso.");
                                                this.log.WriteLogPedido("Número NF para o Pedido de Venda " + docSAP + " enviado para a Vtex com sucesso.");

                                                //Atualizando campo de usuário U_EnvioNFVTEX
                                                updatePedidoNum = orders.AtualizarPedidoVenda(oCompany, Convert.ToInt32(externalId));

                                                if (updatePedidoNum != 0)
                                                {
                                                    this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, idPedidoVTEX, docSAP, EnumStatusIntegracao.Erro, "Número NF " + invoice.invoiceNumber + " retornado porém não foi possivél atualizar campo de usuário (U_EnvioNFVTEX) do Pedido de Venda");
                                                    this.log.WriteLogPedido("Falha ao atualizar Pedido de Venda " + docSAP);
                                                }
                                            }
                                            else
                                            {
                                                //serializacao erro:
                                                var stringJSONResp = response.Result.Content.ReadAsStringAsync().Result;

                                                var errorResponse = JsonConvert.DeserializeObject <ErrorResponseNF>(stringJSONResp);

                                                if (errorResponse != null)
                                                {
                                                    this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, idPedidoVTEX, externalId, EnumStatusIntegracao.Erro, errorResponse.error.message);
                                                    this.log.WriteLogPedido("Falha ao retornar número da Nota Fiscal " + externalId + " para a Vtex");
                                                }
                                            }
                                        }
                                        else
                                        {
                                            this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, idPedidoVTEX, docSAP, EnumStatusIntegracao.Erro, "Pedido com status de \"cancelado\" na VTEX.");
                                            this.log.WriteLogPedido("Pedido com status de \"cancelado\" na VTEX.");

                                            //Atualizando campo de usuário U_EnvioNFVTEX
                                            updatePedidoNum = orders.AtualizarPedidoVenda(oCompany, Convert.ToInt32(externalId));
                                        }
                                    }
                                }
                                else
                                {
                                    this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, idPedidoVTEX, externalId, EnumStatusIntegracao.Erro, "Id do Pedido VTEX (NumAtCard e U_NumPedEXT) do Pedido de Venda " + docNPV + " em branco.");
                                    this.log.WriteLogPedido("Falha ao retornar número da Nota Fiscal " + externalId + " para a Vtex - Id do Pedido VTEX (NumAtCard) do Pedido de Venda " + docNPV + " em branco.");

                                    //Atualizando campo de usuário U_EnvioNFVTEX
                                    updatePedidoNum = orders.AtualizarPedidoVenda(oCompany, Convert.ToInt32(externalId));

                                    if (updatePedidoNum != 0)
                                    {
                                        this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, idPedidoVTEX, docSAP, EnumStatusIntegracao.Erro, "Número NF " + invoice.invoiceNumber + " retornado porém não foi possivél atualizar campo de usuário (U_EnvioNFVTEX) do Pedido de Venda");
                                        this.log.WriteLogPedido("Falha ao atualizar Pedido de Venda " + docSAP);
                                    }
                                }
                                //recordSet = orders.RecuperarNumeroNF();
                                recordSet.MoveNext();
                            }
                        }
                    }

                    if (recordSet != null)
                    {
                        System.Runtime.InteropServices.Marshal.ReleaseComObject(recordSet);
                    }
                }
            }
            catch (Exception e)
            {
                this.log.WriteLogPedido("Exception RetornoNotaFiscal " + e.Message);
                //throw;
            }
        }
        public void IniciarIntegracaoRetornoNF(SAPbobsCOM.Company oCompany)
        {
            try
            {
                Repositorio repositorio = new Repositorio();

                var jsonSerializeconfig = new JsonSerializerSettings
                {
                    NullValueHandling     = NullValueHandling.Ignore,
                    MissingMemberHandling = MissingMemberHandling.Ignore
                };

                int contador = 0;

                if (oCompany.Connected)
                {
                    OrdersDAL orders = new OrdersDAL(oCompany);

                    SAPbobsCOM.Recordset recordSet = (Recordset)oCompany.GetBusinessObject(BoObjectTypes.BoRecordset);

                    recordSet = orders.RecuperarNumeroNF();

                    if (recordSet.RecordCount > 0)
                    {
                        for (int i = 0; i < recordSet.RecordCount; i++)
                        {
                            contador = recordSet.RecordCount;

                            this.log.WriteLogRetornoNF("Existem " + contador + "NF's a serem retornadas.");

                            string nfKey      = recordSet.Fields.Item("nfeKey").Value.ToString();
                            string docSAP     = recordSet.Fields.Item("docSAP").Value.ToString();
                            string externalId = recordSet.Fields.Item("externalId").Value.ToString();

                            string idOrderPluggto  = recordSet.Fields.Item("idOrderIntegracoesPluggto").Value.ToString();
                            string idOrderPluggto2 = recordSet.Fields.Item("idOrderIntegracoesPluggto2").Value.ToString();

                            string invoiceNumber = recordSet.Fields.Item("invoiceNumber").Value.ToString();

                            string invoiceOrderSeries = recordSet.Fields.Item("invoiceOrderSeries").Value.ToString();

                            string      invoiceDate = recordSet.Fields.Item("invoiceDate").Value.ToString().Split(' ').FirstOrDefault();
                            CultureInfo provider    = CultureInfo.InvariantCulture;
                            DateTime    invoiceDt   = DateTime.ParseExact(invoiceDate, "dd/MM/yyyy", provider);

                            invoiceDate = invoiceDt.ToString("yyyy-MM-dd");

                            Task <HttpResponseMessage> responseOrder = repositorio.RecuperarPedidoById(!string.IsNullOrEmpty(idOrderPluggto) ? idOrderPluggto:idOrderPluggto2);

                            if (responseOrder.Result.IsSuccessStatusCode)
                            {
                                string jsonOrder = responseOrder.Result.Content.ReadAsStringAsync().Result;

                                OrderPluggto orderPluggto = JsonConvert.DeserializeObject <OrderPluggto>(jsonOrder, jsonSerializeconfig);

                                if (orderPluggto.Order.status.Equals("waiting_invoice"))
                                {
                                    //Enviar dados e atualizar status
                                    Task <HttpResponseMessage> responseEnvioNF = repositorio.EnvioInfoNF(orderPluggto.Order, nfKey, invoiceNumber, invoiceOrderSeries, invoiceDate);

                                    int updatePedidoNum1 = orders.AtualizarPedidoVenda(oCompany, Convert.ToInt32(externalId));
                                    if (responseEnvioNF.Result.IsSuccessStatusCode)
                                    {
                                        //atualizar Pedido Venda SAP
                                        //Atualizando campo de usuário U_EnvioNFVTEX
                                        int updatePedidoNum = orders.AtualizarPedidoVenda(oCompany, Convert.ToInt32(externalId));

                                        if (updatePedidoNum == 0)
                                        {
                                            this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, idOrderPluggto, docSAP, EnumStatusIntegracao.Sucesso, "Número NF " + invoiceNumber + " enviado para Pluggto com sucesso.");
                                            this.log.WriteLogRetornoNF("Número NF para o Pedido de Venda " + docSAP + " enviado para Pluggto com sucesso.");
                                        }
                                        else
                                        {
                                            this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, idOrderPluggto, docSAP, EnumStatusIntegracao.Erro, "Número NF " + invoiceNumber + " retornado porém não foi possivél atualizar campo de usuário (U_EnvioNFPluggto) do Pedido de Venda");
                                            this.log.WriteLogRetornoNF("Falha ao atualizar Pedido de Venda " + docSAP);
                                        }
                                    }
                                    else if (responseEnvioNF.Result.StatusCode == System.Net.HttpStatusCode.Unauthorized)
                                    {
                                        this.GetNewAccessToken();
                                    }
                                    else
                                    {
                                        var jsonResponseError = responseEnvioNF.Result.Content.ReadAsStringAsync().Result;

                                        var objResponse = JsonConvert.DeserializeObject <ResponseErrorRetNF>(jsonResponseError);

                                        this.log.WriteLogTable(oCompany, EnumTipoIntegracao.NF, idOrderPluggto, docSAP, EnumStatusIntegracao.Erro, objResponse.type + " " + objResponse.details);
                                        this.log.WriteLogRetornoNF(objResponse.type + " " + objResponse.details);
                                    }
                                }
                            }
                            else if (responseOrder.Result.StatusCode == System.Net.HttpStatusCode.Unauthorized)
                            {
                                this.GetNewAccessToken();
                            }

                            recordSet.MoveNext();
                        }
                    }
                    else
                    {
                        this.log.WriteLogRetornoNF("Não há nenhuma NF a ser retornada.");
                    }
                }
                else
                {
                    this.log.WriteLogRetornoNF("Não conectado ao SAP.");
                }
            }
            catch (Exception e)
            {
                this.log.WriteLogRetornoNF("Exception IntegracaoService.IniciarIntegracaoRetornoNF " + e.Message);
                throw;
            }
        }