I'm working on a problem with subcontractors. The thing is that 'the top' contractor is a project owner. He wants reports based on everybody working for him, based on his locations, dates, materials and other things associated to a project in his account.

So the problem:
The project owner has own personel, but hires a subcontractor.
This subcontractor has own personel but also hires a subcontractor.
and so on...

This creates a middle-man position. I want to implement it in such a way that it is easy for the subcontractor to link his work to project, yet leaving the possibility to make reports on every level with the 'main data' provided by the project initiator. As you might see, each subcontractor is a 'project owner' for his own little sub-project for which he was hired. And he is also interested in the performance of his subcontractors.

The problem looks rather 'classic' to me, but I can't find an example / theory how to implement this properly.
To be extra clear, I do want a top-down view (you can view data and thus make reports about subcontractors working for you, but not for the contractor you are working for). This needs to happen with data provided from the very top (say, locations, dates, and so on)

Any ideas about what you think resembles this would be very welcome!