create(['categoria' => 'talleres']); $op = OrdenProduccion::create([ 'prenda_modelo' => 'Pantalon A', 'referencia' => 'PAN-A', 'cantidad_total' => 50, 'fecha_inicio' => now(), 'fecha_entrega_estimada' => now()->addDays(7), 'estado' => 'finalizada', ]); $traslado = TrasladoPrenda::create([ 'orden_produccion_id' => $op->id, 'referencia_type' => 'App\\Models\\Confeccion', 'referencia_id' => 1, 'origen' => 'acabados', 'destino' => 'bodega', 'cantidad_enviada' => 40, 'cantidad_recibida' => null, 'prendas_defectuosas' => 0, 'reparaciones' => 0, 'saldos' => 0, 'estado' => 'pendiente', ]); $this->actingAs(\App\Models\User::factory()->create()); $response = $this->post(route('filament.traslados.mark-received', ['traslado' => $traslado->id])); $response->assertRedirect(); $traslado->refresh(); $this->assertEquals('recibido', $traslado->estado); $this->assertEquals(40, $traslado->cantidad_recibida); $this->assertDatabaseHas('inventario_prendas', [ 'orden_produccion_id' => $op->id, 'cantidad_terminada' => 40, 'cantidad_disponible' => 40, ]); } public function test_mark_translado_with_manual_values_calculates_residual_and_creates_inventory() { $op = OrdenProduccion::create([ 'prenda_modelo' => 'Chaqueta B', 'referencia' => 'CHA-B', 'cantidad_total' => 50, 'fecha_inicio' => now(), 'fecha_entrega_estimada' => now()->addDays(7), 'estado' => 'finalizada', ]); $traslado = TrasladoPrenda::create([ 'orden_produccion_id' => $op->id, 'referencia_type' => 'App\\Models\\Confeccion', 'referencia_id' => 1, 'origen' => 'acabados', 'destino' => 'bodega', 'cantidad_enviada' => 50, 'cantidad_recibida' => null, 'prendas_defectuosas' => 0, 'reparaciones' => 0, 'saldos' => 0, 'estado' => 'pendiente', ]); $this->actingAs(\App\Models\User::factory()->create()); // Marcar recibido con valores manuales $response = $this->post(route('filament.traslados.mark-received', ['traslado' => $traslado->id]), [ 'cantidad_recibida' => 45, 'prendas_defectuosas' => 2, 'reparaciones' => 1, 'saldos' => 1, ]); $response->assertRedirect(); $traslado->refresh(); $this->assertEquals('recibido', $traslado->estado); $this->assertEquals(45, $traslado->cantidad_recibida); // residual = 50 - (45 + 2 + 1 + 1) = 1 $this->assertEquals(1, $traslado->residual); $this->assertDatabaseHas('inventario_prendas', [ 'orden_produccion_id' => $op->id, 'cantidad_terminada' => 45, 'cantidad_disponible' => 45, ]); } }