Advertisement
SoniaMilena

public class CalcularDiasColombia

Aug 20th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.92 KB | None | 0 0
  1. public class CalcularDiasColombia {
  2.     //Detalle de Tipo de metadatos personalizados=  Dias_festivos__mdt
  3.     public Dias_festivos__mdt  getChangedCustomMetaDataRecord (Date diaFecha){
  4.          
  5.        Dias_festivos__mdt DiasFestivosCol = [SELECT id, Festivo__c FROM Dias_festivos__mdt ];
  6.        DiasFestivosCol.Festivo__c = diaFecha;
  7.        system.debug('diaFecha: ' + diaFecha);
  8.        system.debug('DiasFestivosCol ' + DiasFestivosCol);
  9.        return DiasFestivosCol;
  10.       // system.debug('DiasFestivosCol ' + DiasFestivosCol);
  11.       // system.debug('records: ' + this.records);
  12.     }
  13.     public class BusinessDays{
  14.         private List<Boolean> businessDay = new Boolean[7];
  15.         private List<Time> startHours = new Time [7];
  16.         private List<Time> endHours = new Time [7];
  17.         private Date knownSunday = date.newInstance(2013, 1, 6);
  18.         private String businessHourId;
  19.         private Boolean considerHolidays = false;
  20.  
  21.         public BusinessDays(String businessHourName, Boolean considerHolidays) {
  22.             BusinessHours bh;
  23.             this.considerHolidays = considerHolidays;
  24.             if(businessHourName == null) {
  25.                 bh = [SELECT SundayStartTime,
  26.                              MondayStartTime,
  27.                              TuesdayStartTime,
  28.                              WednesdayStartTime,
  29.                              ThursdayStartTime,
  30.                              FridayStartTime,
  31.                              SaturdayStartTime,
  32.                              SundayEndTime,
  33.                              MondayEndTime,
  34.                              TuesdayEndTime,
  35.                              WednesdayEndTime,
  36.                              ThursdayEndTime,
  37.                              FridayEndTime,SaturdayEndTime
  38.                       FROM BusinessHours
  39.                       WHERE IsDefault = true ];
  40.  
  41.             }else{
  42.                 bh = [SELECT SundayStartTime,
  43.                              MondayStartTime,
  44.                              TuesdayStartTime,
  45.                              WednesdayStartTime,
  46.                              ThursdayStartTime,
  47.                              FridayStartTime,
  48.                              SaturdayStartTime,
  49.                              SundayEndTime,
  50.                              MondayEndTime,
  51.                              TuesdayEndTime,
  52.                              WednesdayEndTime,
  53.                              ThursdayEndTime,
  54.                              FridayEndTime,
  55.                              SaturdayEndTime
  56.                       FROM BusinessHours
  57.                       WHERE Name =: businessHourName ];
  58.             }
  59.             businessHourId = bh.Id;
  60.  
  61.             businessDay[0] = (bh.SundayStartTime != null);
  62.             businessDay[1] = (bh.MondayStartTime != null);
  63.             businessDay[2] = (bh.TuesdayStartTime != null);
  64.             businessDay[3] = (bh.WednesdayStartTime != null);
  65.             businessDay[4] = (bh.ThursdayStartTime != null);
  66.             businessDay[5] = (bh.FridayStartTime != null);
  67.             businessDay[6] = (bh.SaturdayStartTime != null);
  68.  
  69.             startHours[0] = bh.SundayStartTime;
  70.             startHours[1] = bh.MondayStartTime;
  71.             startHours[2] = bh.TuesdayStartTime;
  72.             startHours[3] = bh.WednesdayStartTime;
  73.             startHours[4] = bh.ThursdayStartTime;
  74.             startHours[5] = bh.FridayStartTime;
  75.             startHours[6] = bh.SaturdayStartTime;
  76.  
  77.             endHours[0] = bh.SundayEndTime;
  78.             endHours[1] = bh.MondayEndTime;
  79.             endHours[2] = bh.TuesdayEndTime;
  80.             endHours[3] = bh.WednesdayEndTime;
  81.             endHours[4] = bh.ThursdayEndTime;
  82.             endHours[5] = bh.FridayEndTime;
  83.             endHours[6] = bh.SaturdayEndTime;
  84.             system.debug('businessHourId: ' + businessHourId);          
  85.         }
  86.         public Boolean isBusinessDay(Date inputDate) {
  87.            
  88.             Integer i = Math.mod(Math.abs(this.knownSunday.daysBetween(inputDate)),7);
  89.             Boolean isBusinessDay = businessDay[i];
  90.  
  91.             if(considerHolidays) {
  92.  
  93.                 isBusinessDay = ( isBusinessDay && BusinessHours.isWithin(businessHourId, Datetime.newInstance(inputDate.year(), inputDate.month(),inputDate.day())));
  94.             }
  95.             system.debug('isBusinessDay: ' + isBusinessDay);
  96.             return (isBusinessDay);  
  97.         }
  98.  
  99.         public Boolean isBusinessDay(DateTime inputDateTime) {
  100.              // Verificar si hoy es un día hábil - Fecha
  101.             Date businessDate = inputDateTime.date();
  102.             Time businessTime = inputDateTime.Time();
  103.  
  104.             Integer i = Math.mod(Math.abs(this.knownSunday.daysBetween(businessDate)),7);
  105.             Boolean isBusinessDay = isBusinessDay(businessDate);
  106.             Boolean isBusinessHour = false;
  107.      
  108.             if(isBusinessDay){
  109.                 isBusinessHour = ( businessTime > getStartTime(businessDate) && businessTime < getEndTime(businessDate) );
  110.             }
  111.             system.debug('isBusinessHour: ' + isBusinessHour);
  112.             return (isBusinessHour);
  113.         }
  114.  
  115.         public Time getStartTime(Date inputDate) {
  116.             // Obtener la hora de inicio
  117.             Integer i = Math.mod(Math.abs(this.knownSunday.daysBetween(inputDate)),7);
  118.  
  119.             return (startHours[i]);
  120.         }
  121.  
  122.         public Time getEndTime(Date inputDate) {
  123.             // Obtener la hora de finalización
  124.             Integer i = Math.mod(Math.abs(this.knownSunday.daysBetween(inputDate)),7);
  125.  
  126.             return (endHours[i]);
  127.         }
  128.  
  129.         public Date nextBusinessDay(Date inputDate) {
  130.             // Obtiene el siguiente día hábil, omitiendo los días no hábiles
  131.             Integer i = Math.mod(Math.abs(this.knownSunday.daysBetween(inputDate)),7);
  132.             Date returnDate = inputDate;
  133.            
  134.             do {
  135.                 returnDate = returnDate.addDays(1);
  136.                 i++;
  137.             } while (!businessDay[Math.mod(i, 7)]);
  138.            
  139.             if(considerHolidays) {
  140.                 if(!BusinessHours.isWithin(businessHourId , datetime.newInstance(returnDate.year(), returnDate.month(),returnDate.day()))) {
  141.                     returnDate = nextBusinessDay(returnDate);
  142.                 }
  143.             }
  144.            
  145.             return returnDate;
  146.         }
  147.         /*public Boolean isWorkingDay(Datetime d){
  148.             return BusinessHours.isWithin(bHours.Id, d);
  149.         }
  150.         public Datetime addDays(Datetime startDate, Integer days){
  151.             startDate = BusinessHours.nextStartDate(bHours.Id, startDate);
  152.             for (Integer elapsed = 0; elapsed < days; elapsed++){
  153.                 startDate = startDate.addDays(1);
  154.                 if (!BusinessHours.isWithin(bHours.Id, startDate)){
  155.                     startDate = BusinessHours.nextStartDate(bHours.Id, startDate);
  156.                 }
  157.             }
  158.             return startDate;
  159.         }*/
  160.  
  161.     }
  162.  
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement