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)); } }
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), }); } }
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(); }
public static void SendAsyncSMS(this ISMSModel smsModel, CultureInfo?forceCultureInfo = null) { var result = smsModel.CreateSMSMessage(forceCultureInfo); SMSLogic.SendAsyncSMS(result); }
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(); }