buli
2022-05-14 ead4df22dca33a867279471821ca675f91dec760
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
public with sharing class SWOController {
 
    public SWO__c swo {get; set;}
 
    public String swoid {get; set;}
    public String accId {get; set;}
    public String conId {get; set;}
    public List<EmailInfo> mailList {get; set;}
    public String mailListStr {get{return JSON.serialize(mailList);} set;}// 20220512 PI改造 by zhj
    public List<String> awsDataIdList{get; set;}// 20220512 PI改造 by zhj
    public String awsDataIdStr{get{return JSON.serialize(awsDataIdList);} set;}// 20220512 PI改造 by zhj
 
    public String baseUrl {get; set;}
    public String type {get; set;}
    public String caseId {get; set;}
 
    public String name {get; set;}
 
    public List<Quotes_item__c> qiList {get; set;}
 
    public List<RepairPart__c> rpList {get; set;}
 
    public List<FileAddress__c> attachmentList {get; set;}
 
    public List<diagnosisInfo> diagnosisList {get; set;} 
 
    public String errorMessageInfo{get;set;}
 
    public String assignedUser{get;set;}
 
    public Integer lineCount{get; set;}
    //RepairPart 自开发页面保存返回接收
    public String repairId{get;set;}
    //RepairPart 自开发页面保存返回后查询更新
    public RepairPart__c repairPart{get;set;}
 
    private String SwoStatus;
    public String staticResource { get; private set; }// 20220313 PI改造 by Chen Yanan
    public String contactstaticResource { get; private set; }// 20220313 PI改造 by Chen Yanan
    public String staticResourceMailMerge { get; private set; }// 20220512 PI改造 by zhj
    public String contactAWSDataId { get; private set; }// 20220313 PI改造 by Chen Yanan
    public String contactName { get; private set; }// 20220522 PI改造 by zhj
    public String swoawsDataId{set;get;}// 20220313 PI改造 by Chen Yanan
    public Boolean isNew { get; set; }// 20220313 PI改造 by Chen Yanan
    public String frontCaseId { get; set; }// 20220522 PI改造 by zhj
    public String frontSwoId { get; set; }// 20220524 PI改造 by zhj
    //ASSIGNEDTO__c
    public SWOController() {
        
    }
 
    public SWOController(ApexPages.StandardController stdController) {
        isNew = true;
        swoid = System.currentPageReference().getParameters().get('id');
        caseId = System.currentPageReference().getParameters().get('caseId');
        accId = System.currentPageReference().getParameters().get('accId');
        conId = System.currentPageReference().getParameters().get('conId');
        type = System.currentPageReference().getParameters().get('type');
        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('SWO__c'));// 20220313 PI改造 by Chen Yanan
        contactstaticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));// 20220313 PI改造 by Chen Yanan
        staticResourceMailMerge = JSON.serialize(PIHelper.getPIIntegrationInfo('Mail_Merge__c'));// 20220512 PI改造 by zhj
    }
 
    public void init() {
 
        lineCount = 0;
        //获取初始URL
        baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
        String path = URL.getCurrentRequestUrl().getPath();
        if (path.indexOf('/apex') > 0) {
            baseUrl += path.substring(0, path.indexOf('/apex'));
        } else if (path.indexOf('production/') > 0) {
            baseUrl += '/production';
        }
        //初始化全局变量
        swo = new SWO__c();
        mailList = new List<EmailInfo>();
        if(String.isBlank((type))){
            type = 'Product';
        }
        //如果ID不为空初始化SWO和相关列表
        User_FaultInfo__c ca = new User_FaultInfo__c();
        List<SWO__c> temp = new List<SWO__c>();
        if (caseId != null) {
            // ca = [select id, NUMBER__c,COMPANY__c,CONTACT__c,SUBJECT__c from User_FaultInfo__c where id = : caseId];
            ca = [select id, NUMBER__c,COMPANY__c,CONTACT__c,SUBJECT__c, CONTACT__r.AWS_Data_Id__c, CONTACT__r.Name, CONTACT__r.Email from User_FaultInfo__c where id = : caseId];// 20220313 PI改造 by Chen Yanan
            temp = [select id from SWO__c where CASE_NUMBER__c = :caseId];
        }
        System.debug('ca' + ca.NUMBER__c);
        System.debug('temp' + temp.size());
        if (swoid != null) {
            isNew = false;// 20220313 PI改造 by Chen Yanan
            //初始化SWO
            Schema.DescribeSobjectResult d_swo = SWO__c.sObjectType.getDescribe();
            Map<String, Schema.SObjectField> d_swo_map = d_swo.fields.getMap();
            String soql_swo = 'select ';
            String fields_odr = '';
            for (String field : d_swo_map.keySet()) {
                if (fields_odr.length() > 0) {
                    fields_odr += ', ';
                }
                fields_odr += field;
            }
            // soql_swo += fields_odr;
            soql_swo += fields_odr + ', CONTACT__r.AWS_Data_Id__c, CONTACT__r.Name, CONTACT__r.Email ';// 20220313 PI改造 by Chen Yanan
            soql_swo += ' from SWO__c where Id = \'' + swoid + '\'';
            System.debug('soql_swo: ' + soql_swo);// 20220313 PI改造 by Chen Yanan
            List<SWO__c> swoList = Database.query(soql_swo);
            System.debug('swoList: ' + swoList);// 20220313 PI改造 by Chen Yanan
            if (swoList.size() > 0) {
                swo = swoList[0];
                swoawsDataId = swo.AWS_Data_Id__c;// 20220313 PI改造 by Chen Yanan
            }
            //初始化记录SWO 原始ASSIGNED TO,保存时判断用户是否变更,如果变更给用户发送邮件
            assignedUser = swo.ASSIGNEDTO__c;
            //初始化Mail Merge
            List<String> mailIdList = new List<String>();
 
            List<FileAddress__c> attList = new List<FileAddress__c>();
            Map<String, List<FileAddress__c>> attMap = new Map<String, List<FileAddress__c>>();
 
            Map<String, Mail_Merge__c> mailMap = new Map<String, Mail_Merge__c>([select id, FROM__c, ccName__c, SUBJECT__c, MESSAGE__c, DATE__c, toName__c, EMAIL_SENT__c ,AWS_Data_Id__c from Mail_Merge__c where SWO__c = :swoid order by id]);
            //mailMap = [select id,FROM__c,ccName__c,SUBJECT__c,MESSAGE__c from Mail_Merge__c where SWO__c = :id order by id];
 
            if (mailMap != null) {
                mailIdList.addAll(mailMap.keySet());
 
                attList =  [select id, Name, ParentRecordId__c,FileName__c from FileAddress__c where ParentRecordId__c in :mailIdList order by ParentRecordId__c, id];
                if (attList.size() > 0) {
                    for (FileAddress__c att : attList) {
                        if (attMap.containsKey(att.ParentRecordId__c)) {
                            attMap.get(att.ParentRecordId__c).add(att);
                        } else {
                            List<FileAddress__c> a = new List<FileAddress__c>();
                            a.add(att);
                            attMap.put(att.ParentRecordId__c, a);
                        }
                    }
                }
 
                for (String id : mailMap.keySet()) {
                    if (attMap.containsKey(id)) {
                        mailList.add(new EmailInfo(mailMap.get(id), attMap.get(id)));
                    } else {
                        mailList.add(new EmailInfo(mailMap.get(id), null));
                    }
                }
            }
 
            //初始化Quote
 
            Map<String, Quotes__c> quoMap = new Map<String, Quotes__c>( [select id from Quotes__c where SWO__c = :swoid order by id]);
            if (quoMap.size() > 0) {
                qiList = [select id, QUOTE__r.id, QUOTE__r.Name, QUOTE__r.STATUS__c, QuotesItemProduct__c, PART_NUMBERNew__c, QUANTITY__c, CURRENCY__c, AMOUNT__c,QUOTE__r.InvalidData__c from Quotes_item__c where QUOTE__r.InvalidData__c = false And QUOTE__c in : quoMap.keySet() order by QUOTE__c, id];
            }
 
            //初始化rpList
            rpList = new List<RepairPart__c>();
            rpList = [select Id, Name, Product__c, DescriptionNew__c, PART_NUMBERNew__c, INST_SERIAL__c, QUANTITY__c, DEFECT_PART_NUMBER__c, DEFECT_SERIAL_NUMBER__c, ANI_DEFECT_CATEGORY__c, HOURS__c, LOCATION__c, BILL_AT_0_VALUE__c, ECN__c, QTY_PICKED__c,
            Product__r.Description,Product__r.Product_ECCode__c,Product__r.ProductCode from RepairPart__c where SWO_ID__c = :swoid order by Id];
            //初始化附件
            attachmentList = [select Id, Name, CreatedDate,FileName__c from FileAddress__c where ParentRecordId__c = :swoid];
 
            //初始化diagnosis
            List<Diagnosis_Part__c> diList = new List<Diagnosis_Part__c>();
 
            diList = [select Id,SWO__c,DELIVERED__c,DESCRIPTION__c,HOLD_REASON__c,INST_SERIAL__c,PART_NUMBER__c,QUANTITY__c,REMARK__c,RETURN_DATE__c,RETURNED__c,STATUS__c,Product__c,ITEM__c,DeliveredDate__c,
            Product__r.Description,Product__r.Product_ECCode__c,Product__r.ProductCode from Diagnosis_Part__c where SWO__c = :swoid];
            if(diList.size() > 0){
                diagnosisList = new List<diagnosisInfo>();
                for(Diagnosis_Part__c di : diList){
                    diagnosisList.add(new diagnosisInfo(di,lineCount));
                    lineCount++;
                }
            }
        } else {
            //没有swoId的初始化内容
            swo = new SWO__c();
            if(caseId != null){
                swo.COMPANY__c = ca.COMPANY__c;
                swo.CONTACT__c = ca.CONTACT__c;
                swo.Name = ca.NUMBER__c + '-' + (temp.size() + 1);
                swo.CASE_NUMBER__c = caseId;
                swo.SUBJECT__c = ca.SUBJECT__c;
            }
            if(accId != null){
                swo.COMPANY__c = accId;
            }
            if(conId != null){
                swo.CONTACT__c = conId;
            }
            swo.SWO_STATUS__c = 'Not Started';
            System.debug('SWO: ' + swo);
        }
        // update PIPL 20220426 By Chen Yanan Start
        System.debug('contactAWSDataId: ' + swo.CONTACT__c);
        if(swo.CONTACT__c != null || ca.CONTACT__c != null){
            contactAWSDataId = String.isNotBlank(swo.CONTACT__r.AWS_Data_Id__c)?swo.CONTACT__r.AWS_Data_Id__c:(String.isNotBlank(ca.CONTACT__r.AWS_Data_Id__c)?ca.CONTACT__r.AWS_Data_Id__c:'');// 20220313 PI改造 by Chen Yanan
            contactName = String.isNotBlank(swo.CONTACT__r.Name)?swo.CONTACT__r.Name:(String.isNotBlank(ca.CONTACT__r.Name)?ca.CONTACT__r.Name:'');// 20220313 PI改造 by Chen Yanan
        }
        // update PIPL 20220426 By Chen Yanan End
        SwoStatus = swo.SWO_STATUS__c;
 
        //awsDataIdList
        awsDataIdList = new List<String>();
        for (Integer i = 0; i < mailList.size(); i++) {
            awsDataIdList.add(mailList[i].mm.AWS_Data_Id__c);
        }
    }
 
    /**
     * 保存方法
     * @return [description]
     */
    public PageReference save() {
        System.debug('save');
        //errorMessage = '';
        System.debug('mustData() = ' + mustData());
        //当SWO Status 改变为Quotation for approval时,此时间点自动抓取填充此处;
        if(mustData() == false){
            return null;
        }
        //ASSIGNED_TO_TECHNICIAN_DATE__c
        /*if(swo.SWO_STATUS__c == 'Delivered to Technician'){
            swo.ASSIGNED_TO_TECHNICIAN_DATE__c = Datetime.now();
        }*/
        errorMessageInfo = '';
        //Days-in-house 由 instruments ship date装运时间 与instrument receive date签收时间 计算
        String dateTimeErrorMessage = '';
        /*Boolean dateJudge = true;*/
        if(swo.INSTRUMENT_RECEIVE_DATE__c != null && swo.INSTRUMENT_SHIP_DATE__c != null){
            swo.DAYS_IN_HOUSE__c = getTimeLongStr(swo.INSTRUMENT_SHIP_DATE__c,swo.INSTRUMENT_RECEIVE_DATE__c);
            /*if(swo.INSTRUMENT_SHIP_DATE__c>swo.INSTRUMENT_RECEIVE_DATE__c){
                swo.DAYS_IN_HOUSE__c = getTimeLongStr(swo.INSTRUMENT_SHIP_DATE__c,swo.INSTRUMENT_RECEIVE_DATE__c);
            }else{
                errorMessageInfo += 'DAYS IN HOUSE 开始时间大于结束时间;-';
                dateJudge = false;
            }*/
        }
        //Diagnosis time 由diagnosis end 与diagnosis start计算
        if (swo.DIAGNOSIS_START__c!=null && swo.DIAGNOSIS_END__c!=null) {
            swo.DIAGNOSIS_TIME__c = getTimeLongStr(swo.DIAGNOSIS_START__c,swo.DIAGNOSIS_END__c);
            /*if(swo.DIAGNOSIS_START__c < swo.DIAGNOSIS_END__c){
                swo.DIAGNOSIS_TIME__c = getTimeLongStr(swo.DIAGNOSIS_START__c,swo.DIAGNOSIS_END__c);
            }else{
                errorMessageInfo += 'DIAGNOSIS TIME 开始时间大于结束时间;-';
                dateJudge = false;
            }*/
        }
        //Time awaiting PO由PO received date 与quotation send 计算
        if (swo.PO_RECEIVE_DATE__c != null && swo.Quotation_send__c!=null) {
            swo.TIME_AWAITING_PO__c = getTimeLongStr(swo.PO_RECEIVE_DATE__c,swo.Quotation_send__c);
            /*if(swo.PO_RECEIVE_DATE__c < swo.Quotation_send__c){
                swo.TIME_AWAITING_PO__c = getTimeLongStr(swo.PO_RECEIVE_DATE__c,swo.Quotation_send__c);
            } else {
                errorMessageInfo += 'PO received date 必须小于 quotation send;-';
                dateJudge = false;
            }*/
        }
        //REPAIR_TIME__c
        if(swo.REPAIR_START__c!=null && swo.REPAIR_END__c!=null){
            swo.REPAIR_TIME__c = getTimeLongStr(swo.REPAIR_START__c,swo.REPAIR_END__c);
            /*if(swo.REPAIR_START__c < swo.REPAIR_END__c){
                swo.REPAIR_TIME__c = getTimeLongStr(swo.REPAIR_START__c,swo.REPAIR_END__c);
            }else{
                errorMessageInfo += 'REPAIR TIME 开始时间大于结束时间;-';
                dateJudge = false;
            }*/
        }
        //Calibration time由calibration end 与calibration start计算
        if(swo.CALIBRATION_START__c != null && swo.CALIBRATION_END__c != null){
            //swo.CALIBRATION_TIME__c = swo.CALIBRATION_END__c - CALIBRATION_START__c;
            swo.CALIBRATION_TIME__c = getTimeLongStr(swo.CALIBRATION_START__c,swo.CALIBRATION_END__c);
            /*if(swo.CALIBRATION_START__c < swo.CALIBRATION_END__c){
                swo.CALIBRATION_TIME__c = getTimeLongStr(swo.CALIBRATION_START__c,swo.CALIBRATION_END__c);
            }else{
                errorMessageInfo += 'CALIBRATION TIME 开始时间大于结束时间;-';
                dateJudge = false;
            }*/
        }
        //FQC time 由FQC end 与FQC start计算
        if (swo.FQC_START__c!=null && swo.FQC_end__c!=null) {
            //swo.FQC_TIME__c = swo.FQC_end__c - swo.FQC_START__c;
            swo.FQC_TIME__c = getTimeLongStr(swo.FQC_START__c,swo.FQC_end__c);
            /*if(swo.FQC_START__c < swo.FQC_end__c){
                swo.FQC_TIME__c = getTimeLongStr(swo.FQC_START__c,swo.FQC_end__c);
            }else{
                errorMessageInfo += 'FQC TIME 开始时间大于结束时间;-';
                dateJudge = false;
            }*/
        }
        /*if(!dateJudge){
            return null;
        }*/
        //
        if(swo.Repair_DateTime__c!=null && swo.DELIVERED_TO_SERVICE__c!=null){
            swo.TIME_IN_QUEUE__c = getTimeLongStr(swo.Repair_DateTime__c,swo.DELIVERED_TO_SERVICE__c);
        }
        
        if(swo.SWO_STATUS__c != SwoStatus){
            // if (swo.SWO_STATUS__c == 'Closed') {
            //     SWOSTATUS_Closed_AddAttachment();//SWOSTATUS_Closed_AddAttachment
            // }
        }
        System.debug('swo save:' + swo);        // Update By Yanan
        if (swoid == null) {
            System.debug('frontCaseId = ' + frontCaseId);
            if(frontCaseId != null){
                swo.CASE_NUMBER__c = frontCaseId;
            }
            insert swo;
            System.debug('swo.id = ' + swo.id);
            swoid = swo.id;
            frontSwoId = swo.id;
            //ASSIGNED TO 字段变更,给变更后的用户发邮件
            /*if(swo.ASSIGNEDTO__c!=null && swo.ASSIGNEDTO__c!=assignedUser){
                assignedUser = swo.ASSIGNEDTO__c;
                sendEmail(swo.ASSIGNEDTO__c);
            }*/
            // PageReference ref = new Pagereference('/apex/SWOPageRead?id=' + swo.Id +'&type='+type);
            // ref.setRedirect(true);
            // return ref;
        } else {
            //ASSIGNED TO 字段变更,给变更后的用户发邮件
            /*if(swo.ASSIGNEDTO__c!=null && swo.ASSIGNEDTO__c!=assignedUser){
                assignedUser = swo.ASSIGNEDTO__c;
                sendEmail(swo.ASSIGNEDTO__c);
            }*/
            //LATE REASON 添加逻辑:当INSTRUMENT SHIP DATE 晚于ESTIMATED PROMISE DATE时,此项必填。
            update swo;
        }
 
        if (String.isNotBlank(swo.CASE_NUMBER__c) && (swo.SWO_STATUS__c == 'Close cancel' || swo.SWO_STATUS__c == 'Closed' || swo.SWO_STATUS__c == 'Close Denied')) {
            
 
            User_FaultInfo__c updateUserFaultInfo = new User_FaultInfo__c();
            updateUserFaultInfo.Id = swo.CASE_NUMBER__c;
            updateUserFaultInfo.STATUS__c = 'Closed';
 
            update updateUserFaultInfo;
 
        }
 
        List<Diagnosis_Part__c> deleteList = new List<Diagnosis_Part__c>();
        // List<Diagnosis_Part__c> insertList = new List<Diagnosis_Part__c>();
        // deleteList = [select Id from Diagnosis_Part__c where SWO__c = :swoid];
        // if(deleteList.size() > 0) delete deleteList;
        // if(diagnosisList != null && diagnosisList.size() > 0){
        //     for(diagnosisInfo dia : diagnosisList){
        //         Diagnosis_Part__c dipa = dia.di.clone();
        //         if(dipa.ITEM__c != null && dipa.Product__c != null){
        //             if(dipa.SWO__c == null){
        //                 dipa.SWO__c = swoid;
        //             }
        //             dipa.id = null;
        //             insertList.add(dipa);
        //         }
        //     }
        // }
        // if(insertList.size() > 0 ) insert insertList;
 
        //zhj 2020-04-24 前端进行跳转需要进行确认事务 start
        // PageReference ref = new Pagereference('/apex/SWOPageRead?id=' + swo.Id +'&type='+type);
        // ref.setRedirect(true);
        // return ref;
        return null;
        //zhj 2020-04-24 前端进行跳转需要进行确认事务 end
    }
    /**
    *数据验证
    **/
    public Boolean mustData(){
        errorMessageInfo = '';
        Boolean temp = true;
        if(swo.OFFICE__c == null){
            System.debug('swo.OFFICE__c:'+swo.OFFICE__c);
            swo.OFFICE__c.addError(errorMessageInfo('OFFICE'));
            //errorMessageInfo += 'OFFICE,';
            temp = false;
        }
        if(swo.SWO_PRIORITY__c == null){
            swo.SWO_PRIORITY__c.addError(errorMessageInfo('SWO PRIORITY'));
            temp = false;
        }
        if(swo.SWO_STATUS__c == null){
            swo.SWO_STATUS__c.addError(errorMessageInfo('SWO STATUS'));
            //errorMessageInfo += 'SWO STATUS,';
            temp = false;
        }
        /*if(swo.SWO_STAGE__c == null){
            //errorMessageInfo += 'SWO STAGE,';
            swo.SWO_STAGE__c.addError(errorMessageInfo('SWO STAGE'));
            temp = false;
        }*/
        if(swo.TYPE__c == null){
            //errorMessageInfo += 'TYPE,';
            swo.TYPE__c.addError(errorMessageInfo('TYPE'));
            temp = false;
        }
        if(swo.ASSIGNEDTO__c == null){
            //errorMessageInfo += 'ASSIGNED TO,';
            swo.ASSIGNEDTO__c.addError(errorMessageInfo('ASSIGNED TO'));
            temp = false;
        }
        if(swo.DEPARTMENT__c == null){
            //errorMessageInfo += 'DEPARTMENT,';
            swo.DEPARTMENT__c.addError(errorMessageInfo('DEPARTMENT'));
            temp = false;
        }
        if(swo.REASON__c == null){
            //errorMessageInfo += 'REASON,';
            swo.REASON__c.addError(errorMessageInfo('REASON'));
            temp = false;
        }
        if(swo.PRODUCT_TYPE__c == null){
            //errorMessageInfo += 'PRODUCT TYPE';
            swo.PRODUCT_TYPE__c.addError(errorMessageInfo('PRODUCT TYPE'));
            temp = false;
        }
        if(swo.ITEM__c == null){
            //errorMessageInfo += 'ITEM,';
            swo.ITEM__c.addError(errorMessageInfo('ITEM'));
            temp = false;
        }
        if(swo.QUANTITY__c == null){
            //errorMessageInfo += 'QUANTITY,';
            swo.QUANTITY__c.addError(errorMessageInfo('QUANTITY'));
            temp = false;
        }
        /*if (swo.ESTIMATED_MATERIAL_COST__c == null) {
            swo.ESTIMATED_MATERIAL_COST__c.addError(errorMessageInfo('ESTIMATED MATERIAL (COST)'));
            temp = false;
        }*/
        /*if (swo.ESTIMATED_LABOUR_HOURS__c == null) {
            swo.ESTIMATED_LABOUR_HOURS__c.addError(errorMessageInfo('ESTIMATED LABOUR (HOURS)'));
            temp = false;
        }*/
        /*if (swo.ESTIMATED_EXPENSES_COSTS__c == null) {
            swo.ESTIMATED_EXPENSES_COSTS__c.addError(errorMessageInfo('ESTIMATED EXPENSES (COSTS)'));
            temp = false;
        }*/
         if ((swo.INSTRUMENT_SHIP_DATE__c > swo.ESTIMATED_PROMISE_DATE__c) && swo.LATE_REASON__c == null) {
            //errorMessageInfo = 'INSTRUMENT SHIP DATE 时间晚于 ESTIMATED PROMISE DATE 时间 LATE REASON 必填。';
            //errorMessageInfo += 'INSTRUMENT SHIP DATE 时间晚于 ESTIMATED PROMISE DATE 时间 LATE REASON 必填。';
            swo.LATE_REASON__c.addError(errorMessageInfo('LATE REASON'));
         }
        if(!temp){
            return temp;
        }
 
        if(swo.REPEAT_REPAIR__c && swo.REPEAT_REPAIR_ORIGINAL_NOTES__c == null){
            //errorMessageInfo += 'REPEAT REPAIR Check REPEAT REPAIR ORIGINAL NOTES 文本框必填';
            //System.debug('errorMessageInfo:'+errorMessageInfo);
            swo.REPEAT_REPAIR_ORIGINAL_NOTES__c.addError(errorMessageInfo('REPEAT REPAIR Check REPEAT REPAIR ORIGINAL NOTES'));
            return false;
        }
 
        if(swo.INSTRUMENT_RECEIVE_DATE__c == null && swo.ASSIGNED_TO_TECHNICIAN_DATE__c !=null){
            //errorMessageInfo += 'ASSIGNED TO TECHNICIAN DATE 有值 INSTRUMENT RECEIVE DATE 不可为空,';
            swo.INSTRUMENT_RECEIVE_DATE__c.addError(errorMessageInfo('ASSIGNED TO TECHNICIAN DATE has a value INSTRUMENT RECEIVE DATE'));
            temp = false;
        }else if((swo.INSTRUMENT_RECEIVE_DATE__c != null && swo.ASSIGNED_TO_TECHNICIAN_DATE__c !=null) && (swo.INSTRUMENT_RECEIVE_DATE__c.getTime() > swo.ASSIGNED_TO_TECHNICIAN_DATE__c.getTime())){
            //errorMessageInfo += 'INSTRUMENT RECEIVE DATE 不可以大于 ASSIGNED TO TECHNICIAN DATE,';
            swo.INSTRUMENT_RECEIVE_DATE__c.addError('INSTRUMENT RECEIVE DATE cannot be greater than ASSIGNED TO TECHNICIAN DATE');
            temp = false;
        }
        if((swo.ASSIGNED_TO_TECHNICIAN_DATE__c!=null && swo.TECHNICIAN_COMPLETION_DATE__c!=null)&&(swo.ASSIGNED_TO_TECHNICIAN_DATE__c.getTime() > swo.TECHNICIAN_COMPLETION_DATE__c.getTime())){
            //errorMessageInfo += 'ASSIGNED TO TECHNICIAN DATE 不可以大于 TECHNICIAN COMPLETION DATE,';
            swo.ASSIGNED_TO_TECHNICIAN_DATE__c.addError('ASSIGNED TO TECHNICIAN DATE cannot be greater than TECHNICIAN COMPLETION DATE');
            temp = false;
        }
        if(!temp){
            return temp;
        }
 
        if(swo.SWO_STATUS__c == 'Ready to Ship' && swo.PO_RECEIVE_DATE__c == null){
            //errorMessageInfo = '请输入 PO Receive Date';
            swo.PO_RECEIVE_DATE__c.addError(errorMessageInfo('PO Receive Date'));
            return false;
        }
 
        if(swo.SWO_STATUS__c == 'Closed'){
            if(swo.INSTRUMENT_RECEIVE_DATE__c == null){
                //errorMessageInfo += 'INSTRUMENT RECEIVE DATE,'; 
                swo.INSTRUMENT_RECEIVE_DATE__c.addError(errorMessageInfo('INSTRUMENT RECEIVE DATE'));
                temp = false;
            }
            if(swo.INSTRUMENT_SHIP_DATE__c == null){
                //errorMessageInfo += 'INSTRUMENT SHIP DATE,'; 
                swo.INSTRUMENT_SHIP_DATE__c.addError(errorMessageInfo('INSTRUMENT SHIP DATE'));
                temp = false;
            }
            if(swo.ASSIGNED_TO_TECHNICIAN_DATE__c == null){
                //errorMessageInfo += 'ASSIGNED TO TECHNICIAN DATE,'; 
                swo.ASSIGNED_TO_TECHNICIAN_DATE__c.addError(errorMessageInfo('ASSIGNED TO TECHNICIAN DATE'));
                temp = false;
            }
            if(swo.TECHNICIAN_COMPLETION_DATE__c == null){
                //errorMessageInfo += 'TECHNICIAN COMPLETION DATE,'; 
                swo.TECHNICIAN_COMPLETION_DATE__c.addError(errorMessageInfo('TECHNICIAN COMPLETION DATE'));
                temp = false;
            }
            if(swo.UNIT_POWERS_UP__c == null){
                //errorMessageInfo += 'UNIT POWERS UP?,'; 
                swo.UNIT_POWERS_UP__c.addError(errorMessageInfo('UNIT POWERS UP?'));
                temp = false;
            }
            if(swo.BATTERY_MORE_THAN_3_YRS_OLD__c == null){
                //errorMessageInfo += 'BATTERY MORE THAN 3-YRS OLD?,'; 
                swo.BATTERY_MORE_THAN_3_YRS_OLD__c.addError(errorMessageInfo('BATTERY MORE THAN 3-YRS OLD?'));
                temp = false;
            }
            if(swo.CONFIRMED_RECEIPT_WITH_CUSTOMER__c == null){
                //errorMessageInfo += 'CONFIRMED RECEIPT WITH CUSTOMER?,'; 
                swo.CONFIRMED_RECEIPT_WITH_CUSTOMER__c.addError(errorMessageInfo('CONFIRMED RECEIPT WITH CUSTOMER?'));
                temp = false;
            }
            if(swo.INCOMING_INSPECTION_COMPLETED_BY__c == null){
                //errorMessageInfo += 'INCOMING INSPECTION COMPLETED BY:,'; 
                swo.INCOMING_INSPECTION_COMPLETED_BY__c.addError(errorMessageInfo('INCOMING INSPECTION COMPLETED BY:'));
                temp = false;
            }
            if(swo.CUSTOM_SETUPS_PRESENT__c == null){
                //errorMessageInfo += 'CUSTOM SETUPS PRESENT?,'; 
                swo.CUSTOM_SETUPS_PRESENT__c.addError(errorMessageInfo('CUSTOM SETUPS PRESENT?'));
                temp = false;
            }
            if(swo.CUSTOM_SETUPS_INCLUDED__c == null){
                //errorMessageInfo += 'CUSTOM SETUPS INCLUDED?,'; 
                swo.CUSTOM_SETUPS_INCLUDED__c.addError(errorMessageInfo('CUSTOM SETUPS INCLUDED?'));
                temp = false;
            }
            if(swo.KEYPAD_FUNCTIONS_CORRECTLY__c == null){
                //errorMessageInfo += 'KEYPAD FUNCTIONS CORRECTLY?,'; 
                swo.KEYPAD_FUNCTIONS_CORRECTLY__c.addError(errorMessageInfo('KEYPAD FUNCTIONS CORRECTLY?'));
                temp = false;
            }
            if(swo.OUTGOING_INSPECTION_COMPLETED_BY__c == null){
                //errorMessageInfo += 'OUTGOING INSPECTION COMPLETED BY:,'; 
                swo.OUTGOING_INSPECTION_COMPLETED_BY__c.addError(errorMessageInfo('OUTGOING INSPECTION COMPLETED BY:'));
                temp = false;
            }
            if(swo.SERIAL_MATCHES_SO__c == null){
                //errorMessageInfo += 'SERIAL# MATCHES SO?,'; 
                swo.SERIAL_MATCHES_SO__c.addError(errorMessageInfo('SERIAL# MATCHES SO?'));
                temp = false;
            }
            if(swo.FACTORY_WARRANTY__c == false && swo.SO_NUMBER__c == null && swo.OAI_WARRANTY__c == false){
                //errorMessageInfo += 'SO NUMBER,';
                swo.SO_NUMBER__c.addError(errorMessageInfo('SO NUMBER'));
                temp = false;
            }
        }
        return temp;
    }
    //拼接错误信息
    public String errorMessageInfo(String type) {
        String result = type + ' can not be empty';
        return result;
    }
    /**
     * 上传附件
     * @return [description]
     */
    public PageReference uploadFile() {
 
        PageReference ref = new Pagereference('/p/attach/NoteAttach?pid=' + swoid + '&retURL=%2Fapex/SWOPage?id=' + swoid);
        ref.setRedirect(true);
        return ref;
    }
 
    public Pagereference edit(){
        PageReference ref = new Pagereference('/apex/SWOPage?id=' + swo.Id +'&type='+type);
        ref.setRedirect(true);
        return ref;
    }
 
    public void addDiagnosisInfo(){
        if(diagnosisList == null){
            diagnosisList = new List<diagnosisInfo>();
        }
        diagnosisList.add(new diagnosisInfo(lineCount));
        lineCount++;
    }
 
    /**
     * 切换页面方法。
     */
    public void setMail() {
        type = 'mail';
    }
    public void setFault() {
        type = 'Fault';
    }
    public void setCase() {
        type = 'Case';
    }
    public void setProduct() {
        type = 'Product';
    }
 
    public void setQuotes() {
        type = 'Quotes';
    }
 
    public void setRepair() {
        type = 'Repair';
    }
 
    public void setTracking() {
        type = 'Tracking';
    }
    public void setTechnical() {
        type = 'Technical';
    }
 
    public void setEstimation() {
        type = 'Estimation';
    }
 
    public void setGeneral() {
        type = 'General';
    }
 
    public void setIncoming() {
        type = 'Incoming';
    }
 
    public void setOutgoing() {
        type = 'Outgoing';
    }
 
    public void setDiagnosis() {
        type = 'Diagnosis';
    }
 
    /**
     * 邮件数据结构
     */
    public class EmailInfo {
 
        public Mail_Merge__c mm {get; set; }
        public List<FileAddress__c> attList {get; set; }
        public String haveAtt {get; set;}
        public EmailInfo() {
 
        }
        public EmailInfo(Mail_Merge__c mm_in, List<FileAddress__c> attList_in) {
            mm = mm_in;
            if (attList_in == null || attList_in.size() == 0) {
                haveAtt = 'No';
                attList = new List<FileAddress__c>();
            } else {
                attList = attList_in;
                haveAtt = 'Yes';
            }
        }
 
    }
 
    public class diagnosisInfo{
        public Diagnosis_Part__c di{get; set;}
        public Integer lineNumber {get; set;}
 
        public diagnosisInfo(Integer line){
            di = new Diagnosis_Part__c();
            lineNumber = line;
        }
        public diagnosisInfo(Diagnosis_Part__c in_di,Integer line){
            di = in_di;
            lineNumber = line;
        }
    }
 
    //发送邮件
    public void sendEmail(String id){
 
        if(String.isBlank(id)){
            return;
        }
        User user = [select Name,Email from User where id=:id];
        if(user!=null && String.isNotBlank(user.Email)){
            String subject = 'Service Work Order ~SWO:'+swo.Name;
            String message = 'SWO status Changed to: '+ swo.SWO_STATUS__c+', Please continue to proceed this SWO.'+'\r';
            message += (baseUrl+'/'+swo.Id);
            List<String> ccAddresses = new List<String>();
            List<String> toAddresses = new List<String>();
            Messaging.SingleEmailMessage sendMail = new Messaging.SingleEmailMessage();
            toAddresses.add(user.Email);
            sendMail.setToAddresses(toAddresses);
            sendMail.setSubject(subject);
            sendMail.setPlainTextBody(message);
            sendMail.setBccSender(false);
            sendMail.setUseSignature(false);
            // ccAddresses.add('swo_listen@z-23gt0jbtzuxf7uka2keyfl65gxjqimwuqbl07g9u0govga7hm6.0t-8aptuaq.cs112.apex.sandbox.salesforce.com');
            ccAddresses.add(System.label.EmailComeBackListen);
            ccAddresses.add('dai_Prectech@olympus.com.cn');
            sendMail.setCcAddresses(ccAddresses);
            Messaging.SendEmailResult[] result_list = Messaging.sendEmail(new Messaging.SingleEmailMessage[] { sendMail });
        }
 
    }
    //repair parts 页面返回调用
    public void repairReturn(){
        if(String.isNotBlank(repairId)){
            /*RepairPart__c repairPart = new RepairPart__c();
            Schema.DescribeSobjectResult repairPart = RepairPart__c.sObjectType.getDescribe();
            Map<String, Schema.SObjectField> repairPart_fields = d_swo.fields.getMap();
            String soql_repair = 'select ';
            String fields = '';
            for (String field : repairPart_fields.keySet()) {
                if (fields.length() > 0) {
                    fields += ', ';
                }
                fields += field;
            }
            soql_repair += fields;
            soql_repair += ' from RepairPart__c where SWO_ID__c = \'' + repairId + '\'';
            rpList = Database.query(soql_repair);*/
            System.debug('新建RepairPart 返回');
            rpList = new List<RepairPart__c>();
            rpList = [select Id, Name, Product__c, DescriptionNew__c, PART_NUMBERNew__c, INST_SERIAL__c, QUANTITY__c, DEFECT_PART_NUMBER__c, DEFECT_SERIAL_NUMBER__c, ANI_DEFECT_CATEGORY__c, HOURS__c, LOCATION__c, BILL_AT_0_VALUE__c, ECN__c, QTY_PICKED__c from RepairPart__c where SWO_ID__c = :swoid order by Id];
            return;
        }
    }
 
    // 计算两个dateTime之间的时间间隔 返回为几天几小时几分钟的字符串
    public String getTimeLongStr(Datetime startTime,Datetime endTime){
        if(startTime>endTime){
            Datetime a = startTime;
            startTime = endTime;
            endTime = a;
        }
        String str = '';
        Decimal timeLong = Decimal.valueOf(endTime.getTime()) - Decimal.valueOf(startTime.getTime());
        Decimal day = 0;
        Decimal hour = 0;
        Decimal second = timeLong/1000;
        //math.round() 四舍五入
        //math.floor() 取到一个小数的整数部分
        Decimal minute = math.round(second/60);
        if(minute >= 60){
            hour = minute/60;
            if(hour >= 24){
                day = hour/24;
                hour = (day-math.floor(day))*24;
                minute = (hour - math.floor(hour))*60;
                minute = math.round(minute);
                hour = math.floor(hour);
                day = math.floor(day);
                str = day+' Day '+hour+' Hour '+minute+' Minute';
            }else{
                minute = (hour-math.floor(hour))*60;
                minute =  math.round(minute);
                hour = math.floor(hour);
                str = hour+' Hour '+math.round(minute)+' Minute';
            }
        }else{
            str = minute+' Minute';
        }
        System.debug(str);
        return str;
    }
    //打开子页面先保存,防止返回SWO页面时数据被刷新
    public void openPageSave(){
        upsert swo;
        return;
    }
    // SWO的状态变成Closed时,创建csv并添加到附件中
    /*public void SWOSTATUS_Closed_AddAttachment() {
        String repairParts = '';
        if ( rpList.size() > 0) {
            for(RepairPart__c repairPart:rpList){
 
                if (String.isBlank(repairParts)) {
                    repairParts = repairPart.Product__r.ProductCode;
                } else {
                    repairParts += '/' + repairPart.Product__r.ProductCode;
                }
            }
        }
        repairParts = String.isBlank(repairParts)  ? '\"\"':repairParts.replaceAll('"', '');
        String claim = String.isBlank(swo.CLAIM__c)  ? '\"\"':swo.CLAIM__c.replaceAll('"', '');
        String serial = String.isBlank(swo.SERIAL__c)  ? '\"\"':swo.SERIAL__c.replaceAll('"', '');
        String description = String.isBlank(swo.DESCRIPTION_F__c)?'': swo.DESCRIPTION_F__c.replaceAll('"', '');
        String strblob = '"swo name","factory warranty","product type","claim#","DESCRIPTION","serial #","repair parts","ESTIMATED LABOUR (HOURS)"\n';
        
        strblob += swo.name +',' + swo.FACTORY_WARRANTY__c + ','+swo.PRODUCT_TYPE__c +','+claim+','+description+','+serial+ ','+repairParts+','+swo.ESTIMATED_LABOUR_HOURS__c;
 
        Attachment tmpAttachment = new Attachment();
        tmpAttachment.Name = swo.name +'出库单.csv';
        tmpAttachment.Body = Blob.valueOf(strblob);
        tmpAttachment.ParentId = swo.Id;
        insert tmpAttachment;
        
    }
    */
}