public ActionResult Save(ProjectMasterModelNew model) { try { GetDefaults(); List <KeyValuePair <KeyValuePair <long, string>, KeyValuePair <decimal, int> > > empPercentageStatus = new List <KeyValuePair <KeyValuePair <long, string>, KeyValuePair <decimal, int> > >(); if (!string.IsNullOrEmpty(model.ProjectMembers)) { string[] empList = model.ProjectMembers.Split(','); string[] empNames = model.ProjectMembersNames.Split(','); for (int i = 0; i < empList.Length; i++) { long empId = Convert.ToInt64(empList[i]); string empName = empNames[i]; List <int> totalInvolvement = DB.Employee.Where(x => x.EmployeeID == empId).Select(x => x.TotalInvolvement ?? 100).ToList(); decimal? currentInvolvement = (from x in DB.ProjectEmployee join y in DB.ProjectMaster on x.ProjectID equals y.ProjectID where x.EmployeeID == empId && (x.EndDate >= DateTime.Now || !x.EndDate.HasValue) && x.ProjectID != model.ProjectID select x.InvPercentage).Sum(); // = currentInvolvement + EPL.InvPercentage; if (currentInvolvement + model.InvPercentage > totalInvolvement[0]) { empPercentageStatus.Add(new KeyValuePair <KeyValuePair <long, string>, KeyValuePair <decimal, int> >(new KeyValuePair <long, string>(empId, empName), new KeyValuePair <decimal, int>(currentInvolvement.Value, totalInvolvement[0]))); } } } StringBuilder errorMessage = new StringBuilder(); if (empPercentageStatus.Any()) { foreach (KeyValuePair <KeyValuePair <long, string>, KeyValuePair <decimal, int> > item in empPercentageStatus) { errorMessage.Append($"Emplyee {item.Key.Value} has exceeded the maximum allocation , current allocation is {item.Value.Key} , maximum allocation is {item.Value.Value} and Available allocation is { item.Value.Value - item.Value.Key } line line"); } ViewBag.Message = errorMessage.ToString(); } else { ModelState.Remove("ProjectID"); // model.ValidateModel(ModelState); model.MemberProjectGrant = model.ProjectGrant; Session["ProjectGrant"] = model.ProjectGrant; model.IsActive = true; if (model.Theme.HasValue) { var eligibleThemeGrants = ConfigurationManager.AppSettings["ThemeGrandCodes"].ToString().Split(',').ToList(); var themeMstType = Convert.ToInt32(ConfigurationManager.AppSettings["TypeGrant"]); var themes = DB.MasterData.Where(x => x.MstTypeID == themeMstType && eligibleThemeGrants.Contains(x.MstCode)).Select(x => x.MstID); if (!themes.Contains(model.ProjectGrant)) { model.Theme = null; } } ProjectMasterModel newModel = new ProjectMasterModel { ProjectID = model.ProjectID, ProjectCode = model.ProjectCode, ProjectName = model.ProjectName, ProjectDesc = model.ProjectDesc, InternalOrder = model.InternalOrder, CostCentre = model.CostCentre, ProjectGrant = model.ProjectGrant, ResearchArea = model.ResearchArea, TypeofResearch = model.TypeofResearch, StartDate = model.StartDate, EndDate = model.EndDate, ProjectDuration = model.ProjectDuration, IsActive = true, IsRDProject = model.IsRDProject, Theme = model.Theme }; DB.ProjectMaster.Add(newModel); DB.SaveChanges(); long projectId = DB.ProjectMaster.Where(x => x.ProjectCode == model.ProjectCode).Select(x => x.ProjectID).FirstOrDefault(); string projectName = DB.ProjectMaster.Where(x => x.ProjectCode == model.ProjectCode).Select(x => x.ProjectName).FirstOrDefault(); Session["pId"] = projectId; Session["pName"] = projectName; TempData["projectid"] = 1; TempData["Success"] = ResourceMessage.NewProjectAdd; Session["ProjectGrant"] = model.ProjectGrant; if (!string.IsNullOrEmpty(model.ProjectMembers)) { model.ProjectID = projectId; model.IsActive = true; foreach (string item in model.ProjectMembers.Split(',')) { EmployeeModel refRole = DB.Employee.FirstOrDefault(x => x.EmployeeID.ToString() == item); List <EmployeeProjectList> GetDetails = DB.Database.SqlQuery <EmployeeProjectList>( @"exec " + Constants.P_InsertProjectEmployee + " @ProjectId,@EmployeeID,@CheckRole,@InvPercentage,@RefRole,@StartDate,@EndDate,@Grant,@IsActive,@CreatedBy", new object[] { new SqlParameter("@ProjectId", model.ProjectID), new SqlParameter("@EmployeeID", item), new SqlParameter("@CheckRole", model.CheckRole), new SqlParameter("@InvPercentage", model.InvPercentage), new SqlParameter("@RefRole", model.IsRDProject == 1 ? (refRole.RoleID ?? 0) : 0), new SqlParameter("@StartDate", model.StartDate), new SqlParameter("@EndDate", model.EndDate), new SqlParameter("@Grant", model.ProjectGrant), new SqlParameter("@IsActive", model.IsActive), new SqlParameter("@CreatedBy", Session["EmployeeId"].ToString()) }).ToList(); if (model.IsRDProject == 1 && refRole.RoleID == null) { ViewBag.Message = ViewBag.Message + $"line Employee { SCTimeSheet.Models.Common.GetName(refRole.EmpFirstName, refRole.EmpLastName, refRole.EmpMiddleName) } Role is blank, please modify manually or contact administrator"; } if (!string.IsNullOrEmpty(refRole.Email)) { if (!DB.User.Any(x => x.Email == refRole.Email)) { UserModel user = new UserModel { Email = refRole.Email, CreatedBy = 1, CreatedDate = DateTime.Now, IsActive = true, Password = "******", RoleID = model.CheckRole ? Convert.ToInt64(ReadConfig.GetValue("RolePM")) : Convert.ToInt64(ReadConfig.GetValue("RoleEmployee")) }; DB.User.Add(user); DB.SaveChanges(); refRole.UserID = user.UserID; DB.Employee.Attach(refRole); DB.Entry(refRole).State = System.Data.Entity.EntityState.Modified; DB.SaveChanges(); } } else { ViewBag.Message = ViewBag.Message + $"line Employee { SCTimeSheet.Models.Common.GetName(refRole.EmpFirstName, refRole.EmpLastName, refRole.EmpMiddleName) } email is blank, please contact administrator"; } } } TempData.Add("ProjectCreated", $"{model.ProjectName } is created successfully"); return(RedirectToAction("Index", "ProjectMain")); } } catch (Exception ex) { TempData["Error"] = ex.ToString(); LogHelper.ErrorLog(ex); } return(View("Index", model)); }
public ActionResult Save(ProjectMasterModelNew model) { try { GetDefaults(); JavaScriptSerializer json_serializer = new JavaScriptSerializer(); var modifiedOrNewEmpList = json_serializer.Deserialize <EmployeeProjectList[]>(model.EmployeeProjectList); ModelState.Remove("ProjectID"); // model.ValidateModel(ModelState); model.MemberProjectGrant = model.ProjectGrant; Session["ProjectGrant"] = model.ProjectGrant; model.IsActive = true; if (model.Theme.HasValue) { var eligibleThemeGrants = ConfigurationManager.AppSettings["ThemeGrandCodes"].ToString().Split(',').ToList(); var themeMstType = Convert.ToInt32(ConfigurationManager.AppSettings["TypeGrant"]); var themes = DB.MasterData.Where(x => x.MstTypeID == themeMstType && eligibleThemeGrants.Contains(x.MstCode)).Select(x => x.MstID); if (!themes.Contains(model.ProjectGrant)) { model.Theme = null; } } ProjectMasterModel newModel = new ProjectMasterModel { ProjectID = model.ProjectID, ProjectCode = model.ProjectCode, ProjectName = model.ProjectName, ProjectDesc = model.ProjectDesc, InternalOrder = model.InternalOrder, CostCentre = model.CostCentre, ProjectGrant = model.ProjectGrant, ResearchArea = model.ResearchArea, TypeofResearch = model.TypeofResearch, StartDate = model.StartDate, EndDate = model.EndDate, ProjectDuration = model.ProjectDuration, IsActive = true, IsRDProject = model.IsRDProject, Theme = model.Theme }; DB.ProjectMaster.Add(newModel); DB.SaveChanges(); long projectId = DB.ProjectMaster.Where(x => x.ProjectCode == model.ProjectCode).Select(x => x.ProjectID).FirstOrDefault(); string projectName = DB.ProjectMaster.Where(x => x.ProjectCode == model.ProjectCode).Select(x => x.ProjectName).FirstOrDefault(); Session["pId"] = projectId; Session["pName"] = projectName; TempData["projectid"] = 1; TempData["Success"] = ResourceMessage.NewProjectAdd; Session["ProjectGrant"] = model.ProjectGrant; if (modifiedOrNewEmpList.Any()) { model.ProjectID = projectId; model.IsActive = true; foreach (var item in modifiedOrNewEmpList) { EmployeeModel refRole = DB.Employee.FirstOrDefault(x => x.EmployeeID == item.EmployeeID); List <EmployeeProjectList> GetDetails = DB.Database.SqlQuery <EmployeeProjectList>( @"exec " + Constants.P_InsertProjectEmployee + " @ProjectId,@EmployeeID,@CheckRole,@InvPercentage,@RefRole,@StartDate,@EndDate,@Grant,@IsActive,@CreatedBy", new object[] { new SqlParameter("@ProjectId", model.ProjectID), new SqlParameter("@EmployeeID", item.EmployeeID), new SqlParameter("@CheckRole", item.IsManager), new SqlParameter("@InvPercentage", item.InvPercentage), new SqlParameter("@RefRole", model.IsRDProject == 1 ? (refRole.RoleID ?? 0) : 0), new SqlParameter("@StartDate", item.StartDate), new SqlParameter("@EndDate", item.EndDate), new SqlParameter("@Grant", model.ProjectGrant), new SqlParameter("@IsActive", model.IsActive), new SqlParameter("@CreatedBy", Session["EmployeeId"].ToString()) }).ToList(); if (model.IsRDProject == 1 && refRole.RoleID == null) { ViewBag.Message = ViewBag.Message + $"line Employee { SCTimeSheet.Models.Common.GetName(refRole.EmpFirstName, refRole.EmpLastName, refRole.EmpMiddleName) } Role is blank, please modify manually or contact administrator"; } if (!string.IsNullOrEmpty(refRole.Email)) { if (!DB.User.Any(x => x.Email == refRole.Email)) { UserModel user = new UserModel { Email = refRole.Email, CreatedBy = 1, CreatedDate = DateTime.Now, IsActive = true, Password = "******", RoleID = item.IsManager ? Convert.ToInt64(ReadConfig.GetValue("RolePM")) : Convert.ToInt64(ReadConfig.GetValue("RoleEmployee")) }; DB.User.Add(user); DB.SaveChanges(); refRole.UserID = user.UserID; DB.Employee.Attach(refRole); DB.Entry(refRole).State = System.Data.Entity.EntityState.Modified; DB.SaveChanges(); } } else { ViewBag.Message = ViewBag.Message + $"line Employee { SCTimeSheet.Models.Common.GetName(refRole.EmpFirstName, refRole.EmpLastName, refRole.EmpMiddleName) } email is blank, please contact administrator"; } } } TempData.Add("ProjectCreated", $"{model.ProjectName } is created successfully"); return(RedirectToAction("Index", "ProjectMain")); } catch (Exception ex) { TempData["Error"] = ex.ToString(); LogHelper.ErrorLog(ex); } return(View("Index", model)); }