/** 
 | 
 * キャンペーンのトリガーです。 
 | 
 */ 
 | 
trigger CampaignTriggerBefIns on Campaign (before insert, before update,after insert, after update) { 
 | 
    //可以多次执行trigger,触发多次 thh 2021-11-12 start 
 | 
    // 服务技师 2018/12/24  Start 
 | 
    CampaignTriggerBefInsHandler handler = new CampaignTriggerBefInsHandler(); 
 | 
    handler.run(); 
 | 
    //可以多次执行trigger,触发多次 thh 2021-11-12 end 
 | 
    // 服务技师 2018/12/24  end 
 | 
    //CHAN-BC69RE start 减少检索 
 | 
    // キャンペーン:内部トレーニングのレコードタイプを取得 
 | 
    ID campaignRC = Schema.SObjectType.Campaign.getRecordTypeInfosByDeveloperName().get('Internal_training').getRecordTypeId(); 
 | 
     
 | 
    // キャンペーンメンバー:内部向けのレコードタイプを取得FV 
 | 
    id campaignMemberRC = 
 | 
    Schema.SObjectType.CampaignMember.getRecordTypeInfosByDeveloperName().get('Internal_training_participants').getRecordTypeId(); 
 | 
    // キャンペーンメンバー:外部向けのレコードタイプを取得 
 | 
    id campaignMemberOuterRC = 
 | 
    Schema.SObjectType.CampaignMember.getRecordTypeInfosByDeveloperName().get('Workshop').getRecordTypeId(); 
 | 
    //CHAN-BC69RE end 减少检索 
 | 
    //SWAG-BSZ3VQ 【委托】学会导致取消申请单报错 精琢技术 wql 2020/08/31 start 
 | 
    //设置只进一次trigger 
 | 
    if(!StaticParameter.EscapeCampain){ 
 | 
  
 | 
    List<Id> userIdList = new List<Id>(); 
 | 
    if (Trigger.isBefore 
 | 
     // CHAN-BAN5BS 2019/03/27 start 
 | 
     //&& Trigger.isInsert 
 | 
     // CHAN-BAN5BS 2019/03/27 end 
 | 
     ) { 
 | 
        for ( Campaign target : Trigger.New) { 
 | 
            userIdList.add(target.OwnerId); 
 | 
        } 
 | 
    } 
 | 
    Map<Id, User> userMap = new Map<Id, User>(); 
 | 
    List<user> OwnerList = New List<user>(); 
 | 
    // 服务技师 2018/12/24  Start 
 | 
    OwnerList = [SELECT Id, SalesManager__c, BuchangApprovalManagerSales__c, 
 | 
                 JingliApprovalManager__c, BuchangApprovalManager__c, ZongjianApprovalManager__c, 
 | 
                 OCM_man_province__c, Province__c 
 | 
                 FROM user WHERE id = :userIdList]; 
 | 
    // 服务技师 2018/12/24  end 
 | 
    for (User u : OwnerList) { 
 | 
        userMap.put(u.Id, u); 
 | 
    } 
 | 
    // キャンペーンのレコードタイプに応じて、キャンペーンメンバーの 
 | 
    // レコードタイプを自動的に決定します。 
 | 
    list<ID> TargetOwnerId = new list<ID>(); 
 | 
  
 | 
    if (Trigger.isBefore && Trigger.isInsert) { 
 | 
  
 | 
        for ( Campaign target : Trigger.New) { 
 | 
            target.LoadNum__c=''; //2020-10-23 zh 计划出借备品信息清空 
 | 
            if (String.isNotBlank(target.OwnerId)) { 
 | 
                TargetOwnerId.add(target.OwnerId); 
 | 
            } 
 | 
            if ( target.RecordTypeId == CampaignRC) { 
 | 
                // 内部トレーニングだった 
 | 
                target.CampaignMemberRecordTypeId = campaignMemberRC; 
 | 
            } else { 
 | 
                // 外部向けだった 
 | 
                target.CampaignMemberRecordTypeId = campaignMemberOuterRC; 
 | 
            } 
 | 
            // 经理、部长、总监审批 
 | 
            /** 
 | 
             * 服务技师 2018/12/24  Start 
 | 
             * 1、分别设置审批的经理、部长、总监是谁 
 | 
             * 2、设置服务技师的服务企划部窗口是谁 
 | 
             * 3、对应所在省为非直辖市的城市进行一一对应 
 | 
             */ 
 | 
            if (target.RecordTypeid != (ID) system.label.RecordType_CampaignService ) { 
 | 
                target.JingliApprovalManager__c = userMap.get(target.OwnerId).SalesManager__c; 
 | 
                target.BuchangApprovalManager__c = userMap.get(target.OwnerId).BuchangApprovalManagerSales__c; 
 | 
                target.ZongjianApprovalManager__c = userMap.get(target.OwnerId).ZongjianApprovalManager__c; 
 | 
            } else { 
 | 
                target.JingliApprovalManager__c = userMap.get(target.OwnerId).JingliApprovalManager__c == null ? target.OwnerId :  userMap.get(target.OwnerId).JingliApprovalManager__c; 
 | 
                target.BuchangApprovalManager__c = userMap.get(target.OwnerId).BuchangApprovalManager__c == null ? target.OwnerId :  userMap.get(target.OwnerId).BuchangApprovalManager__c; 
 | 
                target.ZongjianApprovalManager__c = userMap.get(target.OwnerId).ZongjianApprovalManager__c == null ? target.OwnerId :  userMap.get(target.OwnerId).ZongjianApprovalManager__c; 
 | 
  
 | 
                if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('1.华北')) { 
 | 
                    target.ServiceDesignDep__c = System.Label.ServiceDesignDep_NC; 
 | 
                } 
 | 
                if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('2.东北')) { 
 | 
                    target.ServiceDesignDep__c = System.Label.ServiceDesignDep_NE; 
 | 
                } 
 | 
                if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('3.西北')) { 
 | 
                    target.ServiceDesignDep__c = System.Label.ServiceDesignDep_NW; 
 | 
                } 
 | 
                if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('4.西南')) { 
 | 
                    target.ServiceDesignDep__c = System.Label.ServiceDesignDep_SW; 
 | 
                } 
 | 
                if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('5.华东')) { 
 | 
                    target.ServiceDesignDep__c = System.Label.ServiceDesignDep_EC; 
 | 
                } 
 | 
                if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('6.华南')) { 
 | 
                    target.ServiceDesignDep__c = System.Label.ServiceDesignDep_SC; 
 | 
                } else { 
 | 
                    target.ServiceDesignDep__c = System.Label.ServiceDesignDep_NC; 
 | 
                } 
 | 
                target.Society_Type__c = '区域'; 
 | 
                target.Open_scope__c = userMap.get(target.OwnerId).Province__c; 
 | 
                switch on userMap.get(target.OwnerId).Province__c { 
 | 
                    when '深圳市' { 
 | 
                        target.Open_scope__c = '广东省'; 
 | 
                    } 
 | 
                    when '大连市' { 
 | 
                        target.Open_scope__c = '辽宁省'; 
 | 
                    } 
 | 
                    when '青岛市' { 
 | 
                        target.Open_scope__c = '山东省'; 
 | 
                    } 
 | 
                    when '海南省' { 
 | 
                        target.Open_scope__c = '广东省'; 
 | 
                    } 
 | 
                    when '西藏自治区' { 
 | 
                        target.Open_scope__c = '四川省'; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
  
 | 
            // 服务技师 2018/12/24  end 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    if (Trigger.isBefore && Trigger.isUpdate) { 
 | 
        List<String> CampaignId = new List<String>(); 
 | 
        for ( Campaign campaign : Trigger.New) { 
 | 
            //判断状态变更时,才走更新的逻辑 SWAG-BSZ3VQ 【委托】学会导致取消申请单报错 精琢技术 wql start 
 | 
            //服务企划部窗口 只有新建的时候会设置 根据会议的8个审批流进行判断· 
 | 
            Campaign oldC = Trigger.oldMap.get(campaign.Id); 
 | 
            if(oldC.Status != Campaign.Status || Campaign.Status== '草案中' 
 | 
             ||Campaign.Status== '计划提交' ||Campaign.Status=='报告提交' || Campaign.Status=='取消申请中' 
 | 
             ||Campaign.Status=='时间修改申请中'||oldC.CostStatus__c != Campaign.CostStatus__c 
 | 
             ||Campaign.CostStatus__c=='费用已提交'){ 
 | 
                // CHAN-BAN5BS 2019/03/27 start 
 | 
                if (campaign.RecordTypeid != (ID) system.label.RecordType_CampaignService ) { 
 | 
                    campaign.JingliApprovalManager__c = userMap.get(campaign.OwnerId).SalesManager__c; 
 | 
                    campaign.BuchangApprovalManager__c = userMap.get(campaign.OwnerId).BuchangApprovalManagerSales__c; 
 | 
                    campaign.ZongjianApprovalManager__c = userMap.get(campaign.OwnerId).ZongjianApprovalManager__c; 
 | 
                }else { 
 | 
                    campaign.JingliApprovalManager__c = userMap.get(campaign.OwnerId).JingliApprovalManager__c == null ? campaign.OwnerId :  userMap.get(campaign.OwnerId).JingliApprovalManager__c; 
 | 
                    campaign.BuchangApprovalManager__c = userMap.get(campaign.OwnerId).BuchangApprovalManager__c == null ? campaign.OwnerId :  userMap.get(campaign.OwnerId).BuchangApprovalManager__c; 
 | 
                    campaign.ZongjianApprovalManager__c = userMap.get(campaign.OwnerId).ZongjianApprovalManager__c == null ? campaign.OwnerId :  userMap.get(campaign.OwnerId).ZongjianApprovalManager__c; 
 | 
                } 
 | 
                // CHAN-BAN5BS 2019/03/27 end 
 | 
  
 | 
                //SWAG-B3U63C 2018/8/21 更新 OCM管理省的备品助理(提醒借用备品用) start 
 | 
                if (String.isNotBlank(campaign.OwnerId)) { 
 | 
                    TargetOwnerId.add(campaign.OwnerId); 
 | 
                } 
 | 
                //SWAG-B3U63C 2018/8/21 更新 OCM管理省的备品助理(提醒借用备品用) end 
 | 
  
 | 
                Campaign old = Trigger.oldMap.get(campaign.Id); 
 | 
                if (campaign.Status != old.Status && campaign.Status == '取消申请中') { 
 | 
                    CampaignId.add(campaign.Id); 
 | 
                } 
 | 
            } 
 | 
            //判断状态变更时,才走更新的逻辑 SWAG-BSZ3VQ 【委托】学会导致取消申请单报错 精琢技术 wql end 
 | 
        } 
 | 
        //wwp   减少SQL的使用                2021/08/26      start 
 | 
        if(CampaignId != null && CampaignId.size() > 0){ 
 | 
            String userId = UserInfo.getUserId(); 
 | 
            List<user> Useracc = New List<user>(); 
 | 
            Useracc = [SELECT Id, ZongjianApprovalManager__c, BuchangApprovalManager__c FROM user WHERE id = :userId]; 
 | 
            if(Useracc.size() > 0){ 
 | 
                for(String cId : CampaignId){ 
 | 
                    Trigger.newMap.get(cId).ZongjianApprovalManager_CancleShen__c = Useracc[0].ZongjianApprovalManager__c; 
 | 
                    Trigger.newMap.get(cId).BuchangApprovalManager_CancleShen__c = Useracc[0].BuchangApprovalManager__c; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        //wwp   减少SQL的使用                2021/08/26      end 
 | 
    } 
 | 
  
 | 
    if (TargetOwnerId.size() > 0 ) { 
 | 
        //SWAG-B3U63C 2018/8/21 更新 OCM管理省的备品助理(提醒借用备品用) start 
 | 
  
 | 
        list<User> users = [select id, OCM_man_province_Rental__c 
 | 
                            //OBPM 增加展示平台窗口LY 20211224 start 
 | 
                            ,OCM_man_province__c 
 | 
                            //OBPM 增加展示平台窗口LY 20211224 end 
 | 
                            from User where id in :TargetOwnerId]; 
 | 
        //list<string> OCM_man_province_RentalName = new list<string>(); 
 | 
        //OBPM 增加展示平台窗口LY 20211224 start 
 | 
        Map<ID, User> userProvinceMap = new Map<ID, User>(); 
 | 
        //OBPM 增加展示平台窗口LY 20211224 end 
 | 
        if (users.size() > 0) { 
 | 
            for (User temUser : users ) { 
 | 
                //OCM_man_province_RentalName.add(temUser.OCM_man_province_Rental__c); 
 | 
                //OBPM 增加展示平台窗口LY 20211224 start 
 | 
                userProvinceMap.put(temUser.Id,temUser); 
 | 
                //OBPM 增加展示平台窗口LY 20211224 end 
 | 
            } 
 | 
        } 
 | 
         
 | 
        // Map<string, ID> OCM_Management_ProvinceMap = new Map<string, ID>(); 
 | 
        //OBPM 增加展示平台窗口LY 20211224 start 
 | 
        Map<string, OCM_Management_Province__c> ocsmMap = new Map<string, OCM_Management_Province__c>(); 
 | 
        List<OCM_Management_Province__c> temOCMList =[select ID, Name, Admin_assistant__c, 
 | 
                    OnlinePlatformWindow1__c, 
 | 
                    OnlinePlatformWindow2__c, 
 | 
                    OnlinePlatformWindow3__c 
 | 
                    from OCM_Management_Province__c];      
 | 
        //OBPM 增加展示平台窗口LY 20211224 end 
 | 
        // if (users.size() > 0) { 
 | 
        //     for (OCM_Management_Province__c temOCMMP : [select ID, Name, Admin_assistant__c 
 | 
        //             from OCM_Management_Province__c 
 | 
        //             where Name in: OCM_man_province_RentalName]) { 
 | 
        //         OCM_Management_ProvinceMap.put(temOCMMP.Name, temOCMMP.Admin_assistant__c); 
 | 
        //     } 
 | 
        // } 
 | 
        if (temOCMList.size()>0) { 
 | 
            for (OCM_Management_Province__c ocmTemp :temOCMList) { 
 | 
                ocsmMap.put(ocmTemp.Name, ocmTemp); 
 | 
            } 
 | 
        } 
 | 
        // map<ID, ID> UserToAdmin_assistantMap = new map<ID, ID>(); 
 | 
        // for (User temUser : users ) { 
 | 
        //     UserToAdmin_assistantMap.put(temUser.id, OCM_Management_ProvinceMap.get(temUser.OCM_man_province_Rental__c)); 
 | 
  
 | 
        // } 
 | 
        for ( Campaign target : Trigger.New) { 
 | 
            // ID Admin_assistantID = UserToAdmin_assistantMap.get(target.OwnerId); 
 | 
            // target.OCM_MP_Admin_assistant__c = Admin_assistantID; 
 | 
            target.OCM_MP_Admin_assistant__c = userProvinceMap.get(target.OwnerId) != null && ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province_Rental__c) != null ? ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province_Rental__c).Admin_assistant__c : null; 
 | 
            target.OnlinePlatformWindow1__c = userProvinceMap.get(target.OwnerId) != null && ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c) != null ? ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c).OnlinePlatformWindow1__c : null; 
 | 
            target.OnlinePlatformWindow2__c = userProvinceMap.get(target.OwnerId) != null && ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c) != null ? ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c).OnlinePlatformWindow2__c : null; 
 | 
            target.OnlinePlatformWindow3__c = userProvinceMap.get(target.OwnerId) != null && ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c) != null ? ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c).OnlinePlatformWindow3__c : null; 
 | 
        } 
 | 
  
 | 
        //SWAG-B3U63C 2018/8/21 更新 OCM管理省的备品助理(提醒借用备品用) end 
 | 
    } 
 | 
     
 | 
        //设置跳过学会·培训trigger 
 | 
        StaticParameter.EscapeCampain =true; 
 | 
        //SWAG-BSZ3VQ 【委托】学会导致取消申请单报错 精琢技术 wql 2020/08/31 end 
 | 
    } 
 | 
    //SWAG-BSW9CP 【委托】紧急-南方分割申请单出现报错 精琢技术wql 2020/08/28 end 
 | 
  
 | 
    //LJPH-BSMB3M <委托>新疆领导无法审批当地OJT报告 精琢技术 wql 2020/08/19  start 
 | 
    if(!StaticParameter.shareToOSCMFlag){ 
 | 
            if ((Trigger.isAfter && Trigger.isUpdate) ||(Trigger.isAfter && Trigger.isInsert)  ) { 
 | 
                //共享 
 | 
                shareToOSCM(); 
 | 
                StaticParameter.shareToOSCMFlag =true; 
 | 
        } 
 | 
    } 
 | 
     
 | 
  
 | 
     // 共享给经理 を取得、CampaignShareに設定(Read) 
 | 
    private void shareToOSCM() {  
 | 
         
 | 
        //存放(学会id,共享对象) 
 | 
        //Map<Id,CampaignShare> insertMap = new Map<Id,CampaignShare>(); 
 | 
        Map<Id,List<CampaignShare>> insertMap = new Map<Id,List<CampaignShare>>(); 
 | 
        //存放最后需要新增的共享数据 
 | 
        List<CampaignShare> lastInsertList = new List<CampaignShare>(); 
 | 
        //存放已有的相同的共享原因的数据 
 | 
        List<Id> deleteTargetAOIdList = new List<Id>(); 
 | 
        //存放用于的id 
 | 
        List<Id> userIdList = new List<Id>(); 
 | 
        String rowCause = 'Manual'; 
 | 
        //新增一个共享原因 
 | 
        // String rowCause = Schema.CampaignShare.RowCause.shareToUser__c; 
 | 
        System.debug('rowCause:'+rowCause); 
 | 
        String ownerCause = 'Owner'; 
 | 
        //Apex共有の理由名shareToUser 
 | 
        for(Campaign nObj : Trigger.new) { 
 | 
            System.debug('经理:'+nObj.JingliApprovalManager__c); 
 | 
            //存放用于新增的共享数据 
 | 
            List<CampaignShare> insertList = new List<CampaignShare>(); 
 | 
            if(nObj.JingliApprovalManager__c != null){ 
 | 
  
 | 
                //SFDC-C54AWQ  【委托】 【phase5上线课题65】-紧急-审批备品申请时提示“保存记录时发生验证错误”  wql 2021/07/20 start 
 | 
                //用户是否启用 
 | 
                CampaignShare aos = null; 
 | 
                CampaignShare aos1 = null; 
 | 
                if(nObj.JingliIsActive__c ==true){ 
 | 
                    //存放经理 
 | 
                    aos = new CampaignShare( 
 | 
                        RowCause = rowCause, 
 | 
                        CampaignId = nObj.Id, 
 | 
                        UserOrGroupId = nObj.JingliApprovalManager__c, 
 | 
                        CampaignAccessLevel = 'Edit'); 
 | 
                    //存放要新增的共享数据 
 | 
                    insertList.add(aos); 
 | 
                } 
 | 
                //用户是否启用 
 | 
                if(nObj.BuZhangIsActive__c==true){ 
 | 
                    //存放部长 
 | 
                    aos1 = new CampaignShare( 
 | 
                        RowCause = rowCause, 
 | 
                        CampaignId = nObj.Id, 
 | 
                        UserOrGroupId = nObj.BuchangApprovalManager__c, 
 | 
                        CampaignAccessLevel = 'Edit'); 
 | 
                    //如果经理部长不相等 则需要共享部长 否则共享给一个人就行了 
 | 
                    if(nObj.Is_JingliEqualBuzhang__c ==false){ 
 | 
                        insertList.add(aos1); 
 | 
                        userIdList.add(nObj.BuchangApprovalManager__c); 
 | 
                    } 
 | 
                } 
 | 
                //SFDC-C54AWQ  【委托】 【phase5上线课题65】-紧急-审批备品申请时提示“保存记录时发生验证错误”  wql 2021/07/20 end 
 | 
                System.debug('key:'+nObj.Id); 
 | 
                //存放(学会id,共享对象); 
 | 
                //insertMap.put(nObj.Id,aos); 
 | 
                System.debug('insertList:'+insertList); 
 | 
                insertMap.put(nObj.Id,insertList); 
 | 
                 
 | 
                //存放已有的相同的共享原因的数据 
 | 
                deleteTargetAOIdList.add(nObj.Id); 
 | 
                //存放用于的id 
 | 
                userIdList.add(nObj.JingliApprovalManager__c); 
 | 
            } 
 | 
         }    
 | 
         System.debug('insertMap:'+insertMap);   
 | 
        if(deleteTargetAOIdList.size()>0){ 
 | 
            List<CampaignShare> deleteList = [SELECT Id FROM CampaignShare WHERE RowCause = :rowCause AND CampaignId IN :deleteTargetAOIdList]; 
 | 
            // 先 Delete 后 Insert 
 | 
            if(deleteList.size() > 0){ 
 | 
                delete deleteList; 
 | 
            } 
 | 
        } 
 | 
         
 | 
  
 | 
        //判断需要共享的人  是不是创建人 如果是则说明有一条这个人的owner数据 则不新增 
 | 
        if (insertMap!= null) { 
 | 
            List<CampaignShare> ownerList = [SELECT Id,CampaignId,UserOrGroupId 
 | 
                FROM CampaignShare 
 | 
                WHERE RowCause = :ownerCause 
 | 
                  AND CampaignId IN :insertMap.keySet() 
 | 
                  AND UserOrGroupId IN : userIdList 
 | 
            ]; 
 | 
            System.debug('ownerList:'+ownerList); 
 | 
            if(ownerList.size() > 0){ 
 | 
                for( CampaignShare  inq:ownerList){ 
 | 
                    String id = String.valueOf(inq.CampaignId); 
 | 
                    System.debug('id:'+id); 
 | 
                    if(insertMap.containsKey(id)){ 
 | 
                        insertMap.remove(inq.CampaignId); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
             
 | 
        } 
 | 
  
 | 
        //如果map为空的话,则说明不用新增,已经共享给所有人了 
 | 
        if(insertMap != null){ 
 | 
            for(List<CampaignShare> qscrsList:insertMap.values()){ 
 | 
                for(CampaignShare qscrs : qscrsList){ 
 | 
                    lastInsertList.add(qscrs); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        System.debug('共享内容:' +lastInsertList); 
 | 
        if(lastInsertList.size() > 0){ 
 | 
            insert lastInsertList; 
 | 
        } 
 | 
  
 | 
    } 
 | 
    //LJPH-BSMB3M <委托>新疆领导无法审批当地OJT报告 精琢技术 wql 2020/08/19  end 
 | 
     
 | 
} 
 |