// Methode für den PDF Download eines Artikels
        public ActionResult Download(int?KategorieID, int?FiBuKontoID, int?RaumID, int?BenutzerID, int?ArtikelYearsStart, int?ArtikelYearsEnd, string Search)
        {
            // Das Searchmodel wird hier abgefüllt
            ArtikelSearchModel artikelSearchModel = new ArtikelSearchModel()
            {
                KategorieID       = KategorieID,
                FiBuKontoID       = FiBuKontoID,
                RaumID            = RaumID,
                BenutzerID        = BenutzerID,
                ArtikelYearsStart = ArtikelYearsStart,
                ArtikelYearsEnd   = ArtikelYearsEnd,
                Search            = Search
            };

            IEnumerable <Artikel> artikelList = _artikelService.GetArtikels(artikelSearchModel);

            Response.ContentEncoding = new System.Text.UTF8Encoding(); // UTF-8

            Response.ContentType = "application/pdf";

            FileContentResult fcr = new FileContentResult(RenderViewToPDF("Artikel", "exportpdf", artikelList.ToArray()), "application/pdf");

            fcr.FileDownloadName = "LabelsInventar_" + GetTimestamp(DateTime.Now) + ".pdf";
            return(fcr);
        }
        // Diese Methode wird benötigt zum erstellen der Excel Liste
        public ActionResult ArtikelExport(int?KategorieID, int?FiBuKontoID, int?RaumID, int?BenutzerID, int?ArtikelYearsStart, int?ArtikelYearsEnd, string Search)
        {
            // Das Searchmodel wird hier abgefüllt
            ArtikelSearchModel artikelSearchModel = new ArtikelSearchModel()
            {
                KategorieID       = KategorieID,
                FiBuKontoID       = FiBuKontoID,
                RaumID            = RaumID,
                BenutzerID        = BenutzerID,
                ArtikelYearsStart = ArtikelYearsStart,
                ArtikelYearsEnd   = ArtikelYearsEnd,
                Search            = Search
            };

            IEnumerable <Artikel> artikelList = _artikelService.GetArtikels(artikelSearchModel);

            MemoryStream ms = ArtikelToExcel(artikelList.OrderBy(d => d.InventarNummer).ToList());

            ms.WriteTo(Response.OutputStream);
            Response.ContentType     = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            Response.ContentEncoding = new System.Text.UTF8Encoding(); // UTF-8
            Response.AddHeader("Content-Disposition", "attachment;filename=InventarListe_" + GetTimestamp(DateTime.Now) + ".xlsx");
            Response.StatusCode = 200;
            Response.End();

            return(null);
        }
        // Das ist die Übersicht über alle Artikel, die Parameter sind optional und werden für den Suchfilter benötigt
        // Die PagedList habe ich nach diesem Tutorial aufgebaut
        // http://www.itprotoday.com/web-development/aspnet-mvc-paging-done-perfectly
        public ActionResult Index(int?KategorieID, int?FiBuKontoID, int?RaumID, int?BenutzerID, int?ArtikelYearsStart, int?ArtikelYearsEnd, string Search, string sortOrder, int page = 1, int pagesize = 25)
        {
            // Das Searchmodel wird hier abgefüllt
            ArtikelSearchModel artikelSearchModel = new ArtikelSearchModel()
            {
                KategorieID       = KategorieID,
                FiBuKontoID       = FiBuKontoID,
                RaumID            = RaumID,
                BenutzerID        = BenutzerID,
                ArtikelYearsStart = ArtikelYearsStart,
                ArtikelYearsEnd   = ArtikelYearsEnd,
                Search            = Search
            };

            IEnumerable <Artikel> artikelList = _artikelService.GetArtikels(artikelSearchModel);

            ViewBag.exportLink = "/Artikel/ArtikelExport?KategorieID=" + KategorieID + "&FiBuKontoID=" + FiBuKontoID + "&RaumID=" + RaumID + "&BenutzerID=" + BenutzerID + "&ArtikelYearsStart=" + ArtikelYearsStart + "&ArtikelYearsEnd=" + ArtikelYearsEnd + "&Search=" + Search;

            ViewBag.exportLinkPDF = "/Artikel/Download?KategorieID=" + KategorieID + "&FiBuKontoID=" + FiBuKontoID + "&RaumID=" + RaumID + "&BenutzerID=" + BenutzerID + "&ArtikelYearsStart=" + ArtikelYearsStart + "&ArtikelYearsEnd=" + ArtikelYearsEnd + "&Search=" + Search;

            Session["BackLink"] = "/Artikel?KategorieID=" + KategorieID + "&FiBuKontoID=" + FiBuKontoID + "&RaumID=" + RaumID + "&BenutzerID=" + BenutzerID + "&ArtikelYearsStart=" + ArtikelYearsStart + "&ArtikelYearsEnd=" + ArtikelYearsEnd + "&Search=" + Search + "&sortOrder=" + sortOrder + "&page=" + page;

            ViewBag.KategorieID       = new SelectList(_kategorieService.GetKategories().OrderBy(x => x.Bezeichnung), "ID", "Bezeichnung", KategorieID);
            ViewBag.FiBuKontoID       = new SelectList(_fiBuKontoService.GetFiBuKontos().OrderBy(x => x.Nummer), "ID", "Nummer", FiBuKontoID);
            ViewBag.RaumID            = new SelectList(_raumService.GetRaums().OrderBy(x => x.Bezeichnung), "ID", "Bezeichnung", RaumID);
            ViewBag.BenutzerID        = new SelectList(_benutzerService.GetBenutzers().OrderBy(x => x.Fullname), "ID", "Fullname", BenutzerID);
            ViewBag.ArtikelYearsStart = ArtikelYears();
            ViewBag.ArtikelYearsEnd   = ArtikelYears();

            //Sortieren der Tabelle nach dem Beispiel im angegebenen Tutorial
            //https://www.itworld.com/article/2956575/development/how-to-sort-search-and-paginate-tables-in-asp-net-mvc-5.html

            ViewBag.InventarNummerSortParam    = sortOrder == "InventarNummer" ? "InventarNummer_desc" : "InventarNummer";
            ViewBag.GegenstandSortParam        = sortOrder == "Gegenstand" ? "Gegenstand_desc" : "Gegenstand";
            ViewBag.KategorieSortParam         = sortOrder == "Kategorie" ? "Kategorie_desc" : "Kategorie";
            ViewBag.OrtSortParam               = sortOrder == "Ort" ? "Ort_desc" : "Ort";
            ViewBag.NutzerSortParam            = sortOrder == "Nutzer" ? "Nutzer_desc" : "Nutzer";
            ViewBag.FiBuKontoSortParam         = sortOrder == "FiBuKonto" ? "FiBuKonto_desc" : "FiBuKonto";
            ViewBag.BeschaffungsdatumSortParam = sortOrder == "Beschaffungsdatum" ? "Beschaffungsdatum_desc" : "Beschaffungsdatum";
            ViewBag.BeschaffungswertSortParam  = sortOrder == "Beschaffungswert" ? "Beschaffungswert_desc" : "Beschaffungswert";

            ViewBag.CurrentSort = sortOrder;

            switch (sortOrder)
            {
            case "InventarNummer":
                artikelList = artikelList.OrderBy(x => x.InventarNummer);
                break;

            case "InventarNummer_desc":
                artikelList = artikelList.OrderByDescending(x => x.InventarNummer);
                break;

            case "Gegenstand":
                artikelList = artikelList.OrderBy(x => x.Gegenstand);
                break;

            case "Gegenstand_desc":
                artikelList = artikelList.OrderByDescending(x => x.Gegenstand);
                break;

            case "Kategorie":
                artikelList = artikelList.OrderBy(x => x.Kategorie.Bezeichnung);
                break;

            case "Kategorie_desc":
                artikelList = artikelList.OrderByDescending(x => x.Kategorie.Bezeichnung);
                break;

            case "Ort":
                artikelList = artikelList.OrderBy(x => x.Ort);
                break;

            case "Ort_desc":
                artikelList = artikelList.OrderByDescending(x => x.Ort);
                break;

            case "Nutzer":
                artikelList = artikelList.OrderBy(x => x.Nutzer.Fullname);
                break;

            case "Nutzer_desc":
                artikelList = artikelList.OrderByDescending(x => x.Nutzer.Fullname);
                break;

            case "FiBuKonto":
                artikelList = artikelList.OrderBy(x => x.Kategorie.FiBuKonto.Nummer);
                break;

            case "FiBuKonto_desc":
                artikelList = artikelList.OrderByDescending(x => x.Kategorie.FiBuKonto.Nummer);
                break;

            case "Beschaffungsdatum":
                artikelList = artikelList.OrderBy(x => x.Beschaffungsdatum);
                break;

            case "Beschaffungsdatum_desc":
                artikelList = artikelList.OrderByDescending(x => x.Beschaffungsdatum);
                break;

            case "Beschaffungswert":
                artikelList = artikelList.OrderBy(x => x.Beschaffungswert);
                break;

            case "Beschaffungswert_desc":
                artikelList = artikelList.OrderByDescending(x => x.Beschaffungswert);
                break;

            default:
                break;
            }

            ViewBag.ExportButtons = artikelList.Count() == 0 ? "disabled" : "";  // Wenn es keine Einträge in der artikelList hat, sind die Buttons deaktiviert

            return(View(new PagedList <Artikel>(artikelList.ToList(), page, pagesize)));
        }