From adbfec2b1082bf2adce87acbb5e722b79292c068 Mon Sep 17 00:00:00 2001 From: Gokuldevx Date: Tue, 26 Aug 2025 12:05:43 +0530 Subject: [PATCH] minor update --- .../__pycache__/settings.cpython-313.pyc | Bin 2662 -> 2662 bytes civicfix/civicfix/settings.py | 2 +- .../core/__pycache__/forms.cpython-313.pyc | Bin 3388 -> 3378 bytes .../core/__pycache__/models.cpython-313.pyc | Bin 8494 -> 7794 bytes .../core/__pycache__/urls.cpython-313.pyc | Bin 1897 -> 2014 bytes .../core/__pycache__/views.cpython-313.pyc | Bin 16016 -> 16965 bytes civicfix/core/forms.py | 2 +- civicfix/core/migrations/0001_initial.py | 62 ++++++++++++++---- civicfix/core/migrations/0002_vote.py | 27 -------- civicfix/core/migrations/0003_comment.py | 29 -------- .../0004_department_alter_comment_user.py | 32 --------- .../core/migrations/0005_department_users.py | 19 ------ ...emove_department_users_department_admin.py | 24 ------- .../core/migrations/0007_department_users.py | 19 ------ ...e_options_alter_issue_category_and_more.py | 38 ----------- .../core/migrations/0009_issue_department.py | 19 ------ .../__pycache__/0001_initial.cpython-313.pyc | Bin 6040 -> 7994 bytes ...egory_delete_issuecategory.cpython-313.pyc | Bin 0 -> 691 bytes .../0011_delete_issuecategory.cpython-313.pyc | Bin 0 -> 677 bytes ...suecategory_issue_category.cpython-313.pyc | Bin 0 -> 1566 bytes civicfix/core/models.py | 16 ----- civicfix/core/templates/core/base.html | 3 +- civicfix/core/templates/core/index.html | 14 +++- .../dashboard/department_dashboard.html | 27 +++++++- civicfix/core/urls.py | 1 + civicfix/core/views.py | 43 +++++++----- civicfix/run_server.py | 5 ++ 27 files changed, 120 insertions(+), 262 deletions(-) delete mode 100644 civicfix/core/migrations/0002_vote.py delete mode 100644 civicfix/core/migrations/0003_comment.py delete mode 100644 civicfix/core/migrations/0004_department_alter_comment_user.py delete mode 100644 civicfix/core/migrations/0005_department_users.py delete mode 100644 civicfix/core/migrations/0006_remove_department_users_department_admin.py delete mode 100644 civicfix/core/migrations/0007_department_users.py delete mode 100644 civicfix/core/migrations/0008_alter_issue_options_alter_issue_category_and_more.py delete mode 100644 civicfix/core/migrations/0009_issue_department.py create mode 100644 civicfix/core/migrations/__pycache__/0010_remove_issue_category_delete_issuecategory.cpython-313.pyc create mode 100644 civicfix/core/migrations/__pycache__/0011_delete_issuecategory.cpython-313.pyc create mode 100644 civicfix/core/migrations/__pycache__/0012_issuecategory_issue_category.cpython-313.pyc create mode 100644 civicfix/run_server.py diff --git a/civicfix/civicfix/__pycache__/settings.cpython-313.pyc b/civicfix/civicfix/__pycache__/settings.cpython-313.pyc index 8f436698a2702f366d1c90675ec2659411a636ae..0fbcdc9e5d1e679baf0ceb32521f1040d48940c4 100644 GIT binary patch delta 22 ccmaDR@=S#HGcPX}0}vQGt<4DB$Q#K808CB>6951J delta 22 ccmaDR@=S#HGcPX}0}!z9TAmTSkvEbH08VrUT>t<8 diff --git a/civicfix/civicfix/settings.py b/civicfix/civicfix/settings.py index a2b6db2..9212d0c 100644 --- a/civicfix/civicfix/settings.py +++ b/civicfix/civicfix/settings.py @@ -123,4 +123,4 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' # Add these settings LOGIN_REDIRECT_URL = 'citizen_dashboard' LOGIN_URL = 'login' -LOGOUT_REDIRECT_URL = 'home' +LOGOUT_REDIRECT_URL = 'home' \ No newline at end of file diff --git a/civicfix/core/__pycache__/forms.cpython-313.pyc b/civicfix/core/__pycache__/forms.cpython-313.pyc index 23e47e2a548257b64b199153f38eb412cba2c88d..8cfac62835bf5e6293e7f57af9c8d8730efc9ea2 100644 GIT binary patch delta 236 zcmdlZwMmNiGcPX}0}wO^tj&!;n3LwG_OiWJXl4Eq++`z@f$OtmTh7qARX!0{|H(hLc{Xu#`geHjL c3nIV<`%jMKNnit;>_2%wk1S*KoR#C zw=ARA)a78?9tZK*l$?n$OSy2%Z z4=Aa>(~yw(dGLUcNW}wBUP(wiPT~a#o=_e|oHHdMI>~%<&Ueo__xtXh2R&0c^_$o0 zlJI%G`TpL~;6+t)Oi33POgW3bw12Xnt*>Lfli)mB$I{?evaAXll&35QCAS92h9~X@ z>c!_?4|VpGTMJk6q#jIlMG^wnvbWXc8Q0!uue9;Pdnq`j8in> z+^8>-SMp9i8wE9EUyk~4FD=7F@=v}-zfHpedFUONPXL zf`bHy>8JAbQ%KN-Z*?~eL@Mwm@`Lq*HT!Mg1d?}{=%6C9EjYZ?29#4oJJ4D(x<+s-dl}eeuUr;N*_K-*h+8N^7pbKyO2?=V)XioYU?Z@2W@w;= zN=>A;FLnE;AvUQcv5mcWNrN#_6E9Cbm}u!s$-cD@n!agEpY{J|#m34c^UXQmfB(;a z=3&q02V9RN$!@~uZ1bm+UA}@VV2-dt(?ff}6f-IAkV)|rZr2E|32$6puVzDKEW4hw zES9nB@SANPdjxgjw`@PGRRrL%_)Q^NZeBFOh|p|KFgPWIZ5BmHFfKwy2u@lRn<6I6 zyj&>{nYdlCbH{`u?kq}&G;K~zW^{ET&les%huQEw2-g{R;^);k;}UTl2*-ot8Lf6a z)1uC2r!vzSJ(r(p$>w-=N{yQhb#8~7wyqRUkjXxRZUl`X)bd8!??)*5{u8t{oz`@o zPLqf~Pq2%i3Sl_zgkG^;=6%HUBNQ#UY<`9tRVzcp5>VP2#al6LI=pus;X97-nzrHC zyF9Qd2ky$TJ96w=<%Zn4eE5l+-|iURaJ;-c@YuqHU@7PjTrLkX9lkDKwJOfh@*~x7 zPpEK9iln#{cS7JE+DO^ub?_aT`ye9Up=fXAGvCQMl&(m7Rcjsa=>v!3p?Gy4?|bZ7UvSFyn`?tZ-Pa+ zk)4E(<>X6KME4OG185)2b2T?Hb68#A2azp`6r64k7f5M;1peP_XsTs`ta3G!%r3YXcbQP zYFnXgQ}S-Q_X2HUb^K`|^3T!7JU4AEQD1DD3th5?6^f zV_W9^BLZz!;TQkao@2Nwiqz(r%(Ticl9kbg9gooYT3%PTPw*mqQT0aaX|fOr&Jd74 zBlVK2e=Gl|S}M;Dq(g8XUJty{7Fq&YL zWK`3Ko{Kj873r85zd>=HE{in8S)QL&xxT<}8da{5BEcp2KJt-`R>N^Oj77P}_?a2; zj8?3{y=c__B`VP6);NgO&%~@O_`%?6s*u_;;d09}%vk07gXdCbkf8O}7^JEj{|1i= BlllMv diff --git a/civicfix/core/__pycache__/urls.cpython-313.pyc b/civicfix/core/__pycache__/urls.cpython-313.pyc index b8179ac0e332853f1f1b68da332d04439dd8c8cb..864507a7ced6259d09c77aa4d7dbc5ef6e546054 100644 GIT binary patch delta 224 zcmaFKcaLBFGcPX}0}yQYT$}Ngm4V?ghyw%SP{!vq8`ayHv|<>Q7=qPen1l3S3J`R# zdN7+Mv%XM~M7oBi=H_iop-i?_%B2MhR=MKbbyP!{56 LYUD0b0Ez(sUh^HL diff --git a/civicfix/core/__pycache__/views.cpython-313.pyc b/civicfix/core/__pycache__/views.cpython-313.pyc index 4a4eff7a04a84c6459fbb1802dae4151c47ccd01..bc4512ac5dcbee3eca8891dd8cc3125f6376b2c0 100644 GIT binary patch delta 4721 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 Hj1>PLd)WV% delta 1616 zcmZuwOH3PA6!jbY8ylPP7sg;?i~}(Z*ih1Bs3CmQCLuKVhO|u`oWUN572`qUu|gtM zsYI7uguD$(H&LZXEmEaQ*;HM%i%MOkhAcoMwaTKEnyg5pE-H1=_a0bH1tZP)-OrqJ z?z!XdMmCb}S1y;sM6S}!M>l@+t-F78MrcT`S6SQoueTeV62e*3ZgWX!kOMbPBeAIo z1n@}QAeS_QSK_e1i^zw+Hz$yv)|~?89(7#n>c6zQEDJ@C~MDz@F)tntk4Q= z5N6p3Lv4p>3PA_NfXliw5j<+^4#f7gy#CA_!vYuPBhV>X31S>)xmITkjzJg0>ZWm1 z42~bf3BuTguXD{!J@Cds?nGUM#|pjBcc3E4vZT|Qg8qZt0MXw<>pJ$& z@FonhNl(@>$z*RauTCAxoUUj1dXL1^4gm*mGxcfG(MQz=hG7KGz$m0)jLkV-uXIen zB&kfn+5Jk=1Mk4QV1;vi4RF5h99GSK)K8oW*~yv^T#(FcP19^m7pdWv8Q5QL8!quq z^d8N*SdQ3wiO>y@MfqvXGW)+ML!v>P;>89a&OGA-XO3Evbl9w<2`^dGQhbc5GSZ9z9LsD!Yx%RJpW|BiT2{OtKFgn>1n}r*P@B^^uqPEvx6KMn%4RF3-^}@ zwc`uIJnF!k!Y@M%Uki~I!=^IH6~n$Pm*pizs~8qGwqenWI#Ku&?Xs8DJkyOIdCz;= zX^O9|lvKHp(^akOzE4M&aMjn2fA_RDJE|)M;#nal>%^Sw7!PuV1;fs0h}VW~Vhkq6Ca3ULpqaPB)aBgF-1Iaa2*w*_g7=EtCgb!3 zUI?D$tQNc(jG-vLCmv64iBe4%+Vw;pT6dzU?P%&7eJh%-3B$Xd=8fQvnAjE*wSkMZ ztJy8_T1}YW<1K#oON*U%?0Fym5PZU+7J?JTpND#TzV&T|hik&fuBUb5%1*d%JKXm) zoT>@^yPmd<#hplUJCb}F>8}X`_@B@we$hJR_^%cJDR#zJ(KPqcWQttm_Dm+v47Vq` zD4RgoW|8EzuASG`a5&P9%6KaBAVf#g*68C?I-fngtQM*zWkmZ7{~hUR9z)1_&#@!K Nw}kj#CK|Eke*q}%h=>3H diff --git a/civicfix/core/migrations/__pycache__/0010_remove_issue_category_delete_issuecategory.cpython-313.pyc b/civicfix/core/migrations/__pycache__/0010_remove_issue_category_delete_issuecategory.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b49fb81d3e799c7ab22ee006776c02ce9a25884f GIT binary patch literal 691 zcmYjPyKdA#6uskDY?FoX2;rp_L1|2+UjfK zd;~^a+RrAlYCq-VxnvrKV)&h@#zKF6L720o~BI{N|kXBN0Dp$iW+$OB9 zrWE%_@GP^nOvLG$&*N%Y+mn7(2(Po-Z?=sXj-N=PkKJ_(71 z;B0>?XiW$osG*s*EZ-+PQNoT{@{U)BG!Y#+U>_sxFj~YLh2is%@OIDKa_>)h nY zw{LDuPPqOGZPBUKo2r~bw{U P&sR2ntZZC?BJK2Fx$m^T literal 0 HcmV?d00001 diff --git a/civicfix/core/migrations/__pycache__/0011_delete_issuecategory.cpython-313.pyc b/civicfix/core/migrations/__pycache__/0011_delete_issuecategory.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e6c55b424ba16f7cfda724bce6c9e8dccd81d62e GIT binary patch literal 677 zcmZuvF>ll`6n;)}X_EFtfmR@ds)D*?X|DqVRmDOXDD;HtHPTa>xWUz3eAu~)Zb(Qh zEG+#I4Ez{aio7y)3p%=EUlJVy9$voh`Fr+zUp(vgBQWdp@Y`ET0Df80tzHXedj?zr z1xjAQA(3Pg?!#lC&I6!sLXN$zVDWw8Hds1^7x%6$iHVNJypUxil{PGy)@ zmEH-fc>N;VOEP}Wvo}(lv8-yyDSw~XX_JM~iJ5!%zY}gxE~Nd%^I*MF zu?e4`_8~kVwd<_;A70lHgm^nldxo0V2I`>+wMz)O@qs-0<445*5?!rseP7+W0Ym21e*x4g Bu6zIh literal 0 HcmV?d00001 diff --git a/civicfix/core/migrations/__pycache__/0012_issuecategory_issue_category.cpython-313.pyc b/civicfix/core/migrations/__pycache__/0012_issuecategory_issue_category.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e58de8eaa7b6404d4b390f9d1592383afb34c25 GIT binary patch literal 1566 zcmZ`(Pi)&%7=Lzb$4QemNt>owQ3`~LX*Z;!LtG=ekU z`SIwl1VVpuCOYyh7_S5P25CqWHW3woiksp_f+jX3Dpk-NdKYPlJ4lmSiDuv}auCvo z;FljNcZ8~Z&EZZ}Wa(q8Lv`PB9giu;u1Rdq;JWB!Z^76Uc=T2fnTnb~6PmazP^l$1 zGm&vjc`lGivYCrz5dxhIKSfJwYF&CDYALWQMB12wU0R!{3t*7}iLTPj8$BOW@HDN>fRDLY7NIcTR<`+8B#CKrGR6^VE<`A%%}R_T zq!qPUtyGt_xq4z*q)t%qgLV zu1Bz=9}_0=``YBe1y~XN4BN!%_(yEQB%VR76TUE@k`Ha&dC4TpaGi^CTlXq${T?|p zZ2dUcse6V+4VzrAhGis8($>4SPp1Q(=7BJ!Z4uk_m>g8Z)YmmBfxx>c@ZxK4)LWHl zkv}UrUE5|U*SYNq%TQwTI>RzV->oJff4%sLk8Yw7M8zsaU<;$&68l|R(>cT)>xXM@l$QNIo4oi0j zrMo{#zb*BilCxnW^(P+0ta>2mkyPk!D1 zWq;V%>o@j>je~yUVA$yN8=cf>;^KBRSE;aiHlx8WKk1VI=pNO - Department Dashboard + + Department Dashboard {% endif %} diff --git a/civicfix/core/templates/core/index.html b/civicfix/core/templates/core/index.html index 1000069..c7324b9 100644 --- a/civicfix/core/templates/core/index.html +++ b/civicfix/core/templates/core/index.html @@ -141,8 +141,18 @@ No image {% endif %}
- - {{ issue.category.name|default:"General" }} + + {{ issue.department.name|default:"General" }}
{{ issue.title|truncatewords:5 }}

{{ issue.description|truncatewords:15 }}

diff --git a/civicfix/core/templates/dashboard/department_dashboard.html b/civicfix/core/templates/dashboard/department_dashboard.html index 16a50e2..59d8ec5 100644 --- a/civicfix/core/templates/dashboard/department_dashboard.html +++ b/civicfix/core/templates/dashboard/department_dashboard.html @@ -5,8 +5,13 @@

Department Dashboard

-

Welcome, {{ request.user.username }}. Your Departments: - {% for dept in departments %} {{ dept.name }}{% if not forloop.last %}, {% endif %}{% endfor %} +

+ Welcome, {{ request.user.username }}. Your Departments: + {% for dept in departments %} + {{ dept.name }} + {% empty %} + No department assigned. + {% endfor %}

@@ -20,6 +25,7 @@ Reported By Status Created At + Action @@ -43,6 +49,23 @@ {% endif %} {{ issue.created_at|date:"M d, Y H:i" }} + + {% if issue.status in "reported,acknowledged" %} +
+ {% csrf_token %} + + +
+ {% elif issue.status == "in_progress" %} +
+ {% csrf_token %} + + +
+ {% else %} + No actions + {% endif %} + {% endfor %} diff --git a/civicfix/core/urls.py b/civicfix/core/urls.py index c90588d..6f8d3dd 100644 --- a/civicfix/core/urls.py +++ b/civicfix/core/urls.py @@ -20,4 +20,5 @@ urlpatterns = [ path("issues//comment//", views.add_comment, name="add_comment"), path('vote//', views.vote_issue, name='vote_issue'), path("department/", views.department_dashboard, name="department_dashboard"), + path("update-issue-status//", views.update_issue_status, name="update_issue_status"), ] \ No newline at end of file diff --git a/civicfix/core/views.py b/civicfix/core/views.py index 33fda57..08d085c 100644 --- a/civicfix/core/views.py +++ b/civicfix/core/views.py @@ -8,7 +8,7 @@ from django.db.models import Exists, OuterRef from django.http import JsonResponse from django.shortcuts import render, redirect, get_object_or_404 from django.views.decorators.http import require_POST -from .models import Issue, IssueCategory, User, Vote, Comment, Department +from .models import Issue, User, Vote, Comment, Department from .forms import CitizenRegistrationForm, IssueForm, CommentForm, IssueAssignForm def home(request): @@ -16,15 +16,12 @@ def home(request): resolved_issues = Issue.objects.filter(status='resolved').count() active_users = User.objects.filter(is_active=True).count() - # Get recently reported issues (last 3 issues) recent_issues = Issue.objects.all().order_by('-created_at')[:3] for issue in recent_issues: issue.user_has_voted = issue.has_user_voted(request.user) if request.user.is_authenticated else False - # Get municipal departments count (assuming you have a Department model) - # If you don't have one yet, you can use a placeholder or create the model - municipal_departments = 5 # Placeholder - replace with actual count when you have the model + municipal_departments = 5 context = { 'total_issues': total_issues, @@ -46,12 +43,10 @@ def citizen_dashboard(request): all_user_issues = Issue.objects.filter(reporter=request.user) user_issues_display = all_user_issues.order_by('-created_at')[:5] resolved_count = all_user_issues.filter(status='resolved').count() - categories = IssueCategory.objects.all() context = { 'user_issues': user_issues_display, 'resolved_count': resolved_count, - 'categories': categories, 'issue_form': IssueForm(), } return render(request, 'dashboard/citizen_dashboard.html', context) @@ -67,6 +62,7 @@ def report_issue(request): if form.is_valid(): issue = form.save(commit=False) issue.reporter = request.user + issue.status = "reported" # default status issue.save() messages.success(request, 'Issue reported successfully!') return redirect('citizen_dashboard') @@ -87,26 +83,19 @@ def view_all_issues(request): user_vote_subq = Vote.objects.filter(user=request.user, issue_id=OuterRef('pk')) issues = ( Issue.objects - .select_related('category', 'reporter') + .select_related('reporter') .annotate(user_has_voted=Exists(user_vote_subq)) .order_by('-created_at') ) - categories = IssueCategory.objects.all() - - # Optional filters (status/category) if you wired the dropdowns + # Optional filter (status only now) status = request.GET.get('status') or '' - category_id = request.GET.get('category') or '' if status: issues = issues.filter(status=status) - if category_id: - issues = issues.filter(category_id=category_id) return render(request, 'issues/view_all_issues.html', { 'issues': issues, - 'categories': categories, 'selected_status': status, - 'selected_category': category_id, }) @@ -307,6 +296,24 @@ def resolver_check(user): return user.is_resolver @login_required -@user_passes_test(resolver_check) +@user_passes_test(lambda u: u.is_resolver) def department_dashboard(request): - return render(request, "dashboard/department_dashboard.html") \ No newline at end of file + departments = request.user.departments.all() + issues = Issue.objects.filter(department__in=departments).order_by('-created_at') + return render(request, "dashboard/department_dashboard.html", {"issues": issues, "departments": departments}) + +@login_required +@user_passes_test(lambda u: u.is_resolver) +def update_issue_status(request, issue_id): + issue = get_object_or_404(Issue, id=issue_id) + + # Make sure the user belongs to the department assigned to the issue + if issue.department not in request.user.departments.all(): + return redirect("department_dashboard") + + if request.method == "POST": + new_status = request.POST.get("status") + if new_status in [Issue.STATUS_IN_PROGRESS, Issue.STATUS_RESOLVED]: + issue.status = new_status + issue.save() + return redirect("department_dashboard") \ No newline at end of file diff --git a/civicfix/run_server.py b/civicfix/run_server.py new file mode 100644 index 0000000..ed0e0c9 --- /dev/null +++ b/civicfix/run_server.py @@ -0,0 +1,5 @@ +from waitress import serve +from civicfix.wsgi import application + +if __name__ == "__main__": + serve(application, host="10.1.192.152", port=8000)