I would provide an alternate view to Don's in that if a foreman has 20 unapproved entries you don't want to fire off 20 emails to them and have their inbox full of unapproved requests.
There is a non-pipeline email solution similar though that you have a table of foreman that you query via Pipelines every day at 6pm, if they have unapproved time entries then you send them an email via Pipelines or basic QB notifications and in the body of the email you send them a link to a report in QB that is a filtered report to them as a foreman of their pending approvals. The body of the email will not include the actual entries in table format, but it would alert them with general specifics all the same.
If you're still set on using Pipelines, you can either 1) modify your pipeline and loop through the foremen with outstanding approvals and for each formeman query their approvals and send it similar to how you already are. This method is pretty taxing though in that if you have 30 foremen with pending entries you'd be querying 30 times which is a lot for a simple process. You could instead query for all outstanding entries, and then do a loop of your foreman and instead of re-querying for their specific entries, do the JSON loop that you're doing for the email and add an IF condition to the JSON string that the foreman on the time entry has to be the same foreman that you're currently sending the email to.
------------------------------
Chayce Duncan
------------------------------