39 lines
1.5 KiB
Python
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)
|