public static UserSurveyTask CreateTaskForResponse(this SurveyTargetCampaign campaign, SurveyResponse result) { var task = CreateTaskForResponse(campaign.As <SurveyCampaign>(), result); task.UserSurveyTaskAllowTargetEdit = false; return(task); }
public static IEnumerable <UserSurveyTask> Launch(this SurveyTargetCampaign campaign, DateTime?taskDueOn = null, string taskName = null) { return(LaunchTargetCampaign(campaign, taskDueOn, taskName)); }
public static SurveyResponse CreateSurveyResponse(this SurveyTargetCampaign campaign, Person recipient, UserResource targetObject = null) { return(CreateSurveyResponse(campaign.As <SurveyCampaign>(), recipient, targetObject)); }
private static IEnumerable <UserSurveyTask> LaunchTargetCampaign(SurveyTargetCampaign campaign, DateTime?taskDueOn, 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 target campaign must be part of an existing survey."); } if (!campaign.CampaignTargetTargets.Any()) { //throw new InvalidCampaignException("Survey target campaign does not have any targets."); // Bug: #28737 EventLog.Application.WriteWarning("Survey target campaign does not have any targets. Ignoring launch."); return(Enumerable.Empty <UserSurveyTask>()); } if (campaign.CampaignTargetRelationship == null) { throw new InvalidCampaignException("Survey target campaign does not provide a relationship to survey taker."); } // relaunch is not permitted. if (campaign.CampaignIsLaunched == true) { throw new Exception("Campaign has already been launched."); } campaign = campaign.AsWritable <SurveyTargetCampaign>(); campaign.CampaignIsLaunched = true; campaign.CampaignLaunchedOn = DateTime.UtcNow; foreach (var target in campaign.CampaignTargetTargets) { var direction = campaign.CampaignTargetRelationshipDirection_Enum == DirectionEnum_Enumeration.Reverse ? Direction.Reverse : Direction.Forward; var recipients = target.GetRelationships <Person>(new EntityRef(campaign.CampaignTargetRelationship), direction).ToList(); foreach (var recipient in recipients) { var result = campaign.CreateSurveyResponse(recipient, target); 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); }