up
This commit is contained in:
@@ -107,6 +107,22 @@ class TintoreriaResource extends Resource
|
||||
->required()
|
||||
->reactive()
|
||||
->helperText(fn ($get) => 'Sugerido: ' . (\App\Models\Confeccion::where('orden_produccion_id', $get('orden_produccion_id'))->sum('cantidad_recibida') ?: 0)),
|
||||
|
||||
TextInput::make('valor_por_prenda')
|
||||
->label('Valor por prenda')
|
||||
->numeric()
|
||||
->prefix('$')
|
||||
->default(0)
|
||||
->required()
|
||||
->helperText('Valor a pagar por cada prenda procesada'),
|
||||
|
||||
TextInput::make('total_pagar')
|
||||
->label('Total a pagar')
|
||||
->numeric()
|
||||
->prefix('$')
|
||||
->readOnly()
|
||||
->default(0)
|
||||
->helperText('Se calcula automáticamente: (cantidad recibida × valor por prenda) - descuentos por cobros'),
|
||||
])
|
||||
->columns(2),
|
||||
|
||||
@@ -132,6 +148,11 @@ class TintoreriaResource extends Resource
|
||||
$totalContabilizado = $recibidoNeto + $cobros;
|
||||
$faltantes = max(0, $enviada - $totalContabilizado);
|
||||
|
||||
$valorPorPrenda = (float) ($tintoreria->valor_por_prenda ?? 0);
|
||||
$cantidadBase = $tintoreria->cantidad_recibida ?? $enviada;
|
||||
$valorTotal = $cantidadBase * $valorPorPrenda;
|
||||
$valorAPagar = max(0, $valorTotal - $cobrosValor);
|
||||
|
||||
return "━━━ PRENDAS ━━━
|
||||
📦 Enviadas: {$enviada}
|
||||
|
||||
@@ -142,8 +163,10 @@ class TintoreriaResource extends Resource
|
||||
💰 Cobradas: {$cobros} prendas
|
||||
⚠️ Pendientes: {$faltantes}
|
||||
|
||||
━━━ COBROS ━━━
|
||||
💸 Total cobros: $" . number_format($cobrosValor, 2);
|
||||
━━━ PAGO ━━━
|
||||
💵 Valor total: $" . number_format($valorTotal, 2) . "
|
||||
💸 Descuento cobros: $" . number_format($cobrosValor, 2) . "
|
||||
✅ A pagar: $" . number_format($valorAPagar, 2);
|
||||
}),
|
||||
|
||||
Forms\Components\Placeholder::make('instrucciones')
|
||||
@@ -196,6 +219,11 @@ class TintoreriaResource extends Resource
|
||||
TextColumn::make('perdidas')
|
||||
->label('Pérdidas'),
|
||||
|
||||
TextColumn::make('total_pagar')
|
||||
->label('Total a pagar')
|
||||
->money('COP')
|
||||
->sortable(),
|
||||
|
||||
TextColumn::make('ultima_recepcion')
|
||||
->label('Fecha recepción')
|
||||
->getStateUsing(fn($record) => optional($record->recepciones()->latest('fecha_recepcion')->first())->fecha_recepcion)
|
||||
|
||||
@@ -12,10 +12,13 @@ class Tintoreria extends Model
|
||||
'tipo_proceso',
|
||||
'fecha_envio',
|
||||
'cantidad_enviada',
|
||||
'valor_por_prenda',
|
||||
'fecha_recepcion',
|
||||
'cantidad_recibida',
|
||||
'perdidas',
|
||||
'observaciones',
|
||||
'descuentos_cobros',
|
||||
'total_pagar',
|
||||
];
|
||||
|
||||
/* Relaciones */
|
||||
@@ -53,6 +56,18 @@ class Tintoreria extends Model
|
||||
$tintoreria->cantidad_enviada - $tintoreria->cantidad_recibida;
|
||||
if ($tintoreria->perdidas < 0) $tintoreria->perdidas = 0;
|
||||
}
|
||||
|
||||
// Total a pagar: usa cantidad_recibida si existe, sino cantidad_enviada
|
||||
$cantidadBase = $tintoreria->cantidad_recibida ?? $tintoreria->cantidad_enviada ?? 0;
|
||||
$valorUnitario = $tintoreria->valor_por_prenda ?? 0;
|
||||
|
||||
// Aplicar descuentos de cobros si existen
|
||||
$descuentos = (float) ($tintoreria->getCobrosTotalAttribute() ?? 0);
|
||||
|
||||
$tintoreria->total_pagar = max(0, ($cantidadBase * $valorUnitario) - $descuentos);
|
||||
|
||||
// Mantener campo redundante 'descuentos_cobros' sincronizado
|
||||
$tintoreria->descuentos_cobros = $descuentos;
|
||||
});
|
||||
|
||||
// Avanzar OP al cerrar el paso o cuando se complete
|
||||
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('tintorerias', function (Blueprint $table) {
|
||||
$table->decimal('valor_por_prenda', 10, 2)->default(0)->after('cantidad_enviada');
|
||||
$table->decimal('total_pagar', 12, 2)->default(0)->after('descuentos_cobros');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('tintorerias', function (Blueprint $table) {
|
||||
$table->dropColumn(['valor_por_prenda', 'total_pagar']);
|
||||
});
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user