private Answer GetInfoPresentations(string territory, string password, bool returnAllProducts) { var territorio = GetTerritorio(territory, password); //verifica se há usuario simulando um territorio (significa que é uma agencia ou gerente acessando o sistema) var usuario = GetUsuarioByTerritorioSimulado(territory, password); var linha = GetLinhaByTerritorioSimulado(territory, password); if (territorio == null && usuario == null && linha == null) return new Answer(Answer.EnumStatus.ErroLogin, "Login e/ou senha inválido(s)"); //var produtosQuery = // from p in db.Produtos // where p.DoutorProdutos.Any(dp => dp.Doutor.IdTerritorio == territorio.Id) // select p; IQueryable<Produto> produtosQuery = null; var retornaProdutoTeste = false; var retornaProdutosPendentes = false; if (territorio != null) { //TERRITORIO if (returnAllProducts) { if (territorio.TerritorioLinhas.Count() > 0) { produtosQuery = db.Produtos.Where(p => territorio.TerritorioLinhas.Select(tl => tl.IdLinha).Contains(p.IdLinha)); } else { produtosQuery = db.Produtos.Where(p => p.IdLinha == territorio.IdLinha); } } else { //procura os produtos do territorio produtosQuery = from p in db.Produtos where p.DoutorProdutos.Any(dp => dp.Doutor.ProdutoLinha.Id == territorio.ProdutoLinha.Id) select p; } } else if (linha != null) { //LINHA if (returnAllProducts) { produtosQuery = db.Produtos; } else { //procura os produtos da linha produtosQuery = from p in db.Produtos where p.DoutorProdutos.Any(dp => dp.Doutor.ProdutoLinha.Id == linha.Id) select p; } } else { if (usuario.IsAdministrador()) { produtosQuery = db.Produtos; } else { //territorio na verdade é uma agencia ou gerente (sim, POG) produtosQuery = from p in db.Produtos where p.UsuarioProdutos.Any(up => up.IdUsuario == usuario.Id) select p; } retornaProdutoTeste = true; if (usuario.IsGerente()) { retornaProdutosPendentes = true; } } List<Presentation> presentations = new List<Presentation>(); //se for gerente Nacional Distrital ou Regional, n exibe nada e vai para o final if (usuario!= null && (usuario.IsGerenteNacional() || usuario.IsGerenteDistrital() || usuario.IsGerenteRegional())) { goto final; } foreach (var produtoDB in produtosQuery) { List<ProdutoVa> vas = new List<ProdutoVa>(); var vasAtivos = produtoDB.GetVAsAtivos(); foreach (var vaAtivo in vasAtivos) { vas.Add(vaAtivo); } if (retornaProdutoTeste) { var vasTeste = produtoDB.GetVAsTeste(); foreach (var vaTeste in vasTeste) { vas.Add(vaTeste); } } if (retornaProdutosPendentes) { var vasPendentes = produtoDB.GetVAsPendentes(); foreach (var vaPendente in vasPendentes) { vas.Add(vaPendente); } } foreach (var va in vas) { if (va != null) { Presentation presentation = new Presentation(); presentation.PreencherByVA(va, territorio, usuario, linha); presentations.Add(presentation); } } } final: return new Answer(Answer.EnumStatus.Ok, String.Empty, presentations); }
public Answer UpdatePresentationStatus(string territory, string password, int idPresentation, int status) { var usuario = GetUsuarioByTerritorioSimulado(territory, password); if (usuario == null) return new Answer(Answer.EnumStatus.ErroLogin, "Login e/ou senha inválido(s)"); Sessao.Site.Logar(usuario); ProdutoVaRepository vaRepository = new ProdutoVaRepository(); var va = vaRepository.GetProdutoVa(idPresentation); if(va == null) return new Answer(Answer.EnumStatus.Erro, "VA inválido"); if (!va.ValidoParaEdicao()) return new Answer(Answer.EnumStatus.Erro, "VA inválido para edição"); switch (status) { case 1: //aprovar va.Aprovar(); vaRepository.Save(); break; case 2: //reprovar va.Reprovar(); vaRepository.Save(); break; case 3: if (!va.IsAprovado()) { va.Aprovar(); vaRepository.Save(); } if (va.IsAprovado()) { va.Publicar(vaRepository); } break; default: break; } Presentation presentation = new Presentation(); presentation.PreencherByVA(va,null,usuario,null); return new Answer(Answer.EnumStatus.Ok, string.Empty, presentation); }