private static IEnumerable <UserSurveyTask> LaunchPersonCampaign(SurveyPersonCampaign campaign, DateTime?taskDueOn, UserResource targetObject, string taskName) { var tasks = new List <UserSurveyTask>(); if (campaign == null) { throw new ArgumentNullException(nameof(campaign)); } var survey = campaign.SurveyForCampaign; if (survey == null) { throw new InvalidCampaignException("Survey person campaign must be part of an existing survey."); } if (!campaign.CampaignPersonRecipients.Any()) { //throw new InvalidCampaignException("Survey person campaign does not have any recipients."); // Bug: #28737 EventLog.Application.WriteWarning("Survey person campaign does not have any recipients. Ignoring launch."); return(Enumerable.Empty <UserSurveyTask>()); } // relaunch is not permitted. if (campaign.CampaignIsLaunched == true) { throw new Exception("Campaign has already been launched."); } campaign = campaign.AsWritable <SurveyPersonCampaign>(); campaign.CampaignIsLaunched = true; campaign.CampaignLaunchedOn = DateTime.UtcNow; foreach (var person in campaign.CampaignPersonRecipients) { var result = campaign.CreateSurveyResponse(person, targetObject); campaign.SurveyResponses.Add(result); var userSurveyTask = campaign.CreateTaskForResponse(result); if (!string.IsNullOrWhiteSpace(taskName)) { userSurveyTask.Name = taskName; } if (taskDueOn != null) { userSurveyTask.UserTaskDueOn = taskDueOn; } result.UserSurveyTaskForResults.Add(userSurveyTask); tasks.Add(userSurveyTask); } campaign.Save(); return(tasks); }
public static SurveyResponse CreateSurveyResponse(this SurveyPersonCampaign campaign, Person recipient, UserResource targetObject = null) { return(CreateSurveyResponse(campaign.As <SurveyCampaign>(), recipient, targetObject)); }
public static UserSurveyTask CreateTaskForResponse(this SurveyPersonCampaign campaign, SurveyResponse result) { return(CreateTaskForResponse(campaign.As <SurveyCampaign>(), result)); }
public static IEnumerable <UserSurveyTask> Launch(this SurveyPersonCampaign campaign, DateTime?taskDueOn = null, UserResource targetObject = null, string taskName = null) { return(LaunchPersonCampaign(campaign, taskDueOn, targetObject, taskName)); }