share ticket and ticket message

This commit is contained in:
javad committed 2026-10-04 16:42:19 +03:30
1 parent 39e64854b8
commit 79fe1cddbb
35 files changed
+1742 -95

No files matched your search

+10 -5
View File
@@ -183,7 +183,14 @@ def share_ticket(ticket,user,target,level=TicketAccessGrant.Level.FULL):
@transaction.atomic
def revoke_access(ticket,user,target):
if not TicketPolicy.can_share(user,ticket): raise PermissionDenied
count=ticket.access_grants.filter(user=target,revoked_at__isnull=True).update(revoked_at=timezone.now()); TicketEvent.objects.create(ticket=ticket,event_type=TicketEvent.Type.ACCESS_REVOKED,actor=user,metadata={"user":target.pk}); return count
from .sharing import log_share
grants=list(ticket.access_grants.select_for_update().filter(user=target,revoked_at__isnull=True))
for grant in grants:
grant.revoked_at=timezone.now()
grant.revoked_by=user
grant.save(update_fields=["revoked_at","revoked_by"])
log_share(grant,user,TicketEvent.Type.ACCESS_REVOKED,"revoked")
return len(grants)
@transaction.atomic
def reply_ticket(*,ticket_id,user,body="",files=(),internal=False,mentioned_users=()):
@@ -236,8 +243,7 @@ def delete_ticket(*, ticket_id, user):
@transaction.atomic
def change_status(ticket,user,status):
permitted=user.has_perm("tickets.change_ticket") or TicketPolicy.has_unit_permission(user,ticket.owning_unit,"tickets.change_ticket")
if not (TicketPolicy.can_view(user,ticket) and permitted): raise PermissionDenied
if not TicketPolicy.can_operate(user,ticket): raise PermissionDenied
if status not in Ticket.Status.values: raise ValidationError("وضعیت نامعتبر است.")
old=ticket.status; now=timezone.now(); ticket.status=status
if status==Ticket.Status.RESOLVED: ticket.resolved_at=now
@@ -246,8 +252,7 @@ def change_status(ticket,user,status):
@transaction.atomic
def change_priority(ticket,user,priority):
permitted=user.has_perm("tickets.change_ticket_priority") or TicketPolicy.has_unit_permission(user,ticket.owning_unit,"tickets.change_ticket_priority")
if not (TicketPolicy.can_view(user,ticket) and permitted): raise PermissionDenied
if not TicketPolicy.can_operate(user,ticket): raise PermissionDenied
if priority not in Ticket.Priority.values: raise ValidationError("اولویت نامعتبر است.")
old=ticket.priority; ticket.priority=priority; ticket.save(update_fields=["priority","updated_at"])
TicketEvent.objects.create(ticket=ticket,event_type=TicketEvent.Type.PRIORITY_CHANGED,actor=user,metadata={"from":old,"to":priority})