public static void RegisterSMSOwnerData <T>(Expression <Func <T, SMSOwnerData> > phoneExpression) where T : Entity { new Graph <ProcessEntity> .ConstructFromMany <T>(SMSMessageOperation.SendMultipleSMSMessages) { Construct = (providers, args) => { var sMSOwnerDatas = Database.Query <T>().Where(p => providers.Contains(p.ToLite())) .Select(pr => phoneExpression.Evaluate(pr)) .AsEnumerable().NotNull().Distinct().ToList(); MultipleSMSModel model = args.GetArg <MultipleSMSModel>(); IntegrityCheck?ic = model.IntegrityCheck(); if (!model.Message.HasText()) { throw new ApplicationException("The text for the SMS message has not been set"); } var owners = (from od in sMSOwnerDatas from n in od.TelephoneNumber.SplitNoEmpty(",") select new { TelephoneNumber = n, SMSOwnerData = od }); if (!owners.Any()) { return(null); } SMSSendPackageEntity package = new SMSSendPackageEntity().Save(); var packLite = package.ToLite(); using (OperationLogic.AllowSave <SMSMessageEntity>()) { owners.Select(o => new SMSMessageEntity { DestinationNumber = o.TelephoneNumber, SendPackage = packLite, Referred = o.SMSOwnerData.Owner, Message = model.Message, From = model.From, Certified = model.Certified, State = SMSMessageState.Created, }).SaveList(); } var process = ProcessLogic.Create(SMSMessageProcess.Send, package); process.Execute(ProcessOperation.Execute); return(process); } } .Register(); }
public static void RegisterPhoneNumberProvider <T>(Expression <Func <T, string> > phoneExpression, Expression <Func <T, CultureInfo> > cultureExpression) where T : Entity { phoneNumberProviders[typeof(T)] = phoneExpression; cultureProviders[typeof(T)] = cultureExpression; new Graph <ProcessEntity> .ConstructFromMany <T>(SMSMessageOperation.SendSMSMessages) { Construct = (providers, args) => { var numbers = Database.Query <T>().Where(p => providers.Contains(p.ToLite())) .Select(pr => new { Exp = phoneExpression.Evaluate(pr), Referred = pr.ToLite() }).AsEnumerable().NotNull().Distinct().ToList(); var splitNumbers = (from p in numbers.Where(p => p.Exp.Contains(',')) from n in p.Exp.Split('n') select new { Exp = n.Trim(), p.Referred }).Concat(numbers.Where(p => !p.Exp.Contains(','))).Distinct().ToList(); numbers = splitNumbers; MultipleSMSModel model = args.GetArg <MultipleSMSModel>(); IntegrityCheck ic = model.IntegrityCheck(); if (!model.Message.HasText()) { throw new ApplicationException("The text for the SMS message has not been set"); } SMSSendPackageEntity package = new SMSSendPackageEntity().Save(); var packLite = package.ToLite(); using (OperationLogic.AllowSave <SMSMessageEntity>()) numbers.Select(n => new SMSMessageEntity { DestinationNumber = n.Exp, SendPackage = packLite, Referred = n.Referred, Message = model.Message, From = model.From, Certified = model.Certified, State = SMSMessageState.Created, }).SaveList(); var process = ProcessLogic.Create(SMSMessageProcess.Send, package); process.Execute(ProcessOperation.Execute); return(process); } } .Register(); }
public static void Start() { if (Navigator.Manager.NotDefined(MethodInfo.GetCurrentMethod())) { Navigator.AddSettings(new List <EntitySettings> { new EntitySettings <SMSMessageEntity> { View = e => new SMSMessage(), Icon = ExtensionsImageLoader.GetImageSortName("sms.png") }, new EntitySettings <SMSTemplateEntity> { View = e => new SMSTemplate(), Icon = ExtensionsImageLoader.GetImageSortName("smstemplate.png") }, new EmbeddedEntitySettings <SMSTemplateMessageEmbedded>() { View = e => new Signum.Windows.SMS.SMSTemplateMessage() }, new EntitySettings <SMSSendPackageEntity> { View = e => new SMSSendPackage(), Icon = ExtensionsImageLoader.GetImageSortName("package.png") }, new EntitySettings <SMSUpdatePackageEntity> { View = e => new SMSUpdatePackage(), Icon = ExtensionsImageLoader.GetImageSortName("package.png") }, new ModelEntitySettings <MultipleSMSModel> { View = e => new MultipleSMS(), Icon = ExtensionsImageLoader.GetImageSortName("package.png") }, }); OperationClient.AddSetting(new EntityOperationSettings <Entity>(SMSMessageOperation.CreateSMSWithTemplateFromEntity) { Click = FindAssociatedTemplates }); OperationClient.AddSetting(new ContextualOperationSettings <Entity>(SMSMessageOperation.SendSMSMessages) { Click = coc => { MultipleSMSModel model = Navigator.View(new MultipleSMSModel()); if (model == null) { return; } var result = new ConstructorContext(coc.SearchControl, coc.OperationInfo).SurroundConstruct(ctx => Server.Return((IOperationServer s) => s.ConstructFromMany(coc.Entities, coc.Type, coc.OperationInfo.OperationSymbol, ctx.Args))); if (result != null) { Navigator.Navigate(result); } } }); } }
public static List <SMSMessageEntity> CreateAndSendMultipleSMSMessages(MultipleSMSModel template, List <string> phones) { var messages = new List <SMSMessageEntity>(); var IDs = GetProvider().SMSMultipleSendAction(template, phones); var sendDate = TimeZoneManager.Now.TrimToSeconds(); for (int i = 0; i < phones.Count; i++) { var message = new SMSMessageEntity { Message = template.Message, From = template.From }; message.SendDate = sendDate; //message.SendState = SendState.Sent; message.DestinationNumber = phones[i]; message.MessageID = IDs[i]; message.Save(); messages.Add(message); } return(messages); }