fix: 3 create-page bugs (missing template, bad reverse, form instance access)
All checks were successful
Build and Push Docker Image / build (push) Successful in 2m11s
All checks were successful
Build and Push Docker Image / build (push) Successful in 2m11s
1. /complaints/templates/new/ — TemplateDoesNotExist: template_form.html was
missing. Created a functional template form (name, category, title pattern,
description).
2. /complaints/oncall/schedules/new/ — NoReverseMatch: redirect('dashboard')
should be redirect('/') since the URL name 'dashboard' doesn't exist.
3. /complaints/settings/escalation-rules/new/ — RelatedObjectDoesNotExist:
EscalationRuleForm accessed self.instance.hospital on an unsaved instance.
Changed to self.instance.hospital_id (safe FK ID check).
This commit is contained in:
parent
8a944ad696
commit
e9dfd3b2a5
@ -904,7 +904,7 @@ class EscalationRuleForm(HospitalFieldMixin, forms.ModelForm):
|
|||||||
pass
|
pass
|
||||||
elif self.initial.get("hospital"):
|
elif self.initial.get("hospital"):
|
||||||
hospital = self.initial.get("hospital")
|
hospital = self.initial.get("hospital")
|
||||||
elif self.instance and self.instance.pk and self.instance.hospital:
|
elif self.instance and self.instance.pk and self.instance.hospital_id:
|
||||||
hospital = self.instance.hospital
|
hospital = self.instance.hospital
|
||||||
elif self.user and self.user.is_px_admin():
|
elif self.user and self.user.is_px_admin():
|
||||||
hospital = getattr(self.request, "tenant_hospital", None)
|
hospital = getattr(self.request, "tenant_hospital", None)
|
||||||
|
|||||||
@ -29,7 +29,7 @@ def check_px_admin(request):
|
|||||||
"""Check if user is PX Admin, return redirect if not."""
|
"""Check if user is PX Admin, return redirect if not."""
|
||||||
if not request.user.is_px_admin():
|
if not request.user.is_px_admin():
|
||||||
messages.error(request, _("You do not have permission to access this page."))
|
messages.error(request, _("You do not have permission to access this page."))
|
||||||
return redirect("dashboard")
|
return redirect("/")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
63
templates/complaints/templates/template_form.html
Normal file
63
templates/complaints/templates/template_form.html
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
{% extends "layouts/base.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
{% block title %}{% if template %}{% trans "Edit Template" %}{% else %}{% trans "New Template" %}{% endif %} - PX360{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="max-w-4xl mx-auto">
|
||||||
|
<header class="mb-6">
|
||||||
|
<div class="flex items-center gap-2 text-sm text-slate mb-2">
|
||||||
|
<a href="{% url 'complaints:template_list' %}" class="hover:text-navy">{% trans "Templates" %}</a>
|
||||||
|
<i data-lucide="chevron-right" class="w-4 h-4"></i>
|
||||||
|
<span class="font-bold text-navy">{% if template %}{% trans "Edit" %}{% else %}{% trans "New" %}{% endif %}</span>
|
||||||
|
</div>
|
||||||
|
<h1 class="text-2xl font-bold text-navy">{% if template %}{% trans "Edit Template" %}{% else %}{% trans "Create Template" %}{% endif %}</h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="bg-white rounded-2xl shadow-sm border border-slate-100 p-6">
|
||||||
|
<form method="post" class="space-y-5">
|
||||||
|
{% csrf_token %}
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label class="block text-sm font-semibold text-slate-700 mb-2">{% trans "Template Name" %}</label>
|
||||||
|
<input type="text" name="name" required value="{{ template.name|default:'' }}"
|
||||||
|
class="w-full px-4 py-2.5 rounded-xl border-2 border-slate-200 focus:border-navy focus:ring-2 focus:ring-navy/20 transition text-sm"
|
||||||
|
placeholder="{% trans 'e.g., Service Delay Template' %}">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label class="block text-sm font-semibold text-slate-700 mb-2">{% trans "Category" %}</label>
|
||||||
|
<select name="category" class="w-full px-4 py-2.5 rounded-xl border-2 border-slate-200 focus:border-navy focus:ring-2 focus:ring-navy/20 transition text-sm">
|
||||||
|
<option value="">{% trans "Select Category" %}</option>
|
||||||
|
{% for cat in categories %}
|
||||||
|
<option value="{{ cat.id }}" {% if template.category_id == cat.id %}selected{% endif %}>{{ cat.name_en|default:cat.name }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label class="block text-sm font-semibold text-slate-700 mb-2">{% trans "Title Pattern" %}</label>
|
||||||
|
<input type="text" name="title_pattern" value="{{ template.title_pattern|default:'' }}"
|
||||||
|
class="w-full px-4 py-2.5 rounded-xl border-2 border-slate-200 focus:border-navy focus:ring-2 focus:ring-navy/20 transition text-sm"
|
||||||
|
placeholder="{% trans 'e.g., {department} - Service Delay' %}">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label class="block text-sm font-semibold text-slate-700 mb-2">{% trans "Default Description" %}</label>
|
||||||
|
<textarea name="description" rows="4"
|
||||||
|
class="w-full px-4 py-2.5 rounded-xl border-2 border-slate-200 focus:border-navy focus:ring-2 focus:ring-navy/20 transition text-sm resize-none"
|
||||||
|
placeholder="{% trans 'Default complaint description text...' %}">{{ template.description|default:'' }}</textarea>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex items-center gap-3 pt-4 border-t border-slate-100">
|
||||||
|
<button type="submit" class="px-6 py-2.5 bg-navy text-white font-semibold rounded-xl hover:bg-blue transition text-sm">
|
||||||
|
{% if template %}{% trans "Update Template" %}{% else %}{% trans "Create Template" %}{% endif %}
|
||||||
|
</button>
|
||||||
|
<a href="{% url 'complaints:template_list' %}" class="px-6 py-2.5 bg-slate-100 text-slate-700 font-medium rounded-xl hover:bg-slate-200 transition text-sm">
|
||||||
|
{% trans "Cancel" %}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
Loading…
x
Reference in New Issue
Block a user