create(['categoria' => 'tintoreria']); $op = OrdenProduccion::factory()->create(['cantidad_total' => 100]); $tint = Tintoreria::create([ 'proveedor_id' => $proveedor->id, 'orden_produccion_id' => $op->id, 'cantidad_enviada' => 50, ]); // Recepción parcial 30 Recepcion::create([ 'referencia_type' => Tintoreria::class, 'referencia_id' => $tint->id, 'cantidad' => 30, 'fecha_recepcion' => now(), ]); $tint->refresh(); $this->assertEquals(30, $tint->recibido_total); $this->assertEquals(20, $tint->faltantes); // Recepción con perdidas 25 y 5 faltantes Recepcion::create([ 'referencia_type' => Tintoreria::class, 'referencia_id' => $tint->id, 'cantidad' => 25, 'prendas_defectuosas' => 5, 'fecha_recepcion' => now(), ]); $tint->refresh(); // recibido efectivo: 30 + (25 - 5) = 50 $this->assertEquals(50, $tint->recibido_total); $this->assertEquals(0, $tint->faltantes); // Ultimo traslado deberia tener cantidad_recibida ajustada a 20 (25-5) $ultimoTraslado = TrasladoPrenda::where('referencia_type', Tintoreria::class) ->where('referencia_id', $tint->id) ->latest('id') ->first(); $this->assertNotNull($ultimoTraslado); $this->assertEquals(20, $ultimoTraslado->cantidad_recibida); $this->assertEquals(5, $ultimoTraslado->prendas_defectuosas); } }