Ejemplo n.º 1
0
        static void Newsletter_PreSaving(NewsletterEntity newsletter, PreSavingContext ctx)
        {
            var queryname       = QueryLogic.ToQueryName(newsletter.Query !.Key);
            QueryDescription qd = QueryLogic.Queries.QueryDescription(queryname);

            newsletter.Subject = TextTemplateParser.Parse(newsletter.Subject, qd, null).ToString();
            newsletter.Text    = TextTemplateParser.Parse(newsletter.Text, qd, null).ToString();
        }
Ejemplo n.º 2
0
        static void Newsletter_PreSaving(NewsletterEntity newsletter, ref bool graphModified)
        {
            var queryname       = QueryLogic.ToQueryName(newsletter.Query.Key);
            QueryDescription qd = DynamicQueryManager.Current.QueryDescription(queryname);

            newsletter.Subject = EmailTemplateParser.Parse(newsletter.Subject, qd, null).ToString();
            newsletter.Text    = EmailTemplateParser.Parse(newsletter.Text, qd, null).ToString();
        }
Ejemplo n.º 3
0
        public void Execute(ExecutingProcess executingProcess)
        {
            NewsletterEntity newsletter = (NewsletterEntity)executingProcess.Data !;

            var queryName = QueryLogic.ToQueryName(newsletter.Query !.Key);

            QueryDescription qd = QueryLogic.Queries.QueryDescription(queryName);

            List <QueryToken> list = new List <QueryToken>();

            using (ExecutionMode.Global())
            {
                list.Add(QueryUtils.Parse("Entity", qd, 0));
                list.Add(QueryUtils.Parse(".".Combine("Entity", "NewsletterDeliveries", "Element"), qd, SubTokensOptions.CanElement));
                list.Add(QueryUtils.Parse(".".Combine("Entity", "EmailOwnerData"), qd, 0));

                TextTemplateParser.Parse(newsletter.Subject, qd, null).FillQueryTokens(list);
                TextTemplateParser.Parse(newsletter.Text, qd, null).FillQueryTokens(list);

                list = list.Distinct().ToList();
            }

            var columns = list.Select(qt => new Column(qt, null)).ToList();

            //var columns = new List<QueryToken>();
            //columns.Add(QueryUtils.Parse("Entity.NewsletterDeliveries.Element", qd, canAggregate: false));
            //columns.Add(QueryUtils.Parse("Entity.Email", qd, canAggregate: false));
            //columns.AddRange(NewsletterLogic.GetTokens(queryName, newsletter.Subject));
            //columns.AddRange(NewsletterLogic.GetTokens(queryName, newsletter.Text));

            columns = columns.Distinct().ToList();

            var resultTable = QueryLogic.Queries.ExecuteQuery(new QueryRequest
            {
                QueryName = queryName,
                Filters   = new List <Filter>
                {
                    new FilterCondition(QueryUtils.Parse("Entity.NewsletterDeliveries.Element.Newsletter", qd, SubTokensOptions.CanElement), FilterOperation.EqualTo, newsletter.ToLite()),
                    new FilterCondition(QueryUtils.Parse("Entity.NewsletterDeliveries.Element.Sent", qd, SubTokensOptions.CanElement), FilterOperation.EqualTo, false),
                },
                Orders     = new List <Order>(),
                Columns    = columns,
                Pagination = new Pagination.All(),
            });

            var dicTokenColumn = resultTable.Columns.ToDictionary(rc => rc.Column.Token);

            var entityColumn     = resultTable.Columns.SingleEx(c => c.Column.Token.FullKey() == "Entity");
            var deliveryColumn   = resultTable.Columns.SingleEx(c => c.Column.Token.FullKey() == "Entity.NewsletterDeliveries.Element");
            var emailOwnerColumn = resultTable.Columns.SingleEx(c => c.Column.Token.FullKey() == "Entity.EmailOwnerData");

            var lines = resultTable.Rows.GroupBy(r => (Lite <Entity>)r[entityColumn] !).Select(g => new SendLine
            {
                NewsletterDelivery = (Lite <NewsletterDeliveryEntity>)g.DistinctSingle(deliveryColumn) !,
                Email = (EmailOwnerData)g.DistinctSingle(emailOwnerColumn) !,
                Rows  = g,
            }).ToList();
 /// <summary> setups the sync logic for member _newsletter</summary>
 /// <param name="relatedEntity">Instance to set as the related entity of type entityType</param>
 private void SetupSyncNewsletter(IEntityCore relatedEntity)
 {
     if (_newsletter != relatedEntity)
     {
         DesetupSyncNewsletter(true, true);
         _newsletter = (NewsletterEntity)relatedEntity;
         this.PerformSetupSyncRelatedEntity(_newsletter, new PropertyChangedEventHandler(OnNewsletterPropertyChanged), "Newsletter", MonoSoftware.MonoX.DAL.RelationClasses.StaticNewsletterLogRelations.NewsletterEntityUsingNewsletterIdStatic, true, new string[] {  });
     }
 }
Ejemplo n.º 5
0
 NewsletterEntity GetNewsletter()
 {
     NewsletterEntity nll = new NewsletterEntity();
     nll.Subject = txtSubject.Text.Trim();
     nll.Body = txtBody.Value.Trim();
     nll.IsEnable = chkIsEnable.Checked;
     nll.SendDate = FDateTime.ConvertDate(txtSendDate.Text.Trim());
     nll.UpdatedBy = Util.CurrentUserName;
     nll.UpdatedDate = DateTime.Now;
     nll.IsSendAll = rdoSendAll.Checked;
     return nll;
 }
Ejemplo n.º 6
0
 public bool Delete(Guid Id)
 {
     bool toReturn = false;
     using(DataAccessAdapterBase adapter = (new DataAccessAdapterFactory()).CreateAdapter())
     {
         NewsletterEntity _NewsletterEntity = new NewsletterEntity(Id);
         if (adapter.FetchEntity(_NewsletterEntity))
         {
             adapter.DeleteEntity(_NewsletterEntity);
             toReturn = true;
         }
     }
     return toReturn;
 }
 protected NewsletterLogEntity(SerializationInfo info, StreamingContext context) : base(info, context)
 {
     if (SerializationHelper.Optimization != SerializationOptimization.Fast)
     {
         _newsletter = (NewsletterEntity)info.GetValue("_newsletter", typeof(NewsletterEntity));
         if (_newsletter != null)
         {
             _newsletter.AfterSave += new EventHandler(OnEntityAfterSave);
         }
         this.FixupDeserialization(FieldInfoProviderSingleton.GetInstance());
     }
     // __LLBLGENPRO_USER_CODE_REGION_START DeserializationConstructor
     // __LLBLGENPRO_USER_CODE_REGION_END
 }
Ejemplo n.º 8
0
        static string ValidateTokens(NewsletterEntity newsletter, string text)
        {
            var queryName = QueryLogic.ToQueryName(newsletter.Query.Key);

            QueryDescription qd = DynamicQueryManager.Current.QueryDescription(queryName);

            try
            {
                EmailTemplateParser.TryParse(text, qd, null, out string error);

                return(error.DefaultText(null));
            }
            catch (Exception e)
            {
                return(e.Message);
            }
        }
Ejemplo n.º 9
0
        static string?ValidateTokens(NewsletterEntity newsletter, string?text)
        {
            var queryName = QueryLogic.ToQueryName(newsletter.Query !.Key);

            QueryDescription qd = QueryLogic.Queries.QueryDescription(queryName);

            try
            {
                TextTemplateParser.TryParse(text, qd, null, out string error);

                return(error.DefaultToNull());
            }
            catch (Exception e)
            {
                return(e.Message);
            }
        }
Ejemplo n.º 10
0
 public void LoadNewsLetter(LoadNewsLetterRequest request)
 {
     try
     {
         NewsletterEntity newsletterEntity = new NewsletterEntity()
         {
             Email = request.Email,
             Phone = request.Phone
         };
         context.NewsletterEntity.Add(newsletterEntity);
         context.SaveChanges();
     }
     catch (Exception ex)
     {
         Console.WriteLine("ClientDataAccess.LoadNewsLetter : ERROR : " + ex.Message);
         throw;
     }
 }
 /// <summary> Removes the sync logic for member _newsletter</summary>
 /// <param name="signalRelatedEntity">If set to true, it will call the related entity's UnsetRelatedEntity method</param>
 /// <param name="resetFKFields">if set to true it will also reset the FK fields pointing to the related entity</param>
 private void DesetupSyncNewsletter(bool signalRelatedEntity, bool resetFKFields)
 {
     this.PerformDesetupSyncRelatedEntity(_newsletter, new PropertyChangedEventHandler(OnNewsletterPropertyChanged), "Newsletter", MonoSoftware.MonoX.DAL.RelationClasses.StaticNewsletterLogRelations.NewsletterEntityUsingNewsletterIdStatic, true, signalRelatedEntity, "NewsletterLogs", resetFKFields, new int[] { (int)NewsletterLogFieldIndex.NewsletterId });
     _newsletter = null;
 }
Ejemplo n.º 12
0
 public static IQueryable <NewsletterDeliveryEntity> Deliveries(this NewsletterEntity n) =>
 As.Expression(() => Database.Query <NewsletterDeliveryEntity>().Where(nd => nd.Newsletter.Is(n)));
Ejemplo n.º 13
0
        public bool Update(NewsletterEntity _NewsletterEntity)
        {
            bool toReturn = false;
            using(DataAccessAdapterBase adapter = (new DataAccessAdapterFactory()).CreateAdapter())
            {
                RelationPredicateBucket filter = new RelationPredicateBucket();
                IPredicateExpression _PredicateExpression = new PredicateExpression();
                _PredicateExpression.Add(NewsletterFields.Id == _NewsletterEntity.Id);

                filter.PredicateExpression.Add(_PredicateExpression);

                adapter.UpdateEntitiesDirectly(_NewsletterEntity, filter);
                toReturn = true;
            }
            return toReturn;
        }
Ejemplo n.º 14
0
 public bool Update(NewsletterEntity _NewsletterEntity, RelationPredicateBucket filter)
 {
     bool toReturn = false;
     using(DataAccessAdapterBase adapter = (new DataAccessAdapterFactory()).CreateAdapter())
     {
         adapter.UpdateEntitiesDirectly(_NewsletterEntity, filter);
         toReturn = true;
     }
     return toReturn;
 }
Ejemplo n.º 15
0
 public static IQueryable <NewsletterDeliveryEntity> Deliveries(this NewsletterEntity n)
 {
     return(DeliveriesExpression.Evaluate(n));
 }
Ejemplo n.º 16
0
 public NewsletterEntity SelectOne(Guid Id)
 {
     NewsletterEntity toReturn = null;
     using(DataAccessAdapterBase adapter = (new DataAccessAdapterFactory()).CreateAdapter())
     {
         NewsletterEntity _NewsletterEntity = new NewsletterEntity(Id);
         if (adapter.FetchEntity(_NewsletterEntity))
         {
             toReturn = _NewsletterEntity;
         }
     }
     return toReturn;
 }
Ejemplo n.º 17
0
        public void Execute(ExecutingProcess executingProcess)
        {
            NewsletterEntity newsletter = (NewsletterEntity)executingProcess.Data;

            var queryName = QueryLogic.ToQueryName(newsletter.Query.Key);

            QueryDescription qd = DynamicQueryManager.Current.QueryDescription(queryName);

            List <QueryToken> list = new List <QueryToken>();

            using (ExecutionMode.Global())
            {
                list.Add(QueryUtils.Parse("Entity", qd, 0));
                list.Add(QueryUtils.Parse(".".Combine("Entity", "NewsletterDeliveries", "Element"), qd, SubTokensOptions.CanElement));
                list.Add(QueryUtils.Parse(".".Combine("Entity", "EmailOwnerData"), qd, 0));

                EmailTemplateParser.Parse(newsletter.Subject, qd, null).FillQueryTokens(list);
                EmailTemplateParser.Parse(newsletter.Text, qd, null).FillQueryTokens(list);

                list = list.Distinct().ToList();
            }

            var columns = list.Select(qt => new Column(qt, null)).ToList();

            //var columns = new List<QueryToken>();
            //columns.Add(QueryUtils.Parse("Entity.NewsletterDeliveries.Element", qd, canAggregate: false));
            //columns.Add(QueryUtils.Parse("Entity.Email", qd, canAggregate: false));
            //columns.AddRange(NewsletterLogic.GetTokens(queryName, newsletter.Subject));
            //columns.AddRange(NewsletterLogic.GetTokens(queryName, newsletter.Text));

            columns = columns.Distinct().ToList();

            var resultTable = DynamicQueryManager.Current.ExecuteQuery(new QueryRequest
            {
                QueryName = queryName,
                Filters   = new List <Filter>
                {
                    new Filter(QueryUtils.Parse("Entity.NewsletterDeliveries.Element.Newsletter", qd, SubTokensOptions.CanElement), FilterOperation.EqualTo, newsletter.ToLite()),
                    new Filter(QueryUtils.Parse("Entity.NewsletterDeliveries.Element.Sent", qd, SubTokensOptions.CanElement), FilterOperation.EqualTo, false),
                },
                Orders     = new List <Order>(),
                Columns    = columns,
                Pagination = new Pagination.All(),
            });

            var dicTokenColumn = resultTable.Columns.ToDictionary(rc => rc.Column.Token);

            var entityColumn     = resultTable.Columns.SingleEx(c => c.Column.Token.FullKey() == "Entity");
            var deliveryColumn   = resultTable.Columns.SingleEx(c => c.Column.Token.FullKey() == "Entity.NewsletterDeliveries.Element");
            var emailOwnerColumn = resultTable.Columns.SingleEx(c => c.Column.Token.FullKey() == "Entity.EmailOwnerData");

            var lines = resultTable.Rows.GroupBy(r => (Lite <Entity>)r[entityColumn]).Select(g => new SendLine
            {
                NewsletterDelivery = (Lite <NewsletterDeliveryEntity>)g.DistinctSingle(deliveryColumn),
                Email = (EmailOwnerData)g.DistinctSingle(emailOwnerColumn),
                Rows  = g,
            }).ToList();

            if (newsletter.SubjectParsedNode == null)
            {
                newsletter.SubjectParsedNode = EmailTemplateParser.Parse(newsletter.Subject, qd, null);
            }

            if (newsletter.TextParsedNode == null)
            {
                newsletter.TextParsedNode = EmailTemplateParser.Parse(newsletter.Text, qd, null);
            }

            var conf = EmailLogic.Configuration;

            int processed = 0;

            foreach (var group in lines.GroupsOf(20))
            {
                processed += group.Count;

                executingProcess.CancellationToken.ThrowIfCancellationRequested();

                if (conf.SendEmails)
                {
                    Parallel.ForEach(group, s =>
                    {
                        try
                        {
                            var smtpConfig = NewsletterLogic.GetStmpConfiguration(newsletter);

                            var client  = smtpConfig.GenerateSmtpClient();
                            var message = new MailMessage();

                            if (newsletter.From.HasText())
                            {
                                message.From = new MailAddress(newsletter.From, newsletter.DisplayFrom);
                            }
                            else
                            {
                                message.From = smtpConfig.DefaultFrom.ToMailAddress();
                            }

                            message.To.Add(conf.OverrideEmailAddress.DefaultText(s.Email.Email));

                            message.Subject = ((EmailTemplateParser.BlockNode)newsletter.SubjectParsedNode).Print(
                                new EmailTemplateParameters(null, null, dicTokenColumn, s.Rows)
                            {
                                IsHtml = false,
                            });

                            message.Body = ((EmailTemplateParser.BlockNode)newsletter.TextParsedNode).Print(
                                new EmailTemplateParameters(null, null, dicTokenColumn, s.Rows)
                            {
                                IsHtml = true,
                            });

                            message.IsBodyHtml = true;

                            client.Send(message);
                        }
                        catch (Exception ex)
                        {
                            s.Exception = ex;
                        }
                    });
                }

                var failed = group.Extract(sl => sl.Exception != null);
                foreach (var f in failed)
                {
                    new ProcessExceptionLineEntity
                    {
                        Exception = f.Exception.LogException().ToLite(),
                        Line      = f.NewsletterDelivery,
                        Process   = executingProcess.CurrentProcess.ToLite(),
                    }.Save();
                }


                var sent = group.Select(sl => sl.NewsletterDelivery).ToList();
                if (sent.Any())
                {
                    Database.Query <NewsletterDeliveryEntity>()
                    .Where(nd => sent.Contains(nd.ToLite()))
                    .UnsafeUpdate()
                    .Set(nd => nd.Sent, nd => true)
                    .Set(nd => nd.SendDate, nd => TimeZoneManager.Now.TrimToSeconds())
                    .Execute();
                }

                executingProcess.ProgressChanged(processed, lines.Count);
            }

            newsletter.State = NewsletterState.Sent;

            using (OperationLogic.AllowSave <NewsletterEntity>())
                newsletter.Save();
        }
Ejemplo n.º 18
0
        public bool Update(Guid Id, string Subject, string Body, DateTime SendDate, bool IsSend, string EmailSend, string EmailQueue, string State, DateTime StartDate, DateTime EndDate, bool IsEnable, string CreatedBy, DateTime CreatedDate, string UpdatedBy, DateTime UpdatedDate, bool IsSendAll)
        {
            bool toReturn = false;
            using(DataAccessAdapterBase adapter = (new DataAccessAdapterFactory()).CreateAdapter())
            {
                NewsletterEntity _NewsletterEntity = new NewsletterEntity(Id);
                if (adapter.FetchEntity(_NewsletterEntity))
                {

                    _NewsletterEntity.Subject = Subject;
                    _NewsletterEntity.Body = Body;
                    _NewsletterEntity.SendDate = SendDate;
                    _NewsletterEntity.IsSend = IsSend;
                    _NewsletterEntity.EmailSend = EmailSend;
                    _NewsletterEntity.EmailQueue = EmailQueue;
                    _NewsletterEntity.State = State;
                    _NewsletterEntity.StartDate = StartDate;
                    _NewsletterEntity.EndDate = EndDate;
                    _NewsletterEntity.IsEnable = IsEnable;
                    _NewsletterEntity.CreatedBy = CreatedBy;
                    _NewsletterEntity.CreatedDate = CreatedDate;
                    _NewsletterEntity.UpdatedBy = UpdatedBy;
                    _NewsletterEntity.UpdatedDate = UpdatedDate;
                    _NewsletterEntity.IsSendAll = IsSendAll;
                    adapter.SaveEntity(_NewsletterEntity, true);
                    toReturn = true;
                }
            }
            return toReturn;
        }
Ejemplo n.º 19
0
        public NewsletterEntity Insert(string Subject, string Body, DateTime SendDate, bool IsSend, string EmailSend, string EmailQueue, string State, DateTime StartDate, DateTime EndDate, bool IsEnable, string CreatedBy, DateTime CreatedDate, string UpdatedBy, DateTime UpdatedDate, bool IsSendAll)
        {
            NewsletterEntity _NewsletterEntity = new NewsletterEntity();
            using(DataAccessAdapterBase adapter = (new DataAccessAdapterFactory()).CreateAdapter())
            {

                _NewsletterEntity.Subject = Subject;
                _NewsletterEntity.Body = Body;
                _NewsletterEntity.SendDate = SendDate;
                _NewsletterEntity.IsSend = IsSend;
                _NewsletterEntity.EmailSend = EmailSend;
                _NewsletterEntity.EmailQueue = EmailQueue;
                _NewsletterEntity.State = State;
                _NewsletterEntity.StartDate = StartDate;
                _NewsletterEntity.EndDate = EndDate;
                _NewsletterEntity.IsEnable = IsEnable;
                _NewsletterEntity.CreatedBy = CreatedBy;
                _NewsletterEntity.CreatedDate = CreatedDate;
                _NewsletterEntity.UpdatedBy = UpdatedBy;
                _NewsletterEntity.UpdatedDate = UpdatedDate;
                _NewsletterEntity.IsSendAll = IsSendAll;
                adapter.SaveEntity(_NewsletterEntity, true);
            }
            return _NewsletterEntity;
        }
Ejemplo n.º 20
0
 public NewsletterEntity Insert(NewsletterEntity _NewsletterEntity)
 {
     using(DataAccessAdapterBase adapter = (new DataAccessAdapterFactory()).CreateAdapter())
     {
         adapter.SaveEntity(_NewsletterEntity, true);
     }
     return _NewsletterEntity;
 }