public with sharing class EventUtility
{
public void EventUtility()
{}
public void ValidateRecord(List<Event> LstEvent)
{
map<Id,List<Event>> mEvent = new map<Id,List<Event>>();
set<Id> sOwner = new set<Id>();
for(Event t : LstEvent)
{
sOwner.add(t.ownerid);
}
for(Event t: [SELECT OwnerId, WhoId, WhatId, StartDateTime, EndDateTime FROM Event where OwnerId in :sOwner])
{
if(mEvent.containsKey(t.OwnerId))
{
list<Event> lst = mEvent.get(t.OwnerId);
lst.add(t);
mEvent.put(t.OwnerId,lst);
}
else
{
list<Event> lst = new list<Event>();
lst.add(t);
mEvent.put(t.OwnerId,lst);
}
}
String errorMsg = 'Record Already Exists : ';
String baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
boolean IsOverlap = false;
for(Event newRecords : LstEvent)
{
if(mEvent.containsKey(newRecords.ownerid))
{
for(Event userrecords : mEvent.get(newRecords.ownerid))
{
IsOverlap = false;
IsOverlap = TimePeriodOverlap(newRecords.StartDateTime,newRecords.EndDateTime,userrecords.StartDateTime,userrecords.EndDateTime);
system.debug('IsOverlap: ' + IsOverlap);
if (IsOverlap == true && (userrecords.ownerid == newRecords.ownerid))
{
newRecords.addError(errorMsg + '<a target="_blank" href =' +baseUrl+'/'+userrecords.id+'> (Duplicate Record)</a>',false);
}
}
}
}
}
public boolean TimePeriodOverlap(DateTime BS, DateTime BE, DateTime TS, DateTime TE)
{
// More simple?
// return !((TS < BS && TE < BS) || (TS > BE && TE > BE));
// The version below, without comments
/*
return (
(TS >= BS && TS < BE) || (TE <= BE && TE > BS) || (TS <= BS && TE >= BE)
);
*/
return (
// 1. Case:
//
// TS-------TE
// BS------BE
//
// TS is after BS but before BE
(TS >= BS && TS < BE)
|| // or
// 2. Case
//
// TS-------TE
// BS---------BE
//
// TE is before BE but after BS
(TE <= BE && TE > BS)
|| // or
// 3. Case
//
// TS----------TE
// BS----BE
//
// TS is before BS and TE is after BE
(TS <= BS && TE >= BE)
);
}
}
|