user()?->can('ver ojals') ?? false; } public static function form(Forms\Form $form): Forms\Form { return $form->schema([ Select::make('tipo') ->label('Tipo') ->options([ 'ojal' => 'Ojal', 'prensilla' => 'Prensilla', ]) ->required() ->live() ->afterStateUpdated(fn ($set) => $set('proveedor_id', null)), Select::make('proveedor_id') ->label('Proveedor') ->options(function ($get) { $tipo = $get('tipo') ?? 'prensilla_ojal'; return \App\Models\Proveedor::where('categoria', 'prensilla_ojal')->pluck('nombre', 'id'); }) ->searchable() ->preload() ->nullable(), Select::make('orden_produccion_id') ->label('Orden de Producción') ->relationship('ordenProduccion', 'numero_orden') ->searchable() ->preload() ->required(), DatePicker::make('fecha_envio') ->label('Fecha de envío') ->default(now()) ->required(), TextInput::make('cantidad_enviada') ->label('Cantidad enviada') ->numeric() ->required() ->minValue(1), DatePicker::make('fecha_recepcion') ->label('Fecha de recepción'), TextInput::make('cantidad_recibida') ->label('Cantidad recibida') ->numeric() ->nullable(), TextInput::make('perdidas') ->label('Pérdidas') ->numeric() ->default(0), ]); } public static function table(Tables\Table $table): Tables\Table { return $table ->modifyQueryUsing(function ($query) { // Union de ambas tablas $ojales = \App\Models\Ojal::select([ 'id', 'proveedor_id', 'orden_produccion_id', 'fecha_envio', 'cantidad_enviada', 'fecha_recepcion', 'cantidad_recibida', 'perdidas', 'created_at', \DB::raw("'ojal' as tipo") ]); $prensillas = \App\Models\Prensilla::select([ 'id', 'proveedor_id', 'orden_produccion_id', 'fecha_envio', 'cantidad_enviada', 'fecha_recepcion', 'cantidad_recibida', 'perdidas', 'created_at', \DB::raw("'prensilla' as tipo") ]); return $query->from(\DB::raw("({$ojales->toSql()} UNION ALL {$prensillas->toSql()}) as combined")) ->mergeBindings($ojales->getQuery()) ->mergeBindings($prensillas->getQuery()); }) ->columns([ Tables\Columns\TextColumn::make('tipo') ->badge() ->color(fn (string $state): string => match ($state) { 'ojal' => 'info', 'prensilla' => 'success', }) ->formatStateUsing(fn (string $state): string => ucfirst($state)), Tables\Columns\TextColumn::make('proveedor_id') ->label('Proveedor') ->formatStateUsing(fn ($state) => \App\Models\Proveedor::find($state)?->nombre ?? 'N/A'), Tables\Columns\TextColumn::make('orden_produccion_id') ->label('OP') ->formatStateUsing(fn ($state) => \App\Models\OrdenProduccion::find($state)?->numero_orden ?? 'N/A'), Tables\Columns\TextColumn::make('cantidad_enviada')->label('Enviadas'), Tables\Columns\TextColumn::make('cantidad_recibida')->label('Recibidas'), Tables\Columns\TextColumn::make('perdidas')->label('Pérdidas'), Tables\Columns\TextColumn::make('fecha_envio')->date()->label('F. Envío'), Tables\Columns\TextColumn::make('fecha_recepcion')->date()->label('F. Recepción'), ]) ->filters([ SelectFilter::make('tipo') ->options([ 'ojal' => 'Ojal', 'prensilla' => 'Prensilla', ]) ]) ->defaultSort('created_at', 'desc'); } public static function getPages(): array { return [ 'index' => Pages\ListOjalPresillas::route('/'), 'create' => Pages\CreateOjalPresilla::route('/create'), 'edit' => Pages\EditOjalPresilla::route('/{record}/edit'), ]; } }