buli
2023-06-27 8e07b5f23afd4c93d7e8d1f04d2e8dbca2628e5e
force-app/main/default/triggers/MaintenanceContractAssetTrigger.trigger
@@ -1,7 +1,7 @@
/**
 * Maintenance_Contract_Asset__c と Reapire__c(Account経由)は主従関係、そのままupdate OK
 */
trigger MaintenanceContractAssetTrigger on Maintenance_Contract_Asset__c ( after insert, after delete ) {
trigger MaintenanceContractAssetTrigger on Maintenance_Contract_Asset__c ( before insert, before update ) {
System.debug( '-----+MaintenanceContractAssetTrigger start');
@@ -10,13 +10,67 @@
    // ----------------------------------------------------------------------
    // 前処理
    Set<Id> assetIds = new Set<Id>();
    // Set<Id> assetIds = new Set<Id>();
//    Set<Id> serviceIds = new Set<Id>();
    for ( Maintenance_Contract_Asset__c local : ( Trigger.isInsert ? Trigger.New : Trigger.old)) {
        assetIds.add( local.Asset__c);
//        serviceIds.add( local.Maintenance_Contract__c);
    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によって、修理のサービスコントラクト項目に値がセットされる
@@ -28,6 +82,10 @@
    // ----------------------------------------------------------------------
    // ここまで、サービスコントラクト項目を自動的に更新するロジック
    // ----------------------------------------------------------------------
System.debug( '-----+MaintenanceContractAssetTrigger end');