Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Id queueId = [SELECT Id FROM Group WHERE Name = 'Channel Sales Managers' AND Type = 'Queue' LIMIT 1].id;
- Id currentProfileId = userinfo.getProfileId();
- List<Profile> profileName = [SELECT Name FROM Profile WHERE ID = :currentProfileId LIMIT 1];
- for(Integer i = 0; i < Trigger.New.size(); i++){
- if(profileName[0].Name == 'Partner Portal User' || profileName[0].Name == 'Partner Manager' ||
- profileName[0].Name == 'Partner Community User') {
- Trigger.new[i].OwnerId = queueId;
- Trigger.new[i].Status = 'Channel Submitted';
- }
- }
- }
- if(Trigger.isInsert && Trigger.isAfter) {
- List<LeadShare> sharesToInsert = new List<LeadShare>();
- Id currentProfileId = userinfo.getProfileId();
- List<Profile> profileName = [SELECT Name FROM Profile WHERE ID = :currentProfileId LIMIT 1];
- List<Lead> toUpdate = new List<Lead>();
- toUpdate = [SELECT Id, CreatedById, Partner__c FROM Lead WHERE Id IN :Trigger.New];
- List<Lead> newLeads = new List<Lead>();
- for(Integer i = 0; i < Trigger.New.size(); i++){
- if(profileName[0].Name == 'Partner Portal User' || profileName[0].Name == 'Partner Manager' ||
- profileName[0].Name == 'Partner Community User') {
- LeadShare leadShare = new LeadShare();
- leadShare.LeadId = Trigger.new[i].Id;
- leadShare.UserOrGroupId = Trigger.new[i].CreatedById;
- leadShare.LeadAccessLevel = 'Read';
- sharesToInsert.add(leadShare);
- }
- }
- insert sharesToInsert;
- for(Lead l : toUpdate) {
- if(l.Partner__c == null) {
- l.Partner__c = l.CreatedById;
- newLeads.add(l);
- }
- }
- update newLeads;
- }
- if(Trigger.isUpdate) {
- //When a lead status is updated to "Channel Registered," this will
- //update the status on the corresponding Campaign Member record
- List<Lead> updatedLeads = new List<Lead>();
- Map<Id, CampaignMember> members = new Map<Id, CampaignMember>([SELECT Id, LeadId, CampaignId FROM CampaignMember WHERE LeadId IN :Trigger.New]);
- List<CampaignMember> membersToUpdate = new List<CampaignMember>();
- Map<Id, CampaignMember> leadIds = new Map<Id, CampaignMember>();
- List<String> companies = new List<String>();
- List<String> domains = new List<String>();
- String nameToMatch1;
- String nameToMatch2;
- List<Lead> sameCompanyLeads = new List<Lead>();
- List<Lead> newLeadsToUpdate = new List<Lead>();
- for(Lead thisLead : Trigger.New) {
- Lead oldLead = Trigger.oldMap.get(thisLead.Id);
- Boolean oldLeadIsRegistered = oldLead.Status.equals('Channel Registered');
- Boolean newLeadIsRegistered = thisLead.Status.equals('Channel Registered');
- if(!oldLeadIsRegistered && newLeadIsRegistered) {
- updatedLeads.add(thisLead);
- nameToMatch1 = thisLead.Company;
- if (nameToMatch1 != null) {
- nameToMatch1 = nameToMatch1.remove(',');
- nameToMatch1 = nameToMatch1.remove('.');
- nameToMatch1 = nameToMatch1.remove('Inc');
- nameToMatch1 = nameToMatch1.remove('LLC');
- nameToMatch1 = nameToMatch1.remove('Credit Union');
- nameToMatch1 = nameToMatch1.remove('Company');
- nameToMatch1 = nameToMatch1.remove('/');
- nameToMatch1 = nameToMatch1.remove('&');
- nameToMatch1 = nameToMatch1.remove(''');
- nameToMatch1 = nameToMatch1.replaceAll('[\s]', '%');
- if (!nameToMatch1.endsWith('%')) {
- nameToMatch1 += '%';
- }
- }
- nameToMatch2 = nameToMatch1.remove('Corp');
- nameToMatch2 = nameToMatch2.remove('FCU');
- nameToMatch2 = nameToMatch2.remove('CU');
- companies.add(nameToMatch1);
- companies.add(nameToMatch2);
- if(thisLead.Email_Domain__c != 'yahoo.com' && thisLead.Email_Domain__c != 'gmail.com' &&
- thisLead.Email_Domain__c != 'hotmail.com' && thisLead.Email_Domain__c != 'zoho.com' &&
- thisLead.Email_Domain__c != 'outlook.com') {
- domains.add(thisLead.Email_Domain__c);
- }
- }
- }
- //If we find another lead in the Channel Submitted status with the same email domain OR the same company,
- //we update the status as Channel Registered
- sameCompanyLeads = [SELECT Id, Email_Domain__c, Company, Status FROM Lead WHERE Owner.Name = 'Channel Sales Managers' AND Status IN('Channel Submitted') AND Id NOT IN :updatedLeads AND (Email_Domain__c IN :domains OR Company IN :companies)];
- //AND (Email_Domain__c IN :domains OR Company IN :companies)
- for(Lead thisLead : sameCompanyLeads) {
- thisLead.Status = 'Channel Registered (Affiliated)';
- newLeadsToUpdate.add(thisLead);
- }
- for(CampaignMember thisCM : members.values()) {
- CampaignMember thisMember = members.get(thisCM.Id);
- leadIds.put(thisCM.LeadId, thisMember);
- }
- for(Lead thisLead : updatedLeads) {
- if(leadIds.containsKey(thisLead.Id)) {
- CampaignMember thisMember = leadIds.get(thisLead.Id);
- thisMember.Status = 'Channel Registered';
- membersToUpdate.add(thisMember);
- }
- }
- try {
- Database.update( membersToUpdate );
- Database.update( newLeadsToUpdate );
- } catch(DmlException e) {
- System.debug('The following exception has occurred: ' + e.getMessage());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement