trinion_mrp-1.0.x-dev/src/Form/ProizvodstvenniyKalendarForm.php

src/Form/ProizvodstvenniyKalendarForm.php
<?php

declare(strict_types=1);

namespace Drupal\trinion_mrp\Form;

use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\trinion_mrp\Controller\ProizvodstvenniyKalendarController;
use Symfony\Component\HttpFoundation\File\UploadedFile;

/**
 * Provides a Trinion MRP form.
 */
final class ProizvodstvenniyKalendarForm extends FormBase {

  /**
   * {@inheritdoc}
   */
  public function getFormId(): string {
    return 'trinion_mrp_proizvodstvenniy_kalendar';
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state): array {
    $calendar_data = \Drupal::state()->get('trinion_mrp_proizvodstvenniy_kalendar');
    $form['file'] = [
      '#type' => 'file',
      '#title' => 'Загрузка нерабочих дней',
    ];
    $form['calendar_start_day'] = [
      '#type' => 'date',
      '#title' => 'Дата начала планирования',
      '#required' => TRUE,
      '#default_value' => $calendar_data['start_date'] ?? NULL,
    ];
    $form['plan_length'] = [
      '#type' => 'textfield',
      '#title' => 'Длина планируемого периода в рабочих днях',
      '#required' => TRUE,
      '#default_value' => $calendar_data['length_days'] ?? NULL,
    ];
    $form['submit'] = [
      '#type' => 'submit',
      '#value' => $this->t('Proceed'),
    ];

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state): void {
    $ne_rabochie = \Drupal::state()->get('trinion_mrp_ne_rabochie_dni');
    if ($file = \Drupal::request()->files->all()['files']['file']) {
      $content = $file->getContent();
      if ($data = json_decode($content)) {
        $holidays = [];
        foreach ($data->months as $month) {
          foreach (explode(',', $month->days) as $day) {
            if (strpos($day, '*'))
              continue;
            $day = (int)$day;
            $holidays[$month->month][$day] = $day;
          }
        }
        $ne_rabochie[$data->year] = $holidays;
        \Drupal::state()->set('trinion_mrp_ne_rabochie_dni', $ne_rabochie);
        \Drupal::messenger()->addStatus('Сохранены нерабочие дни за ' . $data->year . ' год');
      }
    }
    $start_date = $form_state->getValue('calendar_start_day');
    $kalendar_length = $form_state->getValue('plan_length');
    $calendar = new ProizvodstvenniyKalendarController();
    $calendar = $calendar->createCalendar($start_date, $kalendar_length, $ne_rabochie);
    $rabochie = [];
    foreach ($calendar as $day) {
      if ($day['num'] != '' && !isset($ne_rabochie[$day['year']][$day['month']][$day['day']]))
        $rabochie[] = $day;
    }
    $calendar = [
      'start_date' => $start_date,
      'length_days' => $kalendar_length,
      'days' => $rabochie,
    ];
    \Drupal::state()->set('trinion_mrp_proizvodstvenniy_kalendar', $calendar);
  }
}

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

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