QR_code_generator/database/seeders/Advisories/AdvisoriesTableSeeder.php

205 lines
11 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace Database\Seeders\Advisories;
use App\Imports\AdvisoryMembersImport;
use App\Models\Advisories\Advisory;
use App\Models\Advisories\AdvisoryType;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Storage;
use Maatwebsite\Excel\Facades\Excel;
class AdvisoriesTableSeeder extends Seeder {
public array $advisories = [
'tk465' => [
'number' => 'ТК 465',
'title' => 'Строительство',
'type' => AdvisoryType::COMMITTEE,
'is_main' => true,
//'members' => ['import' => 'import/advisories/tk465_members.xlsx'],
'children' => [
'group1' => [
'title' => 'Организационно-методические и общетехнические вопросы в строительстве',
'children' => [
'pk2' => [
'title' => 'Проектирование. Основные положения нормирования',
'number' => 'ПК 2',
'type' => AdvisoryType::COMMITTEE
],
'pk3' => [
'title' => 'Строительство. Основные положения нормирования',
'number' => 'ПК 3',
'type' => AdvisoryType::COMMITTEE
],
'pk4' => [
'title' => 'Обследование и мониторинг технического состояния зданий и сооружений. Ремонт, восстановление и усиление конструкций зданий и сооружений',
'number' => 'ПК 4',
'type' => AdvisoryType::COMMITTEE,
'children' => [
'rg4.1' => [
'title' => 'Обследование и мониторинг технического состояния зданий и сооружений. Ремонт, восстановление и усиление конструкций зданий и сооружений',
'number' => 'РГ 4.1',
'type' => AdvisoryType::WORKGROUP
]
]
],
'pk6' => [
'title' => 'Пожаробезопасность в строительстве',
'number' => 'ПК 6',
'type' => AdvisoryType::COMMITTEE
],
'pk7' => [
'title' => 'Сейсмобезопасность в строительстве',
'number' => 'ПК 7',
'type' => AdvisoryType::COMMITTEE
],
'pk8.1' => [
'title' => 'Энергосбережение в зданиях',
'number' => 'ПК 8.1',
'type' => AdvisoryType::COMMITTEE
],
'pk8.2' => [
'title' => 'Строительная физика',
'number' => 'ПК 8.2',
'type' => AdvisoryType::COMMITTEE
]
]
],
'group2' => [
'title' => 'Здания и сооружения',
'children' => [
'pk10' => [
'title' => 'Жилые, общественные и производственные здания и сооружения',
'number' => 'ПК 10',
'type' => AdvisoryType::COMMITTEE
],
'pk11' => [
'title' => 'Проектирование и строительство транспортных сооружений',
'number' => 'ПК 11',
'type' => AdvisoryType::COMMITTEE
],
'pk12' => [
'title' => 'Проектирование и строительство гидротехнических и мелиоративных сооружений',
'number' => 'ПК 12',
'type' => AdvisoryType::COMMITTEE
],
'pk13' => [
'title' => 'Проектирование и строительство магистральных и промысловых трубопроводов, хранилищ нефти и газа',
'number' => 'ПК 13',
'type' => AdvisoryType::COMMITTEE
]
]
],
'group3' => [
'title' => 'Наружные и внутренние инженерные сети и оборудование',
'children' => [
'pk14' => [
'title' => 'Проектирование и строительство сетей теплоснабжения, отопления и вентиляции',
'number' => 'ПК 14',
'type' => AdvisoryType::COMMITTEE
],
'pk15' => [
'title' => 'Проектирование и строительство сетей водоснабжения и водоотведения',
'number' => 'ПК 15',
'type' => AdvisoryType::COMMITTEE
],
'pk16' => [
'title' => 'Проектирование и строительство сетей газоснабжения и газораспределения',
'number' => 'ПК 16',
'type' => AdvisoryType::COMMITTEE
],
'pk17.1' => [
'title' => 'Системы электросвязи зданий и сооружений',
'number' => 'ПК 17.1',
'type' => AdvisoryType::COMMITTEE
],
'pk17.2' => [
'title' => 'Системы электроснабжения зданий и сооружений',
'number' => 'ПК 17.2',
'type' => AdvisoryType::COMMITTEE
]
]
],
'group4' => [
'title' => 'Строительные конструкции и основания',
'children' => [
'pk18' => [
'title' => 'Надежность строительных конструкций и оснований',
'number' => 'ПК 18',
'type' => AdvisoryType::COMMITTEE
],
'pk20' => [
'title' => 'Металлические конструкции',
'number' => 'ПК 20',
'type' => AdvisoryType::COMMITTEE
],
'pk21' => [
'title' => 'Бетонные и железобетонные конструкции. Заполнители, бетоны и растворы',
'number' => 'ПК 21',
'type' => AdvisoryType::COMMITTEE,
'children' => [
'rg21.1' => [
'title' => 'Заполнители, бетоны и растворы',
'number' => 'РГ 21.1',
'type' => AdvisoryType::WORKGROUP
],
'rg21.2' => [
'title' => 'Сухие строительные смеси',
'number' => 'РГ 21.2',
'type' => AdvisoryType::WORKGROUP
]
]
],
'pk22' => [
'title' => 'Каменные конструкции',
'number' => 'ПК 22',
'type' => AdvisoryType::COMMITTEE
],
'pk23' => [
'title' => 'Деревянные конструкции',
'number' => 'ПК 23',
'type' => AdvisoryType::COMMITTEE
],
'pk24' => [
'title' => 'Блоки оконные, дверные и воротные. Комплектующие изделия и материалы',
'number' => 'ПК 24',
'type' => AdvisoryType::COMMITTEE
],
'pk25' => [
'title' => 'Ограждающие конструкции зданий, в т.ч. фасадные',
'number' => 'ПК 25',
'type' => AdvisoryType::COMMITTEE
],
'pk26' => [
'title' => 'Композитные полимерные конструкции и изделия строительного назначения',
'number' => 'ПК 26',
'type' => AdvisoryType::COMMITTEE
]
]
]
]
]
];
public function run() {
collect($this->advisories)->each(function($data, $name) {
$this->importAdvisory($name, $data);
});
}
public function importAdvisory($name, $data, $parent = null) {
$query = $parent ? $parent->children() : Advisory::query();
$advisory = $query->firstOrCreate(['name' => $name]);
$advisory->update(collect($data)->except('members', 'children')->all());
$this->importAdvisoryMembers($advisory, $data['members'] ?? []);
collect($data['children'] ?? [])->each(function($data, $name) use($advisory) {
$this->importAdvisory($name, $data, $advisory);
});
}
public function importAdvisoryMembers(Advisory $advisory, $data) {
if ($path = $data['import'] ?? null) Excel::import(new AdvisoryMembersImport($advisory), Storage::path($path));
}
}