/// <summary> /// Método que inicializa los schedulers en el caso de alguna configuración en el modulo General Settings /// </summary> /// <param name="configuration"></param> /// <param name="countryId"></param> /// <param name="currencyId"></param> public void GeneralSettingsStart(GeneralSettingsConfigurationScheduler configuration, int countryId, int currencyId) { PostACHConfigurationScheduler postACHConfiguration = new PostACHConfigurationScheduler(); SettlementConfigurationScheduler settlementConfiguration = new SettlementConfigurationScheduler(); ClosingProcessesConfigurationScheduler closingProcessesConfiguration = new ClosingProcessesConfigurationScheduler(); postACHConfiguration.PostACHConfiguration = configuration.PostACHConfiguration; postACHConfiguration.GeneralSettingConfiguration = configuration.GeneralSettingConfiguration; settlementConfiguration.GeneralSettingConfiguration = configuration.GeneralSettingConfiguration; settlementConfiguration.SettlementConfiguration = configuration.SettlementConfiguration; closingProcessesConfiguration.GeneralSettingConfiguration = configuration.GeneralSettingConfiguration; closingProcessesConfiguration.ClosingProcessesConfiguration = configuration.ClosingProcessesConfiguration; if (postACHConfiguration.PostACHConfiguration != null) { this.PostACHStart(postACHConfiguration, countryId, currencyId); } if (settlementConfiguration.SettlementConfiguration.Any()) { this.SettlementStart(settlementConfiguration, countryId, currencyId); } if (closingProcessesConfiguration.ClosingProcessesConfiguration != null) { this.ClosingProcessesStart(closingProcessesConfiguration, countryId, currencyId); } }
/// <summary> /// Método que inicializa la configuración del scheduler en el caso del proceso Settlement /// </summary> /// <param name="configuration"></param> /// <param name="countryId"></param> /// <param name="currencyId"></param> public void SettlementStart(SettlementConfigurationScheduler configuration, int countryId, int currencyId) { string countryName = configuration.SettlementConfiguration.FirstOrDefault().TransactionTypeConfigurationCountryCurrency.TransactionTypeConfigurationCountry.Country.Name.Trim(); string group = string.Format("{0}_{1}_settlementGroup", countryName, currencyId); string[] groupsToDelete = new string[] { group }; if (RemoveJobsByGroup(groupsToDelete)) { if (configuration.SettlementConfiguration.Any()) { if (configuration.SettlementConfiguration.Any(c => c.ExecutionModeId == Utilitarios.Base.ExecutionMode.Automatic)) { string daysToExecute = GenerateDaysOfWeek(configuration.GeneralSettingConfiguration); TimeSpan morningSettlement; TimeSpan?afternoonSettlement; foreach (var item in configuration.SettlementConfiguration.Where(p => p.ExecutionModeId == Utilitarios.Base.ExecutionMode.Automatic)) { if (item.MorningSettlement.HasValue) { morningSettlement = (TimeSpan)item.MorningSettlement; afternoonSettlement = (TimeSpan?)item.AfternoonSettlement; int morningSecondsToExecute = morningSettlement.Seconds; int morningMinutesToExecute = morningSettlement.Minutes; int morningHoursToExecute = morningSettlement.Hours; string morningCronExpression = string.Format("{0} {1} {2} {3} {4} {5}", morningSecondsToExecute.ToString(), morningMinutesToExecute.ToString(), morningHoursToExecute.ToString(), "?", "*", daysToExecute); var id = Guid.NewGuid(); IJobDetail jobMorningSettlement = JobBuilder.Create <SettlementTask>() .StoreDurably(true) .WithIdentity(string.Format("job_ST_{0}_{1}_{2}_{3}_{4}", countryName, id, item.Description, item.MorningText, currencyId), group) .UsingJobData("countryId", countryId.ToString()) .UsingJobData("currencyId", currencyId.ToString()) .UsingJobData("transactionTypeConfigurationCountryCurrencyId", item.TransactionTypeConfigurationCountryCurrencyId.ToString()) .Build(); ITrigger morningTrigger = TriggerBuilder.Create() .WithIdentity(string.Format("tgr_ST_AM_{0}_{1}_{2}_{3}_{4}", countryName, id, item.Description, item.MorningText, currencyId), group) .ForJob(jobMorningSettlement) .WithSchedule(CronScheduleBuilder.CronSchedule(morningCronExpression) .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById(configuration.GeneralSettingConfiguration.TimeZone))) .Build(); this.scheduler.ScheduleJob(jobMorningSettlement, morningTrigger); if (afternoonSettlement.HasValue) { int afternoonSecondsToExecute = afternoonSettlement.Value.Seconds; int afternoonMinutesToExecute = afternoonSettlement.Value.Minutes; int afternoonHoursToExecute = afternoonSettlement.Value.Hours; string afternoonCronExpression = string.Format("{0} {1} {2} {3} {4} {5}", afternoonSecondsToExecute.ToString(), afternoonMinutesToExecute.ToString(), afternoonHoursToExecute.ToString(), "?", "*", daysToExecute); IJobDetail jobAfternoonSettlement = JobBuilder.Create <SettlementTask>() .StoreDurably(true) .WithIdentity(string.Format("job_ST_{0}_{1}_{2}_{3}_{4}", countryName, id, item.Description, item.AfternoonText, currencyId), group) .UsingJobData("countryId", countryId.ToString()) .UsingJobData("currencyId", currencyId.ToString()) .UsingJobData("transactionTypeConfigurationCountryCurrencyId", item.TransactionTypeConfigurationCountryCurrencyId.ToString()) .Build(); ITrigger afternoonTrigger = TriggerBuilder.Create() .WithIdentity(string.Format("tgr_ST_PM_{0}_{1}_{2}_{3}_{4}", countryName, id, item.Description, item.AfternoonText, currencyId), group) .ForJob(jobAfternoonSettlement) .WithSchedule(CronScheduleBuilder.CronSchedule(afternoonCronExpression) .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById(configuration.GeneralSettingConfiguration.TimeZone))) .Build(); this.scheduler.ScheduleJob(jobAfternoonSettlement, afternoonTrigger); } this.scheduler.Start(); } } } } } }