trinion_mrp-1.0.x-dev/src/Controller/ProizvodstvenniyKalendarController.php

src/Controller/ProizvodstvenniyKalendarController.php
<?php

declare(strict_types=1);

namespace Drupal\trinion_mrp\Controller;

use Drupal\Core\Controller\ControllerBase;

/**
 * Returns responses for Trinion MRP routes.
 */
final class ProizvodstvenniyKalendarController extends ControllerBase {

  /**
   * Builds the response.
   */
  public function __invoke(): array {
    $calendar_data = \Drupal::state()->get('trinion_mrp_proizvodstvenniy_kalendar');
    $calendar_start_day = $calendar_data['start_date'] ?? date('j.m.Y');
    $length_days = $calendar_data['length_days'] ?? 100;
    $ne_rabochie = \Drupal::state()->get('trinion_mrp_ne_rabochie_dni');
    $calendar = $this->createCalendar($calendar_start_day, $length_days, $ne_rabochie);

    $build['form'] = \Drupal::formBuilder()->getForm('Drupal\trinion_mrp\Form\ProizvodstvenniyKalendarForm', $calendar);

    $grouped_days = [];
    foreach ($calendar as $day) {
      $group_name = date('F Y', strtotime($day['date']));
      if (!isset($grouped_days[$group_name])) {
        for ($i = 1; $i < $day['week_day']; $i++) {
          $grouped_days[$group_name][] = [];
        }
      }
      $grouped_days[$group_name][] = $day;
    }

    $build['content'] = [
      '#theme' => 'proizvodstvenniy_kalendar',
      '#days' => $grouped_days,
    ];

    return $build;
  }

  public function createCalendar($start_date, $length_days, $ne_rabochie) {
    $calendar = [];
    $num = $j = $i = 0;
    $mon_date = $start_date;
    while (date('N', strtotime($mon_date)) != 1) {
      $mon_date = (date('Y-m-d', strtotime('-1 day', strtotime($mon_date))));
    }
    $start_time_stamp = strtotime($mon_date);

    do {
      $year = date('Y', strtotime($i . ' days', $start_time_stamp));
      $month = date('n', strtotime($i . ' days', $start_time_stamp));
      $day = date('j', strtotime($i . ' days', $start_time_stamp));
      $date = date('Y-m-d', strtotime($i . ' days', $start_time_stamp));
      $cal = [
        'date' => $date,
        'day' => $day,
        'year' => $year,
        'month' => $month,
        'week_day' => date('N', strtotime($i . ' days', $start_time_stamp)),
        'num' => '',
      ];
      $i++;
      if (isset($ne_rabochie[$year][$month][$day])) {
        $calendar[] = $cal;
        continue;
      }
      if ($date >= $start_date) {
        $cal['num'] = $num;
        $num++;
        if ($num == 1000)
          $num = 0;
        $j++;
      }
      $calendar[] = $cal;
    } while ($j < $length_days);

    $first_day = TRUE;
    $last_work_key = 0;
    foreach ($calendar as $key => $day) {
      if ($day['week_day'] == 1) {
        $first_day = TRUE;
      }
      if ($first_day && $day['num'] != '') {
        $calendar[$key]['w_start'] = TRUE;
        $first_day = FALSE;
      }

      if ($day['num'] != '')
        $last_work_key = $key;
      if ($day['week_day'] == 7) {
        $calendar[$last_work_key]['w_end'] = TRUE;
      }
    }

    return $calendar;
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc