up
This commit is contained in:
@@ -0,0 +1,161 @@
|
||||
<?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'),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Resources\OjalPresillaResource\Pages;
|
||||
|
||||
use App\Filament\Resources\OjalPresillaResource;
|
||||
use Filament\Resources\Pages\CreateRecord;
|
||||
|
||||
class CreateOjalPresilla extends CreateRecord
|
||||
{
|
||||
protected static string $resource = OjalPresillaResource::class;
|
||||
|
||||
protected function mutateFormDataBeforeCreate(array $data): array
|
||||
{
|
||||
$tipo = $data['tipo'] ?? 'ojal';
|
||||
unset($data['tipo']);
|
||||
|
||||
// Guardar en la tabla correspondiente
|
||||
if ($tipo === 'prensilla') {
|
||||
$record = \App\Models\Prensilla::create($data);
|
||||
} else {
|
||||
$record = \App\Models\Ojal::create($data);
|
||||
}
|
||||
|
||||
// Redirigir al listado
|
||||
$this->redirect(OjalPresillaResource::getUrl('index'));
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Resources\OjalPresillaResource\Pages;
|
||||
|
||||
use App\Filament\Resources\OjalPresillaResource;
|
||||
use Filament\Actions;
|
||||
use Filament\Resources\Pages\EditRecord;
|
||||
|
||||
class EditOjalPresilla extends EditRecord
|
||||
{
|
||||
protected static string $resource = OjalPresillaResource::class;
|
||||
|
||||
protected function getHeaderActions(): array
|
||||
{
|
||||
return [
|
||||
Actions\DeleteAction::make(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Resources\OjalPresillaResource\Pages;
|
||||
|
||||
use App\Filament\Resources\OjalPresillaResource;
|
||||
use Filament\Actions;
|
||||
use Filament\Resources\Pages\ListRecords;
|
||||
|
||||
class ListOjalPresillas extends ListRecords
|
||||
{
|
||||
protected static string $resource = OjalPresillaResource::class;
|
||||
|
||||
protected function getHeaderActions(): array
|
||||
{
|
||||
return [
|
||||
Actions\CreateAction::make(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,12 @@ class OjalResource extends Resource
|
||||
protected static ?string $model = Ojal::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 ojals') ?? false;
|
||||
}
|
||||
|
||||
public static function form(Forms\Form $form): Forms\Form
|
||||
{
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user