mirror of
https://github.com/anna-sara/filament_inventory
synced 2025-10-26 23:47:13 +01:00
Reserveditems: migration, model, filament
This commit is contained in:
parent
b6a3d988f1
commit
160e771a68
9 changed files with 516 additions and 0 deletions
121
app/Filament/Resources/ReserveditemResource.php
Normal file
121
app/Filament/Resources/ReserveditemResource.php
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
<?php
|
||||
|
||||
namespace App\Filament\Resources;
|
||||
|
||||
use App\Filament\Resources\ReserveditemResource\Pages;
|
||||
use App\Filament\Resources\ReserveditemResource\RelationManagers;
|
||||
use App\Models\Reserveditem;
|
||||
use App\Models\Item;
|
||||
use Filament\Forms;
|
||||
use Filament\Forms\Form;
|
||||
use Filament\Resources\Resource;
|
||||
use Filament\Tables;
|
||||
use Filament\Tables\Table;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\SoftDeletingScope;
|
||||
use Filament\Forms\Components\Section;
|
||||
|
||||
|
||||
class ReserveditemResource extends Resource
|
||||
{
|
||||
protected static ?string $model = Reserveditem::class;
|
||||
|
||||
protected static ?string $navigationIcon = 'heroicon-o-archive-box-x-mark';
|
||||
|
||||
protected static ?string $modelLabel = 'Reserverade items';
|
||||
|
||||
protected static ?string $title = 'Reserverade item';
|
||||
|
||||
public static function form(Form $form): Form
|
||||
{
|
||||
return $form
|
||||
->schema([
|
||||
Forms\Components\Select::make('item_id')
|
||||
->label('Välj item att lån')
|
||||
->relationship(
|
||||
name: 'item',
|
||||
titleAttribute: 'desc',
|
||||
modifyQueryUsing: fn ($query) => $query->where('can_be_loaned', true)->where('reserved', false)
|
||||
)
|
||||
->required()
|
||||
->disabledOn('edit')
|
||||
->hiddenOn('edit'),
|
||||
//Forms\Components\TextInput::make('user_id')
|
||||
// ->label('Användare')
|
||||
// ->default(auth()->id())
|
||||
// ->disabledOn(['edit', 'create'])
|
||||
// ->hiddenOn('edit'),
|
||||
Section::make('')
|
||||
->schema([
|
||||
Forms\Components\Toggle::make('delivered'),
|
||||
Forms\Components\Toggle::make('returned')
|
||||
])
|
||||
|
||||
]);
|
||||
}
|
||||
|
||||
public static function table(Table $table): Table
|
||||
{
|
||||
return $table
|
||||
//->query(Reserveditem::withTrashed())
|
||||
->columns([
|
||||
Tables\Columns\TextColumn::make('item.desc')
|
||||
->label('Namn')
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('username')
|
||||
->label('Användare')
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('reserved_date')
|
||||
->label('Reserveringsdatum')
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('delivered_date')
|
||||
->label('Utlämningsdatum')
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('return_date')
|
||||
->label('Återlämningsdatum')
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('returned_date')
|
||||
->label('Återlämnad')
|
||||
->sortable(),
|
||||
])
|
||||
->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\ListReserveditems::route('/'),
|
||||
'create' => Pages\CreateReserveditem::route('/create'),
|
||||
'edit' => Pages\EditReserveditem::route('/{record}/edit'),
|
||||
];
|
||||
}
|
||||
|
||||
public static function getWidgets(): array
|
||||
{
|
||||
return [
|
||||
ItemResource\Widgets\ItemsOverview::class,
|
||||
];
|
||||
}
|
||||
|
||||
public static function canViewAny(): bool
|
||||
{
|
||||
return auth()->user()->is_admin==true;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
<?php
|
||||
|
||||
namespace App\Filament\Resources\ReserveditemResource\Pages;
|
||||
|
||||
use App\Filament\Resources\ReserveditemResource;
|
||||
use Filament\Actions;
|
||||
use Filament\Resources\Pages\CreateRecord;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use App\Filament\Resources\ItemResource;
|
||||
use App\Models\Item;
|
||||
|
||||
class CreateReserveditem extends CreateRecord
|
||||
{
|
||||
protected static string $resource = ReserveditemResource::class;
|
||||
|
||||
|
||||
protected function handleRecordCreation(array $data): Model
|
||||
{
|
||||
$data['user_id'] = auth()->id();
|
||||
$data['username'] = auth()->user()->name;
|
||||
$data['reserved_date'] = Carbon::now();
|
||||
|
||||
if ($data['delivered'])
|
||||
{
|
||||
$data['delivered_date'] = Carbon::now();
|
||||
$data['return_date'] = Carbon::now()->addMonths(1);
|
||||
}
|
||||
|
||||
if ($data['returned'])
|
||||
{
|
||||
$data['returned_date'] = Carbon::now();
|
||||
}
|
||||
|
||||
// Item::where('id', $data['user_id'])->update(['reserved' => 'true']);
|
||||
|
||||
return static::getModel()::create($data);
|
||||
}
|
||||
|
||||
protected function afterCreate(): void
|
||||
{
|
||||
$record = $this->record;
|
||||
Item::where('id', $record->item_id)->update(['reserved' => true]);
|
||||
}
|
||||
|
||||
protected function getRedirectUrl(): string
|
||||
{
|
||||
return $this->getResource()::getUrl('index');
|
||||
}
|
||||
|
||||
protected function getFooterWidgets(): array
|
||||
{
|
||||
return [
|
||||
ItemResource\Widgets\ItemsOverview::class,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
|
||||
namespace App\Filament\Resources\ReserveditemResource\Pages;
|
||||
|
||||
use App\Filament\Resources\ReserveditemResource;
|
||||
use Filament\Actions;
|
||||
use Filament\Resources\Pages\EditRecord;
|
||||
use Carbon\Carbon;
|
||||
use App\Models\Item;
|
||||
use App\Models\Reserveditem;
|
||||
|
||||
class EditReserveditem extends EditRecord
|
||||
{
|
||||
protected static string $resource = ReserveditemResource::class;
|
||||
|
||||
protected function getHeaderActions(): array
|
||||
{
|
||||
return [
|
||||
Actions\DeleteAction::make(),
|
||||
];
|
||||
}
|
||||
|
||||
protected function mutateFormDataBeforeSave(array $data): array
|
||||
{
|
||||
$data['user_id'] = auth()->id();
|
||||
$data['username'] = auth()->user()->name;
|
||||
|
||||
if ($data['delivered'])
|
||||
{
|
||||
$data['delivered_date'] = Carbon::now();
|
||||
$data['return_date'] = Carbon::now()->addMonths(1);
|
||||
}
|
||||
|
||||
if ($data['returned'])
|
||||
{
|
||||
$data['returned_date'] = Carbon::now();
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
protected function afterSave(): void
|
||||
{
|
||||
$record = $this->record;
|
||||
if ($record->returned) {
|
||||
Item::where('id', $record->item_id)->update(['reserved' => false]);
|
||||
Reserveditem::where('id', $record->id)->delete();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected function getRedirectUrl(): string
|
||||
{
|
||||
return $this->getResource()::getUrl('index');
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
namespace App\Filament\Resources\ReserveditemResource\Pages;
|
||||
|
||||
use App\Filament\Resources\ReserveditemResource;
|
||||
use Filament\Actions;
|
||||
use Filament\Resources\Pages\ListRecords;
|
||||
|
||||
class ListReserveditems extends ListRecords
|
||||
{
|
||||
protected static string $resource = ReserveditemResource::class;
|
||||
|
||||
protected function getHeaderActions(): array
|
||||
{
|
||||
return [
|
||||
Actions\CreateAction::make(),
|
||||
];
|
||||
}
|
||||
}
|
||||
105
app/Filament/Resources/ReserveditemResourceUser.php
Normal file
105
app/Filament/Resources/ReserveditemResourceUser.php
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
<?php
|
||||
|
||||
namespace App\Filament\Resources;
|
||||
|
||||
use App\Filament\Resources\ReserveditemResourceUser\Pages;
|
||||
use App\Filament\Resources\ReserveditemResourceUser\RelationManagers;
|
||||
use App\Models\Reserveditem;
|
||||
use App\Models\Item;
|
||||
use Filament\Forms;
|
||||
use Filament\Forms\Form;
|
||||
use Filament\Resources\Resource;
|
||||
use Filament\Tables;
|
||||
use Filament\Tables\Table;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\SoftDeletingScope;
|
||||
|
||||
class ReserveditemResourceUser extends Resource
|
||||
{
|
||||
protected static ?string $model = Reserveditem::class;
|
||||
|
||||
protected static ?string $navigationIcon = 'heroicon-o-archive-box-x-mark';
|
||||
|
||||
protected static ?string $modelLabel = 'Reservera item';
|
||||
|
||||
protected static ?string $title = 'Reservera item';
|
||||
|
||||
protected static ?string $slug = 'user';
|
||||
|
||||
public static function form(Form $form): Form
|
||||
{
|
||||
return $form
|
||||
->schema([
|
||||
Forms\Components\Select::make('item_id')
|
||||
->label('Välj item att låna')
|
||||
->relationship(
|
||||
name: 'item',
|
||||
titleAttribute: 'desc',
|
||||
modifyQueryUsing: fn ($query) => $query->where('can_be_loaned', true)->where('reserved', false)
|
||||
)
|
||||
->required(),
|
||||
//Forms\Components\TextInput::make('user_id')
|
||||
// ->label('Användare')
|
||||
// ->default(auth()->id())
|
||||
// ->disabledOn('create')
|
||||
// //->hiddenOn('create')
|
||||
// ->readOnly(),
|
||||
]);
|
||||
}
|
||||
|
||||
public static function table(Table $table): Table
|
||||
{
|
||||
return $table
|
||||
->columns([
|
||||
Tables\Columns\TextColumn::make('items.desc')
|
||||
->label('Namn')
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('username')
|
||||
->label('Användare')
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('reserved_date')
|
||||
->label('Reserveringsdatum')
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('delivered_date')
|
||||
->label('Utlämningsdatum')
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('return_date')
|
||||
->label('Återlämningsdatum')
|
||||
->sortable(),
|
||||
Tables\Columns\TextColumn::make('returned_date')
|
||||
->label('Återlämnad')
|
||||
->sortable(),
|
||||
])
|
||||
->filters([
|
||||
//
|
||||
])
|
||||
->actions([
|
||||
])
|
||||
->bulkActions([
|
||||
Tables\Actions\BulkActionGroup::make([
|
||||
Tables\Actions\DeleteBulkAction::make(),
|
||||
]),
|
||||
]);
|
||||
}
|
||||
|
||||
public static function getRelations(): array
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
|
||||
public static function getPages(): array
|
||||
{
|
||||
return [
|
||||
'index' => Pages\CreateReserveditemUser::route('/'),
|
||||
];
|
||||
}
|
||||
|
||||
public static function getWidgets(): array
|
||||
{
|
||||
return [
|
||||
ItemResource\Widgets\ItemsOverview::class,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
<?php
|
||||
|
||||
namespace App\Filament\Resources\ReserveditemResourceUser\Pages;
|
||||
|
||||
use App\Filament\Resources\ReserveditemResourceUser;
|
||||
use Filament\Actions;
|
||||
use Filament\Resources\Pages\CreateRecord;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use App\Filament\Resources\ItemResource;
|
||||
use App\Models\Item;
|
||||
|
||||
class CreateReserveditemUser extends CreateRecord
|
||||
{
|
||||
protected static string $resource = ReserveditemResourceUser::class;
|
||||
|
||||
protected static ?string $title = 'Reserverade item';
|
||||
|
||||
protected function handleRecordCreation(array $data): Model
|
||||
{
|
||||
$data['user_id'] = auth()->id();
|
||||
$data['username'] = auth()->user()->name;
|
||||
$data['reserved_date'] = Carbon::now();
|
||||
$data['delivered'] = false;
|
||||
$data['returned'] = false;
|
||||
$data['delivered_date'] = null;
|
||||
$data['return_date'] = null;;
|
||||
$data['returned_date'] = null;
|
||||
|
||||
|
||||
return static::getModel()::create($data);
|
||||
}
|
||||
|
||||
protected function getRedirectUrl(): string
|
||||
{
|
||||
return $this->getResource()::getUrl('index');
|
||||
}
|
||||
|
||||
protected function afterCreate(): void
|
||||
{
|
||||
$record = $this->record;
|
||||
Item::where('id', $record->item_id)->update(['reserved' => true]);
|
||||
}
|
||||
|
||||
protected function getFooterWidgets(): array
|
||||
{
|
||||
return [
|
||||
ItemResource\Widgets\ItemsOverview::class,
|
||||
];
|
||||
}
|
||||
}
|
||||
37
app/Models/Reserveditem.php
Normal file
37
app/Models/Reserveditem.php
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use App\Models\Item;
|
||||
use App\Models\User;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
|
||||
class Reserveditem extends Model
|
||||
{
|
||||
public $timestamps = false;
|
||||
use SoftDeletes;
|
||||
|
||||
protected $fillable = [
|
||||
'username',
|
||||
'reserved_date',
|
||||
'delivered_date',
|
||||
'return_date',
|
||||
'returned_date',
|
||||
'delivered',
|
||||
'returned',
|
||||
'user_id',
|
||||
'item_id'
|
||||
];
|
||||
|
||||
|
||||
public function users()
|
||||
{
|
||||
return $this->belongsToMany(User::class, 'user_reserveditems')->withTimestamps();
|
||||
}
|
||||
|
||||
public function item()
|
||||
{
|
||||
return $this->belongsTo(Item::class);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use App\Models\Item;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
|
||||
Schema::create('reserveditems', function (Blueprint $table) {
|
||||
$table->bigIncrements('id');
|
||||
$table->foreignId('item_id')->constrained('items')->cascadeOnDelete();
|
||||
$table->integer('user_id')->nullable();
|
||||
$table->string('username')->nullable();
|
||||
$table->timestamp('reserved_date')->nullable();
|
||||
$table->timestamp('delivered_date')->nullable();
|
||||
$table->timestamp('return_date')->nullable();
|
||||
$table->timestamp('returned_date')->nullable();
|
||||
$table->boolean('delivered')->default(false);
|
||||
$table->boolean('returned')->default(false);
|
||||
$table->softDeletes();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('reserveditems');
|
||||
}
|
||||
};
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use App\Models\User;
|
||||
use App\Models\Reserveditem;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
|
||||
Schema::create('user_reserveditems', function (Blueprint $table) {
|
||||
$table->bigIncrements('id');
|
||||
$table->foreignIdFor(Reserveditem::class);
|
||||
$table->foreignIdFor(User::class);
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('user_reserveditems');
|
||||
}
|
||||
};
|
||||
Loading…
Reference in a new issue