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;
|
|
}
|
|
|
|
}
|
}
|