Пример #1
0
 private List <Member> GetMembersByDayOfWeekAndHour(List <Member> membersWithoutTimeEntry, DayOfWeek currentDayOfWeek, int currentHour)
 {
     return(membersWithoutTimeEntry
            .Where(member => member.SendEmailDays != null)
            .Where(member => ConverterBitMask.DaysOfWeekIntToListDayOfWeekAdaptive(member.SendEmailDays).Any(memberSendDayOfWeek => memberSendDayOfWeek.DayOfWeek == currentDayOfWeek))
            .Where(member => member.SendEmailTime == currentHour)
            .ToList());
 }
Пример #2
0
 public Member Convert(MemberView source, Member destination, ResolutionContext context)
 {
     return(new Member
     {
         DefaultTaskId = source.DefaultTaskId,
         DefaultProjectId = source.DefaultProjectId,
         FullName = source.FullName,
         DateFormatId = source.DateFormatId,
         WeekStart = (WeekStart)source.WeekStart,
         IsWeeklyTimeEntryUpdatesSend = source.IsWeeklyTimeEntryUpdatesSend,
         SendEmailDays = ConverterBitMask.DayOfWeekStringToInt(source.SendEmailDays),
         SendEmailTime = source.SendEmailTime,
         TimeFormat = source.TimeFormat,
     });
 }
Пример #3
0
        public MemberView PatchNotifications(MemberNotificationView memberNotificationView)
        {
            CheckRelatedEntities(ImpersonatedUserName, out var memberByName);
            memberByName = Uow.MemberRepository.GetQueryByUserName(ImpersonatedUserName);
            memberByName.SendEmailTime = memberNotificationView.SendEmailTime;
            memberByName.SendEmailDays = ConverterBitMask.DayOfWeekStringToInt(memberNotificationView.SendEmailDays);
            memberByName.IsWeeklyTimeEntryUpdatesSend = memberNotificationView.IsWeeklyTimeEntryUpdatesSend;

            Uow.MemberRepository.Update(memberByName);
            Uow.Save();

            Uow.MemberRepository.LinkedCacheClear();

            var urlIcon    = _avatarService.GetUrlIcon(memberByName.Id);
            var memberView = memberByName.GetView(Mapper, urlIcon);

            return(memberView);
        }
Пример #4
0
        public MemberView PatchNotifications(string userName, MemberNotificationView memberNotificationView)
        {
            CheckRelatedEntities(userName, out var memberByName);
            memberByName = Uow.MemberRepository.GetQueryByUserName(userName);
            memberByName.SendEmailTime = memberNotificationView.SendEmailTime;
            memberByName.SendEmailDays = ConverterBitMask.DayOfWeekStringToInt(memberNotificationView.SendEmailDays);
            memberByName.IsWeeklyTimeEntryUpdatesSend = memberNotificationView.IsWeeklyTimeEntryUpdatesSend;

            try
            {
                Uow.MemberRepository.Update(memberByName);
                Uow.Save();

                Uow.MemberRepository.LinkedCacheClear();

                return(memberByName.GetView(Mapper));
            }
            catch (Exception e)
            {
                throw new CoralTimeDangerException("An error occurred while updating member", e);
            }
        }
Пример #5
0
 public MemberView Convert(Member source, MemberView destination, ResolutionContext context)
 {
     return(new MemberView
     {
         UserName = source.User.UserName,
         Email = source.User.Email,
         Id = source.Id,
         IsActive = source.User.IsActive,
         DefaultProjectId = source.DefaultProjectId,
         IsManager = source.User.IsManager,
         IsAdmin = source.User.IsAdmin,
         DefaultTaskId = source.DefaultTaskId,
         FullName = source.FullName,
         IsWeeklyTimeEntryUpdatesSend = source.IsWeeklyTimeEntryUpdatesSend,
         DateFormatId = source.DateFormatId,
         DateFormat = new GetDateFormat().GetDateFormatById(source.DateFormatId),
         SendEmailDays = ConverterBitMask.DayOfWeekIntToString(source.SendEmailDays),
         TimeFormat = source.TimeFormat,
         SendEmailTime = source.SendEmailTime,
         WeekStart = (int)source.WeekStart
     });
 }
Пример #6
0
        public async Task <MemberView> Update(MemberView memberView)
        {
            var memberByName = Uow.MemberRepository.GetQueryByUserName(CurrentUserName);

            if (memberByName == null)
            {
                throw new CoralTimeEntityNotFoundException($"Member with userName {CurrentUserName} not found.");
            }

            if (!memberByName.User.IsActive)
            {
                throw new CoralTimeEntityNotFoundException($"Member with userName {CurrentUserName} is not active.");
            }

            var memberId = memberView.Id;

            if (memberByName.Id != memberId && !memberByName.User.IsAdmin)
            {
                throw new CoralTimeForbiddenException($"Member with userName {CurrentUserName} can't change other user's data.");
            }

            if (!EmailChecker.IsValidEmail(memberView.Email))
            {
                throw new CoralTimeSafeEntityException("Invalid email");
            }

            var member = Uow.MemberRepository.GetQueryByMemberId(memberId);

            if (_isDemo)
            {
                if (member.User.Email != memberView.Email)
                {
                    throw new CoralTimeForbiddenException("Email can't be changed on demo site");
                }
                if (member.User.UserName != memberView.UserName)
                {
                    throw new CoralTimeForbiddenException("Username can't be changed on demo site");
                }
                if (member.User.IsActive != memberView.IsActive)
                {
                    throw new CoralTimeForbiddenException("Status can't be changed on demo site");
                }
                if (member.FullName != memberView.FullName)
                {
                    throw new CoralTimeForbiddenException("Full name can't be changed on demo site");
                }
            }

            if (memberByName.User.IsAdmin)
            {
                var newEmail    = memberView.Email;
                var newUserName = memberView.UserName;
                var newIsActive = memberView.IsActive;
                var newIsAdmin  = memberView.IsAdmin;

                if (member.User.Email != newEmail || member.User.UserName != newUserName || member.User.IsActive != newIsActive || member.User.IsAdmin != newIsAdmin)
                {
                    member.User.Email    = newEmail;
                    member.User.UserName = newUserName;

                    var updateResult = await _userManager.UpdateAsync(member.User);

                    if (updateResult.Succeeded)
                    {
                        var startRole = member.User.IsAdmin ? ApplicationRoleAdmin : ApplicationRoleUser;

                        if (memberId != memberByName.Id)
                        {
                            member.User.IsActive = newIsActive;
                            member.User.IsAdmin  = newIsAdmin;
                        }

                        var finishRole = member.User.IsAdmin ? ApplicationRoleAdmin : ApplicationRoleUser;

                        try
                        {
                            Uow.MemberRepository.Update(member);
                            Uow.Save();

                            if (startRole != finishRole)
                            {
                                await _userManager.RemoveFromRoleAsync(member.User, startRole);

                                await _userManager.AddToRoleAsync(member.User, finishRole);
                            }

                            UpdateUserClaims(member.Id);
                            Uow.MemberRepository.LinkedCacheClear();
                        }
                        catch (Exception e)
                        {
                            throw new CoralTimeDangerException("An error occurred while updating member", e);
                        }
                    }
                    else
                    {
                        CheckMembersErrors(updateResult.Errors.Select(e => new IdentityErrorView
                        {
                            Code        = e.Code,
                            Description = e.Description
                        }));
                    }
                }
            }

            var memberById = Uow.MemberRepository.GetQueryByMemberId(memberId);

            await ChangeEmailByUserAsync(memberById, memberView.Email);

            memberById.FullName                     = memberView.FullName;
            memberById.DefaultProjectId             = memberView.DefaultProjectId;
            memberById.DefaultTaskId                = memberView.DefaultTaskId;
            memberById.DateFormatId                 = memberView.DateFormatId;
            memberById.TimeZone                     = memberView.TimeZone;
            memberById.WeekStart                    = (WeekStart)memberView.WeekStart;
            memberById.IsWeeklyTimeEntryUpdatesSend = memberView.IsWeeklyTimeEntryUpdatesSend;
            memberById.TimeFormat                   = memberView.TimeFormat;
            memberById.SendEmailTime                = memberView.SendEmailTime;
            memberById.SendEmailDays                = ConverterBitMask.DayOfWeekStringToInt(memberView.SendEmailDays);

            try
            {
                Uow.MemberRepository.Update(memberById);

                if (Uow.Save() > 0)
                {
                    UpdateUserClaims(memberById.Id);
                }

                Uow.MemberRepository.LinkedCacheClear();
            }
            catch (Exception e)
            {
                Uow.MemberRepository.LinkedCacheClear();
                throw new CoralTimeDangerException("An error occurred while updating member", e);
            }

            var memberByIdResult = Uow.MemberRepository.LinkedCacheGetById(memberById.Id);
            var result           = memberByIdResult.GetView(Mapper);

            return(result);
        }