From 3e03caa83ef243c4e6ad377c88ba8ee9ebe213be Mon Sep 17 00:00:00 2001 From: rafestorn <rafaestrada3@gmail.com> Date: Thu, 24 Nov 2022 18:02:36 +0100 Subject: [PATCH 1/4] feat: Added Groups (Gender and Age) functionality With this functionality you can add groups of voters to an specific voting. You can access by census/add/by_group/age and census/add/by_group/gender The functionality is not working properly until decide-part-rota-main Rota1-003 issue is completed. --- decide/census/templates/census_age.html | 71 +++++++++++++++++ decide/census/templates/census_gender.html | 74 ++++++++++++++++++ decide/census/urls.py | 6 +- decide/census/views.py | 88 ++++++++++++++++++++++ 4 files changed, 238 insertions(+), 1 deletion(-) create mode 100644 decide/census/templates/census_age.html create mode 100644 decide/census/templates/census_gender.html diff --git a/decide/census/templates/census_age.html b/decide/census/templates/census_age.html new file mode 100644 index 0000000000..6644a726da --- /dev/null +++ b/decide/census/templates/census_age.html @@ -0,0 +1,71 @@ +{% extends "base.html" %} +{% load i18n static %} + +{% block extrahead %} + <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous"> + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script> + + <link type="text/css" rel="stylesheet" href="{% static 'style.css' %}" /> +{% endblock %} + + +{% block content %} +<div class="row justify-content-md-center align-items-center"> + <div class="col-sm-8 justify-content-center align-items-center"> + <h2 class ="justify-content-center align-items-center">Census Groups</h2> + </div> +</div> +<div class="row justify-content-md-center"> + <div class="col-sm-8"> + <h3>Now you can add groups of voters to an specific voting</h3> + <h6>for example, if you select minmun age 22 and maximum age 28, every user who satisfies that requirement will be added to the chosen voting</h6> + </div> +</div> + +<div class="row"> + +</div> + +<form class="row gx-3 gy-2 align-items-center" action="create" method="POST"> + {% csrf_token %} + <div class="row justify-content-md-center"> + <div class="col-sm-8"> + <label for="specificSizeSelect">Choose a voting</label> + <select class="form-select" id="specificSizeSelect" name="voting-select"> + {% for voting in votings %} + <option value="{{voting.id}}">{{voting}}</option> + {%endfor%} + </select> + + </div> + </div> + <div class="row justify-content-md-center"> + <div class="col-sm-8"> + <label>Choose age</label> + <input type="number" name="minimum-age" max="100" min="0"> + <input type="number" name="maximum-age" max="100" min="0"> + </div> + </div> + <div class="row justify-content-center submit"> + <div class="col col-lg-1"> + <button type="submit" class="btn btn-primary">Submit</button> + </div> + </div> +</form> + +{% if messages %} +<ul class="messages" style="margin-top:2%"> + {% for message in messages %} + {% if message.tags == 'error' %} + <li class="{{ message.tags }} alert alert-danger" role="alert">{{ message }}</li> + {% else %} + <li class="{{ message.tags }} alert alert-{{message.tags}}" role="alert">{{ message }}</li> + {% endif %} + + {% endfor %} +</ul> + +{% endif %} + + +{% endblock %} \ No newline at end of file diff --git a/decide/census/templates/census_gender.html b/decide/census/templates/census_gender.html new file mode 100644 index 0000000000..7d1bc038a5 --- /dev/null +++ b/decide/census/templates/census_gender.html @@ -0,0 +1,74 @@ +{% extends "base.html" %} +{% load i18n static %} + +{% block extrahead %} + <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous"> + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script> + + <link type="text/css" rel="stylesheet" href="{% static 'style.css' %}" /> +{% endblock %} + + +{% block content %} +<div class="row justify-content-md-center align-items-center"> + <div class="col-sm-8 justify-content-center align-items-center"> + <h2 class ="justify-content-center align-items-center">Census Groups</h2> + </div> +</div> +<div class="row justify-content-md-center"> + <div class="col-sm-8"> + <h3>Now you can add groups of voters to an specific voting</h3> + <h6>for example, if you select "Male", every user who satisfies that requirement will be added to the chosen voting</h6> + </div> +</div> + +<div class="row"> + +</div> + +<form class="row gx-3 gy-2 align-items-center" action="create" method="POST"> + {% csrf_token %} + <div class="row justify-content-md-center"> + <div class="col-sm-8"> + <label for="specificSizeSelect">Choose a voting</label> + <select class="form-select" id="specificSizeSelect" name="voting-select"> + {% for voting in votings %} + <option value="{{voting.id}}">{{voting}}</option> + {%endfor%} + </select> + + </div> + </div> + <div class="row justify-content-md-center"> + <div class="col-sm-8"> + <label for="specificSizeSelect">Choose gender</label> + <select multiple class="form-select" id="specificSizeSelect" name="gender-select"> + <!--{% for gender in gender %} + <option value="{{gender}}">{{gender}}</option> + {%endfor%}--> + </select> + </div> + </div> + <div class="row justify-content-center submit"> + <div class="col col-lg-1"> + <button type="submit" class="btn btn-primary">Submit</button> + </div> + </div> +</form> + +{% if messages %} +<ul class="messages" style="margin-top:2%"> + {% for message in messages %} + {% if message.tags == 'error' %} + <li class="{{ message.tags }} alert alert-danger" role="alert">{{ message }}</li> + {% else %} + <li class="{{ message.tags }} alert alert-{{message.tags}}" role="alert">{{ message }}</li> + {% endif %} + + {% endfor %} +</ul> + +{% endif %} + + +{% endblock %} \ No newline at end of file diff --git a/decide/census/urls.py b/decide/census/urls.py index 41cc26e1d7..169022b1fa 100644 --- a/decide/census/urls.py +++ b/decide/census/urls.py @@ -8,5 +8,9 @@ path('add/', views.census_add, name='census_add'), path('add/add_to_census', views.add_to_census), path('remove/', views.census_remove, name='census_remove'), - path('remove/remove_from_census', views.remove_from_census) + path('remove/remove_from_census', views.remove_from_census), + path('add/by_group/age', views.census_age), + path('add/by_group/age/create', views.add_by_age_to_census), + path('add/by_group/gender', views.census_gender), + path('add/by_group/gender/create', views.add_by_gender_to_census), ] diff --git a/decide/census/views.py b/decide/census/views.py index ee09f11c20..169cbb2262 100644 --- a/decide/census/views.py +++ b/decide/census/views.py @@ -145,4 +145,92 @@ def remove_from_census(request): messages.error(request, "You must be a staff member to access this page") return HttpResponse(template.render({'remove': True}, request), status=ST_401) +def census_gender(request): + if request.user.is_staff: + template = loader.get_template("census_gender.html") + votings = Voting.objects.all() + try: + genders = set(u.gender for u in User.objects.all()) + except: + genders = set() + context = { + 'votings': votings, + 'genders': genders, + } + return HttpResponse(template.render(context, request)) + else: + template = loader.get_template("result_page.html") + messages.error(request, "You must be a staff member to access this page") + return HttpResponse(template.render({}, request), status=ST_401) + +def add_by_gender_to_census(request): + template = loader.get_template("result_page.html") + if request.user.is_staff: + voting_id = request.POST['voting-select'] + genders = request.POST['gender-select'] + users = User.objects.filter(gender in genders) + for user in users: + try: + census_by_voting = Census.objects.get(voting_id=voting_id,voter_id=user.id) + except Census.DoesNotExist: + census_by_voting = None + status_code=404 + if census_by_voting == None: + census = Census(voting_id=voting_id, voter_id=user.id) + census.save() + messages.success(request, "User added to the voting correctly") + status_code=ST_201 + + else: + messages.info(request, "The user was already assigned to the voting") + status_code = 200 + + return HttpResponse(template.render({}, request), status=status_code) + + else: + messages.error(request, "You must be a staff member to access this page") + return HttpResponse(template.render({}, request), status=ST_401) + +def census_age(request): + if request.user.is_staff: + template = loader.get_template("census_age.html") + votings = Voting.objects.all() + context = { + 'votings': votings, + } + return HttpResponse(template.render(context, request)) + else: + template = loader.get_template("result_page.html") + messages.error(request, "You must be a staff member to access this page") + return HttpResponse(template.render({}, request), status=ST_401) + + +def add_by_age_to_census(request): + template = loader.get_template("result_page.html") + if request.user.is_staff: + voting_id = request.POST['voting-select'] + minAge = request.POST['minimum-age'] + maxAge = request.POST['maximum-age'] + users = User.objects.filter(age >= minAge and age<=maxAge) + for user in users: + try: + census_by_voting = Census.objects.get(voting_id=voting_id,voter_id=user.id) + except Census.DoesNotExist: + census_by_voting = None + status_code=404 + if census_by_voting == None: + census = Census(voting_id=voting_id, voter_id=user.id) + census.save() + messages.success(request, "User added to the voting correctly") + status_code=ST_201 + else: + messages.info(request, "The user was already assigned to the voting") + status_code = 200 + + + return HttpResponse(template.render({}, request), status=status_code) + + else: + messages.error(request, "You must be a staff member to access this page") + return HttpResponse(template.render({}, request), status=ST_401) \ No newline at end of file From d09322654dce535a3e75bb6e984e0f06118365a5 Mon Sep 17 00:00:00 2001 From: rafestorn <rafaestrada3@gmail.com> Date: Thu, 24 Nov 2022 18:26:13 +0100 Subject: [PATCH 2/4] fix: Fix for codacy Fixes the errors detected by codacy static code analysis. --- decide/census/templates/census_age.html | 2 +- decide/census/templates/census_gender.html | 2 +- decide/census/views.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/decide/census/templates/census_age.html b/decide/census/templates/census_age.html index 6644a726da..896de0985a 100644 --- a/decide/census/templates/census_age.html +++ b/decide/census/templates/census_age.html @@ -26,7 +26,7 @@ <h6>for example, if you select minmun age 22 and maximum age 28, every user who </div> -<form class="row gx-3 gy-2 align-items-center" action="create" method="POST"> +<form class="row gx-3 gy-2 align-items-center" action="age/create" method="POST"> {% csrf_token %} <div class="row justify-content-md-center"> <div class="col-sm-8"> diff --git a/decide/census/templates/census_gender.html b/decide/census/templates/census_gender.html index 7d1bc038a5..2a17c0a4a6 100644 --- a/decide/census/templates/census_gender.html +++ b/decide/census/templates/census_gender.html @@ -26,7 +26,7 @@ <h6>for example, if you select "Male", every user who satisfies that requirement </div> -<form class="row gx-3 gy-2 align-items-center" action="create" method="POST"> +<form class="row gx-3 gy-2 align-items-center" action="gender/create" method="POST"> {% csrf_token %} <div class="row justify-content-md-center"> <div class="col-sm-8"> diff --git a/decide/census/views.py b/decide/census/views.py index 169cbb2262..749b64b742 100644 --- a/decide/census/views.py +++ b/decide/census/views.py @@ -149,9 +149,9 @@ def census_gender(request): if request.user.is_staff: template = loader.get_template("census_gender.html") votings = Voting.objects.all() - try: + try: genders = set(u.gender for u in User.objects.all()) - except: + except BaseException: genders = set() context = { 'votings': votings, From 9ed1215f3856ea2595bc1c22207e45cbb6cd153d Mon Sep 17 00:00:00 2001 From: rafestorn <rafaestrada3@gmail.com> Date: Thu, 24 Nov 2022 18:37:17 +0100 Subject: [PATCH 3/4] fix: Fix for codacy Fix some minor errors for the codacy static analysis. --- decide/census/views.py | 50 +++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/decide/census/views.py b/decide/census/views.py index 749b64b742..1b66fbf4ec 100644 --- a/decide/census/views.py +++ b/decide/census/views.py @@ -164,32 +164,32 @@ def census_gender(request): return HttpResponse(template.render({}, request), status=ST_401) def add_by_gender_to_census(request): - template = loader.get_template("result_page.html") - if request.user.is_staff: - voting_id = request.POST['voting-select'] - genders = request.POST['gender-select'] - users = User.objects.filter(gender in genders) - for user in users: - try: - census_by_voting = Census.objects.get(voting_id=voting_id,voter_id=user.id) - except Census.DoesNotExist: - census_by_voting = None - status_code=404 - if census_by_voting == None: - census = Census(voting_id=voting_id, voter_id=user.id) - census.save() - messages.success(request, "User added to the voting correctly") - status_code=ST_201 - - else: - messages.info(request, "The user was already assigned to the voting") - status_code = 200 - - return HttpResponse(template.render({}, request), status=status_code) + template = loader.get_template("result_page.html") + if request.user.is_staff: + voting_id = request.POST['voting-select'] + genders = request.POST['gender-select'] + users = User.objects.filter(gender in genders) + for user in users: + try: + census_by_voting = Census.objects.get(voting_id=voting_id,voter_id=user.id) + except Census.DoesNotExist: + census_by_voting = None + status_code=404 + if census_by_voting == None: + census = Census(voting_id=voting_id, voter_id=user.id) + census.save() + messages.success(request, "User added to the voting correctly") + status_code=ST_201 - else: - messages.error(request, "You must be a staff member to access this page") - return HttpResponse(template.render({}, request), status=ST_401) + else: + messages.info(request, "The user was already assigned to the voting") + status_code = 200 + + return HttpResponse(template.render({}, request), status=status_code) + + else: + messages.error(request, "You must be a staff member to access this page") + return HttpResponse(template.render({}, request), status=ST_401) def census_age(request): if request.user.is_staff: From 04deb3da7b266b14772af966d6066631fb649285 Mon Sep 17 00:00:00 2001 From: joseluisps21 <joseluissfc4@gmail.com> Date: Thu, 24 Nov 2022 19:05:49 +0100 Subject: [PATCH 4/4] fix: Some Conflicts resolved Conflicts in views.py have been resolved --- decide/census/views.py | 132 +++++++++++++++++++++++++---------------- 1 file changed, 80 insertions(+), 52 deletions(-) diff --git a/decide/census/views.py b/decide/census/views.py index d95a0ca047..94e9fbe00b 100644 --- a/decide/census/views.py +++ b/decide/census/views.py @@ -145,19 +145,6 @@ def remove_from_census(request): messages.error(request, "You must be a staff member to access this page") return HttpResponse(template.render({'remove': True}, request), status=ST_401) - -def census_gender(request): - if request.user.is_staff: - template = loader.get_template("census_gender.html") - votings = Voting.objects.all() - try: - genders = set(u.gender for u in User.objects.all()) - except BaseException: - genders = set() - context = { - 'votings': votings, - 'genders': genders, - def census_group(request): if request.user.is_staff: template = loader.get_template("census_by_group.html") @@ -166,7 +153,6 @@ def census_group(request): context = { 'votings': votings, 'users': users - } return HttpResponse(template.render(context, request)) else: @@ -174,13 +160,30 @@ def census_group(request): messages.error(request, "You must be a staff member to access this page") return HttpResponse(template.render({}, request), status=ST_401) +def census_maritialStatus(request): + if request.user.is_staff: + template = loader.get_template("census_maritialStatus.html") + votings = Voting.objects.all() + try: + maritialStatus = set(u.maritialStatus for u in User.objects.all()) + except BaseException: + maritialStatus = set() + context = { + 'votings': votings, + 'maritialStatus': maritialStatus, + } + return HttpResponse(template.render(context, request)) + else: + template = loader.get_template("result_page.html") + messages.error(request, "You must be a staff member to access this page") + return HttpResponse(template.render({}, request), status=ST_401) -def add_by_gender_to_census(request): +def add_by_maritialStatus_to_census(request): template = loader.get_template("result_page.html") if request.user.is_staff: voting_id = request.POST['voting-select'] - genders = request.POST['gender-select'] - users = User.objects.filter(gender in genders) + maritialStatus = request.POST['maritialStatus-select'] + users = User.objects.filter(maritial_status in maritialStatus) for user in users: try: census_by_voting = Census.objects.get(voting_id=voting_id,voter_id=user.id) @@ -196,31 +199,73 @@ def add_by_gender_to_census(request): else: messages.info(request, "The user was already assigned to the voting") status_code = 200 - + + return HttpResponse(template.render({}, request), status=status_code) else: messages.error(request, "You must be a staff member to access this page") return HttpResponse(template.render({}, request), status=ST_401) -def census_age(request): + +def census_nationality(request): if request.user.is_staff: - template = loader.get_template("census_age.html") + template = loader.get_template("census_nationality.html") votings = Voting.objects.all() + try: + nationality = set(u.nationality for u in User.objects.all()) + except BaseException: + nationality = set() context = { 'votings': votings, + 'nationality': nationality, + } + return HttpResponse(template.render(context, request)) + else: + template = loader.get_template("result_page.html") + messages.error(request, "You must be a staff member to access this page") + return HttpResponse(template.render({}, request), status=ST_401) -def census_maritialStatus(request): +def add_by_nationality_to_census(request): + template = loader.get_template("result_page.html") if request.user.is_staff: - template = loader.get_template("census_maritialStatus.html") + voting_id = request.POST['voting-select'] + nation = request.POST['nationality-select'] + users = User.objects.filter(nationality in nation) + for user in users: + try: + census_by_voting = Census.objects.get(voting_id=voting_id,voter_id=user.id) + except Census.DoesNotExist: + census_by_voting = None + status_code=404 + if census_by_voting == None: + census = Census(voting_id=voting_id, voter_id=user.id) + census.save() + messages.success(request, "User added to the voting correctly") + status_code=ST_201 + + else: + messages.info(request, "The user was already assigned to the voting") + status_code = 200 + + + return HttpResponse(template.render({}, request), status=status_code) + + else: + messages.error(request, "You must be a staff member to access this page") + return HttpResponse(template.render({}, request), status=ST_401) + +def census_gender(request): + if request.user.is_staff: + template = loader.get_template("census_gender.html") votings = Voting.objects.all() try: - maritialStatus = set(u.maritialStatus for u in User.objects.all()) + genders = set(u.gender for u in User.objects.all()) except BaseException: - maritialStatus = set() + genders = set() context = { 'votings': votings, - 'maritialStatus': maritialStatus, + 'genders': genders, } return HttpResponse(template.render(context, request)) else: @@ -228,12 +273,12 @@ def census_maritialStatus(request): messages.error(request, "You must be a staff member to access this page") return HttpResponse(template.render({}, request), status=ST_401) -def add_by_maritialStatus_to_census(request): +def add_by_gender_to_census(request): template = loader.get_template("result_page.html") if request.user.is_staff: voting_id = request.POST['voting-select'] - maritialStatus = request.POST['maritialStatus-select'] - users = User.objects.filter(maritial_status in maritialStatus) + genders = request.POST['gender-select'] + users = User.objects.filter(gender in genders) for user in users: try: census_by_voting = Census.objects.get(voting_id=voting_id,voter_id=user.id) @@ -249,26 +294,19 @@ def add_by_maritialStatus_to_census(request): else: messages.info(request, "The user was already assigned to the voting") status_code = 200 - - + return HttpResponse(template.render({}, request), status=status_code) else: messages.error(request, "You must be a staff member to access this page") return HttpResponse(template.render({}, request), status=ST_401) - -def census_nationality(request): +def census_age(request): if request.user.is_staff: - template = loader.get_template("census_nationality.html") + template = loader.get_template("census_age.html") votings = Voting.objects.all() - try: - nationality = set(u.nationality for u in User.objects.all()) - except BaseException: - nationality = set() context = { 'votings': votings, - 'nationality': nationality, } return HttpResponse(template.render(context, request)) else: @@ -276,6 +314,7 @@ def census_nationality(request): messages.error(request, "You must be a staff member to access this page") return HttpResponse(template.render({}, request), status=ST_401) + def add_by_age_to_census(request): template = loader.get_template("result_page.html") if request.user.is_staff: @@ -283,13 +322,6 @@ def add_by_age_to_census(request): minAge = request.POST['minimum-age'] maxAge = request.POST['maximum-age'] users = User.objects.filter(age >= minAge and age<=maxAge) - -def add_by_nationality_to_census(request): - template = loader.get_template("result_page.html") - if request.user.is_staff: - voting_id = request.POST['voting-select'] - nation = request.POST['nationality-select'] - users = User.objects.filter(nationality in nation) for user in users: try: census_by_voting = Census.objects.get(voting_id=voting_id,voter_id=user.id) @@ -305,14 +337,10 @@ def add_by_nationality_to_census(request): else: messages.info(request, "The user was already assigned to the voting") status_code = 200 - - + + return HttpResponse(template.render({}, request), status=status_code) else: messages.error(request, "You must be a staff member to access this page") - return HttpResponse(template.render({}, request), status=ST_401) - - else: - messages.error(request, "You must be a staff member to access this page") - return HttpResponse(template.render({}, request), status=ST_401) + return HttpResponse(template.render({}, request), status=ST_401) \ No newline at end of file