u
This commit is contained in:
@@ -166,6 +166,7 @@ class ConfeccionResource extends Resource
|
||||
TextColumn::make('total_pagar')
|
||||
->money('COP'),
|
||||
])
|
||||
->defaultSort('created_at', 'desc')
|
||||
->filters([
|
||||
Tables\Filters\SelectFilter::make('orden_produccion_id')
|
||||
->label('Orden de Producción')
|
||||
|
||||
@@ -135,6 +135,7 @@ class InventarioPrendaResource extends Resource
|
||||
'success' => 'lista_despacho',
|
||||
]),
|
||||
])
|
||||
->defaultSort('created_at', 'desc')
|
||||
->filters([
|
||||
Tables\Filters\SelectFilter::make('orden_produccion_id')
|
||||
->label('Orden de Producción')
|
||||
|
||||
@@ -140,7 +140,8 @@ class OrdenProduccionResource extends Resource
|
||||
->label('Tela')
|
||||
->toggleable(),
|
||||
|
||||
BadgeColumn::make('estado')
|
||||
BadgeColumn::make('estado_display')
|
||||
->label('Estado')
|
||||
->colors([
|
||||
'warning' => 'en_corte',
|
||||
'info' => 'en_confeccion',
|
||||
@@ -159,11 +160,37 @@ class OrdenProduccionResource extends Resource
|
||||
TextColumn::make('fecha_entrega_estimada')
|
||||
->date(),
|
||||
])
|
||||
->defaultSort('created_at', 'desc')
|
||||
->filters([
|
||||
//
|
||||
])
|
||||
->actions([
|
||||
Tables\Actions\EditAction::make(),
|
||||
|
||||
Tables\Actions\Action::make('finalizar')
|
||||
->label('Finalizar')
|
||||
->icon('heroicon-o-check')
|
||||
->color('success')
|
||||
->requiresConfirmation()
|
||||
->visible(fn($record) => $record->estado !== 'finalizada')
|
||||
->action(function ($record) {
|
||||
try {
|
||||
// Forzar finalización
|
||||
$record->manualFinalize();
|
||||
|
||||
\Filament\Notifications\Notification::make()
|
||||
->success()
|
||||
->title('Orden finalizada')
|
||||
->body('La orden se marcó como finalizada manualmente.')
|
||||
->send();
|
||||
} catch (\Throwable $e) {
|
||||
\Filament\Notifications\Notification::make()
|
||||
->danger()
|
||||
->title('Error')
|
||||
->body($e->getMessage())
|
||||
->send();
|
||||
}
|
||||
}),
|
||||
])
|
||||
->bulkActions([
|
||||
Tables\Actions\BulkActionGroup::make([
|
||||
|
||||
@@ -51,15 +51,14 @@ class ProcesoAcabadoResource extends Resource
|
||||
->required()
|
||||
->afterStateUpdated(function ($state, $set) {
|
||||
if ($state) {
|
||||
// Sumar lo recibido en Tintorería
|
||||
// Total recibido en Tintorería para esta OP
|
||||
$sumTint = \App\Models\Tintoreria::where('orden_produccion_id', $state)->sum('cantidad_recibida');
|
||||
|
||||
// Restar lo ya enviado a acabados y aún en proceso
|
||||
$sentInProcess = \App\Models\ProcesoAcabado::where('orden_produccion_id', $state)
|
||||
->whereNull('fecha_recepcion')
|
||||
// Restar todo lo ya enviado a procesos de acabados (de la misma OP)
|
||||
$sentToAcabados = \App\Models\ProcesoAcabado::where('orden_produccion_id', $state)
|
||||
->sum('cantidad_enviada');
|
||||
|
||||
$pending = max(0, (int)$sumTint - (int)$sentInProcess);
|
||||
$pending = max(0, (int)$sumTint - (int)$sentToAcabados);
|
||||
|
||||
$set('cantidad_enviada', $pending ?: 0);
|
||||
$set('fecha_envio', now()->toDateString());
|
||||
@@ -85,7 +84,8 @@ class ProcesoAcabadoResource extends Resource
|
||||
->numeric()
|
||||
->required()
|
||||
->reactive()
|
||||
->helperText(fn ($get) => 'Sugerido: ' . (\App\Models\Tintoreria::where('orden_produccion_id', $get('orden_produccion_id'))->sum('cantidad_recibida') ?: 0)),
|
||||
->helperText(fn ($get) => 'Sugerido: ' . (max(0, (int)\App\Models\Tintoreria::where('orden_produccion_id', $get('orden_produccion_id'))->sum('cantidad_recibida') - (int)\App\Models\ProcesoAcabado::where('orden_produccion_id', $get('orden_produccion_id'))->sum('cantidad_enviada')) ?: 0)),
|
||||
|
||||
|
||||
DatePicker::make('fecha_envio')
|
||||
->required()
|
||||
@@ -144,6 +144,7 @@ class ProcesoAcabadoResource extends Resource
|
||||
'success' => fn($state) => $state !== null,
|
||||
]),
|
||||
])
|
||||
->defaultSort('created_at', 'desc')
|
||||
->filters([
|
||||
Tables\Filters\SelectFilter::make('orden_produccion_id')
|
||||
->label('Orden de Producción')
|
||||
|
||||
@@ -98,6 +98,7 @@ class TelaResource extends Resource
|
||||
Tables\Columns\TextColumn::make('costo_por_metro')->money('USD')->sortable(),
|
||||
Tables\Columns\TextColumn::make('fecha_compra')->date()->sortable(),
|
||||
])
|
||||
->defaultSort('created_at', 'desc')
|
||||
->filters([
|
||||
Tables\Filters\SelectFilter::make('tipo')
|
||||
->options([
|
||||
|
||||
@@ -167,6 +167,7 @@ class TintoreriaResource extends Resource
|
||||
->getStateUsing(fn($record) => optional($record->recepciones()->latest('fecha_recepcion')->first())->fecha_recepcion)
|
||||
->date(),
|
||||
])
|
||||
->defaultSort('created_at', 'desc')
|
||||
->filters([
|
||||
Tables\Filters\SelectFilter::make('orden_produccion_id')
|
||||
->label('Orden de Producción')
|
||||
|
||||
@@ -78,6 +78,7 @@ class TrasladoPrendaResource extends Resource
|
||||
TextColumn::make('fecha_recepcion')->dateTime(),
|
||||
TextColumn::make('referencia_type')->label('Referencia'),
|
||||
])
|
||||
->defaultSort('created_at', 'desc')
|
||||
->filters([
|
||||
SelectFilter::make('orden_produccion_id')
|
||||
->label('Orden de Producción')
|
||||
|
||||
@@ -190,6 +190,43 @@ class OrdenProduccion extends Model
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Estado calculado para mostrar en UI: si está completada o la última etapa que tiene tareas pendientes.
|
||||
*/
|
||||
public function getEstadoDisplayAttribute()
|
||||
{
|
||||
if ($this->canBeFinalized() || $this->estado === 'finalizada') {
|
||||
return 'finalizada';
|
||||
}
|
||||
|
||||
// Revisar etapas de último a primero para encontrar la etapa que aún tiene tareas pendientes
|
||||
if (\App\Models\ProcesoAcabado::where('orden_produccion_id', $this->id)->whereNull('fecha_recepcion')->exists()) {
|
||||
return 'en_acabados';
|
||||
}
|
||||
|
||||
if (\App\Models\Tintoreria::where('orden_produccion_id', $this->id)->whereNull('fecha_recepcion')->exists()) {
|
||||
return 'en_tintoreria';
|
||||
}
|
||||
|
||||
if (\App\Models\Confeccion::where('orden_produccion_id', $this->id)->whereNull('fecha_recepcion')->exists()) {
|
||||
return 'en_confeccion';
|
||||
}
|
||||
|
||||
// Por defecto devolver el estado actual (incluye en_corte u otros)
|
||||
return $this->estado ?? 'en_corte';
|
||||
}
|
||||
|
||||
/**
|
||||
* Forzar finalización manualmente (útil si desea marcar como finalizada aunque no esté totalmente recibida)
|
||||
*/
|
||||
public function manualFinalize(): void
|
||||
{
|
||||
$this->update(['estado' => 'finalizada']);
|
||||
|
||||
// Intentar crear inventario con lo recibido hasta ahora
|
||||
$this->crearInventarioPorFinalizacion();
|
||||
}
|
||||
|
||||
public function avanzarEstado(): void
|
||||
{
|
||||
$flujo = [
|
||||
|
||||
Reference in New Issue
Block a user