D C
2023-05-26 9a0ef802a678ffc421fc1d416f7f867e89e5536a
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
trigger CalculationFMTrigger on Product2(before insert,after update) {
    if (Trigger.isUpdate) {
        List<String> ids = new List<String>();
        List<String> mcIds = new List<String>();
        List<String> upMcIds = new List<String>();
        Map<String,Decimal> upMP = new Map<String,Decimal>();
        List<Product2> newProducts = Trigger.new;
        List<Product2> oldPeoducts = Trigger.old;
 
        for (Product2 np : newProducts) {
            for (Product2 op : oldPeoducts) {
                if (np.Intra_Trade_Gurantee_RMB__c != op.Intra_Trade_Gurantee_RMB__c) {
                    ids.add(np.Id);
                }
            }
        }
        if (ids.size()>0) {
            List<Maintenance_Contract_Asset__c> mcas = [select Maintenance_Contract__c from Maintenance_Contract_Asset__c where Asset__r.Product2Id in :ids];
            for (Maintenance_Contract_Asset__c mca: mcas) {
                mcIds.add(mca.Maintenance_Contract__c);
            }
            List<Maintenance_Contract__c> mcs = [select Id,FM__c from Maintenance_Contract__c where Id in :mcIds];
            for (Maintenance_Contract__c mc : mcs) {
                upMcIds.add(mc.Id);
            }
            List<Maintenance_Contract_Asset__c> upMcas = [select Maintenance_Contract__c,Asset__r.Product2.Intra_Trade_Gurantee_RMB__c from Maintenance_Contract_Asset__c where Maintenance_Contract__c in :upMcIds];
            for (Maintenance_Contract_Asset__c mca : upMcas ) {
                if (!upMP.keySet().contains(mca.Maintenance_Contract__c)) {
                    upMP.put(mca.Maintenance_Contract__c, mca.Asset__r.Product2.Intra_Trade_Gurantee_RMB__c);
                }else{
                    Decimal sum = upMP.get(mca.Maintenance_Contract__c)+ mca.Asset__r.Product2.Intra_Trade_Gurantee_RMB__c;
                    upMP.put(mca.Maintenance_Contract__c, sum);
                }
            }
 
            for (Maintenance_Contract__c mc : mcs) {
                mc.FM__c = upMP.get(mc.Id);
            }
            update mcs;
 
        }
 
 
        
    }
}