Development questions

Write a trigger on Lead to prevent conversion if certain custom fields or a related checklist task is incomplete.

Use before update on Lead and detect the conversion (IsConverted going false to true). Block with addError if the requirement isn't met.

apex
trigger LeadTrigger on Lead (before update) {
    Set<Id> leadIds = new Set<Id>();
    for (Lead l : Trigger.new) if (l.IsConverted && !Trigger.oldMap.get(l.Id).IsConverted) leadIds.add(l.Id);
    Map<Id, Integer> openTasks = new Map<Id, Integer>();
    for (AggregateResult ar : [SELECT WhoId w, COUNT(Id) c FROM Task WHERE WhoId IN :leadIds
                               AND IsClosed = false GROUP BY WhoId]) openTasks.put((Id) ar.get('w'), (Integer) ar.get('c'));
    for (Lead l : Trigger.new) {
        if (leadIds.contains(l.Id) && (l.Qualification_Notes__c == null || openTasks.containsKey(l.Id))) {
            l.addError('Complete the required field and close checklist tasks before converting.');
        }
    }
}
apex-triggertriggercodingscenariolead-conversion