상속: CoordinatorTypeModel
 public TrickleSmsAndEmailBetweenSetTimes MapToTrickleSmsAndEmailOverPeriod(Guid trickleId, string customerContactsId, CoordinatorSmsAndEmailModel model, string username)
 {
     var mapToTrickleSmsAndEmailOverPeriod = new TrickleSmsAndEmailBetweenSetTimes
         {
             ConfirmationEmails = new List<string> {model.ConfirmationEmail },
             CoordinatorId = trickleId,
             MetaData = new SmsMetaData { Topic = model.Topic, Tags = model.GetTagList() },
             StartTimeUtc = DateTimeOlsenMapping.DateTimeWithOlsenZoneToUtc(model.StartTime, model.UserTimeZone),
             Duration = model.SendAllBy.Value.Subtract(model.StartTime),
             EmailData = new EmailData
                 {
                     BodyHtml = model.EmailHtmlContent,
                     FromAddress = "*****@*****.**", // TODO: Get from details from config??
                     BodyText = string.Empty,
                     FromDisplayName = "Sam Jeffress Test",
                     ReplyToAddress = "*****@*****.**",
                     Subject = "test"
                 },
             UserOlsenTimeZone = model.UserTimeZone,
             Username = username,
             SmsAndEmailDataId = customerContactsId,
             SmsMessage = model.SmsContent
         };
     return mapToTrickleSmsAndEmailOverPeriod;
 }
        public ActionResult Create(CoordinatorSmsAndEmailModel model)
        {
            var trickleId = Guid.NewGuid();
            Session.Add("CoordinatorSmsAndEmailModel", model);
            Session.Add("trickleId", trickleId.ToString());
            var hpf = Request.Files[0];
            if (hpf.ContentLength == 0)
                throw new ArgumentException("no content");

            var csvFileContents = new CsvFileContents();
            using (var csvReader = new CsvHelper.CsvReader(new StreamReader(hpf.InputStream), new CsvConfiguration { HasHeaderRecord = false }))
            {
                // TODO : Not reading first row properly
                while (csvReader.Read())
                {
                    csvFileContents.Rows.Add(csvReader.CurrentRecord);
                }
            }

            var fileContentsId = trickleId.ToString() + "_fileContents";
            using (var session = Raven.GetStore().OpenSession())
            {
                session.Store(csvFileContents, fileContentsId);
                session.SaveChanges();
            }

            var dataColumnPicker = new DataColumnPicker {TrickleId = trickleId, FirstRowIsHeader = true};

            if (!string.IsNullOrWhiteSpace(model.TemplateName))
            {
                using (var session = Raven.GetStore().OpenSession("Configuration"))
                {
                    var communicationTemplate = session.Load<CommunicationTemplate>(model.TemplateName);
                    if (communicationTemplate.TemplateVariables  != null)
                        communicationTemplate.TemplateVariables.ForEach(t => dataColumnPicker.TemplateVariableColumns.Add(t.VariableName, null));
                }
            }

            var dropDownList = csvFileContents.CreateSelectList();
            ViewData.Add("selectListData", dropDownList);
            return View("CreateSmsAndEmailPickRows", dataColumnPicker);
        }