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)