public ActionResult exportFicheirosToCsv(UploadIsentosViewModel viewModel, string sort, string direction, string tabNr)
        {
            viewModel.PageSize = 0;
            if (tabNr == null || tabNr == "")
                tabNr = "1";

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

            UploadIsentosViewModel result = getFicheiros(viewModel);

            List<FicheiroToCsv> ficheirosCsv = new List<FicheiroToCsv>();
            foreach (FicheiroIsentos 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, "FicheirosIsentos_" + DateTime.Now.ToShortDateString() + ".csv");
        }
        public ActionResult Index(UploadIsentosViewModel 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);

            UploadIsentosViewModel result = getFicheiros(viewModel);
            return View(result);
        }
        protected UploadIsentosViewModel getFicheiros(UploadIsentosViewModel viewModel)
        {
            IPagedList<FicheiroIsentos> ficheirosToView = null;
            IQueryable<FicheiroIsentos> 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 = ficheirosIsentosRepository.All.OrderByDescending(f => f.dataUpload);
                else
                    query = ficheirosIsentosRepository.All.Where(f => f.entidadeId == viewModel.entidadeId).OrderByDescending(f => f.dataUpload);
                this.ViewBag.entidadeId = new SelectList(entidadesRepository.All, "entidadeId", "nome", viewModel.entidadeId);
            }
            else
            {
                query = ficheirosIsentosRepository.All.Where(f => f.entidadeId == user.entidadeId).OrderByDescending(f => f.dataUpload);
                this.ViewBag.entidadeId = new SelectList(entidadesRepository.All, "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).ToPagedList(viewModel.CurrentPageNumber, viewModel.PageSize);
                    else
                        ficheirosToView = query.OrderBy(s => s.estado).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;
        }