public ActionResult exportFicheirosToCsv(FilesUploadListViewModel viewModel, string sort, string direction, string tabNr)
        {
            if (tabNr == null || tabNr == "")
                tabNr = "1";

            viewModel.SetParameters(int.Parse(tabNr), 1, sort, direction, Request.Params);

            viewModel.PageSize = 0;
            FilesUploadListViewModel result = getFicheiros(viewModel);

            List<FicheiroToCsv> ficheirosCsv = new List<FicheiroToCsv>();
            foreach (Ficheiro file in result.ficheiros)
                ficheirosCsv.Add(new FicheiroToCsv
                {
                    entidade = file.entidade.nome,
                    nome = file.nomeFicheiro,
                    estado = file.estado.descricao.ToString(),
                    dataUpload = file.dataUpload.ToString(),
                    dataAlteracao = file.dataAlteracao.ToString(),
                    username = file.userName
                });

            CsvExport<FicheiroToCsv> csv = new CsvExport<FicheiroToCsv>(ficheirosCsv);

            byte[] fileBytes = csv.ExportToBytes();
            return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, "Ficheiros_" + DateTime.Now.ToShortDateString() + ".csv");
        }
        //
        // Get: /Index/
        //
        public ActionResult Index(FilesUploadListViewModel viewModel, string sort, string direction, int? page, string tabNr)
        {
            if (tabNr == null || tabNr == "")
                tabNr = "1";

            viewModel.SetParameters(int.Parse(tabNr), page == null ? 1 : page.Value, sort, direction, Request.Params);

            FilesUploadListViewModel result = getFicheiros(viewModel);
            return View(result);
        }
        protected FilesUploadListViewModel getFicheiros(FilesUploadListViewModel viewModel)
        {
            IPagedList<Ficheiro> ficheirosToView = null;
            IQueryable<Ficheiro> query = null;

            UserProfile user = usersRepository.GetUserByIDIncludeEntidade(WebSecurity.CurrentUserId);

            if (viewModel.entidadeId == default(int))
                viewModel.entidadeId = user.entidadeId;

            int entId = viewModel.entidadeId;
            if (user.entidade.nome == "ISP" && viewModel.entidadeId == user.entidadeId)
                entId = -1;
            
            if (user.entidade.scope.valor == "GLOBAL")
            {
                if(entId == -1)
                    query = ficheirosRepository.All.OrderByDescending(f => f.dataUpload);
                else
                    query = ficheirosRepository.All.Where(f => f.entidadeId == viewModel.entidadeId).OrderByDescending(f => f.dataUpload);
                this.ViewBag.entidadeId = new SelectList(entidadesRepository.All.Where(e => e.nome != "ISP") , "entidadeId", "nome", viewModel.entidadeId);
            }
            else
            {
                query = ficheirosRepository.All.Where(f => f.entidadeId == user.entidadeId).OrderByDescending(f => f.dataUpload);
                this.ViewBag.entidadeId = new SelectList(entidadesRepository.All.Where(e => e.nome != "ISP"), "entidadeId", "nome", user.entidadeId);
            }


            viewModel.totalNumberOfFicheiros = query.Count();

            if (viewModel.PageSize == 0)
                viewModel.PageSize = viewModel.totalNumberOfFicheiros;

            switch (viewModel.SortColumn)
            {
                case "Entidade":
                    if (viewModel.SortDirection == System.ComponentModel.ListSortDirection.Descending)
                        ficheirosToView = query.OrderByDescending(s => s.entidade.nome).ToPagedList(viewModel.CurrentPageNumber, viewModel.PageSize);
                    else
                        ficheirosToView = query.OrderBy(s => s.entidade.nome).ToPagedList(viewModel.CurrentPageNumber, viewModel.PageSize);
                    break;
                case "NomeFicheiro":
                    if (viewModel.SortDirection == System.ComponentModel.ListSortDirection.Descending)
                        ficheirosToView = query.OrderByDescending(s => s.nomeFicheiro).ToPagedList(viewModel.CurrentPageNumber, viewModel.PageSize);
                    else
                        ficheirosToView = query.OrderBy(s => s.nomeFicheiro).ToPagedList(viewModel.CurrentPageNumber, viewModel.PageSize);
                    break;
                case "Estado":
                    if (viewModel.SortDirection == System.ComponentModel.ListSortDirection.Descending)
                        ficheirosToView = query.OrderByDescending(s => s.estado.descricao).ToPagedList(viewModel.CurrentPageNumber, viewModel.PageSize);
                    else
                        ficheirosToView = query.OrderBy(s => s.estado.descricao).ToPagedList(viewModel.CurrentPageNumber, viewModel.PageSize);
                    break;
                case "DataUpload":
                    if (viewModel.SortDirection == System.ComponentModel.ListSortDirection.Descending)
                        ficheirosToView = query.OrderByDescending(s => s.dataUpload).ToPagedList(viewModel.CurrentPageNumber, viewModel.PageSize);
                    else
                        ficheirosToView = query.OrderBy(s => s.dataUpload).ToPagedList(viewModel.CurrentPageNumber, viewModel.PageSize);
                    break;
                case "DataAlteracao":
                    if (viewModel.SortDirection == System.ComponentModel.ListSortDirection.Descending)
                        ficheirosToView = query.OrderByDescending(s => s.dataAlteracao).ToPagedList(viewModel.CurrentPageNumber, viewModel.PageSize);
                    else
                        ficheirosToView = query.OrderBy(s => s.dataAlteracao).ToPagedList(viewModel.CurrentPageNumber, viewModel.PageSize);
                    break;
                case "UserName":
                    if (viewModel.SortDirection == System.ComponentModel.ListSortDirection.Descending)
                        ficheirosToView = query.OrderByDescending(s => s.userName).ToPagedList(viewModel.CurrentPageNumber, viewModel.PageSize);
                    else
                        ficheirosToView = query.OrderBy(s => s.userName).ToPagedList(viewModel.CurrentPageNumber, viewModel.PageSize);
                    break;
                default:
                    ficheirosToView = query.OrderByDescending(s => s.dataAlteracao).ToPagedList(viewModel.CurrentPageNumber, viewModel.PageSize);
                    break;
            }

            viewModel.ficheiros = ficheirosToView.ToList();

            return viewModel;
=======
        public ActionResult Upload(FilesUploadListViewModel model, HttpPostedFileBase file)
        {
            //List<ValorSistema> paramSistema = valoresSistemaRepository.All.Where(v => v.tipologia == "ESTADO_FICHEIRO"
            //                                                                    || v.tipologia == "PARAM_PASTA_FICHEIROS"
            //                                                                    || v.tipologia == "PARAM_PASTA_FICHEIROS_ISENTOS").ToList();
            //List<ValorSistema> estadosFicheiro = paramSistema.Where(v => v.tipologia == "ESTADO_FICHEIRO").ToList();
            //ValorSistema pastaUpload = paramSistema.Where(v => v.tipologia == "PARAM_PASTA_FICHEIROS").Single();
            //ValorSistema pastaUploadIsentos = paramSistema.Where(v => v.tipologia == "PARAM_PASTA_FICHEIROS_ISENTOS").Single();

            List<ValorSistema> estadosFicheiro = valoresSistemaRepository.GetPorTipologia("ESTADO_FICHEIRO");
            ValorSistema pastaUpload = valoresSistemaRepository.GetPorTipologia("PARAM_PASTA_FICHEIROS").Single();
            ValorSistema pastaUploadIsentos = valoresSistemaRepository.GetPorTipologia("PARAM_PASTA_FICHEIROS_ISENTOS").Single();
            

=======