From 7763de0d707ff06fe3897bf2268e5e513f3fbcff Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Mon, 9 Feb 2026 15:09:15 -0500 Subject: [PATCH] up --- .../Resources/ProcesoAcabadoResource.php | 59 ++++++++- .../CobrosRelationManager.php | 119 ------------------ app/Models/ProcesoAcabado.php | 5 +- 3 files changed, 55 insertions(+), 128 deletions(-) delete mode 100644 app/Filament/Resources/ProcesoAcabadoResource/RelationManagers/CobrosRelationManager.php diff --git a/app/Filament/Resources/ProcesoAcabadoResource.php b/app/Filament/Resources/ProcesoAcabadoResource.php index b9a25a0..a926cd6 100644 --- a/app/Filament/Resources/ProcesoAcabadoResource.php +++ b/app/Filament/Resources/ProcesoAcabadoResource.php @@ -53,8 +53,7 @@ class ProcesoAcabadoResource extends Resource foreach ($tintoreriaRecords as $tintoreria) { $recepciones = (int) $tintoreria->recepciones()->sum(DB::raw('cantidad - COALESCE(prendas_defectuosas, 0)')); $reprocesos = (int) $tintoreria->ajustes()->where('tipo', 'reproceso')->sum('cantidad'); - $cobros = (int) $tintoreria->cobros()->sum('cantidad'); - $disponible += ($recepciones - $reprocesos - $cobros); + $disponible += ($recepciones - $reprocesos); } // Restar lo que ya se envió a otros acabados @@ -99,8 +98,7 @@ class ProcesoAcabadoResource extends Resource foreach ($tintoreriaRecords as $tintoreria) { $recepciones = (int) $tintoreria->recepciones()->sum(DB::raw('cantidad - COALESCE(prendas_defectuosas, 0)')); $reprocesos = (int) $tintoreria->ajustes()->where('tipo', 'reproceso')->sum('cantidad'); - $cobros = (int) $tintoreria->cobros()->sum('cantidad'); - $disponible += ($recepciones - $reprocesos - $cobros); + $disponible += ($recepciones - $reprocesos); } // Restar lo que ya se envió a otros acabados @@ -179,8 +177,58 @@ class ProcesoAcabadoResource extends Resource ]) ->collapsed(fn ($get) => !$get('distribucion_proveedores')), - Section::make('Estado') + Section::make('Estado y Resumen') ->schema([ + Forms\Components\Placeholder::make('resumen_estado') + ->label('Resumen del Proceso') + ->content(function ($get, $record) { + if (!$record) { + return 'Guarda el registro para ver el resumen'; + } + + $enviadas = (int) ($record->cantidad_enviada ?? 0); + $recibidas = $record->recibido_total ?? 0; + $defectuosas = $record->perdidas_total ?? 0; + $faltantes = $record->faltantes ?? 0; + $estado = $record->estado_recepcion ?? 'Sin envío'; + + $html = '
'; + $html .= '
📊 Resumen de Estado
'; + $html .= '
'; + + // Estado general + $colorEstado = match($estado) { + 'Completado' => '#10b981', + 'Parcial' => '#f59e0b', + default => '#6b7280' + }; + $html .= '
Estado: ' . $estado . '
'; + + // Enviadas + $html .= '
Enviadas: ' . $enviadas . '
'; + + // Recibidas + $html .= '
Recibidas: ' . $recibidas . '
'; + + // Pendientes/Faltantes + $colorFaltantes = $faltantes > 0 ? '#f59e0b' : '#10b981'; + $html .= '
Pendientes: ' . $faltantes . '
'; + + // Defectuosas + if ($defectuosas > 0) { + $html .= '
Defectuosas: ' . $defectuosas . '
'; + } + + // Entregadas (listas para inventario) + $entregadas = max(0, $recibidas); + $html .= '
Listas p/Inventario: ' . $entregadas . '
'; + + $html .= '
'; + + return new \Illuminate\Support\HtmlString($html); + }) + ->visible(fn ($record) => $record !== null), + Forms\Components\Checkbox::make('terminada') ->label('Marcar como terminada') ->helperText('Marca esta casilla cuando el proceso haya finalizado'), @@ -301,7 +349,6 @@ class ProcesoAcabadoResource extends Resource return [ RelationManagers\RecepcionesRelationManager::class, RelationManagers\AjustesRelationManager::class, - RelationManagers\CobrosRelationManager::class, ]; } diff --git a/app/Filament/Resources/ProcesoAcabadoResource/RelationManagers/CobrosRelationManager.php b/app/Filament/Resources/ProcesoAcabadoResource/RelationManagers/CobrosRelationManager.php deleted file mode 100644 index c5db328..0000000 --- a/app/Filament/Resources/ProcesoAcabadoResource/RelationManagers/CobrosRelationManager.php +++ /dev/null @@ -1,119 +0,0 @@ -schema([ - TextInput::make('cantidad') - ->label('Cantidad de Prendas') - ->numeric() - ->required() - ->minValue(1) - ->helperText('Cantidad de prendas con defectos que se cobrarán al proveedor'), - - TextInput::make('valor') - ->label('Valor a Cobrar') - ->numeric() - ->required() - ->minValue(0) - ->prefix('$') - ->helperText('Monto total a descontar al proveedor'), - - DateTimePicker::make('fecha') - ->label('Fecha del Cobro') - ->required() - ->default(now()), - - Textarea::make('notas') - ->label('Motivo del Cobro') - ->rows(3) - ->maxLength(65535) - ->helperText('Describe los defectos encontrados'), - ]); - } - - public function table(Tables\Table $table): Tables\Table - { - return $table - ->columns([ - TextColumn::make('id') - ->label('#') - ->sortable(), - - TextColumn::make('cantidad') - ->label('Cantidad') - ->sortable() - ->badge() - ->color('danger'), - - TextColumn::make('valor') - ->label('Valor') - ->money('COP') - ->sortable(), - - TextColumn::make('fecha') - ->label('Fecha') - ->dateTime('d/m/Y H:i') - ->sortable(), - - TextColumn::make('usuario.name') - ->label('Usuario') - ->searchable(), - - TextColumn::make('notas') - ->label('Motivo') - ->limit(50) - ->wrap() - ->toggleable(), - - TextColumn::make('created_at') - ->label('Creado') - ->dateTime('d/m/Y H:i') - ->sortable() - ->toggleable(isToggledHiddenByDefault: true), - ]) - ->defaultSort('fecha', 'desc') - ->headerActions([ - CreateAction::make() - ->label('Nuevo Cobro') - ->icon('heroicon-o-minus-circle') - ->mutateFormDataUsing(function (array $data): array { - $data['user_id'] = Auth::id(); - return $data; - }), - ]) - ->actions([ - EditAction::make(), - DeleteAction::make(), - ]) - ->bulkActions([ - Tables\Actions\BulkActionGroup::make([ - Tables\Actions\DeleteBulkAction::make(), - ]), - ]) - ->emptyStateHeading('Sin cobros registrados') - ->emptyStateDescription('Registra cobros por prendas defectuosas que no pasarán a inventario.') - ->emptyStateIcon('heroicon-o-currency-dollar'); - } -} diff --git a/app/Models/ProcesoAcabado.php b/app/Models/ProcesoAcabado.php index 00b9fd4..2cc8588 100644 --- a/app/Models/ProcesoAcabado.php +++ b/app/Models/ProcesoAcabado.php @@ -56,14 +56,13 @@ class ProcesoAcabado extends Model } // Total recibido calculado desde recepciones (fuente de verdad) - // Menos reprocesos (permiten re-recepción) y menos cobros (no pasan a inventario) + // Menos reprocesos (permiten re-recepción) public function getRecibidoTotalAttribute() { $recepciones = (int) $this->recepciones()->sum(DB::raw('cantidad - COALESCE(prendas_defectuosas, 0)')); $reprocesos = (int) $this->ajustes()->where('tipo', 'reproceso')->sum('cantidad'); - $cobros = (int) $this->cobros()->sum('cantidad'); - return max(0, $recepciones - $reprocesos - $cobros); + return max(0, $recepciones - $reprocesos); } // Total de pérdidas registradas en las recepciones