Files
customerTicket/apps/tickets/short_links.py
T
2026-10-13 16:09:45 +03:30

39 lines
1.5 KiB
Python

from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse
from django.utils import timezone
from django.views.decorators.cache import never_cache
from django.views.decorators.http import require_GET
from apps.accounts.models import User
from .models import StaffTicketShortLink
from .policies import TicketPolicy
def append_supervisor_ticket_link(ticket, message):
unit = ticket.owning_unit
if not unit or not unit.supervisor_sms_ticket_link_enabled:
return message
link, _ = StaffTicketShortLink.objects.get_or_create(ticket=ticket)
if link.expires_at <= timezone.now():
return message
url = settings.PUBLIC_BASE_URL.rstrip("/") + reverse("staff_ticket_short_link", args=[link.token])
return f"{message}\nمشاهده و پاسخ: {url}"
@never_cache
@require_GET
@login_required(login_url="/staff/login/")
def open_staff_ticket_link(request, token):
if not request.user.is_active or request.user.account_type != User.AccountType.STAFF:
raise PermissionDenied
link = get_object_or_404(
StaffTicketShortLink.objects.select_related("ticket"),
token=token, expires_at__gt=timezone.now(),
)
if not TicketPolicy.can_view(request.user, link.ticket):
raise PermissionDenied
return redirect("staff_tickets:detail", public_id=link.ticket.public_id)