From c615d25a3a161d06e43db35c33745b7acbc1b887 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Mon, 19 Jan 2026 11:03:25 -0500 Subject: [PATCH] up --- app/Filament/Widgets/PipelineOrdersWidget.php | 45 ++++++++++ .../Filament/OrdenProduccionController.php | 39 +++++++++ .../filament/gestion-dashboard.blade.php | 21 +---- .../widgets/pipeline-orders-widget.blade.php | 85 +++++++++++++++++++ routes/web.php | 4 + 5 files changed, 175 insertions(+), 19 deletions(-) create mode 100644 app/Filament/Widgets/PipelineOrdersWidget.php create mode 100644 app/Http/Controllers/Filament/OrdenProduccionController.php create mode 100644 resources/views/filament/widgets/pipeline-orders-widget.blade.php diff --git a/app/Filament/Widgets/PipelineOrdersWidget.php b/app/Filament/Widgets/PipelineOrdersWidget.php new file mode 100644 index 0000000..242cd5b --- /dev/null +++ b/app/Filament/Widgets/PipelineOrdersWidget.php @@ -0,0 +1,45 @@ + 'En corte', + 'en_confeccion' => 'En confección', + 'en_tintoreria' => 'En tintorería', + 'en_acabados' => 'En acabados', + 'finalizada' => 'Finalizada', + ]; + + public $ordersByState = []; + + public function mount() + { + $this->loadOrders(); + } + + public function loadOrders() + { + $this->ordersByState = []; + foreach (array_keys($this->states) as $s) { + $this->ordersByState[$s] = OrdenProduccion::where('estado', $s) + ->orderBy('fecha_entrega_estimada') + ->limit(12) + ->get(); + } + } + + // Allow external refresh + protected function getListeners(): array + { + return [ + 'pipelineUpdated' => 'loadOrders', + ]; + } +} diff --git a/app/Http/Controllers/Filament/OrdenProduccionController.php b/app/Http/Controllers/Filament/OrdenProduccionController.php new file mode 100644 index 0000000..412ab0d --- /dev/null +++ b/app/Http/Controllers/Filament/OrdenProduccionController.php @@ -0,0 +1,39 @@ +validate([ + 'state' => ['required', 'in:en_corte,en_confeccion,en_tintoreria,en_acabados,finalizada'], + ]); + + try { + $orden->update(['estado' => $data['state']]); + return response()->json(['ok' => true, 'state' => $data['state']]); + } catch (ValidationException $e) { + return response()->json(['ok' => false, 'message' => $e->getMessage()], 422); + } catch (\Exception $e) { + return response()->json(['ok' => false, 'message' => $e->getMessage()], 500); + } + } + + public function advance(Request $request, OrdenProduccion $orden) + { + try { + $orden->avanzarEstado(); + return response()->json(['ok' => true, 'state' => $orden->estado]); + } catch (ValidationException $e) { + return response()->json(['ok' => false, 'message' => $e->getMessage()], 422); + } catch (\Exception $e) { + return response()->json(['ok' => false, 'message' => $e->getMessage()], 500); + } + } +} diff --git a/resources/views/filament/gestion-dashboard.blade.php b/resources/views/filament/gestion-dashboard.blade.php index 81b0307..bdc5c3e 100644 --- a/resources/views/filament/gestion-dashboard.blade.php +++ b/resources/views/filament/gestion-dashboard.blade.php @@ -24,25 +24,8 @@ $recentTrans = TrasladoPrenda::latest()->limit(8)->get();
{{-- Kanban column (span 2) --}} -
-

Pipeline de Órdenes

-
- @foreach($ordersByState as $state => $orders) -
-

{{ ucfirst(str_replace('_',' ', $state)) }} ({{ $orders->count() }})

- -
- @endforeach -
+
+ @livewire('filament.widgets.pipeline-orders-widget')
{{-- Timeline of shipments --}} diff --git a/resources/views/filament/widgets/pipeline-orders-widget.blade.php b/resources/views/filament/widgets/pipeline-orders-widget.blade.php new file mode 100644 index 0000000..209abea --- /dev/null +++ b/resources/views/filament/widgets/pipeline-orders-widget.blade.php @@ -0,0 +1,85 @@ +
+

Pipeline interactivo

+
+ @foreach($states as $stateKey => $label) +
+

{{ $label }} ({{ count($ordersByState[$stateKey]) }})

+
+ @foreach($ordersByState[$stateKey] as $op) +
+
#{{ $op->numero_orden }} — {{ $op->prenda_modelo }}
+
Cant: {{ $op->cantidad_total }} · Metros: {{ $op->metros_requeridos }} · Entrega: {{ $op->fecha_entrega_estimada }}
+
+ Ver + +
+
+ @endforeach +
+
+ @endforeach +
+
+ + \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 1051229..842e323 100644 --- a/routes/web.php +++ b/routes/web.php @@ -58,4 +58,8 @@ Route::get('/imprimir-recibo/{venta}', [VentaController::class, 'imprimirRecibo' Route::middleware(['auth'])->group(function () { Route::post('/filament/traslados/{traslado}/mark-received', [\App\Http\Controllers\Filament\TrasladoPrendaController::class, 'markReceived'])->name('filament.traslados.mark-received'); + +// Routes for Kanban actions +Route::post('/filament/ordenes/{orden}/change-state', [\App\Http\Controllers\Filament\OrdenProduccionController::class, 'changeState']); +Route::post('/filament/ordenes/{orden}/advance', [\App\Http\Controllers\Filament\OrdenProduccionController::class, 'advance']); });