Пример #1
0
        public void NotifyRejectedKudosLogSender(KudosLog kudosLog)
        {
            var emailRecipient = _usersDbSet.SingleOrDefault(user => user.Id == kudosLog.CreatedBy);

            if (emailRecipient == null)
            {
                return;
            }

            var organizationName            = GetOrganizationName(kudosLog.OrganizationId).ShortName;
            var subject                     = Resources.Models.Kudos.Kudos.RejectedKudosEmailSubject;
            var userNotificationSettingsUrl = _appSettings.UserNotificationSettingsUrl(organizationName);
            var kudosProfileUrl             = _appSettings.KudosProfileUrl(organizationName, kudosLog.CreatedBy);

            var emailTemplateViewModel = new KudosRejectedEmailTemplateViewModel(
                userNotificationSettingsUrl,
                kudosLog.Employee.FullName,
                kudosLog.Points,
                kudosLog.KudosTypeName,
                kudosLog.Comments,
                kudosLog.RejectionMessage,
                kudosProfileUrl);
            var body = _mailTemplate.Generate(emailTemplateViewModel, EmailTemplateCacheKeys.KudosRejected);

            _mailingService.SendEmail(new EmailDto(emailRecipient.Email, subject, body));
        }
        private async Task SetWelcomeKudosAsync(ApplicationUser applicationUser)
        {
            var welcomeKudosDto = await _kudosService.GetWelcomeKudosAsync();

            if (welcomeKudosDto.WelcomeKudosAmount <= 0)
            {
                return;
            }

            var welcomeKudos = new KudosLog
            {
                EmployeeId      = applicationUser.Id,
                OrganizationId  = applicationUser.OrganizationId,
                Comments        = welcomeKudosDto.WelcomeKudosComment,
                Points          = welcomeKudosDto.WelcomeKudosAmount,
                Created         = DateTime.UtcNow,
                Modified        = DateTime.UtcNow,
                Status          = KudosStatus.Pending,
                MultiplyBy      = 1,
                KudosSystemType = KudosTypeEnum.Welcome,
                KudosTypeValue  = Convert.ToDecimal(KudosTypeEnum.Welcome),
                KudosTypeName   = KudosTypeEnum.Welcome.ToString()
            };

            _uow.GetDbSet <KudosLog>().Add(welcomeKudos);
        }
Пример #3
0
        public void Approve_SenderCannotApproveKudos()
        {
            var log = new KudosLog
            {
                CreatedBy = Guid.NewGuid().ToString()
            };

            Assert.Throws <ValidationException>(() => log.Approve(_userId));
        }
Пример #4
0
        public void Approve_LogAlreadyProcessed()
        {
            var log = new KudosLog
            {
                Status = KudosStatus.Rejected
            };

            Assert.Throws <ValidationException>(() => log.Approve(_userId));
        }
Пример #5
0
        public void IsRecipientDeleted_WhenNoEmployeeIsPulledFromDb()
        {
            var log = new KudosLog
            {
                EmployeeId = Guid.NewGuid().ToString()
            };

            Assert.That(log.IsRecipientDeleted(), Is.True);
        }
        public KudosLog CreateLoyaltyKudosLog(ApplicationUser recipient, KudosType loyaltyKudosType, int organizationId, int[] kudosYearlyMultipliers, int yearOfEmployment)
        {
            if (yearOfEmployment <= 0)
            {
                throw new ArgumentException("Invalid argument", nameof(yearOfEmployment));
            }

            if (organizationId <= 0)
            {
                throw new ArgumentException("Invalid argument", nameof(organizationId));
            }

            if (recipient == null)
            {
                throw new ArgumentNullException(nameof(recipient));
            }

            if (loyaltyKudosType == null)
            {
                throw new ArgumentNullException(nameof(loyaltyKudosType));
            }

            if (kudosYearlyMultipliers == null || kudosYearlyMultipliers.Length == 0)
            {
                throw new ArgumentException("Invalid argument", nameof(kudosYearlyMultipliers));
            }

            var timestamp = DateTime.UtcNow;
            var yearlyLoyaltyKudosMultiplier = CalculateYearlyMultiplier(yearOfEmployment, kudosYearlyMultipliers);

            if (yearlyLoyaltyKudosMultiplier == 0)
            {
                return(null);
            }

            var loyaltyLog = new KudosLog
            {
                Modified       = timestamp,
                CreatedBy      = LoyaltyKudosBotName,
                Comments       = CreateLoyaltyKudosComment(yearOfEmployment),
                EmployeeId     = recipient.Id,
                KudosTypeName  = loyaltyKudosType.Name,
                KudosTypeValue = loyaltyKudosType.Value,
                MultiplyBy     = yearlyLoyaltyKudosMultiplier,
                Points         = yearlyLoyaltyKudosMultiplier * loyaltyKudosType.Value,
                Status         = KudosStatus.Approved,
                OrganizationId = organizationId
            };

            if (recipient.EmploymentDate.HasValue)
            {
                loyaltyLog.Created = recipient.EmploymentDate.Value.AddYears(yearOfEmployment);
            }

            recipient.ReceiveKudos(loyaltyLog);
            return(loyaltyLog);
        }
Пример #7
0
        public void Reject_LogAlreadyProcessed()
        {
            var log = new KudosLog
            {
                Status = KudosStatus.Approved
            };

            Assert.Throws <ValidationException>(() => log.Reject(_userId, "reason"));
        }
Пример #8
0
        public void Approve_SenderCannotSendKudosToSelf()
        {
            var log = new KudosLog
            {
                EmployeeId = _userId
            };

            Assert.Throws <ValidationException>(() => log.Approve(_userId));
        }
Пример #9
0
        public void Approve_ApprovesAndSetsModifiedAttributes()
        {
            var log = new KudosLog
            {
                Status     = KudosStatus.Pending,
                EmployeeId = Guid.NewGuid().ToString(),
                CreatedBy  = Guid.NewGuid().ToString()
            };

            log.Approve(_userId);

            Assert.That(log.Status, Is.EqualTo(KudosStatus.Approved));
            Assert.That(log.ModifiedBy, Is.EqualTo(_userId));
            Assert.That(log.Modified, Is.InRange(DateTime.UtcNow.AddSeconds(-10), DateTime.UtcNow.AddSeconds(10)));
        }
Пример #10
0
        public void Reject_RejectsAndSetsModifiedAttributes()
        {
            var log = new KudosLog
            {
                Status     = KudosStatus.Pending,
                EmployeeId = Guid.NewGuid().ToString(),
                CreatedBy  = Guid.NewGuid().ToString()
            };

            log.Reject(_userId, "reason");

            Assert.That(log.Status, Is.EqualTo(KudosStatus.Rejected));
            Assert.That(log.RejectionMessage, Is.EqualTo("reason"));
            Assert.That(log.ModifiedBy, Is.EqualTo(_userId));
            Assert.That(log.Modified, Is.InRange(DateTime.UtcNow.AddSeconds(-10), DateTime.UtcNow.AddSeconds(10)));
        }
Пример #11
0
        public void NotifyApprovedKudosRecipient(KudosLog kudosLog)
        {
            var organizationName            = GetOrganizationName(kudosLog.OrganizationId).ShortName;
            var sendingUserFullName         = GetUserFullName(kudosLog.CreatedBy);
            var userNotificationSettingsUrl = _appSettings.UserNotificationSettingsUrl(organizationName);
            var kudosProfileUrl             = _appSettings.KudosProfileUrl(organizationName, kudosLog.EmployeeId);
            var subject = Resources.Models.Kudos.Kudos.EmailSubject;

            var emailTemplateViewModel = new KudosReceivedDecreasedEmailTemplateViewModel(
                userNotificationSettingsUrl,
                kudosLog.Points,
                kudosLog.KudosTypeName,
                sendingUserFullName == null ? ConstBusinessLayer.DeletedUserName : sendingUserFullName,
                kudosLog.Comments,
                kudosProfileUrl);
            var body = _mailTemplate.Generate(emailTemplateViewModel, EmailTemplateCacheKeys.KudosReceived);

            _mailingService.SendEmail(new EmailDto(kudosLog.Employee.Email, subject, body));
        }
        public async Task NotifyApprovedKudosDecreaseRecipientAsync(KudosLog kudosLog)
        {
            var organizationName    = (await GetOrganizationNameAsync(kudosLog.OrganizationId)).ShortName;
            var sendingUserFullName = await GetUserFullNameAsync(kudosLog.CreatedBy);

            var userNotificationSettingsUrl = _appSettings.UserNotificationSettingsUrl(organizationName);
            var kudosProfileUrl             = _appSettings.KudosProfileUrl(organizationName, kudosLog.EmployeeId);
            var subject = Resources.Models.Kudos.Kudos.MinusKudosEmailSubject;

            var emailTemplateViewModel = new KudosReceivedDecreasedEmailTemplateViewModel(userNotificationSettingsUrl,
                                                                                          kudosLog.Points,
                                                                                          kudosLog.KudosTypeName,
                                                                                          sendingUserFullName ?? BusinessLayerConstants.DeletedUserName,
                                                                                          kudosLog.Comments,
                                                                                          kudosProfileUrl);

            var body = _mailTemplate.Generate(emailTemplateViewModel, EmailTemplateCacheKeys.KudosDecreased);

            await _mailingService.SendEmailAsync(new EmailDto(kudosLog.Employee.Email, subject, body));
        }
Пример #13
0
        private static KudosLog CreateKudosLogForBasket(KudosBasketDonationDto donation, KudosType kudosType, string logComment, string userId)
        {
            var timestamp = DateTime.UtcNow;
            var kudosLog  = new KudosLog
            {
                Created         = timestamp,
                Modified        = timestamp,
                CreatedBy       = donation.UserId,
                Points          = donation.DonationAmount,
                EmployeeId      = userId,
                MultiplyBy      = KudosMultiplier,
                Status          = KudosStatus.Approved,
                Comments        = logComment,
                OrganizationId  = donation.OrganizationId,
                KudosTypeName   = kudosType.Name,
                KudosTypeValue  = kudosType.Value,
                KudosSystemType = kudosType.Type
            };

            return(kudosLog);
        }
Пример #14
0
        private void InsertKudosLog(AddKudosDTO kudosDTO, KudosStatus status)
        {
            var log = new KudosLog
            {
                CreatedBy       = kudosDTO.KudosLog.UserId,
                EmployeeId      = kudosDTO.ReceivingUser.Id,
                ModifiedBy      = kudosDTO.KudosLog.UserId,
                MultiplyBy      = kudosDTO.KudosLog.MultiplyBy,
                KudosTypeName   = kudosDTO.KudosType.Name,
                KudosTypeValue  = kudosDTO.KudosType.Value,
                KudosSystemType = kudosDTO.KudosType.Type,
                Status          = status,
                Comments        = kudosDTO.KudosLog.Comment,
                Created         = DateTime.UtcNow,
                Modified        = DateTime.UtcNow,
                OrganizationId  = kudosDTO.KudosLog.OrganizationId,
                Points          = kudosDTO.TotalKudosPointsInLog,
                PictureId       = kudosDTO.PictureId
            };

            _kudosLogsDbSet.Add(log);
        }
Пример #15
0
        private void SetWelcomeKudos(ApplicationUser applicationUser)
        {
            var welcomeKudosDTO = _kudosService.GetWelcomeKudos();

            if (welcomeKudosDTO.WelcomeKudosAmount > 0)
            {
                KudosLog welcomeKudos = new KudosLog
                {
                    EmployeeId      = applicationUser.Id,
                    OrganizationId  = applicationUser.OrganizationId,
                    Comments        = welcomeKudosDTO.WelcomeKudosComment,
                    Points          = welcomeKudosDTO.WelcomeKudosAmount,
                    Created         = DateTime.UtcNow,
                    Modified        = DateTime.UtcNow,
                    Status          = KudosStatus.Pending,
                    MultiplyBy      = 1,
                    KudosSystemType = ConstBusinessLayer.KudosTypeEnum.Welcome,
                    KudosTypeValue  = (short)ConstBusinessLayer.KudosTypeEnum.Welcome,
                    KudosTypeName   = ConstBusinessLayer.KudosTypeEnum.Welcome.ToString()
                };

                _uow.GetDbSet <KudosLog>().Add(welcomeKudos);
            }
        }
Пример #16
0
        private void SetWelcomeKudos(ApplicationUser applicationUser)
        {
            var organizationDb = _organizationService.GetOrganizationById(applicationUser.OrganizationId);

            if (organizationDb.KudosWelcomeEnabled)
            {
                KudosLog welcomeKudos = new KudosLog
                {
                    EmployeeId      = applicationUser.Id,
                    OrganizationId  = applicationUser.OrganizationId,
                    Comments        = organizationDb.KudosWelcomeComment,
                    Points          = organizationDb.KudosWelcomeAmount,
                    Created         = DateTime.UtcNow,
                    Modified        = DateTime.UtcNow,
                    Status          = KudosStatus.Pending,
                    MultiplyBy      = 1,
                    KudosSystemType = ConstBusinessLayer.KudosTypeEnum.Other,
                    KudosTypeValue  = (short)ConstBusinessLayer.KudosTypeEnum.Other,
                    KudosTypeName   = ConstBusinessLayer.KudosTypeEnum.Other.ToString()
                };

                _uow.GetDbSet <KudosLog>().Add(welcomeKudos);
            }
        }
Пример #17
0
 public void ReceiveKudos(KudosLog log)
 {
     RemainingKudos += log.Points;
     TotalKudos     += log.Points;
     Modified        = DateTime.UtcNow;
 }
Пример #18
0
        public void Reject_ReasonMessageIsEmpty()
        {
            var log = new KudosLog();

            Assert.Throws <ValidationException>(() => log.Reject(_userId, string.Empty));
        }
Пример #19
0
        public void Reject_UserIsEmpty()
        {
            var log = new KudosLog();

            Assert.Throws <ValidationException>(() => log.Reject(string.Empty, "not_empty"));
        }
Пример #20
0
        public void Approve_UserIsEmpty()
        {
            var log = new KudosLog();

            Assert.Throws <ValidationException>(() => log.Approve(string.Empty));
        }