
Here is my version of such a trigger
Trigger checkValidServiceDates on Service__c (after update) {
Map<Id, List<job__c>> serviceJobs = new Map<Id, List<job__c>>();
for(job__c serviceJob: [Select Id, Service__c, startDate__c, endDate__c From job__c WHERE Service__c IN :Trigger.newMap.keyset()]){
if(!serviceJobs.containsKey(serviceJob.Service__c)) {
serviceJobs.put(serviceJob.Service__c, new List<job__c>());
}
serviceJobs.get(serviceJob.Service__c).add(serviceJob);
}
for (Service__c service : Trigger.new) {
List<job__c> jobs = serviceJobs.get(service.Id);
if (jobs!= null && jobs.size()> 0) {
for (job__c job : jobs) {
if (job.startDate__c < service.startDate__c || job.startDate__c > service.endDate__c) {
service.addError('Existing jobs are out of range of the new service dates');
}
if (job.endDate__c < service.startDate__c || job.endDate__c > service.endDate__c) {
service.addError('Existing jobs are out of range of the new service dates');
}
}
}
}
}