/// <summary> /// Imports the achievements from V2 /// </summary> /// <param name="achieveTemplateTable">File w/ achievement template data</param> /// <param name="achievePointTemplateTable">Achievement point template data (to be rolled into achievement)</param> /// <param name="achieveRequirementsTable">Achievement requirement data</param> /// <param name="achieveCaretakerTable">Achievement caretaker data</param> /// <param name="delimiter">Delimiter between data</param> /// <param name="work">The DB access</param> private void ImportAchievements( HttpPostedFileBase achieveTemplateTable, HttpPostedFileBase achievePointTemplateTable, HttpPostedFileBase achieveRequirementsTable, String delimiter, UnitOfWork work) { // Grab the data List<Dictionary<String, String>> achieveData = GetDataFromFile(achieveTemplateTable, delimiter); if (achieveData == null) { ModelState.AddModelError("", "Error with Achievement Template table. Check Debug Output"); return; } List<Dictionary<String, String>> pointData = GetDataFromFile(achievePointTemplateTable, delimiter); if (pointData == null) { ModelState.AddModelError("", "Error with Achievement Point Template table. Check Debug Output"); return; } List<Dictionary<String, String>> reqData = GetDataFromFile(achieveRequirementsTable, delimiter); if (reqData == null) { ModelState.AddModelError("", "Error with Achievement Requirements table. Check Debug Output"); return; } //List<Dictionary<String, String>> caretakerData = GetDataFromFile(achieveCaretakerTable, delimiter); //if (caretakerData == null) //{ // ModelState.AddModelError("", "Error with Achievement Caretaker table. Check Debug Output"); // return; //} // The templates that need to be added List<achievement_template> templatesToAdd = new List<achievement_template>(); // Go through each data row foreach (Dictionary<String, String> row in achieveData) { // Get related users ImportedUser editedBy = _userMap[int.Parse(row["last_modified_by"])]; ImportedUser creator = _userMap[int.Parse(row["creatorID"])]; if (creator == null) continue; // Must have a creator // Grab other info int oldID = int.Parse(row["achievementID"]); int state = (int)JPPConstants.AchievementQuestStates.Active; bool isRetired = Boolean.Parse(row["is_retired"]); if (isRetired) state = (int)JPPConstants.AchievementQuestStates.Retired; int type = (int)JPPConstants.AchievementTypes.Scan; switch (int.Parse(row["type"])) { // 1 - usersubmission case 1: type = (int)JPPConstants.AchievementTypes.UserSubmission; break; // 2 - scan case 2: type = (int)JPPConstants.AchievementTypes.Scan; break; // 3 - system case 3: type = (int)JPPConstants.AchievementTypes.System; break; // 4 - adminassigned case 4: type = (int)JPPConstants.AchievementTypes.AdminAssigned; break; // 5 - threshold case 5: type = (int)JPPConstants.AchievementTypes.Threshold; break; } int? triggerType = null; if (!String.IsNullOrWhiteSpace(row["system_trigger_type"])) { switch (int.Parse(row["system_trigger_type"])) { // TODO: Finalize this default: break; } } // Set up the template achievement_template template = new achievement_template() { id = oldID, // This will get overridden, but necessary for a look-up later content_type = String.IsNullOrWhiteSpace(row["content_type"]) ? (int?)null : int.Parse(row["content_type"]), created_date = DateTime.Parse(row["date_created"]), creator_id = creator.NewID, description = row["description"], featured = Boolean.Parse(row["is_featured"]), hidden = Boolean.Parse(row["is_hidden"]), icon = row["icon"], icon_file_name = "", is_repeatable = Boolean.Parse(row["is_repeatable"]), last_modified_by_id = editedBy == null ? (int?)null : editedBy.NewID, modified_date = DateTime.Parse(row["date_modified"]), parent_id = String.IsNullOrWhiteSpace(row["parentID"]) ? (int?)null : int.Parse(row["parentID"]), posted_date = DateTime.Now, repeat_delay_days = String.IsNullOrWhiteSpace(row["repeat_delay"]) ? (int?)null : int.Parse(row["repeat_delay"]), retire_date = isRetired ? DateTime.Parse(row["date_retired"]) : (DateTime?)null, state = state, system_trigger_type = triggerType, threshold = String.IsNullOrWhiteSpace(row["threshhold"]) ? (int?)null : int.Parse(row["threshhold"]), title = row["title"], type = type, keywords = "" }; // Create imported achievement ImportedEarnable impAchieve = new ImportedEarnable() { UniqueData = template.title, OldID = oldID }; // Add to temporary list templatesToAdd.Add(template); _achievementMap.Add(impAchieve.OldID, impAchieve); } // Loop through points and put in correct achievements foreach (Dictionary<String, String> row in pointData) { int achievementID = int.Parse(row["achievementID"]); int categoryID = int.Parse(row["categoryID"]); int points = int.Parse(row["points"]); achievement_template template = templatesToAdd.Where(t => t.id == achievementID).FirstOrDefault(); if (template == null) continue; // Switch on old category id switch (categoryID) { case 1: template.points_create = points; break; // Create case 2: template.points_learn = points; break; // Learn case 3: template.points_socialize = points; break; // Socialize case 4: template.points_explore = points; break; // Explore } } // Add templates to database try { work.EntityContext.Configuration.AutoDetectChangesEnabled = false; foreach (achievement_template template in templatesToAdd) work.EntityContext.achievement_template.Add(template); } finally { work.EntityContext.Configuration.AutoDetectChangesEnabled = true; } work.SaveChanges(); // Update the map with new ids foreach (ImportedEarnable e in _achievementMap.Values) { e.NewID = (from a in work.EntityContext.achievement_template where a.title == e.UniqueData select a.id).FirstOrDefault(); } // Put in requirements try { // Speed up work.EntityContext.Configuration.AutoDetectChangesEnabled = false; foreach (Dictionary<String, String> row in reqData) { // Get this achievement ImportedEarnable achieve = GetImportedEarnableByOldID(_achievementMap, row["achievementID"]); if (achieve == null || achieve.NewID == 0) continue; work.EntityContext.achievement_requirement.Add(new achievement_requirement() { achievement_id = achieve.NewID, description = row["description"] }); } } finally { work.EntityContext.Configuration.AutoDetectChangesEnabled = true; } work.SaveChanges(); //// Put in caretakers //try //{ // // Speed up // work.EntityContext.Configuration.AutoDetectChangesEnabled = false; // foreach (Dictionary<String, String> row in caretakerData) // { // // Get this achievement and user // ImportedEarnable achieve = GetImportedEarnableByOldID(_achievementMap, row["achievementID"]); // if (achieve == null || achieve.NewID == 0) // continue; // ImportedUser user = GetImportedUserByOldID(row["caretakerID"]); // if (user == null || user.NewID == 0) // continue; // work.EntityContext.achievement_caretaker.Add(new achievement_caretaker() // { // achievement_id = achieve.NewID, // caretaker_id = user.NewID // }); // } //} //finally { work.EntityContext.Configuration.AutoDetectChangesEnabled = true; } //work.SaveChanges(); }
private AchievementInstanceResult CanAwardRepeatableAchievement(achievement_template template, int userID) { achievement_instance lastInstance = _dbContext.achievement_instance.Where(ai => ai.achievement_id == template.id && ai.user_id == userID).ToList().LastOrDefault(); //If lastInstance is null, the user has never gotten this achievement before, so it can be awarded if (lastInstance == null) return AchievementInstanceResult.First; var dateToday = DateTime.Now.Date; var datelastAchievedPlusDelay = lastInstance.achieved_date.Date.AddDays((double)template.repeat_delay_days); //Check if enough days have passed since the last instance was achieved if (dateToday.CompareTo(datelastAchievedPlusDelay) < 0) return AchievementInstanceResult.TooSoon; //Enough time has passed, the achievement can be awarded again. return AchievementInstanceResult.Repeat; }
public void AdminAddAchievement(AddAchievementViewModel model) { //Create the new achievement template from the model achievement_template newAchievement = new achievement_template() { title = model.Title, description = model.Description, icon = model.IconFilePath, icon_file_name = model.Icon, type = model.Type, featured = false, hidden = model.Hidden, is_repeatable = model.IsRepeatable, state = (int)JPPConstants.AchievementQuestStates.Draft, parent_id = model.ParentID, threshold = model.Threshold, creator_id = model.CreatorID, created_date = DateTime.Now, posted_date = null, retire_date = null, modified_date = null, last_modified_by_id = null, content_type = model.ContentType, system_trigger_type = model.SystemTriggerType, repeat_delay_days = model.RepeatDelayDays, points_create = model.PointsCreate, points_explore = model.PointsExplore, points_learn = model.PointsLearn, points_socialize = model.PointsSocialize, keywords = "" }; //Create all the requirements for the achievement to be added to the database List<achievement_requirement> requirementsList = new List<achievement_requirement>(); if (!String.IsNullOrWhiteSpace(model.Requirement1)) requirementsList.Add(new achievement_requirement { achievement_id = newAchievement.id, description = model.Requirement1 }); if (!String.IsNullOrWhiteSpace(model.Requirement2)) requirementsList.Add(new achievement_requirement { achievement_id = newAchievement.id, description = model.Requirement2 }); if (!String.IsNullOrWhiteSpace(model.Requirement3)) requirementsList.Add(new achievement_requirement { achievement_id = newAchievement.id, description = model.Requirement3 }); if (!String.IsNullOrWhiteSpace(model.Requirement4)) requirementsList.Add(new achievement_requirement { achievement_id = newAchievement.id, description = model.Requirement4 }); if (!String.IsNullOrWhiteSpace(model.Requirement5)) requirementsList.Add(new achievement_requirement { achievement_id = newAchievement.id, description = model.Requirement5 }); if (!String.IsNullOrWhiteSpace(model.Requirement6)) requirementsList.Add(new achievement_requirement { achievement_id = newAchievement.id, description = model.Requirement6 }); //Create all the caretakers for the achievement to be added to the database List<achievement_caretaker> caretakersList = new List<achievement_caretaker>(); if (model.SelectedCaretakersList != null) { for (int j = 0; j < model.SelectedCaretakersList.Count; j++) { caretakersList.Add(new achievement_caretaker() { achievement_id = newAchievement.id, caretaker_id = model.SelectedCaretakersList[j] }); } } AddAchievementToDatabase(newAchievement); AddRequirementsToDatabase(requirementsList); AddCaretakersToDatabase(caretakersList); Save(); }
private void AddAchievementToDatabase(achievement_template achievementTemplate) { //add the achievement if (achievementTemplate != null) _dbContext.achievement_template.Add(achievementTemplate); }