205 lines
11 KiB
PHP
205 lines
11 KiB
PHP
<?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));
|
||
}
|
||
|
||
}
|