tum 11 maanden geleden
bovenliggende
commit
6238f1e154
2 gewijzigde bestanden met toevoegingen van 133 en 5 verwijderingen
  1. BIN
      app/report/coi_templates.xlsx
  2. 133 5
      app/report/views.py

BIN
app/report/coi_templates.xlsx


+ 133 - 5
app/report/views.py

@@ -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"