Пример #1
0
        //
        // GET: /Message/SendAlerts
        public ActionResult SendAlerts()
        {
            //GET UNIQUE LIST OF ALL USERS WHO HAVE ACTIVE PARAGRAPHS (PARAGRAPH.COMPLETE=0)
            IList <SigtradeUser> users_with_active_paragraphs = DB.Select("UserID")
                                                                .From(UsersParagraphLink.Schema)
                                                                .InnerJoin(ParagraphAction.IdColumn, UsersParagraphLink.SourceIDColumn)
                                                                .Where("Deleted")
                                                                .IsNotEqualTo(true)
                                                                .And("Completed")
                                                                .IsEqualTo(false).Distinct()
                                                                .ExecuteTypedList <SigtradeUser>();
            //GET ALL TEMPLATES
            MessageTemplateCollection messages_to_send = DB.Select()
                                                         .From(MessageTemplate.Schema)
                                                         .Where("Deleted").IsNotEqualTo(true)
                                                         .And("MessageType").IsEqualTo('A')
                                                         .ExecuteAsCollection <MessageTemplateCollection>();

            //FOR EACH TEMPLATE - WARNING - GONNA BE SLOW.
            foreach (MessageTemplate template in messages_to_send)
            {
                //FOR EACH USER
                foreach (SigtradeUser user in users_with_active_paragraphs)
                {
                    //GET ALL ACTIVE PARAS FOR USER
                    ParagraphActionCollection active_paragraphs = DB.Select("PALibID", "ReviewID", "DeadlineDate", "UserID")
                                                                  .From(ParagraphAction.Schema)
                                                                  .InnerJoin(UsersParagraphLink.SourceIDColumn, ParagraphAction.IdColumn)
                                                                  .WhereExpression("UserID").IsEqualTo(user.userid)
                                                                  .Distinct()
                                                                  .ExecuteAsCollection <ParagraphActionCollection>();

                    //ONLY ATTEMPT EMAIL IF THE USER HAS ACTIVE PARAS
                    if (active_paragraphs.Count() > 0)
                    {
                        ParagraphActionCollection paras_for_email = new ParagraphActionCollection();

                        //STRIP OUT ALL THE PARAS THAT SHOULD BE SENT IN ALERT - MOVE UP TO SQL LATER
                        foreach (ParagraphAction action in active_paragraphs)
                        {
                            if (should_send((DateTime)action.DeadlineDate, template.DaysDelta))
                            {
                                paras_for_email.Add(action);
                            }
                        }

                        //FINALLY, IF WE SHOULD SEND AN ALERT TO THE USER, BUILD AND SEND
                        if (paras_for_email.Count() > 0)
                        {
                            build_send_and_log_message(user, template, paras_for_email);
                        }
                    }
                }
            }

            return(View());
        }
Пример #2
0
        //
        // GET: /Message/SendAlerts
        public ActionResult SendAlerts()
        {
            //GET UNIQUE LIST OF ALL USERS WHO HAVE ACTIVE PARAGRAPHS (PARAGRAPH.COMPLETE=0)
            IList<SigtradeUser> users_with_active_paragraphs = DB.Select("UserID")
                .From(UsersParagraphLink.Schema)
                .InnerJoin(ParagraphAction.IdColumn, UsersParagraphLink.SourceIDColumn)
                .Where("Deleted")
                .IsNotEqualTo(true)
                .And("Completed")
                .IsEqualTo(false).Distinct()
                .ExecuteTypedList<SigtradeUser>();
            //GET ALL TEMPLATES
            MessageTemplateCollection messages_to_send = DB.Select()
                                                .From(MessageTemplate.Schema)
                                                .Where("Deleted").IsNotEqualTo(true)
                                                .And("MessageType").IsEqualTo('A')
                                                .ExecuteAsCollection<MessageTemplateCollection>();

            //FOR EACH TEMPLATE - WARNING - GONNA BE SLOW.
            foreach (MessageTemplate template in messages_to_send)
            {

                //FOR EACH USER
                foreach (SigtradeUser user in users_with_active_paragraphs)
                {
                    //GET ALL ACTIVE PARAS FOR USER
                    ParagraphActionCollection active_paragraphs = DB.Select("PALibID", "ReviewID","DeadlineDate","UserID")
                        .From(ParagraphAction.Schema)
                        .InnerJoin(UsersParagraphLink.SourceIDColumn, ParagraphAction.IdColumn)
                        .WhereExpression("UserID").IsEqualTo(user.userid)
                        .Distinct()
                        .ExecuteAsCollection<ParagraphActionCollection>();

                    //ONLY ATTEMPT EMAIL IF THE USER HAS ACTIVE PARAS
                    if (active_paragraphs.Count() > 0)
                    {
                        ParagraphActionCollection paras_for_email = new ParagraphActionCollection();

                        //STRIP OUT ALL THE PARAS THAT SHOULD BE SENT IN ALERT - MOVE UP TO SQL LATER
                        foreach (ParagraphAction action in active_paragraphs)
                        {
                            if (should_send((DateTime) action.DeadlineDate, template.DaysDelta))
                                paras_for_email.Add(action);
                        }

                        //FINALLY, IF WE SHOULD SEND AN ALERT TO THE USER, BUILD AND SEND
                        if (paras_for_email.Count() > 0)
                        {
                            build_send_and_log_message(user, template, paras_for_email);
                        }
                    }
                }
            }

            return View();
        }