|
|
@@ -162,6 +162,16 @@ def generate_hardness_out_in_values(lot_no):
|
|
162
|
162
|
|
|
163
|
163
|
return placeholders
|
|
164
|
164
|
|
|
|
165
|
+def clear_values(n, m):
|
|
|
166
|
+ placeholders = {}
|
|
|
167
|
+ for i in range(1, n + 1):
|
|
|
168
|
+ for j in range(1, m + 1):
|
|
|
169
|
+ placeholders[f'v{i}_{j}'] = 0
|
|
|
170
|
+ return placeholders
|
|
|
171
|
+
|
|
|
172
|
+# # Example usage:
|
|
|
173
|
+# placeholders_dict = clear_values(6, 3)
|
|
|
174
|
+# print(placeholders_dict)
|
|
165
|
175
|
def generate_dimension_values(lot_no):
|
|
166
|
176
|
"""
|
|
167
|
177
|
Fetch dimension records from manualSize and DataMs models
|
|
|
@@ -176,10 +186,11 @@ def generate_dimension_values(lot_no):
|
|
176
|
186
|
|
|
177
|
187
|
# Prepare placeholders
|
|
178
|
188
|
|
|
179
|
|
- placeholders = {}
|
|
180
|
|
- for i in range(1,7):
|
|
181
|
|
- for j in range(1,4):
|
|
182
|
|
- placeholders[f'v{i}_{j}'] = 0
|
|
|
189
|
+ # placeholders = {}
|
|
|
190
|
+ placeholders = clear_values(7,4)
|
|
|
191
|
+ # for i in range(1,7):
|
|
|
192
|
+ # for j in range(1,4):
|
|
|
193
|
+ # placeholders[f'v{i}_{j}'] = 0
|
|
183
|
194
|
|
|
184
|
195
|
pprint(placeholders)
|
|
185
|
196
|
pprint(manual_size_records)
|
|
|
@@ -218,6 +229,118 @@ def generate_dimension_values(lot_no):
|
|
218
|
229
|
hide_con(placeholders, "v4_2", "24:28")
|
|
219
|
230
|
return placeholders
|
|
220
|
231
|
|
|
|
232
|
+def is_ok(instance):
|
|
|
233
|
+ fields_and_values = {}
|
|
|
234
|
+ for field in instance._meta.get_fields():
|
|
|
235
|
+ field_name = field.name
|
|
|
236
|
+ if field_name.endswith('ok'):
|
|
|
237
|
+ v = getattr(instance, field_name)
|
|
|
238
|
+ if v is not None and v != "OK":
|
|
|
239
|
+ return False
|
|
|
240
|
+ return True
|
|
|
241
|
+
|
|
|
242
|
+def generate_dimension_app_values(lot_no):
|
|
|
243
|
+ """
|
|
|
244
|
+ Fetch dimension records from manualSize and DataMs models
|
|
|
245
|
+ and generate placeholder values for Standard, Actual, and Judgement.
|
|
|
246
|
+ Supports two row_no entries per lot.
|
|
|
247
|
+ """
|
|
|
248
|
+ # Fetch standard values from manualSize (limit to 2 rows)
|
|
|
249
|
+ manual_size_records = Manualsize.objects.filter(lotno=lot_no)
|
|
|
250
|
+
|
|
|
251
|
+ # Fetch actual and judgement values from DataMs ordered by row_no (limit to 2 rows)
|
|
|
252
|
+ data_ms_records = DataMs.objects.filter(lot_no=lot_no).order_by('row_no')[:2]
|
|
|
253
|
+
|
|
|
254
|
+ # Prepare placeholders
|
|
|
255
|
+
|
|
|
256
|
+ # placeholders = {}
|
|
|
257
|
+ placeholders = clear_values(8,3)
|
|
|
258
|
+ # for i in range(1,7):
|
|
|
259
|
+ # for j in range(1,4):
|
|
|
260
|
+ # placeholders[f'v{i}_{j}'] = 0
|
|
|
261
|
+
|
|
|
262
|
+ pprint(placeholders)
|
|
|
263
|
+ pprint(manual_size_records)
|
|
|
264
|
+ for m in manual_size_records:
|
|
|
265
|
+ if m.size_name == "D":
|
|
|
266
|
+ placeholders['v1_1'] = placeholders['v5_1'] = f'{m.std} +{m.tolup} {m.tolun}'
|
|
|
267
|
+ if m.size_name == "T":
|
|
|
268
|
+ placeholders['v2_1'] = placeholders['v6_1'] = f'{m.std} +{m.tolup} {m.tolun}'
|
|
|
269
|
+ if m.size_name == "H":
|
|
|
270
|
+ placeholders['v3_1'] = placeholders['v7_1'] = f'{m.std} +{m.tolup} {m.tolun}'
|
|
|
271
|
+
|
|
|
272
|
+
|
|
|
273
|
+
|
|
|
274
|
+ # Ensure that we map each manualSize entry to a corresponding DataMs entry
|
|
|
275
|
+ for r in data_ms_records:
|
|
|
276
|
+ if r.row_no == 1:
|
|
|
277
|
+ placeholders[f'v1_2'] = r.dsize
|
|
|
278
|
+ placeholders[f'v1_3'] = r.dsizeok
|
|
|
279
|
+
|
|
|
280
|
+ placeholders[f'v2_2'] = r.tsize
|
|
|
281
|
+ placeholders[f'v2_3'] = r.tsizeok
|
|
|
282
|
+
|
|
|
283
|
+ placeholders[f'v3_2'] = r.hsize
|
|
|
284
|
+ placeholders[f'v3_3'] = r.hsizeok
|
|
|
285
|
+
|
|
|
286
|
+ if is_ok(r):
|
|
|
287
|
+ placeholders[f'v4_1'] = 'OK'
|
|
|
288
|
+ placeholders[f'v4_2'] = 'OK'
|
|
|
289
|
+ else:
|
|
|
290
|
+ placeholders[f'v4_1'] = 'NG'
|
|
|
291
|
+ placeholders[f'v4_2'] = 'OK'
|
|
|
292
|
+
|
|
|
293
|
+ if r.row_no == 2:
|
|
|
294
|
+ placeholders[f'v5_2'] = r.dsize
|
|
|
295
|
+ placeholders[f'v5_3'] = r.dsizeok
|
|
|
296
|
+
|
|
|
297
|
+ placeholders[f'v6_2'] = r.tsize
|
|
|
298
|
+ placeholders[f'v6_3'] = r.tsizeok
|
|
|
299
|
+
|
|
|
300
|
+ placeholders[f'v7_2'] = r.hsize
|
|
|
301
|
+ placeholders[f'v7_3'] = r.hsizeok
|
|
|
302
|
+
|
|
|
303
|
+ if is_ok(r):
|
|
|
304
|
+ placeholders[f'v8_1'] = 'OK'
|
|
|
305
|
+ placeholders[f'v8_2'] = 'OK'
|
|
|
306
|
+ else:
|
|
|
307
|
+ placeholders[f'v8_1'] = 'NG'
|
|
|
308
|
+ placeholders[f'v8_2'] = 'NG'
|
|
|
309
|
+
|
|
|
310
|
+ hide_con(placeholders, "v5_1", "26:32")
|
|
|
311
|
+ return placeholders
|
|
|
312
|
+
|
|
|
313
|
+def generate_centering_values(lot_no):
|
|
|
314
|
+ """
|
|
|
315
|
+ Fetch dimension records from manualSize and DataMs models
|
|
|
316
|
+ and generate placeholder values for Standard, Actual, and Judgement.
|
|
|
317
|
+ Supports two row_no entries per lot.
|
|
|
318
|
+ """
|
|
|
319
|
+ # Fetch standard values from manualSize (limit to 2 rows)
|
|
|
320
|
+ manual_size_records = Manualsize.objects.filter(lotno=lot_no)
|
|
|
321
|
+
|
|
|
322
|
+ # Fetch actual and judgement values from DataMs ordered by row_no (limit to 2 rows)
|
|
|
323
|
+ data_ms_records = DataMs.objects.filter(lot_no=lot_no).order_by('row_no')[:2]
|
|
|
324
|
+
|
|
|
325
|
+ # Prepare placeholders
|
|
|
326
|
+
|
|
|
327
|
+ # placeholders = {}
|
|
|
328
|
+ placeholders = clear_values(10,3)
|
|
|
329
|
+ # for i in range(1,7):
|
|
|
330
|
+ # for j in range(1,4):
|
|
|
331
|
+ # placeholders[f'v{i}_{j}'] = 0
|
|
|
332
|
+
|
|
|
333
|
+ pprint(placeholders)
|
|
|
334
|
+ pprint(manual_size_records)
|
|
|
335
|
+
|
|
|
336
|
+
|
|
|
337
|
+ # Ensure that we map each manualSize entry to a corresponding DataMs entry
|
|
|
338
|
+ for i,r in enumerate(data_ms_records, start=1):
|
|
|
339
|
+ placeholders[f'v{i}_2'] = r.censize
|
|
|
340
|
+ placeholders[f'v{i}_3'] = r.censizeok
|
|
|
341
|
+
|
|
|
342
|
+ return placeholders
|
|
|
343
|
+
|
|
221
|
344
|
def merge_sheet_data_with_data(sheet_data, data):
|
|
222
|
345
|
"""
|
|
223
|
346
|
Merge `sheet_data` with `data`.
|
|
|
@@ -256,6 +379,10 @@ def create_coi_file(lot_no, sheets, user, md):
|
|
256
|
379
|
sheet_data[sheet_name] = generate_hardness_out_in_values(lot_no)
|
|
257
|
380
|
case 'dimension':
|
|
258
|
381
|
sheet_data[sheet_name] = generate_dimension_values(lot_no)
|
|
|
382
|
+ case 'dimension_app':
|
|
|
383
|
+ sheet_data[sheet_name] = generate_dimension_app_values(lot_no)
|
|
|
384
|
+ case 'centering':
|
|
|
385
|
+ sheet_data[sheet_name] = generate_centering_values(lot_no)
|
|
259
|
386
|
|
|
260
|
387
|
converted_data = convert_sheet_data(sheet_data)
|
|
261
|
388
|
|
|
|
@@ -276,11 +403,12 @@ def create_coi_file(lot_no, sheets, user, md):
|
|
276
|
403
|
spec = ""
|
|
277
|
404
|
|
|
278
|
405
|
data = {
|
|
|
406
|
+ "code": first_result.PRO1,
|
|
279
|
407
|
"customer": first_result.PRO1C,
|
|
280
|
408
|
"inspect_date": "2025-01-15",
|
|
281
|
409
|
"lot_no": lot_no,
|
|
282
|
410
|
"size": size_str,
|
|
283
|
|
- "pcs": pcs,
|
|
|
411
|
+ "lot_size": pcs,
|
|
284
|
412
|
"spec": spec,
|
|
285
|
413
|
# "hardness_out.acc": True, # Hide rows 24 to 28 if the prefix is "0"
|
|
286
|
414
|
# "hardness_out.spe_acc": False, # Hide rows 24 to 28 if the prefix is "0"
|