Как улучшить способ обработки повторяющихся событий в заблокированный день - PullRequest
0 голосов
/ 01 ноября 2018

В настоящее время я использую RRULES rlanvin для обработки преобразования строки в данные формата RRULE. Я успешно преобразовал, но у меня есть несколько проблем.

В моем календаре я устанавливаю событие ежедневно каждые 10 дней, начиная с 1 декабря, и через 6 раз оно заканчивается. Поэтому в моем представлении календаря дни, которые я заблокировал, составляют:

 - 1st December
 - 11th December
 - 21st December
 - 31st December

И у меня есть вход - Когда я ввожу листья_темп_даты 1 декабря, а даты_переходов 4 декабря, моя заявка на отпуск отклоняется (это правда, потому что день заблокирован) - Когда я ввожу уйду date_from_date 8 декабря, а date_to_date 12 декабря, мой запрос на отпуск принят (он содержит 11 декабря день блокировки - неверная логика)

Это мой код ниже, чтобы проверить и обработать событие Recurring в RRULES

$recurring_pattern = Events::where('event_type_id', 2 )
            ->where('is_recurring', 1)
            ->get();

            foreach ($recurring_pattern as $key) {
            $attributes = json_decode($key->recurring_pattern, true);
//            dd($recurring_patterns);

            //Process the delimiter inside pattern and components
            $patterns = explode(';', trim($attributes['pattern'], ';'));
            $rules = [
                'DTSTART' => $attributes['from_date'],
                'FREQ' => $attributes['freq'] + 1,
                'INTERVAL' => $attributes['interval'],
            ];

            foreach ($patterns as $pattern) {
                list($key, $value) = explode('=', $pattern);
                $rules[$key] = $value;
            }

            //RRULE to get the data in json_decode
            $rrule = new RRule($rules);

            foreach ($rrule as $key) {
                $key->format('Y M d');
                if($key <= $from_date_ends && $key >= $from_date_stats ||
                    $key <= $to_date_ends && $key >= $to_date_stats ||
                    $key <= $from_date_ends && $key >= $to_date_stats||
                    $key <= $to_date_ends && $key >= $from_date_stats){
                    dd('here');
                    return false;
                }
            }
        }

Когда я использую dump ($ rrule), он возвращает этот результат

#cache: array:6 [
    0 => DateTime @1543622400 {#273
      date: 2018-12-01 00:00:00.0 UTC (+00:00)
    }
    1 => DateTime @1544486400 {#272
      date: 2018-12-11 00:00:00.0 UTC (+00:00)
    }
    2 => DateTime @1545350400 {#274
      date: 2018-12-21 00:00:00.0 UTC (+00:00)
    }
    3 => DateTime @1546214400 {#275
      date: 2018-12-31 00:00:00.0 UTC (+00:00)
    }
    4 => DateTime @1547078400 {#276
      date: 2019-01-10 00:00:00.0 UTC (+00:00)
    }
    5 => DateTime @1547942400 {#277
      date: 2019-01-20 00:00:00.0 UTC (+00:00)
    }
  ]

Это результат, который я хочу получить, независимо от того, введут ли они from_date и to_date, которые содержат эти дни (которые называются заблокированными), или нет. Что мне нужно, чтобы улучшить и уловить логику событий дня блока (11 декабря, 21 декабря и 31 декабря). Огромное спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...