|
8 | 8 | from djqscsv import render_to_csv_response |
9 | 9 | from guardian.mixins import LoginRequiredMixin |
10 | 10 | from django.views import View |
| 11 | +from django.http import HttpResponse |
| 12 | +import csv |
11 | 13 |
|
12 | 14 | from tally_ho.apps.tally.forms.audit_form import AuditForm |
13 | 15 | from tally_ho.apps.tally.forms.barcode_form import BarcodeForm |
@@ -431,41 +433,53 @@ def get(self, request, *args, **kwargs): |
431 | 433 | 'approver' |
432 | 434 | ).order_by('-created_date') |
433 | 435 |
|
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' |
449 | 452 | ] |
450 | 453 |
|
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