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);
}
}
