fix: preserve resolved flag when closing tickets

This commit is contained in:
hailin
2026-07-03 16:27:27 +08:00
parent 7692374067
commit 40ab7ca548
5 changed files with 47 additions and 4 deletions

View File

@@ -0,0 +1,21 @@
from django.db import migrations
def repair_closed_resolved_flags(apps, schema_editor):
Ticket = apps.get_model("tickets", "Ticket")
Ticket.objects.filter(
status="closed",
resolved_at__isnull=False,
resolution_summary__gt="",
is_resolved=False,
).update(is_resolved=True)
class Migration(migrations.Migration):
dependencies = [
("tickets", "0002_ticket_context_and_standard_categories"),
]
operations = [
migrations.RunPython(repair_closed_resolved_flags, migrations.RunPython.noop),
]

View File

@@ -95,7 +95,7 @@ def transition_ticket(
if to_status == "resolved":
ticket.resolved_at = timezone.now()
ticket.is_resolved = True if is_resolved is None else is_resolved
elif is_resolved is not None:
elif to_status != "closed" and is_resolved is not None:
ticket.is_resolved = is_resolved
if to_status == "closed":
ticket.closed_at = timezone.now()

View File

@@ -192,6 +192,28 @@ def test_technical_ticket_cannot_be_resolved_directly(admin_client, db):
assert response.status_code == 400
def test_closing_resolved_ticket_keeps_resolved_flag(admin_client, db):
ticket = Ticket.objects.create(
ticket_no="TK202607010106",
title="已解决待关闭",
description="A",
status="resolved",
is_resolved=True,
resolution_summary="已完成处理",
)
response = admin_client.post(
f"/api/tickets/{ticket.id}/status",
data={"status": "closed", "remark": "已回复", "is_resolved": False},
content_type="application/json",
)
assert response.status_code == 200
ticket.refresh_from_db()
assert ticket.status == "closed"
assert ticket.is_resolved is True
def test_get_ticket_events_returns_real_timeline_with_operator(admin_client, db):
user_model = get_user_model()
operator = user_model.objects.get(username="admin")