trigger SolutionProjectRequirementsTrigger on SolutionProjectRequirements__c(before insert,before update,after insert) { 
 | 
     
 | 
    if((trigger.isBefore && trigger.isInsert)||(trigger.isBefore && trigger.isUpdate)){ 
 | 
        Set<String> accId = new Set<String>(); 
 | 
        Set<String> userId = new Set<String>(); 
 | 
  
 | 
        for(SolutionProjectRequirements__c sol :Trigger.new){ 
 | 
  
 | 
            // LZHU-BR94XT 20200707 赵赐 start 
 | 
            //修改内容: 医院名称为空,从科室获取对应医院名称 
 | 
            if (sol.Hospital__c == null) { 
 | 
                // 获取赋值 
 | 
                sol.Hospital__c = sol.GetIdFromDepartment__c;  
 | 
            } 
 | 
            // LZHU-BR94XT 20200707 赵赐 end 
 | 
  
 | 
            // LZHU-BR94XT 20200707 赵赐 start 
 | 
            //修改内容: 从科室获取对应医院名称 
 | 
            // sol.Hospital__c = sol.GetIdFromDepartment__c;  
 | 
            // LZHU-BR94XT 20200707 赵赐 end 
 | 
  
 | 
            if(sol.Hospital__c != null){ 
 | 
                accId.add(sol.Hospital__c); 
 | 
            } 
 | 
  
 | 
             
 | 
            if(sol.Submitter__c != null){ 
 | 
                userId.add(sol.Submitter__c); 
 | 
                // if(sol.CreatedById != null){ 
 | 
                //     userId.add(sol.CreatedById); 
 | 
                // } 
 | 
                 
 | 
            } 
 | 
            // 为营业担当赋值为创建人 
 | 
            if(trigger.isBefore && trigger.isInsert){ 
 | 
                // if(sol.HospitalOwner__c == null ){ 
 | 
                sol.HospitalOwner__c = UserInfo.getUserId(); 
 | 
                if(sol.Submit_Date_YouWant__c < Date.today().addDays(3)){ 
 | 
                    sol.Submit_Date_YouWant__c.addError('希望提交日期不得小于三天,如紧急需求请邮件联络Solution担当'); 
 | 
                } 
 | 
                // } 
 | 
            } 
 | 
             
 | 
        } 
 | 
  
 | 
  
 | 
        List<Account> acclist = [select id,Province_formula__c,GI_Main__c,BF_owner__c,Salesdepartment_HP__c from Account where id = :accId]; 
 | 
        List<User> usrList = [select id,name,SalesManager__c from User where id = :userId]; 
 | 
        Map<String,User> usrMap = new Map<String,User>(); 
 | 
        Map<String,Account> accProMap = new Map<String,Account>(); 
 | 
        // Map<String,User> userMap = new Map<String,User>(); 
 | 
        for(Account acc :acclist){ 
 | 
            accProMap.put(acc.Id, acc); 
 | 
        } 
 | 
        for(User usr : usrList){ 
 | 
            usrMap.put(usr.Id, usr); 
 | 
        } 
 | 
        // 获取大区的最新编号 
 | 
        List<GIRSolutionAreaNumber__c> girAreaList = [select Id,Name,GIRSolutionXN__c,GIRSolutionXB__c,GIRSolutionDB__c,GIRSolutionHN__c,GIRSolutionHB__c,GIRSolutionHD__c from GIRSolutionAreaNumber__c]; 
 | 
        Map<String,GIRSolutionAreaNumber__c> girAreaMap = new Map<String,GIRSolutionAreaNumber__c>(); 
 | 
        for(GIRSolutionAreaNumber__c girarea : girAreaList){ 
 | 
            // 根据OCSM期来找对应编号。 
 | 
            girAreaMap.put(girarea.Name, girarea); 
 | 
        } 
 | 
        for(SolutionProjectRequirements__c sol :Trigger.new){             
 | 
  
 | 
            // 判断OCSM期 
 | 
            Datetime ocsmDate = Datetime.now(); 
 | 
            String ocsmPeriod = ''; 
 | 
  
 | 
            if(sol.CreatedDate != null){ 
 | 
                ocsmDate = sol.CreatedDate; 
 | 
            } 
 | 
            // 根据创建日期判断ocsm期 
 | 
            if(ocsmDate.month() == 1 || ocsmDate.month() == 2 || ocsmDate.month() == 3){ 
 | 
                ocsmPeriod = ocsmPeriod = ocsmDate.year()-1868+'P'; 
 | 
            }else{ 
 | 
                ocsmPeriod = ocsmDate.year()-1867+'P'; 
 | 
            } 
 | 
            if(accProMap.containsKey(sol.Hospital__c)){ 
 | 
                // 为省字段赋值 
 | 
                sol.Province__c = accProMap.get(sol.Hospital__c).Province_formula__c; 
 | 
                // 为营业经理赋值 
 | 
                if(sol.Submitter__c != null){ 
 | 
                     
 | 
                    // 为营业经理赋值 
 | 
                    if(usrMap.containsKey(sol.Submitter__c)){ 
 | 
                        if(usrMap.get(sol.Submitter__c).SalesManager__c != null){ 
 | 
                            sol.sale_Manager__c = usrMap.get(sol.Submitter__c).SalesManager__c; 
 | 
                        }else{ 
 | 
                            sol.sale_Manager__c = sol.Submitter__c; 
 | 
                        } 
 | 
                         
 | 
                    } 
 | 
                     
 | 
  
 | 
                } 
 | 
                // 为大区编号赋值 
 | 
                String salesdepartmentHP = accProMap.get(sol.Hospital__c).Salesdepartment_HP__c; 
 | 
                if(sol.Area_Number__c == '' || sol.Area_Number__c == null){ 
 | 
                    if(salesdepartmentHP == '1.华北'){ 
 | 
                        Decimal areaHB = girAreaMap.get(ocsmPeriod).GIRSolutionHB__c; 
 | 
                        if(areaHB >= 1 && areaHB < 10){ 
 | 
                            sol.Area_Number__c = '00'+areaHB; 
 | 
                        }else if(areaHB >= 10 && areaHB < 100){ 
 | 
                            sol.Area_Number__c = '0'+areaHB; 
 | 
                        }else{ 
 | 
                            sol.Area_Number__c = ''+areaHB; 
 | 
                        } 
 | 
                        areaHB++; 
 | 
                        girAreaMap.get(ocsmPeriod).GIRSolutionHB__c = areaHB; 
 | 
                    }else if(salesdepartmentHP == '2.东北'){ 
 | 
                        Decimal areaDB = girAreaMap.get(ocsmPeriod).GIRSolutionDB__c; 
 | 
                        if(areaDB >= 1 && areaDB < 10){ 
 | 
                            sol.Area_Number__c = '00'+areaDB; 
 | 
                        }else if(areaDB >= 10 && areaDB < 100){ 
 | 
                            sol.Area_Number__c = '0'+areaDB; 
 | 
                        }else{ 
 | 
                            sol.Area_Number__c = ''+areaDB; 
 | 
                        } 
 | 
                        areaDB++; 
 | 
                        girAreaMap.get(ocsmPeriod).GIRSolutionDB__c = areaDB; 
 | 
                    }else if(salesdepartmentHP == '3.西北'){ 
 | 
                        Decimal areaXB = girAreaMap.get(ocsmPeriod).GIRSolutionXB__c; 
 | 
                        if(areaXB >= 1 && areaXB < 10){ 
 | 
                            sol.Area_Number__c = '00'+areaXB; 
 | 
                        }else if(areaXB >= 10 && areaXB < 100){ 
 | 
                            sol.Area_Number__c = '0'+areaXB; 
 | 
                        }else{ 
 | 
                            sol.Area_Number__c = ''+areaXB; 
 | 
                        } 
 | 
                        areaXB++; 
 | 
                        girAreaMap.get(ocsmPeriod).GIRSolutionXB__c = areaXB; 
 | 
                    }else if(salesdepartmentHP == '4.西南'){ 
 | 
                        Decimal areaXN = girAreaMap.get(ocsmPeriod).GIRSolutionXN__c; 
 | 
                        if(areaXN >= 1 && areaXN < 10){ 
 | 
                            sol.Area_Number__c = '00'+areaXN; 
 | 
                        }else if(areaXN >= 10 && areaXN < 100){ 
 | 
                            sol.Area_Number__c = '0'+areaXN; 
 | 
                        }else{ 
 | 
                            sol.Area_Number__c = ''+areaXN; 
 | 
                        } 
 | 
                        areaXN++; 
 | 
                        girAreaMap.get(ocsmPeriod).GIRSolutionXN__c = areaXN; 
 | 
                    }else if(salesdepartmentHP == '5.华东'){ 
 | 
                        Decimal areaHD = girAreaMap.get(ocsmPeriod).GIRSolutionHD__c; 
 | 
                        if(areaHD >= 1 && areaHD < 10){ 
 | 
                            sol.Area_Number__c = '00'+areaHD; 
 | 
                        }else if(areaHD >= 10 && areaHD < 100){ 
 | 
                            sol.Area_Number__c = '0'+areaHD; 
 | 
                        }else{ 
 | 
                            sol.Area_Number__c = ''+areaHD; 
 | 
                        } 
 | 
                        areaHD++; 
 | 
                        girAreaMap.get(ocsmPeriod).GIRSolutionHD__c = areaHD; 
 | 
                    }else if(salesdepartmentHP == '6.华南'){ 
 | 
                        Decimal areaHN = girAreaMap.get(ocsmPeriod).GIRSolutionHN__c; 
 | 
                        if(areaHN >= 1 && areaHN < 10){ 
 | 
                            sol.Area_Number__c = '00'+areaHN; 
 | 
                        }else if(areaHN >= 10 && areaHN < 100){ 
 | 
                            sol.Area_Number__c = '0'+areaHN; 
 | 
                        }else{ 
 | 
                            sol.Area_Number__c = ''+areaHN; 
 | 
                        } 
 | 
                        areaHN++; 
 | 
                        girAreaMap.get(ocsmPeriod).GIRSolutionHN__c = areaHN; 
 | 
                    }else{ 
 | 
                        // sol.Area_Number__c = 'ERROR'; 
 | 
                    } 
 | 
                } 
 | 
                 
 | 
            } 
 | 
             
 | 
            //为GIR窗口赋值 
 | 
            if(sol.GIR_ID__c != '' && sol.GIR_ID__c != null){ 
 | 
                sol.GIR_Assistant__c = sol.GIR_ID__c; 
 | 
            } 
 | 
            // 名称赋值 
 | 
            if(sol.NoHand_Writing__c != '' && sol.NoHand_Writing__c != null ){ 
 | 
                sol.Name = sol.NoHand_Writing__c; 
 | 
                System.debug('=====1'+sol.OCM_period__c + '-' + sol.ProvinceAbbreviation__c + '-' + sol.Area_Number__c); 
 | 
            }else{ 
 | 
            //20201225 you WLIG-BV8CHF start 
 | 
                System.debug('=====2'+sol.OCM_period_New__c+ '-' + sol.ProvinceAbbreviation__c + '-' + sol.Area_Number__c); 
 | 
                sol.Name = sol.OCM_period_New__c + '-' + sol.ProvinceAbbreviation__c + '-' + sol.Area_Number__c; 
 | 
            //20201225 you WLIG-BV8CHF end 
 | 
            } 
 | 
            // 营业项目窗口赋值 
 | 
            if(sol.Salesdepartment_HP__c == '1.华北'){ 
 | 
                sol.Sales_Assistant__c ='00510000001OOLj'; 
 | 
                // urlStr += '&CF00Np00000045HcO=' + encodeURI("肖 娜"); 
 | 
            }else if(sol.Salesdepartment_HP__c == '2.东北'){ 
 | 
                sol.Sales_Assistant__c ='00510000001OOSZ'; 
 | 
                // urlStr += '&CF00Np00000045HcO=' + encodeURI("金 丽华"); 
 | 
            }else if(sol.Salesdepartment_HP__c == '3.西北'){ 
 | 
                sol.Sales_Assistant__c ='00510000007kteE'; 
 | 
                // urlStr += '&CF00Np00000045HcO=' + encodeURI("王 喆"); 
 | 
            }else if(sol.Salesdepartment_HP__c == '4.西南'){ 
 | 
                sol.Sales_Assistant__c ='00510000001OORm'; 
 | 
                // urlStr += '&CF00Np00000045HcO=' + encodeURI("李 娟"); 
 | 
            }else if(sol.Salesdepartment_HP__c == '5.华东'){ 
 | 
                sol.Sales_Assistant__c ='00510000000gW9G'; 
 | 
                // urlStr += '&CF00Np00000045HcO=' + encodeURI("杨 剑清"); 
 | 
            }else if(sol.Salesdepartment_HP__c == '6.华南'){ 
 | 
                sol.Sales_Assistant__c ='00510000001OOJy'; 
 | 
                // urlStr += '&CF00Np00000045HcO=' + encodeURI("王 志锋"); 
 | 
            }else{ 
 | 
                //  
 | 
            } 
 | 
  
 | 
        } 
 | 
        // 更新大区最新编号 
 | 
        // girAreaList[0].GIRSolutionHB__c = areaHB; 
 | 
        // girAreaList[0].GIRSolutionDB__c = areaDB; 
 | 
        // girAreaList[0].GIRSolutionXB__c = areaXB; 
 | 
        // girAreaList[0].GIRSolutionXN__c = areaXN; 
 | 
        // girAreaList[0].GIRSolutionHD__c = areaHD; 
 | 
        // girAreaList[0].GIRSolutionHN__c = areaHN; 
 | 
        List<GIRSolutionAreaNumber__c> girUpAreaList = new List<GIRSolutionAreaNumber__c>(); 
 | 
        girUpAreaList = girAreaMap.values(); 
 | 
        update girUpAreaList; 
 | 
  
 | 
    } 
 | 
    if(trigger.isBefore && trigger.isInsert){ 
 | 
        Set<String> accId = new Set<String>(); 
 | 
        Set<String> userId = new Set<String>(); 
 | 
        for(SolutionProjectRequirements__c sol :Trigger.new){ 
 | 
            if(sol.Hospital__c != null){ 
 | 
                accId.add(sol.Department_Class__c); 
 | 
            } 
 | 
            // if(sol.CreatedById != null){ 
 | 
            //     userId.add(sol.CreatedById); 
 | 
            // } 
 | 
  
 | 
            // 为营业担当赋值为创建人 
 | 
            // if(sol.HospitalOwner__c == null ){ 
 | 
            //     sol.HospitalOwner__c = sol.CreatedById; 
 | 
            // } 
 | 
        } 
 | 
        // 取科室的战略科室担当 
 | 
        List<Account> acclist = [select id,Department_Class__r.Department_Class_Label__c,Department_Class__r.OwnerId,Department_Class__r.Owner.SalesManager__c,Hospital__r.GI_Main__c,Hospital__r.BF_Product_Leader__c,Hospital__r.BF_owner__c,Hospital__r.GI_Product_Leader__c,Hospital__r.ET_owner__c,Hospital__r.ET_Product_Leader__c,Hospital__r.SP_Main__c,Hospital__r.GS_Product_Leader__c,Hospital__r.URO_owner_ID__c,Hospital__r.URO_Produc_Leader__c,Hospital__r.GYN_owner__c,Hospital__r.GYN_Product_Leader__c,Hospital__r.ENT_owner_ID__c,Hospital__r.ENT_Product_Leader__c  from Account where id = :accId]; 
 | 
        // List<User> userList = [select id,name,SalesManager__c from User where id = :userId]; 
 | 
        Map<String,Account> accProMap = new Map<String,Account>(); 
 | 
        Map<String,String> accDepartMap = new Map<String,String>(); 
 | 
        // Map<String,User> userMap = new Map<String,User>(); 
 | 
        for(Account acc :acclist){ 
 | 
            accProMap.put(acc.Id, acc); 
 | 
            if(acc.Department_Class__r.Department_Class_Label__c == '消化科'){ 
 | 
                accDepartMap.put(acc.Id, acc.Hospital__r.GI_Product_Leader__c); 
 | 
            }else if(acc.Department_Class__r.Department_Class_Label__c == '呼吸科'){ 
 | 
                accDepartMap.put(acc.Id, acc.Hospital__r.BF_Product_Leader__c); 
 | 
            }else if(acc.Department_Class__r.Department_Class_Label__c == '普外科' || acc.Department_Class__r.Department_Class_Label__c == '其他'){ 
 | 
                accDepartMap.put(acc.Id, acc.Hospital__r.GS_Product_Leader__c); 
 | 
            }else if(acc.Department_Class__r.Department_Class_Label__c == '泌尿科'){ 
 | 
                accDepartMap.put(acc.Id, acc.Hospital__r.URO_Produc_Leader__c); 
 | 
            }else if(acc.Department_Class__r.Department_Class_Label__c == '妇科'){ 
 | 
                accDepartMap.put(acc.Id, acc.Hospital__r.GYN_Product_Leader__c); 
 | 
            }else if(acc.Department_Class__r.Department_Class_Label__c == '耳鼻喉科'){ 
 | 
                accDepartMap.put(acc.Id, acc.Hospital__r.ENT_Product_Leader__c); 
 | 
            }else if(acc.Department_Class__r.Department_Class_Label__c == 'ET'){ 
 | 
                accDepartMap.put(acc.Id, acc.Hospital__r.ET_Product_Leader__c); 
 | 
            }else{ 
 | 
  
 | 
            } 
 | 
        } 
 | 
        // for(User usr : userList){ 
 | 
        //     userMap.put(usr.Id, usr); 
 | 
        // } 
 | 
        for(SolutionProjectRequirements__c sol :Trigger.new){ 
 | 
            // 科室对应的产品担当 
 | 
            String departProLeader = ''; 
 | 
            if(accDepartMap.containsKey(sol.Department_Class__c)){ 
 | 
                departProLeader = accDepartMap.get(sol.Department_Class__c); 
 | 
                sol.Product_Leader__c = departProLeader; 
 | 
            } 
 | 
             
 | 
            // 判断是否有权新建solution项目需求 
 | 
            // System.debug('======'+sol.CreatedById+'======'+accProMap.get(sol.Department_Class__c).Department_Class__r.OwnerId+'======'+accProMap.get(sol.Department_Class__c).Department_Class__r.Owner.SalesManager__c); 
 | 
            if(accProMap.containsKey(sol.Department_Class__c)){ 
 | 
                // 如果不等于战略科室担当并且不等于战略科室担当经理推广的,报错不能创建。System.UserInfo.getUserId() 
 | 
                if(System.UserInfo.getUserId() != accProMap.get(sol.Department_Class__c).Department_Class__r.OwnerId && System.UserInfo.getUserId() != accProMap.get(sol.Department_Class__c).Department_Class__r.Owner.SalesManager__c && !departProLeader.contains(System.UserInfo.getName().replace(' ', ''))){ 
 | 
                    sol.addError('只允其战略科室主担当、产品担当及省经理创建solution项目需求!'); 
 | 
                } 
 | 
  
 | 
            } 
 | 
        } 
 | 
    } 
 | 
     
 | 
  
 | 
} 
 |