I haven’t had to do something like this myself, but I think this is what the ‘resources’ and ‘events’ modules are for.
It definitely let’s you connect resources (which can be products) with events (which have a duration). And I think there might also be some kind of invoice/PO tie in as well.
Hopefully this helps!