public void ExcluirOferta(int idOferta)
        {
            using (ModelDBFigurinhasContainer contexto = new ModelDBFigurinhasContainer())
            {
                var qOferta = from Oferta in contexto.OfertasSet
                              where Oferta.Id == idOferta

                              select Oferta;

                if (qOferta.Count() < 1)
                {
                    throw new BusinessException("Oferta não encontrada.");
                }
                Ofertas oferta = qOferta.First();

                while (oferta.FigurinhasDesejadas.Count() > 0)
                {
                    contexto.FigurinhasDesejadasSet.DeleteObject(oferta.FigurinhasDesejadas.First());
                }
                while (oferta.FigurinhasOfertadas.Count() > 0)
                {
                    contexto.FigurinhasOfertadasSet.DeleteObject(oferta.FigurinhasOfertadas.First());
                }

                contexto.OfertasSet.DeleteObject(oferta);
                contexto.SaveChanges();
            }
        }
        public Album BuscarAlbum(int idAlbum) 
        {
            Album album = new Album();

            using (ModelDBFigurinhasContainer contexto = new ModelDBFigurinhasContainer())
            {


                var qAlbum = ((ObjectQuery<Album>)contexto.AlbumSet.Where(a => a.Id == idAlbum))
                                 .Include("Figurinhas")
                                 .Include("Figurinhas.Album")
                                 .Include("Figurinhas.Imagem");

                album = qAlbum.First();
            }

            if (album == null)
            {
                throw new BusinessException("Nenhum album encontrado.");
            }

            if (album.Figurinhas.Count == 0)
            {
                throw new BusinessException("Nenhuma figurinha encontrada no album.");
            }

            return album;
        }
        internal Ofertas BuscarOferta(int idOferta)
        {
            Ofertas oferta;

            using (ModelDBFigurinhasContainer contexto = new ModelDBFigurinhasContainer())
            {
                var qOferta = from Oferta in contexto.OfertasSet
                              where Oferta.Id == idOferta

                              select Oferta;

                if (qOferta.Count() < 1)
                {
                    throw new BusinessException("Oferta não encontrada.");
                }

                oferta = ((ObjectQuery <Ofertas>)qOferta)
                         .Include("Usuario")
                         .Include("FigurinhasDesejadas")
                         .Include("FigurinhasOfertadas")
                         .Include("FigurinhasDesejadas.Figurinha")
                         .Include("FigurinhasOfertadas.Figurinha")
                         .Include("FigurinhasDesejadas.Figurinha.Album")
                         .Include("FigurinhasOfertadas.Figurinha.Album")
                         .Include("FigurinhasDesejadas.Figurinha.Imagem")
                         .Include("FigurinhasOfertadas.Figurinha.Imagem")
                         .First();
            }

            return(oferta);
        }
        public List <Ofertas> buscarTrocasCompletas(string user, int ofertaId)
        {
            List <Ofertas> ofertas;

            using (ModelDBFigurinhasContainer contexto = new ModelDBFigurinhasContainer())
            {
                var oferta = contexto.OfertasSet.Where(a => a.Id == ofertaId).First();

                var qOfertadas = oferta.FigurinhasOfertadas.Select <FigurinhasOfertadas, string>(a => a.Figurinha.Nome);
                var qDesejadas = oferta.FigurinhasDesejadas.Select <FigurinhasDesejadas, string>(a => a.Figurinha.Nome);

                string[] figurinhasOfertadas = qOfertadas.ToArray();
                string[] figurinhasDesejadas = qDesejadas.ToArray();

                var qOferta = from Oferta in contexto.OfertasSet
                              join ofertado in contexto.FigurinhasOfertadasSet
                              on Oferta.Id equals ofertado.OfertasId
                              join desejado in contexto.FigurinhasDesejadasSet
                              on Oferta.Id equals desejado.OfertasId
                              where figurinhasDesejadas.Contains(ofertado.Figurinha.Nome) &&
                              figurinhasOfertadas.Contains(desejado.Figurinha.Nome) &&
                              Oferta.Usuario.Login.ToLower() == user.ToLower()

                              select Oferta;

                // O código abaixo implementa um match parcial
                //var qOferta = from Oferta in contexto.OfertasSet
                //              join ofertado in contexto.FigurinhasOfertadasSet
                //                on Oferta.Id equals ofertado.OfertasId
                //              join ofertado2 in oferta.FigurinhasOfertadas
                //                on ofertado.Figurinha.Id equals ofertado2.Figurinha.Id
                //              join desejado in contexto.FigurinhasDesejadasSet
                //                on Oferta.Id equals desejado.OfertasId
                //              join desejado2 in oferta.FigurinhasDesejadas
                //                on ofertado.Figurinha.Id equals desejado2.Figurinha.Id
                //              where Oferta.Usuario.Login.ToLower() == user.ToLower()

                //              select Oferta;

                qOferta = ((ObjectQuery <Ofertas>)qOferta
                           .Where(a => a.TrocasSolicitado == null || !a.TrocasSolicitado.TrocaRealizada))        // Ainda não houve trocas efetivas
                          .Include("Usuario")
                          .Include("FigurinhasDesejadas")
                          .Include("FigurinhasOfertadas")
                          .Include("FigurinhasDesejadas.Figurinha")
                          .Include("FigurinhasOfertadas.Figurinha")
                          .Include("FigurinhasDesejadas.Figurinha.Album")
                          .Include("FigurinhasOfertadas.Figurinha.Album")
                          .Include("FigurinhasDesejadas.Figurinha.Imagem")
                          .Include("FigurinhasOfertadas.Figurinha.Imagem");

                ofertas = qOferta.ToList();
            }

            return(ofertas);
        }
        public bool ValidarLogin(string senha)
        {
            bool loginValido;

            using (ModelDBFigurinhasContainer contexto = new ModelDBFigurinhasContainer())
            {
                var usuario = contexto.UsuarioSet.Where(a => a.Login == Login && a.Senha == senha);
                loginValido = (usuario.ToList <Usuario>().Count == 1);
            }
            return(loginValido);
        }
        public Usuario BuscarOfertas()
        {
            Usuario dadosUsuario;

            using (ModelDBFigurinhasContainer contexto = new ModelDBFigurinhasContainer())
            {
                //var qUserComOferta = from oferta in contexto.OfertasSet
                //                     join usuario in contexto.UsuarioSet
                //                       on oferta.Usuario.Id equals usuario.Id
                //                    where oferta.TrocaSolicitante != null
                //                       && usuario.Login.ToLower() == login

                //                     select usuario;

                var qUserComOferta = from oferta in contexto.OfertasSet
                                     join usuario in contexto.UsuarioSet
                                     on oferta.Usuario.Id equals usuario.Id
                                     where usuario.Login.ToLower() == login &&
                                     oferta.TrocasSolicitado == null

                                     select usuario;

                var qUser = ((ObjectQuery <Usuario>)qUserComOferta)
                            .Include("Ofertas")
                            .Include("Ofertas.TrocaSolicitante")
                            .Include("Ofertas.TrocasSolicitado")
                            .Include("Ofertas.FigurinhasDesejadas")
                            .Include("Ofertas.FigurinhasOfertadas")
                            .Include("Ofertas.FigurinhasDesejadas.Figurinha")
                            .Include("Ofertas.FigurinhasOfertadas.Figurinha")
                            .Include("Ofertas.FigurinhasDesejadas.Figurinha.Album")
                            .Include("Ofertas.FigurinhasOfertadas.Figurinha.Album")
                            .Include("Ofertas.FigurinhasDesejadas.Figurinha.Imagem")
                            .Include("Ofertas.FigurinhasOfertadas.Figurinha.Imagem");

                if (qUser.Count() < 1)
                {
                    dadosUsuario = null;
                }
                else
                {
                    dadosUsuario = qUser.First <Usuario>();
                }
            }

            if (dadosUsuario == null)
            {
                throw new BusinessException("Usuário não possui ofertas.");
            }

            return(dadosUsuario);
        }
        public Trocas EfetuarTroca(int idOferta, int idOfertaSolicitada, bool confirmada)
        {
            Trocas troca = new Trocas();

            using (ModelDBFigurinhasContainer contexto = new ModelDBFigurinhasContainer())
            {
                var qOferta           = contexto.OfertasSet.Where(a => a.Id == idOferta).First();
                var qOfertaSolicitada = contexto.OfertasSet.Where(a => a.Id == idOfertaSolicitada).First();

                Trocas novaTroca = new Trocas
                {
                    DataDaSolicitacao = DateTime.Now,
                    DataDaTroca       = DateTime.Now,
                    OfertaSolicitante = qOferta,
                    OfertaSolicitado  = qOfertaSolicitada,
                    TrocaRealizada    = confirmada
                };

                contexto.TrocasSet.AddObject(novaTroca);
                contexto.SaveChanges();

                var qTroca = ((ObjectQuery <Trocas>)contexto.TrocasSet
                              .Where(a => a.OfertaSolicitante.Id == idOferta || a.OfertaSolicitado.Id == idOfertaSolicitada))
                             .Include("OfertaSolicitante")
                             .Include("OfertaSolicitante.FigurinhasDesejadas")
                             .Include("OfertaSolicitante.FigurinhasOfertadas")
                             .Include("OfertaSolicitante.FigurinhasDesejadas.Figurinha")
                             .Include("OfertaSolicitante.FigurinhasOfertadas.Figurinha")
                             .Include("OfertaSolicitante.FigurinhasDesejadas.Figurinha.Album")
                             .Include("OfertaSolicitante.FigurinhasOfertadas.Figurinha.Album")
                             .Include("OfertaSolicitante.FigurinhasDesejadas.Figurinha.Imagem")
                             .Include("OfertaSolicitante.FigurinhasOfertadas.Figurinha.Imagem")
                             .Include("OfertaSolicitado")
                             .Include("OfertaSolicitado.FigurinhasDesejadas")
                             .Include("OfertaSolicitado.FigurinhasOfertadas")
                             .Include("OfertaSolicitado.FigurinhasDesejadas.Figurinha")
                             .Include("OfertaSolicitado.FigurinhasOfertadas.Figurinha")
                             .Include("OfertaSolicitado.FigurinhasDesejadas.Figurinha.Album")
                             .Include("OfertaSolicitado.FigurinhasOfertadas.Figurinha.Album")
                             .Include("OfertaSolicitado.FigurinhasDesejadas.Figurinha.Imagem")
                             .Include("OfertaSolicitado.FigurinhasOfertadas.Figurinha.Imagem");

                troca = qTroca.First();
            }

            return(troca);
        }
        public Usuario BuscarTrocas()
        {
            Usuario dadosUsuario;

            using (ModelDBFigurinhasContainer contexto = new ModelDBFigurinhasContainer())
            {
                var qUser = from usuario in contexto.UsuarioSet
                            join oferta in contexto.OfertasSet
                            on usuario equals oferta.Usuario
                            where usuario.Login.ToLower() == login ||
                            oferta.TrocaSolicitante != null ||
                            oferta.TrocasSolicitado != null

                            select usuario;

                qUser = ((ObjectQuery <Usuario>)qUser)
                        .Include("Ofertas.TrocaSolicitante.OfertaSolicitante.FigurinhasDesejadas.Figurinha.Album")
                        .Include("Ofertas.TrocaSolicitante.OfertaSolicitante.FigurinhasOfertadas.Figurinha.Album")
                        .Include("Ofertas.TrocaSolicitante.OfertaSolicitante.FigurinhasDesejadas.Figurinha.Imagem")
                        .Include("Ofertas.TrocaSolicitante.OfertaSolicitante.FigurinhasOfertadas.Figurinha.Imagem")
                        .Include("Ofertas.TrocaSolicitante.OfertaSolicitado.FigurinhasDesejadas.Figurinha.Album")
                        .Include("Ofertas.TrocaSolicitante.OfertaSolicitado.FigurinhasOfertadas.Figurinha.Album")
                        .Include("Ofertas.TrocaSolicitante.OfertaSolicitado.FigurinhasDesejadas.Figurinha.Imagem")
                        .Include("Ofertas.TrocaSolicitante.OfertaSolicitado.FigurinhasOfertadas.Figurinha.Imagem")
                        .Include("Ofertas.TrocasSolicitado.OfertaSolicitado.FigurinhasDesejadas.Figurinha.Album")
                        .Include("Ofertas.TrocasSolicitado.OfertaSolicitado.FigurinhasOfertadas.Figurinha.Album")
                        .Include("Ofertas.TrocasSolicitado.OfertaSolicitado.FigurinhasDesejadas.Figurinha.Imagem")
                        .Include("Ofertas.TrocasSolicitado.OfertaSolicitado.FigurinhasOfertadas.Figurinha.Imagem")
                        .Include("Ofertas.TrocasSolicitado.OfertaSolicitante.FigurinhasDesejadas.Figurinha.Album")
                        .Include("Ofertas.TrocasSolicitado.OfertaSolicitante.FigurinhasOfertadas.Figurinha.Album")
                        .Include("Ofertas.TrocasSolicitado.OfertaSolicitante.FigurinhasDesejadas.Figurinha.Imagem")
                        .Include("Ofertas.TrocasSolicitado.OfertaSolicitante.FigurinhasOfertadas.Figurinha.Imagem")
                ;


                dadosUsuario = qUser.First <Usuario>();
            }

            if (dadosUsuario == null)
            {
                throw new BusinessException("Usuário não existe.");
            }

            return(dadosUsuario);
        }
        public void EditarOferta(int idOferta, int[] idFigurinhasOfertadas, int[] idFigurinhasDesejadas)
        {
            using (ModelDBFigurinhasContainer contexto = new ModelDBFigurinhasContainer())
            {
                var qOferta = from Oferta in contexto.OfertasSet
                              where Oferta.Id == idOferta

                              select Oferta;

                if (qOferta.Count() < 1)
                {
                    throw new BusinessException("Oferta não encontrada.");
                }
                Ofertas oferta = qOferta.First();

                while (oferta.FigurinhasDesejadas.Count() > 0)
                {
                    contexto.FigurinhasDesejadasSet.DeleteObject(oferta.FigurinhasDesejadas.First());
                }
                while (oferta.FigurinhasOfertadas.Count() > 0)
                {
                    contexto.FigurinhasOfertadasSet.DeleteObject(oferta.FigurinhasOfertadas.First());
                }

                foreach (int idOfertada in idFigurinhasOfertadas)
                {
                    var figurinhaOfertada = contexto.FigurinhasOfertadasSet.CreateObject();
                    figurinhaOfertada.Figurinha =
                        contexto.FigurinhaSet.Where(a => a.Id == idOfertada).First();
                    oferta.FigurinhasOfertadas.Add(figurinhaOfertada);
                }

                foreach (int idDesejada in idFigurinhasDesejadas)
                {
                    var figurinhaDesejada = contexto.FigurinhasDesejadasSet.CreateObject();
                    figurinhaDesejada.Figurinha =
                        contexto.FigurinhaSet.Where(a => a.Id == idDesejada).First();
                    oferta.FigurinhasDesejadas.Add(figurinhaDesejada);
                }

                contexto.SaveChanges();
            }
        }
        public void CriarOferta(string login, int[] idFigurinhasOfertadas, int[] idFigurinhasDesejadas)
        {
            using (ModelDBFigurinhasContainer contexto = new ModelDBFigurinhasContainer())
            {
                var novaOferta = contexto.OfertasSet.CreateObject();

                foreach (int idOfertada in idFigurinhasOfertadas)
                {
                    var figurinhaOfertada = contexto.FigurinhasOfertadasSet.CreateObject();
                    figurinhaOfertada.Figurinha =
                        contexto.FigurinhaSet.Where(a => a.Id == idOfertada).First();

                    novaOferta.FigurinhasOfertadas.Add(figurinhaOfertada);
                }

                foreach (int idDesejada in idFigurinhasDesejadas)
                {
                    var figurinhaDesejada = contexto.FigurinhasDesejadasSet.CreateObject();
                    figurinhaDesejada.Figurinha =
                        contexto.FigurinhaSet.Where(a => a.Id == idDesejada).First();

                    novaOferta.FigurinhasDesejadas.Add(figurinhaDesejada);
                }

                var qUsuario = from usuario in contexto.UsuarioSet
                               where usuario.Login.ToLower() == login.ToLower()

                               select usuario;

                if (qUsuario.Count() < 1)
                {
                    throw new BusinessException("Usuário não existe.");
                }

                Usuario user = qUsuario.First();
                user.Ofertas.Add(novaOferta);

                contexto.SaveChanges();
            }
        }
        public List<Album> BuscarAlbuns()
        {
            List<Album> albuns = new List<Album>();

            using (ModelDBFigurinhasContainer contexto = new ModelDBFigurinhasContainer())
            {


                var qAlbum = ((ObjectQuery<Album>)contexto.AlbumSet.Where(a => a.Figurinhas != null))
                                 .Include("Figurinha")
                                 .Include("Figurinha.Album")
                                 .Include("Figurinha.Imagem");

                albuns = qAlbum.ToList();
            }

            if (albuns.Count == 0)
            {
                throw new BusinessException("Nenhum album encontrado.");
            }

            return albuns;
        }
        public List <Ofertas> BuscarDesejadasPorNome(string user, string nomeFigurinha)
        {
            List <Ofertas> ofertas;

            using (ModelDBFigurinhasContainer contexto = new ModelDBFigurinhasContainer())
            {
                var qOferta = from Oferta in contexto.OfertasSet
                              join Desejada in contexto.FigurinhasDesejadasSet
                              on Oferta.Id equals Desejada.OfertasId
                              where Desejada.Figurinha.Nome.Contains(nomeFigurinha) &&
                              Oferta.Usuario.Login.ToLower() != user.ToLower()

                              select Oferta;

                qOferta = ((ObjectQuery <Ofertas>)qOferta
                           .Where(a => a.TrocasSolicitado == null || !a.TrocasSolicitado.TrocaRealizada))        // Ainda não houve trocas efetivas
                          .Include("Usuario")
                          .Include("FigurinhasDesejadas")
                          .Include("FigurinhasOfertadas")
                          .Include("FigurinhasDesejadas.Figurinha")
                          .Include("FigurinhasOfertadas.Figurinha")
                          .Include("FigurinhasDesejadas.Figurinha.Album")
                          .Include("FigurinhasOfertadas.Figurinha.Album")
                          .Include("FigurinhasDesejadas.Figurinha.Imagem")
                          .Include("FigurinhasOfertadas.Figurinha.Imagem");

                ofertas = qOferta.ToList();
            }

            if (ofertas.Count == 0)
            {
                throw new BusinessException("Nenhuma oferta encontrada.");
            }

            return(ofertas);
        }