public static SMSMessageEntity CreateSMSMessage(Lite <SMSTemplateEntity> template, Entity?entity, ISMSModel?model, CultureInfo?forceCulture) { var t = SMSLogic.SMSTemplatesLazy.Value.GetOrThrow(template); var defaultCulture = SMSLogic.Configuration.DefaultCulture.ToCultureInfo(); if (t.Query != null) { var qd = QueryLogic.Queries.QueryDescription(t.Query.ToQueryName()); List <QueryToken> tokens = new List <QueryToken>(); t.ParseData(qd); tokens.Add(t.To !.Token); var parsedNodes = t.Messages.ToDictionary( tm => tm.CultureInfo.ToCultureInfo(), tm => TextTemplateParser.Parse(tm.Message, qd, t.Model?.ToType()) ); parsedNodes.Values.ToList().ForEach(n => n.FillQueryTokens(tokens)); var columns = tokens.Distinct().Select(qt => new Column(qt, null)).ToList(); var filters = model != null?model.GetFilters(qd) : new List <Filter> { new FilterCondition(QueryUtils.Parse("Entity", qd, 0), FilterOperation.EqualTo, entity !.ToLite()) }; var table = QueryLogic.Queries.ExecuteQuery(new QueryRequest { QueryName = qd.QueryName, Columns = columns, Pagination = model?.GetPagination() ?? new Pagination.All(), Filters = filters, Orders = model?.GetOrders(qd) ?? new List <Order>(), }); var columnTokens = table.Columns.ToDictionary(a => a.Column.Token); var ownerData = (SMSOwnerData)table.Rows[0][columnTokens.GetOrThrow(t.To !.Token)] !;
public static SMSMessageEntity CreateSMSMessage(Lite <SMSTemplateEntity> template, Entity entity, ISMSModel?model, CultureInfo?forceCulture) { var t = SMSLogic.SMSTemplatesLazy.Value.GetOrThrow(template); var defaultCulture = SMSLogic.Configuration.DefaultCulture.ToCultureInfo(); var qd = QueryLogic.Queries.QueryDescription(t.Query.ToQueryName()); List <QueryToken> tokens = new List <QueryToken>(); t.ParseData(qd); tokens.Add(t.To.Token); var parsedNodes = t.Messages.ToDictionary( tm => tm.CultureInfo.ToCultureInfo(), tm => TextTemplateParser.Parse(tm.Message, qd, t.Model?.ToType()) ); parsedNodes.Values.ToList().ForEach(n => n.FillQueryTokens(tokens)); var columns = tokens.Distinct().Select(qt => new Column(qt, null)).ToList(); var filters = model != null?model.GetFilters(qd) : new List <Filter> { new FilterCondition(QueryUtils.Parse("Entity", qd, 0), FilterOperation.EqualTo, entity.ToLite()) }; var table = QueryLogic.Queries.ExecuteQuery(new QueryRequest { QueryName = qd.QueryName, Columns = columns, Pagination = model?.GetPagination() ?? new Pagination.All(), Filters = filters, Orders = model?.GetOrders(qd) ?? new List <Order>(), }); var columnTokens = table.Columns.ToDictionary(a => a.Column.Token); var ownerData = (SMSOwnerData)table.Rows[0][columnTokens.GetOrThrow(t.To.Token)] !; var ci = forceCulture ?? ownerData.CultureInfo?.ToCultureInfo() ?? defaultCulture; var node = parsedNodes.TryGetC(ci) ?? parsedNodes.GetOrThrow(defaultCulture); return(new SMSMessageEntity { Template = t.ToLite(), Message = node.Print(new TextTemplateParameters(entity, ci, columnTokens, table.Rows) { Model = model }), From = t.From, EditableMessage = t.EditableMessage, State = SMSMessageState.Created, Referred = ownerData.Owner, DestinationNumber = ownerData.TelephoneNumber, Certified = t.Certified }); }