// points = 100 // reason = PointAwardReason.MiniGameCompletion // MGID = Mini Game ID, if the reason is MiniGameCompletion, else 0 // // // returns: a string based list of the badges they earned, or an empty string public string AwardPointsToPatron(int points, PointAwardReason reason, // Minigame int MGID = 0, // reading ActivityType readingActivity = ActivityType.Pages, int readingAmount = 0, string author= "", string title= "", string review= "", // event string eventCode= "", int eventID = 0, // book List int bookListID = 0, DateTime? forceDate = null ) { if(forceDate != null) now = (DateTime)forceDate; string retValue= string.Empty; #region Reading - Log to PatronReadingLog PatronReadingLog rl = null; if(reason == PointAwardReason.Reading) { rl = new PatronReadingLog { PID = patron.PID, ReadingType = (int)readingActivity, ReadingTypeLabel = (readingActivity).ToString(), ReadingAmount = readingAmount, ReadingPoints = points, LoggingDate = FormatHelper.ToNormalDate(now), Author = author.Trim(), Title = title.Trim(), HasReview = (review.Trim().Length > 0), ReviewID = 0 }; rl.Insert(); // If there is a review, record the review if(review.Trim().Length > 0) { var r = new PatronReview { PID = patron.PID, PRLID = rl.PRLID, Author = rl.Author, Title = rl.Title, Review = review.Trim(), isApproved = false }; r.Insert(); rl.ReviewID = r.PRID; rl.Update(); HttpContext.Current.Session["LastPRID"] = r.PRID; } } #endregion #region Award PatronPoints var pp = new PatronPoints { PID = patron.PID, NumPoints = points, AwardDate = now, AwardReasonCd = (int)reason, AwardReason = PatronPoints.PointAwardReasonCdToDescription(reason), BadgeAwardedFlag = false, isReading = (reason == PointAwardReason.Reading), isEvent = (reason == PointAwardReason.EventAttendance), isGameLevelActivity = (reason == PointAwardReason.MiniGameCompletion), isBookList = (reason == PointAwardReason.BookListCompletion), isGame = false, GameLevelActivityID = MGID, EventCode = eventCode, EventID = eventID, BookListID = bookListID, LogID = (rl == null ? 0 : rl.PRLID) }; pp.Insert(); var badgeAwarded = false; int badgeToAward = 0; // <=========== DAL.Minigame mg = null; if(reason == PointAwardReason.MiniGameCompletion) { mg = DAL.Minigame.FetchObject(MGID); badgeAwarded = mg.AwardedBadgeID > 0; badgeToAward = mg.AwardedBadgeID; } if(reason == PointAwardReason.EventAttendance) { var evt = Event.GetEvent(eventID); badgeAwarded = evt == null ? false : evt.BadgeID > 0; badgeToAward = evt == null ? 0 : evt.BadgeID; } if(reason == PointAwardReason.BookListCompletion) { var bl = BookList.FetchObject(bookListID); ; badgeAwarded = (bl.AwardBadgeID > 0); badgeToAward = bl.AwardBadgeID; } DataSet pbds = null; if(badgeAwarded) { if(AwardBadgeToPatron(badgeToAward, patron, ref EarnedBadges)) { if(pp.PPID != 0) { pp.BadgeAwardedFlag = true; pp.BadgeID = badgeToAward; pp.Update(); } } } #endregion #region If jumped level, award another badge(s) // since thay just earned points, check if they also advanced a level in the board game (if there is a board game for the program) EndingPoints = PatronPoints.GetTotalPatronPoints(patron.PID); EarnedBadge = null; var earnedBadges2 = new List<Badge>(); EarnedBadge = TallyPoints(patron, pgm, StartingPoints, EndingPoints, ref earnedBadges2); pbds = PatronBadges.GetAll(patron.PID); foreach(var badge in earnedBadges2) { EarnedBadge = badge; if(EarnedBadge != null) { AwardBadgeToPatron(EarnedBadge.BID, patron, ref EarnedBadges); } } #endregion #region Check and give awards if any AwardBadgeToPatronViaMatchingAwards(patron, ref EarnedBadges); #endregion #region Prepare return code // did they earn one or more badges? if(EarnedBadges.Count > 0) { retValue = string.Join("|", EarnedBadges.Select(b => b.BID).Distinct()); } #endregion return retValue; }