public List <Model.ViewModel.Error> SaveChanges(string Language) { // use this function only to save main record List <DbEntityEntry> entries = null; var errors = HrUnitOfWork.SaveChanges(Language, out entries); if (errors.Count > 0) { return(errors); } // now send notifications var notifications = entries.Where(e => e.Entity.ToString() == "Model.Domain.Notifications.Notification").Select(e => e.Entity); if (notifications.Count() > 0) // found notifications { foreach (var entity in notifications) { var notification = (Model.Domain.Notifications.Notification)entity; HangFireJobs.SendNotication(notification, notification.Condition, HrUnitOfWork.NotificationRepository); } } return(errors); }
public List <Model.ViewModel.Error> Save(string Language) { // use this function within transaction for any change var errors = HrUnitOfWork.SaveChanges(Language); return(errors); }
public static void SendEmails(IList <UserView> users, Notification notify, string email = null) { if (email != null) { users.Add(new UserView { EmailNotify = true, Email = email }); } HrUnitOfWork unitofwork = new HrUnitOfWork(new HrContextFactory(System.Configuration.ConfigurationManager.ConnectionStrings["HrContext"].ConnectionString)); bool modified = false; int counter = 0; EmailAccount emailaccount = null; if (users.Count() > 0) { SendEmails(unitofwork.NotificationRepository, users, notify, ref emailaccount, ref counter, ref modified); if (emailaccount != null && modified) { emailaccount.LastSentDate = DateTime.Now; emailaccount.TodayCount = counter; unitofwork.NotificationRepository.Attach(emailaccount); unitofwork.NotificationRepository.Entry(emailaccount).State = System.Data.Entity.EntityState.Modified; } unitofwork.SaveChanges(); } }
public void RunNotificationsAlgorithm(string ConnectionString, SendFormPageVM model, string Culture) { HrUnitOfWork unitofwork = new HrUnitOfWork(new HrContextFactory(ConnectionString)); try { DateTime Today = DateTime.Now.Date; List <int> EmployeesToNotificate = GetEmpIdList(ConnectionString, model, Culture); string FormName = unitofwork.Repository <FlexForm>().Where(a => a.Id == model.FormId).SingleOrDefault().Name; List <FormDropDown> EmpsLangs = unitofwork.MeetingRepository.GetUsersLang((EmployeesToNotificate.Any()) ? EmployeesToNotificate.Select(a => a.ToString()).Aggregate <string>((x1, x2) => x1 + "," + x2).ToString() : ""); foreach (var e in EmployeesToNotificate.Distinct()) { string Lang; if (EmpsLangs.Select(a => a.id).Contains(e)) { Lang = EmpsLangs.Where(a => a.id == e).FirstOrDefault().name; } else { Lang = Culture; } NotifyLetter NL = new NotifyLetter() { CompanyId = model.CompanyId, EmpId = e, NotifyDate = Today, NotifySource = MsgUtils.Instance.Trls(Lang, "Questionnaire") + " " + MsgUtils.Instance.Trls(Lang, FormName), SourceId = model.FormId.ToString(), Sent = true, EventDate = model.ExpiryDate, Description = MsgUtils.Instance.Trls(Lang, "Please fill") + " " + MsgUtils.Instance.Trls(Lang, FormName) + " " + MsgUtils.Instance.Trls(Lang, "Before") + " " + model.ExpiryDate.ToShortDateString() }; unitofwork.NotifyLetterRepository.Add(NL); } unitofwork.SaveChanges(); } catch (Exception ex) { unitofwork.HandleDbExceptions(ex); } finally { } }
public async Task <ActionResult> SaveProfile(ProfileViewModel profile, OptionsViewModel moreInfo) { var _hrUnitOfWork = new HrUnitOfWork(new HrContextFactory(System.Configuration.ConfigurationManager.ConnectionStrings["HrContext"].ConnectionString)); var _userManager = HttpContext.GetOwinContext().GetUserManager <ApplicationUserManager>(); var userbl = new UserBL(); if (ModelState.IsValid) { string userId = User.Identity.GetUserId(); ApplicationUser user = _userManager.FindById(userId); IdentityResult result; bool Changed = false; string message = "OK"; string OldCulture = user.Language; string OldTimeZone = user.TimeZone; int OldCompany = user.DefaultCompany.Value; AutoMapper(new AutoMapperParm() { ObjectName = "Profile", Source = profile, Destination = user, Options = moreInfo }, _hrUnitOfWork); user.Language = profile.Culture == null ? "en-GB" : profile.Culture; user.Messages = getMessage(profile.Culture); user.DefaultCompany = OldCompany; //if (user.SuperUser) //{ // user.SuperUser = profile.SuperUser; // int supersCount = _userManager.Users.Where(u => u.SuperUser).Count(); // if (!profile.SuperUser && supersCount <= 1) // { // ModelState.AddModelError("SuperUser", MsgUtils.Instance.Trls("CantRemoveSuperUser")); // return Json(Models.Utils.ParseFormErrors(ModelState)); // } //} result = await _userManager.UpdateAsync(user); if ((profile.TimeZone != OldTimeZone) && (OldCulture != user.Language) && (profile.Culture != null) && (profile.TimeZone != null)) { ChangeAll(profile.TimeZone, profile.Culture, 0); Changed = true; } else if ((profile.Culture != null) && (OldCulture != user.Language)) { ChangeCulture(profile.Culture, 0); Changed = true; } else if ((profile.TimeZone != null) && (OldTimeZone != profile.TimeZone)) { ChangeTimeZone(profile.TimeZone, 0); Changed = true; } if (result.Succeeded && profile.NewPassword != null && profile.OldPassword != null) { if (!userbl.DuplicatePassword(ModelState, profile.NewPassword, profile.OldPassword, user.Language)) { return(Json(Models.Utils.ParseFormErrors(ModelState))); } var CorrectoldPass = await _userManager.CheckPasswordAsync(user, profile.OldPassword); if (CorrectoldPass) { result = await _userManager.ChangePasswordAsync(userId, profile.OldPassword, profile.NewPassword); if (result.Errors.Count() > 0) { var ErrList = result.Errors.ToList(); foreach (var item in ErrList) { ModelState.AddModelError("ConfirmPassword", userbl.TranslateError(item, user.Language)); } return(Json(Models.Utils.ParseFormErrors(ModelState))); } } else { ModelState.AddModelError("OldPassword", MsgUtils.Instance.Trls("notOldPassword")); return(Json(Models.Utils.ParseFormErrors(ModelState))); } } else if (result.Succeeded && profile.NewPassword != null) { ModelState.AddModelError("OldPassword", MsgUtils.Instance.Trls("Required") + ";"); return(Json(Models.Utils.ParseFormErrors(ModelState))); } else if (result.Succeeded && profile.OldPassword != null) { ModelState.AddModelError("NewPassword", MsgUtils.Instance.Trls("Required") + ";"); return(Json(Models.Utils.ParseFormErrors(ModelState))); } //Validation if (result.Errors.Count() > 0) { foreach (var error in result.Errors) { ModelState.AddModelError("", error); } } else { //if (user.EmpId != null) //{ // var person = _hrUnitOfWork.Repository<Person>().FirstOrDefault(a => a.Id == user.EmpId); // person.WorkEmail = user.Email; // person.WorkTel = user.PhoneNumber; // _hrUnitOfWork.PeopleRepository.Attach(person); // _hrUnitOfWork.PeopleRepository.Entry(person).State = System.Data.Entity.EntityState.Modified; //} _hrUnitOfWork.SaveChanges(user.Language); if (Changed) { message = "OK," + ((new JavaScriptSerializer()).Serialize(profile)); } return(Json(message)); } } userbl.CheckPasswordStrength(ModelState, User.Identity.GetLanguage()); return(Json(Models.Utils.ParseFormErrors(ModelState))); }
public async Task <ActionResult> UserProfile(UserViewModel model, string Id, int EmpId, OptionsViewModel moreInfo, UserCompaniesVM grid1) { var Errors = new List <Error>(); var _hrUnitOfWork = new HrUnitOfWork(new HrContextFactory(System.Configuration.ConfigurationManager.ConnectionStrings["HrContext"].ConnectionString)); var ServerValidationEnabled = System.Configuration.ConfigurationManager.AppSettings["ServerValidationEnabled"] == "true"; if (ModelState.IsValid) { if (ServerValidationEnabled) { var columns = Models.Utils.GetColumnViews(ModelState.Where(a => !a.Key.Contains('.'))); Errors = _hrUnitOfWork.SiteRepository.CheckForm(new CheckParm { CompanyId = User.Identity.GetDefaultCompany(), ObjectName = "UserProfile", TableName = "AspNetUsers", Columns = columns, Culture = User.Identity.GetLanguage() }); if (Errors.Count() > 0) { foreach (var e in Errors) { foreach (var errorMsg in e.errors) { ModelState.AddModelError(errorMsg.field, errorMsg.message); } } return(Json(Models.Utils.ParseFormErrors(ModelState))); } } var db = HttpContext.GetOwinContext().Get <UserContext>(); var _userManager = HttpContext.GetOwinContext().GetUserManager <ApplicationUserManager>(); //var db = new UserContext(); //var _userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(db)); ApplicationUser user = _userManager.FindById(Id); IdentityResult res; var loginId = User.Identity.GetUserId(); model.Messages = getMessage(model.Culture); //Update User if (user != null) { string OldCulture = user.Language; string OldTimeZone = user.TimeZone; int OldCompany = user.DefaultCompany.Value; AutoMapper(new Models.AutoMapperParm { Destination = user, Source = model, ObjectName = "UserProfile", Options = moreInfo }, _hrUnitOfWork); user.Language = model.Language == null ? "en-GB" : model.Language; user.Messages = getMessage(model.Culture); model.NewUser = false; user.LockoutEnabled = model.LockoutEnabled; if ((user.Id == loginId) && (user.TimeZone != OldTimeZone) && (OldCulture != model.Language) && (user.Language != null) && (user.TimeZone != null)) { ChangeAll(model.TimeZone, model.Language, model.DefaultCompany.Value); } else if ((user.Id == loginId) && (OldCulture != null) && (OldCulture != model.Language)) { ChangeCulture(model.Language, model.DefaultCompany.Value); } else if ((user.Id == loginId) && (OldTimeZone != null) && (OldTimeZone != model.TimeZone)) { ChangeTimeZone(model.TimeZone, model.DefaultCompany.Value); } else if ((user.Id == loginId) && (OldCompany != User.Identity.GetDefaultCompany())) { ChangeDefaultCompany(model.DefaultCompany.Value); } } else //New User { user = new ApplicationUser { UserName = model.UserName, Email = model.Email, LockoutEnabled = model.LockoutEnabled }; model.NewUser = true; } // database transactions //var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled); var trans = db.Database.BeginTransaction(); var status = (model.NewUser == true ? PersonStatus.UserProfile : 0); if (!model.NewUser) { res = await _userManager.UpdateAsync(user); } else { if (model.Password == null) { user.ResetPassword = true; res = await _userManager.CreateAsync(user); } else { res = await _userManager.CreateAsync(user, model.Password); } } moreInfo.VisibleColumns.Remove("Id"); if (res.Errors.Count() > 0) { var err = res.Errors.FirstOrDefault().Split(' ')[0]; if (err == "Passwords") { ModelState.AddModelError("Password", MsgUtils.Instance.Trls("Passwordmustnotlest6")); } else if (err == "User") { ModelState.AddModelError("UserName", MsgUtils.Instance.Trls("Namemustcontaindigitorchar")); } else { ModelState.AddModelError("", MsgUtils.Instance.Trls(res.Errors.FirstOrDefault())); } trans.Rollback(); trans.Dispose(); return(Json(Models.Utils.ParseFormErrors(ModelState))); } if (model.NewUser) { AutoMapper(new Models.AutoMapperParm { Destination = user, Source = model, ObjectName = "UserProfile", Options = moreInfo }, _hrUnitOfWork); user.Messages = getMessage(model.Culture); user.Language = model.Language == null ? "en-GB" : model.Language; user.DefaultCompany = User.Identity.GetDefaultCompany(); user.EmpId = EmpId; model.EmpId = EmpId; model.DefaultCompany = user.DefaultCompany; model.Id = user.Id; } SaveGrid(grid1, ModelState.Where(a => a.Key.Contains("grid1")), user, _hrUnitOfWork, db); try { //if (model.NewUser) //{ // string Message; // SendNotifyLetterMethod(_hrUnitOfWork, user.UserName, EmpId, user.Id, out Message); //} db.SaveChanges(); } catch (Exception ex) { var message = _hrUnitOfWork.HandleDbExceptions(ex); if (message == "Date Already Exists") { message = "UserHaveOnlyRole"; } //scope.Dispose(); trans.Rollback(); trans.Dispose(); return(Json(MsgUtils.Instance.Trls(message))); } trans.Commit(); trans.Dispose(); if (status != PersonStatus.Done) { var person = _hrUnitOfWork.PeopleRepository.GetPerson(model.EmpId); person.Status = PersonStatus.Done; model.Status = PersonStatus.Done; _hrUnitOfWork.SaveChanges(); } return(Json("OK," + ((new JavaScriptSerializer()).Serialize(model)))); } return(Json(Models.Utils.ParseFormErrors(ModelState))); }
public static void ReadNotifications(int CompanyId, int empId, string lang) { HrUnitOfWork unitofwork = new HrUnitOfWork(new HrContextFactory(System.Configuration.ConfigurationManager.ConnectionStrings["HrContext"].ConnectionString)); var conditions = unitofwork.NotificationRepository.ReadNotifications(CompanyId); EmailAccount emailaccount = null; bool modified = false; int counter = 0; holidays = null; if (emailaccount != null && modified) { emailaccount.LastSentDate = DateTime.Now; emailaccount.TodayCount = counter; unitofwork.NotificationRepository.Attach(emailaccount); unitofwork.NotificationRepository.Entry(emailaccount).State = System.Data.Entity.EntityState.Modified; } List <AppendMsgViewModel> SignalRAppend = new List <AppendMsgViewModel>(); foreach (var cond in conditions) { if (string.IsNullOrEmpty(cond.TableName) || string.IsNullOrEmpty(cond.ColumnName)) { continue; // can't get required data } if (string.IsNullOrEmpty(cond.Users) && string.IsNullOrEmpty(cond.CustEmail) && !cond.NotifyRef) { continue; // no one to sent } string[] arr = { "Currencies", "SchedualTasks" }; // prepare sql statement var sql = "SELECT " + cond.ColumnName + (Array.Exists(arr, f => f == cond.TableName) ? "" : ",Id") + (string.IsNullOrEmpty(cond.Fields) ? "" : "," + cond.Fields) + " FROM " + cond.TableName + " WHERE " + (cond.filter == null ? "" : (cond.filter.Replace("\"", "'") + " AND ")) + "CAST( " + cond.ColumnName + " as date )= '" + GetNotificationDate(unitofwork, CompanyId, cond.Event, cond.EventValue).ToString("yyyy-MM-dd") + "'"; // dynamic create datatable var table = GetData(sql); if (table.Rows.Count == 0) { continue; // condition doesn't match records } var employees = new List <int>(); if (cond.NotifyRef) { foreach (DataRow row in table.Rows) { if (row.Table.Columns.Contains("EmpId")) { if (row["EmpId"] != null && row["EmpId"].ToString().Length > 0) { employees.Add(int.Parse(row["EmpId"].ToString())); } } } } IList <UserView> users = GetUsers(cond.Users, employees.ToArray <int>()); if (users == null) // no users to send to { continue; } // create notification for each record foreach (DataRow row in table.Rows) { string m = MessageMerge(cond.Message, unitofwork, table, row, cond.TableName, lang); var notify = new Notification { CompanyId = CompanyId, ConditionId = cond.Id, CreationTime = DateTime.Now, EmpId = GetEmpId(row), RefEmpId = GetEmpId(row), Message = MessageMerge(cond.Message, unitofwork, table, row, cond.TableName, lang), Subject = cond.Subject, SourceId = GetId(row) }; foreach (var u in users.Where(a => a.WebNotify)) { WebMobLog log = new WebMobLog { MarkAsRead = false, Message = notify.Message, Notificat = notify, SentTime = DateTime.Now, SentToUser = u.Name, CompanyId = CompanyId, Subject = notify.Subject }; unitofwork.NotificationRepository.Add(log); } SignalRAppend.Add(new AppendMsgViewModel { User = users.Where(a => a.WebNotify).Select(a => a.Name).ToList(), Notify = notify }); var EmailUsers = users.Where(a => a.EmailNotify).ToList(); if (EmailUsers.Count > 0) { SendEmails(unitofwork.NotificationRepository, EmailUsers, notify, ref emailaccount, ref counter, ref modified); } if (cond.Sms) { SendSms(unitofwork.NotificationRepository, users.Where(a => a.SmsNotify).ToList(), notify); } } } unitofwork.SaveChanges(); foreach (var item in SignalRAppend) { Append(item.User, SignalR(item.Notify, item.Notify.EmpId)); } }