Example #1
0
        public ActionResult Create(int?id)
        {
            ProjectNodeViewModel pn = new ProjectNodeViewModel();

            if (id != null && id > 0)
            {
                pn.IdPai = id;
                pn.Pai   = db.ProjectNodes.Find(id);
            }

            CarregaNodeLabels();
            return(View(pn));
        }
Example #2
0
        public async Task <ActionResult> Edit([Bind(Include = "Id,Nome,HorasEstimadas, IdNodeLabel")] ProjectNodeViewModel projectNodeVm)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var existente = db.ProjectNodes.Any(x => (x.Pai_Id ?? 0) == (projectNodeVm.IdPai ?? 0) && x.Nome == projectNodeVm.Nome);
                    if (existente)
                    {
                        MensagemParaUsuarioViewModel.MensagemErro("Já existe um item com esse mesmo nome debaixo deste nó de projeto. \r\n  Itens de projetos com nomes repetidos podem existir dentro de nós de projeto diferentes, mas não debaixo do mesmo nó.", TempData, ModelState);
                        CarregaNodeLabels();
                        return(View(projectNodeVm));
                    }
                }
                catch (Exception err)
                {
                    MensagemParaUsuarioViewModel.MensagemErro("Não foi possível pesquisar no banco de dados por este item.\r\n " + LogServices.ConcatenaExceptions(err), TempData, ModelState);
                    CarregaNodeLabels();
                    return(View(projectNodeVm));
                }

                try
                {
                    ProjectNode pn = db.ProjectNodes.Find(projectNodeVm.Id);
                    NodeLabel   nl = db.NodeLabels.Find(projectNodeVm.IdNodeLabel);

                    int?idpai = pn.Pai != null?pn.Pai.Id:new Nullable <int>();

                    pn.Nome           = projectNodeVm.Nome;
                    pn.HorasEstimadas = projectNodeVm.HorasEstimadas;
                    pn.NodeLabel      = nl;

                    await db.SaveChangesAsync();

                    return(RedirectToAction("Index", new { Id = idpai }));
                }
                catch (DbUpdateConcurrencyException duce)
                {
                    MensagemParaUsuarioViewModel.MensagemErro(" Talvez esse registro tenha sido excluído por outra pessoa. \r\n " + LogServices.ConcatenaExceptions(duce), TempData, ModelState);
                }
                catch (Exception err)
                {
                    MensagemParaUsuarioViewModel.MensagemErro("Esse registro não pôde ser salvo. \r\n " + LogServices.ConcatenaExceptions(err), TempData, ModelState);
                }
            }

            CarregaNodeLabels();
            return(View(projectNodeVm));
        }
Example #3
0
    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        if (item == null || container is null)
        {
            return(null);
        }

        return(item switch
        {
            ProjectNodeViewModel _ => ProjectNodeTemplate,
            FolderNodeViewModel _ => FolderNodeTemplate,
            DataFileNodeViewModel _ => DataFileNodeTemplate,
            ArrangerNodeViewModel _ => ArrangerNodeTemplate,
            PaletteNodeViewModel _ => PaletteNodeTemplate,
            _ => throw new ArgumentException($"{nameof(SelectTemplate)} does not contain a template for type {item.GetType()}")
        });
Example #4
0
        public async Task <ActionResult> Edit(int?id)
        {
            if (id == null)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Não foi especificado um item para editar", TempData, ModelState);
                return(RedirectToAction("index"));
            }

            try
            {
                ProjectNode projectNode = await db.ProjectNodes.FindAsync(id);

                if (projectNode == null)
                {
                    MensagemParaUsuarioViewModel.MensagemErro("O item não foi encontrado", TempData, ModelState);
                    return(RedirectToAction("index"));
                }

                ProjectNodeViewModel projectVm = new ProjectNodeViewModel
                {
                    HorasEstimadas = projectNode.HorasEstimadas,
                    Id             = projectNode.Id,
                    IdNodeLabel    = projectNode.NodeLabel != null ? projectNode.NodeLabel.Id : new Nullable <int>(),
                    IdPai          = projectNode.Pai != null ? projectNode.Pai.Id : new Nullable <int>(),
                    Pai            = projectNode.Pai,
                    Nome           = projectNode.Nome
                };

                CarregaNodeLabels(projectNode.NodeLabel != null ? projectNode.NodeLabel.Id : 0);
                return(View(projectVm));
            }
            catch (Exception err)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Erro ao procurar nó de projeto: < br />\r\n " + LogServices.ConcatenaExceptions(err), TempData, ModelState);
                return(RedirectToAction("index"));
            }
        }
        public async Task <ApiResult <ProjectNodeViewModel> > Item(int ID)
        {
            var                  res = new ApiResult <ProjectNodeViewModel>();
            ProjectNodeInfo      m;
            ProjectNodeViewModel n = new ProjectNodeViewModel();

            if (ID > 0)
            {
                m = PNdb.GetId(ID);
                if (m != null)
                {
                    n = IMapper.Map <ProjectNodeViewModel>(m);
                    ProjectInfo projectInfo = Projectdb.Get("Projects", m.ProjectID);
                    if (projectInfo != null)
                    {
                        n.ProjectName   = projectInfo.Names;
                        n.ProjectTypeID = projectInfo.ProjectTypeID;
                    }
                    res.success = true;
                }
            }
            res.data = n;
            return(await Task.Run(() => res));
        }
Example #6
0
        public async Task <JsonResult> Salvar([Bind(Include = "Id, Nome, Descricao, HorasEstimadas, IdPai, IdNodeLabel, NomeNodeLabel")] ProjectNodeViewModel projectNodeVm)
        {
            MensagemParaUsuarioViewModel result = new MensagemParaUsuarioViewModel();

            if (ModelState.IsValid)
            {
                try
                {
                    var existente = db.ProjectNodes.Any(x => (x.Pai_Id ?? 0) == projectNodeVm.IdPai && x.Nome == projectNodeVm.Nome && x.Id != projectNodeVm.Id);
                    if (existente)
                    {
                        result.Titulo   = "Nome Duplicado.";
                        result.Mensagem = "Já existe um item com esse mesmo nome debaixo deste nó de projeto. \r\n  Itens de projetos com nomes repetidos podem existir dentro de nós de projeto diferentes, mas não debaixo do mesmo nó.";
                        result.Sucesso  = false;

                        return(Json(result));
                    }
                }
                catch (Exception err)
                {
                    result.Titulo   = "Erro.";
                    result.Mensagem = "Não foi possível pesquisar no banco de dados por este item.\r\n " + LogServices.ConcatenaExceptions(err);;
                    result.Sucesso  = false;

                    return(Json(result));
                }

                ProjectNode pn = new ProjectNode();

                if (projectNodeVm.Id > 0)
                {
                    pn = db.ProjectNodes.Find(projectNodeVm.Id) ?? new ProjectNode();
                }
                else
                {
                    //só procura o pai para novos
                    if ((projectNodeVm.IdPai ?? 0) > 0)
                    {
                        ProjectNode pai = db.ProjectNodes.Where(x => x.Id == projectNodeVm.IdPai).FirstOrDefault();
                        if (pai != null)
                        {
                            pn.Pai = pai;
                        }
                    }

                    db.ProjectNodes.Add(pn);
                }

                pn.HorasEstimadas = projectNodeVm.HorasEstimadas;
                pn.Nome           = projectNodeVm.Nome;
                pn.Descricao      = projectNodeVm.Descricao;

                if ((projectNodeVm.IdNodeLabel ?? 0) > 0)
                {
                    NodeLabel nl = db.NodeLabels.Find(projectNodeVm.IdNodeLabel);
                    if (nl != null)
                    {
                        pn.NodeLabel = nl;

                        projectNodeVm.NomeNodeLabel = nl.Nome;
                    }
                }

                try
                {
                    await db.SaveChangesAsync();

                    result.Titulo   = "Salvar nó de projeto.";
                    result.Mensagem = "Salvo com sucesso!";

                    //atualiza o projectNodeVm para os dados voltarem para o node da treeview
                    projectNodeVm.Id    = pn.Id;
                    projectNodeVm.IdPai = pn.Pai != null ? pn.Pai.Id : new Nullable <int>();

                    result.Objeto  = projectNodeVm;
                    result.Sucesso = true;
                }
                catch (DbUpdateConcurrencyException duce)
                {
                    result.Titulo   = "Erro de concorrência ao salvar.";
                    result.Mensagem = "Talvez esse registro tenha sido excluído por outra pessoa. \r\n " + LogServices.ConcatenaExceptions(duce);
                    result.Sucesso  = false;
                }
                catch (Exception err)
                {
                    result.Titulo   = "Erro ao salvar.";
                    result.Mensagem = "Esse registro não pôde ser salvo.\r\n " + LogServices.ConcatenaExceptions(err);;
                    result.Sucesso  = false;
                }
            }
            else
            {
                result.Titulo   = "Estado inválido";
                result.Mensagem = "Favor corrigir erros de preenchimento do formulário";
                result.Sucesso  = false;
            }

            return(Json(result));
        }
        public async Task <ApiResult <IEnumerable <ProjectNodeViewModel> > > GetList(int pageIndex, string?ProjectTypeID, string?ProjectID, bool?IsEnable, int?State, string?Title)
        {
            var res = new ApiResult <IEnumerable <ProjectNodeViewModel> >()
            {
                statusCode = (int)ApiEnum.Status
            };
            int UserID = GetUserID();

            if (UserID > 0)
            {
                if (pageIndex == 0)
                {
                    pageIndex = 1;
                }
                var parm = Expressionable.Create <ProjectNodeInfo>();
                PagedInfo <ProjectNodeInfo> list = null;
                UserInfo userInfo = userdb.GetId(UserID);
                if (userInfo != null)
                {
                    var parm2 = Expressionable.Create <ProjectUserInfo>()
                                .AndIF(userInfo.RoleID != 1, o => o.UserID == UserID)
                                .And(o => o.IsEnable == true);
                    List <ProjectUserInfo> projectUserInfo = projectUserdb.GetWhere(parm2.ToExpression());
                    int[] nodes;
                    if (projectUserInfo != null && projectUserInfo.Count > 0)
                    {
                        if (userInfo.RoleID != 1)
                        {
                            nodes = new int[projectUserInfo.Count];
                            int i = 0;
                            foreach (var item in projectUserInfo)
                            {
                                nodes[i] = item.ProjectNodeID;
                                i++;
                            }
                            parm.AndIF(nodes.Length > 0, o => nodes.Contains(o.ID));
                        }
                        parm.AndIF(!string.IsNullOrWhiteSpace(ProjectID), m => m.ProjectID == ProjectID);
                        parm.AndIF(IsEnable != null, m => m.IsEnable == IsEnable);
                        parm.AndIF(State != null, m => m.State == State);
                        parm.AndIF(!string.IsNullOrWhiteSpace(Title), m => m.Title.Contains(Title));
                        parm.And(m => m.TypeID == 1);
                        if (!string.IsNullOrWhiteSpace(ProjectTypeID))
                        {
                            List <ProjectInfo> projects = Projectdb.GetList("Projects", Builders <ProjectInfo> .Filter.Where(o => o.ProjectTypeID == ProjectTypeID), null, null);
                            string[]           x        = new string[projects.Count];
                            int a = 0;
                            foreach (var item in projects)
                            {
                                x[a] = item.ID;
                                a++;
                            }
                            parm.And(m => x.Contains(m.ProjectID));
                        }
                        list = PNdb.GetPages(parm.ToExpression(), new PageParm(pageIndex), "ID DESC");
                    }
                    List <ProjectNodeViewModel> list2 = new List <ProjectNodeViewModel>();
                    if (list != null)
                    {
                        foreach (var item in list.DataSource)
                        {
                            ProjectNodeViewModel projectNodeViewModel = IMapper.Map <ProjectNodeViewModel>(item);
                            projectNodeViewModel.PlanCount = plandb.GetCount(o => o.ProjectNodeID == item.ID && o.ProjectID == item.ProjectID);
                            ProjectInfo     projectInfo = Projectdb.Get("Projects", item.ProjectID);
                            List <UserInfo> userInfos   = userdb.GetWhere(a => SqlFunc.Subqueryable <ProjectUserInfo>().Where(b => b.UserID == a.ID && b.ProjectNodeID == item.ID && b.Role == 1 && b.IsEnable == true).Any());
                            if (userInfos != null)
                            {
                                List <APITeamMembersViewModel> ats = new List <APITeamMembersViewModel>();
                                foreach (var item2 in userInfos)
                                {
                                    ats.Add(new APITeamMembersViewModel()
                                    {
                                        ID   = item2.ID,
                                        Name = userdb.GetNames(item2)
                                    });
                                }
                                projectNodeViewModel.Teamleades = ats;
                            }
                            List <UserInfo> userInfos2 = userdb.GetWhere(a => SqlFunc.Subqueryable <ProjectUserInfo>().Where(b => b.UserID == a.ID && b.ProjectNodeID == item.ID && b.Role == 2 && b.IsEnable == true).Any());
                            if (userInfos2 != null)
                            {
                                List <APITeamMembersViewModel> ats = new List <APITeamMembersViewModel>();
                                foreach (var item2 in userInfos2)
                                {
                                    ats.Add(new APITeamMembersViewModel()
                                    {
                                        ID   = item2.ID,
                                        Name = userdb.GetNames(item2)
                                    });
                                }
                                projectNodeViewModel.Teammembers = ats;
                            }
                            if (projectInfo != null)
                            {
                                projectNodeViewModel.ProjectName   = projectInfo.Names;
                                projectNodeViewModel.ProjectTypeID = projectInfo.ProjectTypeID;
                            }
                            list2.Add(projectNodeViewModel);
                        }
                        res.success = true;
                        res.data    = list2;
                        res.index   = pageIndex;
                        res.count   = list.TotalCount;
                        res.size    = list.PageSize;
                        res.pages   = list.TotalPages;
                    }
                    else
                    {
                        res.success    = true;
                        res.statusCode = (int)ApiEnum.Status;
                    }
                }
                else
                {
                    res.msg = "无该用户信息";
                }
            }
            else
            {
                res.msg = "请重新登陆";
            }
            return(await Task.Run(() => res));
        }