Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • fares535/medarbetarpuls
1 result
Show changes
Commits on Source (2)
......@@ -124,6 +124,14 @@ class CustomUser(AbstractBaseUser, PermissionsMixin): # pyright: ignore
def __str__(self) -> str:
return f"{self.name} ({self.email})"
# To see how many surveys this user has unanswered
def count_unanswered_surveys(self):
return self.survey_results.filter(is_answered=False).count()
# To get all unanswered surveys for this user
def get_unanswered_surveys(self):
return self.survey_results.filter(is_answered=False)
......@@ -201,6 +209,8 @@ class SurveyResult(models.Model):
def __str__(self) -> str:
return f"{self.user} ({self.is_answered})"
class BaseQuestionDetails(models.Model):
......
......@@ -150,6 +150,46 @@ button:hover {
background-color: #a3cbff;
}
.unanswered-survey-container{
max-width: 1200px;
justify-content: center;
padding: 20px;
display: flex;
flex-direction: column;
align-items: center;
}
/*Should be able to use for all survey-cards*/
.survey-cards {
display: flex;
align-items: center;
max-width: 900px;
flex-wrap: wrap;
gap: 20px;
justify-content: center;
margin: 20px 0;
}
.survey-card {
border: 1px solid #ccc;
border-radius: 8px;
padding: 15px;
width: 200px;
position: relative;
background-color: #fff;
}
.view-results {
margin-top: 20px;
padding: 10px 20px;
background-color: #007bff;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}
.start-container {
max-width: 1200px;
margin: 0 auto;
......
<html lang="sv">
<head>
{% load static %}
<script src="https://unpkg.com/htmx.org@1.8.4"></script>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Medarbetarpuls - Surveys</title>
<link rel="stylesheet" href="{% static 'styles.css' %}" />
</head>
<body>
<div class="unanswered-survey-container">
<h1>Obesvarade enkäter</h1>
<h2>Du har {{ unanswered_count }} obesvarade enkäter</h2>
<div class="survey-cards">
{% for survey in unanswered_surveys %}
<div class="survey-card">
<p>Publicerades: {{ survey.published_survey.sending_date }}</p>
<p><strong>*{{ survey.published_survey.name }}*</strong></p>
<p>Deadline: {{ survey.published_survey.deadline }}</p>
</div>
{% endfor %}
<!-- Example survey cards for testing -->
<div class="survey-card">
<p>Publicerades: 2025-02-20</p>
<p><strong>*Namn på enkät*</strong></p>
<p>Deadline: 2026-02-20</p>
</div>
<div class="survey-card">
<p>Publicerades: 2025-02-20</p>
<p><strong>*Namn på enkät*</strong></p>
<p>Deadline: 2026-02-20</p>
</div>
<div class="survey-card">
<p>Publicerades: 2025-02-20</p>
<p><strong>*Namn på enkät*</strong></p>
<p>Deadline: 2026-02-20</p>
</div>
<!-- Add more survey cards as needed -->
</div>
<button class="view-survey_result" onclick="window.location.href='{% url 'survey_result' %}'"> Visa resultat på tidigare enkäter</button>
</div>
</body>
</html>
\ No newline at end of file
......@@ -189,6 +189,57 @@ def create_org(request) -> HttpResponse:
return HttpResponse(status=400) # Bad request if no expression
def create_org_redirect(request):
if request.headers.get("HX-Request"):
return HttpResponse(headers={"HX-Redirect": "/create_org_view/"}) # Redirects in HTMX
return redirect("/create_org_view/") # Normal Django redirect for non-HTMX requests
@csrf_protect
def create_org(request) -> HttpResponse:
"""
Creates an organization and admin account
with the fetched input
Args:
request: The input text from the org_name, name, email and password fields
Returns:
HttpResponse: Returns status 204 if all is good, otherwise 400
"""
if request.method == 'POST':
if request.headers.get('HX-Request'):
org_name = request.POST.get('org_name')
name = request.POST.get('name')
email = request.POST.get('email')
password = request.POST.get('password')
# Create organization
org = models.Organization(name=org_name)
org.save()
# Create admin account
admin_account = models.CustomUser.objects.create_user(email,name,password)
admin_account.user_role = models.UserRole.ADMIN
admin_account.is_staff = True
admin_account.is_superuser = True
# Link admin account to org
admin_account.admin = org
admin_account.save()
# Create base (everyone) employee group
base_group = models.EmployeeGroup(name="Alla", organization=org)
base_group.save()
# Adding a org approved email for easy testing
test_email = models.EmailList(email="user22@example.com", org=org)
test_email.save()
return HttpResponse(headers={"HX-Redirect": "/"}) # Redirect to login page
return HttpResponse(status=400) # Bad request if no expression
def create_survey_view(request):
return render(request, "create_survey.html")
......@@ -290,4 +341,10 @@ def survey_status_view(request):
def unanswered_surveys_view(request):
return render(request, "unanswered_surveys.html")
user = request.user # Assuming the user is authenticated
unanswered_count = user.count_unanswered_surveys()
unanswered_surveys = user.get_unanswered_surveys()
return render(request, "unanswered_surveys.html", {
'unanswered_count': unanswered_count,
'unanswered_surveys': unanswered_surveys,
})