162 lines
5.9 KiB
PHP
162 lines
5.9 KiB
PHP
<?php
|
|
|
|
namespace App\Filament\Resources;
|
|
|
|
use App\Filament\Resources\OjalPresillaResource\Pages;
|
|
use App\Models\Ojal;
|
|
use App\Models\Prensilla;
|
|
use Filament\Forms;
|
|
use Filament\Resources\Resource;
|
|
use Filament\Tables;
|
|
use Filament\Forms\Components\Select;
|
|
use Filament\Forms\Components\TextInput;
|
|
use Filament\Forms\Components\DatePicker;
|
|
use Filament\Tables\Filters\SelectFilter;
|
|
|
|
class OjalPresillaResource extends Resource
|
|
{
|
|
protected static ?string $model = Ojal::class;
|
|
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
|
|
protected static ?string $navigationGroup = 'Producción';
|
|
protected static ?string $navigationLabel = 'Ojales y Prensillas';
|
|
protected static ?string $pluralModelLabel = 'Ojales y Prensillas';
|
|
|
|
public static function canViewAny(): bool
|
|
{
|
|
return auth()->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'),
|
|
];
|
|
}
|
|
}
|