Esempio n. 1
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);
        }
Esempio n. 2
0
        public SMSTask RetrySMSTask(int userId, int taskId)
        {
            if (CheckSMSTaskPermission(userId, taskId).Result != PermissionResults.Authorized)
            {
                return(null);
            }
            var task = GetSMSTask(taskId).Include(t => t.SMSJob).Include(t => t.SMSJob.SMSJobCallbacks).FirstOrDefault();

            if (task == null)
            {
                return(null);
            }
            var nowWithBuffer  = DateTime.UtcNow.AddMinutes(-1);
            var scheduledTasks =
                GetSMSJobs(task.SMSJob.FKHotel)
                .SelectMany(
                    j => j.SMSTasks.Where(t => t.Status == SMSTaskStatus.SCHEDULED && t.RunAt > nowWithBuffer)).ToList();

            var hotel   = RootRepository.HotelRepository.GetHotelQuery(task.SMSJob.FKHotel).Include(x => x.HotelDetail.SMSWelcomeRequestType.SMSNumbers).FirstOrDefault();
            var numbers = hotel.HotelDetail.SMSWelcomeRequestType.SMSNumbers.Select(n => n.PhoneNumber).ToList();

            SortedSet <SmsTimeSlot> timeslots = null;
            var timeslot = GetNextAvailableTaskTimeslot(numbers, DateTime.UtcNow, task.Message.Length, scheduledTasks, ref timeslots);

            task.RunAt             = timeslot.Item2;
            task.FromPhone         = timeslot.Item1;
            task.Status            = SMSTaskStatus.SCHEDULED;
            task.StatusMessage     = null;
            task.MessageId         = null;
            task.StatusLastUpdated = DateTime.UtcNow;
            if (task.SMSJob.SMSJobCallbacks.All(x => x.Url != "https://Connect.Monscierge.com/ConnectCMS/Request/NotifyTaskChanged"))
            {
                task.SMSJob.SMSJobCallbacks.Add(new SMSJobCallback {
                    Url = "https://Connect.Monscierge.com/ConnectCMS/Request/NotifyTaskChanged"
                });
            }

            ProxylessContext.LogValidationFailSaveChanges(string.Format("CU|{0}", userId));
            SmsTaskTopicSender.GetHandle().NotifySmsTaskInserted();
            return(task);
        }
Esempio n. 3
0
        public SMSJob CancelSMSJob(int userId, int jobId)
        {
            if (CheckSMSJobPermission(userId, jobId).Result != PermissionResults.Authorized)
            {
                return(null);
            }
            var job   = GetSMSJob(jobId).Include(x => x.SMSTasks);
            var tasks = job.SelectMany(x => x.SMSTasks.Where(t => t.Status == SMSTaskStatus.SCHEDULED)).ToList();

            if (tasks.Count <= 0)
            {
                return(null);
            }
            tasks.ForEach(t =>
            {
                t.Status            = SMSTaskStatus.CANCELLED;
                t.StatusLastUpdated = DateTime.UtcNow;
            });
            ProxylessContext.LogValidationFailSaveChanges(string.Format("CU|{0}", userId));
            SmsTaskTopicSender.GetHandle().NotifySmsTaskInserted();
            return(job.FirstOrDefault());
        }