// xudan 20160128 Status_F__c -> RA_Status__c
|
trigger RentalApplyBeforeUpdate on Rental_Apply__c (before insert, before update, before delete) {
|
if((!Test.isRunningTest())&&UserInfo.getUserId()==System.Label.ByPassTrigger){
|
return;
|
}
|
//public class RentalApplyBeforeUpdateException extends Exception{}
|
if (trigger.isDelete) {
|
// 出库指示后不能删除备品借出申请
|
for(Rental_Apply__c ra : trigger.old) {
|
//if (ra.Status_F__c == '部分出库指示' || ra.Status__c == '出库指示完了') {
|
if (ra.RA_Status__c == FixtureUtil.raStatusMap.get(FixtureUtil.RaStatus.Yi_Chu_Ku_Zhi_Shi.ordinal())) {
|
ra.addError('不能删除已经做出库指示的备品借出申请:' + ra.Name);
|
}
|
}
|
} else {
|
|
// 计算借出营业日
|
List<Rental_Apply__c> raList = new List<Rental_Apply__c>();
|
// 病院を取得するIDセット
|
Set<Id> hospitalIds = new Set<Id>();
|
// 学会を取得するIDセット
|
Set<Id> campaignIds = new Set<Id>();
|
// 修理を取得するIDセット
|
Set<Id> repairIds = new Set<Id>();
|
/*因为备品借出申请在业务上不会删除,所以已经分割次数+1就是本次支番号*/
|
/*************************Insert 20160513 Start*************************/
|
|
if(Trigger.isInsert){
|
List<Rental_Apply__c> RacList = new List<Rental_Apply__c>();
|
List<Rental_Apply__c> RacListElse = new List<Rental_Apply__c>();
|
List<AggregateResult> GroList = new List<AggregateResult>();
|
Map<String,String> RenMap = new Map<String,String>();
|
Map<String,String> RenCountMap = new Map<String,String>();
|
GroList = [select count(id) countId,Old_Rental_Apply__c from Rental_Apply__c where Old_Rental_Apply__c !=null group by Old_Rental_Apply__c];
|
for(AggregateResult Ta : GroList){
|
RenMap.put( string.valueOf(Ta.get('Old_Rental_Apply__c')),string.valueOf(Ta.get('Old_Rental_Apply__c') )); //旧借出申请
|
RenCountMap.put( string.valueOf(Ta.get('Old_Rental_Apply__c')),string.valueOf(Ta.get('countId') ));
|
}
|
//ra.Old_Rental_Apply__c List
|
List<String> LoopListRaOCon = new List<String>();
|
//List<String> LoopListRaOIdUnCon = new List<String>();
|
Map<String,Integer> LoopListRaN = new Map<String,Integer>();
|
//Map<String,Integer> LoopListRaNElse = new Map<String,Integer>();
|
for(Rental_Apply__c ra : trigger.new){
|
if(ra.Name ==null){
|
ra.Name='*';
|
}
|
//
|
if(RenMap.containsKey(ra.Old_Rental_Apply__c)){
|
LoopListRaOCon.add(ra.Old_Rental_Apply__c);
|
LoopListRaN.put(ra.Old_Rental_Apply__c,LoopListRaOCon.size()-1);
|
|
//RacList = [select id,Old_Rental_Apply__r.Name from Rental_Apply__c where Old_Rental_Apply__c =: ra.Old_Rental_Apply__c];
|
//ra.Name = RacList[0].Old_Rental_Apply__r.Name+'-'+RacList.size();
|
}else{
|
//RacList = [select id,name,Old_Rental_Apply__r.Name from Rental_Apply__c where id =: ra.id];
|
//LoopListRaOIdUnCon.add(ra.id);
|
//LoopListRaNElse.put(ra.id, LoopListRaOIdUnCon.size()-1);
|
//if(RacList.size()>0){
|
// ra.Name = RacList[0].Name+'-'+1;
|
// ra.Old_Rental_Apply__c = ra.id;
|
//}
|
|
}
|
|
}
|
// bp2
|
// System.debug('测试是否进入');
|
// RacList = [select id,Old_Rental_Apply__r.Name from Rental_Apply__c where Old_Rental_Apply__c in : LoopListRaOCon];
|
// //RacListElse = [select id,name,Old_Rental_Apply__r.Name from Rental_Apply__c where id in : LoopListRaOIdUnCon];
|
// for(Rental_Apply__c ra : trigger.new){
|
// if(RenMap.containsKey(ra.Old_Rental_Apply__c)){
|
// if(RacList.size()>0){
|
// ra.Name = RacList[LoopListRaN.get(ra.Old_Rental_Apply__c)].Old_Rental_Apply__r.Name+'-'+(RacList.size()+1);
|
// ra.Rental_Received_Day__c = null;
|
// ra.All_Delivery_Flag_c__c = false;
|
// }
|
// }else{
|
// if(ra.Old_Rental_Apply__c!=null){
|
// ra.Name = ra.Name+'-'+1;
|
// ra.Rental_Received_Day__c = null;
|
// ra.All_Delivery_Flag_c__c = false;
|
// }
|
// }
|
// }
|
// bp2
|
}
|
/*************************Insert 20160513 End***************************/
|
|
for(Rental_Apply__c ra : trigger.new) {
|
// xiongyl--add--start
|
ra.HP_pic_sign_txt__c = ra.HP_pic_sign_rich__c;
|
// OLY_OCM-1137 wang 2020-08-14 start
|
String hprs_rich = String.isBlank(ra.HP_received_sign_rich__c) ? '' : ra.HP_received_sign_rich__c.replaceAll('https:', 'http:');
|
String hprs_text = String.isBlank(ra.HP_received_sign_text__c) ? '' : ra.HP_received_sign_text__c.replaceAll('https:', 'http:');
|
if (hprs_rich != hprs_text) {
|
ra.HP_received_sign_text__c = ra.HP_received_sign_rich__c;
|
}
|
// OLY_OCM-1137 wang 2020-08-14 end
|
// xiongyl--add--end
|
if (Trigger.isUpdate && ra.Status__c == FixtureUtil.raStatusMap.get(FixtureUtil.RaStatus.Yi_Chu_Ku_Zhi_Shi.ordinal())
|
&& String.isBlank(((Rental_Apply__c) Trigger.oldMap.get(ra.Id)).HP_pic_sign_rich__c)
|
&& !String.isBlank(ra.HP_pic_sign_rich__c)
|
) {
|
ra.HP_pic_sign_day__c = System.today();
|
}
|
//*************************Update 20160708 No.10 趙徳芳 Start*************************//
|
//这里取消了自动填日期的需求
|
/*
|
if (Trigger.isUpdate && ra.Status__c == '出库指示完了'
|
&& String.isBlank(((Rental_Apply__c) Trigger.oldMap.get(ra.Id)).HP_received_sign_rich__c)
|
&& !String.isBlank(ra.HP_received_sign_rich__c)
|
) {
|
ra.HP_received_sign_day__c = System.today();
|
}
|
*/
|
System.debug('测试ra.HP_received_sign_rich__c是否进入'+ra.HP_received_sign_rich__c);
|
if (Trigger.isUpdate
|
&& !String.isBlank(ra.HP_received_sign_rich__c)
|
) {
|
ra.Test_Element__c = ra.Test_Element__c +'a';
|
if(ra.Test_Element__c.length()>100){
|
ra.Test_Element__c = 'a';
|
}
|
}
|
//*************************Update 20160708 No.10 趙徳芳 End***************************//
|
|
|
if (ra.Request_shipping_day__c != null && ra.Request_return_day__c != null &&
|
(trigger.isInsert || (trigger.isUpdate &&
|
(Trigger.oldMap.get(ra.Id).get('Request_shipping_day__c') != ra.Request_shipping_day__c ||
|
Trigger.oldMap.get(ra.Id).get('Request_return_day__c') != ra.Request_return_day__c)
|
)
|
)) {
|
raList.add(ra);
|
}
|
if (String.isBlank(ra.Hospital__c) == false) {
|
hospitalIds.add(ra.Hospital__c);
|
}
|
if (String.isBlank(ra.Campaign__c) == false) {
|
campaignIds.add(ra.Campaign__c);
|
}
|
|
// 備品申請は1つずつ作りますから
|
if (String.isBlank(ra.Repair__c) == false) {
|
// 意义不明 0715 梁伟
|
//Repair__c r = [select Agreed_Date__c, Maintenance_Contract__c from Repair__c where Id = :ra.Repair__c];
|
if (trigger.isInsert) {
|
List<Rental_Apply__c> rs = [select Id from Rental_Apply__c where Repair__c = :ra.Repair__c and Status__c <> '取消' and Status__c <> '删除'];
|
if (rs.size() > 0
|
&& ra.Old_Rental_Apply__c == null // SWAG-B6J7LD 分单时可以重复申请
|
) {
|
ra.addError('同一个型号的修理记录不能重复申请备品');
|
}
|
}
|
// 更新的时候
|
// 更新的时候不是一个一个的,加上了修理变化的条件 0715 梁伟
|
if (trigger.isUpdate && ra.Repair__c != trigger.oldMap.get(ra.Id).Repair__c) {
|
List<Rental_Apply__c> rs = [select Id from Rental_Apply__c where Repair__c = :ra.Repair__c and Id <> :ra.Id and Status__c <> '取消' and Status__c <> '删除'];
|
if (rs.size() > 0
|
&& ra.Old_Rental_Apply__c == null // SWAG-B6J7LD 分单时可以重复申请
|
) {
|
ra.addError('同一个型号的修理记录不能重复申请备品');
|
}
|
}
|
}
|
if (String.isBlank(ra.QIS_number__c) == false) {
|
if (trigger.isInsert) {
|
List<Rental_Apply__c> rs = [select Id from Rental_Apply__c where QIS_number__c = :ra.QIS_number__c and Status__c <> '取消' and Status__c <> '删除'];
|
if (rs.size() > 0
|
&& ra.Old_Rental_Apply__c == null
|
) {
|
ra.addError('同一个QIS记录不能重复申请备品');
|
}
|
}
|
if (trigger.isUpdate && ra.QIS_number__c != trigger.oldMap.get(ra.Id).QIS_number__c) {
|
List<Rental_Apply__c> rs = [select Id from Rental_Apply__c where QIS_number__c = :ra.QIS_number__c and Id <> :ra.Id and Status__c <> '取消' and Status__c <> '删除'];
|
if (rs.size() > 0
|
&& ra.Old_Rental_Apply__c == null
|
) {
|
ra.addError('同一个QIS记录不能重复申请备品');
|
}
|
}
|
}
|
/*
|
if (String.isBlank(ra.Follow_UP_Opp__c) == false) {
|
Opportunity opp = [select Id, StageName, SAP_Send_OK__c from Opportunity where Id = :ra.Follow_UP_Opp__c];
|
if (ra.demo_purpose2__c == '已购待货' && opp.StageName != '注残') {
|
ra.addError('已购待货时,跟进的询价必须是注残');
|
}
|
}
|
*/
|
// 分割の場合、所有者を設定
|
if (Trigger.isInsert && ra.Old_Rental_Apply__c != null) {
|
//Rental_Apply__c oldRa = [select OwnerId from Rental_Apply__c where Id = :ra.Old_Rental_Apply__c];
|
//ra.OwnerId = oldRa.OwnerId;
|
//ra.Status__c = '已批准';
|
if (!ra.SupplementCreated__c) {//补充OPD计划创建的备品借出申请跳过
|
Rental_Apply__c oldRa = [select OwnerId from Rental_Apply__c where Id = :ra.Old_Rental_Apply__c];
|
ra.OwnerId = oldRa.OwnerId;
|
ra.Status__c = '已批准';
|
}
|
}
|
|
//wangweipeng 2021/09/01 SFDC-C4H4BM start
|
//如果是第一次赋值,把当前时间保存到签收单日期字段里面
|
//如果签收单为不合格,并且再次修改签收单那么把当前时间保存到签收单日期里面
|
if (Trigger.isBefore) {
|
if(Trigger.isInsert){
|
if(ra.HP_received_sign_rich__c != null && ra.HP_received_sign_rich__c != ''){
|
ra.HP_received_sign_NewDate__c = Date.today();
|
}
|
}else if(Trigger.isUpdate){
|
if(Trigger.oldMap.get(ra.Id).HP_received_sign_rich__c != ra.HP_received_sign_rich__c){
|
//签收单不合格 为 true 或者 备品中心确认 为false时,每回修改签收单都需要记录一个修改时间
|
if(ra.HP_received_sign_NG__c || !ra.AssetManageConfirm__c){
|
ra.HP_received_sign_NewDate__c = Date.today();
|
}else{
|
if(ra.HP_received_sign_NewDate__c == null){//判断上传签收单日期是否为空,如果为空证明这是第一次上传
|
if(ra.HP_received_sign_rich__c != null && ra.HP_received_sign_rich__c != ''){
|
ra.HP_received_sign_NewDate__c = Date.today();
|
}
|
}
|
}
|
}
|
}
|
}
|
//wangweipeng 2021/09/01 SFDC-C4H4BM end
|
}
|
|
//List<Account> accs = [SELECT Id, Province_formula__c, State_Text__c FROM Account WHERE Id IN: hospitalIds];
|
Map<Id, Account> accMap = new Map<Id, Account>();
|
if (hospitalIds.size() > 0) accMap.putAll([SELECT Id, Province_formula__c, State_Text__c FROM Account WHERE Id IN: hospitalIds ]);
|
|
//List<Campaign> cams = [SELECT Id, EndDate FROM Campaign WHERE Id IN: campaignIds];
|
Map<Id, Campaign> camMap = new Map<Id, Campaign>();
|
if (campaignIds.size() > 0) camMap.putAll([SELECT Id, EndDate FROM Campaign WHERE Id IN: campaignIds ]);
|
|
//Map<Id, Repair__c> repairMap = new Map<Id, Repair__c>();
|
//if (repairIds.size() > 0) repairMap.putAll([SELECT Id FROM Repair__c WHERE Id IN: repairIds]);
|
//Map<String, String> HashMap = new Map<String,string>();
|
if (raList.size() > 0) {
|
Date maxDate = Date.today();
|
Date minDate = Date.today();
|
for (Integer i = 0; i < raList.size(); i++) {
|
if (raList[i].Request_shipping_day__c < minDate) {
|
minDate = raList[i].Request_shipping_day__c;
|
}
|
if (raList[i].Request_return_day__c > maxDate) {
|
maxDate = raList[i].Request_return_day__c;
|
}
|
}
|
|
Map<String,Integer> wdMap = new Map<String,Integer>();
|
List<OlympusCalendar__c> workday = [
|
select Id, Date__c, IsWorkDay__c
|
from OlympusCalendar__c
|
where Date__c >= :minDate
|
and Date__c <= :maxDate];
|
for (OlympusCalendar__c wd : workday) {
|
wdMap.put(wd.Date__c.format(), Integer.valueOf(wd.IsWorkDay__c));
|
}
|
|
for (Rental_Apply__c ra : raList) {
|
Integer cntDay = ra.Request_shipping_day__c.daysBetween(ra.Request_return_day__c);
|
Decimal cnt = 0;
|
for (Integer i = 0; i < cntDay + 1; i++) {
|
cnt += wdMap.get(ra.Request_shipping_day__c.addDays(i).format()) == null ? 0 : wdMap.get(ra.Request_shipping_day__c.addDays(i).format());
|
}
|
ra.loaner_date__c = cnt;
|
if (accMap.containskey(ra.Hospital__c)) {
|
ra.HP_Province__c = accMap.get(ra.Hospital__c).Province_formula__c;
|
}
|
|
|
//if (String.isBlank(ra.Old_Rental_Apply__c) == true) {
|
// 「希望客户使用结束日」のチェック
|
//Set<String> purposeCheck = new Set<String>{'引发询价', '询价跟进'};
|
//Set<String> provinceCheck = new Set<String>{'内蒙古自治区', '青海省', '宁夏回族自治区', '新疆维吾尔自治区', '黑龙江', '吉林省', '西藏自治区'};
|
|
// 使用目的2 は"引发询价""询价跟进"の場合
|
//if (purposeCheck.contains(ra.demo_purpose2__c)) {
|
// 遠隔地の場合、30日
|
// if (accMap.containskey(ra.Hospital__c) && (provinceCheck.contains(accMap.get(ra.Hospital__c).Province_formula__c) || provinceCheck.contains(accMap.get(ra.Hospital__c).State_Text__c))) {
|
// if (cnt > 30) ra.addError('「希望客户使用结束日」设置超过预期值(30工作日)');
|
// 普通、20日
|
// } else {
|
// if (cnt > 20) ra.addError('「希望客户使用结束日」设置超过预期值(20工作日)');
|
// }
|
//}
|
|
// 学会の終了日から経った
|
// 使用目的2 は"学会/展台"の場合
|
//if (ra.demo_purpose2__c == '学会/展台' && camMap.containskey(ra.Campaign__c) && camMap.get(ra.Campaign__c).EndDate != null) {
|
// Integer campaignDay = camMap.get(ra.Campaign__c).EndDate.daysBetween(ra.Request_return_day__c);
|
// Decimal campaignCnt = 0;
|
// for (Integer i = 0; i < campaignDay + 1; i++) {
|
// campaignCnt += wdMap.get(camMap.get(ra.Campaign__c).EndDate.addDays(i).format()) == null ? 0 : wdMap.get(camMap.get(ra.Campaign__c).EndDate.addDays(i).format());
|
// }
|
|
// if (campaignCnt > 5) ra.addError('「希望客户使用结束日」设置超过预期值(5工作日)');
|
//}
|
//}
|
}
|
}
|
}
|
}
|