/// <summary> /// Método para salvar o pedido /// </summary> /// <param name="entradaPedido">Objeto com os dados do pedido</param> /// <returns>Contrato.RetornoPedido</returns> internal static Contrato.RetornoPedido SalvarPedido(Contrato.EntradaPedido entradaPedido) { // Objeto que recebe o retorno do método Contrato.RetornoPedido retPedido = new Contrato.RetornoPedido(); // Objeto que recebe o retorno da sessão Contrato.RetornoSessao retSessao = Negocio.Sessao.ValidarSessao(new Contrato.Sessao() { Login = entradaPedido.UsuarioLogado, Chave = entradaPedido.Chave }); // Verifica se o usuário está autenticado if (retSessao.Codigo == Contrato.Constantes.COD_RETORNO_SUCESSO) { // Verifica se as informações do pedido foram informadas string strValidacao = ValidarPedidoPreenchido(entradaPedido.Pedido); // Se existe algum erro if (strValidacao.Length > 0) { retPedido.Codigo = Contrato.Constantes.COD_FILTRO_VAZIO; retPedido.Mensagem = strValidacao; } else { // Loga no banco de dados Dados.BRASIL_DIDATICOS context = new Dados.BRASIL_DIDATICOS(); context.ContextOptions.LazyLoadingEnabled = true; // Busca o pedido no banco List<Dados.PEDIDO> lstPedidos = (from p in context.T_PEDIDO where (p.COD_PEDIDO == entradaPedido.Pedido.Codigo && (entradaPedido.EmpresaLogada.Id == Guid.Empty || p.ID_EMPRESA == entradaPedido.EmpresaLogada.Id)) || (entradaPedido.Novo == null && entradaPedido.Pedido.Id == p.ID_PEDIDO) select p).ToList(); // Verifica se foi encontrado algum registro if (lstPedidos.Count > 0 && entradaPedido.Novo != null && (bool)entradaPedido.Novo) { // Preenche o objeto de retorno retPedido.Codigo = Contrato.Constantes.COD_REGISTRO_DUPLICADO; retPedido.Mensagem = string.Format("O pedido de código '{0}' já existe!", lstPedidos.First().COD_PEDIDO); } else { // Se existe o pedido if (lstPedidos.Count > 0) { // Atualiza o pedido lstPedidos.First().COD_PEDIDO = entradaPedido.Pedido.Codigo; lstPedidos.First().DATA_PEDIDO = entradaPedido.Pedido.Data; lstPedidos.First().ID_ESTADO_PEDIDO = entradaPedido.Pedido.Estado.Id; lstPedidos.First().ID_USUARIO_RESPONSAVEL = entradaPedido.Pedido.Responsavel.Id; lstPedidos.First().NUM_DESCONTO = entradaPedido.Pedido.ValorDesconto; lstPedidos.First().DATA_ATUALIZACAO = DateTime.Now; lstPedidos.First().LOGIN_USUARIO = entradaPedido.UsuarioLogado; // Apaga todos os itens que estão relacionados while (lstPedidos.First().T_ITEM_PEDIDO.Count > 0) { context.T_ITEM_PEDIDO.DeleteObject(lstPedidos.First().T_ITEM_PEDIDO.First()); } // Verifica se existe algum item associado ao pedido if (entradaPedido.Pedido.ItensPedido != null) { // Para cada item associado foreach (Contrato.ItemPedido item in entradaPedido.Pedido.ItensPedido) { Negocio.ItemPedido.SalvarItemPedidoPedido(lstPedidos.First(), entradaPedido.UsuarioLogado, item); } } } else { // Recupera o código do pedido string codigoPedido = string.Empty; if (entradaPedido.Pedido.Codigo != string.Empty) codigoPedido = entradaPedido.Pedido.Codigo; else { System.Data.Objects.ObjectParameter objCodigoPedido = new System.Data.Objects.ObjectParameter("P_CODIGO", typeof(global::System.Int32)); context.RETORNAR_CODIGO(Contrato.Constantes.TIPO_COD_PEDIDO, entradaPedido.EmpresaLogada.Id, objCodigoPedido); codigoPedido = Util.RecuperaCodigo((int)objCodigoPedido.Value, Contrato.Constantes.TIPO_COD_PEDIDO); } // Cria o pedido Dados.PEDIDO tPedido = new Dados.PEDIDO(); tPedido.ID_PEDIDO = Guid.NewGuid(); tPedido.COD_PEDIDO = codigoPedido; tPedido.DATA_PEDIDO = entradaPedido.Pedido.Data; tPedido.ID_EMPRESA = entradaPedido.EmpresaLogada.Id; tPedido.ID_ESTADO_PEDIDO = entradaPedido.Pedido.Estado.Id; tPedido.ID_USUARIO_RESPONSAVEL = entradaPedido.Pedido.Responsavel.Id; tPedido.NUM_DESCONTO = entradaPedido.Pedido.ValorDesconto; tPedido.DATA_ATUALIZACAO = DateTime.Now; tPedido.LOGIN_USUARIO = entradaPedido.UsuarioLogado; // Verifica se existe algum item associado ao orçamento if (entradaPedido.Pedido.ItensPedido != null) { // Para cada item associado foreach (Contrato.ItemPedido item in entradaPedido.Pedido.ItensPedido) { Negocio.ItemPedido.SalvarItemPedidoPedido(tPedido, entradaPedido.UsuarioLogado, item); } } context.AddToT_PEDIDO(tPedido); } // Salva as alterações context.SaveChanges(); // Preenche o objeto de retorno retPedido.Codigo = Contrato.Constantes.COD_RETORNO_SUCESSO; } } } else { // retorna quando o usuário não está autenticado retPedido.Codigo = retSessao.Codigo; retPedido.Mensagem = retSessao.Mensagem; } // retorna dos dados return retPedido; }