//public ComunicacaoFechamentoProcessoCotacaoFrete(CredencialSap credencialSap) //{ // _comunicacaoSap = new ComunicacaoSap<ListaProcessoDeCotacaoDeFreteFechamento>(credencialSap); //} public ApiResponseMessage EfetuarComunicacao(ProcessoDeCotacao processo) { ProcessoDeCotacaoItem item = processo.Itens.First(); if (item.Produto.NaoEstocavel) { //Cotações de frete para empresas do grupo que não utilizam o SAP deverão ser realizadas com material NLAG //(Material não estocável). Para este tipo de material a cotação não deverá ser enviada para o SAP; return(new ApiResponseMessage { Retorno = new Retorno { Codigo = "200", Texto = "S" } }); } var mensagemParaEnviar = new ListaProcessoDeCotacaoDeFreteFechamento(); var processoAuxiliar = (ProcessoDeCotacaoDeFrete)processo.CastEntity(); foreach (var fornecedorParticipante in processoAuxiliar.FornecedoresParticipantes) { if (fornecedorParticipante.Cotacao != null && fornecedorParticipante.Cotacao.Itens.First().Selecionada) { CotacaoItem itemDaCotacao = fornecedorParticipante.Cotacao.Itens.First(); mensagemParaEnviar.Add(new ProcessoDeCotacaoDeFreteFechamentoComunicacaoSapVm { CodigoTransportadora = fornecedorParticipante.Fornecedor.Codigo, //CodigoMaterial = processoAuxiliar.Produto.Codigo, CodigoMaterial = item.Produto.Codigo, //CodigoUnidadeMedida = processoAuxiliar.UnidadeDeMedida.CodigoInterno, CodigoUnidadeMedida = item.UnidadeDeMedida.CodigoInterno, CodigoItinerario = processoAuxiliar.Itinerario.Codigo, DataDeValidadeInicial = processoAuxiliar.DataDeValidadeInicial.ToString("yyyyMMdd"), DataDeValidaFinal = processoAuxiliar.DataDeValidadeFinal.ToString("yyyyMMdd"), NumeroDoContrato = processoAuxiliar.NumeroDoContrato ?? "", Valor = itemDaCotacao.ValorComImpostos }); } } ApiResponseMessage apiResponseMessage = _comunicacaoSap.EnviarMensagem( "/HttpAdapter/HttpMessageServlet?senderParty=PORTAL&senderService=HTTP&interfaceNamespace=http://portal.bsbios.com.br/&interface=si_cotacaoFreteFechamento_portal&qos=be" , mensagemParaEnviar); if (apiResponseMessage.Retorno.Codigo == "E") { throw new ComunicacaoSapException("json", "Ocorreu um erro ao comunicar o fechamento do Processo de Cotação de Frete para o SAP. Detalhes: " + apiResponseMessage.Retorno.Texto); } return(apiResponseMessage); }
public ApiResponseMessage EfetuarComunicacao(ProcessoDeCotacao processo) { //seleciona os participantes que preencheram a cotação (cotacaoMaterial != null) //e que ainda não possuem número da cotação. O esperado é que nenhuma das cotações possuem NumeroDaCotacao. //Isto acontecerá apenas se ocorrer erro na comunicação com o sap em para uns dos fornecedores do processo //e antes deste fornecedor, a comunicação tenha sido realizada com sucesso para outro fornecedor. //Neste cenário o fornecedor anterior já tem um número de cotação e não deve ser mais enviado para o SAP, //pois isto faria com que fosse criado duas cotações para o mesmo fornecedor e item de requisição, o que é errado. var participantesSemCotacaoNoSap = (from fp in processo.FornecedoresParticipantes let cotacaoMaterial = (CotacaoMaterial)fp.Cotacao.CastEntity() where string.IsNullOrEmpty(fp.NumeroDaCotacao) select fp); foreach (var fornecedorParticipante in participantesSemCotacaoNoSap) { var itens = new ListaProcessoDeCotacaoDeMaterialAberturaItemVm(); itens.AddRange(from ProcessoDeCotacaoDeMaterialItem item in processo.Itens select new ProcessoDeCotacaoDeMaterialAberturaItemVm { NumeroRequisicao = item.RequisicaoDeCompra.Numero, NumeroItem = item.RequisicaoDeCompra.NumeroItem }); var vm = new ProcessoDeCotacaoDeMaterialAberturaComunicacaoSapVm { IdProcessoCotacao = processo.Id, CodigoFornecedor = fornecedorParticipante.Fornecedor.Codigo, DataLimiteRetorno = processo.DataLimiteDeRetorno.Value.ToString("dd.MM.yyyy"), Itens = itens }; //comentado enquanto o serviço do SAP não é implementado ApiResponseMessage resposta = _comunicacaoSap.EnviarMensagem("/HttpAdapter/HttpMessageServlet?senderParty=PORTAL&senderService=HTTP&interfaceNamespace=http://portal.bsbios.com.br/&interface=si_cadCotacaoAbertura_portal&qos=be", vm); if (resposta.Retorno.Codigo.Equals("200") && !string.IsNullOrEmpty(resposta.Retorno.Texto)) { fornecedorParticipante.AtualizarNumeroDaCotacao(resposta.Retorno.Texto); } else { throw new Exception("Ocorreu um erro ao enviar os dados do Processo de Cotação para o SAP."); } } return(new ApiResponseMessage() { Retorno = new Retorno() { Codigo = "200", Texto = "OK" } }); }