• Anand Kulkarni 8
  • NEWBIE
  • 5 Points
  • Member since 2015

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 0
    Questions
  • 2
    Replies
Getting error "List has no rows for assignment to SObject"

Line kept bold below...Please suggest.

apex class:
public class PopUpExtension{
    
    public Milestone1_Project__c Project {get;set;}
    public Milestone1_Project__c ProjectGetData {get;set;}
    public List<Milestone1_Milestone__c>  milestones {get;set;}
    public List<Milestone1_Task__c> milestonesTasks {get;set;}
    public boolean ErrorFound {get;set;}
 
    public PopUpExtension(ApexPages.StandardController stdController){
        ErrorFound = false;
        Project = new Milestone1_Project__c();
        this.Project = (Milestone1_Project__c)stdCOntroller.getRecord();
        milestones = new List<Milestone1_Milestone__c>();
        milestonesTasks = new  List<Milestone1_Task__c>();
    }
     
    public void UpdateEstimatedDates() {
        try{
            ErrorFound = false;
            Date EstimatedStartDate;
            Map<id,Milestone1_Milestone__c> MilestonesMap = new Map<id,Milestone1_Milestone__c>();  
            ProjectGetData = [select Start_Day__c,Project_Duration__c,Kickoff__c,Deadline__c from Milestone1_Project__c where Duration__c !=null and Start_Day__c !=null and id = :Project.id];
            system.debug('ProjectGetData:'+ProjectGetData);
            if(Project.Kickoff__c != null){
                ProjectGetData.Kickoff__c = Project.Kickoff__c;
                if(ProjectGetData.Start_Day__c != null && ProjectGetData.Project_Duration__c != null){
                    EstimatedStartDate = Date.valueOf(Project.Kickoff__c).addDays((integer)ProjectGetData.Start_Day__c)-1;
                    ProjectGetData.Deadline__c = EstimatedStartDate.addDays((integer)ProjectGetData.Project_Duration__c);
                    system.debug('ProjectGetData1:'+ProjectGetData);
                }else{
                    ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'Please provide project Start Day and Project Duration.');
                    ApexPages.addMessage(myMsg);
                    ErrorFound = true;
                }
                update ProjectGetData;
            }else{
                ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'Please provide project Estimated Start Date or close the window.');
                ApexPages.addMessage(myMsg);
                ErrorFound = true;
                return;
            }
            
            milestones = [Select id,m.Start_Day__c, m.Project__c, m.Kickoff__c, m.Estimated_End_Date__c, m.Milestone_Duration__c From Milestone1_Milestone__c m where Start_Day__c !=null and Duration__c !=null and m.Project__c = :Project.id];
            for(Milestone1_Milestone__c milestone : milestones){
                milestone.Kickoff__c = EstimatedStartDate.addDays((integer)milestone.Start_Day__c);
                milestone.Estimated_End_Date__c = Date.valueOf(milestone.Kickoff__c).addDays((integer)milestone.Milestone_Duration__c)-1;
                if(milestone.Estimated_End_Date__c > ProjectGetData.Deadline__c){
                    ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'Milesone Estimated End date is greater than Project Estimated End Date');
                    ApexPages.addMessage(myMsg);
                    ErrorFound = true;
                }
                MilestonesMap.put(milestone.id,milestone);
            }
            update milestones;
            
            milestonesTasks = [Select m.Task_Duration__c,m.Project_Milestone__c, m.Start_Day__c, m.Start_Date__c, m.Estimated_End_Date__c From Milestone1_Task__c m where Start_Day__c !=null and Task_Duration__c !=null and m.Project_Milestone__c = :MilestonesMap.keyset()];
            for(Milestone1_Task__c task : milestonesTasks){
                Milestone1_Milestone__c milestone = MilestonesMap.get(task.Project_Milestone__c);
                task.Start_Date__c = (date)milestone.Kickoff__c.addDays((integer)task.Start_Day__c);
                task.Estimated_End_Date__c = Date.valueOf(task.Start_Date__c).addDays((integer)task.Task_Duration__c)-1;
                
                if(task.Estimated_End_Date__c > ProjectGetData.Deadline__c){
                    ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'Tasks Estimated End date is greater than Project Estimated End Date');
                    ApexPages.addMessage(myMsg);
                    ErrorFound = true;
                }
                if(task.Estimated_End_Date__c > milestone.Estimated_End_Date__c){
                    ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'Tasks Estimated End date is greater than Milestone Estimated End Date');
                    ApexPages.addMessage(myMsg);
                    ErrorFound = true;
                }
            }    
            update milestonesTasks;
            
        }catch(exception e) {
            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'Error Occured while updating the Projects/Milestones/Tasks '+e.getMessage());
            ApexPages.addMessage(myMsg);
            ErrorFound = true;
        }
    }
}

test class:

@isTest
private class TestPopUpExtension {

    static testMethod void functionalTest() {
        
        Milestone1_Project__c Project = new Milestone1_Project__c();
        Project.Name = 'Test1';
        Project.Kickoff__c = date.today();
        Project.Start_Day__c = 1;
        Project.Project_Duration__c = 200;
        insert Project;
        
        Milestone1_Milestone__c Milestone = new Milestone1_Milestone__c();
        Milestone.Name = 'Test1';
        Milestone.Start_Day__c = 1;
        Milestone.Milestone_Duration__c = 3;
           Milestone.Project__c = Project.id;
           insert Milestone;
           
           Milestone1_Task__c Tasks = new Milestone1_Task__c();
           Tasks.Start_Day__c = 1;
           Tasks.Task_Duration__c = 4;
           Tasks.Project_Milestone__c = Milestone.id; 
           insert Tasks; 
           
           PageReference pageRef = Page.popupwindow;
        Test.setCurrentPageReference(pageRef);
        
           ApexPages.StandardController sc = new ApexPages.standardController(Project);
           PopUpExtension popext = new PopUpExtension(sc);
           popext.UpdateEstimatedDates();
            
    }
    
    static testMethod void ErrorTest() {
        
        Milestone1_Project__c Project = new Milestone1_Project__c();
        Project.Name = 'Test1';
        Project.Kickoff__c = date.today();
        Project.Start_Day__c = 1;
        Project.Project_Duration__c = 2;
        insert Project;
        
        Milestone1_Milestone__c Milestone = new Milestone1_Milestone__c();
        Milestone.Name = 'Test1';
        Milestone.Start_Day__c = 1;
        Milestone.Milestone_Duration__c = 3;
           Milestone.Project__c = Project.id;
           insert Milestone;
           
           Milestone1_Task__c Tasks = new Milestone1_Task__c();
           Tasks.Start_Day__c = 1;
           Tasks.Task_Duration__c = 4;
           Tasks.Project_Milestone__c = Milestone.id;
           insert Tasks; 
           
           PageReference pageRef = Page.popupwindow;
        Test.setCurrentPageReference(pageRef);
           
           ApexPages.StandardController sc = new ApexPages.standardController(Project);
           PopUpExtension popext = new PopUpExtension(sc);
           popext.UpdateEstimatedDates();
            
    }
}
I have created a Scontrol in Salesforce can it be displayed in Salesforce1 ?