share ticket and ticket message
This commit is contained in:
1 parent
39e64854b8
commit
79fe1cddbb
35 files changed
+1742
-95
No files matched your search
@@ -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})
|
||||
Reference in new issue
Block a user