Advertisement
Guest User

This cool function

a guest
May 21st, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. export const calculateUserTimekeeping = (timekeeping_data: any, project: Project, user: ProjectUser) => {
  2.     const time_traveled = timekeeping_data.inbound_travel_time + timekeeping_data.outbound_travel_time;
  3.     const fatigue_total = (parseInt(project.fatigue_hours, 0) * 60) + parseInt(project.fatigue_minutes, 0);
  4.  
  5.     let time_on_site;
  6.     if (timekeeping_data.time_out === null) {
  7.         const now = moment(new Date());
  8.         const duration = moment.duration(now.diff(timekeeping_data.time_in));
  9.         time_on_site = duration.asMinutes();
  10.     } else {
  11.         const now = moment(timekeeping_data.time_out);
  12.         const duration = moment.duration(now.diff(timekeeping_data.time_in));
  13.         time_on_site = duration.asMinutes();
  14.     }
  15.  
  16.     let exceedance_hours;
  17.     if (project.fatigue_type.toLocaleLowerCase() === 'door to door') {
  18.         exceedance_hours = (time_on_site + time_traveled) - fatigue_total;
  19.     } else {
  20.         exceedance_hours = (time_on_site) - fatigue_total;
  21.     }
  22.  
  23.     const door_to_door = time_on_site + time_traveled;
  24.  
  25.     let color;
  26.     const color_calc = project.fatigue_type.toLocaleLowerCase() === 'door to door' ?
  27.         (time_traveled + time_on_site) / fatigue_total * 100 :
  28.         time_on_site / fatigue_total * 100;
  29.     if (color_calc >= 100) {
  30.         color = 'red';
  31.     } else if (color_calc >= 76) {
  32.         color = 'orange';
  33.     } else {
  34.         color = 'green';
  35.     }
  36.  
  37.     const time_travelled = parseInt(timekeeping_data.inbound_travel_time, 0) + parseInt(timekeeping_data.outbound_travel_time, 0);
  38.  
  39.     let time_remaining;
  40.     let time_worked;
  41.  
  42.     if (project.fatigue_type.toLocaleLowerCase() !== 'door to door') {
  43.         time_remaining = fatigue_total - time_on_site;
  44.         time_worked = time_on_site;
  45.     } else {
  46.         time_remaining = fatigue_total -
  47.             (parseInt(minutesToHoursAndMinutes(timekeeping_data.time_in, 'mm'), 0) - time_traveled) -
  48.             (parseInt(minutesToHoursAndMinutes(timekeeping_data.time_out, 'mm'), 0));
  49.         time_worked = time_on_site + time_traveled;
  50.     }
  51.  
  52.     const pct_time_left = (fatigue_total - time_on_site - time_traveled / fatigue_total) * 100;
  53.     const pct_time_worked = (time_worked / fatigue_total) * 100;
  54.  
  55.     const user_timekeeping: Timekeeping = {
  56.         user_id: user.id,
  57.         time_in: timekeeping_data.time_in,
  58.         time_out: timekeeping_data.time_out,
  59.         inbound_travel_time: timekeeping_data.inbound_travel_time,
  60.         outbound_travel_time: timekeeping_data.outbound_travel_time,
  61.         time_on_site: time_on_site,
  62.         time_travelled: time_travelled.toString(),
  63.         fatigue_total: fatigue_total.toString(),
  64.         fatigue_type: project.fatigue_type,
  65.         time_remaining: time_remaining,
  66.         time_worked: time_worked,
  67.         pct_time_left: pct_time_left,
  68.         pct_time_worked: pct_time_worked,
  69.         color: color
  70.     };
  71.  
  72.     return user_timekeeping;
  73. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement