2 Commits

Author SHA1 Message Date
Jp
fc672e4f4a feat(TransmittalResource): enhance search functionality across related models
Implement wildcard search on transmittal series, notes, and files to improve user experience when filtering records. Also extend search capabilities to client company and branch code fields for more comprehensive filtering.
2026-02-12 16:12:35 +08:00
Jp
a77e95d2a5 feat: implement FilamentUser interface for User model
Add FilamentUser interface to allow access control within Filament admin panel. The canAccessPanel method currently returns true for all users, providing a foundation for future permission-based access restrictions.
2026-02-11 05:44:49 +08:00
2 changed files with 31 additions and 4 deletions

View File

@@ -45,16 +45,36 @@ class TransmittalResource extends Resource
->columns([ ->columns([
Tables\Columns\Layout\Split::make([ Tables\Columns\Layout\Split::make([
Tables\Columns\TextColumn::make('series') Tables\Columns\TextColumn::make('series')
->searchable() ->searchable(query: function (Builder $query, string $search): Builder {
$wildcardSearch = '%' . str_replace(' ', '%', $search) . '%';
return $query->where(function (Builder $query) use ($wildcardSearch) {
$query->where('series', 'like', $wildcardSearch)
->orWhereHas('notes', function (Builder $query) use ($wildcardSearch) {
$query->where('comment', 'like', $wildcardSearch);
})
->orWhereHas('files', function (Builder $query) use ($wildcardSearch) {
$query->where('description', 'like', $wildcardSearch);
});
});
})
->label('Series') ->label('Series')
->weight(FontWeight::Bold) ->weight(FontWeight::Bold)
->columnSpan(2), ->columnSpan(2),
Tables\Columns\Layout\Stack::make([ Tables\Columns\Layout\Stack::make([
Tables\Columns\TextColumn::make('client.company') Tables\Columns\TextColumn::make('client.company')
->searchable() ->searchable(query: function (Builder $query, string $search): Builder {
return $query->whereHas('client', function (Builder $query) use ($search) {
$query->where('company', 'like', '%' . str_replace(' ', '%', $search) . '%');
});
})
->weight(FontWeight::SemiBold)->label('Client'), ->weight(FontWeight::SemiBold)->label('Client'),
Tables\Columns\TextColumn::make('branch.code') Tables\Columns\TextColumn::make('branch.code')
->searchable() ->searchable(query: function (Builder $query, string $search): Builder {
return $query->whereHas('branch', function (Builder $query) use ($search) {
$query->where('code', 'like', '%' . str_replace(' ', '%', $search) . '%');
});
})
->label('Branch'), ->label('Branch'),
]), ]),
]), ]),

View File

@@ -3,16 +3,23 @@
namespace App\Models; namespace App\Models;
// use Illuminate\Contracts\Auth\MustVerifyEmail; // use Illuminate\Contracts\Auth\MustVerifyEmail;
use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
use Spatie\Permission\Traits\HasPermissions; use Spatie\Permission\Traits\HasPermissions;
use Spatie\Permission\Traits\HasRoles; use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable class User extends Authenticatable implements FilamentUser
{ {
use HasFactory, HasPermissions, HasRoles, Notifiable; use HasFactory, HasPermissions, HasRoles, Notifiable;
public function canAccessPanel(Panel $panel): bool
{
return true;
}
/** /**
* The attributes that are mass assignable. * The attributes that are mass assignable.
* *