From 800e9db5128e1a746bb4fd88efe9a74b731f297e Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Wed, 18 Feb 2026 05:36:23 +0000 Subject: [PATCH] Autosave: 20260218-053623 --- config/__pycache__/settings.cpython-311.pyc | Bin 5614 -> 5771 bytes config/__pycache__/urls.cpython-311.pyc | Bin 1557 -> 1653 bytes config/settings.py | 10 ++ config/urls.py | 1 + core/__pycache__/models.cpython-311.pyc | Bin 8173 -> 11085 bytes core/__pycache__/urls.cpython-311.pyc | Bin 1580 -> 2124 bytes core/__pycache__/views.cpython-311.pyc | Bin 18118 -> 24735 bytes ...or_user_donationevent_feedback_and_more.py | 58 ++++++ ...ionevent_feedback_and_more.cpython-311.pyc | Bin 0 -> 3678 bytes core/models.py | 30 ++++ core/templates/base.html | 166 ++++++++++++++++-- core/templates/core/blood_request_list.html | 18 +- core/templates/core/donor_list.html | 5 +- core/templates/core/feedback.html | 34 ++++ core/templates/core/index.html | 100 +++++++++-- core/templates/core/live_map.html | 4 +- core/templates/core/notifications.html | 35 ++++ core/templates/core/register_donor.html | 37 ++++ core/templates/core/vaccination_info.html | 16 ++ core/urls.py | 14 +- core/views.py | 124 ++++++++++++- 21 files changed, 609 insertions(+), 43 deletions(-) create mode 100644 core/migrations/0009_bloodrequest_user_donor_user_donationevent_feedback_and_more.py create mode 100644 core/migrations/__pycache__/0009_bloodrequest_user_donor_user_donationevent_feedback_and_more.cpython-311.pyc create mode 100644 core/templates/core/feedback.html create mode 100644 core/templates/core/notifications.html create mode 100644 core/templates/core/register_donor.html diff --git a/config/__pycache__/settings.cpython-311.pyc b/config/__pycache__/settings.cpython-311.pyc index 9aced4fd93ebc3229ad8cd904c46a30dc64bde16..50ad71ddd41eea55ea431048d273c9609069796c 100644 GIT binary patch delta 673 zcmaE--L1>FoR^o20SMf@r)CO>PUMqd{IF5|B$G{wemYZ>LMms9K@~RxLpo!WVv1pu z5|D2M;zub1S;in1kT!wRreKxKQ7V%Ym=)@yRGAo3nX|x#gDgm~Na0$>#K5o`h#??K z4X8pLO_gPe6{@Obj6gj=4ArB7rrtV*7gc?fCRl|o!eSc?C0b~P*iQUrE3AzsXqRF? z@rQN14w|q-iX)nZx+zXA3}~vHQ*}{QEzpB`0hvy5nS72#URpm@r-&)VHA*|hEy^Ip zJ<2e}Bg!a+IhaAyb2A64DGMX}WIN7E-kkj8#GF(;A279fCg%-iRZXT_OsRRd*j@9| zb25uFK-|34TWo%*1&KMCx7Z*$HW%`)W@OwlS(d+-(RlM}{uzuCoIZ|z?xBwEuEDo> zeEgjqeO%)M978;UCp!u1m|6gxSY!z#ZZT)(l@wWlxHcfd7DU*A2zwCW2qbQ?78m4X zmK3>8UMv{ET>umT#Z@sU%jSQAag2god`ur0U_=Ag2Z_zO!h(#7Yz(YoH&{eIurl*9 fHE@35VPNI$sJO@?{(+fEfT@A!gTUr`k$gq~W+8`V delta 560 zcmeCyeW%U0oR^o20SIiWr(~9hOyrYbyt7gLBvXBqLMms9eib(ZLzE(rWdLFUX+tP& z1ftWKqm-B!Qkk>BCV)&yF-|dA#>Bv|8i*kvN*PUsX$lvb3KgIVRWwzTt(gT=mN5cN z0%E91YG`UKQh3o!Qb$u^iJ?LRO@-CuAI!Fsk1`7|Tc_Ae{>5zVsfDJ(HpLFj7VQ-K z76vp`4yoFxsut)>zQ`_Y%aG!T>I)Z!WkBz&hIxu1N;g%jh$+P>N;AbdN-xDFNX~m_gHRvka>#3nSa)AkNCo-#B+MZ@$XAnvrqUuj*HD=-y z)F-H4kTSd|WOPNy=pu{p6&B+gEF29k9YP)99pMwAFY+p0;Z?lIqI88t=>t0pKT`wu K2cF4WSrY(`b2{)y;1u0xr z+zbqBxFicD5ulxGC7L^*ka8B%~)lXr6*<9?>i)+}m_OdlC0C$rYb2z7*aginaR e$g6mTSMef?(iIk^53J1mOby&0xF(CTB>({b6d%$6 diff --git a/config/settings.py b/config/settings.py index 0b62db9..103f1eb 100644 --- a/config/settings.py +++ b/config/settings.py @@ -61,6 +61,7 @@ INSTALLED_APPS = [ MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', @@ -141,6 +142,15 @@ USE_I18N = True USE_TZ = True +LANGUAGES = [ + ('en', 'English'), + ('ne', 'Nepali'), +] + +LOCALE_PATHS = [ + BASE_DIR / 'locale', +] + # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/5.2/howto/static-files/ diff --git a/config/urls.py b/config/urls.py index bcfc074..baccfac 100644 --- a/config/urls.py +++ b/config/urls.py @@ -21,6 +21,7 @@ from django.conf.urls.static import static urlpatterns = [ path("admin/", admin.site.urls), + path("i18n/", include("django.conf.urls.i18n")), path("", include("core.urls")), ] diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 61b392a54f3eec05704d57ce51919587426c8286..ffaadc6f1420b2f506375d04047710a3b06be0c9 100644 GIT binary patch delta 3617 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 ADF6Tf diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index cc49284d87e7ca510a735b3ed92e815ad347db1c..77f725c45cb0d4d8b3fd4d9ab7b99a9af6160adf 100644 GIT binary patch delta 813 zcmc&xzi-n(6!tl1pp-O@?L>kMG?bPEwOFWIMU99oBp3n`6Gv1l&0SiT+Ailykg}vB z0|Q_ov9ZBG2M{ZN0>fGIfV`HaOqGyW!IvLM-H~{wJALoF@80+H?%>>4we~)rKPzSN zyZPGvrAX4DNTyMqfS+sf%i7&}PerO%L`6?Snx`Y(Gmrr!St0;KlEca?Q2G?Df=C65 za*?QbJ|mPWDdI~4ED#M}7GRO+cqs#`SBQaY2dCcUBQ|2hQ3om9 zYqRYmAQCP54!&%Z`oV6`XM|9v8&HRmCp{9fwAcx}y(J@Dj>tWt-eYQ3+aa?SfRLgo9 zRHt?;Q@gQ}^oh^LI$h{yrsgI!L_T+-1vAZ`$Oi?{jV{^|bpvWr@e9p*IeMN$<&iZN zbw|Z$NuY9cn7co_kU=q|a7T_TSQ(xM^0D;)jywO#-T0hW3SjsRp4qqg%o4AybNdm8 ztr)fv*qYGG{Mt=^`yq!YhA4q(L_e#%2>9|khgJ-&1X>gAd0tuhc#lInhIRt&347s9 alV88ZVIzi(1U8Nr^@6-VD;BM0Q~d)BCEy4E delta 323 zcmX>ju!cutIWI340}z~_JSFopGXuk85C;YXp^VQ<7$<6YZEOo+luPH05=fB`X3$i4 z36j)gyv0(GSd#IQ5yau0T*b6!@>J%R%zm1JlLc6#CO5PCa?1jxK+?s}87JRnm9A%C k^kx146dEAXlpKrMHt%EOXB7A#&BxEwzzu>$(m*c(0FXRJ{r~^~ diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index a39fa7167e0e3df66ca40bcd479234f91a086db8..c9d8df3ea69e1da58bae81a7ceac0acfad91957d 100644 GIT binary patch delta 9322 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 diff --git a/core/migrations/0009_bloodrequest_user_donor_user_donationevent_feedback_and_more.py b/core/migrations/0009_bloodrequest_user_donor_user_donationevent_feedback_and_more.py new file mode 100644 index 0000000..f9e4101 --- /dev/null +++ b/core/migrations/0009_bloodrequest_user_donor_user_donationevent_feedback_and_more.py @@ -0,0 +1,58 @@ +# Generated by Django 5.2.7 on 2026-02-18 05:21 + +import django.db.models.deletion +import django.utils.timezone +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0008_userprofile'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name='bloodrequest', + name='user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='blood_requests', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='donor', + name='user', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='donor_profile', to=settings.AUTH_USER_MODEL), + ), + migrations.CreateModel( + name='DonationEvent', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateTimeField(default=django.utils.timezone.now)), + ('is_completed', models.BooleanField(default=False)), + ('donor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='donations', to='core.donor')), + ('donor_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='my_donations', to=settings.AUTH_USER_MODEL)), + ('request', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='donations', to='core.bloodrequest')), + ], + ), + migrations.CreateModel( + name='Feedback', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('content', models.TextField()), + ('rating', models.PositiveIntegerField(default=5)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='feedbacks', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Notification', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('message', models.TextField()), + ('is_read', models.BooleanField(default=False)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notifications', to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/core/migrations/__pycache__/0009_bloodrequest_user_donor_user_donationevent_feedback_and_more.cpython-311.pyc b/core/migrations/__pycache__/0009_bloodrequest_user_donor_user_donationevent_feedback_and_more.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0431d83e267cef844c969befa51088b19585b7c9 GIT binary patch literal 3678 zcmcInKWy7p8Yd}<`eP}P9LI_*rHU_(Te*$pLmMLn4!KiosZQfKt}W+}4mg6+dr~P& zq)bvyZQy_mH{6)zP>(nHQp7`s4jwvWxZ#EyXy6UPn+~|Cn}T@i)bBlsvfUVMT%eTn z@#FWtzrT;~BlWLHBqYGGx%dw)KO_kMXBY0_>oad20rRzh1SB?ulE}{zKT8cy(_8Y2 zY|Yc~HRY1r^q2giAPJud$on?|`LJ9MxDIzcg75-^tEj-O)vi#J}#@@oO}yh;)hB>{WtURM?S>axr4iVz)s zy`v_T{9JdC9g>g-B*8jIglQo!^5UU-xNjoVg99!y;Lf=m)Osx1p1cd0y>KxU_WUQS z|4HmXKlb^7w|9vh9cTy79NR@uKp`~5>mD9>gV-pHB75g{0m&BwG^-Li&owW&nt;xT z%hxXsxKWqei=IRsJjA$%xT}G}r|1N@&Y%xx=)o|$us3oNX^468q`!CS>k+o2KZh-N zkDv5@rfe_0oo!9tOYBO3JN$YF`1jP0`ZacjekFNsmt0S~z`SrT1js$b*AuP?T|T87 z?{S?$&yja8{Z?0hvUARW!Icx}zSX;$?-$S*KLZ-S`vo+v^7Ws;H-B3+CeDgR%~u*j z*IF?5?%C$oo`Ui+Rs z2WY5Ynxfi}aj#n4c%rBX60P=aEgD`jY^|zQc;3|C#FnMjF!e)W01cuM{n)y-lu6Qn z!og4!8d4PKM!SK54=c(>TWzq8D2mCZI32N`sI8V-hINEnSVvf|Y?uWwZ%m`G{-xAkKH{qd|RvKp#43i$UJnls5SdGzP7D3AO{;H z+lG#*2Vese!)Rbt@0kRP_$#}|jw~CNW^0@H4m6>L&7L%5v~d5G;v3-&lq~#UXTLO> zINL6_b-SI#U*QU5U}m2f=DO8VD>%zqo;`XM$-;K}R5^YN@V&+E7Q-B{ylpMXI>EP3qh2XVL;QhacNZ|eF0rJ704gxt6$aQ_55&7w2 zH!K8GY%SS|U+cu;o#Cs`Cdu&C=MyiBuO9sSG0Cry{9j1E+J$#Iu^_?euCyv0vQvd! zT|m-nPC*2G*Y6F6UJF1D8R>?O+`q@&PcrwD&x`xs|H%Ihl7&ZPK_v@y@U$)7VGft1 z2h9DFRORk#+E-X*j5oy77%VwohCo#+>xSlSu?gbCo4AS%u6dw^`WFNyN8m&uCBD0E1)0(%3N)Lt1%~aeWyTD*Z1Y` zg5>4`x%maT`Pli=0);Jck?CE&$1H(@B~WI$By}VHk#k*Nh;;_YAtT*UA?QMvd&AkrU=Oj!q|OQ1W*tGWkoDY-65G35oARG zIb@_ea#Te6R~7+!Mb&$G6Qn#GwAAdy=texB9ZI<=6$h$hW$_wH91$b6S z@$^D+;?%JG^mFzxKX4{knmdxPT+3&&&L1@4EyAA0ltmbna - + @@ -178,6 +179,78 @@ #sidebar.active { margin-left: 0; } } + /* SOS Floating Button */ + .sos-btn { + position: fixed; + bottom: 30px; + right: 30px; + width: 65px; + height: 65px; + background-color: var(--pulse-red); + color: white; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + text-decoration: none; + box-shadow: 0 4px 15px rgba(230, 57, 70, 0.4); + z-index: 9999; + transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); + font-weight: 800; + font-size: 1.1rem; + border: 3px solid white; + } + + .sos-btn:hover { + transform: scale(1.1); + color: white; + box-shadow: 0 6px 20px rgba(230, 57, 70, 0.6); + } + + .sos-btn .pulse-ring { + position: absolute; + width: 100%; + height: 100%; + border-radius: 50%; + background-color: var(--pulse-red); + opacity: 0.6; + animation: sos-pulse 2s infinite; + z-index: -1; + } + + .sos-content { + display: flex; + flex-direction: column; + align-items: center; + line-height: 1; + } + + .sos-text { + font-size: 1.1rem; + font-weight: 800; + } + + .sos-number { + font-size: 0.7rem; + font-weight: 600; + margin-top: 2px; + } + + @keyframes sos-pulse { + 0% { transform: scale(1); opacity: 0.6; } + 100% { transform: scale(1.8); opacity: 0; } + } + + @media (max-width: 576px) { + .sos-btn { + bottom: 20px; + right: 20px; + width: 55px; + height: 55px; + font-size: 0.9rem; + } + } + {% block head %}{% endblock %} @@ -195,25 +268,19 @@ - -
-
-

Need Help?

- Emergency: 1115 -
-
@@ -231,6 +298,31 @@
+ + +
Detect Location @@ -241,6 +333,13 @@
{% if user.is_authenticated %}
+ + + + + {{ user.notifications.count }} + +
@@ -335,6 +434,39 @@ } checkLocationCookie(); + +
+
+ SOS + 1115 +
+
+ + + {% block scripts %}{% endblock %} diff --git a/core/templates/core/blood_request_list.html b/core/templates/core/blood_request_list.html index 71f97e8..1442784 100644 --- a/core/templates/core/blood_request_list.html +++ b/core/templates/core/blood_request_list.html @@ -21,8 +21,8 @@
-

Blood Requests

-

Current active requirements for blood in various hospitals.

+

{% if current_status %}{{ current_status }} {% endif %}Blood Requests

+

{% if current_status == 'Active' %}Current urgent requirements for blood.{% else %}History of blood requests in our community.{% endif %}

Post a Request
@@ -34,7 +34,14 @@
- {{ req.urgency }} +
+ {{ req.urgency }} + {% if req.status == 'Active' %} + Active + {% else %} + {{ req.status }} + {% endif %} +
{{ req.blood_group }}
@@ -44,7 +51,10 @@
{{ req.created_at|timesince }} ago - Help Now +
+ Volunteer + Call +
diff --git a/core/templates/core/donor_list.html b/core/templates/core/donor_list.html index b391186..1818a0c 100644 --- a/core/templates/core/donor_list.html +++ b/core/templates/core/donor_list.html @@ -71,8 +71,9 @@

Phone: {{ donor.phone }}

Contact Now -
- {% endfor %} +
+
+ {% endfor %}
diff --git a/core/templates/core/feedback.html b/core/templates/core/feedback.html new file mode 100644 index 0000000..6451f56 --- /dev/null +++ b/core/templates/core/feedback.html @@ -0,0 +1,34 @@ +{% extends 'core/base.html' %} +{% load i18n %} + +{% block content %} +
+
+
+
+

{% trans "Share Your Feedback" %}

+

{% trans "We value your experience. Please let us know how we can improve." %}

+ +
+ {% csrf_token %} +
+ + +
+
+ + +
+ +
+
+
+
+
+{% endblock %} diff --git a/core/templates/core/index.html b/core/templates/core/index.html index e0da796..34766e4 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,7 +1,8 @@ {% extends "base.html" %} {% load static %} +{% load i18n %} -{% block title %}RaktaPulse Dashboard - Lifeline of the Community{% endblock %} +{% block title %}{% trans "RaktaPulse Dashboard" %} - {% trans "Lifeline of the Community" %}{% endblock %} {% block head %}