schema([ Forms\Components\TextInput::make('order_number') ->required() ->disabled() ->maxLength(255), Forms\Components\TextInput::make('customer_name') ->required() ->maxLength(255), Forms\Components\TextInput::make('customer_email') ->email() ->required() ->maxLength(255), Forms\Components\TextInput::make('customer_phone') ->tel() ->maxLength(20), Forms\Components\Textarea::make('shipping_address') ->required() ->maxLength(500) ->columnSpanFull(), Forms\Components\Textarea::make('notes') ->maxLength(500) ->columnSpanFull(), Forms\Components\TextInput::make('total') ->required() ->numeric() ->prefix('R'), Forms\Components\Select::make('status') ->options([ 'pending' => 'Pending', 'processing' => 'Processing', 'completed' => 'Completed', 'cancelled' => 'Cancelled', ]) ->required(), Forms\Components\Select::make('payment_status') ->options([ 'pending' => 'Pending', 'paid' => 'Paid', 'failed' => 'Failed', ]) ->required(), Forms\Components\TextInput::make('payment_method') ->maxLength(50), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('order_number') ->searchable(), Tables\Columns\TextColumn::make('customer_name') ->searchable(), Tables\Columns\TextColumn::make('customer_email') ->searchable(), Tables\Columns\TextColumn::make('total') ->money('ZAR') ->sortable(), Tables\Columns\TextColumn::make('status') ->badge() ->color(fn (string $state): string => match ($state) { 'pending' => 'warning', 'processing' => 'info', 'completed' => 'success', 'cancelled' => 'danger', }), Tables\Columns\TextColumn::make('payment_status') ->badge() ->color(fn (string $state): string => match ($state) { 'pending' => 'warning', 'paid' => 'success', 'failed' => 'danger', }), Tables\Columns\TextColumn::make('created_at') ->dateTime() ->sortable(), ]) ->filters([ Tables\Filters\SelectFilter::make('status') ->options([ 'pending' => 'Pending', 'processing' => 'Processing', 'completed' => 'Completed', 'cancelled' => 'Cancelled', ]), Tables\Filters\SelectFilter::make('payment_status') ->options([ 'pending' => 'Pending', 'paid' => 'Paid', 'failed' => 'Failed', ]), ]) ->actions([ // ]) ->bulkActions([ // ]) ->defaultSort('created_at', 'desc'); } public static function getRelations(): array { return [ // ]; } public static function getPages(): array { return [ 'index' => Pages\ListOrders::route('/'), 'create' => Pages\CreateOrder::route('/create'), 'view' => Pages\ViewOrder::route('/{record}'), 'edit' => Pages\EditOrder::route('/{record}/edit'), ]; } }