diff --git a/app/Imports/NtdRegistryImport.php b/app/Imports/NtdRegistryImport.php new file mode 100644 index 0000000..2f43f5b --- /dev/null +++ b/app/Imports/NtdRegistryImport.php @@ -0,0 +1,65 @@ + ['prop' => 'name', 'required' => true], + 'link' => ['prop' => 'link'], + 'active_since' => ['prop' => 'active_since', 'date' => true], + 'active_till' => ['prop' => 'active_till', 'date' => true], + 'category' => ['prop' => 'cat_name', 'required' => true], + 'type' => ['prop' => 'type'], + 'agency' => ['prop' => 'agency'] + ]; + + + public function __construct() { + $this->registry = Registry::query()->where(['type' => RegistryType::NTD])->first(); + } + + public function collection(Collection $collection) { + $collection->each(function($row) use(&$data) { + if ($row = $this->mapData($row)) { + $this->importRow($row); + } + }); + } + + public function importRow($row) { + $category = $this->registry->categories()->firstOrCreate(['name' => $row['category']]); + $entry = $this->registry->entries()->firstOrCreate(['name' => $row['name'], 'category_id' => $category->id ?? 0]); + $active_since = (is_object($row['active_since'] ?? null)) ? $row['active_since'] : null; + $active_till = (is_object($row['active_till'] ?? null)) ? $row['active_till'] : null; + $asset = $this->download($row['link'] ?? null); + $link = $this->checkLink($row['link']); + $entry->update(['active_since' => $active_since, 'active_till' => $active_till, 'asset_id' => $asset->id ?? null, 'link' => $link]); + $entry->properties->setValues(['normative-document-type' => ['title' => $row['type'] ?? null], 'host-agency' => ['title' => $row['agency'] ?? null]]); + } + + public function download($url): ?Asset { + return (new DocumentDownloadService())->download($url, 'registries/ntd'); + } + + public function checkLink($link) { + $ext = pathinfo($link, PATHINFO_EXTENSION); + $host = parse_url($link, PHP_URL_HOST); + $result = null; + if ($ext !== 'pdf') { + if ($host && !in_array($host, ['faufcc.ru', 'www.faufcc.ru'])) $result = $link; + }echo ("{$result}\n"); + return $result; + } + + +} diff --git a/app/Models/Registries/Entry.php b/app/Models/Registries/Entry.php index c0c1e7e..e3cfee5 100644 --- a/app/Models/Registries/Entry.php +++ b/app/Models/Registries/Entry.php @@ -31,6 +31,7 @@ class Entry extends Model { 'asset_id', 'number', 'name', + 'link', 'active_since', 'active_till', 'suspended_since', diff --git a/app/Models/Registries/RegistryType.php b/app/Models/Registries/RegistryType.php index ba07e76..4299cf4 100644 --- a/app/Models/Registries/RegistryType.php +++ b/app/Models/Registries/RegistryType.php @@ -15,6 +15,7 @@ class RegistryType { public const DISCUSSIONS = 'discussions'; public const RESEARCHES = 'researches'; public const TECHNICAL_CERTIFICATES = 'technical-certificates'; + public const NTD = 'ntd'; public const TITLES = [ self::SIMPLE => 'Простой реестр', @@ -27,7 +28,8 @@ class RegistryType { self::DEVELOPMENTS => 'Реестр планов разработки', self::DISCUSSIONS => 'Реестр публичных обсуждений', self::RESEARCHES => 'Реестр исследований', - self::TECHNICAL_CERTIFICATES => 'Реестр технических свидетельств' + self::TECHNICAL_CERTIFICATES => 'Реестр технических свидетельств', + self::NTD => 'Реестр нормативно-технической документации' ]; public const OPTIONS = [ @@ -42,6 +44,7 @@ class RegistryType { self::DEVELOPMENTS => ['categorized' => true, 'properties' => 'entry-properties-development'], self::DISCUSSIONS => ['properties' => 'entry-properties-discussion'], self::RESEARCHES => ['categories' => true, 'properties' => 'entry-properties-research'], - self::TECHNICAL_CERTIFICATES => ['properties' => 'entry-properties-technical-certificate', 'states' => true] + self::TECHNICAL_CERTIFICATES => ['properties' => 'entry-properties-technical-certificate', 'states' => true], + self::NTD => ['categories' => true, 'properties' => 'entry-properties-ntd', 'states' => true] ]; } \ No newline at end of file diff --git a/app/Services/Documents/DocumentDownloadService.php b/app/Services/Documents/DocumentDownloadService.php new file mode 100644 index 0000000..a376c02 --- /dev/null +++ b/app/Services/Documents/DocumentDownloadService.php @@ -0,0 +1,48 @@ + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'pdf' => 'application/pdf', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + ]; + + + public function __construct() { + } + + + public function download($url, $dir = null, $filename = null): ?Asset { + $info = pathinfo($url); + if (!empty($this->mimes[$info['extension'] ?? null])) { + $path = "public/documents"; + $filename = $filename ? "{$filename}.{$info['extension']}" : $info['basename']; + $path = $dir ? "{$path}/{$dir}/{$filename}" : "{$path}/{$filename}"; + $asset = Asset::query()->where(['path' => $path])->first(); + if (!$asset && Storage::put($path, Http::get($url)->body())) $asset = $this->makeAsset($path); + elseif ($asset) var_dump($asset->path); + } + return $asset ?? null; + } + public function makeAsset($path, $name = null) { + $info = pathinfo($path); + return Asset::create([ + 'type' => 'document', + 'path' => $path, + 'mime' => $this->mimes[$info['extension']] ?? null, + 'name' => $name ?? $info['basename'], + 'filename' => $info['basename'], + 'extension' => $info['extension'], + 'user_id' => ($user = Auth::user()) ? $user->id : null + ]); + } + + +} \ No newline at end of file diff --git a/app/Services/Documents/DocumentGeneratorService.php b/app/Services/Documents/DocumentGeneratorService.php index 8ebcb77..8ea1b41 100644 --- a/app/Services/Documents/DocumentGeneratorService.php +++ b/app/Services/Documents/DocumentGeneratorService.php @@ -2,8 +2,6 @@ namespace App\Services\Documents; -use App\Models\Asset; -use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; @@ -12,12 +10,6 @@ class DocumentGeneratorService { public array $data; public array $options = []; - public array $mimes = [ - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'pdf' => 'application/pdf', - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' - ]; - public static array $classes = [ 'pdf' => GeneratePdfDocument::class, 'word' => GenerateWordDocument::class @@ -44,15 +36,6 @@ class DocumentGeneratorService { } public function makeAsset($path, $name) { - $info = pathinfo($path); - return Asset::create([ - 'type' => 'document', - 'path' => $path, - 'mime' => $this->mimes[$info['extension']] ?? null, - 'name' => $name ?? $info['basename'], - 'filename' => $info['basename'], - 'extension' => $info['extension'], - 'user_id' => ($user = Auth::user()) ? $user->id : null - ]); + return (new DocumentDownloadService())->makeAsset($path, $name); } } \ No newline at end of file diff --git a/app/Services/Filters/Registries/EntryFilters.php b/app/Services/Filters/Registries/EntryFilters.php index 92202e0..fc67946 100644 --- a/app/Services/Filters/Registries/EntryFilters.php +++ b/app/Services/Filters/Registries/EntryFilters.php @@ -123,7 +123,7 @@ class EntryFilters extends FiltersService { if ($exceptNative) $filters = $filters->filter(function($val, $prop) { return Field::byName($prop)->exists(); }); - return $filters->except('registry', 'category', 'types', 'state')->filter(function($val) { + return $filters->except('registry', 'category', 'types')->filter(function($val) { return collect($val)->filter(function($val) {return $val;})->isNotEmpty(); })->isEmpty(); } diff --git a/app/Services/Forms/Registries/EntryForms.php b/app/Services/Forms/Registries/EntryForms.php index 93fadd2..eb1a0dc 100644 --- a/app/Services/Forms/Registries/EntryForms.php +++ b/app/Services/Forms/Registries/EntryForms.php @@ -14,6 +14,7 @@ use App\Transformers\Objects\FieldTransformer; use App\Transformers\Objects\ObjectPropertyTransformer; use App\Transformers\Registries\EntryTransformer; use Illuminate\Http\JsonResponse; +use Illuminate\Support\Str; class EntryForms extends FormsService { public array $formTitles = ['create' => 'Создание записи', 'update' => 'Редактирование записи']; @@ -34,7 +35,8 @@ class EntryForms extends FormsService { [ 'name' => 'name', 'title' => 'Наименование записи', - 'type' => FieldType::STRING, + 'type' => FieldType::TEXT, + 'maxLength' => 750, 'required' => true, 'value' => $model->name ?? null ], @@ -49,6 +51,13 @@ class EntryForms extends FormsService { 'title' => 'Документ', 'type' => FieldType::DOCUMENT, 'value' => ($asset = $model->asset ?? null) ? fractal($asset, new AssetTransformer()) : null + ], + [ + 'name' => 'link', + 'title' => 'Ссылка', + 'type' => FieldType::STRING, + 'maxLength' => 750, + 'value' => $model->link ?? null ] ]; return ['data' => $fields]; @@ -106,6 +115,7 @@ class EntryForms extends FormsService { $category = Category::byUuid($data['category'] ?? null)->first(); $data['asset_id'] = ($asset = Asset::byUuid($data['asset'] ?? null)->first()) ? $asset->id : null; $data['category_id'] = $category->id ?? 0; + $data['link'] = !empty($data['link']) ? Str::replace(env('APP_URL'), '', $data['link']) : null; $model = $registry->entries()->create($data); if ($object = $model->properties ?? null) $object->setValues($data); return fractal($model, new EntryTransformer())->respond(); @@ -114,6 +124,7 @@ class EntryForms extends FormsService { public function update(string $id, array $data): ?JsonResponse { $model = Entry::byUuid($id)->firstOrFail(); $data['asset_id'] = ($asset = Asset::byUuid($data['asset'] ?? null)->first()) ? $asset->id : null; + $data['link'] = !empty($data['link']) ? Str::replace(env('APP_URL'), '', $data['link']) : null; $model->update($data); if ($object = $model->properties ?? null) $object->setValues($data); return fractal($model->fresh(), new EntryTransformer())->respond(); diff --git a/app/Services/Registries/RegistryImportService.php b/app/Services/Registries/RegistryImportService.php index 12bfdbb..c5812c1 100644 --- a/app/Services/Registries/RegistryImportService.php +++ b/app/Services/Registries/RegistryImportService.php @@ -4,9 +4,7 @@ namespace App\Services\Registries; use App\Models\Asset; use App\Models\Registries\Registry; -use Illuminate\Support\Facades\Auth; -use Illuminate\Support\Facades\Http; -use Illuminate\Support\Facades\Storage; +use App\Services\Documents\DocumentDownloadService; use PHPHtmlParser\Dom; class RegistryImportService { @@ -30,34 +28,7 @@ class RegistryImportService { public function download($url, $dir = null, $filename = null): ?Asset { - $urlInfo = parse_url($url); - if (empty($urlInfo['host'])) { - $url = str_replace('//', '/', "faufcc.ru/{$url}"); - $url = "https://{$url}"; - } - $info = pathinfo($url); - if ($info['extension'] ?? null) { - $path = "public/documents/registries"; - $filename = $filename ? "{$filename}.{$info['extension']}" : $info['basename']; - $path = $dir ? "{$path}/{$dir}/{$filename}" : "{$path}/{$filename}"; - $asset = Asset::query()->where(['path' => $path])->first(); - if (!$asset && Storage::put($path, Http::get($url)->body())) $asset = $this->makeAsset($path); - elseif ($asset) var_dump($asset->path); - } - return $asset ?? null; + return (new DocumentDownloadService())->download($url, $dir, $filename); } - public function makeAsset($path, $name = null) { - $info = pathinfo($path); - return Asset::create([ - 'type' => 'document', - 'path' => $path, - 'mime' => $this->mimes[$info['extension']] ?? null, - 'name' => $name ?? $info['basename'], - 'filename' => $info['basename'], - 'extension' => $info['extension'], - 'user_id' => ($user = Auth::user()) ? $user->id : null - ]); - } - } \ No newline at end of file diff --git a/app/Services/Registries/RulesetImportService.php b/app/Services/Registries/RulesetImportService.php index 3dbe73e..7a142e3 100644 --- a/app/Services/Registries/RulesetImportService.php +++ b/app/Services/Registries/RulesetImportService.php @@ -100,7 +100,7 @@ class RulesetImportService extends RegistryImportService { $data['order-name'] = $orderName; $data['order-date'] = $orderDate ? Date::create($orderDate) : null; $filename = $orderName ? Str::slug("Приказ {$orderName} от {$orderDate}") : null; - $data['order-document'] = $this->download($link->href, 'ruleset', $filename); + $data['order-document'] = $this->download($link->href, 'registries/ruleset', $filename); } else $data['listings'][] = ['name' => Str::replace('Постановление правительства №', 'pp', $link->text)]; } } else { diff --git a/app/Transformers/Registries/EntryTransformer.php b/app/Transformers/Registries/EntryTransformer.php index 766f390..3839477 100644 --- a/app/Transformers/Registries/EntryTransformer.php +++ b/app/Transformers/Registries/EntryTransformer.php @@ -25,6 +25,7 @@ class EntryTransformer extends TransformerAbstract { 'id' => $model->uuid, 'number' => $model->number, 'name' => $model->name, + 'link' => $model->link, 'state' => $model->state, 'active_since' => $model->active_since ? $model->active_since->toIso8601String() : null, 'active_till' => $model->active_till ? $model->active_till->toIso8601String() : null, diff --git a/database/migrations/2023_06_21_195350_create_registry_entries_table.php b/database/migrations/2023_06_21_195350_create_registry_entries_table.php index 7be05dd..f3934ec 100644 --- a/database/migrations/2023_06_21_195350_create_registry_entries_table.php +++ b/database/migrations/2023_06_21_195350_create_registry_entries_table.php @@ -21,6 +21,7 @@ class CreateRegistryEntriesTable extends Migration $table->integer('asset_id')->index()->nullable(); $table->string('number')->index()->nullable(); $table->string('name', 750)->index()->nullable(); + $table->string('link', 750)->nullable(); $table->date('active_since')->index()->nullable(); $table->date('active_till')->index()->nullable(); $table->date('suspended_since')->index()->nullable(); diff --git a/database/seeders/Dictionaries/DictionariesTableSeeder.php b/database/seeders/Dictionaries/DictionariesTableSeeder.php index d85ac44..926159a 100644 --- a/database/seeders/Dictionaries/DictionariesTableSeeder.php +++ b/database/seeders/Dictionaries/DictionariesTableSeeder.php @@ -45,6 +45,21 @@ class DictionariesTableSeeder extends Seeder { 'title' => 'Виды исследовательских работ', 'items' => ['nir' => 'НИР', 'niokr' => 'НИОКР'] ], + 'normative-document-types' => [ + 'title' => 'Виды нормативно-техничесих документов', + 'items' => ['sp' => 'СП', 'gost' => 'ГОСТ', 'sn' => 'СН', 'rk-eek' => 'Решение коллегии ЕЭК', 'gost-r' => 'ГОСТ Р', + 'sanpin' => 'СанПиН', 'fnip' => 'ФНиП', 'foiv' => 'Приказ ФОИВа', 'pp-rf' => 'Постановление Правительства РФ', + 'rp-rf' => 'Распоряжение Правительства РФ', 'tr-eaes' => 'Технический регламент ЕАЭС', 'fz' => 'Федеральный закон', + 'sto' => 'СТО (ПБЯ)', 'rs-eek' => 'Решение Совета ЕЭК', 'st-sev' => 'СТ СЭВ'] + ], + 'host-agencies' => [ + 'title' => 'Исполнительные органы', + 'items' => ['minstroy' => 'Минстрой России', 'gov-rf' => 'Правительство РФ', 'kol-eek' => 'Коллегия ЕЭК', 'mintrans' => 'Минтранс России', + 'mchs' => 'МЧС России', 'mincult' => 'Минкультуры России', 'minprirody' => 'Минприроды России', 'rospotreb' => 'Роспотребнадзор', + 'rosstandart' => 'Росстандарт', 'rostechnadzor' => 'Ростехнадзор', 'rosatom' => 'ГК «Росатом»', 'president' => 'Президент Российской Федерации', + 'minenergo' => 'Минэнерго России', 'sovet-eek' => 'Совет ЕЭК', 'minselhoz' => 'Минсельхоз России', 'mintrud' => 'Минтруд России', + 'rosavia' => 'Росавиация'] + ], 'moderate-permissions' => [ 'title' => 'Права', 'items' => ['applications' => 'Рассмотрение предварительных заявок'] diff --git a/database/seeders/Objects/FieldsTableSeeder.php b/database/seeders/Objects/FieldsTableSeeder.php index 5c8e9ef..230202e 100644 --- a/database/seeders/Objects/FieldsTableSeeder.php +++ b/database/seeders/Objects/FieldsTableSeeder.php @@ -282,6 +282,23 @@ class FieldsTableSeeder extends Seeder { 'type' => FieldType::STRING ], + 'normative-document-type' => [ + 'title' => 'Тип документа', + 'type' => FieldType::RELATION, + 'params' => [ + 'related' => DictionaryItem::class, 'transformer' => DictionaryItemTransformer::class, + 'options' => ['show' => true, 'whereHas' => ['dictionary' => ['name' => 'normative-document-types']]] + ] + ], + 'host-agency' => [ + 'title' => 'Принявший орган', + 'type' => FieldType::RELATION, + 'params' => [ + 'related' => DictionaryItem::class, 'transformer' => DictionaryItemTransformer::class, + 'options' => ['show' => true, 'whereHas' => ['dictionary' => ['name' => 'host-agencies']]] + ] + ], + 'operation-type' => [ 'title' => 'Вид работы', 'type' => FieldType::RELATION, diff --git a/database/seeders/Objects/ObjectTypeFieldsTableSeeder.php b/database/seeders/Objects/ObjectTypeFieldsTableSeeder.php index 8854d7d..7253571 100644 --- a/database/seeders/Objects/ObjectTypeFieldsTableSeeder.php +++ b/database/seeders/Objects/ObjectTypeFieldsTableSeeder.php @@ -99,6 +99,11 @@ class ObjectTypeFieldsTableSeeder extends Seeder { 'company-email', 'company-phone', 'producer-name', 'producer-address'] ] ], + 'entry-properties-ntd' => [ + 'common' => [ + 'fields' => ['normative-document-type', 'host-agency'] + ] + ], 'entry-operation-ruleset' => [ 'common' => [ diff --git a/database/seeders/Objects/ObjectTypesTableSeeder.php b/database/seeders/Objects/ObjectTypesTableSeeder.php index 70eb758..fa693bb 100644 --- a/database/seeders/Objects/ObjectTypesTableSeeder.php +++ b/database/seeders/Objects/ObjectTypesTableSeeder.php @@ -93,6 +93,9 @@ class ObjectTypesTableSeeder extends Seeder { ], 'entry-properties-technical-certificate' => [ 'title' => 'Техническое свидетельство' + ], + 'entry-properties-ntd' => [ + 'title' => 'Нормативно-технический документ' ] ] ], diff --git a/database/seeders/Pages/PagesTableSeeder.php b/database/seeders/Pages/PagesTableSeeder.php index f622e9f..a915c52 100644 --- a/database/seeders/Pages/PagesTableSeeder.php +++ b/database/seeders/Pages/PagesTableSeeder.php @@ -20,11 +20,11 @@ class PagesTableSeeder extends Seeder 'children' => [ 'Документы об учреждении' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::SIMPLE], 'Нормативные правовые акты' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::SIMPLE], - 'Наблюдательный совет' => [], - 'Государственное задание' => [], + 'Наблюдательный совет' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED], + 'Государственное задание' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED], 'Закупки' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED], - 'Бухгалтерская отчетность' => [], - 'Антимонопольное законодательство' => [], + 'Бухгалтерская отчетность' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED], + 'Антимонопольное законодательство' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED] ] ], 'Противодействие коррупции' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED], @@ -54,7 +54,7 @@ class PagesTableSeeder extends Seeder 'Нормирование и стандартизация' => [ 'children' => [ 'Реестр сводов правил' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::RULESET], - 'Реестр нормативно-технической документации' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED], + 'Реестр нормативно-технической документации' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::NTD], 'Разработка сводов правил' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::DEVELOPMENTS], 'Прикладные исследования' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::RESEARCHES], 'Методические материалы' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::SIMPLE] diff --git a/routes/console.php b/routes/console.php index 32282f9..39b271d 100644 --- a/routes/console.php +++ b/routes/console.php @@ -1,10 +1,13 @@ import(); }); +Artisan::command('dev:import-ntd', function() { + Excel::import(new \App\Imports\NtdRegistryImport(), Storage::path('import/registries/ntd.xlsx')); +}); + diff --git a/storage/app/import/registries/ntd.xlsx b/storage/app/import/registries/ntd.xlsx new file mode 100644 index 0000000..0aba8e3 Binary files /dev/null and b/storage/app/import/registries/ntd.xlsx differ diff --git a/storage/framework/laravel-excel/.gitignore b/storage/framework/laravel-excel/.gitignore new file mode 100644 index 0000000..f59ec20 --- /dev/null +++ b/storage/framework/laravel-excel/.gitignore @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/storage/framework/laravel-excel/laravel-excel-8km1JvNJk3vQ6M09TRUkWF9BV4lHG1r9.xlsx b/storage/framework/laravel-excel/laravel-excel-8km1JvNJk3vQ6M09TRUkWF9BV4lHG1r9.xlsx deleted file mode 100644 index 122722e..0000000 Binary files a/storage/framework/laravel-excel/laravel-excel-8km1JvNJk3vQ6M09TRUkWF9BV4lHG1r9.xlsx and /dev/null differ diff --git a/storage/framework/laravel-excel/laravel-excel-AeUtYXeKU2sii28MP5gqMFEnPsO0ANWt.xlsx b/storage/framework/laravel-excel/laravel-excel-AeUtYXeKU2sii28MP5gqMFEnPsO0ANWt.xlsx deleted file mode 100644 index 122722e..0000000 Binary files a/storage/framework/laravel-excel/laravel-excel-AeUtYXeKU2sii28MP5gqMFEnPsO0ANWt.xlsx and /dev/null differ diff --git a/storage/framework/laravel-excel/laravel-excel-B1vQzZUYQDvuzXnens7sXZZ0KhHnWtRb.xlsx b/storage/framework/laravel-excel/laravel-excel-B1vQzZUYQDvuzXnens7sXZZ0KhHnWtRb.xlsx deleted file mode 100644 index 6aa73e1..0000000 Binary files a/storage/framework/laravel-excel/laravel-excel-B1vQzZUYQDvuzXnens7sXZZ0KhHnWtRb.xlsx and /dev/null differ diff --git a/storage/framework/laravel-excel/laravel-excel-JynE9pzf5yxO9pHQxJpcmjwADuSAh4HG.xlsx b/storage/framework/laravel-excel/laravel-excel-JynE9pzf5yxO9pHQxJpcmjwADuSAh4HG.xlsx deleted file mode 100644 index c840348..0000000 Binary files a/storage/framework/laravel-excel/laravel-excel-JynE9pzf5yxO9pHQxJpcmjwADuSAh4HG.xlsx and /dev/null differ diff --git a/storage/framework/laravel-excel/laravel-excel-KfBVtN23Ciu2BjNqeA4bLItr0t2TB52r.xlsx b/storage/framework/laravel-excel/laravel-excel-KfBVtN23Ciu2BjNqeA4bLItr0t2TB52r.xlsx deleted file mode 100644 index 642c148..0000000 Binary files a/storage/framework/laravel-excel/laravel-excel-KfBVtN23Ciu2BjNqeA4bLItr0t2TB52r.xlsx and /dev/null differ diff --git a/storage/framework/laravel-excel/laravel-excel-bPwxrNGf4gjXFNhUlRUlQRJuQAGPqZN5.xlsx b/storage/framework/laravel-excel/laravel-excel-bPwxrNGf4gjXFNhUlRUlQRJuQAGPqZN5.xlsx deleted file mode 100644 index e69de29..0000000 diff --git a/storage/framework/laravel-excel/laravel-excel-vma5nMNfNoB33RCjOSo4FmLNqXLdcCvV.xlsx b/storage/framework/laravel-excel/laravel-excel-vma5nMNfNoB33RCjOSo4FmLNqXLdcCvV.xlsx deleted file mode 100644 index 1c9284d..0000000 Binary files a/storage/framework/laravel-excel/laravel-excel-vma5nMNfNoB33RCjOSo4FmLNqXLdcCvV.xlsx and /dev/null differ