Beispiel #1
0
 public void RunScheduledBatchSendingTest()
 {
     using (var logic = new MessagesModuleLogic(new MessageContext(Settings.MessageContextConnectionString))) {
         //TASK_PROTOTYPE.RunScheduledBatchSending(logic);
     }
     //TASK_PROTOTYPE.RunScheduledBatchSending(null);
 }
Beispiel #2
0
 public static List <Message> GetDemoMessages(MessagesModuleLogic logic, IMessageTemplate tmpl, ISqlLogic sqlLogic, bool isSms, int MaxCount = 0)
 {
     using (var mng = BatchCreationManager.NewInstance(sqlLogic, logic)) {
         var cltr     = new MessageDataCollector(mng);
         var msgData  = cltr.Collect(tmpl);
         var producer = new MessageProducer(tmpl, null, new DefaultMarkUpSpecification {
             NewLineSymbol = "\n"
         });
         List <Message> result  = new List <Message>();
         int            counter = 0;
         foreach (var data in msgData)
         {
             producer.ChangeWildCards(data.wildCards);
             foreach (var textData in data.TextProductionData)
             {
                 result.Add(producer.Produce(textData, isSms ? MessageType.Sms : MessageType.Sms));
                 counter++;
                 if (counter == MaxCount)
                 {
                     return(result);
                 }
             }
         }
         return(result);
     }
 }
Beispiel #3
0
 protected override FetchResult <TemplateVM> _fetch(int?Skip, int?Count, NgControllerInstruct[] filters)
 {
     using (var l = new MessagesModuleLogic()) {
         var queryResult = l.GetAll <tblTemplate>()
                           .Select(x => PocoConstructor.MakeFromObj(x, TemplateVM.tblTemplatePR));
         return(FetchResult <TemplateVM> .Succes(queryResult, queryResult.Count()));
     }
 }
 protected override FetchResult <RFilterVM> _fetch(int?Skip, int?Count, NgControllerInstruct[] filters)
 {
     using (var l = new MessagesModuleLogic()) {
         var items = l.GetAll <tblRecepientFilter>()
                     .Select(x => PocoConstructor.MakeFromObj(x, RFilterVM.tblRecepientFilterPR));
         return(FetchResult <RFilterVM> .Succes(items, items.Count()));
     }
 }
 protected override FetchResult <RecepientcardVM> _fetch(int?Skip, int?Count, NgControllerInstruct[] filters)
 {
     using (var l = new MessagesModuleLogic()) {
         int fullQueryCount;
         var queryResult = l.GetFiltered <tblRecepientCard>(Skip, Count, filters, out fullQueryCount)
                           .Select(x => PocoConstructor.MakeFromObj(x, RecepientcardVM.tblRecepientCardPR));
         return(FetchResult <RecepientcardVM> .Succes(queryResult, fullQueryCount));
     }
 }
 protected override FetchResult <MessageReportVM> _fetch(int?Skip, int?Count, NgControllerInstruct[] filters)
 {
     using (var l = new MessagesModuleLogic()) {
         int count;
         var queryResult = l.GetFiltered <tblMessage>(Skip, Count, filters, out count)
                           .Select(x => PocoConstructor.MakeFromObj(x, MessageReportVM.tblMessagePR));
         return(FetchResult <MessageReportVM> .Succes(queryResult, count));
     }
 }
 protected override FetchResult <EmailSenderDataProviderVM> _fetch(int?Skip, int?Count, NgControllerInstruct[] filters)
 {
     using (var l = new MessagesModuleLogic()) {
         int allQCount;
         var queryResult = l.GetFiltered <tblEmailSenderDataProvider>(Skip, Count, filters, out allQCount)
                           .Select(x => PocoConstructor.MakeFromObj(x, EmailSenderDataProviderVM.tblEmailSenderDataProviderPR));
         return(FetchResult <EmailSenderDataProviderVM> .Succes(queryResult, allQCount));
     }
 }
Beispiel #8
0
 private BatchCreationManager(DateTime controlledPeriodStart, DateTime controlledPeriodEnd, MessagesModuleLogic Logic, ISqlLogic SqlLogic)
 {
     this.SqlLogic    = SqlLogic;
     this.Logic       = Logic ?? new MessagesModuleLogic();
     AutoDisposeLogic = Logic == null;
     periodStart      = controlledPeriodStart;
     periodEnd        = controlledPeriodEnd;
     stack.Add(this);
 }
 public void SchedulesGetting_NoExceptions()
 {
     using (var logic = new MessagesModuleLogic(new MessageContext(Settings.MessageContextConnectionString))) {
         //SqlLogic isn't needed in this test.
         using (var Bcm = NewInstance(new DateTime(2015, 9, 3), new DateTime(2017, 9, 5), null, logic)) {
             Bcm.DontMakeTimeStamp();
             var schedules = Bcm.GetActualMessageSchedules();
         }
     }
 }
Beispiel #10
0
 protected override NgResult _delete(MessageScheduleVM[] models)
 {
     using (var l = new MessagesModuleLogic()) {
         foreach (var model in models)
         {
             l.Delete <tblMessageSchedule>(model.Id);
         }
     }
     return(NgResult.Succes(DEBS.Translate("MessageMdl.{0} schedules was removed", models.Count())));
 }
 protected override NgResult _delete(EmailSenderDataProviderVM[] models)
 {
     using (var l = new MessagesModuleLogic()) {
         foreach (var model in models)
         {
             l.Delete <tblEmailSenderDataProvider>(model.Id);
         }
     }
     return(NgResult.Succes(DEBS.Translate("MessageMdl.{0} email providers was removed", models.Count())));
 }
Beispiel #12
0
 public void RunImmediateBatchCreationTest()
 {
     using (var logic = new MessagesModuleLogic(new MessageContext(Settings.MessageContextConnectionString))) {
         using (var sqlLogic = new SqlLogic(new SqlConnectionFactory(Settings.SqlConnectionString))) {
             using (var Bcm = BatchCreationManager.NewInstance(new DateTime(2016, 9, 3), new DateTime(2016, 9, 5), sqlLogic, logic)) {
                 //TASK_PROTOTYPE.RunImmediateBatchCreation(logic.Get<tblMessageSchedule>(1), 1, sqlLogic, logic);
             }
         }
     }
 }
 protected override NgResult _update(EmailSenderDataProviderVM[] models)
 {
     using (var l = new MessagesModuleLogic()) {
         foreach (var model in models)
         {
             var item = l.Get <tblEmailSenderDataProvider>(model.Id);
             EmailSenderDataProviderVM.ReflectToTblEmailSenderDataProvider.Run(model, item);
             l.SaveChanges(item);
         }
     }
     return(NgResult.Succes(DEBS.Translate("MessageMdl.{0} email providers was modified", models.Count())));
 }
Beispiel #14
0
 protected override NgResult _update(MessageScheduleVM[] models)
 {
     using (var l = new MessagesModuleLogic()) {
         foreach (var model in models)
         {
             var item = l.Get <tblMessageSchedule>(model.Id);
             MessageScheduleVM.ReflectToTblMessageSchedule.Run(model, item);
             l.SaveChanges(item);
         }
     }
     return(NgResult.Succes(DEBS.Translate("MessageMdl.{0} schedules was modified", models.Count())));
 }
Beispiel #15
0
 protected override NgResult _create(MessageScheduleVM[] models)
 {
     using (var l = new MessagesModuleLogic()) {
         foreach (var model in models)
         {
             var item = l.Create <tblMessageSchedule>();
             MessageScheduleVM.ReflectToTblMessageSchedule.Run(model, item);
             l.Add(item);
         }
     }
     return(NgResult.Succes(DEBS.Translate("MessageMdl.{0} new schedules was added", models.Count())));
 }
 protected override NgResult _create(EmailSenderDataProviderVM[] models)
 {
     using (var l = new MessagesModuleLogic()) {
         foreach (var model in models)
         {
             var item = l.Create <tblEmailSenderDataProvider>();
             EmailSenderDataProviderVM.ReflectToTblEmailSenderDataProvider.Run(model, item);
             l.Add(item);
         }
     }
     return(NgResult.Succes(DEBS.Translate("MessageMdl.{0} email sms providers was added", models.Count())));;
 }
Beispiel #17
0
        protected override FetchResult <FilterVM> _fetch(int?Skip, int?Count, NgControllerInstruct[] filters)
        {
            IEnumerable <FilterVM> filts;
            int allQueryCount;

            using (var l = new MessagesModuleLogic()) {
                var result = l.GetFiltered <tblFilter>(Skip, Count, filters, out allQueryCount);
                filts = result.Select(x => PocoConstructor.MakeFromObj(x, sqllogic, FilterVM.tblFilterPR)).ToArray();
            }

            return(FetchResult <FilterVM> .Succes(filts, allQueryCount));
        }
Beispiel #18
0
 static DateTime getStartDate()
 {
     //returns last invokation end Data + 1 milisecond
     using (var l = new MessagesModuleLogic()) {
         var last = l.GetAll <tblBatchCreationManagerData>().FirstOrDefault();
         if (last == null)
         {
             return(DateTime.Now.AddYears(-1));
         }
         return(last.LastEndTime.AddMilliseconds(1));
     }
 }
Beispiel #19
0
 public JsonResult ClearPendingMessagesQueue()
 {
     using (var l = new MessagesModuleLogic())
     {
         var messages = l.GetAll <tblPendingMessagesQueue>();
         l.DeleteRange(messages);
         var msgBuilder = new StringBuilder();
         msgBuilder.AppendLine(DEBS.Translate("MessageMdl.Pending messages queue was cleaned"));
         var msg = msgBuilder.ToString();
         return(NgResultToJsonResult(NgResult.Succes(msg)));
     }
 }
Beispiel #20
0
        public static void RunScheduledBatchSending(MessagesModuleLogic Logic, BatchSendingTaskSettings Settings = null)
        {
            if (!ScheduledBatchSending_H.GetSafeThreadPermission())
            {
                return;
            }
            try {
                Settings = Settings ?? DefaultsBatchSendingTaskSettings;
                using (var manager = BatchSendingManager.NewInstance(Settings, Logic)) {
                    var allPendingMails = manager.GetPendingEmails();
                    var allPendingSms   = manager.GetPendingSms();

                    var batches = allPendingMails
                                  .Select(x => x.tblMessageBatch)
                                  .Distinct()
                                  .Concat(allPendingSms
                                          .Select(x => x.tblMessageBatch)
                                          .Distinct())
                                  .ToArray();

                    //EMAIL
                    var emailProviders = manager.GetActiveEmailProviders().ToList().GetEnumerator();
                    var Emailer        = new EmailSender(manager);
                    SendCycle(manager, allPendingMails, emailProviders, Emailer);
                    //SMS
                    var smsProviders = manager.GetActiveSmsProviders().ToList().GetEnumerator();
                    var Smser        = new SmsSender(manager);
                    SendCycle(manager, allPendingSms, smsProviders, Smser);

                    foreach (var batch in batches)
                    {
                        //check if batch finished
                        if (!batch.tblMessages.Where(x => (x.tblPendingMessagesQueue != null) && (!x.tblPendingMessagesQueue.Deleted)).Any())
                        {
                            batch.FinishedOn = DateTime.Now;
                        }
                        //TODO THIS CHECK IS NOT RIGHT DECISION
                        //add errors to batch if there are some
                        if (batch.tblMessages.Where(x => x.ErrorLog != null).Any())
                        {
                            (batch as IErrorLoged).AddError("Some errors have arisen at sending stage at " + DateTime.Now.ToShortDateString());
                        }
                        manager.Logic.SaveLazy(batch);
                    }
                    Logic.SaveChanges();
                    //Logic.Dispose();
                }
            }
            finally {
                ScheduledBatchSending_H.ReportTaskEnded();
            }
        }
        public void WorkService(object sender, System.Timers.ElapsedEventArgs e)
        {
            ServiceTimer.Stop();

            using (var logic = new MessagesModuleLogic(new MessageContext()))
            {
                TASK_PROTOTYPE.RunScheduledBatchSending(logic, new BatchSendingTaskSettings {
                    SmsLimit = 20, MailsLimit = 20
                });
            }

            ServiceTimer.Start();
        }
Beispiel #22
0
        public JsonResult MockMessage(int templateId, int?MaxCount)
        {
            using (var l = new MessagesModuleLogic()) {
                var tmpl = l.Get <tblTemplate>(templateId);
                if (tmpl == null)
                {
                    return(NgResultToJsonResult(NgResult.Fail(DEBS.Translate("MessageMdl.Server Error: cannot find template, try save it and re-open."))));
                }

                var items = TASK_PROTOTYPE.GetDemoMessages(l, tmpl, sqllogic, tmpl.IsSms, MaxCount ?? 0);
                return(NgResultToJsonResult(FetchResult <Message> .Succes(items, items.Count)));
            }
        }
Beispiel #23
0
 protected override FetchResult <RFilterTableVM> _fetch(int?Skip, int?Count, NgControllerInstruct[] filters)
 {
     using (var l = new MessagesModuleLogic()) {
         var items = l.GetAll <tblRecepientFilterTableName>().Select(x =>
                                                                     PocoConstructor.MakeFromObj(x, RFilterTableVM.tblRecepientFilterTableNamePR)
                                                                     );
         if (items.Count() == 0)
         {
             return(FetchResult <RFilterTableVM> .Fail(DEBS.Translate("MessageMdl.There is no base tables in database")));
         }
         return(FetchResult <RFilterTableVM> .Succes(items, items.Count()));
     }
 }
        public void CollectTest()
        {
            using (var logic = new MessagesModuleLogic(new MessageContext(Settings.MessageContextConnectionString))) {
                using (var sqlLogic = new SqlLogic(new SqlConnectionFactory(Settings.SqlConnectionString))) {
                    using (var Bcm = BatchCreationManager.NewInstance(new DateTime(2016, 9, 3), new DateTime(2016, 9, 5), sqlLogic, logic)) {
                        Bcm.DontMakeTimeStamp();
                        var sced = logic.Get <tblMessageSchedule>(1);

                        var Collector = new MessageDataCollector(Bcm);
                        var result    = Collector.Collect(sced);
                    }
                }
            }
        }
 protected override NgResult _update(RFilterVM[] models)
 {
     using (var l = new MessagesModuleLogic()) {
         foreach (var model in models)
         {
             var filt = l.Get <tblRecepientFilter>(model.Id);
             filt.Name = model.Name;
             filt.tblRecepientFilterTableNameId = model.BaseTableId;
             l.SaveChanges(filt);
             model.Id = filt.Id;
             CreateAndUpdateRFilterParts(model, l);
         }
     }
     return(NgResult.Succes());
 }
Beispiel #26
0
 public JsonResult SendImmediately(int ScheduleId)
 {
     using (var l = new MessagesModuleLogic()) {
         var sched = l.Get <tblMessageSchedule>(ScheduleId);
         if (sched == null)
         {
             return(NgResultToJsonResult(NgResult.Fail(DEBS.Translate("MessageMdl.Server Error: cannot find template, try save it and re-open."))));
         }
         var result     = TASK_PROTOTYPE.RunImmediateBatchCreation(sched, 1, sqllogic, l);
         var msgBuilder = new StringBuilder();
         msgBuilder.AppendLine(DEBS.Translate("MessageMdl.Message Batch was created and will be sended as soon as possible."));
         msgBuilder.AppendLine(DEBS.Translate("MessageMdl.It contains: {0} messages.", result.Messages.Count()));
         var msg = msgBuilder.ToString();
         return(NgResultToJsonResult(NgResult.Succes(msg)));
     }
 }
Beispiel #27
0
        public JsonResult GetColumns(int id)
        {
            string tablename;

            using (var l = new MessagesModuleLogic()) {
                var item = l.Get <tblRecepientFilterTableName>(id);
                if (item == null)
                {
                    return(NgResultToJsonResult(NgResult.Fail(DEBS.Translate("MessageMdl.There is no binded table in database with id: {0}", id))));
                }
                tablename = item.ReferncedTableName;
            }
            var data = sqlLogic.GetColomnsInfos(tablename);

            return(NgResultToJsonResult(FetchResult <IDictionary <string, string> > .Succes(data, data.Count)));
        }
 protected override NgResult _create(RFilterVM[] models)
 {
     //TODO OPTIMIZE
     using (var l = new MessagesModuleLogic()) {
         foreach (var model in models)
         {
             var filt = l.Create <tblRecepientFilter>();
             filt.Name = model.Name;
             filt.tblRecepientFilterTableNameId = model.BaseTableId;
             l.Add(filt);
             model.Id = filt.Id;
             CreateAndUpdateRFilterParts(model, l);
         }
     }
     return(NgResult.Succes());
 }
        protected void CreateAndUpdateRFilterParts(RFilterVM model, MessagesModuleLogic l)
        {
            //!!!! IMPLEMENT POCO_AUTOBINDING MECHANISM IF YOU GOING TO DO SAME THINGS IN OTHER PLACE
            ManagerRFilterPart <tblFilter, FilterVM>(l, model.filters, (e, m) => {
                e.Key             = m.Key;
                e.Name            = m.Name;
                e.autoUpdatedList = m.autoUpdatedList;
                if (!m.autoUpdatedList)
                {
                    string[] ops  = new string[m.ValsOps.Length];
                    string[] vals = new string[m.ValsOps.Length];
                    for (int i = 0; i < m.ValsOps.Length; i++)
                    {
                        ops[i]  = m.ValsOps[i].Operator;
                        vals[i] = m.ValsOps[i].Value == null ? "": m.ValsOps[i].Value.ToString();
                    }
                    e.OperatorsJSON = JsonConvert.SerializeObject(ops);
                    e.ValuesJSON    = JsonConvert.SerializeObject(vals);
                }
                else
                {
                    e.OperatorsJSON = "[]";
                    e.ValuesJSON    = "[]";
                }
                e.allowMultipleSelection = m.allowMultipleSelection;
                e.allowUserInput         = m.allowUserInput;
                e.Type = m.Type;
                e.tblRecepientFilterId = model.Id;
            });

            //!!!! IMPLEMENT POCO_AUTOBINDING MECHANISM IF YOU GOING TO DO SAME THINGS IN OTHER PLACE
            ManagerRFilterPart <tblWildcard, WildcardVM>(l, model.wildcards, (e, m) => {
                e.Name = m.Name;
                e.Key  = m.Key;
                e.Code = m.Code;
                e.tblRecepientFilterId = model.Id;
            });

            //!!!! IMPLEMENT POCO_AUTOBINDING MECHANISM IF YOU GOING TO DO SAME THINGS IN OTHER PLACE
            ManagerRFilterPart <tblRecepientCard, RecepientcardVM>(l, model.reccards, (e, m) => {
                e.Name                 = m.Name;
                e.NameKey              = m.NameKey;
                e.PhoneKey             = m.PhoneKey;
                e.EmailKey             = m.EmailKey;
                e.tblRecepientFilterId = model.Id;
            });
        }
 public override void Execute()
 {
     using (var logicSetting = new tblSettingLogic())
     {
         if (logicSetting.BatchSendingIsActive)
         {
             using (var logic = new MessagesModuleLogic(new MessageContext()))
             {
                 //logger.Info("BatchSending");
                 TASK_PROTOTYPE.RunScheduledBatchSending(logic, new BatchSendingTaskSettings {
                     SmsLimit = 20, MailsLimit = 20
                 });
                 logicSetting.BatchSendingLastRun = DateTime.UtcNow;
             }
         }
     }
 }