PHPackages                             occtherapist/advanced-roster-for-filament - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Admin Panels](/categories/admin)
4. /
5. occtherapist/advanced-roster-for-filament

ActiveLibrary[Admin Panels](/categories/admin)

occtherapist/advanced-roster-for-filament
=========================================

A flexible weekly roster page for Filament — drag-and-drop entries, recurrence, day notes, and optional PDF export.

v0.1.1(yesterday)10MITPHPPHP ^8.2CI failing

Since Jun 22Pushed yesterdayCompare

[ Source](https://github.com/OccTherapist/advanced-roster-for-filament)[ Packagist](https://packagist.org/packages/occtherapist/advanced-roster-for-filament)[ Docs](https://github.com/OccTherapist/advanced-roster-for-filament)[ RSS](/packages/occtherapist-advanced-roster-for-filament/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (7)Versions (2)Used By (0)

Advanced Roster for Filament
============================

[](#advanced-roster-for-filament)

[![Latest Version on Packagist](https://camo.githubusercontent.com/861b16de035b91132a2627d2cf798ef8f6854978dc11b9e97f73989b289426ec/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6f63637468657261706973742f616476616e6365642d726f737465722d666f722d66696c616d656e742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/occtherapist/advanced-roster-for-filament)[![Total Downloads](https://camo.githubusercontent.com/6178e7c211779059d8c16fad27af4d53fef963c314b6b14d7c95f1208d3311fa/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6f63637468657261706973742f616476616e6365642d726f737465722d666f722d66696c616d656e742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/occtherapist/advanced-roster-for-filament)[![License](https://camo.githubusercontent.com/46e7a7683bafddedcee780fa0001a03e69af571f8d5f39dc3cc331394139e1b0/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f4f63635468657261706973742f616476616e6365642d726f737465722d666f722d66696c616d656e743f7374796c653d666c61742d737175617265)](LICENSE)[![PHP Version](https://camo.githubusercontent.com/8fbca999aa63b17cbf0d5bd0da59bb214471e77d8f0729ecd717444f53337f4b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f6f63637468657261706973742f616476616e6365642d726f737465722d666f722d66696c616d656e742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/occtherapist/advanced-roster-for-filament)

**A flexible weekly roster page for Filament** — drag-and-drop entries, row reordering, recurring shifts, day notes, and optional PDF export.

Built for **Filament v4 and v5** on **Laravel 11, 12, and 13**. Assign any Eloquent model as roster rows (default: `User`), scope data to your tenant or team, and extend validation rules when you need them.

---

Screenshots
-----------

[](#screenshots)

### Weekly overview

[](#weekly-overview)

Drag-and-drop entries across days and people, color-coded entry types, and optional day notes in the header row.

[![Weekly roster overview with work shifts, vacation, and sick leave entries](docs/images/roster-overview.png)](docs/images/roster-overview.png)

### Create entries

[](#create-entries)

Entry types: work, sick, vacation, and unavailable — with optional recurrence.

[![Create entry modal with entry type, time range, and weekly recurrence](docs/images/entry-form-weekly.png)](docs/images/entry-form-weekly.png)

### Custom recurrence

[](#custom-recurrence)

Daily, weekly, or custom patterns with weekday selection and repeat-until date.

[![Create entry modal with custom weekly recurrence and weekday selection](docs/images/entry-form-custom-recurrence.png)](docs/images/entry-form-custom-recurrence.png)

---

Why this package?
-----------------

[](#why-this-package)

NeedThis package**Weekly roster** in a Filament panelReady-made `RosterPage` with calendar navigation**Any model as rows**Configurable assignee model (default: `User`)**Drag &amp; drop** entries and row orderMove, copy, and reorder — persisted per user and scope**Recurring entries**Series with edit/delete for single or future occurrences**Day notes**Optional colored notes per day (feature-flagged)**No hard-coded HR rules**Overlap check built-in; custom rules via validator registry**Multi-tenant ready**`RosterScopeResolver` — Filament tenancy as default**PDF or browser print**Spatie PDF when available, print-optimized Blade as fallback**German &amp; English**Translations included---

Features
--------

[](#features)

- **Filament page plugin** — register once on your panel
- **Configurable assignee model** — defaults to `User`, override via config or model methods
- **Entry types** — work, sick, vacation, unavailable (or your own enum)
- **Drag &amp; drop** — move and copy entries between days and rows
- **Row reordering** — custom sort order per user and scope (not stored on the user model)
- **Recurrence** — daily, weekly, monthly, and custom weekday patterns
- **Day notes** — optional per-day notes with recurrence (`roster.features.notes`)
- **Overlap validation** — enabled by default, disable via config
- **Validator registry** — register custom `RosterEntryValidator` classes
- **Section registry** — one section in v1, add more via `RosterSection` contract
- **Scope resolver** — abstract tenancy/team/location scoping
- **Print / PDF** — optional PDF export with print-friendly fallback view
- **Configurable week** — week start and visible day count (default: Mon–Fri)
- **i18n** — English and German

---

Requirements
------------

[](#requirements)

- PHP 8.2+
- [Filament](https://filamentphp.com/) 4 or 5
- Laravel 11, 12, or 13

**Optional** (PDF export):

PackagePurpose`spatie/laravel-pdf`PDF generation for `printAction()`Without a PDF library, the package falls back to a print-optimized Blade view (browser print).

---

Installation
------------

[](#installation)

```
composer require occtherapist/advanced-roster-for-filament
```

Register the plugin in your panel provider:

```
use Filament\Panel;
use OccTherapist\AdvancedRosterForFilament\AdvancedRosterForFilamentPlugin;

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugins([
            AdvancedRosterForFilamentPlugin::make(),
        ]);
}
```

Publish and run migrations:

```
php artisan vendor:publish --tag=advanced-roster-for-filament-migrations
php artisan migrate
```

Publish config (optional):

```
php artisan vendor:publish --tag=advanced-roster-for-filament-config
```

---

Configuration
-------------

[](#configuration)

```
// config/advanced-roster-for-filament.php

return [
    'assignee_model' => \App\Models\User::class,

    'entry_type_enum' => \OccTherapist\AdvancedRosterForFilament\Enums\RosterEntryType::class,

    'validate_overlap' => true,

    'week_starts_at' => 'monday',
    'visible_days' => 5,

    'features' => [
        'notes' => true,
        'print' => true,
    ],
];
```

### Assignee model overrides

[](#assignee-model-overrides)

The assignee model can override config defaults with optional methods:

MethodPurpose`getRosterNameColumn()`Column used for the row label`getRosterLabel()`Custom label when a column is not enough`scopeForRoster($query, $scope)`Filter which records appear as rows`getRosterUrl()`Optional link from the row header`isVisibleOnRoster($date)`Hide rows on specific dates### Custom entry type enum

[](#custom-entry-type-enum)

Provide your own backed enum in config. It must implement Filament's `HasLabel` and `HasColor` contracts, plus `RosterEntryTypeContract`:

```
interface RosterEntryTypeContract
{
    public function isFullDay(): bool;
    public function deletesConflictingEntries(): bool;
}
```

### Extension points

[](#extension-points)

ContractPurpose`RosterScopeResolver`Resolve `scope_id` / `scope_type` (Filament tenant by default)`RosterSection`Register additional roster sections (v1 ships one default section)`RosterEntryValidator`Add create/update/move/copy validation rules---

Authorization
-------------

[](#authorization)

The package does **not** ship permissions or policies. Restrict access in your host app via Filament `canAccess()`, policies, or middleware.

---

Roadmap
-------

[](#roadmap)

VersionFocus**v0.1.0**Core roster page, entries, drag &amp; drop, row order, recurrence**v0.2.0**Day notes, PDF / print fallback**v1.0**Stable API, test coverage, Filament plugin listing---

Contributing
------------

[](#contributing)

Contributions are welcome! [Open an issue](https://github.com/OccTherapist/advanced-roster-for-filament/issues) for bugs or feature requests.

---

License
-------

[](#license)

MIT © [Igor Clauss](https://igorclauss.de)

---

Author
------

[](#author)

**Igor Clauss** — Laravel &amp; Filament developer

- Website: [igorclauss.de](https://igorclauss.de)
- GitHub: [@OccTherapist](https://github.com/OccTherapist)

###  Health Score

37

—

LowBetter than 81% of packages

Maintenance100

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity35

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

1d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/28587659?v=4)[Igor Clauss](/maintainers/OccTherapist)[@OccTherapist](https://github.com/OccTherapist)

---

Top Contributors

[![OccTherapist](https://avatars.githubusercontent.com/u/28587659?v=4)](https://github.com/OccTherapist "OccTherapist (2 commits)")

---

Tags

laravelschedulecalendarfilamentfilament-pluginrostershift-plandienstplan

###  Code Quality

TestsPHPUnit

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/occtherapist-advanced-roster-for-filament/health.svg)

```
[![Health](https://phpackages.com/badges/occtherapist-advanced-roster-for-filament/health.svg)](https://phpackages.com/packages/occtherapist-advanced-roster-for-filament)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3345.1M337](/packages/psalm-plugin-laravel)[laravel/ai

The official AI SDK for Laravel.

9782.1M161](/packages/laravel-ai)[rawilk/profile-filament-plugin

Profile &amp; MFA starter kit for filament.

3913.7k](/packages/rawilk-profile-filament-plugin)[croustibat/filament-jobs-monitor

Background Jobs monitoring like Horizon for all drivers for FilamentPHP

271298.4k8](/packages/croustibat-filament-jobs-monitor)[mradder/filament-logger

Audit logging, activity tracking, exports, alerts, and dashboards for Filament admin panels.

2310.5k](/packages/mradder-filament-logger)[caresome/filament-neobrutalism-theme

A neobrutalism theme for FilamentPHP admin panels

334.9k1](/packages/caresome-filament-neobrutalism-theme)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
