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
public without sharing class MaintanceContractPackHandler extends Oly_TriggerHandler{
    private Map<Id, MaintanceContractPack__c> newMap;
    private Map<Id, MaintanceContractPack__c> oldMap;
    private List<MaintanceContractPack__c> newList;
    private List<MaintanceContractPack__c> oldList;
 
    public MaintanceContractPackHandler(){
        this.newMap =  (Map<Id, MaintanceContractPack__c>) Trigger.newMap;
        this.oldMap =  (Map<Id, MaintanceContractPack__c>) Trigger.oldMap;
        this.newList = (List<MaintanceContractPack__c>) Trigger.new;
        this.oldList = (List<MaintanceContractPack__c>) Trigger.old;
        
    }
 
    protected override void afterUpdate() {
        List<Maintenance_Contract__c> mcUpdateLists= new List<Maintenance_Contract__c>();
        List<String> mcpIds = new List<string>();
        List<MaintanceContractPack__c> mcpList = new List<MaintanceContractPack__c>();
        for(MaintanceContractPack__c mcp: newList){
            mcpIds.add(mcp.Id);
        }
        List<Maintenance_Contract__c> mcAllList =  [Select Id,MaintanceContractPack__c from Maintenance_Contract__c where MaintanceContractPack__c in :mcpIds Order By MaintanceContractPack__c];
        for(MaintanceContractPack__c mcp: newList){
            MaintanceContractPack__c mcpUpdate = new MaintanceContractPack__c();
            //打包合同合同复核 同步更新小合同合同复核相关字段的值
            MaintanceContractPack__c oldMcp = oldMap.get(mcp.Id);
            //提交
            if (mcp.MC_approval_status__c == 'Submit' && oldMcp.MC_approval_status__c != 'Submit') {
                for(Maintenance_Contract__c mc: mcAllList) {
                    if(mc.MaintanceContractPack__c == mcp.Id) {
                        mc.MC_approval_status__c = 'Submit';
                        mc.MC_approval_submit_time__c = Datetime.now();
                        //合同复核每个阶段解锁或锁定对应的小合同
                        Approval.lock(mc.Id);
                        mcUpdateLists.add(mc);
                    }
                }
            }
            //撤回
            if (mcp.MC_approval_status__c == 'Draft' && oldMcp.MC_approval_status__c != 'Draft') {
                for(Maintenance_Contract__c mc: mcAllList) {
                    if(mc.MaintanceContractPack__c == mcp.Id) {
                        mc.MC_approval_status__c = 'Draft';
                        mc.MC_approval_submit_time__c = null;
                        Approval.unlock(mc.Id);
                        mcUpdateLists.add(mc);
                    }
                }
            }
            //拒绝
            if (mcp.MC_approval_status__c == 'Reject' && oldMcp.MC_approval_status__c != 'Reject') {
                for(Maintenance_Contract__c mc: mcAllList) {
                    if(mc.MaintanceContractPack__c == mcp.Id) {
                        mc.MC_approval_status__c = 'Reject';
                        Approval.unlock(mc.Id);
                        mcUpdateLists.add(mc);
                    }
                }
            }
            //批准
            if (mcp.MC_approval_status__c == 'Pass' && oldMcp.MC_approval_status__c != 'Pass') {
                for(Maintenance_Contract__c mc: mcAllList) {
                    if(mc.MaintanceContractPack__c == mcp.Id) {
                        mc.MC_approval_status__c = 'Pass';
                        mc.MC_approval_pass_time__c  = Datetime.now();
                        Approval.lock(mc.Id);
                        mcUpdateLists.add(mc);
                         
                    }
                }
            }
            //更新合同相关日期
            if (mcp.Contract_Conclusion_Date__c !=  oldMcp.Contract_Conclusion_Date__c
                ||mcp.OCM_Print_request__c!=  oldMcp.OCM_Print_request__c 
                ||mcp.Contract_print_completed__c !=  oldMcp.Contract_print_completed__c 
                ||mcp.one_off_payment_agreed_period__c !=  oldMcp.one_off_payment_agreed_period__c 
                ||mcp.HP_Dealer_print__c !=  oldMcp.HP_Dealer_print__c 
                ||mcp.Submit_contract_to_Financial_dept__c     !=  oldMcp.Submit_contract_to_Financial_dept__c ) {
                for(Maintenance_Contract__c mc: mcAllList) {
                    if(mc.MaintanceContractPack__c == mcp.Id) {
                        //更新合同日
                        if(mcp.Contract_Conclusion_Date__c !=  oldMcp.Contract_Conclusion_Date__c) {
                            mc.Contract_Conclusion_Date__c = mcp.Contract_Conclusion_Date__c;
                        }
                        //更新OCM盖章申請 
                        if (mcp.OCM_Print_request__c!=  oldMcp.OCM_Print_request__c ) {
                            mc.OCM_Print_request__c  = mcp.OCM_Print_request__c;
                            
                        }
                        //更新合同盖章完毕--通过流取OCM 和医院(经销商)印的最晚值
                        // 同时更新第一次付款计划日 Contract_print_completed__c + VALUE(TEXT(one_off_payment_agreed_period__c))
                        if (mcp.Contract_print_completed__c!=  oldMcp.Contract_print_completed__c 
                            || mcp.one_off_payment_agreed_period__c !=  oldMcp.one_off_payment_agreed_period__c  ) {
                            if(mcp.Contract_print_completed__c!=null && String.isNotBlank(mcp.one_off_payment_agreed_period__c)) {
                                mc.Payment_Plan_Date_First__c = mcp.OCM_Print_request__c.addDays(Integer.valueof(mcp.one_off_payment_agreed_period__c));
                                mcpUpdate.Id = mcp.Id;
                                mcpUpdate.Payment_Plan_Date_First__c = mcp.OCM_Print_request__c.addDays(Integer.valueof(mcp.one_off_payment_agreed_period__c));
                            }
                            // mc.Contract_print_completed__c  = mcp.Contract_print_completed__c;
                        }
                        //更新医院(经销商)印
                        if (mcp.HP_Dealer_print__c!=  oldMcp.HP_Dealer_print__c ) {
                            mc.HP_Dealer_print__c  = mcp.HP_Dealer_print__c;
                        }
                        //更新财务提交日
                        if (mcp.Submit_contract_to_Financial_dept__c!=  oldMcp.Submit_contract_to_Financial_dept__c ) {
                            mc.Submit_contract_to_Financial_dept__c  = mcp.Submit_contract_to_Financial_dept__c;
                        }
 
                        mcUpdateLists.add(mc);
                    }
                    
                }
            }
            if(String.isNotBlank(mcpUpdate.Id)) {
                mcpList.add(mcpUpdate);
            }
        }
        if (!mcUpdateLists.isEmpty()) {
            update mcUpdateLists;
            update mcpList;
        }     
 
    }
}