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 $model = Ojal::class;
|
||||||
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
|
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
|
||||||
protected static ?string $navigationGroup = 'Producción';
|
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
|
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 $model = Prensilla::class;
|
||||||
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
|
protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';
|
||||||
protected static ?string $navigationGroup = 'Producción';
|
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
|
public static function form(Forms\Form $form): Forms\Form
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user