예제 #1
0
        public ScheduleDto AddSchedule(AddScheduleCommand cmd)
        {
            var      factory  = new ScheduleFactory();
            Schedule schedule = null;

            if (!Enum.TryParse(typeof(ScheduleType), cmd.ScheduleType, out var scheduleType))
            {
                throw new ArgumentException($"Invalid schedule type: '{cmd.ScheduleType}'", nameof(cmd.ScheduleType));
            }

            switch (scheduleType)
            {
            case ScheduleType.DateTime:
                schedule = factory.CreateDateTimeSchedule(cmd.Name, cmd.Description, cmd.StartDate, cmd.StartTime, cmd.Duration, cmd.EnabledUntil, cmd.IsEnabled);
                break;

            case ScheduleType.DaysOfMonth:
                schedule = factory.CreateDayOfMonthSchedule(cmd.Name, cmd.Description, cmd.StartDate, cmd.Days, cmd.StartTime, cmd.Duration, cmd.EnabledUntil, cmd.IsEnabled);
                break;

            case ScheduleType.DaysOfWeek:
                schedule = factory.CreateDayOfWeekSchedule(cmd.Name, cmd.Description, cmd.StartDate, cmd.Days, cmd.StartTime, cmd.Duration, cmd.EnabledUntil, cmd.IsEnabled);
                break;

            case ScheduleType.EvenDays:
                schedule = factory.CreateEvenDaysSchedule(cmd.Name, cmd.Description, cmd.StartDate, cmd.StartTime, cmd.Duration, cmd.EnabledUntil, cmd.IsEnabled);
                break;

            case ScheduleType.OddDays:
                factory.CreateOddDaysSchedule(cmd.Name, cmd.Description, cmd.StartDate, cmd.StartTime, cmd.Duration, cmd.EnabledUntil, cmd.IsEnabled);
                break;
            }

            foreach (var id in cmd.ZoneIds)
            {
                var zone = zoneRepository.Find(id);
                if (zone == null)
                {
                    throw new Exception($"Zone with id '{id}' does not exist");
                }
                schedule.AttachZone(id);
            }
            scheduleRepository.Add(schedule);

            AddToScheduler(schedule);
            return(new ScheduleDto(schedule.Id, schedule.Name, schedule.Description, schedule.ScheduleType.ToString(), schedule.StartTime, schedule.StartDate, schedule.Days, schedule.IsEnabled,
                                   schedule.Duration, schedule.EnabledUntil, schedule.ZoneIds));
        }
예제 #2
0
        public async Task Execute(IJobExecutionContext context)
        {
            var scheduleId = (Guid)context.JobDetail.JobDataMap.Get("scheduleId");

            var schedule = scheduleRepository.Find(scheduleId);
            var zones    = zoneRepository.Find(schedule.ZoneIds);

            foreach (var zone in zones)
            {
                controlService.Start(zone.Channel);
            }

            await Task.Delay(schedule.Duration);

            foreach (var zone in zones)
            {
                controlService.Stop(zone.Channel);
            }
        }
예제 #3
0
        //
        // GET: /Zones/Details/5

        public ViewResult Details(System.Guid id)
        {
            return(View(zoneRepository.Find(id)));
        }
예제 #4
0
        public ZoneDto GetZone(Guid id)
        {
            var zone = zoneRepository.Find(id);

            return(new ZoneDto(zone.Id, zone.Name, zone.Description, zone.Channel, zone.IsEnabled, controlService.IsStarted(zone.Channel)));
        }
예제 #5
0
 // GET: /Zones/Details/5
 public ViewResult Details(long id)
 {
     return(View(zoneRepository.Find(id)));
 }