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
global class TotalPriceWebService {
    WebService static String canAddMc(String recordId) {
        List<MaintanceContractPackEstimate__c> mcpeList = [Select Id  from MaintanceContractPackEstimate__c Where MaintanceContractPack__c = :recordId and Decide__c =true limit 1];
        if(mcpeList.size()>0) {
            return '2'; //有decide的报价组合之后,不能添加小合同
        } else {
            List<MaintanceContractPackEstimate__c> mcpeStatusList = 
            [Select Id  from MaintanceContractPackEstimate__c Where MaintanceContractPack__c = :recordId and ( Process_Status__c='申请中' OR  Process_Status__c='批准' )  limit 1];
            if(mcpeStatusList.size()>0) { //有不是草案中的报价组合,提示重新做报价
                return '3';
            }
            
        }
        return '1';
    } 
    /*WebService static String updateColunm(String mcpid ){
        //当前维修合同
       List<Maintenance_Contract__c> mcList = [Select Id,Submit_contract_to_Financial_dept__c,HP_Dealer_print__c,Contract_print_completed__c,OCM_Print_request__c,GuidePrice_DownF__c,GuidePrice_UpF__c,Request_quotation_AmountF__c,
                                                Contract_Start_Date__c,Contract_End_Date__c,Limit_Price_Amount__c,Contract_Amount__c,Asset_Repair_Sum_PriceF__c from Maintenance_Contract__c 
                                                    where MaintanceContractPack__c = :mcpid];
         MaintanceContractPack__c mcp = new MaintanceContractPack__c();
         mcp.id = mcpid;
         Decimal GuidePrice_DownF = 0;
         Decimal GuidePrice_UpF = 0;
         Decimal FieldRequest_quotation_Amount = 0;
         Decimal Limit_Price_Amount = 0;
         Decimal Asset_Repair_Sum_PriceF = 0;
         Decimal Contract_Amount = 0;
         Date Contract_Start_Date ;
         Date Contract_End_Date ;
         Date OCM_Print_request ;
         Date Contract_print_completed ;
         Date HP_Dealer_print ;
         Date Submit_contract_to_Financial_dept ;
         for ( Maintenance_Contract__c mc :mcList) {
            //增加上限金额汇总
            if (mc.Limit_Price_Amount__c !=null) {
                Limit_Price_Amount += mc.Limit_Price_Amount__c;
            }
            if (mc.Limit_Price_Amount__c !=null) {
                Asset_Repair_Sum_PriceF += mc.Asset_Repair_Sum_PriceF__c;
            }
             if (mc.Limit_Price_Amount__c !=null) {
                Contract_Amount += mc.Contract_Amount__c;
            }
            if (mc.GuidePrice_DownF__c !=null) {
                GuidePrice_DownF += mc.GuidePrice_DownF__c;
            }
            if (mc.GuidePrice_UpF__c !=null) {
                GuidePrice_UpF += mc.GuidePrice_UpF__c;
            }    
            if (mc.Request_quotation_AmountF__c!=null) {
                FieldRequest_quotation_Amount += mc.Request_quotation_AmountF__c; 
            }
               
            if (Contract_Start_Date == null&&mc.Contract_Start_Date__c!=null) {
                Contract_Start_Date = mc.Contract_Start_Date__c;             
            }            
             // 取小合同最最早开始的合同开始日
             if (Contract_Start_Date > mc.Contract_Start_Date__c && Contract_Start_Date !=null && mc.Contract_Start_Date__c != null) {
                 Contract_Start_Date = mc.Contract_Start_Date__c;
             }
             if (mc.Contract_End_Date__c!=null) {
                Contract_End_Date = mc.Contract_End_Date__c;   
             }
             if (mc.OCM_Print_request__c!=null) {
                OCM_Print_request = mc.OCM_Print_request__c;
             }
             if (mc.Contract_print_completed__c!=null) {
                 Contract_print_completed = mc.Contract_print_completed__c; 
             }
            if (mc.HP_Dealer_print__c!=null) {
                  HP_Dealer_print = mc.HP_Dealer_print__c;
            }
            if (mc.Submit_contract_to_Financial_dept__c!=null) {
                Submit_contract_to_Financial_dept = mc.Submit_contract_to_Financial_dept__c;  
            } 
          }
               mcp.GuidePrice_DownF__c = GuidePrice_DownF; 
               mcp.GuidePrice_UpF__c = GuidePrice_UpF; 
               mcp.FieldRequest_quotation_Amount__c = FieldRequest_quotation_Amount;
               mcp.Contract_Amount__c = Contract_Amount; 
               mcp.Asset_Repair_Sum_PriceF__c = Asset_Repair_Sum_PriceF; 
               mcp.Limit_Price_Amount__c = Limit_Price_Amount; 
               if (Contract_Start_Date!=null) {
                   mcp.Contract_Start_Date__c = Contract_Start_Date;                           
               }                           
               if (Contract_End_Date!=null) {
                  mcp.Contract_End_Date__c = Contract_End_Date;                             
               }
               if (OCM_Print_request!=null) {
                  mcp.OCM_Print_request__c = OCM_Print_request;                             
               }
               if (Contract_print_completed!=null) {
                    mcp.Contract_print_completed__c = Contract_print_completed;                          
               }
               if (HP_Dealer_print!=null) {
                  mcp.HP_Dealer_print__c = HP_Dealer_print;                             
               } 
               if (Submit_contract_to_Financial_dept!=null) {
                 mcp.Submit_contract_to_Financial_dept__c = Submit_contract_to_Financial_dept;                              
               }
 
         try{
            update mcp;
            return '1';
         }catch(exception e){
            return e.getMessage();
         }
    }
    //服务合同打包-跳转到提交待审批
    // WebService static Map<String,Maintenance_Contract_Estimate__c> toMcpAprroval(String mcpid ){
 
    //     Maintenance_Contract_Estimate__c mce = new Maintenance_Contract_Estimate__c();
    //     Map<String,Maintenance_Contract_Estimate__c> maps = new Map<String,Maintenance_Contract_Estimate__c>();
    //     maps.put('1',mce);
 
    //     retrun maps;
    // }
 
    //服务合同打包-提交待审批
    WebService static String mcpAprroval(String mcpid ){
        Decimal consumptionRateForecast;
        Decimal GuidePrice_DownF = 0;
        Decimal GuidePrice_UpF = 0;
        Decimal FieldRequest_quotation_Amount = 0;
        Decimal Limit_Price_Amount = 0;
        Decimal Asset_Repair_Sum_PriceF = 0;
        Decimal Contract_Amount = 0;
 
        Decimal totalPriceNumerator = 0;
        Decimal totalPriceDenominator = 0;
        Decimal monthlyRepairCostSUM = 0;
        Decimal contractRange = 0;
        Decimal costrateForecast = 0; 
        String estimatePriceRange;
        String contractPriceType; 
        
 
        //当前维修合同(是否存在报价decide的情况)
        List<Maintenance_Contract__c> mcList = [Select Id,Name,Decided_Estimation__c,Submit_contract_to_Financial_dept__c,HP_Dealer_print__c,Contract_print_completed__c,OCM_Print_request__c,GuidePrice_DownF__c,GuidePrice_UpF__c,Request_quotation_AmountF__c,
                                                Contract_Start_Date__c,Contract_End_Date__c,Limit_Price_Amount__c,Contract_Amount__c,Asset_Repair_Sum_PriceF__c from Maintenance_Contract__c 
                                                    where MaintanceContractPack__c = :mcpid];
        for(Maintenance_Contract__c mc :mcList) {
            if(mc.Decided_Estimation__c !=null) {
                return mc.Name+':报价已经decide,请先取消decide,再提交审批!';
            }
        }                                            
        //合同报价 
        MaintanceContractPack__c mcpUpdate = new MaintanceContractPack__c();
        mcpUpdate.Id = mcpid;
        
 
        
        String querySoql = 'Select Id,Name,Contract_Range__c,Request_quotation_Amount__c,Monthly_Repair_Cost_SUM__c, from Maintenance_Contract_Estimate__c where Id in(Select Estimation_Id__c from Maintenance_Contract__c  where MaintanceContractPack__c = :mcpid)';
        System.debug('-------querySoql' + querySoql);
        List<Maintenance_Contract_Estimate__c> mceList = Database.query(querySoql);
        List<Maintenance_Contract_Estimate__c> updateMceList = new List<Maintenance_Contract_Estimate__c>();
 
        for(Maintenance_Contract_Estimate__c mce :mceList) {
           
            if (mce.Monthly_Repair_Cost_SUM__c !=null) {
                monthlyRepairCostSUM = mce.Monthly_Repair_Cost_SUM__c;
            }
            if (mce.Contract_Range__c !=null) {
                contractRange = mce.Contract_Range__c;
            }
            if (mce.Request_quotation_Amount__c !=null && mce.Request_quotation_Amount__c!=0) {
               // 计算分子
                totalPriceNumerator += (monthlyRepairCostSUM*contractRange*30);
               // 计算分母
                totalPriceDenominator += mce.Request_quotation_Amount__c;
            }
 
        }
        if (totalPriceDenominator != 0) {
            // 预测消费率
            consumptionRateForecast = ((totalPriceNumerator/totalPriceDenominator)*100);
            mcpUpdate.Consumption_rate_Forecast__c = ((totalPriceNumerator/totalPriceDenominator)*100);
            // 预测成本率
            costrateForecast = (totalPriceNumerator/totalPriceDenominator)*0.75*100;
            mcpUpdate.Cost_rate_Forecast__c = costrateForecast;
        }
 
        
        for ( Maintenance_Contract__c mc :mcList) {
            if (mc.Limit_Price_Amount__c !=null) {
                Limit_Price_Amount += mc.Limit_Price_Amount__c;
            }
            if (mc.Limit_Price_Amount__c !=null) {
                Asset_Repair_Sum_PriceF += mc.Asset_Repair_Sum_PriceF__c;
            }
             if (mc.Limit_Price_Amount__c !=null) {
                Contract_Amount += mc.Contract_Amount__c;
            }
            if (mc.GuidePrice_DownF__c !=null) {
                GuidePrice_DownF += mc.GuidePrice_DownF__c;
            }
            if (mc.GuidePrice_UpF__c !=null) {
                GuidePrice_UpF += mc.GuidePrice_UpF__c;
            }    
            if (mc.Request_quotation_AmountF__c!=null) {
                FieldRequest_quotation_Amount += mc.Request_quotation_AmountF__c; 
            }
        }
         
 
        if(FieldRequest_quotation_Amount < GuidePrice_DownF){
            if( costrateForecast > 1) {
                estimatePriceRange = '低于最低价格,预测成本率在100%以上';
            } else {
                estimatePriceRange = '低于最低价格,预测成本率在100%以内';
 
            }
        } else {
            if( FieldRequest_quotation_Amount >= GuidePrice_DownF && FieldRequest_quotation_Amount <= GuidePrice_UpF){
                estimatePriceRange = '标准价格的范围内';
            } else {
                if(FieldRequest_quotation_Amount <= GuidePrice_UpF * 2){
                    estimatePriceRange = '最高价格的200%以内';
                } else{
                    estimatePriceRange = '最高价格的200%以上';
                }
 
            }
        } 
        if(estimatePriceRange == '标准价格的范围内') {
            contractPriceType = '标准价格范围内-终批人营业经理';
        } else {
            if(estimatePriceRange.contains('以内')) {
                contractPriceType = '特价范围-批人服务总监';
            } else {
                 contractPriceType = '特价范围-终批人总经理';
            }
        }
       
 
        mcpUpdate.Estimate_Price_range__c = estimatePriceRange;
        mcpUpdate.ContractPriceType__c = contractPriceType;
 
        //更新打包合同的cl3 4 5 6 
        User loginUser = [SELECT Id, Name, JingliApprovalManager__c, BuchangApprovalManager__c, ZongjianApprovalManager__c, TongkuoZongjian__c FROM User WHERE Id = :UserInfo.getUserId()];
        mcpUpdate.JingliApprovalManager__c = loginUser.JingliApprovalManager__c == null ? loginUser.Id : loginUser.JingliApprovalManager__c;
        mcpUpdate.BuchangApprovalManager__c = loginUser.BuchangApprovalManager__c == null ? loginUser.Id : loginUser.BuchangApprovalManager__c;
        mcpUpdate.ZongjianApprovalManager__c = loginUser.ZongjianApprovalManager__c == null ? loginUser.Id : loginUser.ZongjianApprovalManager__c;
        // mcpUpdate.Service_Contract_Staff__c = this.contract.Service_Contract_Staff__c;
        mcpUpdate.TKZongjianApprovalManager__c = loginUser.TongkuoZongjian__c == null ? loginUser.Id : loginUser.TongkuoZongjian__c;
 
        try{
            update mcpUpdate;
            Approval.ProcessSubmitRequest psr = new Approval.ProcessSubmitRequest();
            psr.setObjectId(mcpid);
            Approval.ProcessResult submitResult = Approval.process(psr);
            
            return '1';
           
        }catch(exception e){
            return e.getMessage();
 
        } 
 
    }
*/
}