/// <summary> /// obtém as raízes de uma HierarchicalList /// </summary> /// <param name="lista">HierarchicalList - lista hierárquica a se obterem as raizes</param> /// <returns>HierarchicalList - lista apenas com as raízes</returns> private TFWHierarchicalList _getRoots(TFWHierarchicalList lista) { //return lista.GetRoot(); var orfaos = lista.Where(x => !lista.Select(i => i.Id).Contains(x.IdPai ?? 0)).ToList(); return(new TFWHierarchicalList(orfaos)); }
/// <summary> /// obtém uma estrutura TFWHierarchicalList com os projectnodes montados /// </summary> /// <returns>TFWHierarchicalList - lista com todos os projectnodes em forma de elementos hierárquicos</returns> public TFWHierarchicalList GetTree() { TFWHierarchicalList result = new TFWHierarchicalList(); foreach (var n in this._db.ProjectNodes.AsNoTracking().OrderBy(x => x.Nome)) { result.Add(n.Id, n.Pai != null ? n.Pai.Id : new Nullable <int>(), n.NodeLabel.Nome + ": " + n.Nome); } return(result); }
private void CarregaNodes(int?valor = null) { var nodes = db.ProjectNodes.ToList(); TFWHierarchicalList lst = new TFWHierarchicalList(); foreach (var n in nodes) { lst.Add(n.Id, n.Pai != null ? n.Pai.Id : new Nullable <int>(), n.Nome); } ViewBag.Nodes = lst; }
private void CarregaProjetos(int?valor = null) { var nodes = db.ProjectNodes.AsNoTracking().ToList(); TFWHierarchicalList lst = new TFWHierarchicalList(); foreach (var n in nodes) { lst.Add(n.Id, n.Pai != null ? n.Pai.Id : new Nullable <int>(), n.Nome); } //SelectList NodeSelectList = new SelectList(nodes, "Id", "Nome", valor); ViewBag.Nodes = lst; }
/// <summary> /// /// </summary> /// <param name="helper">HtmlHelper - helper para chamar esse método a partir de @HTML no razor</param> /// <param name="name">string - name do controle/input no formulário</param> /// <param name="id">string - id do controle no formulário</param> /// <param name="classe">string - classe OptionNivelX para identificar a profundidade da classe</param> /// <param name="lista">TFWHierarchicalList - lista hierárquica com os dados estruturados</param> /// <param name="valorAtual">string - valor atual selecionado</param> /// <param name="useValorpath">bool - ture para mostrar o path inteiro, false para mostrar só o valor corrente</param> /// <param name="formato">TFWFormatacaoDeArvore - define se deve permitir ou restringir a seleção de opções raiz, galhos ou pais de grupos</param> /// <param name="htmlAttributes">Objeto - lista de atributos para serem adicionados como atributos html no código gerado</param> /// <returns>MvcHtmlString - string razor com o HTML para gerar um dropdown hierárquico</returns> public static MvcHtmlString DropDownHierarquico( this HtmlHelper helper, string name, string id, string classe, TFWHierarchicalList lista, string valorAtual, bool useValorpath = false, TFWFormatacaoDeArvore formato = TFWFormatacaoDeArvore.PermitirNosComFilhos, object htmlAttributes = null) { TreeViewComboBuilder trv = new TreeViewComboBuilder(name, id, classe); trv.HierarchicalDataBind(lista, valorAtual, useValorpath, formato); return(new MvcHtmlString(trv.GetDropDown(htmlAttributes))); }
/// <summary> /// obtém todos os nós de projeto em forma de um TFWHierarchicalList /// deixando pré selecionada a opção que vier como parâmetro em caso de edição da form /// </summary> /// <param name="valor">int? - valor que já estava selecionado ou salvo no Model</param> /// <returns>TFWHierarchicalList - lista para usar em um combo com simulação de hierarquia no estilo</returns> public static TFWHierarchicalList GetNodes(int?valor = null) { TPAContext db = new TPAContext(); TFWHierarchicalList lstUsuario = new TFWHierarchicalList(); TFWHierarchicalList lst = new TFWHierarchicalList(); List <int> idsNodesUsuario = new List <int>(); var usu = HttpContext.Current.User.Identity.Name; var usuLogado = db.Usuarios.Where(u => u.Login == usu).FirstOrDefault(); if (usuLogado != null) { var nodes = usuLogado.NosDoUsuario.ToList(); if (nodes != null && nodes.Any()) { foreach (var n in nodes) { lstUsuario.Add(n.Id, n.Pai != null ? n.Pai.Id : new Nullable <int>(), n.Nome); } } } idsNodesUsuario.AddRange(lstUsuario.Select(s => s.Id).ToList()); foreach (var node in db.ProjectNodes.ToList()) { if (idsNodesUsuario.Contains(node.Id)) { lst.Add(node.Id, node.Pai_Id != null ? node.Pai_Id : new Nullable <int>(), node.Nome); } else { lst.Add(node.Id, node.Pai != null ? node.Pai.Id : new Nullable <int>(), node.Nome, false); } } return(lst); }
private void CarregaProjetos(int?valor = null) { TFWHierarchicalList lstUsuario = new TFWHierarchicalList(); TFWHierarchicalList lst = new TFWHierarchicalList(); List <int> idsNodesUsuario = new List <int>(); var usu = this.User.Identity.Name; var usuLogado = db.Usuarios.Where(u => u.Login == usu).FirstOrDefault(); if (usuLogado != null) { var nodes = usuLogado.NosDoUsuario.ToList(); if (nodes != null && nodes.Any()) { foreach (var n in nodes) { lstUsuario.Add(n.Id, n.Pai != null ? n.Pai.Id : new Nullable <int>(), n.Nome); } } } idsNodesUsuario.AddRange(lstUsuario.Select(s => s.Id).ToList()); foreach (var node in db.ProjectNodes.ToList()) { if (idsNodesUsuario.Contains(node.Id)) { lst.Add(node.Id, node.Pai_Id != null ? node.Pai_Id : new Nullable <int>(), node.Nome); } else { lst.Add(node.Id, node.Pai != null ? node.Pai.Id : new Nullable <int>(), node.Nome, false); } } ViewBag.Nodes = lst; }
/// <summary> /// obtém os ProjectNodes organizados na forma de TFWHierarchicalList, com lazy load /// </summary> /// <returns>TFWHierarchicalList - estrutura hierárquica com todos os ProjectNodes</returns> public virtual TFWHierarchicalList GetNodeTree() { if (_listNodes == null) { _listNodes = new TFWHierarchicalList(); } if (_listNodes.Count == 0) { foreach (ProjectNode n in _rep.GetAll()) { _listNodes.Add(n.Id, n.Pai_Id, n.Nome); } } TFWHierarchicalList result = new TFWHierarchicalList(); foreach (TFWHierarchicalParameter p in _listNodes) { result.Add(p.Id, p.IdPai, p.Valor); } return(result); }
/// <summary> /// método privado recursivo que constroi e estiliza os itens de um DropDownList ou ListBox hierárquico /// </summary> /// <param name="lista">HierarchicalList a ter seus itens publicados</param> /// <param name="useValorpath">bool - define se usará um tooltip com o caminho completo ou não</param> /// <param name="formato">FormatacaoDeArvore - define se permite ou não seleção de itens com nodes filhos</param> /// <param name="nivel">int - nivel corrente na hierarquia</param> /// <param name="primeiroVazio">bool - define se o primeiro item é vazio ou não. É passado true somente na primeira iteração recursiva.</param> private void _scanTrees(TFWHierarchicalList lista, string valorAtual, bool useValorpath, TFWFormatacaoDeArvore formato, int nivel = 0, bool primeiroVazio = true) { if (primeiroVazio && (nivel == 0)) { _items.Add("<option value=\"\"></option>"); } foreach (var c in lista) { string itemStr = "<option {3} {4} {5} data-toggle=\"tooltip\" title=\"{2}\" value=\"{0}\">{1}</option>"; string[] parts = c.ValorPath.Split('/').ToArray(); string caminho = String.Join("/", parts); string valor = c.Id.ToString("0"); string texto = (useValorpath && !string.IsNullOrWhiteSpace(caminho)) ? caminho : c.Valor; var path = c.ValorPath; string title = path; string classe = ""; string disabl = ""; string selected = c.Id.ToString("0") == valorAtual?"selected":""; //deve repetir essa verificação antes da chamada recursiva e antes de adicionar o item if (c.HasChildren) { switch (formato) { case TFWFormatacaoDeArvore.SugerirApenasFolhas: classe = string.Format("class=\"{0}\"", "OptionNivel" + nivel.ToString("0") + " disabled"); break; case TFWFormatacaoDeArvore.PermitirApenasFolhas: classe = string.Format("class=\"{0}\"", "OptionNivel" + nivel.ToString("0") + " disabled"); disabl = "disabled=\"disabled\""; break; default: classe = string.Format("class=\"{0}\"", "OptionNivel" + nivel.ToString("0")); break; } } else { classe = string.Format("class=\"{0}\"", "OptionNivel" + nivel.ToString("0")); } if (!c.Ativo) { disabl = "disabled=\"disabled\""; } _items.Add(string.Format(itemStr, valor, texto, title, classe, disabl, selected)); if (c.HasChildren) { _scanTrees((TFWHierarchicalList)c.GetChildren(), valorAtual, useValorpath, formato, nivel + 1, false); } } }
/// <summary> /// percorre uma lista hierárquica em usa profundidade para adicionar os itend em um ListBox /// </summary> /// <param name="lista">HierarchicalList - lisa hierárquica a ser exibida em um combo</param> /// <param name="useValorpath">bool - define se deve ser criado um hint/tooltip com o caminho completo do item</param> /// <param name="formato">define se é permitido ou não nodes com filhos, e se eles são selecionáveis ou não</param> public void HierarchicalDataBind(TFWHierarchicalList lista, string valorAtual, bool useValorpath = false, TFWFormatacaoDeArvore formato = TFWFormatacaoDeArvore.PermitirNosComFilhos) { _scanTrees(_getRoots(lista), valorAtual, useValorpath, formato, 0, true); }
/// <summary> /// importa uma planilha do excel com atividades para um usuário /// </summary> /// <param name="idUsuario">int - id do usuário</param> /// <param name="pkg">ExcelPackage - package da Epplus criado com os dados da planilha como stream</param> /// <returns>ImportacaoPlanilhaAtividadesUsuarioViewModel - viewmodel com as atividades para serem editadas e postadas</returns> public virtual ImportacaoPlanilhaAtividadesUsuarioViewModel TransformarPlanilhaUsuario(int idUsuario, ExcelPackage pkg) { TFWHierarchicalList projetos = new TFWHierarchicalList(); foreach (var pn in _db.ProjectNodes.AsNoTracking().ToList()) { projetos.Add(pn.Id, pn.Pai == null? new Nullable <int>() : pn.Pai.Id, pn.Nome); } ImportacaoPlanilhaAtividadesUsuarioViewModel result = new ImportacaoPlanilhaAtividadesUsuarioViewModel(); CalendarioServices cal = new CalendarioServices(); result.IdUsuario = idUsuario; const int LINHA_INICIAL = 15; const int LINHA_FINAL = 79; const int COLUNA_PROJETO = 1; const int COLUNA_DATA = 2; const int COLUNA_ENTM = 3; const int COLUNA_SAIM = 4; const int COLUNA_ENTT = 5; const int COLUNA_SAIT = 6; const int COLUNA_HORAS = 9; const int COLUNA_TIPOATIVIDADE = 10; const int COLUNA_DESCRICAO = 11; var currentSheet = pkg.Workbook.Worksheets; var workSheet = currentSheet.First(); var noOfCol = workSheet.Dimension.End.Column; var noOfRow = workSheet.Dimension.End.Row; for (int rowIterator = LINHA_INICIAL; rowIterator <= noOfRow || rowIterator <= LINHA_FINAL; rowIterator++) { ItemImportacaoPlanilha item = new ItemImportacaoPlanilha(); item.IdUsuario = idUsuario; TimeSpan qtdHoras = ExcelToTimeSpan(workSheet.Cells[rowIterator, COLUNA_HORAS].Value); if ((workSheet.Cells[rowIterator, COLUNA_PROJETO].Value != null) && (qtdHoras > TimeSpan.MinValue)) { DateTime?data = ExcelToNullableDateTime(workSheet.Cells[rowIterator, COLUNA_DATA].Value); //a data tem que ser não nula e dia util if ((data != null) && (cal.IsDiaUtil(data.Value))) { item.Data = data.Value; item.Descricao = workSheet.Cells[rowIterator, COLUNA_DESCRICAO].Value != null ? workSheet.Cells[rowIterator, COLUNA_DESCRICAO].Value.ToString() : ""; item.EntradaManha = ExcelToNullableTimeSpan(workSheet.Cells[rowIterator, COLUNA_ENTM].Value); item.SaidaManha = ExcelToNullableTimeSpan(workSheet.Cells[rowIterator, COLUNA_SAIM].Value); item.EntradaTarde = ExcelToNullableTimeSpan(workSheet.Cells[rowIterator, COLUNA_ENTT].Value); item.SaidaTarde = ExcelToNullableTimeSpan(workSheet.Cells[rowIterator, COLUNA_SAIT].Value); if (workSheet.Cells[rowIterator, COLUNA_PROJETO].Value != null) { string nome = workSheet.Cells[rowIterator, COLUNA_PROJETO].Value.ToString(); //procura por path completo var proj = projetos.Where(n => n.ValorPath == nome).FirstOrDefault(); if (proj != null) { item.IdProjeto = proj.Id; } else { //procura só por nome proj = projetos.Where(n => n.Valor == nome).FirstOrDefault(); if (proj != null) { item.IdProjeto = proj.Id; } } } if (workSheet.Cells[rowIterator, COLUNA_TIPOATIVIDADE].Value != null) { string nome = workSheet.Cells[rowIterator, COLUNA_TIPOATIVIDADE].Value.ToString(); var atv = _db.TiposAtividade.Where(n => n.Nome == nome).FirstOrDefault(); if (atv != null) { item.IdTipoAtividade = atv.Id; } } result.Itens.Add(item); } } } return(result); }