| trigger CheckEventTimeChange on Event (before insert, after insert, after update) { | 
|     // Before Insertの時、ActivityDateModifiedDate__cをTodayに設定 | 
|     if (Trigger.isBefore && Trigger.isInsert) { | 
|         for (Event e : Trigger.new) { | 
|             if (e.WS_flg__c) continue; | 
|             e.ActivityDateModifiedDate__c = Date.today(); | 
|             if (e.Activity_Type2__c == 'Holiday') { | 
|                 e.ShowAs = 'OutOfOffice'; | 
|             } | 
|         } | 
|     } | 
|     // -------------------ここからはAfter------------------- | 
|     else { | 
|         // after insert, after update | 
|         List<String> eIdsForSchl = new List<String>(); | 
|         List<Event__c> ecList = new List<Event__c>(); | 
|   | 
|         Map<String, Boolean> eScheduleMap = new Map<String, Boolean>(); | 
|         Map<String, Date> eActivityDateMap = new Map<String, Date>(); | 
|          | 
|         if (Trigger.isInsert) { | 
|             for (Event e : Trigger.new) { | 
|                 if (e.WS_flg__c) continue; | 
|                  | 
| System.debug('e.ActivityDate:::::'+e.ActivityDate); | 
| System.debug('e.SyncCreatedDate__c:::::'+e.SyncCreatedDate__c); | 
| System.debug('e.CreatedDate:::::'+e.CreatedDate); | 
|                  | 
|                 // ActivityDateの比較対象を設定 | 
|                 Date compareDate = null; | 
|                 // 外部APIからの作成日とEventの作成日を比較 | 
|                 // 12.1夜で12.2の「計画」を立ち、12.2に同期されても、12.1の日付を見て「計画」と見做しため | 
|                 if (e.SyncCreatedDate__c != null && e.SyncCreatedDate__c < e.CreatedDate) { | 
|                     compareDate = Date.valueOf(e.SyncCreatedDate__c); | 
|                 } else { | 
|                     compareDate = Date.valueOf(e.CreatedDate); | 
|                 } | 
|                  | 
|                 // 移行データもあるので、e.IsScheduled__cを見る | 
|                 Boolean scheduled = true; | 
|                 if (e.ActivityDate <= compareDate && !e.IsScheduled__c) { | 
|                     scheduled = false; | 
|                 } | 
|                 eScheduleMap.put(e.Id, scheduled); | 
|                 eActivityDateMap.put(e.Id, e.ActivityDateModifiedDate__c); | 
|                 eIdsForSchl.add(e.Id); | 
|             } | 
|         } else { | 
|             // SPEC ホームにて活動のDragタイミングはなぜかAfterです | 
|             for (Event e : Trigger.new) { | 
|                 if (e.WS_flg__c) continue; | 
|                  | 
|                 System.debug('e.StartDateTime:::::'+e.StartDateTime); | 
|                 System.debug('e.OldStartDateTime:::::'+Trigger.oldMap.get(e.Id).get('StartDateTime')); | 
|                 System.debug('e.EndDateTime:::::'+e.EndDateTime); | 
|                 System.debug('e.OldEndDateTime:::::'+Trigger.oldMap.get(e.Id).get('EndDateTime')); | 
|                 // EventCより修正が入る時、下記のロジックを無視 | 
|                 if (!StaticParameter.NotUpdEventCFlg | 
|                         && (e.StartDateTime != Trigger.oldMap.get(e.Id).get('StartDateTime') | 
|                             || e.EndDateTime != Trigger.oldMap.get(e.Id).get('EndDateTime'))) { | 
|                     Date activityDateModifiedDate = e.ActivityDateModifiedDate__c;   // 基本更新しないです | 
|                     Boolean scheduled = e.IsScheduled__c;   // 基本更新しないです | 
|                     Boolean resetSchedule = false; | 
|                      | 
|                     // ActivityDate変動の場合、項目値再設定 | 
|                     if (Date.valueOf(Trigger.oldMap.get(e.Id).get('ActivityDate')) != e.ActivityDate) { | 
|                         // 違う日に移動した場合、scheduled を再セット | 
|                         resetSchedule = true; | 
|                          | 
|                         // 外部API同期の場合、SyncCreatedDate__cが必ず変わる | 
|                         if (Trigger.oldMap.get(e.Id).get('SyncCreatedDate__c') != e.SyncCreatedDate__c) { | 
|                             activityDateModifiedDate = Date.valueOf(e.SyncCreatedDate__c); | 
|                         } | 
|                         // SF側更新の場合、操作日TODAYに設定 | 
|                         else { | 
|                             activityDateModifiedDate = Date.today(); | 
|                         } | 
|                         if (e.ActivityDate <= activityDateModifiedDate) { | 
|                             scheduled = false; | 
|                         } else { | 
|                             scheduled = true; | 
|                         } | 
|                     } | 
|                      | 
|                     List<Daily_Report__c> prevReport = ControllerUtil.reportSelectByDate(Date.valueOf(Trigger.oldMap.get(e.Id).get('ActivityDate')), e.OwnerId); | 
|                     List<Daily_Report__c> nowReport = ControllerUtil.reportSelectByDate(e.ActivityDate, e.OwnerId); | 
|                      | 
|                     eScheduleMap.put(e.Id, scheduled); | 
|                     eActivityDateMap.put(e.Id, activityDateModifiedDate); | 
|                     eIdsForSchl.add(e.Id); | 
|                      | 
|                     // ①日報がない(Eventと日報の関連なし)、どこへも移動できます | 
|                     if (String.isBlank(e.WhatId)) { | 
|                          | 
|                     // ②日報あり | 
|                     } else { | 
|                         // 移動元、移動先日報共に作成中、移動可能 | 
|                         if (prevReport.size() > 0 && prevReport[0].Status_With_Check__c == '草案中' | 
|                                 && nowReport.size() > 0 && nowReport[0].Status_With_Check__c == '草案中') { | 
|                             // EventC更新 | 
|                             List<Event__c> ecs = [select Subject__c, Location__c from Event__c where Id = :e.EventC_ID__c]; | 
|                             if (ecs.size() > 0) { | 
|                                 ecs[0].StartDateTime__c = e.StartDateTime; | 
|                                 ecs[0].DurationInMinutes__c = e.DurationInMinutes; | 
|                                 ecs[0].EndDateTime__c = e.StartDateTime.addMinutes(e.DurationInMinutes); | 
|                                 ecs[0].ActivityDate__c = e.ActivityDate; | 
|                                 ecs[0].ActivityDateTime__c = e.StartDateTime; | 
|                                 ecs[0].Daily_Report__c = nowReport[0].Id; | 
|                                 ecs[0].IsScheduled__c = scheduled; | 
|                                 // 日が変わらない場合、時間がどう変更しても、計画4つ項目を更新しない | 
|                                 if (resetSchedule) { | 
|                                     if (ecs[0].IsScheduled__c) { | 
|                                         ecs[0].IsScheduled_StartDateTime__c = e.StartDateTime; | 
|                                         ecs[0].IsScheduled_EndDateTime__c = e.StartDateTime.addMinutes(e.DurationInMinutes); | 
|                                         ecs[0].IsScheduled_Location__c = ecs[0].Location__c; | 
|                                         ecs[0].IsScheduled_Subject__c = ecs[0].Subject__c; | 
|                                     } else { | 
|                                         ecs[0].IsScheduled_StartDateTime__c = null; | 
|                                         ecs[0].IsScheduled_EndDateTime__c = null; | 
|                                         ecs[0].IsScheduled_Location__c = null; | 
|                                         ecs[0].IsScheduled_Subject__c = null; | 
|                                     } | 
|                                 } | 
|                                 ecList.add(ecs[0]); | 
|                             } | 
|                         } else { | 
|                             e.addError('不能更改活动的时间'); | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|         StaticParameter.EventOpportunityPileUpExeFlg = true; | 
|         if (eIdsForSchl.size() > 0) { | 
|             List<Event> eSchlChange = new List<Event>(); | 
|             for (String id : eIdsForSchl) { | 
|                 eSchlChange.add(new Event( | 
|                     Id = id, | 
|                     IsScheduled__c = eScheduleMap.get(id), | 
|                     ActivityDateModifiedDate__c = eActivityDateMap.get(id) | 
|                 )); | 
|             } | 
|             ControllerUtil.upsEvent(eSchlChange); | 
|         } | 
|          | 
|         if (!StaticParameter.NotUpdEventCFlg) { | 
|             ControllerUtil.upsEventC(ecList); | 
|         } | 
|         StaticParameter.NotUpdEventCFlg = false; | 
|     } | 
| } |