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(); }