Compare commits

...

4 commits

Author SHA1 Message Date
Anna-Sara Sélea
d348f893d6 Test domain route 2025-04-19 18:34:09 +02:00
Anna-Sara Sélea
5a3c695603 Updated table view for reserve and reserveditems 2025-04-19 18:05:55 +02:00
Anna-Sara Sélea
d11c5b746f is_admin added to User model, reset password added to login 2025-04-19 18:05:30 +02:00
Anna-Sara Sélea
62e5d20d58 Reserved items for User View is now hidden 2025-04-19 18:04:35 +02:00
8 changed files with 142 additions and 100 deletions

View file

@ -36,6 +36,12 @@ use Filament\Tables\Columns\ImageColumn;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Actions\Action;
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
{
@ -51,31 +57,54 @@ class Reserve extends BasePage implements HasTable
return $table
->query( Item::where('can_be_loaned', true)->where('type', "game"))
->columns([
TextColumn::make('desc')
->label('Beskrivning')
->sortable()
->searchable(),
ImageColumn::make('image')
->label('Bild')
->disk('local')
->visibility('private'),
TextColumn::make('players')
->label('Antal spelare')
->sortable(),
TextColumn::make('play_time')
->label('Speltid')
->sortable(),
TextColumn::make('age')
->label('Ålder')
->sortable(),
IconColumn::make('reserved')
->label('Tillgängligt')
->falseIcon('heroicon-o-check-badge')
->trueIcon('heroicon-o-x-mark')
->falseColor('success')
->trueColor('danger')
->default(false),
Grid::make()
->columns(1)
->schema([
Stack::make([
TextColumn::make('reserved')
->weight(FontWeight::Bold)
->formatStateUsing(fn (string $state): string => $state ? 'Utlånad' : 'Tillgänglig')
->color(fn($record) => $record->reserved ? 'danger' : 'success' )
->badge(),
ImageColumn::make('image')
->label('Bild')
->disk('local')
->size('100%')
->extraImgAttributes([
'class' => 'rounded-md'
])
->visibility('private'),
TextColumn::make('desc')
->label('Beskrivning')
->sortable()
->searchable()
->weight(FontWeight::Bold)
->size(TextColumn\TextColumnSize::Large),
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([
SelectFilter::make('category_id')
@ -90,8 +119,38 @@ class Reserve extends BasePage implements HasTable
->toggle()
],layout: FiltersLayout::AboveContent)
->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')
->modalSubmitAction(false)
->modalSubmitAction(false)
->button()
->color('primary')
->infolist([
Section::make('Spel')
->schema([
@ -115,31 +174,11 @@ class Reserve extends BasePage implements HasTable
->label('Ålder'),
])
->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([
]);
}
}

View file

@ -23,6 +23,10 @@ use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Columns\ImageColumn;
use Filament\Tables\Columns\IconColumn;
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
@ -73,33 +77,46 @@ class ReserveditemResource extends Resource
return $table
//->query(Reserveditem::withTrashed())
->columns([
TextColumn::make('item.desc')
->label('Name')
->translateLabel()
->sortable(),
TextColumn::make('username')
->label('User')
->translateLabel()
->sortable(),
TextColumn::make('email')
->label('Email')
->sortable(),
TextColumn::make('reserved_date')
->label('Reservation date')
->translateLabel()
->sortable(),
TextColumn::make('delivered_date')
->label('Delivery date')
->translateLabel()
->sortable(),
TextColumn::make('return_date')
->label('Return date')
->translateLabel()
->sortable(),
TextColumn::make('returned_date')
->label('Returned')
->translateLabel()
->sortable(),
Stack::make([
TextColumn::make('item.desc')
->label('Name')
->translateLabel()
->sortable()
->weight(FontWeight::Bold)
->size(TextColumn\TextColumnSize::Large),
TextColumn::make('username')
->label('User')
->translateLabel()
->sortable()
->icon('heroicon-m-user'),
TextColumn::make('email')
->label('Email')
->sortable()
->icon('heroicon-m-envelope'),
TextColumn::make('reserved_date')
->label('Reservation date')
->translateLabel()
->sortable()
->dateTime('Y-m-d')
->icon('heroicon-m-hand-raised'),
TextColumn::make('delivered_date')
->label('Delivery date')
->translateLabel()
->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([
//

View file

@ -105,8 +105,9 @@ class ReserveditemResourceUser extends Resource
public static function canViewAny(): bool
{
return auth()->user()->is_admin==false;
}
public static function canViewAny(): bool
{
return false;
//return auth()->user()->is_admin==false;
}
}

View file

@ -56,8 +56,6 @@ class UserResource extends Resource
->email()
->required()
->maxLength(255),
DateTimePicker::make('email_verified_at')
->translateLabel(),
TextInput::make('password')
->translateLabel()
->password()

View file

@ -24,6 +24,7 @@ class User extends Authenticatable
'name',
'email',
'password',
'is_admin'
];
/**

View file

@ -39,6 +39,7 @@ class AdminPanelProvider extends PanelProvider
->widgets([
Widgets\AccountWidget::class,
])
->passwordReset()
->middleware([
EncryptCookies::class,
AddQueuedCookiesToResponse::class,

View file

@ -26,7 +26,7 @@
"Reservation": "Reservation",
"Reservation date": "Reservationsdatum",
"Delivery date": "Utlämningsdatum",
"Return date": rterlämningsdatum",
"Return date": terlämningsdatum",
"Returned": "Återlämnad",
"Delivered": "Utlämnad",
"Users": "Användare",

View file

@ -6,25 +6,10 @@ use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
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::group(['domain' => 'boka.vbytes.se'], function(){
Route::get('/', Reserve::class);
});
//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);
require __DIR__.'/auth.php';