public JsonNetResult CreateSMSJob(SMSJob job) { var user = ConnectCmsRepository.SecurityRepository.GetLoggedInUser(); if (ConnectCmsRepository.HotelRepository.CheckHotelPermission(user.PKID, job.FKHotel).Result != PermissionResults.Authorized) { return(JsonNet(false, JsonRequestBehavior.AllowGet)); } job.FKCreatedByContactUser = user.PKID; var newJob = ConnectCmsRepository.SmsRepository.SaveSMSJob(job, string.Format("CU|{0}", user.PKID)); return(JsonNet(newJob, JsonRequestBehavior.AllowGet)); }
public SMSJob SaveSMSJob(SMSJob job, string auditUser) { var numbers = Rp.ExecuteAction( () => ProxylessContext.HotelDetails.Where(h => h.PKID == job.FKHotel) .SelectMany(h => h.SMSWelcomeRequestType.SMSNumbers.Select(n => n.PhoneNumber))); SortedSet <SmsTimeSlot> timeslots = null; var taskStart = DateTime.UtcNow.AddMinutes(-1); var tasks = Rp.ExecuteAction(() => ProxylessContext.SMSTasks.Where(x => numbers.Contains(x.FromPhone) && x.RunAt > taskStart && x.Status == SMSTaskStatus.SCHEDULED)).ToList(); var existing = Rp.ExecuteAction(() => ProxylessContext.SMSJobs.Where(x => x.PKID == job.PKID)).FirstOrDefault(); if (existing == null) { job.CreatedOn = DateTime.UtcNow; job.Status = SMSJobStatus.INCOMPLETE; var availableNumbers = numbers.ToList(); job.SMSTasks.ForEach(t => { t.Status = SMSTaskStatus.SCHEDULED; t.Message = t.Message.Replace("{FirstName}", t.FirstName).Replace("{LastName}", t.LastName); var timeslot = GetNextAvailableTaskTimeslot(availableNumbers, t.RunAt.ToUniversalTime(), t.Message.Length, tasks, ref timeslots); t.FromPhone = timeslot.Item1; t.RunAt = timeslot.Item2; t.StatusLastUpdated = DateTime.UtcNow; }); } else { return(null); } if (job.SMSJobCallbacks.All(x => x.Url != "https://Connect.Monscierge.com/ConnectCMS/Request/NotifyTaskChanged")) { job.SMSJobCallbacks.Add(new SMSJobCallback { Url = "https://Connect.Monscierge.com/ConnectCMS/Request/NotifyTaskChanged" }); } ProxylessContext.SMSJobs.Add(job); ProxylessContext.LogValidationFailSaveChanges(string.Format(auditUser)); SmsTaskTopicSender.GetHandle().NotifySmsTaskInserted(); return(job); }