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
Nihar SharmaNihar Sharma 

how to update stage based on task completion? Having trouble in Multiple Task

Hi,
i am trying to update the Stage based upon the Task.Status = 'Actividad-Finalizada'..and it worked if i have only one Task but i wont work if there are more task on same Opportunity..
Please can anybody check what change needs to this below code..
trigger UpdateOppOnTaskComplete on Task (after insert, after update) {

Set<String> whatIDs = new Set<String>();

for (Task t : Trigger.new) {
    if(t.Status.equals('Actividad-Finalizada'))
        whatIDs.add(t.whatID);
}

List<Opportunity> opps = [SELECT Id, StageName, Probability, Compania__c, Type  FROM Opportunity WHERE Id =: whatIDs AND (Probability = 98 OR Probability = 40) AND (Type = 'Flujo de venta Estándar' OR Type = 'Flujo de venta No Estándar')];

//List<Opportunity> opps1 = [SELECT Id, StageName, Probability, Compania__c  FROM Opportunity WHERE Id =: whatIDs AND Probability = 40 AND Type = 'Flujo de venta No Estándar'];

for(Opportunity opp : opps){
    if(opp.compania__c.equals('Bestel') && opp.Type.equals('Flujo de venta Estándar')){
        opp.StageName = 'Orden de Trabajo en proceso (99%)';
        opp.Probability = 99;
    }else if(opp.compania__c.equals('Metrored')) {
        opp.StageName = 'Cerrada (100%)';
        opp.Probability = 100;
    }
    if(opp.compania__c.equals('Bestel') && opp.Type.equals('Flujo de venta No Estándar')){
        opp.StageName = 'Producto define precio final (42 %)';
        opp.Probability = 42;
    }
}
if(opps != null && opps.Size() > 0)
update opps;
}

Thanks a ton !!
Nayana KNayana K
trigger UpdateOppOnTaskComplete on Task (after insert, after update) {

Set<String> whatIDs = new Set<String>();

for (Task t : Trigger.new) {
    if(t.Status.equals('Actividad-Finalizada'))
        whatIDs.add(t.whatID);
}

List<Opportunity> opps = new List<Opportunity>([SELECT Id, StageName, Probability, Compania__c, Type  
												FROM Opportunity 
												WHERE Id IN: whatIDs 
													AND Probability IN (98,40) 
													AND Type IN ('Flujo de venta Estándar','Flujo de venta No Estándar')
												]);

//List<Opportunity> opps1 = [SELECT Id, StageName, Probability, Compania__c  FROM Opportunity WHERE Id =: whatIDs AND Probability = 40 AND Type = 'Flujo de venta No Estándar'];

for(Opportunity opp : opps){
    if(opp.compania__c.equals('Bestel') && opp.Type.equals('Flujo de venta Estándar')){
        opp.StageName = 'Orden de Trabajo en proceso (99%)';
        opp.Probability = 99;
    }else if(opp.compania__c.equals('Metrored')) {
        opp.StageName = 'Cerrada (100%)';
        opp.Probability = 100;
    }
    if(opp.compania__c.equals('Bestel') && opp.Type.equals('Flujo de venta No Estándar')){
        opp.StageName = 'Producto define precio final (42 %)';
        opp.Probability = 42;
    }
}
if(opps.isEmpty())
	update opps;
}


 
Nihar SharmaNihar Sharma
Hi Nayana,

Thanks for your reply..
but stage wont be updating with 42%..No doubt there is nothing error like that but what i'm expecting is need to change stage from 40 to 42 when there are no OPEN ACTIVITIES available..(that mean all open activies are closed or completed)

Thanks again !!
Nayana KNayana K
It seems so far trigger is working properly and now you want additional logic to be added for open activities? If yes I think this code suits :



 
trigger UpdateOppOnTaskComplete on Task (after insert, after update) {

Set<String> whatIDs = new Set<String>();

for (Task t : Trigger.new) {
    if(t.Status.equals('Actividad-Finalizada'))
        whatIDs.add(t.whatID);
}

List<Opportunity> opps = new List<Opportunity>([SELECT Id, StageName, Probability, Compania__c, Type, (SELECT Id FROM OpenActivities)  
                                                FROM Opportunity 
                                                WHERE Id IN: whatIDs 
                                                    AND Probability IN (98,40) 
                                                    AND Type IN ('Flujo de venta Estándar','Flujo de venta No Estándar')
                                                ]);

//List<Opportunity> opps1 = [SELECT Id, StageName, Probability, Compania__c  FROM Opportunity WHERE Id =: whatIDs AND Probability = 40 AND Type = 'Flujo de venta No Estándar'];

for(Opportunity opp : opps){
    if(opp.compania__c.equals('Bestel') && opp.Type.equals('Flujo de venta Estándar')){
        opp.StageName = 'Orden de Trabajo en proceso (99%)';
        opp.Probability = 99;
    }else if(opp.compania__c.equals('Metrored')) {
        opp.StageName = 'Cerrada (100%)';
        opp.Probability = 100;
    }
    if(opp.compania__c.equals('Bestel') && opp.Type.equals('Flujo de venta No Estándar') && opp.OpenActivities.isEmpty()){
        opp.StageName = 'Producto define precio final (42 %)';
        opp.Probability = 42;
    }
}
if(opps.isEmpty())
    update opps;
}

 
Nihar SharmaNihar Sharma
Hi Nayana,

No. still it's not changing the stage from 40 to 42...

Thanks
Nayana KNayana K
Please put debugs and check the flow for your scenario
Nihar SharmaNihar Sharma
ok. thanks :)