84 lines
3.7 KiB
PHP
84 lines
3.7 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
|
||
],
|
||
'pk4' => [
|
||
'title' => 'Обследование и мониторинг технического состояния зданий и сооружений. Ремонт, восстановление и усиление конструкций зданий и сооружений',
|
||
'number' => 'ПК 4',
|
||
'type' => AdvisoryType::COMMITTEE
|
||
],
|
||
'pk6' => [
|
||
'title' => 'Пожаробезопасность в строительстве',
|
||
'number' => 'ПК 6',
|
||
'type' => AdvisoryType::COMMITTEE
|
||
]
|
||
]
|
||
],
|
||
'group2' => [
|
||
'title' => 'Здания и сооружения',
|
||
'children' => [
|
||
'pk10' => [
|
||
'title' => 'Жилые, общественные и производственные здания и сооружения',
|
||
'number' => 'ПК 2',
|
||
'type' => AdvisoryType::COMMITTEE
|
||
]
|
||
]
|
||
],
|
||
'group3' => [
|
||
'title' => 'Наружные и внутренние инженерные сети и оборудование',
|
||
'children' => []
|
||
],
|
||
'group4' => [
|
||
'title' => 'Строительные конструкции и основания',
|
||
'children' => []
|
||
]
|
||
]
|
||
]
|
||
];
|
||
|
||
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));
|
||
}
|
||
|
||
}
|