public ActionResult Create(pojectdev pojectdev)
        {
            if (ModelState.IsValid)
            {
                db.pojectdevs.Add(pojectdev);
                db.SaveChanges();

                //for adding ADD Developer action to activity stream
                String username = Convert.ToString(Session["UserName"]);
                MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
                activitystr.actiontype  = "ADD DEVELOPER";
                activitystr.description = username + " Added Developer " + pojectdev.devname;
                activitystr.issueid     = 4;
                activitystr.issuekey    = "-";
                activitystr.actiondate  = DateTime.Now.ToString();
                activitystr.projectid   = pojectdev.projectid;
                int uid = int.Parse(Session["UserId"] + "");
                activitystr.userid = uid;
                db.activitystreams.Add(activitystr);
                db.SaveChanges();

                return(RedirectToAction("Create", new { pid = pojectdev.projectid }));
            }

            ViewBag.id = new SelectList(db.projects, "id", "projectkey", pojectdev.id);
            return(View(pojectdev));
        }
        public ActionResult Edit(issue issue)
        {
            if (ModelState.IsValid)
            {
                db.Entry(issue).State = EntityState.Modified;
                db.SaveChanges();
                //for adding edit action to activity stream
                String username = Convert.ToString(Session["UserName"]);
                MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
                activitystr.actiontype  = "Edit Issue";
                activitystr.description = username + " Edited issue " + issue.keyname;
                activitystr.issueid     = issue.id;
                activitystr.issuekey    = issue.keyname;
                activitystr.actiondate  = DateTime.Now.ToString();
                activitystr.projectid   = issue.projectid;
                int uid = int.Parse(Session["UserId"] + "");
                activitystr.userid = uid;
                db.activitystreams.Add(activitystr);
                db.SaveChanges();



                return(RedirectToAction("Details", "issues", new { id = issue.id }));
            }
            return(View(issue));
        }
        //delete
        public ActionResult prevcol(int issueid = 0)
        {
            var columns = db.columns.Include(c => c.project);

            var xx         = db.issues.Select(x => x).Where(x => x.id == issueid).FirstOrDefault();
            var projectid  = xx.projectid;
            var currentcol = xx.status;
            var zz         = db.columns.Select(x => x).Where(x => x.projectid == projectid).OrderBy(x => x.colid).ToList();
            int index      = zz.FindIndex(x => x.colid == currentcol);

            if (index > 0)
            {
                int prevcol = xx.status;
                xx.status = zz[index - 1].colid; db.SaveChanges();
                //for adding changing status action to activity stream
                MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
                activitystr.actiontype  = "Change Status";
                activitystr.description = "Changed an issue Statue from col " + prevcol + "to col " + xx.status;
                activitystr.issueid     = xx.id;
                activitystr.issuekey    = xx.keyname;
                activitystr.actiondate  = DateTime.Now.ToString();
                activitystr.projectid   = xx.projectid;
                int uid = int.Parse(Session["UserId"] + "");
                activitystr.userid = uid;
                db.activitystreams.Add(activitystr);
                db.SaveChanges();
            }



            return(RedirectToAction("Indexproject", new { id = projectid }));
        }
        public ActionResult Create(column column)
        {
            if (ModelState.IsValid)
            {
                db.columns.Add(column);
                db.SaveChanges();
                //for adding adding to the current sprint to activity stream
                MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
                var xx = db.projects.Select(x => x).Where(x => x.id == column.projectid).FirstOrDefault();

                String username = Convert.ToString(Session["UserName"]);
                activitystr.actiontype  = "Add Column";
                activitystr.description = username + " Added Column " + column.name + " To Project " + xx.projectname;
                activitystr.issueid     = 4;
                activitystr.issuekey    = "-";
                activitystr.actiondate  = DateTime.Now.ToString();
                activitystr.projectid   = column.projectid;
                int uid = int.Parse(Session["UserId"] + "");
                activitystr.userid = uid;
                db.activitystreams.Add(activitystr);
                db.SaveChanges();

                return(RedirectToAction("indexproject", "Column", new { id = column.projectid }));;
            }

            ViewBag.projectid = new SelectList(db.projects, "id", "projectkey", column.projectid);
            return(View(column));
        }
        public ActionResult Create(attachment attachment, HttpPostedFileBase fileToUpload)
        {
            if (ModelState.IsValid)
            {
                var filevalid = fileToUpload as HttpPostedFileBase;
                if (filevalid == null)
                {
                    ViewBag.pid   = attachment.projectid;
                    ViewBag.isid  = attachment.issueid;
                    ViewBag.error = "File is Required";
                    return(View(attachment));
                }
                //save the uploaded file in a variable
                var file = Request.Files[0];

                if (file != null && file.ContentLength > 0)
                {
                    //for the file name
                    var fileName = Path.GetFileName(file.FileName);
                    //for not doubling
                    string path2 = Path.GetRandomFileName();
                    fileName = path2 + fileName;
                    //for saving file path
                    var path = Path.Combine(Server.MapPath("~/Upload/"), fileName);
                    //for saving file
                    attachment.attachmentdest = fileName;

                    file.SaveAs(path);//saved the file in path
                }


                db.attachments.Add(attachment);
                db.SaveChanges();


                String username = Convert.ToString(Session["UserName"]);

                db.SaveChanges();
                var ii = db.issues.Select(x => x).Where(x => x.id == attachment.issueid).FirstOrDefault();
                //for adding assign action to activity stream
                MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
                activitystr.actiontype  = "Add Attachment";
                activitystr.description = username + " Added Attachment " + attachment.Name + " To Issue " + ii.keyname;
                activitystr.issueid     = attachment.issueid;
                activitystr.issuekey    = ii.keyname;
                activitystr.actiondate  = DateTime.Now.ToString();
                activitystr.projectid   = attachment.projectid;
                int uid = int.Parse(Session["UserId"] + "");
                activitystr.userid = uid;
                db.activitystreams.Add(activitystr);
                db.SaveChanges();


                return(RedirectToAction("Details", "issues", new { id = attachment.issueid }));
            }

            ViewBag.pid  = attachment.projectid;
            ViewBag.isid = attachment.issueid;
            return(View(attachment));
        }
        public ActionResult Createe(Comment comment)
        {
            if (ModelState.IsValid)
            {
                comment.date = DateTime.Now.ToString();
                db.Comments.Add(comment);
                db.SaveChanges();
                ViewBag.pid  = comment.projectid;
                ViewBag.isid = comment.issueid;
                String username = Convert.ToString(Session["UserName"]);
                MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
                int uid = int.Parse(Session["UserId"] + "");
                // if the comment was on the project
                if (comment.issueid == 4)
                {
                    var xx = db.projects.Select(x => x).Where(x => x.id == comment.projectid).FirstOrDefault();
                    //for adding Comment action to activity stream

                    activitystr.actiontype  = "Comment";
                    activitystr.description = username + " Commented on Project " + xx.projectname + " : " + comment.comment1;
                    activitystr.issueid     = 4;
                    activitystr.issuekey    = "-";
                    activitystr.actiondate  = DateTime.Now.ToString();
                    activitystr.projectid   = xx.id;

                    activitystr.userid = uid;
                    db.activitystreams.Add(activitystr);
                    db.SaveChanges();
                    return(RedirectToAction("indexproject", "column", new { id = comment.projectid }));
                }

                //if the comment was on the issue

                var zz = db.issues.Select(x => x).Where(x => x.id == comment.issueid).FirstOrDefault();
                //for adding Comment action to activity stream

                activitystr.actiontype  = "Comment";
                activitystr.description = username + " Commented on Issue " + zz.keyname + " : " + comment.comment1;
                activitystr.issueid     = zz.id;
                activitystr.issuekey    = zz.keyname;
                activitystr.actiondate  = DateTime.Now.ToString();
                activitystr.projectid   = zz.projectid;

                activitystr.userid = uid;
                db.activitystreams.Add(activitystr);
                db.SaveChanges();

                return(RedirectToAction("Details", "issues", new { id = comment.issueid }));
            }
            if (comment.issueid != 4)
            {
                return(RedirectToAction("Details", "issues", new { id = comment.issueid }));
            }
            else
            {
                return(RedirectToAction("indexproject", "column", new { id = comment.projectid }));
            }
        }
        public ActionResult Edit(project project)
        {
            if (ModelState.IsValid)
            {
                UsersContext uc   = new UsersContext();
                var          user = uc.UserProfiles.Select(x => x).Where(x => x.UserName == project.projectleader).FirstOrDefault();
                project.projectleader = user.UserName;
                var user2 = uc.UserProfiles.Select(x => x).Where(x => x.UserName == project.projectowner).FirstOrDefault();
                project.projectowner = user2.UserName;

                var pro = db.projects.Select(x => x).Where(x => x.id == project.id).FirstOrDefault();
                pro.date          = project.date;
                pro.projectkey    = project.projectkey;
                pro.projectleader = project.projectleader;
                pro.projectname   = project.projectname;
                pro.projectowner  = project.projectowner;
                pro.projecttype   = project.projecttype;

                try
                {
                    db.Entry(pro).State = EntityState.Modified;
                    db.SaveChanges();
                    //for adding edit to activity stream
                    MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
                    String username = Convert.ToString(Session["UserName"]);
                    activitystr.actiontype  = "Edit project";
                    activitystr.description = username + " Edited project " + project.projectname;
                    activitystr.issueid     = 4;
                    activitystr.issuekey    = "-";
                    activitystr.actiondate  = DateTime.Now.ToString();
                    activitystr.projectid   = project.id;
                    int uid = int.Parse(Session["UserId"] + "");
                    activitystr.userid = uid;
                    db.activitystreams.Add(activitystr);
                    db.SaveChanges();
                    return(RedirectToAction("Index"));
                }

                catch (DbEntityValidationException ex)
                {
                    foreach (var entityValidationErrors in ex.EntityValidationErrors)
                    {
                        foreach (var validationError in entityValidationErrors.ValidationErrors)
                        {
                            string errorMessages = string.Join("; ", ex.EntityValidationErrors.SelectMany(x => x.ValidationErrors).Select(x => x.PropertyName + ": " + x.ErrorMessage));
                            throw new DbEntityValidationException(errorMessages);
                        }
                    }
                }
            }
            return(View(project));
        }
Exemplo n.º 8
0
        public ActionResult Edit(Tag tag)
        {
            if (ModelState.IsValid)
            {    // for checking if the tag is already in use
                var zz = db.Tags.Select(x => x).Where(x => x.Tag1 == tag.Tag1 && x.projectid == tag.projectid && x.issueid == tag.issueid).FirstOrDefault();
                if (zz != null)
                {
                    ViewBag.errormsg = "Tag is already Used";
                    ViewBag.pid      = tag.projectid;
                    ViewBag.isid     = tag.issueid;
                    return(View(tag));
                }
                Tag oldtag = db.Tags.Find(tag.id);
                // for the old tag name for the activity stream
                String old = oldtag.Tag1;
                oldtag.Tag1 = tag.Tag1;

                db.SaveChanges();



                String username = Convert.ToString(Session["UserName"]);


                var ii = db.issues.Select(x => x).Where(x => x.id == tag.issueid).FirstOrDefault();
                //for adding assign action to activity stream
                MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
                activitystr.actiontype  = "Edit Tag";
                activitystr.description = username + " Edited Tag " + old + " In Issue " + ii.keyname + " To " + tag.Tag1;
                activitystr.issueid     = tag.issueid;
                activitystr.issuekey    = ii.keyname;
                activitystr.actiondate  = DateTime.Now.ToString();
                activitystr.projectid   = tag.projectid;
                int uid = int.Parse(Session["UserId"] + "");
                activitystr.userid = uid;
                db.activitystreams.Add(activitystr);
                db.SaveChanges();



                return(RedirectToAction("Details", "issues", new { id = tag.issueid }));
            }
            ViewBag.pid  = tag.projectid;
            ViewBag.isid = tag.issueid;
            return(View(tag));
        }
        public ActionResult addtocurrentsprint(int issueid = 0)
        {
            var xx = db.issues.Select(x => x).Where(x => x.id == issueid).FirstOrDefault();
            //for checking if the user is allowed
            var adminproj = db.projects.Select(x => x).Where(x => x.id == xx.projectid && x.projectleader == User.Identity.Name).FirstOrDefault();

            if (adminproj == null)
            {
                return(RedirectToAction("Index", "project"));
            }
            var projid = xx.projectid;
            //for checking if there are columns in the project
            var cc = db.columns.Select(x => x).Where(x => x.projectid == projid).First();

            if (cc != null)
            {
                var zz = db.projects.Select(x => x).Where(x => x.id == projid).FirstOrDefault();
                var currentsprintid = zz.currentsprint;
                // to make the issue in the current sprint
                xx.sprintid = currentsprintid;
                db.SaveChanges();
                //for adding adding to the current sprint action to activity stream
                var yy = db.sprints.Select(x => x).Where(x => x.sid == currentsprintid).FirstOrDefault();
                MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
                String username = Convert.ToString(Session["UserName"]);
                activitystr.actiontype  = "Add to Sprint";
                activitystr.description = username + " Added An Issue To Sprint Number " + yy.number;
                activitystr.issueid     = xx.id;
                activitystr.issuekey    = xx.keyname;
                activitystr.actiondate  = DateTime.Now.ToString();
                activitystr.projectid   = xx.projectid;
                int uid = int.Parse(Session["UserId"] + "");
                activitystr.userid = uid;
                db.activitystreams.Add(activitystr);
                db.SaveChanges();
            }



            return(RedirectToAction("Indexproject", "column", new { id = projid }));
        }
        public ActionResult assigneissue(int id = 0)
        {
            // to assign issue to developer
            issue issue = db.issues.Find(id);
            // for checking if the user allowed
            var adminproj = db.pojectdevs.Select(x => x).Where(x => x.projectid == issue.projectid && x.devname == User.Identity.Name).FirstOrDefault();

            if (adminproj == null)
            {
                return(RedirectToAction("Index", "project"));
            }
            //int uid = int.Parse(Session["UserId"] + "");
            if (issue == null)
            {
                return(HttpNotFound());
            }
            // for checking if the issue has already an assignee
            if (issue.assignee == null)
            {
                String username = Convert.ToString(Session["UserName"]);
                issue.assignee = username;
                db.SaveChanges();
                //for adding assign action to activity stream
                MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
                activitystr.actiontype  = "Assign";
                activitystr.description = username + " Assgined issue " + issue.keyname;
                activitystr.issueid     = issue.id;
                activitystr.issuekey    = issue.keyname;
                activitystr.actiondate  = DateTime.Now.ToString();
                activitystr.projectid   = issue.projectid;
                int uid = int.Parse(Session["UserId"] + "");
                activitystr.userid = uid;
                db.activitystreams.Add(activitystr);
                db.SaveChanges();
                return(View("Details", issue));
            }
            ViewBag.errormsg = "already assigned";
            //html condition using viewbag if the viewbag contains some value
            return(View("Details", issue));
        }
        public ActionResult Edit(attachment attachment)
        {
            if (ModelState.IsValid)
            {
                attachment oldattachment = db.attachments.Find(attachment.id);
                // for the activity stream
                String old = oldattachment.Name;
                oldattachment.Name = attachment.Name;

                db.SaveChanges();



                String username = Convert.ToString(Session["UserName"]);

                db.SaveChanges();
                var ii = db.issues.Select(x => x).Where(x => x.id == attachment.issueid).FirstOrDefault();
                //for adding assign action to activity stream
                MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
                activitystr.actiontype  = "Edit Attachment";
                activitystr.description = username + " Edited Attachment " + old + " In Issue " + ii.keyname + " To " + attachment.Name;
                activitystr.issueid     = attachment.issueid;
                activitystr.issuekey    = ii.keyname;
                activitystr.actiondate  = DateTime.Now.ToString();
                activitystr.projectid   = attachment.projectid;
                int uid = int.Parse(Session["UserId"] + "");
                activitystr.userid = uid;
                db.activitystreams.Add(activitystr);
                db.SaveChanges();



                return(RedirectToAction("Details", "issues", new { id = attachment.issueid }));
            }
            ViewBag.issueid   = new SelectList(db.issues, "id", "keyname", attachment.issueid);
            ViewBag.projectid = new SelectList(db.projects, "id", "projectkey", attachment.projectid);
            return(View(attachment));
        }
        public ActionResult unassignissuemaster(int id = 0)
        {   // for unassign the issue from the developer by the scrum master
            issue issue     = db.issues.Find(id);
            var   adminproj = db.projects.Select(x => x).Where(x => x.id == issue.projectid && x.projectleader == User.Identity.Name).FirstOrDefault();

            if (adminproj == null)
            {
                return(RedirectToAction("Index", "project"));
            }
            //int uid = int.Parse(Session["UserId"] + "");
            if (issue == null)
            {
                return(HttpNotFound());
            }
            if (issue.assignee != null)
            {
                String username    = Convert.ToString(Session["UserName"]);
                var    oldassignne = issue.assignee;
                issue.assignee = null;
                db.SaveChanges();
                //for adding assign action to activity stream
                MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
                activitystr.actiontype  = "UnAssign Issue From DEV";
                activitystr.description = username + " UnAssigned Issue " + issue.keyname + " From Developer " + oldassignne;
                activitystr.issueid     = issue.id;
                activitystr.issuekey    = issue.keyname;
                activitystr.actiondate  = DateTime.Now.ToString();
                activitystr.projectid   = issue.projectid;
                int uid = int.Parse(Session["UserId"] + "");
                activitystr.userid = uid;
                db.activitystreams.Add(activitystr);
                db.SaveChanges();
                return(View("Details", issue));
            }
            ViewBag.errormsg = "Not assigned";
            //html condition using viewbag if the viewbag contains some value
            return(View("Details", issue));
        }
        public ActionResult DeleteComplete(int id)
        {
            issue issue = db.issues.Find(id);

            //for adding delete action to activity stream
            MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
            activitystr.actiontype  = "Delete Issue";
            activitystr.description = "Deleted an issue";
            activitystr.issueid     = issue.id;
            activitystr.issuekey    = issue.keyname;
            activitystr.actiondate  = DateTime.Now.ToString();
            activitystr.projectid   = issue.projectid;
            int uid = int.Parse(Session["UserId"] + "");

            activitystr.userid = uid;
            db.activitystreams.Add(activitystr);
            db.SaveChanges();


            db.issues.Remove(issue);
            db.SaveChanges();
            return(RedirectToAction("indexproject", "Column", new { id = issue.projectid }));
        }
        public ActionResult Delete(int id = 0)
        {
            attachment attachment = db.attachments.Find(id);
            // for checking if the user is allowed
            var adminproj = db.pojectdevs.Select(x => x).Where(x => x.projectid == attachment.projectid && x.devname == User.Identity.Name).FirstOrDefault();

            if (adminproj == null)
            {
                return(RedirectToAction("Index", "project"));
            }
            db.attachments.Remove(attachment);
            db.SaveChanges();


            String username = Convert.ToString(Session["UserName"]);

            db.SaveChanges();
            var ii = db.issues.Select(x => x).Where(x => x.id == attachment.issueid).FirstOrDefault();

            //for adding assign action to activity stream
            MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
            activitystr.actiontype  = "Delete Attachment";
            activitystr.description = username + " Deleted Attachment " + attachment.Name + " In Issue " + ii.keyname;
            activitystr.issueid     = attachment.issueid;
            activitystr.issuekey    = ii.keyname;
            activitystr.actiondate  = DateTime.Now.ToString();
            activitystr.projectid   = attachment.projectid;
            int uid = int.Parse(Session["UserId"] + "");

            activitystr.userid = uid;
            db.activitystreams.Add(activitystr);
            db.SaveChanges();



            return(RedirectToAction("Details", "issues", new { id = attachment.issueid }));
        }
        public ActionResult Delete(int id = 0)
        {
            var issueids  = db.issues.Select(x => x).Where(x => x.id == id).FirstOrDefault();
            var adminproj = db.projects.Select(x => x).Where(x => x.id == issueids.projectid && x.projectleader == User.Identity.Name).FirstOrDefault();

            if (adminproj == null)
            {
                return(RedirectToAction("Index", "project"));
            }
            issue issue = db.issues.Find(id);

            if (issue == null)
            {
                return(HttpNotFound());
            }
            //for adding delete action to activity stream
            MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
            String username = Convert.ToString(Session["UserName"]);

            activitystr.actiontype  = "Delete Issue";
            activitystr.description = username + " Deleted issue " + issue.keyname;
            activitystr.issueid     = issue.id;
            activitystr.issuekey    = issue.keyname;
            activitystr.actiondate  = DateTime.Now.ToString();
            activitystr.projectid   = issue.projectid;
            int uid = int.Parse(Session["UserId"] + "");

            activitystr.userid = uid;
            db.activitystreams.Add(activitystr);
            db.SaveChanges();


            db.issues.Remove(issue);
            db.SaveChanges();
            return(RedirectToAction("indexproject", "Column", new { id = issue.projectid }));
        }
        public ActionResult assignissuemaster(issue issue)
        {
            issue issue1 = db.issues.Find(issue.id);

            issue1.assignee = issue.assignee;
            db.SaveChanges();
            //for adding edit action to activity stream
            String username = Convert.ToString(Session["UserName"]);

            MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
            activitystr.actiontype  = "Assign Issue To DEV";
            activitystr.description = username + " Assigned Issue " + issue.keyname + " To Developer " + issue.assignee;
            activitystr.issueid     = issue.id;
            activitystr.issuekey    = issue.keyname;
            activitystr.actiondate  = DateTime.Now.ToString();
            activitystr.projectid   = issue.projectid;
            int uid = int.Parse(Session["UserId"] + "");

            activitystr.userid = uid;
            db.activitystreams.Add(activitystr);
            db.SaveChanges();

            return(RedirectToAction("Details", new { id = issue.id }));
        }
        public ActionResult UpdateIssuesAjax(string itemIds)
        {
            // for updating the issues position
            List <int> itemIdList = new List <int>();

            // to put the ajax info from the agile board in a int list without the ',' between items
            itemIdList = itemIds.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
            // for the column id of the issue
            int state = 1;
            // flag for column if true the next item is for colmun id
            Boolean colflag = false;
            // flag for issue if true the next item is for issue id
            Boolean issueflag = false;


            foreach (var item in itemIdList)
            {
                // the next item is a column id
                if (item == 0)
                {
                    colflag   = true;
                    issueflag = false;
                    continue;
                }

                if (colflag)
                {
                    //the current item is the column id and the next item is an issue id
                    state = item; colflag = false; issueflag = true; continue;
                }
                if (issueflag)
                {       //selecting the issue and put the state (column id) in the status field of the issue
                    var iss = db.issues.Select(x => x).Where(m => m.id == item).FirstOrDefault();
                    if (iss.status != state)
                    {
                        var beforestate = iss.status;
                        iss.status = state;
                        db.SaveChanges();

                        //for adding changing status action to activity stream
                        MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
                        var    before   = db.columns.Select(x => x).Where(x => x.colid == beforestate).FirstOrDefault();
                        var    after    = db.columns.Select(x => x).Where(x => x.colid == state).FirstOrDefault();
                        String username = Convert.ToString(Session["UserName"]);
                        activitystr.actiontype  = "Change Issue Status";
                        activitystr.description = username + " Changed Issue " + iss.keyname + " Status From (" + before.name + ") To (" + after.name + ")";
                        activitystr.issueid     = iss.id;
                        activitystr.issuekey    = iss.keyname;
                        activitystr.actiondate  = DateTime.Now.ToString();
                        activitystr.projectid   = iss.projectid;
                        int uid = int.Parse(Session["UserId"] + "");
                        activitystr.userid = uid;
                        db.activitystreams.Add(activitystr);
                        try
                        {
                            db.SaveChanges();
                        }
                        catch (DbEntityValidationException e)
                        {
                            var newException = new FormattedDbEntityValidationException(e);
                            throw newException;
                        }
                    }
                }
            }


            return(Json(true, JsonRequestBehavior.AllowGet));
        }
        public ActionResult Create(issue issue)
        {
            if (ModelState.IsValid)
            {   // for the keyname error message
                ViewBag.errormsg = "";

                var zzz = db.projects.Select(x => x).Where(x => x.id == issue.projectid).FirstOrDefault();
                // for compining the keyname of the project with the keyname of the issue
                String kname = zzz.projectkey + "_" + issue.keyname;
                // for checking if the keyname is already in use
                var mm = db.issues.Select(x => x).Where(x => x.keyname == kname).FirstOrDefault();
                if (mm != null)
                {
                    ViewBag.errormsg = "Key Name is in Use";
                    // for passing the list of the developers in the project to the view
                    var devsinproj = db.pojectdevs.Where(x => x.projectid == issue.projectid).Select(x => x.devname).ToList();
                    var users      = Roles.GetUsersInRole("developer");
                    foreach (var user in users)
                    {
                        if (!devsinproj.Contains(user))
                        {
                            users = users.Select(x => x).Where(x => x != user).ToArray();
                        }
                    }
                    SelectList slist = new SelectList(users);

                    ViewBag.Usersq = slist;
                    ViewBag.projid = issue.projectid;


                    return(View(issue));
                }
                issue.keyname = kname;
                //for getting the first column id in the agileboard and save it in the status field , when we add it to the agileboard it
                // takes place in the first column
                var zq = db.columns.Select(x => x).Where(x => x.projectid == issue.projectid).FirstOrDefault();
                issue.status = zq.colid;
                if (issue.priority == "High")
                {
                    issue.priority = "1";
                }
                if (issue.priority == "Medium")
                {
                    issue.priority = "2";
                }
                if (issue.priority == "Low")
                {
                    issue.priority = "3";
                }


                HttpClient client = new HttpClient();
                client.BaseAddress = new Uri("http://localhost:4419");
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                HttpResponseMessage response = client.PostAsJsonAsync("api/Backlogapi", issue).Result;
                String username = Convert.ToString(Session["UserName"]);
                MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
                int uid = int.Parse(Session["UserId"] + "");
                // if the response successeded
                if (response.IsSuccessStatusCode)
                {
                    //for adding create action to activity stream
                    var issueaftersave = db.issues.Select(z => z).Where(z => z.keyname == issue.keyname).FirstOrDefault();
                    activitystr.actiontype  = "Create Issue";
                    activitystr.description = username + " Created issue " + issue.keyname;
                    activitystr.issueid     = issueaftersave.id;
                    activitystr.issuekey    = issue.keyname;
                    activitystr.actiondate  = DateTime.Now.ToString();
                    activitystr.projectid   = issue.projectid;
                    //int uid = int.Parse(Session["UserId"] + "");
                    activitystr.userid = uid;
                    db.activitystreams.Add(activitystr);
                    db.SaveChanges();

                    return(RedirectToAction("indexproject", "Column", new { id = issue.projectid }));
                }
                else
                {
                    return(View(issue));
                }



                //db.issues.Add(issue);
                //db.SaveChanges();


                //  String username = Convert.ToString(Session["UserName"]);
                // MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
                //activitystr.actiontype = "Create Issue";
                //activitystr.description = username + " Created issue " + issue.keyname;
                //activitystr.issueid = issue.id ;
                //activitystr.issuekey = issue.keyname ;
                //activitystr.actiondate = DateTime.Now.ToString();
                //activitystr.projectid = issue.projectid ;

                //activitystr.userid = uid;
                //db.activitystreams.Add(activitystr);
                //db.SaveChanges();
            }

            return(View(issue));
        }
        public ActionResult EndSprint(int id = 0)
        {
            // for checking if the user allowed
            var adminproj = db.projects.Select(x => x).Where(x => x.id == id && x.projectleader == User.Identity.Name).FirstOrDefault();

            if (adminproj == null)
            {
                return(RedirectToAction("Index", "project"));
            }
            // creating a new sprint
            MvcApplicationTest1.DAL.sprint sp = new DAL.sprint();
            sp.date      = DateTime.Now.ToString();
            sp.projectid = id;

            // for giving the new sprint its id
            var zz = db.projects.Select(x => x).Where(x => x.id == id).FirstOrDefault();
            var xx = db.sprints.Select(x => x).Where(x => x.sid == zz.currentsprint).FirstOrDefault();

            sp.number = xx.number + 1;

            db.sprints.Add(sp);
            db.SaveChanges();

            //for moving not completed issues to the next sprint
            var zz2       = db.columns.Select(x => x).Where(x => x.projectid == id).OrderByDescending(x => x.colid).FirstOrDefault();
            var lastcolid = zz2.colid;

            //list of unfinished issues
            var zz3 = db.issues.Select(x => x).Where(x => x.projectid == id && x.status != lastcolid && x.sprintid == zz.currentsprint).ToList();

            // it copies the unfinshed issue to a new issue and add it to the current sprint
            // and moves the unfinished issues to the new sprint for saving the change log
            foreach (var item in zz3)
            {
                MvcApplicationTest1.DAL.issue s = new MvcApplicationTest1.DAL.issue();
                s.keyname     = item.keyname;
                s.status      = item.status;
                s.descreption = item.descreption;
                s.type        = item.type;
                s.priority    = item.priority;
                s.tags        = item.tags;
                s.estimate    = item.estimate;
                s.assignee    = item.assignee;
                s.rankid      = item.rankid;
                s.projectid   = item.projectid;
                s.sprintid    = zz.currentsprint;
                item.sprintid = sp.sid;
                db.issues.Add(s);
                db.SaveChanges();
            }
            // make the new sprint the current sprint
            zz.currentsprint = sp.sid;
            db.SaveChanges();

            MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
            String username = Convert.ToString(Session["UserName"]);

            activitystr.actiontype  = "End Sprint";
            activitystr.description = username + " Ended Sprint Number " + xx.number;
            activitystr.issueid     = 4;
            activitystr.issuekey    = "-";
            activitystr.actiondate  = DateTime.Now.ToString();
            activitystr.projectid   = sp.projectid;
            int uid = int.Parse(Session["UserId"] + "");

            activitystr.userid = uid;
            db.activitystreams.Add(activitystr);
            db.SaveChanges();
            return(RedirectToAction("Indexproject", "Column", new { id = zz.id }));;
        }
        public ActionResult Create(project project)
        {
            if (ModelState.IsValid)
            {
                UsersContext uc   = new UsersContext();
                var          user = uc.UserProfiles.Select(x => x).Where(x => x.UserName == project.projectleader).FirstOrDefault();
                project.projectleader = user.UserName;
                var user2 = uc.UserProfiles.Select(x => x).Where(x => x.UserName == project.projectowner).FirstOrDefault();
                project.projectowner = user2.UserName;
                // for checking if the keyname is in use
                var pro = db.projects.Select(x => x).Where(x => x.projectkey == project.projectkey).FirstOrDefault();

                if (pro != null)
                {
                    ViewBag.ErrorMessage = "Key is in use";

                    var        users = Roles.GetUsersInRole("teamleader");
                    SelectList list  = new SelectList(users);
                    ViewBag.Usersq = list;

                    var        users2 = Roles.GetUsersInRole("projectowner");
                    SelectList list2  = new SelectList(users2);
                    ViewBag.Usersqq = list2;


                    return(View(project));
                }
                project.date = DateTime.Now.ToString();
                db.projects.Add(project);
                db.SaveChanges();

                // for creating the first sprint
                MvcApplicationTest1.DAL.sprint sp = new DAL.sprint();
                sp.date      = DateTime.Now.ToString();
                sp.projectid = project.id;
                sp.number    = 1;
                db.sprints.Add(sp);
                db.SaveChanges();
                // for making the new sprint the projects first sprint
                project.currentsprint = sp.sid;



                db.SaveChanges();
                Session["projectid"] = project.id;
                String username = Convert.ToString(Session["UserName"]);
                //for adding delete action to activity stream
                MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
                activitystr.actiontype  = "Create Project";
                activitystr.description = username + " Created Project " + project.projectname;
                activitystr.issueid     = 4;
                activitystr.issuekey    = "-";
                activitystr.actiondate  = DateTime.Now.ToString();
                activitystr.projectid   = project.id;
                int uid = int.Parse(Session["UserId"] + "");
                activitystr.userid = uid;
                db.activitystreams.Add(activitystr);
                db.SaveChanges();

                return(RedirectToAction("Index"));
            }

            return(View(project));
        }
        public ActionResult EndProject(int id = 0)
        {
            //UsersContext uc = new UsersContext();
            //var user = uc.UserProfiles.Select(x => x).Where(x => x.UserName == project.projectleader).FirstOrDefault();
            //project.projectleader = user.UserName;
            //var user2 = uc.UserProfiles.Select(x => x).Where(x => x.UserName == project.projectowner).FirstOrDefault();
            //project.projectowner = user2.UserName;
            //var pro = db.projects.Select(x => x).Where(x => x.projectkey == project.projectkey).FirstOrDefault();



            //for checking if the user allowed to show this action
            //var adminproj = db.projects.Select(x => x).Where(x => x.id == id && x.projectleader == User.Identity.Name).FirstOrDefault();
            //if (adminproj == null)
            //{
            //    return RedirectToAction("Index", "project");
            //}


            //for checking if the user allowed to show this action
            if (User.IsInRole("developer"))
            {
                var adminproj = db.pojectdevs.Select(x => x).Where(x => x.projectid == id && x.devname == User.Identity.Name).FirstOrDefault();
                if (adminproj == null)
                {
                    return(RedirectToAction("Index", "project"));
                }
            }

            if (User.IsInRole("projectowner"))
            {
                var adminproj = db.projects.Select(x => x).Where(x => x.id == id && x.projectowner == User.Identity.Name).FirstOrDefault();
                if (adminproj == null)
                {
                    return(RedirectToAction("Index", "project"));
                }
            }

            if (User.IsInRole("teamleader"))
            {
                var adminproj = db.projects.Select(x => x).Where(x => x.id == id && x.projectleader == User.Identity.Name).FirstOrDefault();
                if (adminproj == null)
                {
                    return(RedirectToAction("Index", "project"));
                }
            }



            var xx = db.projects.Select(x => x).Where(x => x.id == id).FirstOrDefault();

            if (xx.status != "closed" && User.IsInRole("teamleader"))
            {
                xx.status = "closed";
                db.SaveChanges();

                Session["projectid"] = id;
                String username = Convert.ToString(Session["UserName"]);
                //for adding delete action to activity stream
                MvcApplicationTest1.DAL.activitystream activitystr = new MvcApplicationTest1.DAL.activitystream();
                activitystr.actiontype  = "End Project";
                activitystr.description = username + " Ended Project " + xx.projectname;
                activitystr.issueid     = 4;
                activitystr.issuekey    = "-";
                activitystr.actiondate  = DateTime.Now.ToString();
                activitystr.projectid   = id;
                int uid = int.Parse(Session["UserId"] + "");
                activitystr.userid = uid;
                db.activitystreams.Add(activitystr);
                db.SaveChanges();
            }
            //for checking if the project does closed or not
            var tt = db.projects.Select(x => x).Where(x => x.id == id).FirstOrDefault();

            if (tt.status != "closed")
            {
                return(RedirectToAction("Indexproject", "column", new { id = id }));
            }
            var zz = db.issues.Select(x => x).Where(x => x.projectid == id).GroupBy(x => x.keyname).Select(z => z.OrderByDescending(q => q.sprintid).FirstOrDefault()).ToList();

            ViewBag.numofissues = zz.Count;
            var uu = db.sprints.Select(x => x).Where(x => x.projectid == id).ToList();

            ViewBag.numofsprints = uu.Count;

            //for counting unfinished issues
            // the last column id
            var zz2 = db.columns.Select(x => x).Where(x => x.projectid == id).OrderByDescending(x => x.colid).FirstOrDefault();

            if (zz2 != null)
            {
                var lastcolid = zz2.colid;

                //count the list of unfinished issues in the last sprint
                var zz3 = db.issues.Select(x => x).Where(x => x.projectid == id && x.status != lastcolid && x.sprintid == xx.currentsprint).ToList();
                ViewBag.numofunfinishedissues = zz3.Count;
            }
            else
            {
                ViewBag.numofunfinishedissues = 0;
            }



            return(View(xx));
        }