浏览代码

both side

tum 11 月之前
父节点
当前提交
88f9751339
共有 2 个文件被更改,包括 282 次插入19 次删除
  1. 二进制
      app/report/coi_templates.xlsx
  2. 282 19
      app/report/views.py

二进制
app/report/coi_templates.xlsx


+ 282 - 19
app/report/views.py

104
     else:
104
     else:
105
         placeholders[mark_value] = f"0[{hide_rows}]"
105
         placeholders[mark_value] = f"0[{hide_rows}]"
106
 
106
 
107
+def clear_values(n, m):
108
+    placeholders = {}
109
+    for i in range(1, n + 1):
110
+        for j in range(1, m + 1):
111
+            placeholders[f'v{i}_{j}'] = " "
112
+    return placeholders
113
+
107
 def generate_hardness_out_values(lot_no):
114
 def generate_hardness_out_values(lot_no):
108
     """
115
     """
109
     Generate a dictionary of placeholder values for a given lot_no.
116
     Generate a dictionary of placeholder values for a given lot_no.
112
     :return: A dictionary with placeholders (e.g., v1_1, v1_2, ...) as keys and their respective values.
119
     :return: A dictionary with placeholders (e.g., v1_1, v1_2, ...) as keys and their respective values.
113
     """
120
     """
114
     # Query the Data model for records matching the given lot_no
121
     # Query the Data model for records matching the given lot_no
115
-    records = Data.objects.filter(lot_no=lot_no).order_by('row_no')
122
+    # records = Data.objects.filter(lot_no=lot_no).order_by('row_no')
123
+    data_h1 = list(Data.objects.filter(lot_no=lot_no).order_by('row_no'))
124
+    data_h2 = list(DataRl.objects.filter(lot_no=lot_no).order_by('row_no'))
125
+
126
+    records = list(chain(data_h1, data_h2))
127
+    
116
     print(f"records {lot_no} = {records.values()}")
128
     print(f"records {lot_no} = {records.values()}")
117
     # Initialize an empty dictionary to store placeholder values
129
     # Initialize an empty dictionary to store placeholder values
118
-    placeholders = {}
130
+    placeholders = clear_values(2,5)
119
 
131
 
120
     # Iterate over the records to populate placeholder values
132
     # Iterate over the records to populate placeholder values
121
     for record_idx, record in enumerate(records, start=1):
133
     for record_idx, record in enumerate(records, start=1):
129
 
141
 
130
 def generate_hardness_out_in_values(lot_no):
142
 def generate_hardness_out_in_values(lot_no):
131
     # Fetch records from the Data model
143
     # Fetch records from the Data model
132
-    records = Data.objects.filter(lot_no=lot_no).order_by('row_no')
144
+    # records = Data.objects.filter(lot_no=lot_no).order_by('row_no')
145
+    data_h1 = list(Data.objects.filter(lot_no=lot_no).order_by('row_no'))
146
+    data_h2 = list(DataRl.objects.filter(lot_no=lot_no).order_by('row_no'))
147
+
148
+    records = list(chain(data_h1, data_h2))
149
+
133
     out_data = []
150
     out_data = []
134
     in_data = []
151
     in_data = []
135
 
152
 
141
             in_data.append(record)
158
             in_data.append(record)
142
 
159
 
143
     # Prepare placeholders
160
     # Prepare placeholders
144
-    placeholders = {}
161
+    # placeholders = {}
162
+    placeholders = clear_values(4,5)
145
     for idx, record in enumerate(out_data, start=1):
163
     for idx, record in enumerate(out_data, start=1):
146
         placeholders[f'v{idx}_1'] = record.p1
164
         placeholders[f'v{idx}_1'] = record.p1
147
         placeholders[f'v{idx}_2'] = record.p2
165
         placeholders[f'v{idx}_2'] = record.p2
165
     
183
     
166
     return placeholders
184
     return placeholders
167
 
185
 
168
-def clear_values(n, m):
169
-    placeholders = {}
170
-    for i in range(1, n + 1):
171
-        for j in range(1, m + 1):
172
-            placeholders[f'v{i}_{j}'] = " "
186
+def generate_hardness_both_size_values(lot_no, ms):
187
+    # Fetch records from the Data model
188
+    # records = Data.objects.filter(lot_no=lot_no).order_by('row_no')
189
+    data_h1 = list(Data.objects.filter(lot_no=lot_no).order_by('row_no', 'sub_order'))
190
+    data_h2 = list(DataRl.objects.filter(lot_no=lot_no).order_by('row_no', 'sub_order'))
191
+
192
+    records = list(chain(data_h1, data_h2))
193
+
194
+    out_data = []
195
+    in_data = []
196
+
197
+    placeholders = clear_values(20,5)
198
+    # Separate OUT and IN data
199
+    for idx, record in enumerate(records, start=0):
200
+        if record.sub_order == 1:
201
+            for i,v in enumerate(["p1", "p2", "p3", "avg", "rgrade"],start=1):
202
+                placeholders[f"v{idx*2+1}_{i}"] = getattr(record,v)
203
+        if record.sub_order == 2:
204
+            for i,v in enumerate(["p1", "p2", "p3", "avg", "rgrade"],start=1):
205
+                placeholders[f"v{idx*2+2}_{i}"] = getattr(record,v)
206
+    # Prepare placeholders
207
+    # placeholders = {}
173
     return placeholders
208
     return placeholders
174
 
209
 
210
+
175
 # # Example usage:
211
 # # Example usage:
176
 # placeholders_dict = clear_values(6, 3)
212
 # placeholders_dict = clear_values(6, 3)
177
 # print(placeholders_dict)
213
 # print(placeholders_dict)
185
     manual_size_records = Manualsize.objects.filter(lotno=lot_no)
221
     manual_size_records = Manualsize.objects.filter(lotno=lot_no)
186
 
222
 
187
     # Fetch actual and judgement values from DataMs ordered by row_no (limit to 2 rows)
223
     # Fetch actual and judgement values from DataMs ordered by row_no (limit to 2 rows)
188
-    data_ms_records = DataMs.objects.filter(lot_no=lot_no).order_by('row_no')[:2]
224
+    data_ms_records = DataMs.objects.filter(lot_no=lot_no).order_by('row_no')
189
 
225
 
190
     # Prepare placeholders
226
     # Prepare placeholders
191
 
227
 
229
             placeholders[f'v6_2'] = r.hsize
265
             placeholders[f'v6_2'] = r.hsize
230
             placeholders[f'v6_3'] = r.hsizeok
266
             placeholders[f'v6_3'] = r.hsizeok
231
 
267
 
232
-    hide_con(placeholders, "v4_2", "24:28")
268
+    hide_con(placeholders, "v4_1", "24:28")
233
     return placeholders
269
     return placeholders
234
 
270
 
235
 def is_ok(instance):
271
 def is_ok(instance):
252
     manual_size_records = Manualsize.objects.filter(lotno=lot_no)
288
     manual_size_records = Manualsize.objects.filter(lotno=lot_no)
253
 
289
 
254
     # Fetch actual and judgement values from DataMs ordered by row_no (limit to 2 rows)
290
     # Fetch actual and judgement values from DataMs ordered by row_no (limit to 2 rows)
255
-    data_ms_records = DataMs.objects.filter(lot_no=lot_no).order_by('row_no')[:2]
291
+    data_ms_records = DataMs.objects.filter(lot_no=lot_no).order_by('row_no')
256
 
292
 
257
     # Prepare placeholders
293
     # Prepare placeholders
258
 
294
 
313
     hide_con(placeholders, "v5_1", "26:32")
349
     hide_con(placeholders, "v5_1", "26:32")
314
     return placeholders
350
     return placeholders
315
 
351
 
352
+def generate_dimension_bal_weight_values(lot_no, ms):
353
+    """
354
+    Fetch dimension records from manualSize and DataMs models
355
+    and generate placeholder values for Standard, Actual, and Judgement.
356
+    Supports two row_no entries per lot.
357
+    """
358
+    # Fetch standard values from manualSize (limit to 2 rows)
359
+    manual_size_records = Manualsize.objects.filter(lotno=lot_no)
360
+
361
+    # Fetch actual and judgement values from DataMs ordered by row_no (limit to 2 rows)
362
+    data_ms_records = DataMs.objects.filter(lot_no=lot_no).order_by('row_no')
363
+
364
+    data_wb = DataWb.objects.filter(lot_no=lot_no).order_by('row_no')
365
+    
366
+    data_h1 = list(Data.objects.filter(lot_no=lot_no).order_by('row_no'))
367
+    data_h2 = list(DataRl.objects.filter(lot_no=lot_no).order_by('row_no'))
368
+
369
+    data_ho = list(chain(data_h1, data_h2))
370
+    # Prepare placeholders
371
+
372
+    # placeholders = {}
373
+    placeholders = clear_values(10,3)
374
+    # for i in range(1,7):
375
+        # for j in range(1,4):
376
+            # placeholders[f'v{i}_{j}'] = 0
377
+    
378
+    pprint(placeholders)
379
+    pprint(manual_size_records) 
380
+    
381
+    if ms:
382
+        w = ms.PRO6
383
+        placeholders['v4_1'] = placeholders['v9_1'] = w
384
+
385
+    for m in manual_size_records:
386
+        if m.size_name == "D":
387
+            placeholders['v1_1'] = placeholders['v6_1'] = f'D{m.std} +{m.tolup} {m.tolun}'
388
+        if m.size_name == "T":
389
+            placeholders['v2_1'] = placeholders['v7_1'] = f'T{m.std} +{m.tolup} {m.tolun}'
390
+        if m.size_name == "H":
391
+            placeholders['v3_1'] = placeholders['v8_1'] = f'H{m.std} +{m.tolup} {m.tolun}'
392
+
393
+
394
+
395
+    # Ensure that we map each manualSize entry to a corresponding DataMs entry
396
+    for r in data_ms_records:
397
+        if r.row_no == 1:
398
+            placeholders[f'v1_2'] = r.dsize
399
+            placeholders[f'v1_3'] = r.dsizeok
400
+            
401
+            placeholders[f'v2_2'] = r.tsize
402
+            placeholders[f'v2_3'] = r.tsizeok
403
+            
404
+            placeholders[f'v3_2'] = r.hsize
405
+            placeholders[f'v3_3'] = r.hsizeok
406
+
407
+            # if is_ok(r):
408
+                # placeholders[f'v4_1'] = 'OK'
409
+                # placeholders[f'v4_2'] = 'OK'
410
+            # else:
411
+                # placeholders[f'v4_1'] = 'NG'
412
+                # placeholders[f'v4_2'] = 'OK'
413
+        
414
+        if r.row_no == 2:
415
+            placeholders[f'v6_2'] = r.dsize
416
+            placeholders[f'v6_3'] = r.dsizeok
417
+            
418
+            placeholders[f'v7_2'] = r.tsize
419
+            placeholders[f'v7_3'] = r.tsizeok
420
+            
421
+            placeholders[f'v8_2'] = r.hsize
422
+            placeholders[f'v8_3'] = r.hsizeok
423
+
424
+            # if is_ok(r):
425
+                # placeholders[f'v8_1'] = 'OK'
426
+                # placeholders[f'v8_2'] = 'OK'
427
+            # else:
428
+                # placeholders[f'v8_1'] = 'NG'
429
+                # placeholders[f'v8_2'] = 'NG'
430
+
431
+    for r in data_wb:
432
+        if r.row_no == 1:
433
+            placeholders["v4_2"] = r.result
434
+            placeholders["v4_3"] = r.judgement
435
+            placeholders["v5_2"] = r.weight
436
+            placeholders["v5_3"] = r.judgement
437
+        if r.row_no == 2:
438
+            placeholders["v9_2"] = r.result
439
+            placeholders["v9_3"] = r.judgement
440
+            placeholders["v10_2"] = r.weight
441
+            placeholders["v10_3"] = r.judgement
442
+    # hide_con(placeholders, "v5_1", "26:32")
443
+    return placeholders
444
+
316
 def generate_dim_bal_app_hard_values(lot_no, first_result):
445
 def generate_dim_bal_app_hard_values(lot_no, first_result):
317
     """
446
     """
318
     Fetch dimension records from manualSize and DataMs models
447
     Fetch dimension records from manualSize and DataMs models
323
     manual_size_records = Manualsize.objects.filter(lotno=lot_no)
452
     manual_size_records = Manualsize.objects.filter(lotno=lot_no)
324
 
453
 
325
     # Fetch actual and judgement values from DataMs ordered by row_no (limit to 2 rows)
454
     # Fetch actual and judgement values from DataMs ordered by row_no (limit to 2 rows)
326
-    data_ms_records = DataMs.objects.filter(lot_no=lot_no).order_by('row_no')[:2]
327
-    data_wb = DataWb.objects.filter(lot_no=lot_no).order_by('row_no')[:2]
455
+    data_ms_records = DataMs.objects.filter(lot_no=lot_no).order_by('row_no')
456
+    data_wb = DataWb.objects.filter(lot_no=lot_no).order_by('row_no')
328
     
457
     
329
-    data_h1 = list(Data.objects.filter(lot_no=lot_no).order_by('row_no')[:2])
330
-    data_h2 = list(DataRl.objects.filter(lot_no=lot_no).order_by('row_no')[:2])
458
+    data_h1 = list(Data.objects.filter(lot_no=lot_no).order_by('row_no'))
459
+    data_h2 = list(DataRl.objects.filter(lot_no=lot_no).order_by('row_no'))
331
 
460
 
332
     data_ho = list(chain(data_h1, data_h2))
461
     data_ho = list(chain(data_h1, data_h2))
333
 
462
 
430
     # hide_con(placeholders, "v5_1", "26:32")
559
     # hide_con(placeholders, "v5_1", "26:32")
431
     return placeholders
560
     return placeholders
432
 
561
 
562
+def generate_dim_bal_app_rot_hard_values(lot_no, first_result):
563
+    """
564
+    Fetch dimension records from manualSize and DataMs models
565
+    and generate placeholder values for Standard, Actual, and Judgement.
566
+    Supports two row_no entries per lot.
567
+    """
568
+    # Fetch standard values from manualSize (limit to 2 rows)
569
+    manual_size_records = Manualsize.objects.filter(lotno=lot_no)
570
+
571
+    # Fetch actual and judgement values from DataMs ordered by row_no (limit to 2 rows)
572
+    data_ms_records = DataMs.objects.filter(lot_no=lot_no).order_by('row_no')
573
+    data_wb = DataWb.objects.filter(lot_no=lot_no).order_by('row_no')
574
+    
575
+    data_h1 = list(Data.objects.filter(lot_no=lot_no).order_by('row_no'))
576
+    data_h2 = list(DataRl.objects.filter(lot_no=lot_no).order_by('row_no'))
577
+
578
+    data_ho = list(chain(data_h1, data_h2))
579
+
580
+
581
+    rotates = RotateData.objects.filter(lot_no=lot_no).order_by('row_no')
582
+
583
+    if first_result:
584
+        out_limit = f"Out 外  ({first_result.MI18} - {first_result.MI19})"
585
+        in_limit = f"In 内 ({first_result.MI22} - {first_result.MI23})"
586
+        mid_limit = f"Middle   中  -"
587
+    else:
588
+        out_limit = f"Out 外"
589
+        in_limit = f"In 内"
590
+        mid_limit = f"Middle   中"
591
+    
592
+    
593
+
594
+    # Prepare placeholders
595
+
596
+    # placeholders = {}
597
+    placeholders = clear_values(18,5)
598
+    # for i in range(1,7):
599
+        # for j in range(1,4):
600
+            # placeholders[f'v{i}_{j}'] = 0
601
+    placeholders['v6_0'] = placeholders['v14_0'] = out_limit
602
+    placeholders['v7_0'] = placeholders['v15_0'] = mid_limit
603
+    placeholders['v18_0'] = placeholders['v16_0'] = in_limit
604
+
605
+    pprint(placeholders)
606
+    pprint(manual_size_records) 
607
+    if first_result:
608
+        w = first_result.PRO6
609
+        placeholders['v4_1'] = placeholders['v13_1'] = w
610
+
611
+    for m in manual_size_records:
612
+        if m.size_name == "D":
613
+            placeholders['v1_1'] = placeholders['v10_1'] = f'D{m.std} +{m.tolup} {m.tolun}'
614
+        if m.size_name == "T":
615
+            placeholders['v2_1'] = placeholders['v11_1'] = f'T{m.std} +{m.tolup} {m.tolun}'
616
+        if m.size_name == "H":
617
+            placeholders['v3_1'] = placeholders['v12_1'] = f'H{m.std} +{m.tolup} {m.tolun}'
618
+
619
+
620
+
621
+    # Ensure that we map each manualSize entry to a corresponding DataMs entry
622
+    for r in data_ms_records:
623
+        if r.row_no == 1:
624
+            placeholders[f'v1_2'] = r.dsize
625
+            placeholders[f'v1_3'] = r.dsizeok
626
+            
627
+            placeholders[f'v2_2'] = r.tsize
628
+            placeholders[f'v2_3'] = r.tsizeok
629
+            
630
+            placeholders[f'v3_2'] = r.hsize
631
+            placeholders[f'v3_3'] = r.hsizeok
632
+
633
+            # if is_ok(r):
634
+                # placeholders[f'v4_1'] = 'OK'
635
+                # placeholders[f'v4_2'] = 'OK'
636
+            # else:
637
+                # placeholders[f'v4_1'] = 'NG'
638
+                # placeholders[f'v4_2'] = 'OK'
639
+        
640
+        if r.row_no == 2:
641
+            placeholders[f'v10_2'] = r.dsize
642
+            placeholders[f'v10_3'] = r.dsizeok
643
+            
644
+            placeholders[f'v11_2'] = r.tsize
645
+            placeholders[f'v11_3'] = r.tsizeok
646
+            
647
+            placeholders[f'v12_2'] = r.hsize
648
+            placeholders[f'v12_3'] = r.hsizeok
649
+
650
+            # if is_ok(r):
651
+                # placeholders[f'v8_1'] = 'OK'
652
+                # placeholders[f'v8_2'] = 'OK'
653
+            # else:
654
+                # placeholders[f'v8_1'] = 'NG'
655
+                # placeholders[f'v8_2'] = 'NG'
656
+
657
+    for r in data_wb:
658
+        if r.row_no == 1:
659
+            placeholders["v4_2"] = r.weight
660
+            placeholders["v4_3"] = r.judgement
661
+        if r.row_no == 2:
662
+            placeholders["v13_2"] = r.weight
663
+            placeholders["v13_3"] = r.judgement
664
+
665
+    for r in data_ho:
666
+        if r.row_no == 1:
667
+            rmap = {'OUT': 7, 'MID': 8, 'IN': 9}
668
+            for index, v in enumerate(["p1", "p2", "p3", "avg", "rgrade"], start=1):
669
+                idx = rmap.get(r.r_type, None)
670
+                if idx:
671
+                    placeholders[f'v{idx}_{index}']  = getattr(r, v) 
672
+        if r.row_no == 2:
673
+            rmap = {'OUT': 16, 'MID': 17, 'IN': 18}
674
+            for index, v in enumerate(["p1", "p2", "p3", "avg", "rgrade"], start=1):
675
+                idx = rmap.get(r.r_type, None)
676
+                if idx:
677
+                    placeholders[f'v{idx}_{index}']  = getattr(r, v)
678
+
679
+    for r in rotates:
680
+        if r.row_no == 1:
681
+            placeholders["v6_1"] = r.speed_spec
682
+            placeholders["v6_2"] = r.speed_test
683
+            placeholders["v6_3"] = r.speedok
684
+        if r.row_no == 2:
685
+            placeholders["v15_1"] = r.speed_spec
686
+            placeholders["v15_2"] = r.speed_test
687
+            placeholders["v15_3"] = r.speedok
688
+
689
+    # hide_con(placeholders, "v5_1", "26:32")
690
+    return placeholders
691
+
433
 def generate_centering_values(lot_no):
692
 def generate_centering_values(lot_no):
434
     """
693
     """
435
     Fetch dimension records from manualSize and DataMs models
694
     Fetch dimension records from manualSize and DataMs models
440
     manual_size_records = Manualsize.objects.filter(lotno=lot_no)
699
     manual_size_records = Manualsize.objects.filter(lotno=lot_no)
441
 
700
 
442
     # Fetch actual and judgement values from DataMs ordered by row_no (limit to 2 rows)
701
     # Fetch actual and judgement values from DataMs ordered by row_no (limit to 2 rows)
443
-    data_ms_records = DataMs.objects.filter(lot_no=lot_no).order_by('row_no')[:2]
702
+    data_ms_records = DataMs.objects.filter(lot_no=lot_no).order_by('row_no')
444
 
703
 
445
     # Prepare placeholders
704
     # Prepare placeholders
446
 
705
 
537
                 sheet_data[sheet_name] = generate_hardness_out_values(lot_no)
796
                 sheet_data[sheet_name] = generate_hardness_out_values(lot_no)
538
             case 'hardness_out_in':
797
             case 'hardness_out_in':
539
                 sheet_data[sheet_name] = generate_hardness_out_in_values(lot_no)
798
                 sheet_data[sheet_name] = generate_hardness_out_in_values(lot_no)
799
+            case 'hardness_both_size':
800
+                sheet_data[sheet_name] = generate_hardness_both_size_values(lot_no, first_result)
540
             case 'dimension':
801
             case 'dimension':
541
                 sheet_data[sheet_name] = generate_dimension_values(lot_no)
802
                 sheet_data[sheet_name] = generate_dimension_values(lot_no)
542
             case 'dimension_app':
803
             case 'dimension_app':
543
                 sheet_data[sheet_name] = generate_dimension_app_values(lot_no)
804
                 sheet_data[sheet_name] = generate_dimension_app_values(lot_no)
544
-            case 'centering':
545
-                sheet_data[sheet_name] = generate_centering_values(lot_no)
805
+            case 'dimension_bal_weight':
806
+                sheet_data[sheet_name] = generate_dimension_bal_weight_values(lot_no, first_result)
546
             case 'centering':
807
             case 'centering':
547
                 sheet_data[sheet_name] = generate_centering_values(lot_no)
808
                 sheet_data[sheet_name] = generate_centering_values(lot_no)
548
             case 'thickness_8_point':
809
             case 'thickness_8_point':
549
                 sheet_data[sheet_name] = generate_t8_values(lot_no)
810
                 sheet_data[sheet_name] = generate_t8_values(lot_no)
550
             case 'dim_bal_app_hard':
811
             case 'dim_bal_app_hard':
551
                 sheet_data[sheet_name] = generate_dim_bal_app_hard_values(lot_no, first_result)
812
                 sheet_data[sheet_name] = generate_dim_bal_app_hard_values(lot_no, first_result)
813
+            case 'dim_bal_app_rot_hard':
814
+                sheet_data[sheet_name] = generate_dim_bal_app_rot_hard_values(lot_no, first_result)
552
     
815
     
553
     converted_data = convert_sheet_data(sheet_data)
816
     converted_data = convert_sheet_data(sheet_data)
554
 
817