|
|
@@ -32,6 +32,26 @@ from django.db.models import Q, Func, Value, F
|
|
32
|
32
|
from django.views.generic import (
|
|
33
|
33
|
ListView,)
|
|
34
|
34
|
|
|
|
35
|
+COI_TEMPLATE_FILES = {
|
|
|
36
|
+ "japanese": "coi_templates.xlsx",
|
|
|
37
|
+ "asean": "coi_templates_en.xlsx",
|
|
|
38
|
+}
|
|
|
39
|
+
|
|
|
40
|
+
|
|
|
41
|
+def get_coi_template_file(template_name):
|
|
|
42
|
+ template_key = (template_name or "japanese").lower()
|
|
|
43
|
+ filename = COI_TEMPLATE_FILES.get(template_key, COI_TEMPLATE_FILES["japanese"])
|
|
|
44
|
+ return f"{settings.BASE_DIR}/report/{filename}"
|
|
|
45
|
+
|
|
|
46
|
+
|
|
|
47
|
+def get_customer_template_mapping(master_row):
|
|
|
48
|
+ if not master_row or not master_row.PRO1C:
|
|
|
49
|
+ return None
|
|
|
50
|
+ return CustomerTemplateMapping.objects.filter(
|
|
|
51
|
+ customer_name__icontains=master_row.PRO1C
|
|
|
52
|
+ ).first()
|
|
|
53
|
+
|
|
|
54
|
+
|
|
35
|
55
|
def index(request):
|
|
36
|
56
|
reports = Report.objects.all()
|
|
37
|
57
|
report_filter = ReportFilter(request.GET, queryset=reports)
|
|
|
@@ -975,7 +995,7 @@ def generate_centering_values(lot_no, code):
|
|
975
|
995
|
# Prepare placeholders
|
|
976
|
996
|
|
|
977
|
997
|
# placeholders = {}
|
|
978
|
|
- placeholders = clear_values(10,3)
|
|
|
998
|
+ placeholders = clear_values(20, 3)
|
|
979
|
999
|
# for i in range(1,7):
|
|
980
|
1000
|
# for j in range(1,4):
|
|
981
|
1001
|
# placeholders[f'v{i}_{j}'] = 0
|
|
|
@@ -986,12 +1006,17 @@ def generate_centering_values(lot_no, code):
|
|
986
|
1006
|
|
|
987
|
1007
|
# Ensure that we map each manualSize entry to a corresponding DataMs entry
|
|
988
|
1008
|
inspect_date = None
|
|
|
1009
|
+ record_count = 0
|
|
989
|
1010
|
for i,r in enumerate(data_ms_records, start=1):
|
|
|
1011
|
+ record_count = i
|
|
990
|
1012
|
if i == 1:
|
|
991
|
1013
|
inspect_date = r.created_at
|
|
992
|
1014
|
placeholders[f'v{i}_2'] = r.censize
|
|
993
|
1015
|
placeholders[f'v{i}_3'] = r.censizeok
|
|
994
|
1016
|
|
|
|
1017
|
+ if record_count <= 10:
|
|
|
1018
|
+ hide_con(placeholders, "v11_2", "47:93")
|
|
|
1019
|
+
|
|
995
|
1020
|
placeholders['inspect_date'] = inspect_date.strftime('%Y/%m/%d') if inspect_date else "-"
|
|
996
|
1021
|
return placeholders
|
|
997
|
1022
|
|
|
|
@@ -1220,8 +1245,9 @@ def create_coi_file(lot_no, sheets, user, md):
|
|
1220
|
1245
|
pprint(f"---- merged_data ---")
|
|
1221
|
1246
|
pprint(merged_data)
|
|
1222
|
1247
|
|
|
|
1248
|
+ template_file = get_coi_template_file(md.get("export_template"))
|
|
1223
|
1249
|
output_file = gen_xlsx(
|
|
1224
|
|
- template_file=f"{settings.BASE_DIR}/report/coi_templates.xlsx",
|
|
|
1250
|
+ template_file=template_file,
|
|
1225
|
1251
|
selected_sheets=sheets, # Replace with your actual sheet names
|
|
1226
|
1252
|
prefix_filename=f"{settings.BASE_DIR}/media/coi_{lot_no}_",
|
|
1227
|
1253
|
data=merged_data
|
|
|
@@ -1274,11 +1300,13 @@ def filter_by_lot_no(lot_no):
|
|
1274
|
1300
|
def coi_view(request):
|
|
1275
|
1301
|
pprint(f"xxxx method = xxx {request.method}")
|
|
1276
|
1302
|
users = User.objects.all()
|
|
|
1303
|
+ export_template = "japanese"
|
|
1277
|
1304
|
|
|
1278
|
1305
|
if request.method == "POST":
|
|
1279
|
1306
|
pprint(request.POST)
|
|
1280
|
1307
|
exports = request.POST.getlist("exports") # Retrieve the list of selected values
|
|
1281
|
1308
|
pprint(f"Selected Export Options: {exports}")
|
|
|
1309
|
+ export_template = request.POST.get("export_template", "japanese")
|
|
1282
|
1310
|
|
|
1283
|
1311
|
if 'export' in request.POST:
|
|
1284
|
1312
|
|
|
|
@@ -1301,7 +1329,7 @@ def coi_view(request):
|
|
1301
|
1329
|
"dimension_app.spe_acc": True, # Hide rows 24 to 28 if the prefix is "0"
|
|
1302
|
1330
|
}
|
|
1303
|
1331
|
output_file = gen_xlsx(
|
|
1304
|
|
- template_file="/app/report/coi_templates.xlsx",
|
|
|
1332
|
+ template_file=get_coi_template_file(export_template),
|
|
1305
|
1333
|
selected_sheets=exports, # Replace with your actual sheet names
|
|
1306
|
1334
|
prefix_filename="/app/media/coi",
|
|
1307
|
1335
|
data=data
|
|
|
@@ -1332,11 +1360,9 @@ def coi_view(request):
|
|
1332
|
1360
|
if first_result:
|
|
1333
|
1361
|
size_str = f"{first_result.PRO10}x{first_result.PRO11}x{first_result.PRO12}";
|
|
1334
|
1362
|
spec = f"{first_result.PRO13} {first_result.PRO14} {first_result.PRO15} {first_result.PRO16} {first_result.PRO17} {first_result.PRO18}"
|
|
1335
|
|
- #first_result.PRO1C = "TUM"
|
|
1336
|
|
- #selected_templates = CustomerTemplateMapping.objects.filter(customer_name=first_result.PRO1C).first().template_names
|
|
1337
|
|
- # first_result.PRO1C = 'OSAKA SEIMITSU'
|
|
1338
|
|
- mapping = CustomerTemplateMapping.objects.filter(customer_name__icontains=first_result.PRO1C).first()
|
|
|
1363
|
+ mapping = get_customer_template_mapping(first_result)
|
|
1339
|
1364
|
selected_templates = mapping.template_names if mapping else []
|
|
|
1365
|
+ export_template = mapping.export_template if mapping else export_template
|
|
1340
|
1366
|
|
|
1341
|
1367
|
mgt_code = first_result.PRO1 if first_result else "-"
|
|
1342
|
1368
|
mks_code = convert_mgt_to_mks(mgt_code)
|
|
|
@@ -1367,11 +1393,13 @@ def coi_view(request):
|
|
1367
|
1393
|
'size_str': size_str,
|
|
1368
|
1394
|
'lot_no': lot_no,
|
|
1369
|
1395
|
'spec': spec, 'users': users, 'SHEET_NAMES': SHEET_NAMES,
|
|
1370
|
|
- 'results': results, 'fields': fields, 'selected_templates': selected_templates, 'code': code})
|
|
|
1396
|
+ 'results': results, 'fields': fields, 'selected_templates': selected_templates, 'code': code,
|
|
|
1397
|
+ 'export_template': export_template})
|
|
1371
|
1398
|
|
|
1372
|
1399
|
messages.success(request, "Request Sent")
|
|
1373
|
1400
|
return redirect(request.path_info)
|
|
1374
|
|
- return render(request, 'report/coi.html', {'SHEET_NAMES': SHEET_NAMES, 'users': users})
|
|
|
1401
|
+ return render(request, 'report/coi.html', {'SHEET_NAMES': SHEET_NAMES, 'users': users,
|
|
|
1402
|
+ 'export_template': export_template})
|
|
1375
|
1403
|
|
|
1376
|
1404
|
|
|
1377
|
1405
|
@csrf_exempt # Disable CSRF for API requests (ensure this is secure in production)
|
|
|
@@ -1385,14 +1413,21 @@ def gen_report_view(request):
|
|
1385
|
1413
|
exports = data.get("exports")
|
|
1386
|
1414
|
qa1 = data.get('qa1')
|
|
1387
|
1415
|
qa2 = data.get('qa2')
|
|
|
1416
|
+ export_template = data.get("export_template")
|
|
1388
|
1417
|
print(f"data = {data}")
|
|
1389
|
1418
|
|
|
1390
|
1419
|
if not lot_no:
|
|
1391
|
1420
|
return HttpResponseBadRequest("Missing 'lot_no' in request data")
|
|
1392
|
1421
|
|
|
|
1422
|
+ if not export_template:
|
|
|
1423
|
+ results = queryFromMaster(lot_no)
|
|
|
1424
|
+ first_result = results[0] if results else None
|
|
|
1425
|
+ mapping = get_customer_template_mapping(first_result)
|
|
|
1426
|
+ export_template = mapping.export_template if mapping else "japanese"
|
|
|
1427
|
+
|
|
1393
|
1428
|
# Call the `create_coi_file` function with the provided lot_no
|
|
1394
|
1429
|
report = create_coi_file(lot_no, exports, request.user, {'qa1': qa1, 'qa2': qa2, \
|
|
1395
|
|
- 'acceptStatus': data.get('acceptStatus')})
|
|
|
1430
|
+ 'acceptStatus': data.get('acceptStatus'), 'export_template': export_template})
|
|
1396
|
1431
|
|
|
1397
|
1432
|
# Return a success response with the report details
|
|
1398
|
1433
|
return JsonResponse({
|
|
|
@@ -1426,8 +1461,8 @@ class CustomerTemplateCRUDView(ConfigurableCRUDView):
|
|
1426
|
1461
|
create_url_name = 'report:customer_templates-create'
|
|
1427
|
1462
|
update_url_name = 'report:customer_templates-update'
|
|
1428
|
1463
|
delete_url_name = 'report:customer_templates-delete'
|
|
1429
|
|
- config_fields = ["id", "customer_name", "template_names", "created_at"]
|
|
1430
|
|
- config_field_orders = ["id", "customer_name", "template_names", "created_at", "created_by"]
|
|
|
1464
|
+ config_fields = ["id", "customer_name", "export_template", "template_names", "created_at"]
|
|
|
1465
|
+ config_field_orders = ["id", "customer_name", "export_template", "template_names", "created_at", "created_by"]
|
|
1431
|
1466
|
# config_readonly_fields = ["lot_no"]
|
|
1432
|
1467
|
config_edit_fields = None
|
|
1433
|
1468
|
ordering = ["-created_at", "-id",]
|