trigger ReportCPileUp on Report__c (after delete, after insert, after update) { 
 | 
// TODO 今後 Owner_System__c を設定する場合があります。 
 | 
//    // LastModifiedDateとCreatedDateの比較での判断は無理、WF経由なので新規時も時間がずれてる 
 | 
//    // なのでここで設定するしかないです。 
 | 
//    if (Trigger.isBefore) { 
 | 
//        for (Report__c rpt : Trigger.new) { 
 | 
//            if (Trigger.isInsert || Trigger.isUpdate && Trigger.oldMap.get(rpt.Id).get('Status__c') != '申請中') { 
 | 
//                if (rpt.Status__c == '申請中') { 
 | 
//                    rpt.Submit_report_day__c = Date.today(); 
 | 
//                } 
 | 
//            } 
 | 
//        } 
 | 
//    } else { 
 | 
        // 商談に Num_Of_OPD__c を積み上げ 
 | 
        List<String> oppIds = new List<String>(); 
 | 
     
 | 
        RecordType rt = [select Id from RecordType where IsActive = true and DeveloperName = 'OPD' and SObjectType = 'Report__c']; 
 | 
     
 | 
        if (Trigger.isDelete) { 
 | 
            for (Report__c rpt : Trigger.old) { 
 | 
                if (rpt.RecordTypeId == rt.Id) { 
 | 
                    if (String.isBlank(rpt.Opportunity1__c) == false) oppIds.add(rpt.Opportunity1__c); 
 | 
                    if (String.isBlank(rpt.Opportunity2__c) == false) oppIds.add(rpt.Opportunity2__c); 
 | 
                    if (String.isBlank(rpt.Opportunity3__c) == false) oppIds.add(rpt.Opportunity3__c); 
 | 
                    if (String.isBlank(rpt.Opportunity4__c) == false) oppIds.add(rpt.Opportunity4__c); 
 | 
                    if (String.isBlank(rpt.Opportunity5__c) == false) oppIds.add(rpt.Opportunity5__c); 
 | 
                } 
 | 
            } 
 | 
        }  
 | 
        if (Trigger.isInsert) { 
 | 
            for (Report__c rpt : Trigger.new) { 
 | 
                // OPD 
 | 
                if (rpt.RecordTypeId == rt.Id) { 
 | 
                    if (String.isBlank(rpt.Opportunity1__c) == false) 
 | 
                        oppIds.add(rpt.Opportunity1__c); 
 | 
                    if (String.isBlank(rpt.Opportunity2__c) == false) 
 | 
                        oppIds.add(rpt.Opportunity2__c); 
 | 
                    if (String.isBlank(rpt.Opportunity3__c) == false) 
 | 
                        oppIds.add(rpt.Opportunity3__c); 
 | 
                    if (String.isBlank(rpt.Opportunity4__c) == false) 
 | 
                        oppIds.add(rpt.Opportunity4__c); 
 | 
                    if (String.isBlank(rpt.Opportunity5__c) == false) 
 | 
                        oppIds.add(rpt.Opportunity5__c); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        if (Trigger.isUpdate) { 
 | 
            for (Report__c rpt : Trigger.new) { 
 | 
                Report__c oldrpt = Trigger.oldMap.get(rpt.Id); 
 | 
                Boolean statusChange = false; 
 | 
                if (oldrpt.Status__c != rpt.Status__c) { 
 | 
                    StatusChange = true; 
 | 
                } 
 | 
                 
 | 
                // OPD 
 | 
                if (rpt.RecordTypeId == rt.Id) { 
 | 
                    if (oldrpt.Opportunity1__c != rpt.Opportunity1__c || statusChange) { 
 | 
                        if (String.isBlank(rpt.Opportunity1__c) == false) { 
 | 
                            oppIds.add(rpt.Opportunity1__c); 
 | 
                        } 
 | 
                        if (oldrpt.Opportunity1__c !=  null) { 
 | 
                            oppIds.add(oldrpt.Opportunity1__c); 
 | 
                        } 
 | 
                    } 
 | 
                    if (oldrpt.Opportunity2__c != rpt.Opportunity2__c || statusChange) { 
 | 
                        if (String.isBlank(rpt.Opportunity2__c) == false) { 
 | 
                            oppIds.add(rpt.Opportunity2__c); 
 | 
                        } 
 | 
                        if (oldrpt.Opportunity2__c !=  null) { 
 | 
                            oppIds.add(oldrpt.Opportunity2__c); 
 | 
                        } 
 | 
                    } 
 | 
                    if (oldrpt.Opportunity3__c != rpt.Opportunity3__c || statusChange) { 
 | 
                        if (String.isBlank(rpt.Opportunity3__c) == false) { 
 | 
                            oppIds.add(rpt.Opportunity3__c); 
 | 
                        } 
 | 
                        if (oldrpt.Opportunity3__c !=  null) { 
 | 
                            oppIds.add(oldrpt.Opportunity3__c); 
 | 
                        } 
 | 
                    } 
 | 
                    if (oldrpt.Opportunity4__c != rpt.Opportunity4__c || statusChange) { 
 | 
                        if (String.isBlank(rpt.Opportunity4__c) == false) { 
 | 
                            oppIds.add(rpt.Opportunity4__c); 
 | 
                        } 
 | 
                        if (oldrpt.Opportunity4__c !=  null) { 
 | 
                            oppIds.add(oldrpt.Opportunity4__c); 
 | 
                        } 
 | 
                    } 
 | 
                    if (oldrpt.Opportunity5__c != rpt.Opportunity5__c || statusChange) { 
 | 
                        if (String.isBlank(rpt.Opportunity5__c) == false) { 
 | 
                            oppIds.add(rpt.Opportunity5__c); 
 | 
                        } 
 | 
                        if (oldrpt.Opportunity5__c !=  null) { 
 | 
                            oppIds.add(oldrpt.Opportunity5__c); 
 | 
                        } 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
         
 | 
        if (oppIds.size() > 0) { 
 | 
            // 先に親をlockする 
 | 
            List<Opportunity> opps = new List<Opportunity>(); 
 | 
            List<Opportunity> oppList = ControllerUtil.oppSelectForLock(oppIds); 
 | 
     
 | 
            // 各種カウント 
 | 
            Map<Id, Integer> opdCntMap = new Map<Id, Integer>();           // oppId => OPD件数 
 | 
            List<Report__c> opdOppList = ControllerUtil.selectReportForAggregateOpdToOpp(oppIds); 
 | 
System.debug('opdOppList.size():::::' + opdOppList.size()); 
 | 
            for (Report__c rpt : opdOppList) { 
 | 
System.debug('rpt.Opportunity1__c:::::' + rpt.Opportunity1__c); 
 | 
System.debug('rpt.Opportunity2__c:::::' + rpt.Opportunity2__c); 
 | 
System.debug('rpt.Opportunity3__c:::::' + rpt.Opportunity3__c); 
 | 
System.debug('rpt.Opportunity4__c:::::' + rpt.Opportunity4__c); 
 | 
System.debug('rpt.Opportunity5__c:::::' + rpt.Opportunity5__c); 
 | 
                if (String.isBlank(rpt.Opportunity1__c) == false) { 
 | 
                    if (opdCntMap.containsKey(rpt.Opportunity1__c)) { 
 | 
                        opdCntMap.put(rpt.Opportunity1__c, opdCntMap.get(rpt.Opportunity1__c) + 1); 
 | 
                    } else { 
 | 
                        opdCntMap.put(rpt.Opportunity1__c, 1); 
 | 
                    } 
 | 
                } else { 
 | 
                    opdCntMap.put(rpt.Opportunity1__c, 0); 
 | 
                } 
 | 
                if (String.isBlank(rpt.Opportunity2__c) == false) { 
 | 
                    if (opdCntMap.containsKey(rpt.Opportunity2__c)) { 
 | 
                        opdCntMap.put(rpt.Opportunity2__c, opdCntMap.get(rpt.Opportunity2__c) + 1); 
 | 
                    } else { 
 | 
                        opdCntMap.put(rpt.Opportunity2__c, 1); 
 | 
                    } 
 | 
                } else { 
 | 
                    opdCntMap.put(rpt.Opportunity2__c, 0); 
 | 
                } 
 | 
                if (String.isBlank(rpt.Opportunity3__c) == false) { 
 | 
                    if (opdCntMap.containsKey(rpt.Opportunity3__c)) { 
 | 
                        opdCntMap.put(rpt.Opportunity3__c, opdCntMap.get(rpt.Opportunity3__c) + 1); 
 | 
                    } else { 
 | 
                        opdCntMap.put(rpt.Opportunity3__c, 1); 
 | 
                    } 
 | 
                } else { 
 | 
                    opdCntMap.put(rpt.Opportunity3__c, 0); 
 | 
                } 
 | 
                if (String.isBlank(rpt.Opportunity4__c) == false) { 
 | 
                    if (opdCntMap.containsKey(rpt.Opportunity4__c)) { 
 | 
                        opdCntMap.put(rpt.Opportunity4__c, opdCntMap.get(rpt.Opportunity4__c) + 1); 
 | 
                    } else { 
 | 
                        opdCntMap.put(rpt.Opportunity4__c, 1); 
 | 
                    } 
 | 
                } else { 
 | 
                    opdCntMap.put(rpt.Opportunity4__c, 0); 
 | 
                } 
 | 
                if (String.isBlank(rpt.Opportunity5__c) == false) { 
 | 
                    if (opdCntMap.containsKey(rpt.Opportunity5__c)) { 
 | 
                        opdCntMap.put(rpt.Opportunity5__c, opdCntMap.get(rpt.Opportunity5__c) + 1); 
 | 
                    } else { 
 | 
                        opdCntMap.put(rpt.Opportunity5__c, 1); 
 | 
                    } 
 | 
                } else { 
 | 
                    opdCntMap.put(rpt.Opportunity5__c, 0); 
 | 
                } 
 | 
            } 
 | 
     
 | 
            for (Opportunity opp : oppList) { 
 | 
                if (opp.Num_Of_OPD__c != (opdCntMap.containsKey(opp.Id) ? opdCntMap.get(opp.Id) : 0)) { 
 | 
                    opps.add(opp); 
 | 
                    opp.Num_Of_OPD__c = opdCntMap.containsKey(opp.Id) ? opdCntMap.get(opp.Id) : 0; 
 | 
                } 
 | 
            } 
 | 
             
 | 
            if (opps.size() > 0) { 
 | 
                StaticParameter.EscapeNFM007Trigger = true; 
 | 
                StaticParameter.EscapeOpportunityBefUpdTrigger = true; 
 | 
                StaticParameter.EscapeOpportunityHpDeptUpdTrigger = true; 
 | 
                StaticParameter.EscapeSyncOpportunityTrigger = true; 
 | 
System.debug('ReportCPileUpから、商談トリガをEscape'); 
 | 
System.debug('EscapeNFM007Trigger:::::' + StaticParameter.EscapeNFM007Trigger); 
 | 
System.debug('EscapeOpportunityBefUpdTrigger:::::' + StaticParameter.EscapeOpportunityBefUpdTrigger); 
 | 
System.debug('EscapeOpportunityHpDeptUpdTrigger:::::' + StaticParameter.EscapeOpportunityHpDeptUpdTrigger); 
 | 
System.debug('EscapeSyncOpportunityTrigger:::::' + StaticParameter.EscapeSyncOpportunityTrigger); 
 | 
                ControllerUtil.updOppList(opps); 
 | 
            } 
 | 
        } 
 | 
//    } 
 | 
} 
 |