That will work for the supplier and client invoices.
With the vehicle charge there is a need to create multiple vehicle charge rows in one invoice.
To clarify, the total fields required for all three types are:
Supplier id, client id, project id, task id, vehicle id plus fields specific to each type, like code that is only required for the supplier, date etc. Going with a simple one to many, there will be the need to have null-able fields for supplier and client id's if the invoice was for a vehicle charge, and i am not a fan of null-able fields.
I implemented it with 3 invoice types, one for client, one for supplier and one for vehicle charge and each have a morphMany to the invoice products table.
This way i am able to pull each data separately, and since most of the invoices are of vehicle charge type i don't have to pull all the rest.
The entire app is build like a SPA with vuejs etc, so i also broke down each invoice to its own component both for the front end and the Backend.
That said, i really appreciate your input.