/**
|
* Maintenance_Contract_Asset__c と Reapire__c(Account経由)は主従関係、そのままupdate OK
|
*/
|
trigger MaintenanceContractAssetTrigger on Maintenance_Contract_Asset__c ( before insert, before update ) {
|
|
|
//deloitte-zhj 20231124 本地化导入 start
|
if((!Test.isRunningTest())&&System.Label.ByPassTrigger.contains(UserInfo.getUserId())){
|
return;
|
}
|
//deloitte-zhj 20231124 本地化导入 end
|
|
System.debug( '-----+MaintenanceContractAssetTrigger start');
|
|
// ----------------------------------------------------------------------
|
// ここより、修理のサービスコントラクト項目を自動的に更新するロジック
|
// ----------------------------------------------------------------------
|
|
// 前処理
|
// Set<Id> assetIds = new Set<Id>();
|
// Set<Id> serviceIds = new Set<Id>();
|
if (StaticParameter.MaintenanceContractAssetTrigger) {
|
List<String> locallastList = new List<String>();
|
List<String> locallist = new List<String>();
|
|
for ( Maintenance_Contract_Asset__c local : Trigger.New) {
|
locallastList.add(local.LastMContract__c);
|
locallist.add(local.Maintenance_Contract__c);
|
}
|
List<Maintenance_Contract__c> llmc = [select id,contractNextYear_new__c,serviceContractNextYear_new__c
|
from Maintenance_Contract__c
|
where Id in :locallastList];
|
List<Maintenance_Contract__c> lmc = [select id,RecordType.name from Maintenance_Contract__c where Id in :locallist];
|
|
Map<Id, Maintenance_Contract__c> map1 = new Map<Id, Maintenance_Contract__c>();
|
Map<Id, Maintenance_Contract__c> map2 = new Map<Id, Maintenance_Contract__c>();
|
|
for (Maintenance_Contract__c mc:llmc ) {
|
if (!map1.containsKey(mc.id)) {
|
map1.put(mc.id,mc);
|
}
|
}
|
for (Maintenance_Contract__c mc:lmc ) {
|
if (!map2.containsKey(mc.id)) {
|
map2.put(mc.id,mc);
|
}
|
}
|
List<Maintenance_Contract__c> mcList = new List<Maintenance_Contract__c>();
|
for ( Maintenance_Contract_Asset__c local : Trigger.New) {
|
// 2000/07/19 进程生成器 - 来年合同设置
|
Maintenance_Contract__c mc1 = new Maintenance_Contract__c();
|
Maintenance_Contract__c mc2 = new Maintenance_Contract__c();
|
if (map1.containsKey(local.LastMContract__c)) {
|
mc1 = map1.get(local.LastMContract__c);
|
if (local.LastMContract_Gap__c <= 365 && mc1.contractNextYear_new__c == null) {
|
//更新上一期维修合同的来年维修合同
|
mc1.contractNextYear_new__c = local.Maintenance_Contract__c;
|
}
|
}
|
if (map2.containsKey(local.Maintenance_Contract__c)&&map1.containsKey(local.LastMContract__c)) {
|
mc2 = map2.get(local.Maintenance_Contract__c);
|
if (local.LastMContract_Gap__c <= 365 && mc1.serviceContractNextYear_new__c == null && mc2.RecordType.name == '服务合同') {
|
//更新上一期维修合同的来年服务合同
|
mc1.serviceContractNextYear_new__c = local.Maintenance_Contract__c;
|
}
|
}
|
System.debug( '添加mc1='+mc1);
|
// System.debug( 'mc1.length='+mc1.length());
|
// system.assertEquals(mc1,null);
|
if (mc1.id!=null && !mcList.contains(mc1)){
|
|
mcList.add(mc1);
|
}
|
}
|
System.debug( '开始更新'+mcList);
|
if (mcList!=null&&mcList.size()!=0) {
|
update mcList;
|
}
|
|
|
}
|
|
|
|
// 処理対象となる修理一覧を得る
|
// List<Repair__c> repairList = [SELECT Id, SERVICE_CONTRACT_JUDEGE_DAY__C, Maintenance_Contract__c FROM Repair__C WHERE Delivered_Product__c IN :assetIds];
|
// 修理を更新すれば、修理のTriggerによって、修理のサービスコントラクト項目に値がセットされる
|
// update repairList;
|
|
// // 処理対象となる、サービス契約の一覧を得る
|
// List<Maintenance_Contract__c> serviceList = [SELECT Id, Contract_Start_Date__c, Contract_End_Date__c FROM Maintenance_Contract__c WHERE Id IN :serviceIds];
|
|
// ----------------------------------------------------------------------
|
// ここまで、サービスコントラクト項目を自動的に更新するロジック
|
// ----------------------------------------------------------------------
|
|
|
|
|
|
System.debug( '-----+MaintenanceContractAssetTrigger end');
|
|
}
|