예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        /// <summary>
        /// Método que inicializa la configuración del scheduler en el caso del proceso Post ACH
        /// </summary>
        /// <param name="configuration"></param>
        /// <param name="countryId"></param>
        /// <param name="currencyId"></param>
        public void PostACHStart(PostACHConfigurationScheduler configuration, int countryId, int currencyId)
        {
            string countryName = configuration.PostACHConfiguration.Country.Name.Trim();

            string group = string.Format("{0}_{1}_postACHGroup", countryName, currencyId);

            string[] groupsToDelete = new string[] { group };

            if (RemoveJobsByGroup(groupsToDelete))
            {
                if (configuration.PostACHConfiguration.ExecutionModeId == Utilitarios.Base.ExecutionMode.Automatic)
                {
                    string   daysToExecute = GenerateDaysOfWeek(configuration.GeneralSettingConfiguration);
                    TimeSpan startTime     = (TimeSpan)configuration.PostACHConfiguration.StartTime;
                    TimeSpan finishTime    = (TimeSpan)configuration.PostACHConfiguration.FinishTime;
                    TimeSpan importTimer   = (TimeSpan)configuration.PostACHConfiguration.ImportTimer;

                    int minutesStartTime = startTime.Minutes;
                    int hoursStartTime   = startTime.Hours;

                    int minutesFinishTime = finishTime.Minutes;
                    int hoursFinishTime   = finishTime.Hours;

                    int cronMinutes = default(int);
                    int cronHours   = default(int);

                    if (importTimer.Minutes < 60)
                    {
                        cronMinutes = importTimer.Minutes;
                        cronHours   = 0;
                    }
                    else
                    {
                        cronMinutes = 0;
                        cronHours   = importTimer.Minutes / 60;
                    }

                    DateTime horaBase    = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, startTime.Hours, startTime.Minutes, 0);
                    DateTime horaTermino = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, finishTime.Hours, finishTime.Minutes, 0);

                    var id = Guid.NewGuid();

                    IJobDetail job = JobBuilder.Create <PostACHTask>()
                                     .StoreDurably(true)
                                     .WithIdentity(string.Format("job_PA_{0}_{1}_{2}", countryName, currencyId, id), group)
                                     .UsingJobData("countryId", countryId.ToString())
                                     .UsingJobData("currencyId", currencyId.ToString())
                                     .Build();

                    this.scheduler.AddJob(job, true);

                    do
                    {
                        string cron = string.Format("0 {0} {1} ? * {2}", horaBase.Minute, horaBase.Hour, daysToExecute);

                        ITrigger trigger = TriggerBuilder.Create()
                                           .WithIdentity(string.Format("tgr_PA_{0}_{1}_{2}", countryName, currencyId, id), group)
                                           .ForJob(job)
                                           .WithSchedule(CronScheduleBuilder.CronSchedule(cron)
                                                         .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById(configuration.GeneralSettingConfiguration.TimeZone)))
                                           .Build();

                        this.scheduler.ScheduleJob(trigger);

                        horaBase = horaBase.AddMinutes(importTimer.Minutes);
                        id       = Guid.NewGuid();
                    } while (horaBase <= horaTermino);

                    this.scheduler.Start();
                }
            }
        }