/// <summary> /// Método para listar os itens do pedido /// </summary> /// <param name="Pedido">Objeto com os dados do filtro</param> /// <returns>Contrato.RetornoPedido</returns> internal static Contrato.RetornoPedido ListarPedido(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 a empresa não foi informada if (string.IsNullOrWhiteSpace(entradaPedido.EmpresaLogada.Id.ToString())) { entradaPedido.EmpresaLogada.Id = Guid.Empty; } // Verifica se o código não foi informado if (string.IsNullOrWhiteSpace(entradaPedido.Pedido.Codigo)) { entradaPedido.Pedido.Codigo = string.Empty; } // Verifica se o Responsável não foi informado if (entradaPedido.Pedido.Responsavel == null) { entradaPedido.Pedido.Responsavel = new Contrato.Usuario(); } // Verifica se o estado do pedido não foi informado if (entradaPedido.Pedido.Estado == null) { entradaPedido.Pedido.Estado = new Contrato.EstadoPedido(); } // Loga no banco de dados Dados.BRASIL_DIDATICOS context = new Dados.BRASIL_DIDATICOS(); context.ContextOptions.LazyLoadingEnabled = true; if (entradaPedido.Paginar) { // Busca o pedido no banco var lstPedidos = (from p in context.T_PEDIDO where (entradaPedido.EmpresaLogada.Id == Guid.Empty || p.ID_EMPRESA == entradaPedido.EmpresaLogada.Id) && (p.DATA_PEDIDO >= entradaPedido.Pedido.Data) && (entradaPedido.Pedido.Codigo == string.Empty || p.COD_PEDIDO.Contains(entradaPedido.Pedido.Codigo)) && (entradaPedido.Pedido.Responsavel.Id == Guid.Empty || p.ID_USUARIO_RESPONSAVEL == entradaPedido.Pedido.Responsavel.Id) && (entradaPedido.Pedido.Estado.Id == Guid.Empty || p.ID_ESTADO_PEDIDO == entradaPedido.Pedido.Estado.Id) select p ).OrderByDescending(p => p.DATA_PEDIDO).Skip(entradaPedido.PosicaoUltimoItem).Take(entradaPedido.CantidadeItens) .Select(p => new { o = p, e = p.T_ESTADO_PEDIDO, r = p.T_USUARIO, i = p.T_ITEM_PEDIDO }).ToList(); // Verifica se foi encontrado algum registro if (lstPedidos.Count > 0) { // Preenche o objeto de retorno retPedido.Codigo = Contrato.Constantes.COD_RETORNO_SUCESSO; retPedido.Pedidos = new List<Contrato.Pedido>(); foreach (var item in lstPedidos) { retPedido.Pedidos.Add(new Contrato.Pedido() { Id = item.o.ID_PEDIDO, Codigo = item.o.COD_PEDIDO, Data = item.o.DATA_PEDIDO, ValorDesconto = item.o.NUM_DESCONTO, Estado = Negocio.EstadoPedido.BuscarPedidoEstadoPedido(item.e), Responsavel = Negocio.Usuario.BuscarUsuario(item.r), ItensPedido = Negocio.ItemPedido.ListarPedidoItem(item.i) }); } } } else { var lstPedidos = (from p in context.T_PEDIDO where (entradaPedido.EmpresaLogada.Id == Guid.Empty || p.ID_EMPRESA == entradaPedido.EmpresaLogada.Id) && (entradaPedido.Pedido.Codigo == string.Empty || p.COD_PEDIDO.Contains(entradaPedido.Pedido.Codigo)) && (entradaPedido.Pedido.Responsavel.Id == Guid.Empty || p.ID_USUARIO_RESPONSAVEL == entradaPedido.Pedido.Responsavel.Id) && (entradaPedido.Pedido.Estado.Id == Guid.Empty || p.ID_ESTADO_PEDIDO == entradaPedido.Pedido.Estado.Id) select new { p, i = p.T_ITEM_PEDIDO }).ToList(); // Verifica se foi encontrado algum registro if (lstPedidos.Count > 0) { // Preenche o objeto de retorno retPedido.Codigo = Contrato.Constantes.COD_RETORNO_SUCESSO; retPedido.Pedidos = new List<Contrato.Pedido>(); foreach (var item in lstPedidos) { retPedido.Pedidos.Add(new Contrato.Pedido() { Id = item.p.ID_PEDIDO, Codigo = item.p.COD_PEDIDO, Data = item.p.DATA_PEDIDO, ValorDesconto = item.p.NUM_DESCONTO, Estado = Negocio.EstadoPedido.BuscarPedidoEstadoPedido(item.p.T_ESTADO_PEDIDO), Responsavel = Negocio.Usuario.BuscarUsuario(item.p.T_USUARIO), ItensPedido = Negocio.ItemPedido.ListarPedidoItem(item.i) }); } } } if (retPedido.Pedidos == null || retPedido.Pedidos.Count == 0) { // Preenche o objeto de retorno retPedido.Codigo = Contrato.Constantes.COD_RETORNO_VAZIO; retPedido.Mensagem = "Não existe dados para o filtro informado."; } } else { // retorna quando o usuário não está autenticado retPedido.Codigo = retSessao.Codigo; retPedido.Mensagem = retSessao.Mensagem; } // retorna os dados return retPedido; }
/// <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; }