From b04c657f051d7cf52be86df7f2f5338a48704cf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anna-Sara=20S=C3=A9lea?= Date: Sun, 19 Jan 2025 10:27:49 +0100 Subject: [PATCH] Item: migration, model, filament --- app/Filament/Resources/ItemResource.php | 134 ++++++++++++++++++ .../ItemResource/Pages/CreateItem.php | 17 +++ .../Resources/ItemResource/Pages/EditItem.php | 26 ++++ .../ItemResource/Pages/ListItems.php | 19 +++ app/Http/Controllers/ItemController.php | 10 ++ app/Models/Item.php | 38 +++++ .../2025_01_15_160621_create_items_table.php | 35 +++++ 7 files changed, 279 insertions(+) create mode 100644 app/Filament/Resources/ItemResource.php create mode 100644 app/Filament/Resources/ItemResource/Pages/CreateItem.php create mode 100644 app/Filament/Resources/ItemResource/Pages/EditItem.php create mode 100644 app/Filament/Resources/ItemResource/Pages/ListItems.php create mode 100644 app/Http/Controllers/ItemController.php create mode 100644 app/Models/Item.php create mode 100644 database/migrations/2025_01_15_160621_create_items_table.php diff --git a/app/Filament/Resources/ItemResource.php b/app/Filament/Resources/ItemResource.php new file mode 100644 index 0000000..2058ce8 --- /dev/null +++ b/app/Filament/Resources/ItemResource.php @@ -0,0 +1,134 @@ +schema([ + Forms\Components\FileUpload::make('image') + ->label('Bild') + ->minSize(512) + ->maxSize(1024) + ->columnSpan('full') + ->image(), + Forms\Components\TextInput::make('desc') + ->label('Beskrivning') + ->maxLength(255) + ->default(null), + Forms\Components\DatePicker::make('acquisition_date') + ->label('Inköpsdatum'), + Forms\Components\TextInput::make('quantity') + ->label('Antal') + ->numeric() + ->minValue(0) + ->maxValue(1000) + ->default(0), + Forms\Components\Select::make('type_id') + ->label('Typ') + ->options(Type::all()->pluck('name', 'id')) + ->required(), + Forms\Components\TextInput::make('cost') + ->label('Kostnad') + ->default(null), + Forms\Components\Toggle::make('can_be_loaned') + ->label('Kan lånas ut'), + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + Tables\Columns\TextColumn::make('desc') + ->label('Beskrivning') + ->searchable(), + Tables\Columns\TextColumn::make('acquisition_date') + ->label('Inköpsdatum') + ->date() + ->sortable() + ->toggleable(isToggledHiddenByDefault: true), + Tables\Columns\TextColumn::make('quantity') + ->label('Antal') + ->numeric() + ->sortable(), + Tables\Columns\TextColumn::make('type.name') + ->label('Typ') + ->numeric() + ->sortable(), + Tables\Columns\TextColumn::make('cost') + ->label('Kostnad') + ->toggleable(isToggledHiddenByDefault: true), + Tables\Columns\ImageColumn::make('image') + ->label('Bild'), + Tables\Columns\IconColumn::make('can_be_loaned') + ->label('Kan bli utlånad') + ->trueIcon('heroicon-o-check-badge') + ->falseIcon('heroicon-o-x-mark') + ->trueColor('success') + ->falseColor('danger'), + //Tables\Columns\TextColumn::make('reserveditems.reserved') + // ->label('Ska returneras'), + //Tables\Columns\TextColumn::make('reserveditems.name') + // ->label('Utlånad till') + + ]) + ->filters([ + // + ]) + ->actions([ + Tables\Actions\EditAction::make(), + ]) + ->bulkActions([ + Tables\Actions\BulkActionGroup::make([ + Tables\Actions\DeleteBulkAction::make(), + ]), + ]); + } + + + public static function getRelations(): array + { + return [ + // + ]; + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListItems::route('/'), + 'create' => Pages\CreateItem::route('/create'), + 'edit' => Pages\EditItem::route('/{record}/edit'), + ]; + } + + public static function canViewAny(): bool + { + return auth()->user()->is_admin==true; + } + +} diff --git a/app/Filament/Resources/ItemResource/Pages/CreateItem.php b/app/Filament/Resources/ItemResource/Pages/CreateItem.php new file mode 100644 index 0000000..6629c22 --- /dev/null +++ b/app/Filament/Resources/ItemResource/Pages/CreateItem.php @@ -0,0 +1,17 @@ +getResource()::getUrl('index'); + } +} diff --git a/app/Filament/Resources/ItemResource/Pages/EditItem.php b/app/Filament/Resources/ItemResource/Pages/EditItem.php new file mode 100644 index 0000000..70f7027 --- /dev/null +++ b/app/Filament/Resources/ItemResource/Pages/EditItem.php @@ -0,0 +1,26 @@ +getResource()::getUrl('index'); + } +} diff --git a/app/Filament/Resources/ItemResource/Pages/ListItems.php b/app/Filament/Resources/ItemResource/Pages/ListItems.php new file mode 100644 index 0000000..cb88656 --- /dev/null +++ b/app/Filament/Resources/ItemResource/Pages/ListItems.php @@ -0,0 +1,19 @@ +belongsTo(Type::class); + } + + public function reserveditem() + { + return $this->hasOne(Reserveditem::class); + } +} diff --git a/database/migrations/2025_01_15_160621_create_items_table.php b/database/migrations/2025_01_15_160621_create_items_table.php new file mode 100644 index 0000000..b4fce04 --- /dev/null +++ b/database/migrations/2025_01_15_160621_create_items_table.php @@ -0,0 +1,35 @@ +bigIncrements('id'); + $table->string('desc')->nullable(); + $table->date('acquisition_date')->nullable(); + $table->string('image')->nullable(); + $table->integer('type_id')->nullable(); + $table->integer('quantity')->nullable(); + $table->string('cost')->nullable(); + $table->boolean('can_be_loaned')->default(false); + $table->boolean('reserved')->default(false); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('items'); + } +};