Example #1
0
        private void Execute(Campaign c, DateTime executeDate, bool test)
        {
            Execution ce = new Execution( );

            ce.Campaign      = c;
            ce.RunDate       = executeDate;
            ce.DateCreated   = DateTime.Now;
            ce.TestExecution = test;

            ExecutionDao cd = new ExecutionDao(sessionFactoryConfigPath);

            cd.Save(ce);
        }
        /// <summary>
        /// Process all the campaigns in the system and send the mails to the user subscribed.
        /// If dynamic campaigns are defined, the corresponding component must be located in the bin folder to be loaded dynamically.
        /// </summary>
        /// <returns>Any error occured during processing.</returns>
        /// <remarks>To be executed once a day.</remarks>
        public bool ExecuteAll(out string errors, bool testExecution)
        {
            errors = string.Empty;

            // Check if should be executed today
            bool execute = false;

            foreach (DayOfWeek day in DaysToExecute)
            {
                if (day == DateTime.Today.DayOfWeek)
                {
                    execute = true;
                    break;
                }
            }

            if (!execute)
            {
                return(true);
            }

            ProcessExecutionDao ped = new ProcessExecutionDao(SessionFactoryConfigPath);
            CampaignDao         cd  = new CampaignDao(SessionFactoryConfigPath);

            ArrayList arr = new ArrayList(4);

            arr.Add(MailFrequency.TimeSpan);
            arr.Add(MailFrequency.Daily);
            if (DateTime.Today.DayOfWeek == WeekDay)
            {
                arr.Add(MailFrequency.Weekly);
            }
            if (DateTime.Today.Day == MonthDay)
            {
                arr.Add(MailFrequency.Monthly);
            }

            IList <Campaign> campaigns = cd.GetPendingAutomatic(applicationName, false, arr.ToArray());

            foreach (Campaign c in campaigns)
            {
                if (c.Frequency == MailFrequency.TimeSpan || ped.ExecutedToday(applicationName, c) == null)
                {
                    int position = ((int)c.Frequency) - 1;

                    bool run = false;

                    // Ejecuto el proceso si paso el tiempo desde la ultima vez
                    if (c.Frequency == MailFrequency.TimeSpan)
                    {
                        ProcessExecution pe = ped.ExecutedLast(applicationName, c);
                        if (pe != null)
                        {
                            TimeSpan diff = DateTime.Now - pe.RunDate;
                            if (diff.Hours > TimeSpan.Parse(TimesToExecute[position]).Hours ||
                                (diff.Hours == TimeSpan.Parse(TimesToExecute[position]).Hours&& diff.Minutes >= TimeSpan.Parse(TimesToExecute[position]).Minutes))
                            {
                                run = true;
                            }
                        }
                        else
                        {
                            run = true;
                        }
                    }
                    // Ejecuto el proceso diario luego de la hora establecida
                    else if (
                        (
                            DateTime.Now.Hour == Convert.ToInt32(TimeSpan.Parse(TimesToExecute[position]).Hours) &&
                            DateTime.Now.Minute >= Convert.ToInt32(TimeSpan.Parse(TimesToExecute[position]).Minutes)
                        ) ||
                        DateTime.Now.Hour > Convert.ToInt32(TimeSpan.Parse(TimesToExecute[position]).Hours)
                        )
                    {
                        run = true;
                    }

                    if (run)
                    {
                        ExecuteCampaign(ref errors, c, testExecution);

                        ProcessExecution pe = new ProcessExecution( );
                        pe.ApplicationName = applicationName;
                        pe.Campaign        = c;
                        pe.RunDate         = DateTime.Now;
                        ped.Save(pe);
                    }
                }
            }

            // Ejecuto las campaƱas scheduleadas manualmente
            ExecutionDao ced = new ExecutionDao(SessionFactoryConfigPath);

            foreach (Execution ce in ced.GetPendings(applicationName))
            {
                // Ejecuto el proceso diario luego de la hora establecida
                if ((DateTime.Now - ce.RunDate).Ticks >= 0)
                {
                    ExecuteCampaign(ref errors, ce.Campaign, ce.TestExecution);
                    ced.Delete(ce);
                }
            }

            return(errors == string.Empty);
        }