You need to sign in to do that
Don't have an account?

Getting System.ListException: List index out of bounds: 0 Can someone help. Thanks.
My controller :
public class CreateContractController {
public static void CreateContract(list<Proposal__C> listOfProp,Map<Id, Proposal__C> propOldMap) {
Id OBSContractRecTypeId = Schema.SObjectType.Contract__c.getRecordTypeInfosByDeveloperName().get('OBS_Signature_Required_By_Customer').getRecordTypeId();
System.debug('value of Proposal :' +listOfProp);
List<Contract__c> contrList = new List<Contract__c>();
Set<Id> propId = new Set<Id>();
for(Proposal__c pr : listOfProp){
propId.add(pr.Id);
System.debug('PropId'+propId);
}
for(Proposal__c prop : [SELECT Id,Name,Account__c,Parent_Contract_ID__c,Previous_Contract_ID__c,Commercial_TC__c,Domestic_Annual_Share__c,International_Annual_Share__c,Opportunity__c,Contact__c,Account__r.OBS_Corporate_Identifier__c,
OBS_Annual_Expenditure__c,Status__c,Valid_From_Date__c,Valid_To_Date__c,Standard__c,Additional_Change_Details__c,Deal_Type__c,MCA_Routes_Annual_Share__c,EK_Stock__c,Group_Booking__c,
Agent_Name__c,Agent_Fax__c,Agent_Email__c,Agent_Address__c,OBS_Club_Discount__c,Forecast_Group_Booking_Expenditure__c,Group_Travel_Discount__c,Group_Travel_Offer__c,
OBS_Club_Join_Discount_Offer__c,OBS_Club_Discount_Offer__c,TMC_Code__c,Type__c,Proposal_Start_Date__c,Proposal_End_Date__c,Opportunity__r.Owner.Country,Opportunity__r.Type,Opportunity__r.Sub_Type_Level_1__c,Opportunity__r.Sub_Type_Level_2__c,Opportunity__r.Category__c
FROM Proposal__c where Id =:propId AND Type__c = 'OBS' AND Status__c = 'Approved']) {
list<Contract__c> existingContractList = [SELECT Id,Status__c,Proposal__c FROM Contract__c where Proposal__c =: propId AND Type__c = 'OBS'];
system.debug('Existing contract list'+existingContractList);
//Validate the contract exists scenario
/* if(!existingContractList.isEmpty()){
for(Contract__c eachContract : existingContractList){
if(eachContract.Status__c != 'Rejected – Legal' && eachContract.Status__c != 'Rejected - Customer'){
System.debug('Inside existing if');
propNewMap.get(eachContract.Proposal__c).addError('Please note Contract already exists for this Proposal');
}
}
} */
if (prop.Status__c == 'Approved' && prop.Status__c != propOldMap.get(prop.Id).Status__c)
{
System.debug('prop value :'+prop);
Contract__c createContract = new Contract__c();
createContract.Name = prop.Name;
createContract.Account__c = prop.Account__c;
createContract.Parent_Contract__c = prop.Parent_Contract_ID__c;
createContract.PreviousContract__c = prop.Previous_Contract_ID__c;
createContract.Commercial_TC__c = prop.Commercial_TC__c;
createContract.Contact__c = prop.Contact__c;
createContract.Domestic_Annual_Share__c = prop.Domestic_Annual_Share__c;
createContract.International_Annual_Share__c = prop.International_Annual_Share__c;
createContract.Opportunity__c = prop.Opportunity__c;
createContract.OBS_Annual_Expenditure__c = prop.OBS_Annual_Expenditure__c;
createContract.Proposal__c = prop.Id;
createContract.Type__c = prop.Type__c;
createContract.Eligible_for_EK_ticket_stock__c = prop.EK_Stock__c;
createContract.Group_Booking__c = prop.Group_Booking__c;
createContract.Standard__c = prop.Standard__c;
createContract.Additional_Change_Details__c = prop.Additional_Change_Details__c;
createContract.Status__c = 'Signature Required by Customer';
createContract.Deal_Type__c = prop.Deal_Type__c;
createContract.MCA_Routes_Annual_Share__c = prop.MCA_Routes_Annual_Share__c;
createContract.Agent_Name__c = prop.Agent_Name__c;
createContract.Agent_Fax__c = prop.Agent_Fax__c;
createContract.Agent_Email__c = prop.Agent_Email__c;
createContract.Agent_Address__c = prop.Agent_Address__c;
createContract.OBS_Club_Discount__c = prop.OBS_Club_Discount__c;
createContract.OBS_Club_Join_Discount_Offer__c = prop.OBS_Club_Join_Discount_Offer__c;
createContract.OBS_Club_Discount_Offer__c = prop.OBS_Club_Discount_Offer__c;
createContract.TMC_Code__c = prop.TMC_Code__c;
createContract.contract_Start_Date__c = prop.Proposal_Start_Date__c;
createContract.contract_End_Date__c = prop.Proposal_End_Date__c;
createContract.Forecast_Group_Booking_Expenditure__c = prop.Forecast_Group_Booking_Expenditure__c;
createContract.RecordTypeId = OBSContractRecTypeId;
contrList.add(createContract);
system.debug('Contract list'+contrList);
}
}
try {
if(!contrList.isEmpty()){
insert contrList;
}
}
catch(DMLException e){
System.debug(e.getMessage());
}
// Contract Fare Discount creation done here
list<Contract_Discount_List__c> createCFDiscountList = new list<Contract_Discount_List__c>();
System.debug('prop id:'+propid);
for(Discount_List__c eachPFD : [SELECT Id, Proposal__c,FareStructure__c,Approval_Comment_Pricing__c, Approval_Comment_NAM__c,Comment__c, Discount__c,Route_Origin__c,Route_Destination__c,Fare_Combination__c FROM Discount_List__c WHERE Proposal__r.Active__c = True AND Proposal__r.Status__c = 'Approved' AND Proposal__r.Type__c = 'OBS' AND Proposal__c = :propId]){
System.debug('Discount list :'+eachPFD);
Contract_Discount_List__c contFareDisc = new Contract_Discount_List__c();
contFareDisc.Approval_Comment_NAM__c = eachPFD.Approval_Comment_NAM__c;
contFareDisc.Approval_Comment_Pricing__c = eachPFD.Approval_Comment_Pricing__c;
contFareDisc.FareStructure__c = eachPFD.FareStructure__c;
contFareDisc.Comment__c = eachPFD.Comment__c;
contFareDisc.Contract__c = contrList[0].id;
contFareDisc.Discount__c = eachPFD.Discount__c;
contFareDisc.Fare_Combination__c = eachPFD.Fare_Combination__c;
contFareDisc.Route_Origin__c = eachPFD.Route_Origin__c;
contFareDisc.Route_Destination__c = eachPFD.Route_Destination__c;
createCFDiscountList.add(contFareDisc);
system.debug('createCFDiscountList'+createCFDiscountList);
}
try {
if(!createCFDiscountList.isEmpty()){
insert createCFDiscountList;
}
}
catch(DMLException e){
System.debug(e.getMessage());
}
}
}
Test class:-
@isTest
public class CreateContractController_Test {
@isTest
public static void CreateContractTest() {
String accRTId = Schema.SObjectType.Account.getRecordTypeInfosByName().get('Customer Account').getRecordTypeId();
String OppRTId = Schema.SObjectType.Opportunity.getRecordTypeInfosByDeveloperName().get('Business_and_Government').getRecordTypeId();
Map<Id, Proposal__C> propOldMap = new Map<Id, Proposal__C>();
// Map<Id, Proposal__C> propNewMap = new Map<Id, Proposal__C>();
//Create Account
Account testacc = new Account(Name = 'Sample', Active__c = true, Aquire__c = true, Type = 'Customer Account',
RecordTypeId = accRTId, Migrated__c = false,
Estimated_Total_Air_Travel_Spend__c = 0, Manual_Revenue_Update__c = false,
Agency__c = 'N', Dealing_Flag__c = 'N', Aquire_Override__c = 'N');
insert testacc;
//Create Contact
Contact testcon = new Contact(FirstName='Bob',LastName='Test',AccountId=testacc.id,Function__c = 'IT',Business_Types__c = 'Agency',Email = 'abc@test.com');
insert testcon;
//Create Oppotunity
Opportunity validOpp = new Opportunity(Name = 'Opp2'+testacc.Name , AccountId = testacc.Id,Proposed_Market_Share__c = 70,Proposed_International_Market_Share__c = 50,
Amount = 500000, Category__c = 'OBS', CloseDate = Date.Today(),Proposed_MCA_Routes_Market_Share__c = 90,
StageName = 'Qualify');
insert validOpp;
//Create Proposal
List<Proposal__c> propList = new List<Proposal__c>();
Proposal__c propErr = new Proposal__c(Name = 'Proposal0', Account__c = validOpp.AccountId, Opportunity__c = validOpp.Id,
Active__c = True, Type__c = 'OBS', International_Annual_Share__c = 70,
Domestic_Annual_Share__c = 90, Frequent_Flyer_Status_Upgrade__c = 'No',
MCA_Routes_Annual_Share__c = 70, Valid_From_Date__c = Date.Today(),
OBS_Annual_Expenditure__c = 500000, OBS_Club_Discount__c = 'No', Status__c = 'Draft'
);
propList.add(propErr);
if(!propList.isEmpty())
insert propList;
for(Proposal__C prop : propList) {
propOldMap.put(prop.Id,prop);
system.debug('Old Map value of Prop'+propOldMap);
}
Test.startTest();
propList[0].Status__c = 'Approved';
Update propList;
Test.stopTest();
system.debug('Proposal list'+propList[0] );
system.debug('Old Map value of Prop -1:'+propOldMap);
//Create Contract
Contract__c contr = new Contract__c(Name = propList[0].Name, Account__c = propList[0].Account__c, Opportunity__c = propList[0].Opportunity__c, Proposal__c = propList[0].Id,
Active__c = true, Type__c = 'OBS', International_Annual_Share__c = 70,
Domestic_Annual_Share__c = 90, Frequent_Flyer_Status_Upgrade__c = 'No', Contracted__c = false,
MCA_Routes_Annual_Share__c = 70, Contract_Start_Date__c = Date.Today(), Contract_End_Date__c = Date.Today(),
OBS_Annual_Expenditure__c = 500000, OBS_Club_Discount__c = 'No', Status__c = 'Signature Required by Customer'
);
insert contr;
Fare_Structure__c fs = new Fare_Structure__c(Name = 'J', Active__c = true, Cabin__c = 'Business',
Category__c = 'Mainline', Market__c = 'Australia',
ProductCode__c = 'DOM-0001', OBS_Published_Airfare__c = 'JBUS',
Segment__c = 'Domestic'
);
insert fs;
// create a disc list
Discount_List__c disc = new Discount_List__c(FareStructure__c = fs.Id, Proposal__c = propList[0].Id,
OBS_Published_Airfare__c = fs.OBS_Published_Airfare__c,
Fare_Combination__c = 'Mainline - H in B deal', Segment__c = fs.Segment__c,
Category__c = fs.Category__c, Network__c = fs.Network__c,
Market__c = fs.Market__c, Cabin__c = fs.Cabin__c,
Proposal_Type__c = propList[0].Type__c, Discount__c = 40
);
insert disc;
Contract_Discount_List__c contrFD = new Contract_Discount_List__c(FareStructure__c = fs.id,Contract__c=contr.id,Discount__c = 40,Comment__c = 'test');
insert contrFD;
System.debug('Map value' +propOldMap );
system.debug('Proplist'+propList);
// Test.StartTest();
//Invoke the controller methods
CreateContractController.CreateContract(propList,propOldMap);
// Test.StopTest();
}
}
Class.CreateContractController.CreateContract: line 102, column 1
Class.CreateContractController_Test.CreateContractTest: line 85, column 1

public class CreateContractController {
public static void CreateContract(list<Proposal__C> listOfProp,Map<Id, Proposal__C> propOldMap) {
Id OBSContractRecTypeId = Schema.SObjectType.Contract__c.getRecordTypeInfosByDeveloperName().get('OBS_Signature_Required_By_Customer').getRecordTypeId();
System.debug('value of Proposal :' +listOfProp);
List<Contract__c> contrList = new List<Contract__c>();
Set<Id> propId = new Set<Id>();
for(Proposal__c pr : listOfProp){
propId.add(pr.Id);
System.debug('PropId'+propId);
}
for(Proposal__c prop : [SELECT Id,Name,Account__c,Parent_Contract_ID__c,Previous_Contract_ID__c,Commercial_TC__c,Domestic_Annual_Share__c,International_Annual_Share__c,Opportunity__c,Contact__c,Account__r.OBS_Corporate_Identifier__c,
OBS_Annual_Expenditure__c,Status__c,Valid_From_Date__c,Valid_To_Date__c,Standard__c,Additional_Change_Details__c,Deal_Type__c,MCA_Routes_Annual_Share__c,EK_Stock__c,Group_Booking__c,
Agent_Name__c,Agent_Fax__c,Agent_Email__c,Agent_Address__c,OBS_Club_Discount__c,Forecast_Group_Booking_Expenditure__c,Group_Travel_Discount__c,Group_Travel_Offer__c,
OBS_Club_Join_Discount_Offer__c,OBS_Club_Discount_Offer__c,TMC_Code__c,Type__c,Proposal_Start_Date__c,Proposal_End_Date__c,Opportunity__r.Owner.Country,Opportunity__r.Type,Opportunity__r.Sub_Type_Level_1__c,Opportunity__r.Sub_Type_Level_2__c,Opportunity__r.Category__c
FROM Proposal__c where Id =:propId AND Type__c = 'OBS' AND Status__c = 'Approved']) {
list<Contract__c> existingContractList = [SELECT Id,Status__c,Proposal__c FROM Contract__c where Proposal__c =: propId AND Type__c = 'OBS'];
system.debug('Existing contract list'+existingContractList);
//Validate the contract exists scenario
/* if(!existingContractList.isEmpty()){
for(Contract__c eachContract : existingContractList){
if(eachContract.Status__c != 'Rejected – Legal' && eachContract.Status__c != 'Rejected - Customer'){
System.debug('Inside existing if');
propNewMap.get(eachContract.Proposal__c).addError('Please note Contract already exists for this Proposal');
}
}
} */
if (prop.Status__c == 'Approved' && prop.Status__c != propOldMap.get(prop.Id).Status__c)
{
System.debug('prop value :'+prop);
Contract__c createContract = new Contract__c();
createContract.Name = prop.Name;
createContract.Account__c = prop.Account__c;
createContract.Parent_Contract__c = prop.Parent_Contract_ID__c;
createContract.PreviousContract__c = prop.Previous_Contract_ID__c;
createContract.Commercial_TC__c = prop.Commercial_TC__c;
createContract.Contact__c = prop.Contact__c;
createContract.Domestic_Annual_Share__c = prop.Domestic_Annual_Share__c;
createContract.International_Annual_Share__c = prop.International_Annual_Share__c;
createContract.Opportunity__c = prop.Opportunity__c;
createContract.OBS_Annual_Expenditure__c = prop.OBS_Annual_Expenditure__c;
createContract.Proposal__c = prop.Id;
createContract.Type__c = prop.Type__c;
createContract.Eligible_for_EK_ticket_stock__c = prop.EK_Stock__c;
createContract.Group_Booking__c = prop.Group_Booking__c;
createContract.Standard__c = prop.Standard__c;
createContract.Additional_Change_Details__c = prop.Additional_Change_Details__c;
createContract.Status__c = 'Signature Required by Customer';
createContract.Deal_Type__c = prop.Deal_Type__c;
createContract.MCA_Routes_Annual_Share__c = prop.MCA_Routes_Annual_Share__c;
createContract.Agent_Name__c = prop.Agent_Name__c;
createContract.Agent_Fax__c = prop.Agent_Fax__c;
createContract.Agent_Email__c = prop.Agent_Email__c;
createContract.Agent_Address__c = prop.Agent_Address__c;
createContract.OBS_Club_Discount__c = prop.OBS_Club_Discount__c;
createContract.OBS_Club_Join_Discount_Offer__c = prop.OBS_Club_Join_Discount_Offer__c;
createContract.OBS_Club_Discount_Offer__c = prop.OBS_Club_Discount_Offer__c;
createContract.TMC_Code__c = prop.TMC_Code__c;
createContract.contract_Start_Date__c = prop.Proposal_Start_Date__c;
createContract.contract_End_Date__c = prop.Proposal_End_Date__c;
createContract.Forecast_Group_Booking_Expenditure__c = prop.Forecast_Group_Booking_Expenditure__c;
createContract.RecordTypeId = OBSContractRecTypeId;
contrList.add(createContract);
system.debug('Contract list'+contrList);
}
}
try {
if(!contrList.isEmpty()){
insert contrList;
}
}
catch(DMLException e){
System.debug(e.getMessage());
}
// Contract Fare Discount creation done here
list<Contract_Discount_List__c> createCFDiscountList = new list<Contract_Discount_List__c>();
System.debug('prop id:'+propid);
for(Discount_List__c eachPFD : [SELECT Id, Proposal__c,FareStructure__c,Approval_Comment_Pricing__c, Approval_Comment_NAM__c,Comment__c, Discount__c,Route_Origin__c,Route_Destination__c,Fare_Combination__c FROM Discount_List__c WHERE Proposal__r.Active__c = True AND Proposal__r.Status__c = 'Approved' AND Proposal__r.Type__c = 'OBS' AND Proposal__c = :propId]){
System.debug('Discount list :'+eachPFD);
Contract_Discount_List__c contFareDisc = new Contract_Discount_List__c();
contFareDisc.Approval_Comment_NAM__c = eachPFD.Approval_Comment_NAM__c;
contFareDisc.Approval_Comment_Pricing__c = eachPFD.Approval_Comment_Pricing__c;
contFareDisc.FareStructure__c = eachPFD.FareStructure__c;
contFareDisc.Comment__c = eachPFD.Comment__c;
contFareDisc.Contract__c = contrList[0].id;
contFareDisc.Discount__c = eachPFD.Discount__c;
contFareDisc.Fare_Combination__c = eachPFD.Fare_Combination__c;
contFareDisc.Route_Origin__c = eachPFD.Route_Origin__c;
contFareDisc.Route_Destination__c = eachPFD.Route_Destination__c;
createCFDiscountList.add(contFareDisc);
system.debug('createCFDiscountList'+createCFDiscountList);
}
try {
if(!createCFDiscountList.isEmpty()){
insert createCFDiscountList;
}
}
catch(DMLException e){
System.debug(e.getMessage());
}
}
}
Test class:-
@isTest
public class CreateContractController_Test {
@isTest
public static void CreateContractTest() {
String accRTId = Schema.SObjectType.Account.getRecordTypeInfosByName().get('Customer Account').getRecordTypeId();
String OppRTId = Schema.SObjectType.Opportunity.getRecordTypeInfosByDeveloperName().get('Business_and_Government').getRecordTypeId();
Map<Id, Proposal__C> propOldMap = new Map<Id, Proposal__C>();
// Map<Id, Proposal__C> propNewMap = new Map<Id, Proposal__C>();
//Create Account
Account testacc = new Account(Name = 'Sample', Active__c = true, Aquire__c = true, Type = 'Customer Account',
RecordTypeId = accRTId, Migrated__c = false,
Estimated_Total_Air_Travel_Spend__c = 0, Manual_Revenue_Update__c = false,
Agency__c = 'N', Dealing_Flag__c = 'N', Aquire_Override__c = 'N');
insert testacc;
//Create Contact
Contact testcon = new Contact(FirstName='Bob',LastName='Test',AccountId=testacc.id,Function__c = 'IT',Business_Types__c = 'Agency',Email = 'abc@test.com');
insert testcon;
//Create Oppotunity
Opportunity validOpp = new Opportunity(Name = 'Opp2'+testacc.Name , AccountId = testacc.Id,Proposed_Market_Share__c = 70,Proposed_International_Market_Share__c = 50,
Amount = 500000, Category__c = 'OBS', CloseDate = Date.Today(),Proposed_MCA_Routes_Market_Share__c = 90,
StageName = 'Qualify');
insert validOpp;
//Create Proposal
List<Proposal__c> propList = new List<Proposal__c>();
Proposal__c propErr = new Proposal__c(Name = 'Proposal0', Account__c = validOpp.AccountId, Opportunity__c = validOpp.Id,
Active__c = True, Type__c = 'OBS', International_Annual_Share__c = 70,
Domestic_Annual_Share__c = 90, Frequent_Flyer_Status_Upgrade__c = 'No',
MCA_Routes_Annual_Share__c = 70, Valid_From_Date__c = Date.Today(),
OBS_Annual_Expenditure__c = 500000, OBS_Club_Discount__c = 'No', Status__c = 'Draft'
);
propList.add(propErr);
if(!propList.isEmpty())
insert propList;
for(Proposal__C prop : propList) {
propOldMap.put(prop.Id,prop);
system.debug('Old Map value of Prop'+propOldMap);
}
Test.startTest();
propList[0].Status__c = 'Approved';
Update propList;
Test.stopTest();
system.debug('Proposal list'+propList[0] );
system.debug('Old Map value of Prop -1:'+propOldMap);
//Create Contract
Contract__c contr = new Contract__c(Name = propList[0].Name, Account__c = propList[0].Account__c, Opportunity__c = propList[0].Opportunity__c, Proposal__c = propList[0].Id,
Active__c = true, Type__c = 'OBS', International_Annual_Share__c = 70,
Domestic_Annual_Share__c = 90, Frequent_Flyer_Status_Upgrade__c = 'No', Contracted__c = false,
MCA_Routes_Annual_Share__c = 70, Contract_Start_Date__c = Date.Today(), Contract_End_Date__c = Date.Today(),
OBS_Annual_Expenditure__c = 500000, OBS_Club_Discount__c = 'No', Status__c = 'Signature Required by Customer'
);
insert contr;
Fare_Structure__c fs = new Fare_Structure__c(Name = 'J', Active__c = true, Cabin__c = 'Business',
Category__c = 'Mainline', Market__c = 'Australia',
ProductCode__c = 'DOM-0001', OBS_Published_Airfare__c = 'JBUS',
Segment__c = 'Domestic'
);
insert fs;
// create a disc list
Discount_List__c disc = new Discount_List__c(FareStructure__c = fs.Id, Proposal__c = propList[0].Id,
OBS_Published_Airfare__c = fs.OBS_Published_Airfare__c,
Fare_Combination__c = 'Mainline - H in B deal', Segment__c = fs.Segment__c,
Category__c = fs.Category__c, Network__c = fs.Network__c,
Market__c = fs.Market__c, Cabin__c = fs.Cabin__c,
Proposal_Type__c = propList[0].Type__c, Discount__c = 40
);
insert disc;
Contract_Discount_List__c contrFD = new Contract_Discount_List__c(FareStructure__c = fs.id,Contract__c=contr.id,Discount__c = 40,Comment__c = 'test');
insert contrFD;
System.debug('Map value' +propOldMap );
system.debug('Proplist'+propList);
// Test.StartTest();
//Invoke the controller methods
CreateContractController.CreateContract(propList,propOldMap);
// Test.StopTest();
}
}
Class.CreateContractController.CreateContract: line 102, column 1
Class.CreateContractController_Test.CreateContractTest: line 85, column 1
It appears that your list is empty. It is a good practice to check whether there are records in the list before accessing any element from that list.
This document will help fix the issue https://help.salesforce.com/articleView?id=000329067&type=1&mode=1
Please accept my solution as Best Answer if my reply is helpful
Thanks,
Anudeep
I have checked whether the list is empty or not.. I checked the log as well the list is not empty it returns value.
Createcontractcontroller.createcontract(proplist,propOldmap) is the place where it’s throwing error . Got 31% coverag
List<Proposal__c> propList = new List<Proposal__c>();
Proposal__c propErr = new Proposal__c(Name = 'Proposal0', Account__c = validOpp.AccountId, Opportunity__c = validOpp.Id,
Active__c = True, Type__c = 'OBS', International_Annual_Share__c = 70,
Domestic_Annual_Share__c = 90, Frequent_Flyer_Status_Upgrade__c = 'No',
MCA_Routes_Annual_Share__c = 70, Valid_From_Date__c = Date.Today(),
OBS_Annual_Expenditure__c = 500000, OBS_Club_Discount__c = 'No', Status__c = 'Draft'
);
In the controller, you are trying to get status "Approved"
for(Proposal__c prop : [SELECT Id,Name,Account__c,.....
FROM Proposal__c where Id =:propId AND Type__c = 'OBS' AND Status__c = 'Approved']) {...
The result of prop is null which causes the error.
While inserting have given status as draft after that am updating to Status Approved In order to satisfy the if condition I.e Comparison of oldmap records and newmap records