Skip to content

Commit 53ea98d

Browse files
Made Changes in Menu, Froms and SDC (#124)
* Made Changes in Menu and SDC * Reverting changes in requirements.txt * Deleted templates/caterers.html
1 parent eb2f784 commit 53ea98d

13 files changed

Lines changed: 661 additions & 33 deletions

File tree

home/admin.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
StudentBills,
3535
UnregisteredStudent,
3636
Update,
37+
Menu,
38+
SDC,
3739
)
3840
from home.utils.rebate_checker import max_days_rebate
3941

@@ -179,6 +181,27 @@ def generate_table(self, request, queryset):
179181
)
180182
caterer_bill.save()
181183

184+
@admin.register(Menu)
185+
class MenuAdmin(admin.ModelAdmin):
186+
model = Menu
187+
search_fields = ("menu_type",)
188+
list_filter = ("menu_type",)
189+
fieldsets = (
190+
(
191+
None,
192+
{
193+
"fields": ("menu_type", "sheet_url"),
194+
"description": "Manage different types of menus and their URLs.",
195+
},
196+
),
197+
)
198+
actions = ["reset_menu_urls"]
199+
200+
@admin.action(description="Reset menu URLs to default")
201+
def reset_menu_urls(self, request, queryset):
202+
for menu in queryset:
203+
menu.sheet_url = ""
204+
menu.save()
182205

183206
@admin.register(Form)
184207
class about_Admin(admin.ModelAdmin):
@@ -1179,3 +1202,48 @@ class about_Admin(admin.ModelAdmin):
11791202
},
11801203
),
11811204
)
1205+
1206+
1207+
@admin.register(SDC)
1208+
class SDCAdmin(admin.ModelAdmin):
1209+
model = SDC
1210+
search_fields = ("student__name", "student__roll_no", "student__email", "position", "year")
1211+
list_display = ("student", "name", "position", "year")
1212+
list_filter = ("position", "year")
1213+
autocomplete_fields = ["student"]
1214+
1215+
fieldsets = (
1216+
(
1217+
None,
1218+
{
1219+
"fields": (
1220+
"student",
1221+
"name",
1222+
"image",
1223+
"position",
1224+
"year",
1225+
),
1226+
"description": "Manage SDC Members",
1227+
},
1228+
),
1229+
)
1230+
actions = ["export_as_csv"]
1231+
1232+
def export_as_csv(self, request, queryset):
1233+
"""
1234+
Export action available in the admin page
1235+
"""
1236+
import csv
1237+
from django.http import HttpResponse
1238+
1239+
response = HttpResponse(content_type="text/csv")
1240+
response["Content-Disposition"] = 'attachment; filename="SDC.csv"'
1241+
writer = csv.writer(response)
1242+
writer.writerow(["Student", "Name", "Position", "Year"])
1243+
1244+
for obj in queryset:
1245+
writer.writerow([obj.student, obj.name, obj.position, obj.year])
1246+
1247+
return response
1248+
1249+
export_as_csv.short_description = "Export SDC details to CSV"

home/migrations/0007_menu.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Generated by Django 5.0.13 on 2025-03-22 10:38
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("home", "0006_alter_allocationform_period"),
10+
]
11+
12+
operations = [
13+
migrations.CreateModel(
14+
name="Menu",
15+
fields=[
16+
(
17+
"id",
18+
models.BigAutoField(
19+
auto_created=True,
20+
primary_key=True,
21+
serialize=False,
22+
verbose_name="ID",
23+
),
24+
),
25+
(
26+
"menu_type",
27+
models.CharField(
28+
choices=[
29+
("General", "General Menu"),
30+
("Sick Food", "Sick Food Menu"),
31+
("Jain", "Jain Menu"),
32+
],
33+
help_text="The type of menu (General, Sick Food, Jain). Only one instance per type is allowed.",
34+
max_length=20,
35+
unique=True,
36+
verbose_name="Menu Type",
37+
),
38+
),
39+
(
40+
"sheet_url",
41+
models.URLField(
42+
help_text="The Google Sheets URL containing the respective menu.",
43+
verbose_name="Menu URL",
44+
),
45+
),
46+
],
47+
options={
48+
"verbose_name": "Menu",
49+
"verbose_name_plural": "Menus",
50+
},
51+
),
52+
]

home/migrations/0008_sdc.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# Generated by Django 5.0.13 on 2025-03-22 17:10
2+
3+
import django.db.models.deletion
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
("home", "0007_menu"),
11+
]
12+
13+
operations = [
14+
migrations.CreateModel(
15+
name="SDC",
16+
fields=[
17+
(
18+
"id",
19+
models.BigAutoField(
20+
auto_created=True,
21+
primary_key=True,
22+
serialize=False,
23+
verbose_name="ID",
24+
),
25+
),
26+
(
27+
"name",
28+
models.CharField(
29+
help_text="This contains the name of the Student in SDC",
30+
max_length=50,
31+
verbose_name="Name of Student",
32+
),
33+
),
34+
(
35+
"image",
36+
models.ImageField(
37+
blank=True,
38+
help_text="Profile image of the Student in SDC",
39+
null=True,
40+
upload_to="sdc_images/",
41+
),
42+
),
43+
(
44+
"position",
45+
models.CharField(
46+
choices=[
47+
("Head", "Head"),
48+
("Advisory", "Advisory"),
49+
("Member", "Member"),
50+
],
51+
help_text="This contains the position of the Student in SDC",
52+
max_length=20,
53+
verbose_name="Position in SDC",
54+
),
55+
),
56+
(
57+
"year",
58+
models.IntegerField(
59+
choices=[(2024, "2024"), (2025, "2025")],
60+
help_text="Select the year for SDC membership",
61+
verbose_name="Year",
62+
),
63+
),
64+
(
65+
"student",
66+
models.OneToOneField(
67+
help_text="Reference to the Student table",
68+
on_delete=django.db.models.deletion.CASCADE,
69+
related_name="sdc_profile",
70+
to="home.student",
71+
),
72+
),
73+
],
74+
options={
75+
"verbose_name": "SDC Member",
76+
"verbose_name_plural": "SDC Members",
77+
},
78+
),
79+
]

home/models/SDC.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
from django.db import models
2+
from django.utils.translation import gettext as _
3+
from home.models import Student
4+
5+
class SDC(models.Model):
6+
"""
7+
Stores details of SDC members, linked to the Student table.
8+
"""
9+
POSITION_CHOICES = [
10+
("Head", "Head"),
11+
("Advisory", "Advisory"),
12+
("Member", "Member"),
13+
]
14+
15+
YEAR_CHOICES = [
16+
(2024, "2024"),
17+
(2025, "2025"),
18+
]
19+
20+
student = models.OneToOneField(
21+
Student,
22+
on_delete=models.CASCADE,
23+
related_name="sdc_profile",
24+
help_text="Reference to the Student table"
25+
)
26+
name = models.CharField(
27+
_("Name of Student"),
28+
max_length=50,
29+
help_text="This contains the name of the Student in SDC",
30+
)
31+
image = models.ImageField(
32+
upload_to="sdc_images/",
33+
blank=True,
34+
null=True,
35+
help_text="Profile image of the Student in SDC"
36+
)
37+
position = models.CharField(
38+
_("Position in SDC"),
39+
max_length=20,
40+
choices=POSITION_CHOICES,
41+
help_text="This contains the position of the Student in SDC"
42+
)
43+
year = models.IntegerField(
44+
_("Year"),
45+
choices=YEAR_CHOICES,
46+
help_text="Select the year for SDC membership"
47+
)
48+
49+
def __str__(self):
50+
return f"{self.name} - {self.position} ({self.year})"
51+
52+
class Meta:
53+
verbose_name = "SDC Member"
54+
verbose_name_plural = "SDC Members"

home/models/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,5 @@
2121
)
2222
from .allocation import Allocation, Period, Semester
2323
from .bills import CatererBills, StudentBills
24+
from .menu import Menu
25+
from .SDC import SDC

home/models/menu.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from django.db import models
2+
from django.utils.translation import gettext as _
3+
4+
class Menu(models.Model):
5+
"""
6+
Stores different types of menus with their respective Google Sheets URLs.
7+
Ensures that only one object exists for each menu type.
8+
"""
9+
GENERAL = "General"
10+
SICK_FOOD = "Sick Food"
11+
JAIN = "Jain"
12+
13+
MENU_CHOICES = [
14+
(GENERAL, "General Menu"),
15+
(SICK_FOOD, "Sick Food Menu"),
16+
(JAIN, "Jain Menu"),
17+
]
18+
19+
menu_type = models.CharField(
20+
_("Menu Type"),
21+
max_length=20,
22+
choices=MENU_CHOICES,
23+
unique=True,
24+
help_text="The type of menu (General, Sick Food, Jain). Only one instance per type is allowed."
25+
)
26+
sheet_url = models.URLField(
27+
_("Menu URL"),
28+
help_text="The Google Sheets URL containing the respective menu.",
29+
)
30+
31+
def __str__(self):
32+
return f"{self.menu_type} Menu"
33+
34+
class Meta:
35+
verbose_name = "Menu"
36+
verbose_name_plural = "Menus"

home/urls.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
path("", views.home, name="home"),
2626
path("home/", views.home, name="home"),
2727
path("rules/", views.rules, name="rules"),
28-
path("caterer/<str:name>", views.caterer, name="caterer"),
28+
# path("caterer/<str:name>", views.caterer, name="caterer"),
29+
# path('caterers/', views.caterers, name='caterers'),
30+
path('menu/', views.menu, name='menu'),
2931
path("links/", views.links, name="links"),
3032
path("cafeteria/", views.cafeteria, name="cafeteria"),
3133
path("contact/", views.contact, name="contact"),
@@ -36,4 +38,5 @@
3638
path("allocationForm/", views.allocationForm, name="allocationForm"),
3739
path("period_data/", views.period_data, name="period_data"),
3840
path("rebate_data/", views.rebate_data, name="rebate_data"),
41+
path("sdc/", views.sdc_list, name="sdc_list"),
3942
]

0 commit comments

Comments
 (0)