private Reward GenerateAReward(IUser user, Random rand)
        {
            
            var now = DateTime.UtcNow.Date;
            var date = RandomDate(rand, now.AddDays(0 - _config.DaysHistory), now);
            var possibleComments = _config.RewardsConfig.PotentialComments;
            var toSkip = rand.Next(0, _possibleAttributes.Count() );
            var toTake = rand.Next(1, _possibleAttributes.Count());
            var reward = new Reward()
            {
  
                Id = IlluminateDatabase.GenerateId<Reward>(),
                Attributes = _possibleAttributes.Skip(toSkip).Take(toTake).ToList(),
                ConsolidatedCompletionDate = date,
                Date = date,
                Message =FormatComment(  possibleComments.ElementAt(rand.Next(0,possibleComments.Count()-1)),user),
                SubjectUser = user.ToSimpleUser(),
                RewardGiver = _config.Users.Where(u=>u.Id!=user.Id).ElementAt(rand.Next(0,_config.Users.Count()-1)).ToSimpleUser(),
                Points = rand.Next(_config.RewardsConfig.MinPoints,_config.RewardsConfig.MaxPoints)
            };

            return reward;
        }
Example #2
0
        public static List<TimelineItem> Create(string message, int points, string subjectUserId, string giverId,
                                                string attributeIds, IDocumentStore store)
        {
            using (var session = store.OpenSession())
            {
                var giver = session.Load<User>(giverId);
                var attributes = new List<Attribute>();
                if (!string.IsNullOrEmpty(attributeIds))
                {
                    //we can have multiple attributes so separate them out and ensure we discard copies
                    
                    attributes = session.Load<Attribute>(attributeIds.Split(',').Distinct()).ToList();
                }

                
                var target = session.Load<User>(subjectUserId);


                var reward = new Reward
                {
                    Id = IlluminateDatabase.GenerateId<Reward>(),
                    Message = message,
                    Points = points,
                    Date = DateTime.UtcNow,
                    RewardGiver = giver.ToSimpleUser(),
                    SubjectUser = target.ToSimpleUser(),
                    Attributes = attributes
                };
                session.Store(reward);
                giver.RewardPointsLeft = giver.RewardPointsLeft - points;
                session.Store(giver);
                session.SaveChanges();
                CreateRewardNotification(reward, session);
                return reward.ToTimelineItems();
            }
        }
Example #3
0
 public static void CreateRewardsForUser(int number,SimpleUser user,IDocumentStore store, int pointsPer,SimpleUser rewardGiver,List<Attribute> attributes)
 {
     using (var session = store.OpenSession())
     {
         for (var i = 0; i < number; i++)
         {
             var reward = new Reward
                          {
                              Id = IlluminateDatabase.GenerateId<Reward>(),
                              Message = "test message",
                              Points = pointsPer,
                              Date = DateTime.Now,
                              SubjectUser = user,
                              RewardGiver = rewardGiver,
                              Attributes = attributes
                          };
             session.Store(reward);
             session.SaveChanges();
         }
         
     }
 }
Example #4
0
        private static void CreateRewardNotification(Reward reward, IDocumentSession session)
        {
            //also send the target an email letting them know
            var notify = new Notification
            {

                Body = Email.GetRewardEmailBody(reward.SubjectUser, reward.RewardGiver, reward.Message, reward.Points),
                SendDate = DateTime.UtcNow,
                Title = string.Format("Congratulations you have got a reward"),
                From = EmailRecipient.GetIlluminateRecipient(),
                NotificationRecipients = new[]
                                                                          {
                                                                              new NotificationRecipient
                                                                                  {

                                                                                      NotificationDeliveryTypes =
                                                                                          
                                                                                          NotificationDeliveryTypes
                                                                                              .Email ,
                                                                                      
                                                                                      Users = new List<SimpleUser>{reward.SubjectUser}

                                                                                  }
                                                                          },
            };
            session.Store(notify);
            session.SaveChanges();
        }