public async Task <IActionResult> PaketAnpassen(int id, [Bind("ArbeitsPaketId,ProjektId,PaketName,Beschreibung,Mitglieder,Zeitbudget,VerbrauchteZeit,Frist,Status")] ArbeitsPaketModel arbeitsPaket)
        {
            if (id != arbeitsPaket.ArbeitsPaketId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(arbeitsPaket);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!ArbeitsPaketExists(arbeitsPaket.ArbeitsPaketId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction("Details", "Projekte", new { id = arbeitsPaket.ProjektId }));
            }
            return(View(arbeitsPaket));
        }
        public async Task <IActionResult> PaketErstellen([Bind("ArbeitsPaketId,PaketName,Beschreibung,Mitglieder,Zeitbudget,Frist,Status")] ArbeitsPaketModel arbeitsPaket, ProjekteArbeitsPaketeViewModel ProPaViewMo, int pId)
        {
            if (ModelState.IsValid)
            {
                // EInem Arbeitspaket wird die ProjektID anhand der in der URL übergebenen ID zugeordnet
                var ProId = RouteData.Values["id"];

                arbeitsPaket.Status    = "To do";
                arbeitsPaket.ProjektId = Int32.Parse((string)ProId);

                //Deadline eines spezifischen Projektes auswählen
                var Projects = _context.Projekte.ToList();
                var Deadline = (from p in Projects where p.ProjekteId == Int32.Parse((string)ProId) select p.Deadline).FirstOrDefault();

                //Fehlermeldung, wenn die Frist eines Arbeitspaketes später als die Deadline des zugeordneten Projektes gewählt wird
                if (arbeitsPaket.Frist >= Deadline)
                {
                    return(RedirectToAction("ErrorMessage", new { ID = 3 }));;
                }
                //Fehlermeldung, wenn das Zeitbudget eines Arbeitspaketes negativ gewählt wird
                if (arbeitsPaket.Zeitbudget < 0)
                {
                    int ErrorID = 5;
                    return(RedirectToAction("ErrorMessage", new { ID = ErrorID }));;
                }

                //Angabe über ein erstelltes Arbeitspaket persitent in der Tabele ArbeitsPaket speichern
                _context.Add(arbeitsPaket);
                await _context.SaveChangesAsync();

                // Einem neuen Arbeitspaket wird die passende ProjektID zugeordnet, ProjektID und ArbeitsPaketID werden als Zuordnung in der Tabelle ProjekteArbeitsPaketViewModel gespeichert
                List <ArbeitsPaketModel> Pakete = _context.ArbeitsPaket.ToList();
                ProPaViewMo.ProjekteId     = Int32.Parse((string)ProId);
                ProPaViewMo.ArbeitsPaketId = arbeitsPaket.ArbeitsPaketId;
                _context.Add(ProPaViewMo);

                // Ersteller des Pakets wird als erstes Mitglied eingetragen
                var    currentUser            = this.User;
                string currentUserId          = _userManager.GetUserId(currentUser);
                PaketeUserViewModel newMember = new PaketeUserViewModel
                {
                    ArbeitsPaketId = arbeitsPaket.ArbeitsPaketId,
                    UserId         = currentUserId
                };
                _context.Add(newMember);

                await _context.SaveChangesAsync();

                return(RedirectToAction("Details", "Projekte", new { id = ProId }));
            }

            //RoutingID wird an die View übergeben, um auf die Projektdetailansicht zurückzugelangen
            int RoutingID = Int32.Parse((string)RouteData.Values["id"]);

            ViewBag.RoutingID = RoutingID;

            return(View(arbeitsPaket));
        }
        public async Task <IActionResult> PaketZeit(int id, [Bind("ArbeitsPaketId,ProjektId,PaketName,Beschreibung,Mitglieder,Zeitbudget,VerbrauchteZeit,Frist,Status")] ArbeitsPaketModel arbeitsPaket)
        {
            if (id != arbeitsPaket.ArbeitsPaketId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                //Die gespeicherte Arbeitszeit ist die Sume aus bisher verbrauchter Arbeitszeit + neuer verbrauchter Arbeitszeit.
                // Wird die Zeit korrigiert, kann sie nicht unter 0 sinken.
                try
                {
                    var zeit = _context.ArbeitsPaket.AsNoTracking().Where(p => p.ArbeitsPaketId == id).FirstOrDefault();
                    arbeitsPaket.VerbrauchteZeit = arbeitsPaket.VerbrauchteZeit + zeit.VerbrauchteZeit;
                    if (arbeitsPaket.VerbrauchteZeit < 0)
                    {
                        return(RedirectToAction("ErrorMessage", new { ID = 8 }));
                    }

                    _context.Update(arbeitsPaket);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!ArbeitsPaketExists(arbeitsPaket.ArbeitsPaketId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }

                return(RedirectToAction("PaketDetails", "Projekte", new { id }));
            }

            return(View(arbeitsPaket));
        }