Exemple #1
0
        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));
        }