diff --git a/Database sample/TaskPlanner.mdf b/Database sample/TaskPlanner.mdf new file mode 100644 index 0000000..05779df Binary files /dev/null and b/Database sample/TaskPlanner.mdf differ diff --git a/Database sample/TaskPlannerDBSchema.htm b/Database sample/TaskPlannerDBSchema.htm new file mode 100644 index 0000000..e16e51e --- /dev/null +++ b/Database sample/TaskPlannerDBSchema.htm @@ -0,0 +1,912 @@ + + + + + TaskPlanner Database Schema + + + + +

TaskPlanner Database Schema

+
+ +
+
+

Table dbo.__EFMigrationsHistory

+ + + + + + + + + + + + + + + + + + + + + + + + +
Table ID: 245575913; Created: December 27, 2017, 12:33:47
NameTypeNULLComment
MigrationIdnvarchar (150) +
ProductVersionnvarchar (32) +
+
+
+

Table dbo.AspNetRoleClaims

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table ID: 373576369; Created: December 27, 2017, 12:33:50; Modified: December 27, 2017, 12:33:52
NameTypeNULLComment
IdintIDENTITY
ClaimTypenvarchar (max) +
ClaimValuenvarchar (max) +
RoleIdnvarchar (450)dbo.AspNetRoles.Id
+
+
+

Table dbo.AspNetRoles

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table ID: 277576027; Created: December 27, 2017, 12:33:49; Modified: December 27, 2017, 12:33:52
NameTypeNULLComment
Idnvarchar (450) +
ConcurrencyStampnvarchar (max) +
Namenvarchar (256) +
NormalizedNamenvarchar (256) +
+
+
+

Table dbo.AspNetUserClaims

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table ID: 421576540; Created: December 27, 2017, 12:33:50; Modified: December 27, 2017, 12:33:52
NameTypeNULLComment
IdintIDENTITY
ClaimTypenvarchar (max) +
ClaimValuenvarchar (max) +
UserIdnvarchar (450)dbo.AspNetUsers.Id
+
+
+

Table dbo.AspNetUserLogins

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table ID: 469576711; Created: December 27, 2017, 12:33:51; Modified: December 27, 2017, 12:33:53
NameTypeNULLComment
LoginProvidernvarchar (450) +
ProviderKeynvarchar (450) +
ProviderDisplayNamenvarchar (max) +
UserIdnvarchar (450)dbo.AspNetUsers.Id
+
+
+

Table dbo.AspNetUserRoles

+ + + + + + + + + + + + + + + + + + + + + + + + +
Table ID: 517576882; Created: December 27, 2017, 12:33:51; Modified: December 27, 2017, 12:33:53
NameTypeNULLComment
UserIdnvarchar (450)dbo.AspNetUsers.Id
RoleIdnvarchar (450)dbo.AspNetRoles.Id
+
+
+

Table dbo.AspNetUsers

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table ID: 341576255; Created: December 27, 2017, 12:33:50; Modified: December 28, 2017, 15:02:21
NameTypeNULLComment
Idnvarchar (450) +
AccessFailedCountint +
ConcurrencyStampnvarchar (max) +
Emailnvarchar (256) +
EmailConfirmedbit +
LockoutEnabledbit +
LockoutEnddatetimeoffset +
NormalizedEmailnvarchar (256) +
NormalizedUserNamenvarchar (256) +
PasswordHashnvarchar (max) +
PhoneNumbernvarchar (max) +
PhoneNumberConfirmedbit +
SecurityStampnvarchar (max) +
TwoFactorEnabledbit +
UserNamenvarchar (256) +
+
+
+

Table dbo.AspNetUserTokens

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table ID: 309576141; Created: December 27, 2017, 12:33:49
NameTypeNULLComment
UserIdnvarchar (450) +
LoginProvidernvarchar (450) +
Namenvarchar (450) +
Valuenvarchar (max) +
+
+
+

Table dbo.Epics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table ID: 1925581898; Created: December 28, 2017, 15:02:21; Modified: December 28, 2017, 15:02:21
NameTypeNULLComment
EpicIdintIDENTITY
EpicNamenvarchar (250) +
ProjectIdintdbo.Projects.ProjectId
CreatedBynvarchar (450)dbo.AspNetUsers.Id
CreatedOndatetime +
IsActivebitDEFAULT ((0))
+
+
+

Table dbo.Favourites

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table ID: 18099105; Created: December 28, 2017, 12:19:17; Modified: December 28, 2017, 12:19:17
NameTypeNULLComment
FavouriteIdintIDENTITY
ProjectIdintdbo.Projects.ProjectId
UserIdnvarchar (450)dbo.AspNetUsers.Id
UpdatedOndatetime +
IsActivebitDEFAULT ((1))
+
+
+

Table dbo.Priorities

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table ID: 1845581613; Created: December 28, 2017, 14:58:01; Modified: December 28, 2017, 14:58:01
NameTypeNULLComment
PriorityIdintIDENTITY
PriorityNamenvarchar (250) +
CreatedBynvarchar (450)dbo.AspNetUsers.Id
SortOrderint +
IsActivebitDEFAULT ((1))
+
+
+

Table dbo.ProjectPermission

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table ID: 1269579561; Created: December 28, 2017, 11:50:26; Modified: December 28, 2017, 11:52:41
NameTypeNULLComment
PermissionIdintIDENTITY
ProjectIdintdbo.Projects.ProjectId
EmailIdnvarchar (250) +
UpdatedOndatetime +
IsActivebitDEFAULT ((1))
+
+
+

Table dbo.Projects

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table ID: 1333579789; Created: December 28, 2017, 11:52:40; Modified: December 28, 2017, 15:02:21
NameTypeNULLComment
ProjectIdintIDENTITY
ProjectNamenvarchar (500) +
Descriptionnvarchar (max) +
CreatedBynvarchar (450)dbo.AspNetUsers.Id
Ownernvarchar (450)dbo.AspNetUsers.Id
CreatedOndatetime +
IsActivebitDEFAULT ((1))
IsOpenPermissionbitDEFAULT ((0))
+
+
+

Table dbo.Stories

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table ID: 1621580815; Created: December 28, 2017, 12:14:59; Modified: December 28, 2017, 15:22:41
NameTypeNULLComment
StoryIdintIDENTITY
TaskIdint +
Titlenvarchar (250) +
Descriptionnvarchar (500) +
ProjectIdintdbo.Projects.ProjectId
ThemeIdintdbo.Themes.ThemeId
EpicIdintdbo.Epics.EpicId
PriorityIdintdbo.Priorities.PriorityId
StoryPointsdecimal (18, 3) +
Benefitint +
Penalityint +
SortOrderint +
CreatedBynvarchar (450)dbo.AspNetUsers.Id
AssigneeNamenvarchar (450) +
SprintNamenvarchar (250) +
CreatedOndatetime +
UpdatedOndatetime +
IsActivebitDEFAULT ((1))
Tagvarchar (250) +
+
+
+

Table dbo.Themes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table ID: 1749581271; Created: December 28, 2017, 12:38:39; Modified: December 28, 2017, 12:38:39
NameTypeNULLComment
ThemeIdintIDENTITY
ThemeNamenvarchar (250) +
ProjectIdintdbo.Projects.ProjectId
CreatedBynvarchar (450)dbo.AspNetUsers.Id
CreatedOndatetime +
IsActivebitDEFAULT ((1))
+
+ + + \ No newline at end of file diff --git a/Database sample/TaskPlanner_log.ldf b/Database sample/TaskPlanner_log.ldf new file mode 100644 index 0000000..87a0ce4 Binary files /dev/null and b/Database sample/TaskPlanner_log.ldf differ diff --git a/Database sample/Taskplanner.sql b/Database sample/Taskplanner.sql new file mode 100644 index 0000000..efcc318 Binary files /dev/null and b/Database sample/Taskplanner.sql differ diff --git a/TaskPlanner/Controllers/ProjectController.cs b/TaskPlanner/Controllers/ProjectController.cs index 69d095e..d624f18 100644 --- a/TaskPlanner/Controllers/ProjectController.cs +++ b/TaskPlanner/Controllers/ProjectController.cs @@ -95,7 +95,9 @@ public JsonResult AddProjectAsync(string description = "", string projectname = if(id >0) objects.ProjectId = id; objects.CreatedBy = User.FindFirstValue(ClaimTypes.NameIdentifier); - var res = new ProjectViewModel().UpdateProjectDetails(objects); + var currentUserEmail = User.Identity.Name; + + var res = new ProjectViewModel().UpdateProjectDetails(objects, currentUserEmail); if (res.IsSuccess) { return this.Json(new @@ -148,9 +150,13 @@ public JsonResult EditProjectAsync(string projectId = "") /// Shareproject() - Return the partial view /// /// partial view - public PartialViewResult ShareProject() + public PartialViewResult ShareProject(int projectId) { - var list = ProjectModel.GetProjectSharedList(); + var currentUserEmail = User.Identity.Name.ToLower().Trim(); + + + + var list = ProjectModel.GetProjectSharedList(projectId, currentUserEmail); //return this.PartialView("~/Views/Project/_ShareList.cshtml", list); return this.PartialView("~/Views/Project/_ShareProject.cshtml", list); } @@ -163,13 +169,25 @@ public PartialViewResult ShareProject() /// public JsonResult ShareEmail(int projectId, string email = "") { - var res = new ProjectViewModel().UpdateProjectPermissionList(projectId, email,true); + var currentUserEmail = User.Identity.Name.ToLower().Trim() ; + + email = email.ToLower().Trim(); + if (email== currentUserEmail) + return this.Json(new + { + status = true, + message = "Owner already has permission for project." + }); + + + + var res = new ProjectViewModel().UpdateProjectPermissionList(projectId, email,true); if (res.IsSuccess) { return this.Json(new { status = true, - message = "New project created successfully." + message = "Permission added successfully." }); } else @@ -181,12 +199,7 @@ public JsonResult ShareEmail(int projectId, string email = "") }); } } - - public ActionResult GetShareProjectList() - { - var list = ProjectModel.GetProjectSharedList(); - return this.PartialView("~/Views/Project/_ShareList.cshtml", list); - } + /// /// @@ -195,8 +208,14 @@ public ActionResult GetShareProjectList() /// public JsonResult RemovePermission(int permissionId) { - var res = new ProjectViewModel().RemoveProjectPermission(permissionId); - if (res.IsSuccess) + + var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); + + var res = new ProjectViewModel().RemoveProjectPermission(permissionId, userId); + + + + if (res.IsSuccess) { return this.Json(new { diff --git a/TaskPlanner/Models/ProjectModel.cs b/TaskPlanner/Models/ProjectModel.cs index 7bb9746..ddd6a35 100644 --- a/TaskPlanner/Models/ProjectModel.cs +++ b/TaskPlanner/Models/ProjectModel.cs @@ -18,34 +18,40 @@ public static ProjectObjects GetProjectList(string filter, string currentUserEma { projectList.ProjectListObjects = (from c in context.AspNetUsers.Where(y => (y.Email == currentUserEmail)) from d in context.ProjectPermissions.Where(i => i.IsActive && i.EmailId == currentUserEmail).DefaultIfEmpty() - from a in context.Projects.Where(x => (x.IsActive && (x.ProjectId == d.ProjectId || x.CreatedBy == c.Id))) + from a in context.Projects.Where(x => (x.IsActive && (x.ProjectId == d.ProjectId))) from b in context.Favourites.Where(y => (y.UserId == c.Id && y.ProjectId == a.ProjectId && y.IsActive)) + from owner in context.AspNetUsers.Where(y => (y.Id == a.CreatedBy) + ) select new ProjectListObjects { ProjectId = a.ProjectId, ProjectName = a.ProjectName, ProjectDescription = a.Description, CreatedOn = a.CreatedOn, - CreatedBy = c.UserName, - Email = c.Email, - IsOwner = Permission.IsUserOwnerOfProject(currentUserEmail, a.ProjectId) + CreatedBy = owner.Email, + Email = owner.Email, + IsOwner = owner.Email==currentUserEmail }).Distinct().ToList(); } else if (filter == "all") { - projectList.ProjectListObjects = (from b in context.AspNetUsers.Where(i => i.Email == currentUserEmail) - from c in context.ProjectPermissions.Where(z => (z.EmailId == currentUserEmail && z.IsActive)).DefaultIfEmpty() - from a in context.Projects.Where(x => x.IsActive && (x.ProjectId == c.ProjectId || x.CreatedBy == b.Id)) + var projPermission = (from c in context.ProjectPermissions where c.EmailId == currentUserEmail && c.IsActive select c.ProjectId).ToList(); + + if(projPermission!=null && projPermission.Count>0) + projectList.ProjectListObjects = ( + from a in context.Projects.Where(x => x.IsActive && projPermission.Contains(x.ProjectId )) + from b in context.AspNetUsers.Where(i => i.Id == a.CreatedBy) + select new ProjectListObjects { ProjectId = a.ProjectId, ProjectName = a.ProjectName, ProjectDescription = a.Description, CreatedOn = a.CreatedOn, - CreatedBy = b.UserName, + CreatedBy = b.Email, Email = b.Email, - IsOwner = Permission.IsUserOwnerOfProject(currentUserEmail, a.ProjectId) + IsOwner = b.Email == currentUserEmail }).Distinct().ToList(); } else @@ -59,9 +65,9 @@ from a in context.Projects.Where(x => (x.IsActive && x.CreatedBy == b.Id)) ProjectName = a.ProjectName, ProjectDescription = a.Description, CreatedOn = a.CreatedOn, - CreatedBy = b.UserName, + CreatedBy = b.Email, Email = b.Email, - IsOwner = Permission.IsUserOwnerOfProject(currentUserEmail, a.ProjectId) + IsOwner = true }).Distinct().ToList(); } @@ -121,12 +127,14 @@ from b in context.AspNetUsers.Where(y => y.Id == a.CreatedBy) /// /// /// - public static ProjectShareObjects GetProjectSharedList() + public static ProjectShareObjects GetProjectSharedList(int projectId,string emailid) { var list = new ProjectShareObjects(); using (var context = new TaskPlannerEntities()) { - list.ProjectShareListObjects = (from a in context.ProjectPermissions.Where(x => (x.IsActive)) + list.ProjectShareListObjects = (from a in context.ProjectPermissions.Where(x => (x.IsActive) && x.ProjectId== projectId + && x.EmailId!=emailid + ) select new ProjectShareListObjects { PermissionId = a.PermissionId, diff --git a/TaskPlanner/Models/ProjectViewModel.cs b/TaskPlanner/Models/ProjectViewModel.cs index 1c719c8..152d748 100644 --- a/TaskPlanner/Models/ProjectViewModel.cs +++ b/TaskPlanner/Models/ProjectViewModel.cs @@ -9,7 +9,7 @@ public interface IProjectViewModel { - TransactionResult UpdateProjectDetails(ProjectListObjects newProjectDetails); + TransactionResult UpdateProjectDetails(ProjectListObjects newProjectDetails,string email); TransactionResult DeleteProject(int projectId); TransactionResult UpdateFavouriteList(int projectId, string userId, bool isFavouriteListAdded); TransactionResult UpdateProjectPermissionList(int projectId, string emailId, bool isProjectPermissionListAdded); @@ -17,7 +17,7 @@ public interface IProjectViewModel public class ProjectViewModel : IProjectViewModel { - public TransactionResult UpdateProjectDetails(ProjectListObjects newProjectDetails) + public TransactionResult UpdateProjectDetails(ProjectListObjects newProjectDetails,string email) { var result = new TransactionResult(); @@ -48,8 +48,20 @@ public TransactionResult UpdateProjectDetails(ProjectListObjects newProjectDetai IsActive = true }; context.Projects.Add(newProject); + + var projectPermissionListObj = new ProjectPermission() + { + ProjectId = newProject.ProjectId, + EmailId = email, + UpdatedOn = DateTime.Now, + IsActive = true + }; + context.ProjectPermissions.Add(projectPermissionListObj); + } + + context.SaveChanges(); } result.IsSuccess = true; @@ -148,7 +160,9 @@ public TransactionResult UpdateProjectPermissionList(int projectId, string email using (var context = new TaskPlannerEntities()) { var projectPermissionObj = (from projectPermissionDetails in context.ProjectPermissions.Where(i => i.ProjectId == projectId && i.EmailId == emailId) - select projectPermissionDetails).ToList(); + select projectPermissionDetails).ToList(); + + if (isProjectPermissionListAdded) { @@ -197,7 +211,7 @@ public TransactionResult UpdateProjectPermissionList(int projectId, string email /// /// /// - public TransactionResult RemoveProjectPermission(int permissionId) + public TransactionResult RemoveProjectPermission(int permissionId,string userid) { var result = new TransactionResult(); try @@ -207,7 +221,22 @@ public TransactionResult RemoveProjectPermission(int permissionId) var projectPermissionObj = (from projectPermissionDetails in context.ProjectPermissions.Where(i => i.PermissionId == permissionId) select projectPermissionDetails).FirstOrDefault(); projectPermissionObj.IsActive = false; - context.SaveChanges(); + + var favProjects = (from f in context.Favourites + where f.IsActive && projectPermissionObj.ProjectId == f.ProjectId && f.UserId == userid + select +f).ToList(); + + if (favProjects != null && favProjects.Count > 0) + { + foreach (var item in favProjects) + { + item.IsActive = false; + } + } + + + context.SaveChanges(); } result.IsSuccess = true; diff --git a/TaskPlanner/Startup.cs b/TaskPlanner/Startup.cs index cedacdd..5483168 100644 --- a/TaskPlanner/Startup.cs +++ b/TaskPlanner/Startup.cs @@ -142,7 +142,7 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env) routes.MapRoute( name: "Share project", - template: "project/shareproject", + template: "project/shareproject/{projectId?}", defaults: new { controller = "Project", action = "ShareProject" }); routes.MapRoute( diff --git a/TaskPlanner/TaskPlanner.csproj.user b/TaskPlanner/TaskPlanner.csproj.user index 9b0767b..73f7f1a 100644 --- a/TaskPlanner/TaskPlanner.csproj.user +++ b/TaskPlanner/TaskPlanner.csproj.user @@ -9,5 +9,6 @@ False False 600 + CustomProfile \ No newline at end of file diff --git a/TaskPlanner/Views/Project/_ShareProject.cshtml b/TaskPlanner/Views/Project/_ShareProject.cshtml index 7e639ab..cbe10e4 100644 --- a/TaskPlanner/Views/Project/_ShareProject.cshtml +++ b/TaskPlanner/Views/Project/_ShareProject.cshtml @@ -21,11 +21,11 @@ -
+@*
-
+
*@