Exemple #1
0
        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));
        }
Exemple #2
0
        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);
        }