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
+
+
+ Name |
+ Type |
+ NULL |
+ Comment |
+
+
+
+
+ ◆MigrationId |
+ nvarchar (150) |
+ ☐ |
+
+ |
+
+
+ ProductVersion |
+ nvarchar (32) |
+ ☐ |
+
+ |
+
+
+
+
+
+
⇧Table dbo.AspNetRoleClaims
+
+ Table ID: 373576369; Created: December 27, 2017, 12:33:50; Modified: December 27, 2017, 12:33:52
+
+
+ Name |
+ Type |
+ NULL |
+ Comment |
+
+
+
+
+ ◆Id |
+ int |
+ ☐ |
+ IDENTITY |
+
+
+ ClaimType |
+ nvarchar (max) |
+ ☒ |
+
+ |
+
+
+ ClaimValue |
+ nvarchar (max) |
+ ☒ |
+
+ |
+
+
+ RoleId |
+ nvarchar (450) |
+ ☐ |
+ ⇨ dbo.AspNetRoles.Id |
+
+
+
+
+
+
⇧Table dbo.AspNetRoles
+
+ Table ID: 277576027; Created: December 27, 2017, 12:33:49; Modified: December 27, 2017, 12:33:52
+
+
+ Name |
+ Type |
+ NULL |
+ Comment |
+
+
+
+
+ ◆Id |
+ nvarchar (450) |
+ ☐ |
+
+ |
+
+
+ ConcurrencyStamp |
+ nvarchar (max) |
+ ☒ |
+
+ |
+
+
+ Name |
+ nvarchar (256) |
+ ☒ |
+
+ |
+
+
+ NormalizedName |
+ nvarchar (256) |
+ ☒ |
+
+ |
+
+
+
+
+
+
⇧Table dbo.AspNetUserClaims
+
+ Table ID: 421576540; Created: December 27, 2017, 12:33:50; Modified: December 27, 2017, 12:33:52
+
+
+ Name |
+ Type |
+ NULL |
+ Comment |
+
+
+
+
+ ◆Id |
+ int |
+ ☐ |
+ IDENTITY |
+
+
+ ClaimType |
+ nvarchar (max) |
+ ☒ |
+
+ |
+
+
+ ClaimValue |
+ nvarchar (max) |
+ ☒ |
+
+ |
+
+
+ UserId |
+ nvarchar (450) |
+ ☐ |
+ ⇨ dbo.AspNetUsers.Id |
+
+
+
+
+
+
⇧Table dbo.AspNetUserLogins
+
+ Table ID: 469576711; Created: December 27, 2017, 12:33:51; Modified: December 27, 2017, 12:33:53
+
+
+ Name |
+ Type |
+ NULL |
+ Comment |
+
+
+
+
+ ◆LoginProvider |
+ nvarchar (450) |
+ ☐ |
+
+ |
+
+
+ ◆ProviderKey |
+ nvarchar (450) |
+ ☐ |
+
+ |
+
+
+ ProviderDisplayName |
+ nvarchar (max) |
+ ☒ |
+
+ |
+
+
+ UserId |
+ nvarchar (450) |
+ ☐ |
+ ⇨ dbo.AspNetUsers.Id |
+
+
+
+
+
+
⇧Table dbo.AspNetUserRoles
+
+ Table ID: 517576882; Created: December 27, 2017, 12:33:51; Modified: December 27, 2017, 12:33:53
+
+
+ Name |
+ Type |
+ NULL |
+ Comment |
+
+
+
+
+ ◆UserId |
+ nvarchar (450) |
+ ☐ |
+ ⇨ dbo.AspNetUsers.Id |
+
+
+ ◆RoleId |
+ nvarchar (450) |
+ ☐ |
+ ⇨ dbo.AspNetRoles.Id |
+
+
+
+
+
+
⇧Table dbo.AspNetUsers
+
+ Table ID: 341576255; Created: December 27, 2017, 12:33:50; Modified: December 28, 2017, 15:02:21
+
+
+ Name |
+ Type |
+ NULL |
+ Comment |
+
+
+
+
+ ◆Id |
+ nvarchar (450) |
+ ☐ |
+
+ |
+
+
+ AccessFailedCount |
+ int |
+ ☐ |
+
+ |
+
+
+ ConcurrencyStamp |
+ nvarchar (max) |
+ ☒ |
+
+ |
+
+
+ Email |
+ nvarchar (256) |
+ ☒ |
+
+ |
+
+
+ EmailConfirmed |
+ bit |
+ ☐ |
+
+ |
+
+
+ LockoutEnabled |
+ bit |
+ ☐ |
+
+ |
+
+
+ LockoutEnd |
+ datetimeoffset |
+ ☒ |
+
+ |
+
+
+ NormalizedEmail |
+ nvarchar (256) |
+ ☒ |
+
+ |
+
+
+ NormalizedUserName |
+ nvarchar (256) |
+ ☒ |
+
+ |
+
+
+ PasswordHash |
+ nvarchar (max) |
+ ☒ |
+
+ |
+
+
+ PhoneNumber |
+ nvarchar (max) |
+ ☒ |
+
+ |
+
+
+ PhoneNumberConfirmed |
+ bit |
+ ☐ |
+
+ |
+
+
+ SecurityStamp |
+ nvarchar (max) |
+ ☒ |
+
+ |
+
+
+ TwoFactorEnabled |
+ bit |
+ ☐ |
+
+ |
+
+
+ UserName |
+ nvarchar (256) |
+ ☒ |
+
+ |
+
+
+
+
+
+
⇧Table dbo.AspNetUserTokens
+
+ Table ID: 309576141; Created: December 27, 2017, 12:33:49
+
+
+ Name |
+ Type |
+ NULL |
+ Comment |
+
+
+
+
+ ◆UserId |
+ nvarchar (450) |
+ ☐ |
+
+ |
+
+
+ ◆LoginProvider |
+ nvarchar (450) |
+ ☐ |
+
+ |
+
+
+ ◆Name |
+ nvarchar (450) |
+ ☐ |
+
+ |
+
+
+ Value |
+ nvarchar (max) |
+ ☒ |
+
+ |
+
+
+
+
+
+
⇧Table dbo.Epics
+
+ Table ID: 1925581898; Created: December 28, 2017, 15:02:21; Modified: December 28, 2017, 15:02:21
+
+
+ Name |
+ Type |
+ NULL |
+ Comment |
+
+
+
+
+ ◆EpicId |
+ int |
+ ☐ |
+ IDENTITY |
+
+
+ EpicName |
+ nvarchar (250) |
+ ☐ |
+
+ |
+
+
+ ProjectId |
+ int |
+ ☐ |
+ ⇨ dbo.Projects.ProjectId |
+
+
+ CreatedBy |
+ nvarchar (450) |
+ ☐ |
+ ⇨ dbo.AspNetUsers.Id |
+
+
+ CreatedOn |
+ datetime |
+ ☐ |
+
+ |
+
+
+ IsActive |
+ bit |
+ ☐ |
+ DEFAULT ((0)) |
+
+
+
+
+
+
⇧Table dbo.Favourites
+
+ Table ID: 18099105; Created: December 28, 2017, 12:19:17; Modified: December 28, 2017, 12:19:17
+
+
+ Name |
+ Type |
+ NULL |
+ Comment |
+
+
+
+
+ ◆FavouriteId |
+ int |
+ ☐ |
+ IDENTITY |
+
+
+ ProjectId |
+ int |
+ ☐ |
+ ⇨ dbo.Projects.ProjectId |
+
+
+ UserId |
+ nvarchar (450) |
+ ☐ |
+ ⇨ dbo.AspNetUsers.Id |
+
+
+ UpdatedOn |
+ datetime |
+ ☐ |
+
+ |
+
+
+ IsActive |
+ bit |
+ ☐ |
+ DEFAULT ((1)) |
+
+
+
+
+
+
⇧Table dbo.Priorities
+
+ Table ID: 1845581613; Created: December 28, 2017, 14:58:01; Modified: December 28, 2017, 14:58:01
+
+
+ Name |
+ Type |
+ NULL |
+ Comment |
+
+
+
+
+ ◆PriorityId |
+ int |
+ ☐ |
+ IDENTITY |
+
+
+ PriorityName |
+ nvarchar (250) |
+ ☐ |
+
+ |
+
+
+ CreatedBy |
+ nvarchar (450) |
+ ☐ |
+ ⇨ dbo.AspNetUsers.Id |
+
+
+ SortOrder |
+ int |
+ ☐ |
+
+ |
+
+
+ IsActive |
+ bit |
+ ☐ |
+ DEFAULT ((1)) |
+
+
+
+
+
+
⇧Table dbo.ProjectPermission
+
+ Table ID: 1269579561; Created: December 28, 2017, 11:50:26; Modified: December 28, 2017, 11:52:41
+
+
+ Name |
+ Type |
+ NULL |
+ Comment |
+
+
+
+
+ ◆PermissionId |
+ int |
+ ☐ |
+ IDENTITY |
+
+
+ ProjectId |
+ int |
+ ☐ |
+ ⇨ dbo.Projects.ProjectId |
+
+
+ EmailId |
+ nvarchar (250) |
+ ☐ |
+
+ |
+
+
+ UpdatedOn |
+ datetime |
+ ☐ |
+
+ |
+
+
+ IsActive |
+ bit |
+ ☐ |
+ DEFAULT ((1)) |
+
+
+
+
+
+
⇧Table dbo.Projects
+
+ Table ID: 1333579789; Created: December 28, 2017, 11:52:40; Modified: December 28, 2017, 15:02:21
+
+
+ Name |
+ Type |
+ NULL |
+ Comment |
+
+
+
+
+ ◆ProjectId |
+ int |
+ ☐ |
+ IDENTITY |
+
+
+ ProjectName |
+ nvarchar (500) |
+ ☐ |
+
+ |
+
+
+ Description |
+ nvarchar (max) |
+ ☒ |
+
+ |
+
+
+ CreatedBy |
+ nvarchar (450) |
+ ☐ |
+ ⇨ dbo.AspNetUsers.Id |
+
+
+ Owner |
+ nvarchar (450) |
+ ☐ |
+ ⇨ dbo.AspNetUsers.Id |
+
+
+ CreatedOn |
+ datetime |
+ ☐ |
+
+ |
+
+
+ IsActive |
+ bit |
+ ☐ |
+ DEFAULT ((1)) |
+
+
+ IsOpenPermission |
+ bit |
+ ☐ |
+ DEFAULT ((0)) |
+
+
+
+
+
+
⇧Table dbo.Stories
+
+ Table ID: 1621580815; Created: December 28, 2017, 12:14:59; Modified: December 28, 2017, 15:22:41
+
+
+ Name |
+ Type |
+ NULL |
+ Comment |
+
+
+
+
+ ◆StoryId |
+ int |
+ ☐ |
+ IDENTITY |
+
+
+ TaskId |
+ int |
+ ☐ |
+
+ |
+
+
+ Title |
+ nvarchar (250) |
+ ☐ |
+
+ |
+
+
+ Description |
+ nvarchar (500) |
+ ☒ |
+
+ |
+
+
+ ProjectId |
+ int |
+ ☐ |
+ ⇨ dbo.Projects.ProjectId |
+
+
+ ThemeId |
+ int |
+ ☒ |
+ ⇨ dbo.Themes.ThemeId |
+
+
+ EpicId |
+ int |
+ ☒ |
+ ⇨ dbo.Epics.EpicId |
+
+
+ PriorityId |
+ int |
+ ☒ |
+ ⇨ dbo.Priorities.PriorityId |
+
+
+ StoryPoints |
+ decimal (18, 3) |
+ ☒ |
+
+ |
+
+
+ Benefit |
+ int |
+ ☒ |
+
+ |
+
+
+ Penality |
+ int |
+ ☒ |
+
+ |
+
+
+ SortOrder |
+ int |
+ ☒ |
+
+ |
+
+
+ CreatedBy |
+ nvarchar (450) |
+ ☐ |
+ ⇨ dbo.AspNetUsers.Id |
+
+
+ AssigneeName |
+ nvarchar (450) |
+ ☒ |
+
+ |
+
+
+ SprintName |
+ nvarchar (250) |
+ ☒ |
+
+ |
+
+
+ CreatedOn |
+ datetime |
+ ☐ |
+
+ |
+
+
+ UpdatedOn |
+ datetime |
+ ☐ |
+
+ |
+
+
+ IsActive |
+ bit |
+ ☐ |
+ DEFAULT ((1)) |
+
+
+ Tag |
+ varchar (250) |
+ ☒ |
+
+ |
+
+
+
+
+
+
⇧Table dbo.Themes
+
+ Table ID: 1749581271; Created: December 28, 2017, 12:38:39; Modified: December 28, 2017, 12:38:39
+
+
+ Name |
+ Type |
+ NULL |
+ Comment |
+
+
+
+
+ ◆ThemeId |
+ int |
+ ☐ |
+ IDENTITY |
+
+
+ ThemeName |
+ nvarchar (250) |
+ ☐ |
+
+ |
+
+
+ ProjectId |
+ int |
+ ☐ |
+ ⇨ dbo.Projects.ProjectId |
+
+
+ CreatedBy |
+ nvarchar (450) |
+ ☐ |
+ ⇨ dbo.AspNetUsers.Id |
+
+
+ CreatedOn |
+ datetime |
+ ☐ |
+
+ |
+
+
+ IsActive |
+ bit |
+ ☐ |
+ DEFAULT ((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 @@
-*@