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; } }