| | |
| | | public without sharing class OpportunityTrigger { |
| | | |
| | | public static Boolean isFirst = true; |
| | | |
| | | public static void lockOpportunityFile(List<Opportunity> newList, Map<Id, Opportunity> newMap, List<Opportunity> oldList, Map<Id, Opportunity> oldMap) { |
| | | |
| | | List<String> targetIds = new List<String>(); |
| | |
| | | |
| | | update ofileList; |
| | | } |
| | | |
| | | //CHAN-AZJ6JS 追溯系统来的询价,取消WIN时,经销商订单自动改到“驳回” |
| | | public static void changeConsumableOrderStatus(List<Opportunity> newList, Map<Id, Opportunity> newMap, List<Opportunity> oldList, Map<Id, Opportunity> oldMap) { |
| | | |
| | |
| | | // temptender.IsReactionOpp__c = true; |
| | | // tenderMap.put(temptender.id ,temptender ); |
| | | // } |
| | | // 合并判断条件 |
| | | // 合并判断条件 |
| | | //20220803 you 招标项目增加 取消,中标结果更新确认条件 |
| | | if((op.SAP_Send_OK__c != oldopp.SAP_Send_OK__c) || |
| | | ((op.StageName__c.equals('失单') && !oldopp.StageName__c.equals('失单')) || |
| | | (!op.StageName__c.equals('失单') && oldopp.StageName__c.equals('失单')))) { |
| | | (!op.StageName__c.equals('失单') && oldopp.StageName__c.equals('失单'))) || |
| | | ((op.StageName__c.equals('取消') && !oldopp.StageName__c.equals('取消')) || |
| | | (!op.StageName__c.equals('取消') && oldopp.StageName__c.equals('取消'))) || |
| | | (String.isNotBlank(op.ConfirmationofAward__c) && op.ConfirmationofAward__c!=oldopp.ConfirmationofAward__c)) { |
| | | for (Tender_Opportunity_Link__c link : links) { |
| | | if (link.Opportunity__c == op.Id) { |
| | | Tender_information__c temptender = new Tender_information__c(); |
| | |
| | | } |
| | | } |
| | | //LastBuy 预留产品 lt 20220315 end |
| | | //SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy start |
| | | // public static void UpdateBidNumber(List<Opportunity> newList, Map<Id, Opportunity> newMap, List<Opportunity> oldList, Map<Id, Opportunity> oldMap){ |
| | | // List<Id> OpportunityIdList = new List<Id>(); |
| | | // Boolean flag = true; |
| | | // for (Opportunity opp : newList) { |
| | | // OpportunityIdList.add(opp.Id); |
| | | // Opportunity oldopp = oldMap == null? null : oldMap.get(opp.Id); |
| | | // if(oldopp==null){ |
| | | // if(opp.NumberOfBids__c!=null||opp.BidWinningNumber__c!=null){ |
| | | // flag = true; |
| | | // } |
| | | // }else{ |
| | | // if(opp.NumberOfBids__c!=oldopp.NumberOfBids__c||opp.NumberOfBids__c!=oldopp.NumberOfBids__c){ |
| | | // flag = true; |
| | | // } |
| | | // } |
| | | // } |
| | | // system.debug('newList+++'+newList); |
| | | // system.debug('oldList+++'+oldList); |
| | | // if(flag){ |
| | | // List<Tender_Opportunity_Link__c> TenderOpportunityLinkList = [select Tender_information__c from Tender_Opportunity_Link__c where Opportunity__c in:OpportunityIdList]; |
| | | // Set<Id> enderOpportunityId = new Set<Id>(); |
| | | // if(TenderOpportunityLinkList.size()>0){ |
| | | // for (Tender_Opportunity_Link__c TenderOpportunity : TenderOpportunityLinkList) { |
| | | // enderOpportunityId.add(TenderOpportunity.Tender_information__c); |
| | | // } |
| | | // } |
| | | // system.debug('TenderOpportunityLinkList+++'+TenderOpportunityLinkList); |
| | | // List<Tender_Opportunity_Link__c> TenderOpportunityLinkList2 = [select Tender_information__c,Opportunity__r.NumberOfBids__c,Opportunity__r.BidWinningNumber__c from Tender_Opportunity_Link__c where Tender_information__c in:enderOpportunityId]; |
| | | // Map<String,Tender_information__c> TenderinformationMap = new Map<String,Tender_information__c>(); |
| | | // system.debug('TenderOpportunityLinkList2+++'+TenderOpportunityLinkList2); |
| | | // if(TenderOpportunityLinkList2.size()>0){ |
| | | // for(Tender_Opportunity_Link__c TenderOpportunity2 :TenderOpportunityLinkList2){ |
| | | // if(TenderinformationMap.containsKey(TenderOpportunity2.Tender_information__c)){ |
| | | // Tender_information__c Tender_informationvalue = new Tender_information__c(); |
| | | // Tender_informationvalue = TenderinformationMap.get(TenderOpportunity2.Tender_information__c); |
| | | // Tender_informationvalue.NumberOfBids__c=Tender_informationvalue.NumberOfBids__c+TenderOpportunity2.Opportunity__r.NumberOfBids__c; |
| | | // Tender_informationvalue.BidWinningNumber__c=Tender_informationvalue.BidWinningNumber__c+TenderOpportunity2.Opportunity__r.BidWinningNumber__c; |
| | | // TenderinformationMap.put(TenderOpportunity2.Tender_information__c, Tender_informationvalue); |
| | | // }else{ |
| | | // Tender_information__c Tender_informationvalue = new Tender_information__c(); |
| | | // Tender_informationvalue.Id=TenderOpportunity2.Tender_information__c; |
| | | // Tender_informationvalue.NumberOfBids__c=TenderOpportunity2.Opportunity__r.NumberOfBids__c; |
| | | // Tender_informationvalue.BidWinningNumber__c=TenderOpportunity2.Opportunity__r.BidWinningNumber__c; |
| | | // TenderinformationMap.put(TenderOpportunity2.Tender_information__c, Tender_informationvalue); |
| | | // } |
| | | // } |
| | | // } |
| | | // List<Tender_information__c> Tender_informationList = new List<Tender_information__c>(); |
| | | // for (Tender_information__c value : TenderinformationMap.values()) { |
| | | // Tender_informationList.add(value); |
| | | // } |
| | | // system.debug('Tender_informationList+++'+Tender_informationList); |
| | | // update Tender_informationList; |
| | | // } |
| | | // } |
| | | //SWAG-CHL67J 【委托】【FY23询价改善】-询价页面/招标项目增加统计字段 fy end |
| | | //add 询价跟进任务开发 - 3.创建失单任务 sx 20220617 start |
| | | //询价中标结果确认竞争对手中标时实时创建失单任务 |
| | | public static void createTaskByOppConfirmationofAward(List<Opportunity> newList, Map<Id, Opportunity> newMap, List<Opportunity> oldList, Map<Id, Opportunity> oldMap){ |
| | | |
| | | if (!isFirst) { |
| | | return; |
| | | } |
| | | |
| | | Set<Id> oppoIds = new Set<Id>(); |
| | | for(Opportunity op : newList){ |
| | | Opportunity oldopp = oldMap.get(op.Id); |
| | | //询价中标结果确认竞争对手中标时实时创建失单任务 且 询价状态1等于询价 |
| | | if (oldopp.ConfirmationofAward__c != '竞争对手中标' && op.ConfirmationofAward__c == '竞争对手中标' && op.StageName__c == '询价' && op.LeakageNumber__c !=1){ |
| | | oppoIds.add(op.Id); |
| | | } |
| | | } |
| | | |
| | | if (!oppoIds.isEmpty()) { |
| | | // 有效失单状态一览 |
| | | List<String> validStatus = new List<String>{'申请中', '提交', '批准'}; |
| | | // 询价失单/取消报告查询 |
| | | List<Lost_cancel_report__c> lostCancelReportList = [SELECT Id, Opportunity__c from Lost_cancel_report__c WHERE Opportunity__c in :oppoIds and Report_Status__c in: validStatus]; |
| | | |
| | | //<询价Id, 失单报告> |
| | | Map<String, Lost_cancel_report__c> lostCancelReportMap = new Map<String, Lost_cancel_report__c>(); |
| | | for(Lost_cancel_report__c lcr : lostCancelReportList){ |
| | | if (!lostCancelReportMap.isEmpty() && lostCancelReportMap.containsKey(lcr.Opportunity__c)) { |
| | | // no action |
| | | } else { |
| | | lostCancelReportMap.put(lcr.Opportunity__c, lcr); |
| | | } |
| | | } |
| | | |
| | | List<Task__c> insTaskList = new List<Task__c>(); |
| | | |
| | | // 定义需要更新的询价任务 |
| | | List<Opportunity> updateOpportunity = new List<Opportunity>(); |
| | | |
| | | // 记录类型:失单报告任务 |
| | | List<RecordType> recordTypes = [select Id from RecordType where IsActive = true and SobjectType = 'task__c' and DeveloperName = 'LoseListTask']; |
| | | Id loseListTask_TaskId = recordTypes.get(0).Id; |
| | | //String taskName = ''; |
| | | |
| | | for(Opportunity opp : newList) { |
| | | //没有已提交的失单报告 |
| | | if(!lostCancelReportMap.containsKey(opp.Id) && oppoIds.contains(opp.Id)) { |
| | | |
| | | //创建失单任务提醒 |
| | | Task__c tempTask = new Task__c(); |
| | | tempTask.RecordTypeId = loseListTask_TaskId; |
| | | tempTask.taskDifferent__c = '被动任务'; |
| | | tempTask.taskStatus__c = '02 接受'; //任务状态2 |
| | | tempTask.assignee__c = opp.OwnerId; //被分配者 |
| | | tempTask.account__c = opp.AccountId; |
| | | tempTask.Name = '失单结果确认:' + opp.Opportunity_No__c; |
| | | tempTask.OwnerId = opp.OwnerId; //所有人 |
| | | tempTask.OpportunityId__c = opp.Id; |
| | | tempTask.ConfirmDate__c = Date.today(); |
| | | insTaskList.add(tempTask); |
| | | |
| | | //更新询价 Task_createTime__c |
| | | Opportunity uopp = new Opportunity(); |
| | | uopp.Id = opp.Id; |
| | | uopp.LostTask_createTime__c = Date.today(); |
| | | updateOpportunity.add(uopp); |
| | | } |
| | | } |
| | | |
| | | if (!insTaskList.isEmpty()) { |
| | | insert insTaskList; |
| | | } |
| | | if (!updateOpportunity.isEmpty()) { |
| | | update updateOpportunity; |
| | | } |
| | | } |
| | | isFirst = false; |
| | | } |
| | | //add 询价跟进任务开发 - 3.创建失单任务 sx 20220617 end |
| | | |
| | | |
| | | //询价跟进任务开发 |
| | | public static void opportunityTasks(List<Opportunity> newList, Map<Id, Opportunity> newMap, List<Opportunity> oldList, Map<Id, Opportunity> oldMap){ |
| | | Set<Id> oppoIds = new Set<Id>(); |
| | | |
| | | for(Opportunity op : newList){ |
| | | Opportunity oldopp = oldMap.get(op.Id); |
| | | |
| | | //询价中标结果确认竞争对手中标时实时创建失单任务 且 询价状态1等于询价 |
| | | if (oldopp.ConfirmationofAward__c != 'OLY中标' && op.ConfirmationofAward__c == 'OLY中标' && op.StageName__c == '询价'){ |
| | | oppoIds.add(op.Id); |
| | | //确认中标结果时间 创建任务时间 20220629 sx |
| | | op.ConfirmationofAward_createTime__c = Date.today(); |
| | | if(op.Task_createTime__c!=null){ |
| | | |
| | | //是否按时确认:3个工作日内按时1,不按时0 |
| | | String inttemp = CalendarUtil.getWorkDayNum(String.valueOf(op.Task_createTime__c), String.valueOf(op.ConfirmationofAward_createTime__c)); |
| | | op.Is_ConfirmationofAward__c = Integer.valueOf(inttemp) > 3 ? 0 : 1; |
| | | } |
| | | } |
| | | |
| | | //20220628会议新需求 对手中标 7.中标日清空 |
| | | if(oldopp.ConfirmationofAward__c != '竞争对手中标' && op.ConfirmationofAward__c == '竞争对手中标'){ |
| | | op.Closing_Bid_Date__c = null; |
| | | op.ConfirmationofAward_createTime__c = Date.today(); |
| | | if(op.Task_createTime__c!=null){ |
| | | |
| | | //是否按时确认:3个工作日内按时1,不按时0 |
| | | String inttemp = CalendarUtil.getWorkDayNum(String.valueOf(op.Task_createTime__c), String.valueOf(op.ConfirmationofAward_createTime__c)); |
| | | op.Is_ConfirmationofAward__c = Integer.valueOf(inttemp) > 3 ? 0 : 1; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if(!oppoIds.isEmpty()){ |
| | | |
| | | list<Tender_Opportunity_Link__c> toppLinkList = [Select Id, Opportunity__c, Tender_information__c,Tender_information__r.ResultDate__c FROM Tender_Opportunity_Link__c WHERE Opportunity__c in :oppoIds]; |
| | | Map<String, Tender_Opportunity_Link__c> toopLinkMap = new Map<String, Tender_Opportunity_Link__c>(); |
| | | |
| | | for(Tender_Opportunity_Link__c tol : toppLinkList){ |
| | | toopLinkMap.put(tol.Opportunity__c, tol); |
| | | } |
| | | |
| | | for (String key : toopLinkMap.keySet()) { |
| | | Opportunity oppoTemp = newMap.get(key); |
| | | |
| | | //20220628会议新需求 OLY中标 7.中标日(结果记录日)= 招标项目.结果记录日 |
| | | oppoTemp.Closing_Bid_Date__c = toopLinkMap.get(key).Tender_information__r.ResultDate__c; |
| | | System.debug('============'+toopLinkMap.get(key).Tender_information__r.ResultDate__c); |
| | | |
| | | |
| | | //是否按时确认:3个工作日内按时1,不按时0 |
| | | //String inttemp = CalendarUtil.getWorkDayNum(String.valueOf(oppoTemp.Task_createTime__c), String.valueOf(oppoTemp.ConfirmationofAward_createTime__c)); |
| | | //oppoTemp.Is_ConfirmationofAward__c = Integer.valueOf(inttemp) > 3 ? 0 : 1; |
| | | } |
| | | |
| | | } |
| | | Integer i = 0; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | i++; |
| | | |
| | | } |
| | | } |