public PedidoSapRetornoDTO Salvar(PedidoVendaSalvarVm pedido) { try { var usuarioConectado = _usuarios.UsuarioConectado(); ClienteVenda clienteVenda = _clienteVendas.ObterPorId(pedido.IdDaAreaDeVenda); TransportadorasDoPedido transportadorasDoPedido = ConsultarTransportadoras(pedido); IncotermCab incoterm1 = _incotermsCabs.FiltraPorId(pedido.IdDoIncoterm1).Single(); IncotermLinha incoterm2 = _incotermsLinhas.FiltraPorId(pedido.IdDoIncoterm2).Single(); Cliente cliente = _clientes.BuscaPeloCodigo(pedido.CodigoDoCliente).Single(); CondicaoDePagamento condicaoDePagamento = _condicoesDePagamento.BuscaPeloCodigo(pedido.CodigoDaCondicaoDePagamento); PedidoVenda pedidoVenda; if (!string.IsNullOrEmpty(pedido.IdDaCotacao)) { pedidoVenda = _pedidosVenda.FiltraPorId(pedido.IdDaCotacao).Single(); pedidoVenda .AlterarTipo(pedido.Tipo) .AlterarCliente(clienteVenda, cliente) .AlterarIncoterm(incoterm1, incoterm2) .AlterarTransportadora(transportadorasDoPedido.Transportadora, transportadorasDoPedido.TransportadoraDeRedespacho, transportadorasDoPedido.TransportadoraDeRedespachoCif) .AlterarDados(pedido.NumeroPedidoDoRepresentante, pedido.NumeroPedidoDoCliente, pedido.DataDoPedido, condicaoDePagamento, pedido.Observacao); } else { pedidoVenda = new PedidoVenda(pedido.Tipo, pedido.CodigoTipoPedido, clienteVenda.Org_vendas, cliente, clienteVenda, DateTime.Now, pedido.NumeroPedidoDoRepresentante, pedido.NumeroPedidoDoCliente, pedido.DataDoPedido, condicaoDePagamento, incoterm1, incoterm2, transportadorasDoPedido.Transportadora, transportadorasDoPedido.TransportadoraDeRedespacho, transportadorasDoPedido.TransportadoraDeRedespachoCif, usuarioConectado.Fornecedor, pedido.Observacao ); } int[] idDosMateriais = pedido.Itens.Select(x => x.IdMaterial).Distinct().ToArray(); IList<Material> materiaisDosItens = _materiais.BuscarLista(idDosMateriais).List(); string[] codigoDasListasDePreco = pedido.Itens.Select(item => item.CodigoDaListaDePreco).Distinct().ToArray(); IList<ListaPreco> listasDePreco = _listasPreco.FiltraPorListaDeCodigos(codigoDasListasDePreco).List(); string[] codigoDosMotivosDeRecusa = pedido.Itens .Where(item => !string.IsNullOrEmpty(item.CodigoDoMotivoDeRecusa)) .Select(item => item.CodigoDoMotivoDeRecusa) .ToArray(); IList<MotivoDeRecusa> motivosDeRecusaDosItens = _motivosDeRecusa.BuscarLista(codigoDosMotivosDeRecusa).List(); if (!string.IsNullOrEmpty(pedido.IdDaCotacao)) { _atualizadorDeItens.Atualizar(pedidoVenda, pedido); } else { for (int i = 0; i < pedido.Itens.Count; i++) { PedidoVendaSalvarItemVm item = pedido.Itens[i]; Material material = materiaisDosItens.Single(x => x.pro_id_material == item.IdMaterial); ListaPreco listaDePreco = listasDePreco.Single(lista => lista.Codigo == item.CodigoDaListaDePreco); MotivoDeRecusa motivoDeRecusa = string.IsNullOrEmpty(item.CodigoDoMotivoDeRecusa) ? null : motivosDeRecusaDosItens.Single(m => m.Codigo == item.CodigoDoMotivoDeRecusa); var linhasPedido = new PedidoVendaLinha(item.Numero, material, item.Quantidade, listaDePreco, item.Desconto, motivoDeRecusa); pedidoVenda.AdicionarItem(linhasPedido); } } _comunicacaoSap.EnviarPedido(pedidoVenda); if (pedido.Tipo == "G") { using (_unitOfWork) { _unitOfWork.BeginTransaction(); _pedidosVenda.Save(pedidoVenda); _unitOfWork.Commit(); } } var dtoDeRetorno = new PedidoSapRetornoDTO { IdDoPedido = pedidoVenda.Id_cotacao, Status = pedidoVenda.Status.Descricao, ValorTotal = pedidoVenda.ValorTotal, Itens = pedidoVenda.Itens.Select(item => new PedidoSapItemRetornoDTO { Id = item.Id, NumeroDoItem = item.Numero, ValorDeTabela = item.ValorTabela, ValorPolitica = item.ValorPolitica, CodigoDoMotivoDeRecusa = item.MotivoDeRecusa != null ? item.MotivoDeRecusa.Codigo : null, DescricaoDoMotivoDeRecusa = item.MotivoDeRecusa != null ? item.MotivoDeRecusa.Descricao: null, CondicoesDePreco = item.CondicoesDePreco.Select(condicaoDePreco => new CondicaoDePrecoDTO { Nivel = condicaoDePreco.Nivel, Descricao = condicaoDePreco.Descricao, Tipo = condicaoDePreco.Tipo, Valor = condicaoDePreco.Valor }).ToList() }).ToList() }; return dtoDeRetorno; } catch { _unitOfWork.RollBack(); throw; } }
public void Atualizar(PedidoVenda pedidoVenda, PedidoVendaSalvarVm pedidoAlterado) { IEnumerable<int> idDosItensParaRemover = pedidoVenda.Itens .Where(itemAtual => pedidoAlterado.Itens.All(itemAlterado => itemAlterado.IdDoItem != itemAtual.Id)) .Select(itemAtual => itemAtual.Id).ToList(); foreach (var id in idDosItensParaRemover) { PedidoVendaLinha itemParaRemover = pedidoVenda.Itens.Single(item => item.Id == id); pedidoVenda.Itens.Remove(itemParaRemover); } int[] idDosMateriais = pedidoAlterado.Itens.Select(x => x.IdMaterial).Distinct().ToArray(); IList<Material> materiaisDosItens = _materiais.BuscarLista(idDosMateriais).List(); string[] codigoDasListasDePreco = pedidoAlterado.Itens.Select(item => item.CodigoDaListaDePreco).Distinct().ToArray(); IList<ListaPreco> listasDePreco = _listasPreco.FiltraPorListaDeCodigos(codigoDasListasDePreco).List(); string[] codigoDosMotivosDeRecusa = pedidoAlterado.Itens.Where(i => !string.IsNullOrEmpty(i.CodigoDoMotivoDeRecusa)) .Select(i => i.CodigoDoMotivoDeRecusa).Distinct().ToArray(); IList<MotivoDeRecusa> motivosDeRecusa = _motivosDeRecusa.BuscarLista(codigoDosMotivosDeRecusa).List(); var itensParaAlterar = (from itemAtual in pedidoVenda.Itens join itemAlterado in pedidoAlterado.Itens on itemAtual.Id equals itemAlterado.IdDoItem select new { ItemAtual = itemAtual, ItemAlterado = itemAlterado }).ToList(); for (int i = 0; i < itensParaAlterar.Count; i++) { var itemParaAlterar = itensParaAlterar[i]; PedidoVendaSalvarItemVm itemAlterado = itemParaAlterar.ItemAlterado; Material material = materiaisDosItens.Single(m => m.pro_id_material == itemAlterado.IdMaterial); ListaPreco listaPreco = listasDePreco.Single(l => l.Codigo == itemAlterado.CodigoDaListaDePreco); MotivoDeRecusa motivoDeRecusa = string.IsNullOrEmpty(itemAlterado.CodigoDoMotivoDeRecusa) ? null : motivosDeRecusa.Single(m => m.Codigo == itemAlterado.CodigoDoMotivoDeRecusa); var itemDeVenda = new ItemDeVenda { Material = material, Quantidade = itemAlterado.Quantidade, ListaPreco = listaPreco, DescontoManual = itemAlterado.Desconto, MotivoDeRecusa = motivoDeRecusa }; itemParaAlterar.ItemAtual.Alterar(itemDeVenda); } IEnumerable<PedidoVendaSalvarItemVm> itensParaAdicionar = pedidoAlterado.Itens.Where( itemAlterado => itemAlterado.IdDoItem == 0); foreach (var itemParaAdicionar in itensParaAdicionar) { Material material = materiaisDosItens.Single(m => m.pro_id_material == itemParaAdicionar.IdMaterial); ListaPreco listaDePreco = listasDePreco.Single(l => l.Codigo == itemParaAdicionar.CodigoDaListaDePreco); MotivoDeRecusa motivoDeRecusa = string.IsNullOrEmpty(itemParaAdicionar.CodigoDoMotivoDeRecusa) ? null : motivosDeRecusa.Single(m => m.Codigo == itemParaAdicionar.CodigoDoMotivoDeRecusa); var linhasPedido = new PedidoVendaLinha(itemParaAdicionar.Numero, material,itemParaAdicionar.Quantidade,listaDePreco,itemParaAdicionar.Desconto, motivoDeRecusa); pedidoVenda.AdicionarItem(linhasPedido); } }
public virtual void AdicionarItem(PedidoVendaLinha item) { Itens.Add(item); }