Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class CalcularDiasColombia {
- //Detalle de Tipo de metadatos personalizados= Dias_festivos__mdt
- public Dias_festivos__mdt getChangedCustomMetaDataRecord (Date diaFecha){
- Dias_festivos__mdt DiasFestivosCol = [SELECT id, Festivo__c FROM Dias_festivos__mdt ];
- DiasFestivosCol.Festivo__c = diaFecha;
- system.debug('diaFecha: ' + diaFecha);
- system.debug('DiasFestivosCol ' + DiasFestivosCol);
- return DiasFestivosCol;
- // system.debug('DiasFestivosCol ' + DiasFestivosCol);
- // system.debug('records: ' + this.records);
- }
- public class BusinessDays{
- private List<Boolean> businessDay = new Boolean[7];
- private List<Time> startHours = new Time [7];
- private List<Time> endHours = new Time [7];
- private Date knownSunday = date.newInstance(2013, 1, 6);
- private String businessHourId;
- private Boolean considerHolidays = false;
- public BusinessDays(String businessHourName, Boolean considerHolidays) {
- BusinessHours bh;
- this.considerHolidays = considerHolidays;
- if(businessHourName == null) {
- bh = [SELECT SundayStartTime,
- MondayStartTime,
- TuesdayStartTime,
- WednesdayStartTime,
- ThursdayStartTime,
- FridayStartTime,
- SaturdayStartTime,
- SundayEndTime,
- MondayEndTime,
- TuesdayEndTime,
- WednesdayEndTime,
- ThursdayEndTime,
- FridayEndTime,SaturdayEndTime
- FROM BusinessHours
- WHERE IsDefault = true ];
- }else{
- bh = [SELECT SundayStartTime,
- MondayStartTime,
- TuesdayStartTime,
- WednesdayStartTime,
- ThursdayStartTime,
- FridayStartTime,
- SaturdayStartTime,
- SundayEndTime,
- MondayEndTime,
- TuesdayEndTime,
- WednesdayEndTime,
- ThursdayEndTime,
- FridayEndTime,
- SaturdayEndTime
- FROM BusinessHours
- WHERE Name =: businessHourName ];
- }
- businessHourId = bh.Id;
- businessDay[0] = (bh.SundayStartTime != null);
- businessDay[1] = (bh.MondayStartTime != null);
- businessDay[2] = (bh.TuesdayStartTime != null);
- businessDay[3] = (bh.WednesdayStartTime != null);
- businessDay[4] = (bh.ThursdayStartTime != null);
- businessDay[5] = (bh.FridayStartTime != null);
- businessDay[6] = (bh.SaturdayStartTime != null);
- startHours[0] = bh.SundayStartTime;
- startHours[1] = bh.MondayStartTime;
- startHours[2] = bh.TuesdayStartTime;
- startHours[3] = bh.WednesdayStartTime;
- startHours[4] = bh.ThursdayStartTime;
- startHours[5] = bh.FridayStartTime;
- startHours[6] = bh.SaturdayStartTime;
- endHours[0] = bh.SundayEndTime;
- endHours[1] = bh.MondayEndTime;
- endHours[2] = bh.TuesdayEndTime;
- endHours[3] = bh.WednesdayEndTime;
- endHours[4] = bh.ThursdayEndTime;
- endHours[5] = bh.FridayEndTime;
- endHours[6] = bh.SaturdayEndTime;
- system.debug('businessHourId: ' + businessHourId);
- }
- public Boolean isBusinessDay(Date inputDate) {
- Integer i = Math.mod(Math.abs(this.knownSunday.daysBetween(inputDate)),7);
- Boolean isBusinessDay = businessDay[i];
- if(considerHolidays) {
- isBusinessDay = ( isBusinessDay && BusinessHours.isWithin(businessHourId, Datetime.newInstance(inputDate.year(), inputDate.month(),inputDate.day())));
- }
- system.debug('isBusinessDay: ' + isBusinessDay);
- return (isBusinessDay);
- }
- public Boolean isBusinessDay(DateTime inputDateTime) {
- // Verificar si hoy es un día hábil - Fecha
- Date businessDate = inputDateTime.date();
- Time businessTime = inputDateTime.Time();
- Integer i = Math.mod(Math.abs(this.knownSunday.daysBetween(businessDate)),7);
- Boolean isBusinessDay = isBusinessDay(businessDate);
- Boolean isBusinessHour = false;
- if(isBusinessDay){
- isBusinessHour = ( businessTime > getStartTime(businessDate) && businessTime < getEndTime(businessDate) );
- }
- system.debug('isBusinessHour: ' + isBusinessHour);
- return (isBusinessHour);
- }
- public Time getStartTime(Date inputDate) {
- // Obtener la hora de inicio
- Integer i = Math.mod(Math.abs(this.knownSunday.daysBetween(inputDate)),7);
- return (startHours[i]);
- }
- public Time getEndTime(Date inputDate) {
- // Obtener la hora de finalización
- Integer i = Math.mod(Math.abs(this.knownSunday.daysBetween(inputDate)),7);
- return (endHours[i]);
- }
- public Date nextBusinessDay(Date inputDate) {
- // Obtiene el siguiente día hábil, omitiendo los días no hábiles
- Integer i = Math.mod(Math.abs(this.knownSunday.daysBetween(inputDate)),7);
- Date returnDate = inputDate;
- do {
- returnDate = returnDate.addDays(1);
- i++;
- } while (!businessDay[Math.mod(i, 7)]);
- if(considerHolidays) {
- if(!BusinessHours.isWithin(businessHourId , datetime.newInstance(returnDate.year(), returnDate.month(),returnDate.day()))) {
- returnDate = nextBusinessDay(returnDate);
- }
- }
- return returnDate;
- }
- /*public Boolean isWorkingDay(Datetime d){
- return BusinessHours.isWithin(bHours.Id, d);
- }
- public Datetime addDays(Datetime startDate, Integer days){
- startDate = BusinessHours.nextStartDate(bHours.Id, startDate);
- for (Integer elapsed = 0; elapsed < days; elapsed++){
- startDate = startDate.addDays(1);
- if (!BusinessHours.isWithin(bHours.Id, startDate)){
- startDate = BusinessHours.nextStartDate(bHours.Id, startDate);
- }
- }
- return startDate;
- }*/
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement