Skip to content

Commit b4d3688

Browse files
committed
Refactor download logic to allow exporting enum names
1 parent 5b2735c commit b4d3688

File tree

1 file changed

+50
-36
lines changed

1 file changed

+50
-36
lines changed

tally_ho/apps/tally/views/audit.py

Lines changed: 50 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
from djqscsv import render_to_csv_response
99
from guardian.mixins import LoginRequiredMixin
1010
from django.views import View
11+
from django.http import HttpResponse
12+
import csv
1113

1214
from tally_ho.apps.tally.forms.audit_form import AuditForm
1315
from tally_ho.apps.tally.forms.barcode_form import BarcodeForm
@@ -431,41 +433,53 @@ def get(self, request, *args, **kwargs):
431433
'approver'
432434
).order_by('-created_date')
433435

434-
fields = [
435-
'pk',
436-
'request_type',
437-
'status',
438-
'result_form__barcode',
439-
'result_form__center__code',
440-
'result_form__station_number',
441-
'result_form__ballot__number',
442-
'request_reason',
443-
'request_comment',
444-
'requester__username',
445-
'created_date',
446-
'approver__username',
447-
'resolved_date',
448-
'approval_comment'
436+
# Define user-friendly headers in the desired order
437+
headers = [
438+
'Request ID',
439+
'Request Type',
440+
'Status',
441+
'Barcode',
442+
'Center Code',
443+
'Station Number',
444+
'Ballot Number',
445+
'Reason',
446+
'Request Comment',
447+
'Requested By',
448+
'Requested On',
449+
'Actioned By',
450+
'Actioned On',
451+
'Action Comment'
449452
]
450453

451-
field_header_map = {
452-
'pk': 'Request ID',
453-
'request_type': 'Request Type',
454-
'status': 'Status',
455-
'result_form__barcode': 'Barcode',
456-
'result_form__center__code': 'Center Code',
457-
'result_form__station_number': 'Station Number',
458-
'result_form__ballot__number': 'Ballot Number',
459-
'request_reason': 'Reason',
460-
'request_comment': 'Request Comment',
461-
'requester__username': 'Requested By',
462-
'created_date': 'Requested On',
463-
'approver__username': 'Actioned By',
464-
'resolved_date': 'Actioned On',
465-
'approval_comment': 'Action Comment'
466-
}
467-
468-
recall_requests_values = recall_requests_qs.values(*fields)
469-
470-
return render_to_csv_response(
471-
recall_requests_values, field_header_map=field_header_map)
454+
# Create the HttpResponse object with CSV header.
455+
response = HttpResponse(content_type='text/csv')
456+
response['Content-Disposition'] =\
457+
'attachment; filename="recall_requests.csv"'
458+
459+
writer = csv.writer(response)
460+
writer.writerow(headers) # Write the header row
461+
462+
# Write data rows
463+
for req in recall_requests_qs:
464+
writer.writerow([
465+
req.pk,
466+
req.get_request_type_display(),
467+
req.get_status_display(),
468+
req.result_form.barcode,
469+
req.result_form.center.code\
470+
if req.result_form.center else None,
471+
req.result_form.station_number,
472+
req.result_form.ballot.number\
473+
if req.result_form.ballot else None,
474+
req.get_request_reason_display(),
475+
req.request_comment,
476+
req.requester.username if req.requester else None,
477+
req.created_date.strftime("%Y-%m-%d %H:%M:%S")\
478+
if req.created_date else None,
479+
req.approver.username if req.approver else None,
480+
req.resolved_date.strftime("%Y-%m-%d %H:%M:%S")\
481+
if req.resolved_date else None,
482+
req.approval_comment
483+
])
484+
485+
return response

0 commit comments

Comments
 (0)