Skip to content

Commit

Permalink
Fix: fix some bugs in export answer_sheets
Browse files Browse the repository at this point in the history
  • Loading branch information
AmooHashem committed Jan 20, 2025
1 parent 417ef06 commit 4b9776c
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 13 deletions.
19 changes: 16 additions & 3 deletions apps/fsm/models/fsm.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.db import models, transaction
from apps.accounts.models import User

from apps.fsm.models.base import Object, ObjectMixin, Paper, clone_paper
from apps.fsm.models.base import Object, ObjectMixin, Paper, Widget, clone_paper
from apps.fsm.models.form import AnswerSheet, RegistrationReceipt
from apps.fsm.models.program import Program

Expand Down Expand Up @@ -117,8 +117,21 @@ def clone(self):
def get_fsm(fsm_id: int):
return FSM.objects.filter(id=fsm_id).first()

def get_widgets(self):
return []
def get_questions(self):
states = self.states.all()
questions = []
for state in states:
papers = state.papers.all()
for paper in papers:
questions += paper.widgets.filter(
widget_type__in=[
Widget.WidgetTypes.SmallAnswerProblem,
Widget.WidgetTypes.BigAnswerProblem,
Widget.WidgetTypes.MultiChoiceProblem,
Widget.WidgetTypes.UploadFileProblem
]
)
return questions


class Player(models.Model):
Expand Down
17 changes: 7 additions & 10 deletions apps/report/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,16 +163,13 @@ def _get_program_merchandises_purchases_file(form_id):


def _get_answer_sheets_excel_file_by_fsm_id(fsm_id):
fsm = FSM.objects.select_related().get(id=fsm_id)
fsm = FSM.objects.get(id=fsm_id)
players = Player.objects.filter(fsm=fsm)
answer_sheets = []
for player in players:
answer_sheets.append(player.answer_sheet)

# Use select_related to fetch related answer_sheet in a single query
players = Player.objects.select_related('answer_sheet').filter(fsm=fsm)

# Extract answer_sheets efficiently
answer_sheets = [
player.answer_sheet for player in players if player.answer_sheet]

widgets = fsm.get_widgets()
widgets = fsm.get_questions()

return _get_answer_sheets_excel_file(widgets, answer_sheets)

Expand Down Expand Up @@ -218,7 +215,7 @@ def _get_answer_sheets_excel_file(questions, answer_sheets):
answer_sheet=answer_sheet)
file_answers = UploadFileAnswer.objects.filter(
answer_sheet=answer_sheet)

for answer in small_answers:
problem_column = f'Problem {answer.problem.id}'
answer_sheet_data[problem_column] = answer.text
Expand Down

0 comments on commit 4b9776c

Please sign in to comment.