/** 
 | 
 * Opportunity作成後(コピー)、triggerにて集計項目をnullにする 
 | 
 * 商談の「外貿/内貿」と「通貨」の値が一致させるトリガーです。 
 | 
 * 商談の所有者【システム】に所有者のIdを入れる 
 | 
 * OpportunityBefInsUpdTriggerTest 
 | 
 */ 
 | 
trigger OpportunityBefUpd on Opportunity (before insert, before update) { 
 | 
  
 | 
    List<String> idlist = new List<String>(); 
 | 
    if(Trigger.isInsert){ 
 | 
        //询价担当人和战略科室担当人不一致,在这里同步 20170512 XFUU-ALB9JK 
 | 
        if(Trigger.isBefore){ 
 | 
            for(Opportunity ops : Trigger.new){ 
 | 
                if (ops.ownerid != ops.Custmor_pic_ID__c && 
 | 
                    ops.owner_not_automatically_update__c == false && 
 | 
                    ops.Custmor_pic_ID__c != null && 
 | 
                    ops.AccountType__c != system.label.Account_Type_Name_Agency && 
 | 
                    ops.Custmor_pic_IsActive__c == true){ 
 | 
                    System.debug('Anydatatype_msg' + ops.Custmor_pic_ID__c); 
 | 
                    ops.ownerid = ops.Custmor_pic_ID__c; 
 | 
                } 
 | 
                //if(ops.State_Owner__c == '能量') ops.STMS_Package_Sale__c = true; 
 | 
            } 
 | 
        } 
 | 
        if(Trigger.isAfter){ 
 | 
            /*List<Opportunity> opList = Trigger.new.clone(); 
 | 
            if(opList.size()==1){ 
 | 
                for(Opportunity op : opList ){ 
 | 
                    if(op.Old_Opportunity_ID__c !=null){ 
 | 
                        String ResultStr = ControllerUtil.CopyQuoteFromOppor(op.Old_Opportunity_ID__c,op.Opportunity_No__c,op.Id,op); 
 | 
                        System.debug('2333333333'+ResultStr); 
 | 
                    } 
 | 
                } 
 | 
            }*/ 
 | 
        } 
 | 
    }else if(Trigger.isUpdate){ 
 | 
    //询价担当人和战略科室担当人不一致,在这里同步 20170512 XFUU-ALB9JK 
 | 
    ////ops.AccountType__c != system.label.Account_Type_Name && 
 | 
    if(Trigger.isBefore){ 
 | 
        // List<String> opIds = new List<String>(); 
 | 
  
 | 
        // List<String> acs = new List<String>(); 
 | 
        for(Opportunity ops : Trigger.new){ 
 | 
            if (ops.ownerid != ops.Custmor_pic_ID__c && 
 | 
                ops.owner_not_automatically_update__c == false && 
 | 
                ops.Custmor_pic_ID__c != null && 
 | 
                ops.AccountType__c != system.label.Account_Type_Name_Agency && 
 | 
                ops.Custmor_pic_IsActive__c == true){ 
 | 
                System.debug('Anydatatype_msg' + ops.Custmor_pic_ID__c); 
 | 
                ops.ownerid = ops.Custmor_pic_ID__c; 
 | 
            } 
 | 
            //if(ops.State_Owner__c == '能量') ops.STMS_Package_Sale__c = true; 
 | 
            // opIds.add(ops.Id); 
 | 
            // acs.add(ops.) 
 | 
  
 | 
            //2022-3-29 yjk SWAG-CCL6R7 
 | 
            Opportunity oldOne = Trigger.oldMap.get(ops.id); 
 | 
            if(oldOne.Bidding_Project_Name_Bid__c==null  && ops.Bidding_Project_Name_Bid__c !=null ){ 
 | 
                List<Tender_information__c> ticList = [select id,ResultDate__c from Tender_information__c where id = :ops.Bidding_Project_Name_Bid__c]; 
 | 
                 
 | 
                ops.Closing_Bid_Date__c = ticList.size() == 1? ticList.get(0).ResultDate__c : null ; 
 | 
  
 | 
            } 
 | 
        } 
 | 
        // System.debug('====================='+opIds); 
 | 
        // //在询价触发器里改这个验证,排除备品状态是取消的,只要是有备品,就不允许更改最终用户。 
 | 
  
 | 
        // //1.从询价中把Id拿出来 
 | 
  
 | 
        // //2.从询价Id中查询备品状态不为取消(状态不为取消且询价中有备品的话,就报错) 
 | 
        // List<Rental_Apply__c> raList = [Select Id,Follow_UP_Opp__c From Rental_Apply__c Where Status__c != '取消' and Follow_UP_Opp__c IN :opIds]; 
 | 
        // System.debug('--------------aaaaaaaaaaaaaaaaaaaaaa'+raList); 
 | 
        // //3.将其(每个询价对应的备品)放入map中 
 | 
        // Map<String,List<Rental_Apply__c>> raMap = new Map<String,List<Rental_Apply__c>>(); 
 | 
        // for (Rental_Apply__c ra : raList) { 
 | 
        //     if(raMap.get(ra.Follow_UP_Opp__c) != null){ 
 | 
        //         raMap.get(ra.Follow_UP_Opp__c).add(ra); 
 | 
        //         System.debug('---------'+raMap.get(ra.Follow_UP_Opp__c)); 
 | 
        //     }else{ 
 | 
        //         List<Rental_Apply__c> raChildList = new  List<Rental_Apply__c>(); 
 | 
        //         raChildList.add(ra); 
 | 
        //         raMap.put(ra.Follow_UP_Opp__c,raChildList); 
 | 
        //         System.debug(raMap); 
 | 
        //     } 
 | 
        // } 
 | 
        // //4.通过for循环用Id进行对比,如果备品状态不为取消,则报错 
 | 
        // for (String opId : opIds) { 
 | 
        //     if(raMap.get(opId).size()>0){ 
 | 
        //         // ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'Error: Invalid Input.'); 
 | 
        //         // ApexPages.addMessage(myMsg); 
 | 
        //         Account.addError('由于该询价关联有备品,更改客户名会产生影响'); 
 | 
        //     }    
 | 
        // } 
 | 
    } 
 | 
    //如果询价编码变动,则报价编码一起变动 
 | 
        if(Trigger.isAfter){ 
 | 
            /*List<id> updateQuoteOppoid = new List<id>(); 
 | 
            List<String> updateSodOppoid = new List<String>(); 
 | 
            for(Opportunity ops : Trigger.new){ 
 | 
                Opportunity oldOne = Trigger.oldMap.get(ops.id); 
 | 
                Opportunity newOne = Trigger.newMap.get(ops.id); 
 | 
                if(oldOne.Opportunity_No__c != newOne.Opportunity_No__c){ 
 | 
                    updateQuoteOppoid.add(ops.id); 
 | 
                } 
 | 
            } 
 | 
            if(updateQuoteOppoid.size()>0){ 
 | 
                ControllerUtil.ResetQuoteNo(updateQuoteOppoid); 
 | 
            } 
 | 
            //如果特定字段发生变化,触发以下事件(仅限单一事件) 
 | 
            for(Opportunity ops : Trigger.new){ 
 | 
                Opportunity oldOne = Trigger.oldMap.get(ops.id); 
 | 
                Opportunity newOne = Trigger.newMap.get(ops.id); 
 | 
                if( (oldOne.S_Install_Date__c != newOne.S_Install_Date__c && oldOne.S_Install_Date__c == null)|| 
 | 
                        (oldOne.SI_FinishedPorj_Date__c != newOne.SI_FinishedPorj_Date__c && oldOne.SI_FinishedPorj_Date__c == null 
 | 
                    )){ 
 | 
                    updateSodOppoid.add(ops.id); 
 | 
                } 
 | 
            } 
 | 
            if(updateSodOppoid.size()>0){ 
 | 
                ISO_DemandOperAndDemonsController.synchronousSodWithOppor(updateSodOppoid); 
 | 
            }*/ 
 | 
        } 
 | 
    } 
 | 
  
 | 
    //付晓坤 2021-1-13 在询价触发器里改这个验证,排除备品状态是取消的,只要是有备品,就不允许更改最终用户  Start 
 | 
    if(Trigger.isBefore&&Trigger.isUpdate){ 
 | 
        //1.从询价中把Id拿出来 
 | 
        List<String> opIds = new List<String>(); 
 | 
        List<Rental_Apply__c> raList = new List<Rental_Apply__c>(); 
 | 
        for(Opportunity ops : Trigger.new){ 
 | 
            //客户名改变以后才执行下面的操作 
 | 
            if(Trigger.oldMap.get(ops.Id).AccountId != ops.AccountId && ops.RecordTypeId != '01210000000QekP' && ops.StageName!= '目標'){ 
 | 
                opIds.add(ops.Id); 
 | 
            } 
 | 
        } 
 | 
        if(opIds.size()>0){ 
 | 
            //对于系统管理员,只存在取消和完了的备品,允许更改。 
 | 
            if(UserInfo.getProfileId() != System.Label.ProfileId_SystemAdmin && UserInfo.getProfileId() != System.Label.ProfileId_SystemAdminGPI){ 
 | 
        //2.从询价Id中查询备品状态不为取消(状态不为取消且询价中有s备品的话,就报错)     
 | 
                raList = [Select Id,Follow_UP_Opp__c From Rental_Apply__c Where RA_Status_Text__c != '取消' and Follow_UP_Opp__c IN :opIds]; 
 | 
            }else{ 
 | 
        //2.从询价Id中查询备品状态不为取消(状态不为取消且询价中有s备品的话,就报错)     
 | 
                //20220307 lt update and RA_Status_Text__c != '草案中'  SWAG-CBXCYR 【委托】医院合并数据转移问题 
 | 
                raList = [Select Id,Follow_UP_Opp__c From Rental_Apply__c Where RA_Status_Text__c != '取消' and RA_Status_Text__c != '完了' and RA_Status_Text__c != '草案中' and Follow_UP_Opp__c IN :opIds];    
 | 
            } 
 | 
            //3.将其(每个询价对应的备品)放入map中 
 | 
            Map<String,Rental_Apply__c> raMap = new Map<String,Rental_Apply__c>(); 
 | 
            for (Rental_Apply__c ra : raList) { 
 | 
                raMap.put(ra.Follow_UP_Opp__c,ra); 
 | 
            } 
 | 
        //判断询价中是否有备品,老的客户不等于新的客户    
 | 
            for(Opportunity opps : Trigger.new){ 
 | 
            //4.通过for循环用Id进行对比,如果备品状态不为取消,则报错 
 | 
                if(raMap.containsKey(opps.Id)){ 
 | 
                    opps.AccountId.addError('询价:'+opps.Opportunity_No__c+'有关联备品申请,如果修改客户将影响备品回库'); 
 | 
                } 
 | 
            } 
 | 
        }  
 | 
    } 
 | 
    //付晓坤 2021-1-13 在询价触发器里改这个验证,排除备品状态是取消的,只要是有备品,就不允许更改最终用户  End 
 | 
     
 | 
    //q.Quote_No__c = opp.Opportunity_No__c + '-' + oppNo; 
 | 
    system.debug('服务器侦错:other'); 
 | 
    if (StaticParameter.EscapeOpportunityBefUpdTrigger) { 
 | 
System.debug('Escape、EscapeOpportunityBefUpdTrigger:::::' + StaticParameter.EscapeOpportunityBefUpdTrigger); 
 | 
        return; 
 | 
    } 
 | 
     
 | 
    Opportunity newTarget = null; 
 | 
    List<Id> quoteIds = new List<Id>(); 
 | 
     
 | 
     //市(文本)値設定のため、データを検索 
 | 
    List<String> oppIds = new List<String>(); 
 | 
     
 | 
    List<String> hosIds = new List<String>(); 
 | 
    List<String> ownerIds = new List<String>(); 
 | 
    for(Opportunity opp : Trigger.new){ 
 | 
        hosIds.add(opp.Hospital__c); 
 | 
        ownerIds.add(opp.OwnerId); 
 | 
    } 
 | 
    //List<Account> hospitallist = [select id,Name,State_Master__r.Sales_assistant__r.Id,State_Master__r.Energy_Assistant__r.Id from Account where id in :hosIds]; 
 | 
    //List<Account> hospitallist = [select id, Name, OCM_Management_Province__r.GI_assistant__c, OCM_Management_Province__r.SP_assistant__c, OCM_Management_Province__r.Energy_assistant__c from Account where id in :hosIds]; 
 | 
    //Map<String,Account> hospitalMap = new Map<String,Account>(); 
 | 
     
 | 
    //for(Account acc : hospitallist){ 
 | 
    //  hospitalMap.put(acc.id, acc); 
 | 
    //} 
 | 
     
 | 
    // 20210623 SQL优化 Start 
 | 
    // List<OCM_Management_Province__c> mpList = [select id, Name, GI_assistant__c, SP_assistant__c, Energy_assistant__c from OCM_Management_Province__c]; 
 | 
    // Map<String, OCM_Management_Province__c> mpMap = new Map<String, OCM_Management_Province__c>(); 
 | 
    // for (OCM_Management_Province__c mp : mpList) { 
 | 
    //     mpMap.put(mp.Name, mp); 
 | 
    // } 
 | 
    Map<String, OCM_Management_Province__c> mpMap = new Map<String, OCM_Management_Province__c>(); 
 | 
    List<OCM_Management_Province__c> mpList = new List<OCM_Management_Province__c>(); 
 | 
    if (trigger.isBefore && (trigger.isInsert || trigger.isUpdate)) { 
 | 
        mpList = [select id, Name, GI_assistant__c, SP_assistant__c, Energy_assistant__c from OCM_Management_Province__c]; 
 | 
    } 
 | 
    for (OCM_Management_Province__c mp : mpList) { 
 | 
        mpMap.put(mp.Name, mp); 
 | 
    } 
 | 
    // 20210623 SQL优化 End 
 | 
     
 | 
    // 20210623 SQL优化 Start 
 | 
    // Map<String, String> ownerUserMap = new Map<String, String>(); 
 | 
    // List<User> owerUser = [select id,Dept__c from User where id in :ownerIds]; 
 | 
    // for (User u : owerUser) { 
 | 
    //     ownerUserMap.put(u.id, u.Dept__c); 
 | 
    // } 
 | 
    // 20210623 SQL优化 End 
 | 
  
 | 
    for (Opportunity opp : Trigger.new) { 
 | 
        if (Trigger.isInsert && Trigger.isBefore) { 
 | 
            // Opportunity作成後(コピー)、triggerにて集計項目をnullにする 
 | 
            opp.Num_Of_NTC__c = null; 
 | 
            opp.Num_Of_OPD__c = null; 
 | 
            opp.Visit_President_Count__c = null; 
 | 
            opp.Visit_Head_Doctor_Count__c = null; 
 | 
            opp.Xin_Gross_Follow_Num__c = null; 
 | 
        } 
 | 
        if (!String.isBlank(opp.Id)) { 
 | 
            oppIds.add(opp.Id); 
 | 
        } 
 | 
        // OLY_OCM-185_149P 询价管理改善方案 询价提醒人自动设置 
 | 
        if (trigger.isBefore && (trigger.isInsert || trigger.isUpdate)) { 
 | 
            Opportunity old = trigger.oldMap == null ? null : trigger.oldMap.get(opp.Id); 
 | 
            //add by rentx 20210713 start 设置招投标阶段状态 
 | 
            if (Trigger.isInsert || (old != null && old.Bidding_Project_Name_Bid__c == null && opp.Bidding_Project_Name_Bid__c != null)) { 
 | 
                opp.InfoTypeBid_text__c = opp.InfoTypeBid__c; 
 | 
            } 
 | 
            //add by rentx 20210713 end 设置招投标阶段状态 
 | 
            Opp.ShippingDate_For_Report__c = opp.Shipping_Date_For_Report__c; //日期(业绩统计用) 
 | 
            //Account hospital = HospitalMap.get(opp.Hospital__c); 
 | 
            OCM_Management_Province__c mp = mpMap.get(opp.OCM_man_province_no_eng__c); 
 | 
            opp.Manager_name_text__c = opp.Sales_manager_departmentID__c; // 询价所有人的经理(文本) 
 | 
            if (trigger.isInsert || opp.Last_alert_to_user_update__c != old.Last_alert_to_user_update__c 
 | 
                || opp.OwnerId != old.OwnerId 
 | 
                || String.isBlank(opp.Sales_assistant_name_text__c) 
 | 
                ) { 
 | 
/*              if(hospital != null){ 
 | 
                    if(owerUser.size() > 0 && ownerUserMap.get(opp.OwnerId) == '能量事业本部') { 
 | 
                        //User u = owerUser.get(0); 
 | 
                        //if(u.Dept__c=='能量事业本部') { 
 | 
                            //opp.Sales_assistant_name_text__c = hospital.State_Master__r.Energy_Assistant__r.Id; // 询价助理(文本) 
 | 
                            opp.Sales_assistant_name_text__c = hospital.OCM_Management_Province__r.Energy_assistant__c; 
 | 
                        //} else { 
 | 
                        //    opp.Sales_assistant_name_text__c = hospital.State_Master__r.Sales_assistant__r.Id; // 询价助理(文本) 
 | 
                        //} 
 | 
                    } else { 
 | 
                        //opp.Sales_assistant_name_text__c = hospital.State_Master__r.Sales_assistant__r.Id; // 询价助理(文本) 
 | 
                        if (opp.Opportunity_Category__c == 'GI' || opp.Opportunity_Category__c == 'BF' || opp.Opportunity_Category__c == 'ET') { 
 | 
                            opp.Sales_assistant_name_text__c = hospital.OCM_Management_Province__r.GI_assistant__c; 
 | 
                        } else { 
 | 
                            opp.Sales_assistant_name_text__c = hospital.OCM_Management_Province__r.SP_assistant__c; 
 | 
                        } 
 | 
                    } 
 | 
                }*/ 
 | 
                if (mp != null) { 
 | 
                    if (opp.OCM_man_province__c == '能量') { 
 | 
                        opp.Sales_assistant_name_text__c = mp.Energy_assistant__c; 
 | 
                    } else { 
 | 
                        if (opp.Opportunity_Category__c == 'GI' || opp.Opportunity_Category__c == 'BF' || opp.Opportunity_Category__c == 'ET') { 
 | 
                            opp.Sales_assistant_name_text__c = mp.GI_assistant__c; 
 | 
                        } else { 
 | 
                            opp.Sales_assistant_name_text__c = mp.SP_assistant__c; 
 | 
                        } 
 | 
                    } 
 | 
                } 
 | 
                if (opp.Owner_Salesdepartment__c == '1.华北') { 
 | 
                    opp.Sales_window_text__c = System.label.Sales_Window_HB; // 销售部窗口(文本) 
 | 
                } else if (opp.Owner_Salesdepartment__c == '2.东北') { 
 | 
                    opp.Sales_window_text__c = System.label.Sales_Window_DB; 
 | 
                } else if (opp.Owner_Salesdepartment__c == '3.西北') { 
 | 
                    opp.Sales_window_text__c = System.label.Sales_Window_XB; 
 | 
                } else if (opp.Owner_Salesdepartment__c == '5.华东') { 
 | 
                    opp.Sales_window_text__c = System.label.Sales_Window_HD; 
 | 
                } else if (opp.Owner_Salesdepartment__c == '6.华南') { 
 | 
                    opp.Sales_window_text__c = System.label.Sales_Window_HN; 
 | 
                } else if (opp.Owner_Salesdepartment__c == '4.西南') { 
 | 
                    opp.Sales_window_text__c = System.label.Sales_Window_XN; 
 | 
                } else { 
 | 
                    opp.Sales_window_text__c = null; 
 | 
                } 
 | 
            } 
 | 
  
 | 
            if ((Trigger.isInsert || Trigger.oldMap.get(opp.Id).get('SAP_Send_OK__c') == false) && opp.SAP_Send_OK__c == true) { 
 | 
                opp.Sales_assistantWIN_ID__c = UserInfo.getUserId(); 
 | 
                opp.Sales_assistantWIN_Mail__c = UserInfo.getUserEmail(); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
    List<Opportunity> accOpps = ControllerUtil.oppSelectForCity(oppIds); 
 | 
    Map<String, String> oppRtMaps = new Map<String, String>(); 
 | 
    Map<String, String> oppCmMaps = new Map<String, String>(); 
 | 
    for (Opportunity opp : accOpps) { 
 | 
        // 病院 
 | 
        if (opp.Account.Parent.Parent.RecordTypeId == '01210000000QemGAAS') { 
 | 
            oppRtMaps.put(opp.Id, opp.Account.Parent.Parent.RecordTypeId); 
 | 
            oppCmMaps.put(opp.Id, opp.Account.Parent.Parent.City_Master__r.Name); 
 | 
        } 
 | 
        // 販売店 
 | 
        else if (opp.Account.Parent.RecordTypeId == '01210000000Qem1AAC') { 
 | 
            oppRtMaps.put(opp.Id, opp.Account.Parent.RecordTypeId); 
 | 
            oppCmMaps.put(opp.Id, opp.Account.City_Master__r.Name); 
 | 
        } 
 | 
    } 
 | 
     
 | 
    for ( Integer i = 0; i < Trigger.New.size(); i++) { 
 | 
        newTarget = Trigger.New[i]; 
 | 
        // 古いデータの更新をスルー 
 | 
        if (Trigger.isUpdate) { 
 | 
            Boolean noChange = false; 
 | 
            for (String colApiName : ControllerUtil.oppColumnList) { 
 | 
                colApiName = colApiName.trim(); 
 | 
                if (newTarget.oldData_flg__c &&  
 | 
                        Trigger.oldMap.get(newTarget.Id).get(colApiName) != Trigger.newMap.get(newTarget.Id).get(colApiName)) { 
 | 
                    noChange = true; 
 | 
                    break; 
 | 
                } 
 | 
            } 
 | 
            if (noChange) { 
 | 
                newTarget.addError('不能修改旧数据'); 
 | 
                continue; 
 | 
            } 
 | 
        } 
 | 
         
 | 
        if ( newTarget.DetailNum__c == 0) { 
 | 
            newTarget.CurrencyIsoCode = newTarget.Trade__c == '外貿' ? 'USD' : 'CNY'; 
 | 
        } 
 | 
        else { 
 | 
            newTarget.Trade__c = newTarget.CurrencyIsoCode == 'CNY' ? '内貿' : '外貿'; 
 | 
        } 
 | 
         
 | 
        newTarget.Owner_System__c = newTarget.OwnerId; 
 | 
         
 | 
        // 市(文本)の値を設定 
 | 
        // WFにて二回実行、二回目はIDがある 
 | 
        if (!String.isBlank(newTarget.Id) && oppRtMaps.containsKey(newTarget.Id) 
 | 
                && (oppRtMaps.get(newTarget.Id) == '01210000000QemGAAS' || oppRtMaps.get(newTarget.Id) == '01210000000Qem1AAC')) { 
 | 
            newTarget.City_Text__c = oppCmMaps.get(newTarget.Id); 
 | 
        } 
 | 
         
 | 
        if (Trigger.isUpdate 
 | 
                && Trigger.oldMap.get(newTarget.Id).get('Estimation_Decision__c') != newTarget.Estimation_Decision__c 
 | 
                && newTarget.Estimation_Decision__c == false) { 
 | 
            // Estimation_Id__c より、 
 | 
            if (newTarget.Estimation_Id__c != null && newTarget.Estimation_Id__c.length() > 0 && !newTarget.Estimation_Id__c.startsWith('a2K')) { 
 | 
                quoteIds.add(newTarget.Estimation_Id__c); 
 | 
                newTarget.Estimation_Id__c = ''; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
     
 | 
    if (quoteIds.size() > 0) { 
 | 
        List<Quote> cancelQuoteList = [Select Id, Name, Cancel_Decide__c From Quote Where Id IN :quoteIds]; 
 | 
        for (Quote quo : cancelQuoteList) { 
 | 
            quo.Cancel_Decide__c = true; 
 | 
            quo.Name = '已取消:' + quo.Name; 
 | 
            // 【委托】SH-ET-SH0584979 无法打印报价 精琢技术 wql 2020/12/22 start 
 | 
            quo.Contract__c = false; 
 | 
            // 【委托】SH-ET-SH0584979 无法打印报价 精琢技术 wql 2020/12/22 end 
 | 
        } 
 | 
        update cancelQuoteList; 
 | 
    } 
 | 
     
 | 
} 
 |