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); }