function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Girbson Bijou 8Girbson Bijou 8 

Illegal assignment from List to Map

I want want to update child in a  self  lookup relationship with value of the parent. The idea is to create a child with projectType ='Sanitition' when a record is created with the type of House. And update the child anytime the parent is updated.  The error msg i get is: Illegal assignment from List<Output__c> to Map<Id,Output__c>  at the line 29
trigger AutoOutput on Output__c (after insert, after update) {
    
If(Trigger.isInsert){
List<Output__c> lstNewOutputs = new List<Output__c>();
for (Output__c NewOut : Trigger.New) {
if ( NewOut.Project_Type__c =='House') {
Output__c OutputChild = new Output__c();
OutputChild.Housing_If_Sanitation__c= NewOut.Id;
OutputChild.Project_Type__c = 'Sanitition';
OutputChild.RecordTypeId=NewOut.RecordTypeId;
OutputChild.Description__c=NewOut.Description__c;
OutputChild.Locality__c=NewOut.Locality__c;
OutputChild.Milestone__c= NewOut.Milestone__c;
OutputChild.Address__c = NewOut.Address__c;
OutputChild.claust__c=NewOut.claust__c;
OutputChild.A__c=NewOut.A__c;
OutputChild.Besem__c = NewOut.Besem__c;
lstNewOutputs.add(OutputChild);
}     
   
}
if(!lstNewOutputs.isEmpty())
INSERT lstNewOutputs;
}
If(Trigger.isUpdate){
    
Map<Id,Output__c> outputsWithChilds = new Map<Id,Output__c>();
List<Output__c> lstNewOutputs = new List<Output__c>();
outputsWithChilds = [SELECT Id,(SELECT Id FROM Housing_If_Sanitation__r WHERE Project_Type__c = 'Sanitition')FROM Output__c WHERE Id IN :Trigger.New];
for (Output__c NewOut : Trigger.New) {
if (NewOut.Project_Type__c =='House') {
Output__c OutputChild = new Output__c();
OutputChild.Housing_If_Sanitation__c= NewOut.Id;
OutputChild.Project_Type__c = 'Sanitition';
OutputChild.RecordTypeId=NewOut.RecordTypeId;
OutputChild.Description__c=NewOut.Description__c;
OutputChild.Locality__c=NewOut.Locality__c;
OutputChild.Milestone__c= NewOut.Milestone__c;
OutputChild.Address__c = NewOut.Address__c;
OutputChild.claust__c=NewOut.claust__c;
OutputChild.A__c=NewOut.A__c;
OutputChild.Besem__c = NewOut.Besem__c;
if(!outputsWithChilds.get(NewOut.Id).Housing_If_Sanitation__r.isEmpty()){
OutputChild.Id = outputsWithChilds.get(NewOut.Id).Housing_If_Sanitation__r[0].Id;
}
lstNewOutputs.add(OutputChild);
}
}
if(!lstNewOutputs.isEmpty())
UPSERT lstNewOutputs;
    }
}
Best Answer chosen by Girbson Bijou 8
Raj VakatiRaj Vakati
Try this
 
trigger AutoOutput on Output__c (after insert, after update) {
    
If(Trigger.isInsert){
List<Output__c> lstNewOutputs = new List<Output__c>();
for (Output__c NewOut : Trigger.New) {
if ( NewOut.Project_Type__c =='House') {
Output__c OutputChild = new Output__c();
OutputChild.Housing_If_Sanitation__c= NewOut.Id;
OutputChild.Project_Type__c = 'Sanitition';
OutputChild.RecordTypeId=NewOut.RecordTypeId;
OutputChild.Description__c=NewOut.Description__c;
OutputChild.Locality__c=NewOut.Locality__c;
OutputChild.Milestone__c= NewOut.Milestone__c;
OutputChild.Address__c = NewOut.Address__c;
OutputChild.claust__c=NewOut.claust__c;
OutputChild.A__c=NewOut.A__c;
OutputChild.Besem__c = NewOut.Besem__c;
lstNewOutputs.add(OutputChild);
}     
   
}
if(!lstNewOutputs.isEmpty())
INSERT lstNewOutputs;
}
If(Trigger.isUpdate){
    
Map<Id,Output__c> outputsWithChilds = new Map<Id,Output__c>();
List<Output__c> lstNewOutputs = new List<Output__c>();
outputsWithChilds = new Map<Id,Output__c>([SELECT Id,(SELECT Id FROM Housing_If_Sanitation__r WHERE Project_Type__c = 'Sanitition')FROM Output__c WHERE Id IN :Trigger.New]);
for (Output__c NewOut : Trigger.New) {
if (NewOut.Project_Type__c =='House') {
Output__c OutputChild = new Output__c();
OutputChild.Housing_If_Sanitation__c= NewOut.Id;
OutputChild.Project_Type__c = 'Sanitition';
OutputChild.RecordTypeId=NewOut.RecordTypeId;
OutputChild.Description__c=NewOut.Description__c;
OutputChild.Locality__c=NewOut.Locality__c;
OutputChild.Milestone__c= NewOut.Milestone__c;
OutputChild.Address__c = NewOut.Address__c;
OutputChild.claust__c=NewOut.claust__c;
OutputChild.A__c=NewOut.A__c;
OutputChild.Besem__c = NewOut.Besem__c;
if(!outputsWithChilds.get(NewOut.Id).Housing_If_Sanitation__r.isEmpty()){
OutputChild.Id = outputsWithChilds.get(NewOut.Id).Housing_If_Sanitation__r[0].Id;
}
lstNewOutputs.add(OutputChild);
}
}
if(!lstNewOutputs.isEmpty())
UPSERT lstNewOutputs;
    }
}

 

All Answers

Raj VakatiRaj Vakati
Try this
 
trigger AutoOutput on Output__c (after insert, after update) {
    
If(Trigger.isInsert){
List<Output__c> lstNewOutputs = new List<Output__c>();
for (Output__c NewOut : Trigger.New) {
if ( NewOut.Project_Type__c =='House') {
Output__c OutputChild = new Output__c();
OutputChild.Housing_If_Sanitation__c= NewOut.Id;
OutputChild.Project_Type__c = 'Sanitition';
OutputChild.RecordTypeId=NewOut.RecordTypeId;
OutputChild.Description__c=NewOut.Description__c;
OutputChild.Locality__c=NewOut.Locality__c;
OutputChild.Milestone__c= NewOut.Milestone__c;
OutputChild.Address__c = NewOut.Address__c;
OutputChild.claust__c=NewOut.claust__c;
OutputChild.A__c=NewOut.A__c;
OutputChild.Besem__c = NewOut.Besem__c;
lstNewOutputs.add(OutputChild);
}     
   
}
if(!lstNewOutputs.isEmpty())
INSERT lstNewOutputs;
}
If(Trigger.isUpdate){
    
Map<Id,Output__c> outputsWithChilds = new Map<Id,Output__c>();
List<Output__c> lstNewOutputs = new List<Output__c>();
outputsWithChilds = new Map<Id,Output__c>([SELECT Id,(SELECT Id FROM Housing_If_Sanitation__r WHERE Project_Type__c = 'Sanitition')FROM Output__c WHERE Id IN :Trigger.New]);
for (Output__c NewOut : Trigger.New) {
if (NewOut.Project_Type__c =='House') {
Output__c OutputChild = new Output__c();
OutputChild.Housing_If_Sanitation__c= NewOut.Id;
OutputChild.Project_Type__c = 'Sanitition';
OutputChild.RecordTypeId=NewOut.RecordTypeId;
OutputChild.Description__c=NewOut.Description__c;
OutputChild.Locality__c=NewOut.Locality__c;
OutputChild.Milestone__c= NewOut.Milestone__c;
OutputChild.Address__c = NewOut.Address__c;
OutputChild.claust__c=NewOut.claust__c;
OutputChild.A__c=NewOut.A__c;
OutputChild.Besem__c = NewOut.Besem__c;
if(!outputsWithChilds.get(NewOut.Id).Housing_If_Sanitation__r.isEmpty()){
OutputChild.Id = outputsWithChilds.get(NewOut.Id).Housing_If_Sanitation__r[0].Id;
}
lstNewOutputs.add(OutputChild);
}
}
if(!lstNewOutputs.isEmpty())
UPSERT lstNewOutputs;
    }
}

 
This was selected as the best answer
Girbson Bijou 8Girbson Bijou 8
Hi Raj the coverage is 49 % Here is the Test class. Where do you think the problem is. I notice that this test class is use for other Trigger 
@IsTest
public class projectExpenseControllerTest{
static testMethod  void projectExpenseController (){
   
    Project__c pro = new Project__c (  Department_FFP__c='Agriculture', FundingCode__c='HT1254');
          insert pro;
    
     Milestone__c mi = new Milestone__c();
          Milestone_s_Type__c mt = new Milestone_s_Type__c(Name ='TestProduct'); 
          insert mt;
    
   
                 
          mi.Milestone_s_Type__c=mt.ID;
          mi.MilestoneCategory__c = 'ED - Education'; 
          mi.Type_Of_Action__c = 'Cultivation';
          mi.Project__c= pro.ID;
          mi.Target_number__c = 55;
          
           
           insert mi;
    
    Contractor__c co = new Contractor__c();
                co.First_Name__c ='Bijou';
                co.Last_Name__c = 'Bijourrr';
                co.NIF_CIN__c ='Bijourreedr';
                Insert co;
                
                Account acc = new Account();
                acc.name = 'Testtt';
                acc.Representant__c='Bijouuou';
                acc.Class__c = 'NGO';
                acc.Type ='CLINICS';
                acc.Address__c = 'jhklhkjhlkhlkh';
                Insert acc;
                
                Contract c = new Contract();
                
                c.Contractor__c = co.Id;
                c.Deadline__c =System.today();
                c.AccountId  = acc.Id ;
                c.StartDate =system.today();
                c.Status = 'Draft';
                c.ContractTerm = 4;
                Insert c;
                
    Expenses__c exp = new Expenses__c();
        exp.Amount__c = 33;
        exp.Bank_Name__c ='Other';
        exp.Check_Number__c=6532;
        exp.Milestone__c = mi.ID;
              exp.Description__c ='kjalhsdhfklasdf';
                exp.Date__c = System.today();
                exp.ContractNumber__c=c.Id;

          Beneficiary__c bene = new Beneficiary__c();
          bene.First_Name__c = 'Bijou';
          bene.Last_Name__c = 'Girbson';
          
          insert bene;
            
            Output__c OutputChild = new Output__c();
            
            //OutputChild.Housing_If_Sanitation__c= Out.Id;
            OutputChild.Project_Type__c = 'House';
           OutputChild.RecordTypeId = Schema.SObjectType.Output__c.getRecordTypeInfosByName().get('Infrastructure').getRecordTypeId();
            OutputChild.Description__c='Discrption';
            OutputChild.Locality__c='ghjggh';
            OutputChild.Milestone__c= mi.ID;
            OutputChild.Contract__c=c.Id;
            OutputChild.Beneficiary__c=bene.Id;
        OutputChild.remblais__c=TRUE;
        OutputChild.Compactage_et_fo__c =TRUE;
        OutputChild.mtptc__c=TRUE;
        OutputChild.plan__c =TRUE;
        OutputChild.Coulaj__c=TRUE;
        //OutputChild.Custom_perc__c =TRUE;
        OutputChild.Debordement_de_to__c =TRUE;
      //  OutputChild.Departement_del__c =TRUE;
        OutputChild.Diametre_des_acier__c=TRUE;
        OutputChild.arm__c=TRUE;
           // Output.add(OutputChild);
           // 
           // 
            insert OutputChild;
      
    
        
       upsert exp;
       Delete Exp;
       Undelete Exp;
    
    
    
    Test.setCurrentPageReference(new PageReference('projectExpenseView')); 
   System.currentPageReference().getParameters().put('id', pro.ID);
   projectExpenseController CRC = new projectExpenseController();
    
}

}