schema([ Section::make('Datos de la Orden') ->schema([ TextInput::make('prenda_modelo') ->label('Prenda / Modelo') ->required() ->maxLength(255), TextInput::make('referencia') ->required() ->maxLength(255), TextInput::make('cantidad_total') ->numeric() ->required() ->minValue(1), Select::make('tela_id') ->label('Tela asociada') ->relationship('tela', 'codigo') ->searchable() ->preload() ->nullable(), Select::make('producto_id') ->label('Producto (opcional)') ->relationship('producto', 'nombre') ->searchable() ->preload() ->nullable() ->helperText('Si no se selecciona, se intentará crear el producto automáticamente cuando la orden finalice.'), TextInput::make('metros_requeridos') ->label('Metros requeridos') ->numeric() ->required() ->minValue(0) ->reactive() ->helperText(fn ($get) => $get('tela_id') ? 'Máx. disponible: ' . (\App\Models\Tela::find($get('tela_id'))->metros_disponibles ?? 0) : 'Selecciona una tela') ->default(0), DatePicker::make('fecha_inicio') ->required() ->default(now()), DatePicker::make('fecha_entrega_estimada') ->required(), ]) ->columns(2), Section::make('Proceso') ->schema([ View::make('filament.orden_produccion.timeline') ->columnSpanFull(), ]) ->columnSpanFull(), ]); } public static function table(Table $table): Table { return $table ->columns([ TextColumn::make('numero_orden') ->label('OP') ->sortable(), TextColumn::make('prenda_modelo') ->searchable(), TextColumn::make('referencia') ->searchable(), TextColumn::make('cantidad_total') ->label('Cantidad'), TextColumn::make('tela.codigo') ->label('Tela') ->toggleable(), BadgeColumn::make('estado') ->colors([ 'warning' => 'en_corte', 'info' => 'en_confeccion', 'primary' => 'en_tintoreria', 'secondary' => 'en_acabados', 'success' => 'finalizada', ]) ->formatStateUsing(fn($state) => match ($state) { 'en_corte' => 'En corte', 'en_confeccion' => 'En confección', 'en_tintoreria' => 'En tintorería', 'en_acabados' => 'En acabados', 'finalizada' => 'Finalizada', }), TextColumn::make('fecha_entrega_estimada') ->date(), ]) ->filters([ // ]) ->actions([ Tables\Actions\EditAction::make(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), // Tables\Actions\Action::make('avanzar') // ->label('Avanzar estado') // ->icon('heroicon-o-arrow-right') // ->requiresConfirmation() // ->visible(fn($record) => $record->estado !== 'finalizada') // ->action(fn($record) => $record->avanzarEstado()), ]), ]); } public static function getRelations(): array { return [ RelationManagers\TrasladosRelationManager::class, ]; } public static function getPages(): array { return [ 'index' => Pages\ListOrdenProduccions::route('/'), 'create' => Pages\CreateOrdenProduccion::route('/create'), 'edit' => Pages\EditOrdenProduccion::route('/{record}/edit'), ]; } }