mirror of
https://github.com/anna-sara/filament_inventory
synced 2025-10-26 21:37:14 +01:00
Compare commits
4 commits
8a9c2f1b0e
...
d348f893d6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d348f893d6 | ||
|
|
5a3c695603 | ||
|
|
d11c5b746f | ||
|
|
62e5d20d58 |
8 changed files with 142 additions and 100 deletions
|
|
@ -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([
|
||||
]);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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([
|
||||
//
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,8 +56,6 @@ class UserResource extends Resource
|
|||
->email()
|
||||
->required()
|
||||
->maxLength(255),
|
||||
DateTimePicker::make('email_verified_at')
|
||||
->translateLabel(),
|
||||
TextInput::make('password')
|
||||
->translateLabel()
|
||||
->password()
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ class User extends Authenticatable
|
|||
'name',
|
||||
'email',
|
||||
'password',
|
||||
'is_admin'
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ class AdminPanelProvider extends PanelProvider
|
|||
->widgets([
|
||||
Widgets\AccountWidget::class,
|
||||
])
|
||||
->passwordReset()
|
||||
->middleware([
|
||||
EncryptCookies::class,
|
||||
AddQueuedCookiesToResponse::class,
|
||||
|
|
|
|||
2
lang/vendor/filament-panels/sv.json
vendored
2
lang/vendor/filament-panels/sv.json
vendored
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
|
|
|
|||
Loading…
Reference in a new issue