Show *all* meetings on contact record page: direct or indirect

Hello Sugar lovers,
3 of our B2B customers have recently asked for a particular improvement in the way meetings are managed: they need more visibility on meetings per accounts. They need to see all meetings and also report on them: counts per months etc. The issue is that meetings cannot always be related to accounts because 1) there might be several accounts involved and 2) we taught them to relate the meeting to the most precise object: opp, contract, case... 

We followed different leads: 

1. Contextual report:
We tried to setup a consolidated with details report that would be automatically filtered on the contacts's account. The issue is that the report dashlet only offers to filter on a field of the meeting object. So no go. 

2. Standard report: 
We tried a consolidated with details report that would show all meetings for: 

  • Company A that employs contacts that are participants in the meetings
  • OR Company A that is the customer for opportunities / contracts / cases that are related to the meetings
  • OR Company A that is related to the meetings

This showed duplicates, as a lot of meetings have several contacts from the same company, and some meetings are related to opp for Company A which also employs the participants. Reports do not seem to use "distinct", so no go either. 

 

Now we're looking at 2 code-based solutions: 

The good but incomplete: 
We develop a custom subpanel that would show all direct and indirect meetings with a monster query. 

It's clean in terms of data, but it does not facilitate reporting.

We could create an advanced report with DISTINCT clauses, but that's hardly usable for end-users who would need to manually update the query with the account name or ID. Also, no graphs. And... really not good looking. 

We could create a custom dashlet but that's quite another bit of workload. And not configurable. 

The bad : 
One of our customers took the habit of duplicating the meetings and linking them to the "other" companies. Not a good idea :) 

The ugly: 
We add a new many-to-many relationship between meetings and accounts. Hooks (create, update, delete, change participants) would collect the distinct companies linked directly or indirectly (employer of participants, customers for opps / contracts / cases...) to the meeting and create/update the relationships. We would hide the standard meeting subpanel on accounts to leave only the new one.

That's yet more hooks, but at least its reportable. But it's not pretty. 

Have you encountered that need already? How did you solve it? How would you solve it? 

Thanks for your input!

Cheers,
Damien