mirror of
https://github.com/anna-sara/filament_inventory
synced 2025-10-27 00:27:12 +01:00
Updated table view for reserve and reserveditems
This commit is contained in:
parent
d11c5b746f
commit
5a3c695603
4 changed files with 132 additions and 95 deletions
|
|
@ -36,6 +36,12 @@ use Filament\Tables\Columns\ImageColumn;
|
||||||
use Filament\Tables\Columns\IconColumn;
|
use Filament\Tables\Columns\IconColumn;
|
||||||
use Filament\Tables\Actions\Action;
|
use Filament\Tables\Actions\Action;
|
||||||
use Filament\Support\Colors\Color;
|
use Filament\Support\Colors\Color;
|
||||||
|
use Filament\Tables\Columns\Layout\Split;
|
||||||
|
use Filament\Tables\Columns\Layout\Stack;
|
||||||
|
use Filament\Support\Enums\FontWeight;
|
||||||
|
use Filament\Tables\Columns\Layout\Panel;
|
||||||
|
use Filament\Tables\Columns\Layout\Grid;
|
||||||
|
use Filament\Notifications\Notification;
|
||||||
|
|
||||||
class Reserve extends BasePage implements HasTable
|
class Reserve extends BasePage implements HasTable
|
||||||
{
|
{
|
||||||
|
|
@ -51,31 +57,54 @@ class Reserve extends BasePage implements HasTable
|
||||||
return $table
|
return $table
|
||||||
->query( Item::where('can_be_loaned', true)->where('type', "game"))
|
->query( Item::where('can_be_loaned', true)->where('type', "game"))
|
||||||
->columns([
|
->columns([
|
||||||
TextColumn::make('desc')
|
Grid::make()
|
||||||
->label('Beskrivning')
|
->columns(1)
|
||||||
->sortable()
|
->schema([
|
||||||
->searchable(),
|
Stack::make([
|
||||||
ImageColumn::make('image')
|
TextColumn::make('reserved')
|
||||||
->label('Bild')
|
->weight(FontWeight::Bold)
|
||||||
->disk('local')
|
->formatStateUsing(fn (string $state): string => $state ? 'Utlånad' : 'Tillgänglig')
|
||||||
->visibility('private'),
|
->color(fn($record) => $record->reserved ? 'danger' : 'success' )
|
||||||
TextColumn::make('players')
|
->badge(),
|
||||||
->label('Antal spelare')
|
ImageColumn::make('image')
|
||||||
->sortable(),
|
->label('Bild')
|
||||||
TextColumn::make('play_time')
|
->disk('local')
|
||||||
->label('Speltid')
|
->size('100%')
|
||||||
->sortable(),
|
->extraImgAttributes([
|
||||||
TextColumn::make('age')
|
'class' => 'rounded-md'
|
||||||
->label('Ålder')
|
])
|
||||||
->sortable(),
|
->visibility('private'),
|
||||||
IconColumn::make('reserved')
|
TextColumn::make('desc')
|
||||||
->label('Tillgängligt')
|
->label('Beskrivning')
|
||||||
->falseIcon('heroicon-o-check-badge')
|
->sortable()
|
||||||
->trueIcon('heroicon-o-x-mark')
|
->searchable()
|
||||||
->falseColor('success')
|
->weight(FontWeight::Bold)
|
||||||
->trueColor('danger')
|
->size(TextColumn\TextColumnSize::Large),
|
||||||
->default(false),
|
Panel::make([
|
||||||
|
Stack::make([
|
||||||
|
TextColumn::make('players')
|
||||||
|
->label('Antal spelare')
|
||||||
|
->sortable()
|
||||||
|
->icon('heroicon-m-users'),
|
||||||
|
TextColumn::make('play_time')
|
||||||
|
->label('Speltid')
|
||||||
|
->sortable()
|
||||||
|
->icon('heroicon-m-clock'),
|
||||||
|
TextColumn::make('age')
|
||||||
|
->label('Ålder')
|
||||||
|
->sortable()
|
||||||
|
->icon('heroicon-m-arrows-right-left'),
|
||||||
|
])->extraAttributes(['class' => 'space-y-3'])
|
||||||
|
])
|
||||||
|
])->extraAttributes(['class' => 'space-y-3'])
|
||||||
|
|
||||||
|
])
|
||||||
|
])
|
||||||
|
->defaultSort('desc', 'asc')
|
||||||
|
->contentGrid([
|
||||||
|
'sm' => 2,
|
||||||
|
'md' => 3,
|
||||||
|
'xl' => 4,
|
||||||
])
|
])
|
||||||
->filters([
|
->filters([
|
||||||
SelectFilter::make('category_id')
|
SelectFilter::make('category_id')
|
||||||
|
|
@ -90,8 +119,38 @@ class Reserve extends BasePage implements HasTable
|
||||||
->toggle()
|
->toggle()
|
||||||
],layout: FiltersLayout::AboveContent)
|
],layout: FiltersLayout::AboveContent)
|
||||||
->actions([
|
->actions([
|
||||||
|
Action::make('reserve')
|
||||||
|
->label('Reservera')
|
||||||
|
->button()
|
||||||
|
->color('primary')
|
||||||
|
->form([
|
||||||
|
TextInput::make('username')
|
||||||
|
->label('Namn')
|
||||||
|
->required(),
|
||||||
|
TextInput::make('email')
|
||||||
|
->label('Email')
|
||||||
|
->required(),
|
||||||
|
])
|
||||||
|
->action(function (array $data, Item $record): void {
|
||||||
|
Reserveditem::create([
|
||||||
|
'item_id' => $record->id,
|
||||||
|
'reserved_date' => Carbon::now(),
|
||||||
|
'username' => $data['username'],
|
||||||
|
'email' => $data['email']
|
||||||
|
]);
|
||||||
|
Item::where('id', $record->id)->update(['reserved' => true]);
|
||||||
|
Notification::make()
|
||||||
|
->title('Spelet är reserverat!')
|
||||||
|
->body('Ett bekräftelsemail har skickats till emailadressen du uppgav. Läs det för mer info om utlämning av spelet.')
|
||||||
|
->success()
|
||||||
|
->seconds(10)
|
||||||
|
->send();
|
||||||
|
})
|
||||||
|
->hidden(fn ($record) => $record->reserved),
|
||||||
Action::make('Mer info')
|
Action::make('Mer info')
|
||||||
->modalSubmitAction(false)
|
->modalSubmitAction(false)
|
||||||
|
->button()
|
||||||
|
->color('primary')
|
||||||
->infolist([
|
->infolist([
|
||||||
Section::make('Spel')
|
Section::make('Spel')
|
||||||
->schema([
|
->schema([
|
||||||
|
|
@ -115,31 +174,11 @@ class Reserve extends BasePage implements HasTable
|
||||||
->label('Ålder'),
|
->label('Ålder'),
|
||||||
])
|
])
|
||||||
->columns(),
|
->columns(),
|
||||||
]),
|
]),
|
||||||
Action::make('reserve')
|
|
||||||
->label('Reservera')
|
|
||||||
->button()
|
|
||||||
->color('primary')
|
|
||||||
->form([
|
|
||||||
TextInput::make('username')
|
|
||||||
->label('Namn')
|
|
||||||
->required(),
|
|
||||||
TextInput::make('email')
|
|
||||||
->label('Email')
|
|
||||||
->required(),
|
|
||||||
])
|
|
||||||
->action(function (array $data, Item $record): void {
|
|
||||||
Reserveditem::create([
|
|
||||||
'item_id' => $record->id,
|
|
||||||
'reserved_date' => Carbon::now(),
|
|
||||||
'username' => $data['username'],
|
|
||||||
'email' => $data['email']
|
|
||||||
]);
|
|
||||||
Item::where('id', $record->id)->update(['reserved' => true]);
|
|
||||||
})
|
|
||||||
->hidden(fn ($record) => $record->reserved)
|
|
||||||
])
|
])
|
||||||
->bulkActions([
|
->bulkActions([
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,10 @@ use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Columns\ImageColumn;
|
use Filament\Tables\Columns\ImageColumn;
|
||||||
use Filament\Tables\Columns\IconColumn;
|
use Filament\Tables\Columns\IconColumn;
|
||||||
use Filament\Tables\Actions\Action;
|
use Filament\Tables\Actions\Action;
|
||||||
|
use Filament\Tables\Columns\Layout\Split;
|
||||||
|
use Filament\Tables\Columns\Layout\Stack;
|
||||||
|
use Filament\Support\Enums\FontWeight;
|
||||||
|
use Filament\Tables\Columns\Layout\Panel;
|
||||||
|
|
||||||
|
|
||||||
class ReserveditemResource extends Resource
|
class ReserveditemResource extends Resource
|
||||||
|
|
@ -73,33 +77,46 @@ class ReserveditemResource extends Resource
|
||||||
return $table
|
return $table
|
||||||
//->query(Reserveditem::withTrashed())
|
//->query(Reserveditem::withTrashed())
|
||||||
->columns([
|
->columns([
|
||||||
TextColumn::make('item.desc')
|
Stack::make([
|
||||||
->label('Name')
|
TextColumn::make('item.desc')
|
||||||
->translateLabel()
|
->label('Name')
|
||||||
->sortable(),
|
->translateLabel()
|
||||||
TextColumn::make('username')
|
->sortable()
|
||||||
->label('User')
|
->weight(FontWeight::Bold)
|
||||||
->translateLabel()
|
->size(TextColumn\TextColumnSize::Large),
|
||||||
->sortable(),
|
TextColumn::make('username')
|
||||||
TextColumn::make('email')
|
->label('User')
|
||||||
->label('Email')
|
->translateLabel()
|
||||||
->sortable(),
|
->sortable()
|
||||||
TextColumn::make('reserved_date')
|
->icon('heroicon-m-user'),
|
||||||
->label('Reservation date')
|
TextColumn::make('email')
|
||||||
->translateLabel()
|
->label('Email')
|
||||||
->sortable(),
|
->sortable()
|
||||||
TextColumn::make('delivered_date')
|
->icon('heroicon-m-envelope'),
|
||||||
->label('Delivery date')
|
TextColumn::make('reserved_date')
|
||||||
->translateLabel()
|
->label('Reservation date')
|
||||||
->sortable(),
|
->translateLabel()
|
||||||
TextColumn::make('return_date')
|
->sortable()
|
||||||
->label('Return date')
|
->dateTime('Y-m-d')
|
||||||
->translateLabel()
|
->icon('heroicon-m-hand-raised'),
|
||||||
->sortable(),
|
TextColumn::make('delivered_date')
|
||||||
TextColumn::make('returned_date')
|
->label('Delivery date')
|
||||||
->label('Returned')
|
->translateLabel()
|
||||||
->translateLabel()
|
->sortable()
|
||||||
->sortable(),
|
->dateTime('Y-m-d')
|
||||||
|
->icon('heroicon-m-arrow-up-tray')
|
||||||
|
,
|
||||||
|
TextColumn::make('return_date')
|
||||||
|
->label('Return date')
|
||||||
|
->translateLabel()
|
||||||
|
->sortable()
|
||||||
|
->dateTime('Y-m-d')
|
||||||
|
->icon('heroicon-m-arrow-down-tray')
|
||||||
|
])->extraAttributes(['class' => 'space-y-2'])
|
||||||
|
])
|
||||||
|
->contentGrid([
|
||||||
|
'md' => 2,
|
||||||
|
'xl' => 3,
|
||||||
])
|
])
|
||||||
->filters([
|
->filters([
|
||||||
//
|
//
|
||||||
|
|
|
||||||
2
lang/vendor/filament-panels/sv.json
vendored
2
lang/vendor/filament-panels/sv.json
vendored
|
|
@ -26,7 +26,7 @@
|
||||||
"Reservation": "Reservation",
|
"Reservation": "Reservation",
|
||||||
"Reservation date": "Reservationsdatum",
|
"Reservation date": "Reservationsdatum",
|
||||||
"Delivery date": "Utlämningsdatum",
|
"Delivery date": "Utlämningsdatum",
|
||||||
"Return date": "Årterlämningsdatum",
|
"Return date": "Återlämningsdatum",
|
||||||
"Returned": "Återlämnad",
|
"Returned": "Återlämnad",
|
||||||
"Delivered": "Utlämnad",
|
"Delivered": "Utlämnad",
|
||||||
"Users": "Användare",
|
"Users": "Användare",
|
||||||
|
|
|
||||||
|
|
@ -6,25 +6,6 @@ use Illuminate\Support\Facades\Route;
|
||||||
use Inertia\Inertia;
|
use Inertia\Inertia;
|
||||||
use App\Filament\Pages\Reserve;
|
use App\Filament\Pages\Reserve;
|
||||||
|
|
||||||
//Route::get('/', function () {
|
|
||||||
// return Inertia::render('Welcome', [
|
|
||||||
// 'canLogin' => Route::has('login'),
|
|
||||||
// 'canRegister' => Route::has('register'),
|
|
||||||
// 'laravelVersion' => Application::VERSION,
|
|
||||||
// 'phpVersion' => PHP_VERSION,
|
|
||||||
// ]);
|
|
||||||
//});
|
|
||||||
|
|
||||||
//Route::get('/dashboard', function () {
|
|
||||||
// return Inertia::render('Dashboard');
|
|
||||||
//})->middleware(['auth', 'verified'])->name('dashboard');
|
|
||||||
|
|
||||||
//Route::middleware('auth')->group(function () {
|
|
||||||
// Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
|
|
||||||
// Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
|
|
||||||
// Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
|
|
||||||
//});
|
|
||||||
|
|
||||||
Route::get('reserve', Reserve::class);
|
Route::get('reserve', Reserve::class);
|
||||||
|
|
||||||
require __DIR__.'/auth.php';
|
require __DIR__.'/auth.php';
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue