Ejemplo n.º 1
0
        public string GenerateSmsFromSchedule(DoSoSmsSchedule schedule, UnitOfWork unitOfWork)
        {
            var objects = SenderHelper.GetMyObjects(schedule.ObjectsCriteria, unitOfWork, schedule.BusinessObjectFullName, false, 10000);

            string exception = string.Empty;

            foreach (var item in objects)
            {
                try
                {
                    var classInfo  = unitOfWork.GetClassInfo(item);
                    var properties = unitOfWork.GetProperties(classInfo);

                    var smsTo = new ExpressionEvaluator(properties, schedule.SmsTo).Evaluate(item).With(x => x.ToString());
                    if (string.IsNullOrEmpty(smsTo))
                    {
                        continue;
                    }

                    var smsText = new ExpressionEvaluator(properties, schedule.SmsText).Evaluate(item).With(x => x.ToString());
                    if (!schedule.AllowUnicodeText)
                    {
                        smsText = SenderHelper.ChangeGeorgianText(smsText);
                    }

                    var key            = classInfo.With(x => x.KeyProperty).With(x => x.GetValue(item)).With(x => x.ToString());
                    var objectTypeName = item.With(x => x.GetType()).With(x => x.FullName);

                    var sameSmsFromDb = unitOfWork.Query <DoSoSms>().Where(x =>
                                                                           x.SmsTo == smsTo &&
                                                                           x.ExpiredOn == null &&
                                                                           x.ObjectKey == key &&
                                                                           x.ObjectTypeName == objectTypeName &&
                                                                           x.DoSoSmsSchedule == schedule);

                    var oldNotSentSms = sameSmsFromDb.Where(x => !x.IsSent && !x.IsCanceled && x.SendingDate < DateTime.Now);

                    foreach (var oldSms in oldNotSentSms)
                    {
                        oldSms.IsCanceled    = true;
                        oldSms.StatusComment = "შეიქმნა ახალი SMS";
                    }

                    var alredySentSms = sameSmsFromDb.FirstOrDefault(x =>
                                                                     x.IsSent &&
                                                                     !x.IsCanceled &&
                                                                     x.SentDate.AddDays(schedule.SkipExecutionDate) > DateTime.Now);

                    if (alredySentSms != null)
                    {
                        continue;
                    }

                    var sms = new DoSoSms(unitOfWork)
                    {
                        SmsTo           = smsTo.With(x => x.Trim()).With(x => x.Replace(" ", "")).Replace("-", "").Replace("_", ""),
                        SmsText         = smsText,
                        ObjectKey       = key,
                        ObjectTypeName  = objectTypeName,
                        DoSoSmsSchedule = schedule,
                        SendingDate     = DateTime.Now
                    };

                    if (!Regex.IsMatch(sms.SmsTo, @"\d"))
                    {
                        sms.IsCanceled    = true;
                        sms.StatusComment = "ტელეფონის ნომერი არასწორ ფორმატშია";
                    }

                    schedule.GetNextExecutionDate();
                    unitOfWork.CommitChanges();
                }
                catch (Exception ex)
                {
                    exception += ex + Environment.NewLine;
                    continue;
                }
            }
            return(exception);
        }
Ejemplo n.º 2
0
        public static DoSoSms GenerateSms(UnitOfWork unitOfWork, object item, string to, string text, bool allowUnicodeText, int skipExecutionDate, DoSoSmsSchedule schedule = null)
        {
            var classInfo  = unitOfWork.GetClassInfo(item);
            var properties = unitOfWork.GetProperties(classInfo);

            var key = classInfo?.KeyProperty?.GetValue(item);

            var obj = unitOfWork.GetObjectByKey(item.GetType(), key);

            var smsTo = new ExpressionEvaluator(properties, to).Evaluate(obj)?.ToString();

            if (string.IsNullOrEmpty(smsTo) || smsTo.Length < 3)
            {
                return(null);
            }

            var smsText = new ExpressionEvaluator(properties, text).Evaluate(obj)?.ToString();

            if (!allowUnicodeText)
            {
                smsText = GeneratorHelper.ChangeGeorgianText(smsText);
            }


            var objectTypeName = obj?.GetType()?.FullName;

            var normalizedSmsTo = smsTo?.Trim()?.Replace(" ", "").Replace("-", "").Replace("_", "");

            var sameSmsFromDb = unitOfWork.Query <DoSoSms>().Where(x =>
                                                                   x.SmsTo == normalizedSmsTo &&
                                                                   x.ExpiredOn == null &&
                                                                   x.ObjectKey == key.ToString() &&
                                                                   x.ObjectTypeName == objectTypeName).ToList();

            var oldNotSentSms = sameSmsFromDb.Where(x => !x.IsSent && !x.IsCanceled && x.SendingDate < DateTime.Now && x.DoSoSmsSchedule == schedule);

            foreach (var oldSms in oldNotSentSms)
            {
                oldSms.IsCanceled    = true;
                oldSms.StatusComment = "შეიქმნა ახალი SMS";
            }

            var alredySentSms = sameSmsFromDb.FirstOrDefault(x =>
                                                             x.IsSent &&
                                                             !x.IsCanceled &&
                                                             x.SentDate.AddDays(skipExecutionDate) > DateTime.Now);

            if (alredySentSms != null)
            {
                return(null);
            }

            var sms = new DoSoSms(unitOfWork)
            {
                SmsTo           = normalizedSmsTo,
                SmsText         = smsText,
                ObjectKey       = key.ToString(),
                ObjectTypeName  = objectTypeName,
                DoSoSmsSchedule = schedule,
                SendingDate     = DateTime.Now
            };

            if (!Regex.IsMatch(sms.SmsTo, @"\d"))
            {
                sms.IsCanceled    = true;
                sms.StatusComment = "ტელეფონის ნომერი არასწორ ფორმატშია";
            }

            return(sms);
        }
Ejemplo n.º 3
0
        public static void Send(DoSoSms smsToSend, UnitOfWork unitOfWork)
        {
            try
            {
                var smsTo = smsToSend.SmsTo.NormalizeTelNumber();

                if (smsToSend.SmsText.Contains("#"))
                {
                    smsToSend.SmsText       = smsToSend.SmsText.Replace("#", "N ");
                    smsToSend.StatusComment = "(# Replaced To  N) ;";
                }

                var smsText = smsToSend.SmsText;
                var url     = string.Format(HS.SmsBaseUrl, HS.SmsClientID, smsTo, HS.SmsSenderName, smsText);

                //http://smsoffice.ge/api/send.aspx?key={0}&destination={1}&sender={2}&content={3}
                //http://smsoffice.ge/api/send.aspx?key=123456&destination=995577123456&sender=smsoffice&content=TestMessage

                var request = HttpWebRequest.Create(url);
                if (request == null)
                {
                    throw new Exception("SmsSender ->> HttpWebRequest Is Null");
                }

                request.Proxy = null;

                using (var response = request.GetResponse())
                {
                    if (response == null)
                    {
                        throw new Exception("SmsSender ->> Response Is Null");
                    }

                    using (var reader = new StreamReader(response.GetResponseStream()))
                    {
                        if (reader == null)
                        {
                            throw new Exception("SmsSender - Reader Is Null");
                        }

                        var urlText = reader.ReadToEnd();

                        if (urlText?.ToLower()?.Trim() == HS.SmsSuccessCode?.ToLower()?.Trim())
                        {
                            smsToSend.Status   = MessageStatusEnum.Sent;
                            smsToSend.SentDate = DateTime.Now;
                        }
                        else
                        {
                            smsToSend.CancelMessage(string.Format($"Error Code {urlText}  Date - {DateTime.Now}"), MessageStatusEnum.CancelledByService);
                        }
                    }
                }

                unitOfWork.CommitChanges();
            }
            catch (Exception ex)
            {
                smsToSend.CancelMessage($"Exception Was Thrown. See Exception log ({DateTime.Now})", MessageStatusEnum.CancelledByService);
                HS.CreateExceptionLog(ex.Message, ex.ToString(), 5);
            }
        }