public JsonResult FecharProcesso(ProcessoDeCotacaoDeMaterialFechamentoInfoVm processoDeCotacaoFechamentoVm)
 {
     try
     {
         _service.Executar(processoDeCotacaoFechamentoVm);
         return(Json(new { Sucesso = true, Mensagem = "O Processo de Cotação foi fechado com sucesso." }));
     }
     catch (Exception ex)
     {
         return(Json(new { Sucesso = false, Mensagem = "Ocorreu um erro ao fechar o Processo de Cotação. Detalhes: " + ExceptionUtil.ExibeDetalhes(ex) }));
     }
 }
        public void Executar(ProcessoDeCotacaoDeMaterialFechamentoInfoVm processoDeCotacaoFechamentoVm)
        {
            try
            {
                _unitOfWork.BeginTransaction();

                var processoDeCotacao = (ProcessoDeCotacaoDeMaterial)_processosDeCotacao.BuscaPorId(processoDeCotacaoFechamentoVm.IdProcessoCotacao).Single();
                processoDeCotacao.Fechar();
                _comunicacaoSap.EfetuarComunicacao(processoDeCotacao, processoDeCotacaoFechamentoVm);
                _processosDeCotacao.Save(processoDeCotacao);

                _unitOfWork.Commit();
            }
            catch (Exception)
            {
                _unitOfWork.RollBack();
                throw;
            }
        }
        public void EfetuarComunicacao(ProcessoDeCotacaoDeMaterial processo,
                                       ProcessoDeCotacaoDeMaterialFechamentoInfoVm fechamentoVm)
        {
            foreach (var fornecedorParticipante in processo.FornecedoresParticipantes)
            {
                var cotacao = (CotacaoMaterial)fornecedorParticipante.Cotacao.CastEntity();
                var itens   = new ListaProcessoDeCotacaoDeMaterialFechamentoItemVm();
                itens.AddRange((from item in cotacao.Itens
                                let cotacaoItemMaterial = (CotacaoMaterialItem)item.CastEntity()
                                                          let processoItemMaterial = (ProcessoDeCotacaoDeMaterialItem)cotacaoItemMaterial.ProcessoDeCotacaoItem.CastEntity()
                                                                                     select new ProcessoDeCotacaoDeMaterialFechamentoItemVm
                {
                    NumeroRequisicao = processoItemMaterial.RequisicaoDeCompra.Numero,
                    NumeroItem = processoItemMaterial.RequisicaoDeCompra.NumeroItem,
                    CodigoIva = cotacaoItemMaterial.Iva.Codigo,
                    Selecionada = cotacaoItemMaterial.Selecionada,
                    QuantidadeComprada = cotacaoItemMaterial.QuantidadeAdquirida ?? 0,
                    Preco = cotacaoItemMaterial.Preco
                }).ToList());

                var vm = new ProcessoDeCotacaoDeMaterialFechamentoComunicacaoSapVm
                {
                    IdProcessoCotacao       = processo.Id,
                    NumeroCotacao           = fornecedorParticipante.NumeroDaCotacao,
                    CodigoFornecedor        = fornecedorParticipante.Fornecedor.Codigo,
                    DocumentoDoSap          = fechamentoVm.DocumentoParaGerarNoSap,
                    NotaDeCabecalho         = fechamentoVm.NotaDeCabecalho,
                    TextoDeCabecalho        = fechamentoVm.TextoDeCabecalho,
                    CodigoCondicaoPagamento = cotacao.CondicaoDePagamento.Codigo,
                    CodigoIncoterm1         = cotacao.Incoterm.Codigo,
                    Incoterm2 = cotacao.DescricaoIncoterm,
                    Itens     = itens
                };

                //comentado enquanto o serviço do sap não é implementado
                //_comunicacaoSap.EnviarMensagem("", vm);
            }
        }