I have a simple PTO(Paid Time Off) object, in which I want certain fields to automatically add increments over time evaluated by the beginning of the Calendar Year.
So for example, if my beginning calendar year is 1/1/2014 in it will start with 0 PTO accumulated hours. Bi weekly, I want the accumulated hours to go up in increments of 5 hours. So when it is 2/1/2014, it should have 10 hours accumulated.
I was able to do it, but it only occurs when record is created, or updated. I want to create a record, and see it automatically update without updating the record. I hope that is making sense.
Here is my trigger
trigger ThriveHRPTO_ADD_HOURS on Thrive_HR_PTO_Record__c (before insert, before update) {
for (Thrive_HR_PTO_Record__c pto : Trigger.new){
// January First Week
if(system.today() >= pto.Calendar_Year_Start__c && system.today() <= pto.Calendar_Year_Start__c.addDays(13)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c;
}
// January Second Week
else if(system.today() >= pto.Calendar_Year_Start__c.addDays(14) && system.today() <= pto.Calendar_Year_Start__c.addDays(30)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 2;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 2;
}
// February First Week
else if(system.today() >= pto.Calendar_Year_Start__c.addDays(31) && system.today() <= pto.Calendar_Year_Start__c.addDays(43)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 3;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 3;
}
// February Second Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(44) && system.today() <= pto.Calendar_Year_Start__c.addDays(57)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 4;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 4;
}
// March First Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(58) && system.today() <= pto.Calendar_Year_Start__c.addDays(70)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 5;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 5;
}
// March Second Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(71) && system.today() <= pto.Calendar_Year_Start__c.addDays(87)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 6;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 6;
}
// April First Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(88) && system.today() <= pto.Calendar_Year_Start__c.addDays(100)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 7;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 7;
}
// April Second Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(101) && system.today() <= pto.Calendar_Year_Start__c.addDays(116)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 8;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 8;
}
// May First Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(117) && system.today() <= pto.Calendar_Year_Start__c.addDays(129)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 9;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 9;
}
// May Second Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(130) && system.today() <= pto.Calendar_Year_Start__c.addDays(146)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 10;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 10;
}
// June First Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(147) && system.today() <= pto.Calendar_Year_Start__c.addDays(159)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 11;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 11;
}
// June Second Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(160) && system.today() <= pto.Calendar_Year_Start__c.addDays(175)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 12;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 12;
}
// July First Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(176) && system.today() <= pto.Calendar_Year_Start__c.addDays(188)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 13;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 13;
}
// July Second Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(189) && system.today() <= pto.Calendar_Year_Start__c.addDays(205)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 14;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 14;
}
// August First Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(206) && system.today() <= pto.Calendar_Year_Start__c.addDays(218)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 15;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 15;
}
// August Second Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(219) && system.today() <= pto.Calendar_Year_Start__c.addDays(235)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 16;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 16;
}
// September First Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(236) && system.today() <= pto.Calendar_Year_Start__c.addDays(248)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 17;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 17;
}
// September Second Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(249) && system.today() <= pto.Calendar_Year_Start__c.addDays(264)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 18;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 18;
}
// October First Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(265) && system.today() <= pto.Calendar_Year_Start__c.addDays(277)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 19;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 19;
}
// October Second Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(278) && system.today() <= pto.Calendar_Year_Start__c.addDays(294)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 20;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 20;
}
// November First Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(295) && system.today() <= pto.Calendar_Year_Start__c.addDays(307)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 21;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 21;
}
// November Second Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(308) && system.today() <= pto.Calendar_Year_Start__c.addDays(323)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 22;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 22;
}
// December First Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(324) && system.today() <= pto.Calendar_Year_Start__c.addDays(336)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 23;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 23;
}
// December Second Week
else if (system.today() >= pto.Calendar_Year_Start__c.addDays(337) && system.today() <= pto.Calendar_Year_Start__c.addDays(353)){
pto.Accumulated_Hours__c = pto.Accumulation_Increment_Hours__c * 24;
pto.Accumulated_Sick_Hours__c = pto.Accumulation_Increment_Sick_Hours__c * 24;
}
}
}
And here are my records. As you can see, it only updates when I went into the record and save the record.