Exemple #1
0
        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);
        }
Exemple #2
0
        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();
            }
        }
Exemple #4
0
        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
            {
            }
        }
Exemple #5
0
        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)));
        }
Exemple #6
0
        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));
            }
        }