public class MergeAccWorkshop {
public void CreateAccContOp(String compName, Integer howManyWorkers, String fName,String lName){
Account newAcc = New Account(Name=compName);
insert newAcc;
List<Contact> multiContact = New List<Contact>();
for(Integer workers=1;workers<=howManyWorkers;workers++){
Contact newCon = New Contact();
newCon.firstName = fName + ' ' + workers;
newCon.lastName= lName + ' ' + workers;
newCon.AccountId= newAcc.id;
multiContact.add(newCon);
}
insert multiContact;
List<Opportunity> multiOp = New List<Opportunity>();
for(Integer opp=1;opp<=10;opp++){
Opportunity newOp = New Opportunity();
newOp.Name = compName+ ' ' + opp;
newOp.CloseDate= date.TODAY()+(opp*15);
newOp.StageName = 'Value Proposition';
newOp.AccountId = newAcc.id;
multiOp.add(newOp);
}
insert multiOp;
}
public void deleteAccContOp(String DeleteAccName, String DeleteContactName){
String workersName = '%' + DeleteContactName + '%';
List<Contact> contactDelete = [SELECT Id
FROM Contact
WHERE Name LIKE :workersName];
Delete contactDelete;
String opName = '%' +DeleteAccName+ '%';
List<Opportunity> deleteOp =[SELECT Id
FROM Opportunity
WHERE Name LIKE :opName];
List<Account> deleteAcc = [SELECT Id
FROM Account
WHERE Name =:DeleteAccName];
delete deleteAcc;
}
}
// Scenario Prep.
// Account record create Online İhracat
/*
MergeAccWorkshop onlineIhracat = New MergeAccWorkshop();
onlineIhracat.CreateAccContOp('Online İhracat', 20, 'Online İhracat','Çalışan');
// Account record create Dream Solution
MergeAccWorkshop dreamSolution = New MergeAccWorkshop();
dreamSolution.CreateAccContOp('Dream Solution', 10, 'Dream Solution','Çalışan');
*/
// combine 2 company
// Dream Solution aquire Online İhracat.
// All of the contacts and opportunities must be transferred to the Dream Solution
/*
Account dreamSolution = [SELECT id, Name
FROM Account
WHERE Name = 'Dream Solution'];
Account onlineIhracat = [SELECT id, Name
FROM Account
WHERE Name = 'Online İhracat'];
merge dreamSolution onlineIhracat;
*/
// Clear the dummy data to test again.
/*
MergeAccWorkshop companyAndWorker = New MergeAccWorkshop();
companyAndWorker.deleteAccContOp('Dream Solution','Çalışan');
companyAndWorker.deleteAccContOp('Online İhracat','Çalışan');
*/
We add our class Annual revenue fields also.
public class MergeAccWorkshop {
public void CreateAccContOp(String compName, Integer howManyWorkers, String fName,String lName,Integer Revenue){
Account newAcc = New Account(Name=compName,AnnualRevenue=Revenue);
insert newAcc;
List<Contact> multiContact = New List<Contact>();
for(Integer workers=1;workers<=howManyWorkers;workers++){
Contact newCon = New Contact();
newCon.firstName = fName + ' ' + workers;
newCon.lastName= lName + ' ' + workers;
newCon.AccountId= newAcc.id;
multiContact.add(newCon);
}
insert multiContact;
List<Opportunity> multiOp = New List<Opportunity>();
for(Integer opp=1;opp<=10;opp++){
Opportunity newOp = New Opportunity();
newOp.Name = compName+ ' ' + opp;
newOp.CloseDate= date.TODAY()+(opp*15);
newOp.StageName = 'Value Proposition';
newOp.AccountId = newAcc.id;
multiOp.add(newOp);
}
insert multiOp;
}
public void deleteAccContOp(String DeleteAccName, String DeleteContactName){
String workersName = '%' + DeleteContactName + '%';
List<Contact> contactDelete = [SELECT Id
FROM Contact
WHERE Name LIKE :workersName];
Delete contactDelete;
String opName = '%' +DeleteAccName+ '%';
List<Opportunity> deleteOp =[SELECT Id
FROM Opportunity
WHERE Name LIKE :opName];
List<Account> deleteAcc = [SELECT Id
FROM Account
WHERE Name =:DeleteAccName];
delete deleteAcc;
}
}
// Scenario Prep.
// Account record create Online İhracat
/*
MergeAccWorkshop onlineIhracat = New MergeAccWorkshop();
onlineIhracat.CreateAccContOp('Online İhracat', 20, 'Online İhracat','Çalışan',100000);
// Account record create Dream Solution
MergeAccWorkshop dreamSolution = New MergeAccWorkshop();
dreamSolution.CreateAccContOp('Dream Solution', 10, 'Dream Solution','Çalışan',200000);
*/
// combine 2 company
// Dream Solution aquire Online İhracat.
// All of the contacts and opportunities must be transferred to the Dream Solution
// Also both companies annualrevenue must be combined.
Account dreamSolution = [SELECT id, Name, AnnualRevenue
FROM Account
WHERE Name = 'Dream Solution'];
Account onlineIhracat = [SELECT id, Name , AnnualRevenue
FROM Account
WHERE Name = 'Online İhracat'];
System.debug(dreamSolution);
system.debug(onlineIhracat);
// Before merge get some of the values from the merged account.
Decimal totalAnnualRevenue = dreamSolution.AnnualRevenue+ onlineIhracat.AnnualRevenue;
dreamSolution.AnnualRevenue=totalAnnualRevenue;
update dreamSolution;
// merge the contacts and opportunities
merge dreamSolution onlineIhracat;
dreamSolution = [SELECT id, Name, AnnualRevenue
FROM Account
WHERE Name = 'Dream Solution'];
system.debug('Merged account :' + dreamSolution);
// Clear dummy data to test your codes again...
/*
MergeAccWorkshop companyAndWorker = New MergeAccWorkshop();
companyAndWorker.deleteAccContOp('Dream Solution','Çalışan');
companyAndWorker.deleteAccContOp('Online İhracat','Çalışan');
*/