FUYU
2023-12-13 4488f711dbc01a8db6753907cae2ef4021dede68
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
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
            }
            //20220615 you XLIU-CFDB4C start
            // 营业项目窗口赋值
            if(sol.Salesdepartment_HP__c == '1.华北'){
                sol.Sales_Assistant__c =System.Label.Solution_HB;//'00510000001OOLj';
                // urlStr += '&CF00Np00000045HcO=' + encodeURI("肖 娜");
            }else if(sol.Salesdepartment_HP__c == '2.东北'){
                sol.Sales_Assistant__c =System.Label.Solution_DB;//'00510000001OOSZ';
                // urlStr += '&CF00Np00000045HcO=' + encodeURI("金 丽华");
            }else if(sol.Salesdepartment_HP__c == '3.西北'){
                sol.Sales_Assistant__c =System.Label.Solution_XB;//'00510000007kteE';
                // urlStr += '&CF00Np00000045HcO=' + encodeURI("王 喆");
            }else if(sol.Salesdepartment_HP__c == '4.西南'){
                sol.Sales_Assistant__c =System.Label.Solution_XN;//'00510000001OORm';
                // urlStr += '&CF00Np00000045HcO=' + encodeURI("李 娟");
            }else if(sol.Salesdepartment_HP__c == '5.华东'){
                sol.Sales_Assistant__c =System.Label.Solution_HD;//'00510000000gW9G';
                // urlStr += '&CF00Np00000045HcO=' + encodeURI("杨 剑清");
            }else if(sol.Salesdepartment_HP__c == '6.华南'){
                sol.Sales_Assistant__c =System.Label.Solution_HN;//'00510000001OOJy'; 改成位静
                // urlStr += '&CF00Np00000045HcO=' + encodeURI("王 志锋");
            }else{
                // 
            }
            //20220615 you XLIU-CFDB4C end
        }
        // 更新大区最新编号
        // 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项目需求!');
                }
 
            }
        }
    }
    
 
}