Ejemplo n.º 1
0
 public static BatchCreationResult RunImmediateBatchCreation(tblMessageSchedule Schedule, int Priority, ISqlLogic SqlLogic, MessagesModuleLogic Logic)
 {
     lock (ImmediateBatchCreation_L) {
         using (var manager = BatchCreationManager.NewInstance(SqlLogic, Logic)) {
             var creator = new BatchCreator(manager);
             var result  = creator.CreateBatch(Schedule, Priority);
             manager.SaveResultsToDB(new[] { result });
             return(result);
         }
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Creates Batch, creates messages assigned to this batch, puts messages to send queque.
        /// returns entities NOT WRITTEN to db.
        /// 'sendPriority': int.min - lowest priory, int.max - highest.
        /// </summary>
        public BatchCreationResult CreateBatch(tblMessageSchedule schedule, int sendPriority)
        {
            var result = new BatchCreationResult();
            var batch  = Manager.Logic.Create <tblMessageBatch>();

            batch.CreatedOn          = DateTime.Now;
            batch.tblMessageSchedule = schedule;
            batch.IsSms = schedule.IsSms;

            var dataCollector = new MessageDataCollector(Manager);
            var msgData       = dataCollector.Collect(schedule);

            var markSpecs = new DefaultMarkUpSpecification {
                NewLineSymbol = "\n"
            };
            var msgProducer = new MessageProducer(schedule, null, markSpecs);

            var messages   = new List <tblMessage>();
            var sendQueues = new List <tblPendingMessagesQueue>();

            foreach (var data in msgData)
            {
                msgProducer.ChangeWildCards(data.wildCards);
                foreach (var textData in data.TextProductionData)
                {
                    var msgRaw = msgProducer.Produce(textData, schedule.IsSms ? MessageType.Sms : MessageType.Sms);
                    var msg    = Manager.Logic.Create <tblMessage>();
                    msg.Adress          = msgRaw.Adress;
                    msg.Body            = msgRaw.Body;
                    msg.Header          = msgRaw.Header;
                    msg.IsSms           = schedule.IsSms;
                    msg.tblMessageBatch = batch;
                    messages.Add(msg);
                    var pmq = Manager.Logic.Create <tblPendingMessagesQueue>();
                    pmq.tblMessage = msg;
                    pmq.Priority   = sendPriority;
                    sendQueues.Add(pmq);
                }
            }
            result.Batch     = batch;
            result.Messages  = messages;
            result.SendQueue = sendQueues;
            return(result);
        }