R/SLA_Function.R

Defines functions SLA

SLA <- function(open, closed) {
  
  require(timeDate)
  #--------------------------------------------------#
  #----- Setup
  open <- as.POSIXct(open)
  closed <- as.POSIXct(closed)
  
  diff_seq_all <- seq(from = open, to = closed, by = 'mins')
  
  diff_seq <- diff_seq_all %>% as_date() %>% unique()
  diff_seq <- diff_seq[!diff_seq %in% c(as_date(open), as_date(closed))]
  
  holidays <- holidayLONDON(year = unique(year(diff_seq))) %>% as_date()
  
  #--------------------------------------------------#
  #----- Weekdays
  week_days <- diff_seq[weekdays(diff_seq) %in% c('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')]
  t_week <- length(week_days)*16*60
  
  #----- Weekends
  weekend_days <- diff_seq[weekdays(diff_seq) %in% c('Saturday', 'Sunday')]
  t_weekend <- length(weekend_days)*24*60
  
  #----- Public Holidays
  holid <- diff_seq[diff_seq %in% holidays]
  t_holid <- length(holid)*8
  
  #----- Open Date
  open_date <- as_date(open)
  open_date_1 <- as.POSIXct(paste(open_date, '09:00', sep = ' '))
  open_date_2 <- as.POSIXct(paste(open_date, '17:00', sep = ' '))
  open_date_midnight <- as.POSIXct(paste(open_date, '00:00', sep = ' '))
  
  open_seq <- diff_seq_all[as_date(diff_seq_all) == open_date]
  # open_seq <- open_seq[open_seq != open_date_midnight]
  
  t_open <- which(
    open_seq <= open_date_1 | open_seq >= open_date_2 
  ) %>% length()
  
  if (open_date %in% holidays) {
    t_open <- length(open_seq)
  }
  
  #----- Closed Date
  closed_date <- as_date(closed)
  if (closed_date == open_date) {
    t_closed <- 0
  } else {
    closed_date_1 <- as.POSIXct(paste(closed_date, '09:00', sep = ' '), tz = 'UTC')
    closed_date_2 <- as.POSIXct(paste(closed_date, '17:00', sep = ' '), tz = 'UTC')
    closed_date_midnight <- as.POSIXct(paste(closed_date, '00:00', sep = ' '))
    
    closed_seq <- diff_seq_all[as_date(diff_seq_all) == closed_date]
    closed_seq <- closed_seq[closed_seq != closed_date_midnight]
    
    t_closed <- which(
      closed_seq <= closed_date_1 | closed_seq >= closed_date_2 
    ) %>% length()
    
    if (closed_date %in% holidays) {
      t_closed <- length(closed_seq)
    }
  }
  
  #--------------------------------------------------#
  SLA_Time <- length(diff_seq_all) - sum(t_week, t_weekend, t_holid, t_open, t_closed)
  SLA_Time
}
Ehsan-F/R-Mixtape documentation built on June 24, 2020, 12:22 a.m.