Skip to content

Commit 91d5158

Browse files
committed
modified student bulk upload
1 parent a6c0016 commit 91d5158

File tree

4 files changed

+151
-112
lines changed

4 files changed

+151
-112
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Generated by Django 4.0 on 2023-10-09 06:00
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('academic', '0008_student_gender'),
10+
]
11+
12+
operations = [
13+
migrations.RemoveField(
14+
model_name='teacher',
15+
name='teacher_id',
16+
),
17+
migrations.AddField(
18+
model_name='student',
19+
name='prem_number',
20+
field=models.CharField(blank=True, max_length=50),
21+
),
22+
]

academic/models.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ class Teacher(models.Model):
5353
last_name = models.CharField(max_length=300, verbose_name="Last Name", blank=True)
5454
gender = models.CharField(max_length=10, choices=GENDER_CHOICE, blank=True)
5555
email = models.EmailField(blank=True, null=True)
56-
teacher_id = models.CharField(max_length=255, unique=True, blank=True, null=True)
5756
empId = models.CharField(max_length=8, null=True, blank=True, unique=True)
5857
tin_number = models.CharField(max_length=9, null=True, blank=True)
5958
nssf_number = models.CharField(max_length=9, null=True, blank=True)
@@ -91,7 +90,9 @@ def save(
9190
# check if the person is already a student
9291
# if Student.objects.filter(id=self.id).count():
9392
# raise ValidationError("cannot have a someone be a student and a Teacher")
94-
93+
# create username
94+
username = self.first_name + self.last_name
95+
self.username = username
9596
# save model
9697
super(Teacher, self).save()
9798

@@ -351,7 +352,9 @@ class Student(models.Model):
351352
gender = models.CharField(
352353
max_length=10, choices=GENDER_CHOICE, blank=True, null=True
353354
)
354-
religion = models.CharField(max_length=50, choices=RELIGION_CHOICE, null=True)
355+
religion = models.CharField(
356+
max_length=50, choices=RELIGION_CHOICE, blank=True, null=True
357+
)
355358
region = models.CharField(max_length=255, blank=True, null=True)
356359
city = models.CharField(max_length=255, blank=True, null=True)
357360
street = models.CharField(max_length=255, blank=True)
@@ -363,6 +366,7 @@ class Student(models.Model):
363366
date_of_birth = models.DateField(blank=True)
364367
admission_date = models.DateTimeField(auto_now_add=True)
365368
admission_number = models.CharField(max_length=50, blank=True, unique=True)
369+
prem_number = models.CharField(max_length=50, blank=True)
366370
siblings = models.ManyToManyField("Student", blank=True)
367371
image = models.ImageField(upload_to="StudentsImages", blank=True)
368372

academic/serializers.py

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ def create(self, request):
108108
student.first_name = data["first_name"]
109109
student.middle_name = data["middle_name"]
110110
student.last_name = data["last_name"]
111-
student.addmission_number = data["addmission_number"]
111+
student.admission_number = data["addmission_number"]
112112
student.parent_contact = data["parent_contact"]
113113
student.region = data["region"]
114114
student.city = data["city"]
@@ -121,23 +121,18 @@ def create(self, request):
121121
student.save()
122122
return student
123123

124-
def bulk_create(self, request):
125-
data = request.data
124+
def bulk_create(self, student):
125+
data = student
126+
print(data)
126127
student = Student()
127-
student.addmission_number = data["addmission_number"]
128-
student.first_name = data["first_name"]
129-
student.middle_name = data["middle_name"]
130-
student.last_name = data["last_name"]
131-
student.class_level = ClassRoom.objects.get(name=data["class_level"])
132-
student.birthday = data["birthday"]
133-
print(data["birthday"][:10])
134-
# student.grad_date = data['grad_date']
135-
student.region = data["region"]
136-
student.city = data["city"]
137-
student.street = data["street"]
138-
student.prems_number = data["prems_number"]
139-
student.sex = data["sex"]
140-
student.std_vii_number = data["std_vii_number"]
141-
142-
# student.save()
128+
student.first_name = data["first_name"].lower()
129+
student.middle_name = data["middle_name"].lower()
130+
student.last_name = data["last_name"].lower()
131+
student.admission_number = data["addmission_number"]
132+
student.parent_contact = data["parent_contact"]
133+
student.grade_level = GradeLevel.objects.get(name=data["grade_level"])
134+
student.gender = data["gender"]
135+
student.date_of_birth = "2000-01-01"
136+
# student.class_of_year = ClassYear.objects.get(year=data['class_of_year'])
137+
student.save()
143138
return student

sis/views.py

Lines changed: 108 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -12,102 +12,120 @@
1212
from .serializers import FileUploadSerializer
1313
from academic.serializers import StudentSerializer
1414

15+
1516
class StudentListView(views.APIView):
16-
"""
17+
"""
1718
List all students, or create a new student.
1819
"""
19-
#permission_classes = [IsAuthenticated]
20-
def get(self, request, format=None):
21-
students = Student.objects.all()
22-
serializer = StudentSerializer(students, many=True)
23-
return Response(serializer.data)
24-
25-
def post(self, request, format=None):
26-
serializer = StudentSerializer(data=request.data)
27-
28-
print(serializer.is_valid())
29-
print(request.data)
30-
if serializer.is_valid():
31-
student = serializer.create(request)
32-
if student:
33-
#serializer.save()
34-
return Response(status=status.HTTP_201_CREATED)
35-
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
20+
21+
# permission_classes = [IsAuthenticated]
22+
def get(self, request, format=None):
23+
students = Student.objects.all()
24+
serializer = StudentSerializer(students, many=True)
25+
return Response(serializer.data)
26+
27+
def post(self, request, format=None):
28+
serializer = StudentSerializer(data=request.data)
29+
30+
print(serializer.is_valid())
31+
print(request.data)
32+
if serializer.is_valid():
33+
student = serializer.create(request)
34+
if student:
35+
# serializer.save()
36+
return Response(data=student, status=status.HTTP_201_CREATED)
37+
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
38+
3639

3740
class StudentDetailView(views.APIView):
38-
permission_classes = [IsAuthenticated]
39-
def get_object(self, pk):
40-
try:
41-
return Student.objects.get(pk=pk)
42-
except Student.DoesNotExist:
43-
raise Http404
44-
def get(self, request, pk, format=None):
45-
student = self.get_object(pk)
46-
serializer = StudentSerializer(student)
47-
return Response(serializer.data)
48-
49-
def put(self, request, pk, format=None):
50-
student = self.get_object(pk)
51-
serializer = StudentSerializer(student, data=request.data)
52-
if serializer.is_valid():
53-
serializer.save()
54-
return Response(serializer.data)
55-
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
56-
57-
def delete(self, request, pk, format=None):
58-
student = self.get_object(pk)
59-
student.delete()
60-
return Response(status=status.HTTP_204_NO_CONTENT)
41+
permission_classes = [IsAuthenticated]
42+
43+
def get_object(self, pk):
44+
try:
45+
return Student.objects.get(pk=pk)
46+
except Student.DoesNotExist:
47+
raise Http404
48+
49+
def get(self, request, pk, format=None):
50+
student = self.get_object(pk)
51+
serializer = StudentSerializer(student)
52+
return Response(serializer.data)
53+
54+
def put(self, request, pk, format=None):
55+
student = self.get_object(pk)
56+
serializer = StudentSerializer(student, data=request.data)
57+
if serializer.is_valid():
58+
serializer.save()
59+
return Response(serializer.data)
60+
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
61+
62+
def delete(self, request, pk, format=None):
63+
student = self.get_object(pk)
64+
student.delete()
65+
return Response(status=status.HTTP_204_NO_CONTENT)
66+
6167

6268
class StudentBulkUploadView(views.APIView):
63-
"""
64-
This uploads bulk number of students from excel file
65-
"""
66-
67-
parser_class = [FileUploadParser]
68-
def post(self, request, filename, format="xlsx"):
69-
file_obj = request.data
70-
print(request.data)
71-
72-
xlfile = file_obj["filename"]
73-
74-
wb = load_workbook(xlfile)
75-
ws = wb.active
76-
print(ws.title)
77-
78-
studentz = []
79-
for row in ws.iter_rows(min_row=2, max_col=9, max_row=6, values_only=True):
80-
studentz.append(row)
81-
#print(studentz)
82-
83-
students = []
84-
for i in range(len(studentz)):
85-
student = {
86-
"addmission_number": f"{studentz[i][0]}",
87-
"first_name": f"{studentz[i][1]}",
88-
"middle_name": f"{studentz[i][2]}",
89-
"last_name": f"{studentz[i][3]}",
90-
"grad_date": f"{studentz[i][4]}",
91-
"sex": f"{studentz[i][5]}",
92-
"birthday": f"{studentz[i][6]}",
93-
"class_level": f"{studentz[i][8]}",
94-
}
95-
students.append(student)
96-
97-
for student in students:
98-
if student in Student.objects.all():
99-
print("student exists!")
100-
continue
101-
else:
102-
serializer = StudentSerializer(data=student)
103-
if serializer.is_valid():
104-
serializer.save()
105-
106-
return Response(status=status.HTTP_201_CREATED)
107-
108-
109-
110-
'''
69+
"""
70+
This uploads bulk number of students from excel file
71+
"""
72+
73+
parser_class = [FileUploadParser]
74+
75+
def post(self, request, filename, format="xlsx"):
76+
file_obj = request.data
77+
78+
xlfile = file_obj["filename"]
79+
print(xlfile)
80+
81+
wb = load_workbook(xlfile)
82+
ws = wb.active
83+
print(ws.title)
84+
85+
studentz = []
86+
for row in ws.iter_rows(min_row=5, max_col=9, max_row=99, values_only=True):
87+
studentz.append(row)
88+
# print(studentz)
89+
90+
students = []
91+
for i in range(len(studentz)):
92+
student = {
93+
"first_name": f"{studentz[i][1].split()[0]}",
94+
"middle_name": f"{studentz[i][1].split()[1]}",
95+
"last_name": f"{studentz[i][1].split()[2]}",
96+
"gender": f"{studentz[i][2]}",
97+
"prem number": f"{studentz[i][0]}",
98+
"grade_level": f"{studentz[i][3]}",
99+
"parent_contact": f"{studentz[i][4]}",
100+
"addmission_number": f"{studentz[i][5]}",
101+
"religion": f"{studentz[i][7]}",
102+
}
103+
students.append(student)
104+
print(students)
105+
106+
created = []
107+
exist = []
108+
for student in students:
109+
if student in Student.objects.all():
110+
print("student exists!")
111+
exist.append(student)
112+
continue
113+
else:
114+
serializer = StudentSerializer(data=student)
115+
print(serializer.is_valid())
116+
if serializer.is_valid():
117+
student = serializer.bulk_create(student)
118+
created.append(student)
119+
# if student:
120+
# serializer.save()
121+
# serializer.save()
122+
123+
return Response(
124+
data={"created": created, "existing": exist}, status=status.HTTP_201_CREATED
125+
)
126+
127+
128+
"""
111129
class StudentHealthRecordViewSet(viewsets.ModelViewSet):
112130
queryset = StudentHealthRecord.objects.all()
113131
serializer_class = StudentHealthRecordSerializer
@@ -127,4 +145,4 @@ class SchoolYearViewSet(viewsets.ModelViewSet):
127145
class MessageToStudentViewSet(viewsets.ModelViewSet):
128146
queryset = MessageToStudent.objects.all()
129147
serializer_class = MessageToStudentSerializer
130-
'''
148+
"""

0 commit comments

Comments
 (0)