/**
|
* 前提、Eventには、Event__cへの参照Idがあります。
|
* ここはEvent__cを更新することを禁止
|
* ①.Event__cを新規更新時、 ==> Eventに
|
* ②.Event__cにはもしEventへの参照Idがある場合(日報一覧のinit時mappingしたしかない、init時Event__cデータをinsertする)
|
*/
|
trigger XinEventC2Event on Event__c (after delete, after insert, after update, before insert, before update) {
|
if (Trigger.isBefore) {
|
// isSchedule絡みの項目を設定
|
for (Event__c ec : Trigger.new) {
|
// isScheduleフラグ設定
|
if (Trigger.isInsert) {
|
Date compareDate = null;
|
if (ec.SyncCreatedDate__c != null && ec.SyncCreatedDate__c < System.now()) {
|
compareDate = Date.valueOf(ec.SyncCreatedDate__c);
|
} else {
|
compareDate = Date.valueOf(System.now());
|
}
|
if (ec.ActivityDate__c > compareDate) {
|
ec.IsScheduled__c = true;
|
}
|
}
|
|
if (ec.IsScheduled__c) {
|
if (Trigger.isInsert) {
|
ec.IsScheduled_StartDateTime__c = ec.StartDateTime__c;
|
ec.IsScheduled_EndDateTime__c = ec.EndDateTime__c;
|
ec.IsScheduled_Location__c = ec.Location__c;
|
ec.IsScheduled_Subject__c = ec.Subject__c;
|
}
|
} else {
|
ec.IsScheduled_StartDateTime__c = null;
|
ec.IsScheduled_EndDateTime__c = null;
|
ec.IsScheduled_Location__c = null;
|
ec.IsScheduled_Subject__c = null;
|
}
|
if(ec.Subject__c == null || ec.Subject__c == ''){
|
ec.Subject__c = ec.Activity_Purpose__c;
|
}
|
}
|
/*
|
// Account_ID__cとCampaign_ID__cをセット
|
List<String> accList = new List<String>();
|
List<String> campList = new List<String>();
|
for (Event__c ec : Trigger.new) {
|
// 想定:whatidがあれば必ずLocationもある
|
if (!String.isBlank(ec.whatid__c)) {
|
if (ec.whatid__c.startsWith('001')) {
|
accList.add(ec.Location__c);
|
}
|
if (ec.whatid__c.startsWith('701')) {
|
campList.add(ec.Location__c);
|
}
|
}
|
}
|
// 逆引き
|
Map<String, List<String>> accMap = new Map<String, List<String>>();
|
Map<String, List<String>> campMap = new Map<String, List<String>>();
|
if (accList.size() > 0) accMap = ControllerUtil.getAccsByName(accList);
|
if (campList.size() > 0) campMap = ControllerUtil.getCampsByName(campList);
|
|
for (Event__c ec : Trigger.new) {
|
if (ec.Free_Input__c) {
|
ec.whatid__c = null;
|
ec.Account_ID__c = null;
|
ec.Campaign_ID__c = null;
|
} else {
|
if (!String.isBlank(ec.whatid__c)) {
|
if (ec.whatid__c.startsWith('001')) {
|
// 逆引きの結果は一件のみ、且つその結果はwhatidと同じの場合、対応するIDをセット
|
if (accMap.get(ec.Location__c) != null && accMap.get(ec.Location__c).size() == 1 && accMap.get(ec.Location__c).get(0) == ec.whatid__c) {
|
ec.Account_ID__c = ec.whatid__c;
|
ec.Campaign_ID__c = null;
|
} else {
|
// add error
|
}
|
}
|
if (ec.whatid__c.startsWith('701')) {
|
// 逆引きの結果は一件のみ、且つその結果はwhatidと同じの場合、対応するIDをセット
|
if (campMap.get(ec.Location__c) != null && campMap.get(ec.Location__c).size() == 1 && campMap.get(ec.Location__c).get(0) == ec.whatid__c) {
|
ec.Account_ID__c = null;
|
ec.Campaign_ID__c = ec.whatid__c;
|
} else {
|
// add error
|
}
|
}
|
} else {
|
ec.Account_ID__c = null;
|
ec.Campaign_ID__c = null;
|
}
|
}
|
}
|
|
// メアド設定
|
List<String> accIds = new List<String>();
|
for (Event__c ec : Trigger.new) {
|
if (Trigger.isInsert
|
|| Trigger.isUpdate && Trigger.oldMap.get(ec.Id).get('Account_ID__c') != ec.Account_ID__c) {
|
if (!String.isBlank(ec.Account_ID__c)) accIds.add(ec.Account_ID__c);
|
}
|
}
|
|
Map<String, Account> BMap = new Map<String, Account>();
|
Map<String, Account> SBMap = new Map<String, Account>();
|
if (accIds.size() > 0) {
|
List<Account> accs = ControllerUtil.selectBossMailAddr(accIds);
|
for (Account acc : accs) {
|
BMap.put(acc.Id, acc);
|
SBMap.put(acc.Id, acc);
|
}
|
}
|
|
for (Event__c ec : Trigger.new) {
|
if (String.isBlank(ec.Account_ID__c)) {
|
ec.Boss_Mail__c = null;
|
ec.Sub_Boss_Mail__c = null;
|
ec.Boss_Name__c = null;
|
ec.Sub_Boss_Name__c = null;
|
} else {
|
if (BMap.containsKey(ec.Account_ID__c)) {
|
Account a = BMap.get(ec.Account_ID__c);
|
ec.Boss_Mail__c = Parent.Boss__r.Email;
|
ec.Boss_Name__c = Parent.Boss__r.Name;
|
}
|
if (SBMap.containsKey(ec.Account_ID__c)) {
|
Account a = SBMap.get(ec.Account_ID__c);
|
ec.Sub_Boss_Mail__c = Parent.Sub_Boss__r.Email;
|
ec.Sub_Boss_Name__c = Parent.Sub_Boss__r.Name;
|
}
|
}
|
}
|
*/
|
// after
|
} else {
|
|
// ------------------------nextEvent処理------------------------
|
|
if (!Trigger.isDelete) {
|
List<String> nextIds = new List<String>();
|
|
for (Event__c ec : Trigger.new) {
|
// nextEvent ids 作成
|
if (Trigger.isInsert && ec.nextPlanDate__c != null) {
|
nextIds.add(ec.Id);
|
}
|
if (Trigger.isUpdate) {
|
Event__c oldec = new Event__c();
|
oldec = Trigger.oldMap.get(ec.Id);
|
if (ec.nextPlanDate__c != null
|
&& (ec.nextPlanTimePurpose__c != oldec.get('nextPlanTimePurpose__c')
|
|| ec.nextPlanDate__c != oldec.get('nextPlanDate__c'))) {
|
nextIds.add(ec.Id);
|
}
|
}
|
}
|
|
if (nextIds.size() > 0) {
|
Map<ID, Event> nextEventUpsertMap = new Map<ID, Event>();
|
for (Event ne : [select Id, NextEventC_ID__c, EventC_ID__c from Event where NextEventC_ID__c in :nextIds]){
|
nextEventUpsertMap.put(ne.NextEventC_ID__c, ne);
|
}
|
|
Map<String, String> checkEventCMap = new Map<String, String>();
|
for (Event__c nec : [select Id from Event__c where Id in :nextIds and Daily_Report__r.Status__c != '承認' and Daily_Report__r.Status__c != '非承認']){
|
checkEventCMap.put(nec.Id, nec.Id);
|
}
|
|
List<Event> save_eventsPla = new List<Event>();
|
|
for (Event__c ec : Trigger.new) {
|
// 承認、非承認の時、nextEvent処理なし
|
if (!checkEventCMap.containsKey(ec.Id)) continue;
|
|
Event nextEvent = new Event();
|
if (nextEventUpsertMap.containskey(ec.id)) {
|
nextEvent = nextEventUpsertMap.get(ec.id);
|
}
|
|
// EventC_ID__c がある場合、upsert対象外にする
|
if (!String.isBlank(nextEvent.EventC_ID__c)) continue;
|
|
// nextPlanTimePurpose__cの分割
|
List<String> nextTimePurpose = ec.nextPlanTimePurpose__c.split(',');
|
String planStartHourText = '';
|
String planStartMinuteText = '';
|
String planEndHourText = '';
|
String planEndMinuteText = '';
|
String planPurposeText = '';
|
if(nextTimePurpose.size() >= 5){
|
planStartHourText = nextTimePurpose[0];
|
planStartMinuteText = zeroFill(nextTimePurpose[1]);
|
planEndHourText = nextTimePurpose[2];
|
planEndMinuteText = zeroFill(nextTimePurpose[3]);
|
planPurposeText = '';
|
for (Integer i = 4; i < nextTimePurpose.size() - 1; i++) {
|
planPurposeText += nextTimePurpose[i] + ',';
|
}
|
planPurposeText += nextTimePurpose[nextTimePurpose.size() - 1];
|
}
|
|
nextEvent.Subject = planPurposeText;
|
nextEvent.StartDateTime = Datetime.newInstance(ec.nextPlanDate__c.year(), ec.nextPlanDate__c.month(), ec.nextPlanDate__c.day(), Integer.valueOf(planStartHourText), Integer.valueOf(planStartMinuteText), 0);
|
nextEvent.EndDateTime = Datetime.newInstance(ec.nextPlanDate__c.year(), ec.nextPlanDate__c.month(), ec.nextPlanDate__c.day(), Integer.valueOf(planEndHourText), Integer.valueOf(planEndMinuteText), 0);
|
nextEvent.ActivityDateTime = nextEvent.StartDateTime;
|
nextEvent.ActivityDate = ec.nextPlanDate__c;
|
nextEvent.BeforeActivityDate__c = ec.nextPlanDate__c;
|
nextEvent.Activity_Type2__c = ec.Activity_Type2__c;
|
nextEvent.Purpose_Type__c = ec.Purpose_Type__c;
|
nextEvent.Related_Opportunity1__c = ec.Related_Opportunity1__c;
|
nextEvent.Related_Opportunity1_ID__c = ec.Related_Opportunity1_ID__c;
|
nextEvent.Related_Service1__c = ec.Related_Service1__c;
|
nextEvent.Related_Service1_ID__c = ec.Related_Service1_ID__c;
|
nextEvent.Location = ec.Location__c;
|
nextEvent.Main_Visit_Location__c = ec.Main_Visit_Location__c;
|
nextEvent.NextEventC_ID__c = ec.Id;
|
nextEvent.whatid__c = ec.whatid__c;
|
|
save_eventsPla.add(nextEvent);
|
}
|
// システム管理者権限で更新
|
ControllerUtil.upsEvent(save_eventsPla);
|
}
|
}
|
|
// ------------------------同期処理------------------------
|
|
// 更新対象 Id をセット
|
Map<Id, Event__c> eventCMap = new Map<Id, Event__c>(); // ①のデータ、同期対象
|
Set<String> eventCIdSet = new Set<String>(); // ①のデータ、削除対象
|
Map<Id, Event__c> eventC_eventMap = new Map<Id, Event__c>(); // ②のデータ
|
String strAcache = '';
|
if (Trigger.isDelete) {
|
for (Event__c ec : Trigger.old) {
|
eventCIdSet.add(ec.Id);
|
if (ec.Event_ID__c != null && ec.Event_ID__c != '') eventC_eventMap.put(ec.Event_ID__c, ec);
|
}
|
// 削除対象のEvent
|
ControllerUtil.delEvent(eventCIdSet, eventC_eventMap);
|
} else {
|
for (Event__c ec : Trigger.new) {
|
Event__c oldec = new Event__c();
|
if (Trigger.isUpdate) {
|
oldec = Trigger.oldMap.get(ec.Id);
|
}
|
|
if (Trigger.isInsert
|
|| (Trigger.isUpdate
|
&& (ec.DataLoader__c == null || ec.DataLoader__c == oldec.DataLoader__c)
|
&& (ec.Subject__c != oldec.get('Subject__c')
|
|| ec.StartDateTime__c != oldec.get('StartDateTime__c')
|
|| ec.EndDateTime__c != oldec.get('EndDateTime__c')
|
|| ec.Main_Visit_Location__c != oldec.get('Main_Visit_Location__c')
|
|| ec.Activity_Type2__c != oldec.get('Activity_Type2__c')
|
|| ec.Purpose_Type__c != oldec.get('Purpose_Type__c')
|
|| ec.Location__c != oldec.get('Location__c')
|
|| ec.Related_Opportunity1__c != oldec.get('Related_Opportunity1__c')
|
|| ec.Related_Opportunity1_ID__c != oldec.get('Related_Opportunity1_ID__c')
|
|| ec.Related_Service1__c != oldec.get('Related_Service1__c')
|
|| ec.Related_Service1_ID__c != oldec.get('Related_Service1_ID__c')
|
|| ec.whatid__c != oldec.get('whatid__c')
|
|| ec.Purpose_TypeFSE__c != oldec.get('Purpose_TypeFSE__c')
|
|| ec.Purpose_TypeEscFSE__c != oldec.get('Purpose_TypeEscFSE__c')
|
|| ec.Activity_Purpose__c != oldec.get('Activity_Purpose__c')
|
|| ec.Activity_PurposeFSE__c != oldec.get('Activity_PurposeFSE__c')
|
|| ec.Activity_PurposeEscFSE__c != oldec.get('Activity_PurposeEscFSE__c')
|
|| ec.AppCdId__c != oldec.get('AppCdId__c')))) {
|
eventCMap.put(ec.Id, ec);
|
if (ec.Event_ID__c != null && ec.Event_ID__c != ''){
|
eventC_eventMap.put(ec.Event_ID__c, ec);
|
}
|
}
|
}
|
// 同期対象のEvent
|
ControllerUtil.upsEventC2Event(eventCMap, eventC_eventMap);
|
}
|
}
|
|
/** 0埋め処理 */
|
private String zeroFill(String str){
|
if(str.length() == 2){
|
return str;
|
}
|
else{
|
return '0' + str;
|
}
|
}
|
}
|