diff --git a/.junie/guidelines.md b/.junie/guidelines.md index 510b30b..31a96d7 100644 --- a/.junie/guidelines.md +++ b/.junie/guidelines.md @@ -24,6 +24,7 @@ ##### Modellek és Auditálás - Minden fő modellnek a `App\Models\BaseAuditable` osztályból kell származnia. - Ez biztosítja a `created_by`, `updated_by` és `deleted_by` mezők automatikus töltését a `ModelUserIdAppenderTrait` segítségével. - Használjunk `SoftDeletes`-t, ahol az adatok megőrzése fontos. +- **Enums**: Amennyiben egy modell mezőjéhez meghatározott értékkészlet tartozik, kötelező PHP Enum használata és annak beállítása a `$casts` tömbben. ##### Hibrid Frontend Architektúra (Mix & Vite) és a "Clean Cut" elv A projekt fokozatos modernizáció alatt áll, ezért két párhuzamos build rendszert használunk a **"Clean Cut"** (tiszta vágás) elv mentén: @@ -79,12 +80,17 @@ ##### JavaScript Kódolási Stílus ##### Blade Sablonok - A nézetek az `resources/views` mappában találhatóak, logikusan csoportosítva (pl. `admin/product`, `admin/statistics`). - A szűrők és közös komponensek gyakran külön fájlokba vannak kiszervezve (pl. `filter.blade.php`). +#### Eszközök és Konvenciók - CLI +- **Artisan parancsok**: Generáló parancsok (pl. `make:filament-resource`) esetén törekedni kell az interakciómentes futtatásra a `--no-interaction` kapcsoló használatával. +- **Filament Resource**: Új Resource létrehozásakor kötelező megadni a `--record-title-attribute` paramétert (pl. `name` vagy `filename`), és javasolt a `--generate` használata, ha az adatbázis séma már rendelkezésre áll. + #### Verziókezelés (Git) * **Üzenetek**: Angol vagy magyar nyelven, rövid de tömör leírással, hogy mit változtattál. Példa: `feature: Add order archive export functionality`. * **Méretes fájlok**: Ne committolj nagyméretű képeket, build artifactokat vagy érzékeny adatokat (`.env`). #### Adatbázis kezelés * **Migrációk**: Minden adatbázis sémaváltoztatást migrációval kell végrehajtani. +* **Enums**: Ha egy mező meghatározott értékkészlettel rendelkezik, a migrációban is `enum` típust kell használni, az értékeket pedig dinamikusan a megfelelő PHP Enum osztályból kell kinyerni (pl. `array_column(Enum::cases(), 'value')`). * **Factories/Seeders**: Új modulokhoz hozz létre gyárat (factory) és seedert a könnyű tesztelhetőségért. #### Tesztelés diff --git a/app/Enums/PricelistFileStatusEnum.php b/app/Enums/PricelistFileStatusEnum.php new file mode 100644 index 0000000..783cb35 --- /dev/null +++ b/app/Enums/PricelistFileStatusEnum.php @@ -0,0 +1,25 @@ + 'elvégzendő', + self::inprogress => 'folyamatban', + self::fail => 'hiba', + self::done => 'elkészült', + self::waiting_for_approval => 'jóváhagyásra vár', + self::closed => 'lezárva', + }; + } +} diff --git a/app/Facades/Schema.php b/app/Facades/Schema.php index b27ce30..48307b6 100644 --- a/app/Facades/Schema.php +++ b/app/Facades/Schema.php @@ -11,7 +11,7 @@ class Schema extends BaseSchema /** * Get a schema builder instance for a connection. */ - public static function connection(?string $name): Builder + public static function connection($name) { /** @var Builder $builder */ $builder = static::$app['db']->connection($name)->getSchemaBuilder(); diff --git a/app/Filament/Pages/PriceListProcessor.php b/app/Filament/Pages/PriceListProcessor.php index f0499f2..69446c7 100644 --- a/app/Filament/Pages/PriceListProcessor.php +++ b/app/Filament/Pages/PriceListProcessor.php @@ -3,11 +3,26 @@ namespace App\Filament\Pages; use Filament\Pages\Page; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\DatePicker; +use Filament\Forms\Components\Textarea; +use Filament\Forms\Components\FileUpload; +use Filament\Schemas\Schema; +use Filament\Forms\Contracts\HasForms; +use Filament\Forms\Concerns\InteractsWithForms; +use App\Models\Supplier; +use App\Models\PricelistFile; +use App\Filament\Resources\PricelistFiles\PricelistFileResource; +use App\Jobs\PricelistPreProcessJob; +use Filament\Notifications\Notification; +use Filament\Actions\Action; use Illuminate\Contracts\Support\Htmlable; -class PriceListProcessor extends Page +class PriceListProcessor extends Page implements HasForms { + use InteractsWithForms; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-document-text'; protected string $view = 'filament.pages.price-list-processor'; @@ -17,4 +32,80 @@ class PriceListProcessor extends Page protected static ?string $navigationLabel = 'Árlista feldolgozó'; protected static bool $shouldRegisterNavigation = false; + + public ?array $data = []; + + public function mount(): void + { + $this->form->fill(); + } + + public function form(Schema $form): Schema + { + return $form + ->schema([ + Select::make('supplier_id') + ->label('Beszállító') + ->options(Supplier::query()->pluck('name', 'id')) + ->required() + ->searchable(), + DatePicker::make('available_date') + ->label('Életbelépés dátuma') + ->required() + ->native(false) + ->displayFormat('Y.m.d'), + Textarea::make('note') + ->label('Megjegyzés') + ->rows(3), + FileUpload::make('filename') + ->label('Fájl kiválasztása') + ->required() + ->acceptedFileTypes(['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'text/csv']) + ->disk('public') + ->directory('pricelist-uploads') + ->preserveFilenames(), + ]) + ->statePath('data'); + } + + protected function getFormActions(): array + { + return [ + Action::make('save') + ->label('Feltöltés és feldolgozás indítása') + ->submit('save') + ->color('primary'), + ]; + } + + public function save() + { + $data = $this->form->getState(); + + $pricelistFile = PricelistFile::create([ + 'filename' => $data['filename'], + 'supplier_id' => $data['supplier_id'], + 'available_date' => $data['available_date'], + 'note' => $data['note'], + 'status' => \App\Enums\PricelistFileStatusEnum::todo, + 'workflow_steps' => [ + ['name' => 'preprocess', 'label' => 'Előfeldolgozás', 'status' => 'pending'], + ['name' => 'validation', 'label' => 'Validálás', 'status' => 'pending'], + ['name' => 'approval', 'label' => 'Jóváhagyás', 'status' => 'pending'], + ['name' => 'execution', 'label' => 'Végrehajtás', 'status' => 'pending'] + ], + ]); + + PricelistPreProcessJob::dispatch($pricelistFile); + + Notification::make() + ->title('Sikeres feltöltés') + ->body('Az árlista fájl rögzítve lett és a feldolgozás elindult.') + ->success() + ->send(); + + $this->form->fill(); + + return redirect()->to(PricelistFileResource::getUrl('view', ['record' => $pricelistFile])); + } } diff --git a/app/Filament/Resources/PricelistFiles/Pages/CreatePricelistFile.php b/app/Filament/Resources/PricelistFiles/Pages/CreatePricelistFile.php new file mode 100644 index 0000000..da55ecd --- /dev/null +++ b/app/Filament/Resources/PricelistFiles/Pages/CreatePricelistFile.php @@ -0,0 +1,11 @@ +label('Új árlista felvitele') + ->url(fn (): string => PriceListProcessor::getUrl()) + ->button() + ->color('primary'), + ]; + } +} diff --git a/app/Filament/Resources/PricelistFiles/Pages/ViewPricelistFile.php b/app/Filament/Resources/PricelistFiles/Pages/ViewPricelistFile.php new file mode 100644 index 0000000..4bd41e0 --- /dev/null +++ b/app/Filament/Resources/PricelistFiles/Pages/ViewPricelistFile.php @@ -0,0 +1,36 @@ +record->filename; + } + + protected function getHeaderWidgets(): array + { + return [ + // Később ide jöhetnek widgetek, pl. statisztika a feldolgozásról + ]; + } + + public function getSubheading(): ?string + { + return "Beszállító: " . $this->record->supplier?->name; + } +} diff --git a/app/Filament/Resources/PricelistFiles/PricelistFileResource.php b/app/Filament/Resources/PricelistFiles/PricelistFileResource.php new file mode 100644 index 0000000..0a3ccf4 --- /dev/null +++ b/app/Filament/Resources/PricelistFiles/PricelistFileResource.php @@ -0,0 +1,80 @@ + ListPricelistFiles::route('/'), + 'create' => CreatePricelistFile::route('/create'), + 'view' => ViewPricelistFile::route('/{record}'), + 'edit' => EditPricelistFile::route('/{record}/edit'), + ]; + } + + public static function getRecordRouteBindingEloquentQuery(): Builder + { + return parent::getRecordRouteBindingEloquentQuery() + ->withoutGlobalScopes([ + SoftDeletingScope::class, + ]); + } +} diff --git a/app/Filament/Resources/PricelistFiles/Schemas/PricelistFileForm.php b/app/Filament/Resources/PricelistFiles/Schemas/PricelistFileForm.php new file mode 100644 index 0000000..2e3bfbf --- /dev/null +++ b/app/Filament/Resources/PricelistFiles/Schemas/PricelistFileForm.php @@ -0,0 +1,16 @@ +components([ + // + ]); + } +} diff --git a/app/Filament/Resources/PricelistFiles/Schemas/PricelistFileInfolist.php b/app/Filament/Resources/PricelistFiles/Schemas/PricelistFileInfolist.php new file mode 100644 index 0000000..2aa2d3f --- /dev/null +++ b/app/Filament/Resources/PricelistFiles/Schemas/PricelistFileInfolist.php @@ -0,0 +1,104 @@ +components([ + Section::make('Fájl információk') + ->poll('5s') + ->schema([ + Grid::make(3) + ->schema([ + TextEntry::make('filename') + ->label('Fájlnév') + ->icon('heroicon-o-document-text') + ->color('primary'), + TextEntry::make('supplier.name') + ->label('Beszállító') + ->icon('heroicon-o-user'), + TextEntry::make('status') + ->label('Státusz') + ->badge() + ->formatStateUsing(fn (PricelistFileStatusEnum $state): string => $state->label()) + ->color(fn (PricelistFileStatusEnum $state): string => match ($state) { + PricelistFileStatusEnum::todo => 'gray', + PricelistFileStatusEnum::inprogress => 'info', + PricelistFileStatusEnum::done => 'success', + PricelistFileStatusEnum::fail => 'danger', + PricelistFileStatusEnum::waiting_for_approval => 'primary', + PricelistFileStatusEnum::closed => 'warning', + }), + ]), + Grid::make(3) + ->schema([ + TextEntry::make('available_date') + ->label('Életbelépés dátuma') + ->date('Y.m.d'), + TextEntry::make('created_at') + ->label('Feltöltés időpontja') + ->dateTime('Y.m.d H:i'), + TextEntry::make('processing_current_step') + ->label('Aktuális folyamat') + ->weight('bold') + ->color('info') + ->formatStateUsing(fn ($state, $record) => "$state ({$record->processing_current_step_percentage}%)"), + ]), + TextEntry::make('note') + ->label('Megjegyzés') + ->placeholder('Nincs megjegyzés') + ->columnSpanFull(), + ]), + + Section::make('Feldolgozási folyamat (Workflow)') + ->poll('5s') + ->schema([ + RepeatableEntry::make('workflow_steps') + ->label(false) + ->schema([ + TextEntry::make('label') + ->label('Lépés') + ->weight('bold') + ->inlineLabel(), + TextEntry::make('status') + ->label('Állapot') + ->badge() + ->inlineLabel() + ->formatStateUsing(fn (string $state): string => match ($state) { + 'pending' => 'várakozik', + 'inprogress' => 'folyamatban', + 'done' => 'kész', + 'fail' => 'hiba', + default => $state, + }) + ->color(fn (string $state): string => match ($state) { + 'pending' => 'gray', + 'inprogress' => 'info', + 'done' => 'success', + 'fail' => 'danger', + default => 'gray', + }) + ->icon(fn (string $state): string => match ($state) { + 'pending' => 'heroicon-o-clock', + 'inprogress' => 'heroicon-o-arrow-path', + 'done' => 'heroicon-o-check-circle', + 'fail' => 'heroicon-o-x-circle', + default => 'heroicon-o-question-mark-circle', + }), + ]) + ->columns(2) + ->columnSpanFull(), + ]), + ]); + } +} diff --git a/app/Filament/Resources/PricelistFiles/Tables/PricelistFilesTable.php b/app/Filament/Resources/PricelistFiles/Tables/PricelistFilesTable.php new file mode 100644 index 0000000..ac47b32 --- /dev/null +++ b/app/Filament/Resources/PricelistFiles/Tables/PricelistFilesTable.php @@ -0,0 +1,71 @@ +poll('5s') + ->columns([ + TextColumn::make('filename') + ->label('Fájlnév') + ->searchable() + ->sortable(), + TextColumn::make('supplier.name') + ->label('Beszállító') + ->searchable() + ->sortable(), + TextColumn::make('status') + ->label('Státusz') + ->badge() + ->formatStateUsing(fn (PricelistFileStatusEnum $state): string => $state->label()) + ->color(fn (PricelistFileStatusEnum $state): string => match ($state) { + PricelistFileStatusEnum::todo => 'gray', + PricelistFileStatusEnum::inprogress => 'info', + PricelistFileStatusEnum::done => 'success', + PricelistFileStatusEnum::fail => 'danger', + PricelistFileStatusEnum::waiting_for_approval => 'primary', + PricelistFileStatusEnum::closed => 'warning', + }) + ->sortable(), + TextColumn::make('processing_current_step') + ->label('Aktuális lépés') + ->placeholder('Nincs adat'), + TextColumn::make('processing_current_step_percentage') + ->label('Készültség') + ->suffix('%') + ->alignCenter(), + TextColumn::make('created_at') + ->label('Feltöltve') + ->dateTime('Y.m.d H:i') + ->sortable(), + ]) + ->filters([ + TrashedFilter::make(), + ]) + ->recordActions([ + ViewAction::make(), + EditAction::make(), + ]) + ->toolbarActions([ + BulkActionGroup::make([ + DeleteBulkAction::make(), + ForceDeleteBulkAction::make(), + RestoreBulkAction::make(), + ]), + ]); + } +} diff --git a/app/Jobs/PricelistPreProcessJob.php b/app/Jobs/PricelistPreProcessJob.php new file mode 100644 index 0000000..8596d86 --- /dev/null +++ b/app/Jobs/PricelistPreProcessJob.php @@ -0,0 +1,30 @@ + PricelistFileStatusEnum::class, + 'processing_current_step_percentage' => 'integer', + 'available_date' => 'date', + 'workflow_steps' => 'array', + ]; + + public function supplier(): BelongsTo + { + return $this->belongsTo(Supplier::class); + } + + public function priceList(): BelongsTo + { + return $this->belongsTo(PriceList::class); + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index a5ce25a..fe4c6c6 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -45,6 +45,13 @@ public function register(): void */ public function boot(): void { - // + \Livewire\Livewire::component('app.filament.pages.price-list-processor', \App\Filament\Pages\PriceListProcessor::class); +/* + \Livewire\Livewire::component('filament.livewire.notifications', \Filament\Livewire\Notifications::class); + \Livewire\Livewire::component('filament.livewire.database-notifications', \Filament\Livewire\DatabaseNotifications::class); + \Livewire\Livewire::component('filament.livewire.sidebar', \Filament\Livewire\Sidebar::class); + \Livewire\Livewire::component('filament.livewire.topbar', \Filament\Livewire\Topbar::class); + \Livewire\Livewire::component('filament.livewire.global-search', \Filament\Livewire\GlobalSearch::class); +*/ } } diff --git a/app/Services/PricelistFileProcessService.php b/app/Services/PricelistFileProcessService.php new file mode 100644 index 0000000..f8174a7 --- /dev/null +++ b/app/Services/PricelistFileProcessService.php @@ -0,0 +1,91 @@ +update([ + 'status' => PricelistFileStatusEnum::inprogress, + 'processing_current_step' => 'Előfeldolgozás: Adatok ellenőrzése...', + 'processing_current_step_percentage' => 10, + ]); + + try { + // Itt hívjuk majd meg a PriceListService ellenőrző metódusait + // $results = $this->priceListService->importPriceListCheck($pricelistFile->supplier_id, $data); + + // TODO: Eredmények mentése (pl. preview_data JSON mezőbe vagy fájlba) + + $pricelistFile->update([ + 'status' => PricelistFileStatusEnum::todo, // Visszaállítjuk, vagy egy új 'waiting_for_approval' státuszra, ha létezik + 'processing_current_step' => 'Előfeldolgozás kész, jóváhagyásra vár.', + 'processing_current_step_percentage' => 100, + ]); + + return true; + } catch (\Exception $e) { + Log::error('Pricelist pre-process error: ' . $e->getMessage()); + $pricelistFile->update([ + 'status' => PricelistFileStatusEnum::fail, + 'processing_current_step' => 'Hiba az előfeldolgozás során: ' . $e->getMessage(), + ]); + return false; + } + } + + /** + * Végrehajtás (Execution) - Módosítások tényleges alkalmazása tranzakcióban + * + * @param PricelistFile $pricelistFile + * @param array $dataToImport A véglegesítendő adatok + * @return bool + */ + public function execute(PricelistFile $pricelistFile, array $dataToImport): bool + { + $pricelistFile->update([ + 'status' => PricelistFileStatusEnum::inprogress, + 'processing_current_step' => 'Végrehajtás: Árlista frissítése...', + 'processing_current_step_percentage' => 0, + ]); + + DB::beginTransaction(); + try { + // Tényleges importálás végrehajtása a PriceListService segítségével + // $this->priceListService->importPriceList(...); + + DB::commit(); + $pricelistFile->update([ + 'status' => PricelistFileStatusEnum::done, + 'processing_current_step' => 'Sikeresen befejezve.', + 'processing_current_step_percentage' => 100, + ]); + return true; + } catch (\Exception $e) { + DB::rollBack(); + Log::error('Pricelist execution error: ' . $e->getMessage()); + $pricelistFile->update([ + 'status' => PricelistFileStatusEnum::fail, + 'processing_current_step' => 'Hiba a végrehajtás során: ' . $e->getMessage(), + ]); + return false; + } + } +} diff --git a/database/migrations/2026_03_02_065700_create_pricelist_files_table.php b/database/migrations/2026_03_02_065700_create_pricelist_files_table.php new file mode 100644 index 0000000..2aa9fca --- /dev/null +++ b/database/migrations/2026_03_02_065700_create_pricelist_files_table.php @@ -0,0 +1,35 @@ +getSchemaBuilder(); + $builder->blueprintResolver(function ($table, $callback) { + return new Blueprint($table, $callback); + }); + + $builder->create('pricelist_files', function (Blueprint $table) { + $table->id(); + $table->string('filename'); + $table->timestamps(); + $table->softDeletes(); + $table->userIdFields(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + DB::connection()->getSchemaBuilder()->dropIfExists('pricelist_files'); + } +}; diff --git a/database/migrations/2026_03_02_072000_add_fields_to_pricelist_files_table.php b/database/migrations/2026_03_02_072000_add_fields_to_pricelist_files_table.php new file mode 100644 index 0000000..59803af --- /dev/null +++ b/database/migrations/2026_03_02_072000_add_fields_to_pricelist_files_table.php @@ -0,0 +1,30 @@ +integer('file_size')->nullable()->after('filename'); + $table->enum('status', array_column(PricelistFileStatusEnum::cases(), 'value'))->default(PricelistFileStatusEnum::todo->value)->after('file_size'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('pricelist_files', function ($table) { + $table->dropColumn(['file_size', 'status']); + }); + } +}; diff --git a/database/migrations/2026_03_02_073000_add_processing_fields_to_pricelist_files_table.php b/database/migrations/2026_03_02_073000_add_processing_fields_to_pricelist_files_table.php new file mode 100644 index 0000000..8d9c3e2 --- /dev/null +++ b/database/migrations/2026_03_02_073000_add_processing_fields_to_pricelist_files_table.php @@ -0,0 +1,29 @@ +string('processing_current_step')->nullable()->default(null)->after('status'); + $table->integer('processing_current_step_percentage')->nullable()->default(null)->after('processing_current_step'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('pricelist_files', function (Blueprint $table) { + $table->dropColumn(['processing_current_step', 'processing_current_step_percentage']); + }); + } +}; diff --git a/database/migrations/2026_03_02_073505_add_relations_to_pricelist_files_table.php b/database/migrations/2026_03_02_073505_add_relations_to_pricelist_files_table.php new file mode 100644 index 0000000..bd0246a --- /dev/null +++ b/database/migrations/2026_03_02_073505_add_relations_to_pricelist_files_table.php @@ -0,0 +1,34 @@ +unsignedBigInteger('supplier_id')->nullable()->after('filename'); + $table->unsignedBigInteger('price_list_id')->nullable()->after('supplier_id'); + + $table->foreign('supplier_id')->references('id')->on('suppliers')->onDelete('set null'); + $table->foreign('price_list_id')->references('id')->on('price_lists')->onDelete('set null'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('pricelist_files', function (Blueprint $table) { + $table->dropForeign(['supplier_id']); + $table->dropForeign(['price_list_id']); + $table->dropColumn(['supplier_id', 'price_list_id']); + }); + } +}; diff --git a/database/migrations/2026_03_02_091110_add_available_and_note_to_pricelist_files_table.php b/database/migrations/2026_03_02_091110_add_available_and_note_to_pricelist_files_table.php new file mode 100644 index 0000000..75e03b7 --- /dev/null +++ b/database/migrations/2026_03_02_091110_add_available_and_note_to_pricelist_files_table.php @@ -0,0 +1,29 @@ +date('available_date')->nullable()->after('price_list_id'); + $table->text('note')->nullable()->after('available_date'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('pricelist_files', function (Blueprint $table) { + $table->dropColumn(['available_date', 'note']); + }); + } +}; diff --git a/database/migrations/2026_03_02_135934_add_workflow_steps_to_pricelist_files_table.php b/database/migrations/2026_03_02_135934_add_workflow_steps_to_pricelist_files_table.php new file mode 100644 index 0000000..5f80008 --- /dev/null +++ b/database/migrations/2026_03_02_135934_add_workflow_steps_to_pricelist_files_table.php @@ -0,0 +1,28 @@ +json('workflow_steps')->nullable()->after('processing_current_step_percentage'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('pricelist_files', function (Blueprint $table) { + $table->dropColumn('workflow_steps'); + }); + } +}; diff --git a/resources/views/filament/components/speed-button-nav-bar.blade.php b/resources/views/filament/components/speed-button-nav-bar.blade.php index 3005eb4..ac15840 100644 --- a/resources/views/filament/components/speed-button-nav-bar.blade.php +++ b/resources/views/filament/components/speed-button-nav-bar.blade.php @@ -7,7 +7,7 @@ ['name' => 'product', 'displayName' => 'Termék', 'icon' => 'raktar', 'link' => route('admin.product.index'), 'roles' => ['root','developer','admin']], ['name' => 'supplier', 'displayName' => 'Beszállító adatbázis', 'icon' => 'supplier', 'link' => route('admin.supplier.index'), 'roles' => ['root','developer','admin','profit-center']], ['name' => 'priceList', 'displayName' => 'Webrendelős árlisták', 'icon' => 'price_list2', 'link' => route('admin.priceList.index'), 'roles' => ['root','developer','admin','profit-center']], - ['name' => 'priceListProcessor', 'displayName' => 'Árlista feldolgozó', 'icon' => 'price_list', 'link' => '/admin/price-list-processor', 'roles' => ['root','developer','admin']], + ['name' => 'priceListProcessor', 'displayName' => 'Árlista feldolgozó', 'icon' => 'price_list', 'link' => '/admin/pricelist-files', 'roles' => ['root','developer','admin']], ]; @endphp diff --git a/resources/views/filament/pages/price-list-processor.blade.php b/resources/views/filament/pages/price-list-processor.blade.php index e248272..3d3706b 100644 --- a/resources/views/filament/pages/price-list-processor.blade.php +++ b/resources/views/filament/pages/price-list-processor.blade.php @@ -1,6 +1,20 @@ -
-
Árlista feldolgozó
-

Ez az új, Filament-alapú árlista feldolgozó felület.

+
+
+
Árlista feldolgozó
+

Töltse fel az új árlistát a feldolgozás indításához.

+
+ +
+
+ {{ $this->form }} + +
+ +
+
+
diff --git a/resources/views/layout/speedButtonNavBar.blade.php b/resources/views/layout/speedButtonNavBar.blade.php index 69cb9d1..b4f829b 100644 --- a/resources/views/layout/speedButtonNavBar.blade.php +++ b/resources/views/layout/speedButtonNavBar.blade.php @@ -114,13 +114,13 @@ //'link'=>route('order.newOrderShow'), 'roles'=>['root','developer','admin'] ], - 'priceListProcessor'=>[ - 'name'=>'priceListProcessor', - 'DisplayName'=>'Árlista feldolgozó', - 'icon'=>'price_list', - 'link'=>'/admin/price-list-processor', - 'noAjax'=>true, - 'roles'=>['root','developer','admin'] + 'priceListProcessor' => [ + 'name' => 'priceListProcessor', + 'DisplayName' => 'Árlista feldolgozó', + 'icon' => 'price_list', + 'link' => '/admin/pricelist-files', + 'noAjax' => true, + 'roles' => ['root', 'developer', 'admin'], ], /* */