Пример #1
0
        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);
        }
Пример #2
0
 public static SurveyResponse CreateSurveyResponse(this SurveyPersonCampaign campaign, Person recipient, UserResource targetObject = null)
 {
     return(CreateSurveyResponse(campaign.As <SurveyCampaign>(), recipient, targetObject));
 }
Пример #3
0
 public static UserSurveyTask CreateTaskForResponse(this SurveyPersonCampaign campaign, SurveyResponse result)
 {
     return(CreateTaskForResponse(campaign.As <SurveyCampaign>(), result));
 }
Пример #4
0
 public static IEnumerable <UserSurveyTask> Launch(this SurveyPersonCampaign campaign, DateTime?taskDueOn = null,
                                                   UserResource targetObject = null, string taskName = null)
 {
     return(LaunchPersonCampaign(campaign, taskDueOn, targetObject, taskName));
 }