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;
|
}
|
}
|