diff --git a/app/Filament/Resources/OjalPresillaResource.php b/app/Filament/Resources/OjalPresillaResource.php new file mode 100644 index 0000000..8e0c980 --- /dev/null +++ b/app/Filament/Resources/OjalPresillaResource.php @@ -0,0 +1,161 @@ +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'), + ]; + } +} diff --git a/app/Filament/Resources/OjalPresillaResource/Pages/CreateOjalPresilla.php b/app/Filament/Resources/OjalPresillaResource/Pages/CreateOjalPresilla.php new file mode 100644 index 0000000..b71ae48 --- /dev/null +++ b/app/Filament/Resources/OjalPresillaResource/Pages/CreateOjalPresilla.php @@ -0,0 +1,29 @@ +redirect(OjalPresillaResource::getUrl('index')); + + return $data; + } +} diff --git a/app/Filament/Resources/OjalPresillaResource/Pages/EditOjalPresilla.php b/app/Filament/Resources/OjalPresillaResource/Pages/EditOjalPresilla.php new file mode 100644 index 0000000..1bc2e70 --- /dev/null +++ b/app/Filament/Resources/OjalPresillaResource/Pages/EditOjalPresilla.php @@ -0,0 +1,19 @@ +user()?->can('ver ojals') ?? false; + } public static function form(Forms\Form $form): Forms\Form { diff --git a/app/Filament/Resources/PrensillaResource.php b/app/Filament/Resources/PrensillaResource.php index f9faea5..819b2de 100644 --- a/app/Filament/Resources/PrensillaResource.php +++ b/app/Filament/Resources/PrensillaResource.php @@ -16,6 +16,12 @@ class PrensillaResource extends Resource protected static ?string $model = Prensilla::class; protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; protected static ?string $navigationGroup = 'Producción'; + protected static bool $shouldRegisterNavigation = false; // Ocultar del menú + + public static function canViewAny(): bool + { + return auth()->user()?->can('ver prensillas') ?? false; + } public static function form(Forms\Form $form): Forms\Form {