예제 #1
0
        /// <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));
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        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;
        }
예제 #4
0
        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;
        }
예제 #5
0
        /// <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)));
        }
예제 #6
0
        /// <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);
        }
예제 #7
0
        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;
        }
예제 #8
0
        /// <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);
        }
예제 #9
0
        /// <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);
                }
            }
        }
예제 #10
0
 /// <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);
 }
예제 #11
0
        /// <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);
        }