Нема описа

views.py 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. from django.shortcuts import render, redirect, get_object_or_404
  2. from django.core.paginator import Paginator
  3. from django.contrib import messages
  4. from core.models import Report
  5. from core.forms import ReportForm
  6. from core.utils import ConfigurableCRUDView, queryFromMaster
  7. from .filters import ReportFilter
  8. from .forms import ExportOptionsForm
  9. from pprint import pprint
  10. from .gen_report import gen_xlsx
  11. from django.core.files.base import File
  12. from pathlib import Path
  13. def index(request):
  14. reports = Report.objects.all()
  15. report_filter = ReportFilter(request.GET, queryset=reports)
  16. # Paginate the filtered queryset
  17. paginator = Paginator(report_filter.qs, 10) # Show 10 reports per page
  18. page_number = request.GET.get('page')
  19. page_obj = paginator.get_page(page_number)
  20. context = {
  21. 'filter': report_filter,
  22. 'page_obj': page_obj,
  23. }
  24. return render(request, 'report/index.html', context)
  25. def report_create_view(request):
  26. if request.method == "POST":
  27. form = ReportForm(request.POST)
  28. if form.is_valid():
  29. form.save()
  30. messages.success(request, "Report created successfully!")
  31. return redirect("report:report_index") # Adjust with your report list view name
  32. else:
  33. form = ReportForm()
  34. return render(request, "report/create.html", {"form": form})
  35. class ReportCRUDView(ConfigurableCRUDView):
  36. model = Report
  37. list_template_name = 'legacy/datacrud_list.html'
  38. detail_template_name = 'legacy/datacrud_detail.html'
  39. form_template_name = 'report/report_form.html'
  40. confirm_delete_template_name = 'legacy/datacrud_confirm_delete.html'
  41. filterset_class = ReportFilter
  42. page_title = "Reports"
  43. # URL name mappings
  44. list_url_name = 'report:report-list'
  45. create_url_name = 'report:report-create'
  46. update_url_name = 'report:report-update'
  47. delete_url_name = 'report:report-delete'
  48. config_fields = ["name", "file", "created_by", "created_at"]
  49. config_field_orders = ["id", "name", "created_by"]
  50. # config_readonly_fields = ["lot_no"]
  51. # config_edit_fields = ["lot_no", "code"]
  52. ordering = ["-created_at", "-id",]
  53. def coi_view(request):
  54. pprint(f"xxxx method = xxx {request.method}")
  55. if request.method == "POST":
  56. pprint(request.POST)
  57. if 'export' in request.POST:
  58. data = {
  59. "customer": "Tum Coder",
  60. "inspect_date": "2025-01-15",
  61. "lot_no": "12345",
  62. "staff_name": "Tum 8888",
  63. "man_name": "Tum 999",
  64. "size": "Large",
  65. "pcs": "10 pcs",
  66. "spec": "Spec-A",
  67. "hardness.d1_act": "10",
  68. "hardness.d2_act": "0[24:28]", # Hide rows 24 to 28 if the prefix is "0"
  69. "hardness.acc": True, # Hide rows 24 to 28 if the prefix is "0"
  70. "hardness.spe_acc": False, # Hide rows 24 to 28 if the prefix is "0"
  71. "dimension_app.d1_act": "33",
  72. "dimension_app.d2_act": "0[26:32]", # Hide rows 24 to 28 if the prefix is "0"
  73. "dimension_app.acc": True, # Hide rows 24 to 28 if the prefix is "0"
  74. "dimension_app.spe_acc": True, # Hide rows 24 to 28 if the prefix is "0"
  75. }
  76. output_file = gen_xlsx(
  77. template_file="/app/report/coi_templates.xlsx",
  78. selected_sheets=["hardness", "dimension_app"], # Replace with your actual sheet names
  79. prefix_filename="/app/media/coi",
  80. data=data
  81. )
  82. report = Report.objects.create(
  83. name=request.POST.get('lot_no','Untitled'),
  84. created_by=request.user,
  85. file=None # Leave this as None or assign a file if required
  86. )
  87. output_file_path = Path(output_file) # Convert to a Path object for convenience
  88. with open(output_file_path, "rb") as f:
  89. report.file.save(output_file_path.name, File(f), save=True)
  90. pprint(f"outputfile = {output_file}")
  91. if 'search_lot' in request.POST:
  92. lot_no = request.POST.get('lot_no', None)
  93. if lot_no:
  94. results = queryFromMaster(lot_no)
  95. first_result = results[0] if results else None
  96. try:
  97. pcs = int(first_result.PRO5) - int(first_result.PRO27)
  98. except:
  99. pcs = 0
  100. size_str = f"{first_result.PRO10}x{first_result.PRO11}x{first_result.PRO12}";
  101. spec = f"{first_result.PRO13} {first_result.PRO14} {first_result.PRO15} {first_result.PRO16} {first_result.PRO17} {first_result.PRO18}"
  102. return render(request, 'report/coi.html', {'result': first_result,
  103. 'pcs':pcs,
  104. 'size_str': size_str,
  105. 'spec': spec})
  106. exports = request.POST.getlist("exports") # Retrieve the list of selected values
  107. pprint(f"Selected Export Options: {exports}")
  108. messages.success(request, "Request Sent")
  109. return redirect(request.path_info)
  110. return render(request, 'report/coi.html')