Skip to main content

Hey Y’all,



So, I’d like to incorporate PTO into project planning - here’s how I’m thinking about it, but would love more ideas on how to make this most actionable.



I have a table for projects that has a Start Date and an estimated duration for how long the project should take. To incorporate PTO, I can use the Workday function, which allows me to include a list of holidays formatted as a comma-separated string of ISO-formatted dates.





To use the Workday function, I’ll need a list of every day that someone is off for PTO. In this example, I’m tracking PTO in a table with fields for Start and End dates. This is a great start, but I need every date in between - a perfect job for a script.



The below script calculates each day a person is on PTO. The “Days Off” then roll up to the person, which is then rolled up to the Projects table when someone is assigned to a project and passed through the Workday function.



Now we can calculate the End Date of a project based on the Start Date, Duration, and PTO for the assigned DRI. We can also create Alerts for when someone is assigned to start a project during their PTO.





Script below, and example base here. How would you use this? What would make this more usable?



let pto = base.getTable('PTO');

let ptoQuery = await pto.selectRecordsAsync();

let ptoRecords = ptoQuery.records;



// The Array to store all record updates

let ptoBackend = e]



// For each PTO Record, calculate the PTO dates between the start and end dates, and add them to an array.

ptoRecords.forEach(function(c){



let d = ]

for (let i = 0; i < c.getCellValue('Duration'); i++){



let startDate = new Date(c.getCellValue('Date Start'));

let newDate = new Date(startDate.setDate(startDate.getDate() + i));

d.push(newDate.toISOString().substring(0,10));



}

ptoBackend.push(pc,d])



})



// Format the array for the UpdateRecordsAsync function

let updateRecords = ptoBackend.map( c => ({

id: c<0].id,

fields:{

'Days Off': c 1].join(),

},

})

);



// Update Records

await pto.updateRecordsAsync(updateRecords);



output.markdown('# Done! 🚀')
Be the first to reply!

Reply