Пример #1
0
        public static SMSMessageEntity CreateSMSMessage(this ISMSModel smsModel, CultureInfo?forceCultureInfo = null)
        {
            if (smsModel.UntypedEntity == null)
            {
                throw new InvalidOperationException("Entity property not set on SMSModel");
            }

            using (IsolationEntity.Override((smsModel.UntypedEntity as Entity)?.TryIsolation()))
            {
                var smsModelEntity = ToSMSModelEntity(smsModel.GetType());
                var template       = GetDefaultTemplate(smsModelEntity);

                return(SMSLogic.CreateSMSMessage(template.ToLite(), smsModel.UntypedEntity, smsModel, forceCultureInfo));
            }
        }
Пример #2
0
        public static void Start(SchemaBuilder sb)
        {
            if (sb.NotDefined(MethodInfo.GetCurrentMethod()))
            {
                sb.Include <SMSSendPackageEntity>();
                sb.Include <SMSUpdatePackageEntity>();
                SMSLogic.AssertStarted(sb);
                ProcessLogic.AssertStarted(sb);
                ProcessLogic.Register(SMSMessageProcess.Send, new SMSMessageSendProcessAlgortihm());
                ProcessLogic.Register(SMSMessageProcess.UpdateStatus, new SMSMessageUpdateStatusProcessAlgorithm());
                SimpleTaskLogic.Register(SMSMessageTask.UpdateSMSStatus, ctx => UpdateAllSentSMS()?.ToLite());

                new Graph <ProcessEntity> .ConstructFromMany <SMSMessageEntity>(SMSMessageOperation.CreateUpdateStatusPackage)
                {
                    Construct = (messages, _) => UpdateMessages(messages.RetrieveFromListOfLite())
                }

                .Register();

                QueryLogic.Queries.Register(typeof(SMSSendPackageEntity), () =>
                                            from e in Database.Query <SMSSendPackageEntity>()
                                            let p = e.LastProcess()
                                                    select new
                {
                    Entity = e,
                    e.Id,
                    e.Name,
                    NumLines    = e.SMSMessages().Count(),
                    LastProcess = p,
                    NumErrors   = e.SMSMessages().Count(s => s.Exception(p) != null),
                });

                QueryLogic.Queries.Register(typeof(SMSUpdatePackageEntity), () =>
                                            from e in Database.Query <SMSUpdatePackageEntity>()
                                            let p = e.LastProcess()
                                                    select new
                {
                    Entity = e,
                    e.Id,
                    e.Name,
                    NumLines    = e.SMSMessages().Count(),
                    LastProcess = p,
                    NumErrors   = e.SMSMessages().Count(s => s.Exception(p) != null),
                });
            }
        }
Пример #3
0
        public static void Register()
        {
            GetState = m => m.State;

            new ConstructFrom <SMSTemplateEntity>(SMSMessageOperation.CreateSMSFromSMSTemplate)
            {
                CanConstruct = t => !t.Active ? SMSCharactersMessage.TheTemplateMustBeActiveToConstructSMSMessages.NiceToString() : null,
                ToStates     = { SMSMessageState.Created },
                Construct    = (t, args) =>
                {
                    var defaultCulture = SMSLogic.Configuration.DefaultCulture.ToCultureInfo();
                    var ci             = args.TryGetArgC <CultureInfo>() ?? defaultCulture;

                    return(new SMSMessageEntity
                    {
                        Template = t.ToLite(),
                        Message = (t.GetCultureMessage(ci) ?? t.GetCultureMessage(defaultCulture)).Message,
                        From = t.From,
                        EditableMessage = t.EditableMessage,
                        State = SMSMessageState.Created,
                        DestinationNumber = args.TryGetArgC <string>(),
                        Certified = t.Certified
                    });
                }
            }.Register();

            new Execute(SMSMessageOperation.Send)
            {
                AllowsNew  = true,
                Lite       = false,
                FromStates = { SMSMessageState.Created },
                ToStates   = { SMSMessageState.Sent },
                Execute    = (m, _) =>
                {
                    try
                    {
                        SMSLogic.SendSMS(m);
                    }
                    catch (Exception e)
                    {
                        var ex = e.LogException();
                        using (Transaction tr = Transaction.ForceNew())
                        {
                            m.Exception = ex.ToLite();
                            m.Save();
                            tr.Commit();
                        }
                        throw;
                    }
                }
            }.Register();

            new Graph <SMSMessageEntity> .Execute(SMSMessageOperation.UpdateStatus)
            {
                CanExecute = m => m.State != SMSMessageState.Created ? null : SMSCharactersMessage.StatusCanNotBeUpdatedForNonSentMessages.NiceToString(),
                Execute    = (sms, args) =>
                {
                    var func = args.TryGetArgC <Func <SMSMessageEntity, SMSMessageState> >();
                    if (func == null)
                    {
                        func = SMSLogic.Provider.SMSUpdateStatusAction;
                    }

                    sms.State = func(sms);

                    if (sms.UpdatePackage != null)
                    {
                        sms.UpdatePackageProcessed = true;
                    }
                }
            }

            .Register();
        }
Пример #4
0
        public static void SendAsyncSMS(this ISMSModel smsModel, CultureInfo?forceCultureInfo = null)
        {
            var result = smsModel.CreateSMSMessage(forceCultureInfo);

            SMSLogic.SendAsyncSMS(result);
        }
Пример #5
0
        public static void Register()
        {
            GetState = m => m.State;

            new ConstructFrom <SMSTemplateEntity>(SMSMessageOperation.CreateSMSFromTemplate)
            {
                CanConstruct = t => !t.IsActive ? SMSCharactersMessage.TheTemplateMustBeActiveToConstructSMSMessages.NiceToString() : null,
                ToStates     = { SMSMessageState.Created },
                Construct    = (t, args) =>
                {
                    return(SMSLogic.CreateSMSMessage(t.ToLite(),
                                                     args.GetArg <Lite <Entity> >().RetrieveAndRemember(),
                                                     args.TryGetArgC <ISMSModel>(),
                                                     args.TryGetArgC <CultureInfo>()));
                }
            }.Register();

            new Execute(SMSMessageOperation.Send)
            {
                CanBeNew      = true,
                CanBeModified = true,
                FromStates    = { SMSMessageState.Created },
                ToStates      = { SMSMessageState.Sent },
                Execute       = (m, _) =>
                {
                    try
                    {
                        SMSLogic.SendSMS(m);
                    }
                    catch (Exception e)
                    {
                        var ex = e.LogException();
                        using (Transaction tr = Transaction.ForceNew())
                        {
                            m.Exception = ex.ToLite();
                            m.Save();
                            tr.Commit();
                        }
                        throw;
                    }
                }
            }.Register();


            new Graph <SMSMessageEntity> .Execute(SMSMessageOperation.UpdateStatus)
            {
                CanExecute = m => m.State != SMSMessageState.Created ? null : SMSCharactersMessage.StatusCanNotBeUpdatedForNonSentMessages.NiceToString(),
                Execute    = (sms, args) =>
                {
                    var func = args.TryGetArgC <Func <SMSMessageEntity, SMSMessageState> >();
                    if (func == null)
                    {
                        func = SMSLogic.GetProvider().SMSUpdateStatusAction;
                    }

                    sms.State = func(sms);

                    if (sms.UpdatePackage != null)
                    {
                        sms.UpdatePackageProcessed = true;
                    }
                }
            }

            .Register();
        }