This commit is contained in:
DigitalInfinity committed 2026-06-02 17:11:39 +00:00
1 parent 00bcaa2b93
commit 1559580ceb
37 files changed
+211 -162

No files matched your search

+2 -2
View File
@@ -30,10 +30,10 @@ class OrderExporter extends Exporter
public static function getCompletedNotificationBody(Export $export): string
{
$body = 'Your order export has completed and ' . Number::format($export->successful_rows) . ' ' . str('row')->plural($export->successful_rows) . ' exported.';
$body = 'Your order export has completed and '.Number::format($export->successful_rows).' '.str('row')->plural($export->successful_rows).' exported.';
if ($failedRowsCount = $export->getFailedRowsCount()) {
$body .= ' ' . Number::format($failedRowsCount) . ' ' . str('row')->plural($failedRowsCount) . ' failed to export.';
$body .= ' '.Number::format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' failed to export.';
}
return $body;
+11 -6
View File
@@ -5,9 +5,9 @@ namespace App\Filament\Resources\Belts;
use App\Filament\Resources\Belts\Pages\CreateBelt;
use App\Filament\Resources\Belts\Pages\EditBelt;
use App\Filament\Resources\Belts\Pages\ListBelts;
use App\Filament\Resources\Belts\RelationManagers\CoursesRelationManager;
use App\Filament\Resources\Belts\Schemas\BeltForm;
use App\Filament\Resources\Belts\Tables\BeltsTable;
use App\Filament\Resources\Belts\RelationManagers\CoursesRelationManager;
use App\Models\Belt;
use BackedEnum;
use Filament\Resources\Resource;
@@ -21,15 +21,20 @@ class BeltResource extends Resource
protected static ?string $model = Belt::class;
protected static string|BackedEnum|null $navigationIcon = Heroicon::ArrowUpCircle;
protected static string | UnitEnum | null $navigationGroup = 'Kurse und Kinder';
protected static string|UnitEnum|null $navigationGroup = 'Kurse und Kinder';
protected static ?string $recordTitleAttribute = 'name';
protected static ?string $pluralLabel = 'Gürtel';
protected static ?string $label = 'Gürtel';
protected static ?string $navigationLabel = "Gürtel";
protected static ?string $pluralModelLabel = "Gürtel";
protected static ?string $modelLabel = "Gürtel";
protected static ?string $navigationLabel = 'Gürtel';
protected static ?string $pluralModelLabel = 'Gürtel';
protected static ?string $modelLabel = 'Gürtel';
public static function form(Schema $schema): Schema
{
@@ -44,7 +49,7 @@ class BeltResource extends Resource
public static function getRelations(): array
{
return [
CoursesRelationManager::class
CoursesRelationManager::class,
];
}
@@ -4,10 +4,8 @@ namespace App\Filament\Resources\Belts\RelationManagers;
use Filament\Actions\AttachAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\CreateAction;
use Filament\Actions\DetachAction;
use Filament\Actions\DetachBulkAction;
use Filament\Actions\EditAction;
use Filament\Forms\Components\TextInput;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Schemas\Schema;
@@ -3,7 +3,6 @@
namespace App\Filament\Resources\Belts\Tables;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Tables\Columns\TextColumn;
@@ -22,15 +22,20 @@ class CourseResource extends Resource
protected static ?string $model = Course::class;
protected static string|BackedEnum|null $navigationIcon = Heroicon::ArchiveBox;
protected static string | UnitEnum | null $navigationGroup = 'Verwaltung';
protected static string|UnitEnum|null $navigationGroup = 'Verwaltung';
protected static ?string $recordTitleAttribute = 'name';
protected static ?string $pluralLabel = 'Kurse';
protected static ?string $label = 'Kurs';
protected static ?string $navigationLabel = "Kurse";
protected static ?string $pluralModelLabel = "Kurse";
protected static ?string $modelLabel = "Kurs";
protected static ?string $navigationLabel = 'Kurse';
protected static ?string $pluralModelLabel = 'Kurse';
protected static ?string $modelLabel = 'Kurs';
public static function form(Schema $schema): Schema
{
@@ -50,7 +55,7 @@ class CourseResource extends Resource
public static function getRelations(): array
{
return [
KidsRelationManager::class
KidsRelationManager::class,
];
}
@@ -85,7 +85,7 @@ class KidsRelationManager extends RelationManager
->form(fn (AttachAction $action): array => [
$action->getRecordSelect(),
DatePicker::make('date')->required(),
])->preloadRecordSelect()
])->preloadRecordSelect(),
])
->recordActions([
ViewAction::make(),
@@ -20,12 +20,16 @@ class GroupResource extends Resource
protected static ?string $model = Group::class;
protected static string|BackedEnum|null $navigationIcon = Heroicon::UserGroup;
protected static string | UnitEnum | null $navigationGroup = 'Verwaltung';
protected static ?string $navigationLabel = "Gruppen";
protected static ?string $pluralLabel = "Gruppen";
protected static ?string $pluralModelLabel = "Gruppen";
protected static ?string $modelLabel = "Gruppe";
protected static string|UnitEnum|null $navigationGroup = 'Verwaltung';
protected static ?string $navigationLabel = 'Gruppen';
protected static ?string $pluralLabel = 'Gruppen';
protected static ?string $pluralModelLabel = 'Gruppen';
protected static ?string $modelLabel = 'Gruppe';
protected static ?string $recordTitleAttribute = 'name';
+10 -5
View File
@@ -22,15 +22,20 @@ class KidResource extends Resource
protected static ?string $model = Kid::class;
protected static string|BackedEnum|null $navigationIcon = Heroicon::UserCircle;
protected static string | UnitEnum | null $navigationGroup = 'Verwaltung';
protected static string|UnitEnum|null $navigationGroup = 'Verwaltung';
protected static ?string $recordTitleAttribute = 'name';
protected static ?string $pluralLabel = 'Kinder';
protected static ?string $label = 'Kind';
protected static ?string $navigationLabel = "Kinder";
protected static ?string $pluralModelLabel = "Kinder";
protected static ?string $modelLabel = "Kind";
protected static ?string $navigationLabel = 'Kinder';
protected static ?string $pluralModelLabel = 'Kinder';
protected static ?string $modelLabel = 'Kind';
public static function form(Schema $schema): Schema
{
@@ -50,7 +55,7 @@ class KidResource extends Resource
public static function getRelations(): array
{
return [
CoursesRelationManager::class
CoursesRelationManager::class,
];
}
@@ -4,7 +4,6 @@ namespace App\Filament\Resources\Kids\RelationManagers;
use Filament\Actions\AttachAction;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\CreateAction;
use Filament\Actions\DeleteAction;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\DetachAction;
@@ -37,7 +36,7 @@ class CoursesRelationManager extends RelationManager
TextInput::make('duration')
->required()
->numeric(),
DatePicker::make('date')
DatePicker::make('date'),
]);
}
@@ -86,7 +85,7 @@ class CoursesRelationManager extends RelationManager
->schema(fn (AttachAction $action): array => [
$action->getRecordSelect(),
DatePicker::make('date')->required(),
])->preloadRecordSelect()
])->preloadRecordSelect(),
])
->recordActions([
ViewAction::make(),
@@ -20,10 +20,13 @@ class OrderResource extends Resource
protected static string|BackedEnum|null $navigationIcon = Heroicon::ShoppingBag;
protected static ?string $navigationLabel = "Bestellungen";
protected static ?string $pluralLabel = "Bestellungen";
protected static ?string $pluralModelLabel = "Bestellungen";
protected static ?string $modelLabel = "Bestellung";
protected static ?string $navigationLabel = 'Bestellungen';
protected static ?string $pluralLabel = 'Bestellungen';
protected static ?string $pluralModelLabel = 'Bestellungen';
protected static ?string $modelLabel = 'Bestellung';
public static function form(Schema $schema): Schema
{
@@ -18,27 +18,35 @@ class EditOrder extends EditRecord
{
return [
Action::make('bestellt_single')
->icon(Heroicon::ShoppingCart)->label("Bestellt")->action(function(Model $record) {
$orderstatusBestellt = Orderstatus::where("name", "bestellt")->first();
->icon(Heroicon::ShoppingCart)->label('Bestellt')->action(function (Model $record) {
$orderstatusBestellt = Orderstatus::where('name', 'bestellt')->first();
$record->orderstatus()->associate($orderstatusBestellt);
$record->save();
$this->refreshFormData(['orderstatus_id']);
})->visible(function(Model $record) {return ($record->orderstatus->name == 'erfasst');}),
})->visible(function (Model $record) {
return $record->orderstatus->name == 'erfasst';
}),
Action::make('angekommen_single')
->icon(Heroicon::BuildingOffice)->label("Angekommen")->action(function(Model $record) {
$orderstatusAngekommen = Orderstatus::where("name", "angekommen")->first();
->icon(Heroicon::BuildingOffice)->label('Angekommen')->action(function (Model $record) {
$orderstatusAngekommen = Orderstatus::where('name', 'angekommen')->first();
$record->orderstatus()->associate($orderstatusAngekommen);
$record->save();
$this->refreshFormData(['orderstatus_id']);
})->visible(function(Model $record) {return ($record->orderstatus->name == 'bestellt');}),
})->visible(function (Model $record) {
return $record->orderstatus->name == 'bestellt';
}),
Action::make('genommen_single')
->icon(Heroicon::Check)->label("Genommen")->action(function(Model $record) {
$orderstatusGenommen = Orderstatus::where("name", "genommen")->first();
->icon(Heroicon::Check)->label('Genommen')->action(function (Model $record) {
$orderstatusGenommen = Orderstatus::where('name', 'genommen')->first();
$record->orderstatus()->associate($orderstatusGenommen);
$record->save();
$this->refreshFormData(['orderstatus_id']);
})->visible(function(Model $record) {return ($record->orderstatus->name == 'angekommen');}),
Action::make("url_oeffnen")->icon(Heroicon::Link)->label("URL öffnen")->url(function (Model $record) { return $record->url;}, true),
})->visible(function (Model $record) {
return $record->orderstatus->name == 'angekommen';
}),
Action::make('url_oeffnen')->icon(Heroicon::Link)->label('URL öffnen')->url(function (Model $record) {
return $record->url;
}, true),
DeleteAction::make(),
];
}
@@ -16,7 +16,7 @@ class ListOrders extends ListRecords
{
return [
CreateAction::make(),
ExportAction::make()->label('exportieren')->exporter(OrderExporter::class)->enableVisibleTableColumnsByDefault()
ExportAction::make()->label('exportieren')->exporter(OrderExporter::class)->enableVisibleTableColumnsByDefault(),
];
}
}
@@ -34,40 +34,48 @@ class OrderForm
->columnSpan(1),
Select::make('user_id')
->label('Bestellt von')->inlineLabel()
->relationship("user", "name")
->relationship('user', 'name')
->required()
->default(filament()->auth()->user()->id),
Select::make("orderstatus_id")
Select::make('orderstatus_id')
->label('Bestellstatus')->inlineLabel()
->relationship("orderstatus", "name")
->visibleOn(["edit"])
->prefixActions([
Action::make('bestellt_single')
->icon(Heroicon::ShoppingCart)->label("Bestellt")->action(function(Model $record) {
$orderstatusBestellt = Orderstatus::where("name", "bestellt")->first();
$record->orderstatus_id = $orderstatusBestellt->id;
$record->save();
redirect(OrderResource::getUrl('edit', ['record' => $record->id,]));
})->visible(function(Model $record) {return ($record->orderstatus->name == 'erfasst');}),
Action::make('angekommen_single')
->icon(Heroicon::BuildingOffice)->label("Angekommen")->action(function(Model $record) {
$orderstatusAngekommen = Orderstatus::where("name", "angekommen")->first();
$record->orderstatus_id = $orderstatusAngekommen->id;
$record->save();
redirect(OrderResource::getUrl('edit', ['record' => $record->id,]));
})->visible(function(Model $record) {return ($record->orderstatus->name == 'bestellt');}),
Action::make('genommen_single')
->icon(Heroicon::Check)->label("Genommen")->action(function(Model $record) {
$orderstatusGenommen = Orderstatus::where("name", "genommen")->first();
$record->orderstatus_id = $orderstatusGenommen->id;
$record->save();
redirect(OrderResource::getUrl('edit', ['record' => $record->id,]));
})->visible(function(Model $record) {return ($record->orderstatus->name == 'angekommen');}),
Action::make("url_oeffnen")->icon(Heroicon::Link)->label("URL öffnen")->url(function (Model $record) { return $record->url;}, true),
]),
->relationship('orderstatus', 'name')
->visibleOn(['edit'])
->prefixActions([
Action::make('bestellt_single')
->icon(Heroicon::ShoppingCart)->label('Bestellt')->action(function (Model $record) {
$orderstatusBestellt = Orderstatus::where('name', 'bestellt')->first();
$record->orderstatus_id = $orderstatusBestellt->id;
$record->save();
redirect(OrderResource::getUrl('edit', ['record' => $record->id]));
})->visible(function (Model $record) {
return $record->orderstatus->name == 'erfasst';
}),
Action::make('angekommen_single')
->icon(Heroicon::BuildingOffice)->label('Angekommen')->action(function (Model $record) {
$orderstatusAngekommen = Orderstatus::where('name', 'angekommen')->first();
$record->orderstatus_id = $orderstatusAngekommen->id;
$record->save();
redirect(OrderResource::getUrl('edit', ['record' => $record->id]));
})->visible(function (Model $record) {
return $record->orderstatus->name == 'bestellt';
}),
Action::make('genommen_single')
->icon(Heroicon::Check)->label('Genommen')->action(function (Model $record) {
$orderstatusGenommen = Orderstatus::where('name', 'genommen')->first();
$record->orderstatus_id = $orderstatusGenommen->id;
$record->save();
redirect(OrderResource::getUrl('edit', ['record' => $record->id]));
})->visible(function (Model $record) {
return $record->orderstatus->name == 'angekommen';
}),
Action::make('url_oeffnen')->icon(Heroicon::Link)->label('URL öffnen')->url(function (Model $record) {
return $record->url;
}, true),
]),
DateTimePicker::make('orderdatetime')
->label('Bestellzeitpunkt')->inlineLabel()
->visibleOn(["edit", "view"])
->visibleOn(['edit', 'view'])
->disabled(),
])->columns(1);
}
@@ -2,22 +2,21 @@
namespace App\Filament\Resources\Orders\Tables;
use App\Models\Order;
use App\Models\Orderstatus;
use Filament\Actions\Action;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Illuminate\Database\Eloquent\Collection;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Enums\RecordActionsPosition;
use Filament\Tables\Filters\Filter;
use Filament\Tables\Filters\SelectFilter;
use Filament\Tables\Table;
use Filament\Tables\Grouping\Group;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
class OrdersTable
@@ -65,42 +64,58 @@ class OrdersTable
Group::make('user.name')->label('Bestellt von'),
])
->filters([
SelectFilter::make('orderstatus_id')->relationship('orderstatus', 'name')->label("Bestellstatus")->multiple(),
Filter::make('mine')->label("meine")
SelectFilter::make('orderstatus_id')->relationship('orderstatus', 'name')->label('Bestellstatus')->multiple(),
Filter::make('mine')->label('meine')
->default()
->query(function (Builder $query) {
$query->where('user_id', filament()->auth()->user()->id);
return $query;
}),
Filter::make('alleoffenen')
->default()
->label("alle offenen")
->label('alle offenen')
->query(function (Builder $query) {
$orderstatusGenommen = Orderstatus::where("name", "genommen")->first();
$orderstatusGenommen = Orderstatus::where('name', 'genommen')->first();
$query->where('orderstatus_id', '!=', $orderstatusGenommen->id);
return $query;
}),
])
->recordActions([
Action::make('bestellt_single')
->icon(Heroicon::ShoppingCart)->iconButton()->label("Bestellt")->action(function(Model $record) {
$orderstatusBestellt = Orderstatus::where("name", "bestellt")->first();
->icon(Heroicon::ShoppingCart)->iconButton()->label('Bestellt')->action(function (Model $record) {
$orderstatusBestellt = Orderstatus::where('name', 'bestellt')->first();
$record->orderstatus_id = $orderstatusBestellt->id;
$record->save();
})->visible(function(Model $record) {$orderstatusErfasst = Orderstatus::where("name", "erfasst")->first();return ($orderstatusErfasst->id == $record->orderstatus_id);}),
})->visible(function (Model $record) {
$orderstatusErfasst = Orderstatus::where('name', 'erfasst')->first();
return $orderstatusErfasst->id == $record->orderstatus_id;
}),
Action::make('angekommen_single')
->icon(Heroicon::BuildingOffice)->iconButton()->label("Angekommen")->action(function(Model $record) {
$orderstatusAngekommen = Orderstatus::where("name", "angekommen")->first();
->icon(Heroicon::BuildingOffice)->iconButton()->label('Angekommen')->action(function (Model $record) {
$orderstatusAngekommen = Orderstatus::where('name', 'angekommen')->first();
$record->orderstatus_id = $orderstatusAngekommen->id;
$record->save();
})->visible(function(Model $record) {$orderstatusBestellt = Orderstatus::where("name", "bestellt")->first();return ($orderstatusBestellt->id == $record->orderstatus_id);}),
})->visible(function (Model $record) {
$orderstatusBestellt = Orderstatus::where('name', 'bestellt')->first();
return $orderstatusBestellt->id == $record->orderstatus_id;
}),
Action::make('genommen_single')
->icon(Heroicon::Check)->iconButton()->label("Genommen")->action(function(Model $record) {
$orderstatusGenommen = Orderstatus::where("name", "genommen")->first();
->icon(Heroicon::Check)->iconButton()->label('Genommen')->action(function (Model $record) {
$orderstatusGenommen = Orderstatus::where('name', 'genommen')->first();
$record->orderstatus_id = $orderstatusGenommen->id;
$record->save();
})->visible(function(Model $record) {$orderstatusAngekommen = Orderstatus::where("name", "angekommen")->first();return ($orderstatusAngekommen->id == $record->orderstatus_id);}),
Action::make("url_oeffnen")->icon(Heroicon::Link)->iconButton()->label("URL öffnen")->url(function (Model $record) { return $record->url;}, true),
})->visible(function (Model $record) {
$orderstatusAngekommen = Orderstatus::where('name', 'angekommen')->first();
return $orderstatusAngekommen->id == $record->orderstatus_id;
}),
Action::make('url_oeffnen')->icon(Heroicon::Link)->iconButton()->label('URL öffnen')->url(function (Model $record) {
return $record->url;
}, true),
EditAction::make()->iconButton(),
DeleteAction::make()->iconButton(),
], position: RecordActionsPosition::BeforeColumns)
@@ -108,24 +123,24 @@ class OrdersTable
BulkActionGroup::make([
DeleteBulkAction::make(),
Action::make('bestellt_bulk')
->label("Ausgewählte bestellt")
->label('Ausgewählte bestellt')
->accessSelectedRecords()
->action(function (Collection $selectedRecords) {
$orderstatusBestellt = Orderstatus::where("name", "bestellt")->first();
$orderstatusBestellt = Orderstatus::where('name', 'bestellt')->first();
$selectedRecords->each(
fn (Model $selectedRecord) => $selectedRecord->update([
'orderstatus_id' => $orderstatusBestellt->id
'orderstatus_id' => $orderstatusBestellt->id,
]),
);
})->requiresConfirmation()->icon(Heroicon::ShoppingCart),
Action::make('angekommen_bulk')
->label("Ausgewählte angekommen")
->label('Ausgewählte angekommen')
->accessSelectedRecords()
->action(function (Collection $selectedRecords) {
$orderstatusAngekommen = Orderstatus::where("name", "angekommen")->first();
$orderstatusAngekommen = Orderstatus::where('name', 'angekommen')->first();
$selectedRecords->each(
fn (Model $selectedRecord) => $selectedRecord->update([
'orderstatus_id' => $orderstatusAngekommen->id
'orderstatus_id' => $orderstatusAngekommen->id,
]),
);
})->requiresConfirmation()->icon(Heroicon::BuildingOffice),
@@ -2,9 +2,7 @@
namespace App\Filament\Resources\Users\Schemas;
use App\Filament\Resources\Groups\GroupResource;
use App\Filament\Resources\Groups\Schemas\GroupForm;
use Filament\Forms\Components\Checkbox;
use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
@@ -36,7 +34,7 @@ class UserForm
->relationship('groups', 'name')
->label('Gruppen')
->preload()
->createOptionForm(function(Schema $schema) {
->createOptionForm(function (Schema $schema) {
return GroupForm::configure($schema);
})
->multiple(),
@@ -24,10 +24,10 @@ class UsersTable
->dateTime()
->sortable(),
TextColumn::make('roles.title')
->label("Rollen")
->label('Rollen')
->toggleable(),
TextColumn::make('groups.name')
->label("Gruppen")
->label('Gruppen')
->toggleable(),
TextColumn::make('created_at')
->dateTime()
@@ -15,19 +15,22 @@ use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table;
use UnitEnum;
use Override;
class UserResource extends Resource
{
protected static ?string $model = User::class;
protected static string|BackedEnum|null $navigationIcon = Heroicon::User;
protected static string | UnitEnum | null $navigationGroup = 'Verwaltung';
protected static ?string $navigationLabel = "Benutzer";
protected static ?string $pluralLabel = "Benutzer";
protected static ?string $pluralModelLabel = "Benutzer";
protected static ?string $modelLabel = "Benutzer";
protected static string|UnitEnum|null $navigationGroup = 'Verwaltung';
protected static ?string $navigationLabel = 'Benutzer';
protected static ?string $pluralLabel = 'Benutzer';
protected static ?string $pluralModelLabel = 'Benutzer';
protected static ?string $modelLabel = 'Benutzer';
public static function form(Schema $schema): Schema
{