I’m trying to develop a custom reports generation for my application, in which the user will dynamically input the model and its related model.And will select the related columns for which the report is needed and will have conditional statements for ‘AND’ and ‘OR’ conditions.
The same functionality is done is vtiger ,Zoho CRM and sales force .
My doubt is which is the efficient way of doing it.
1.Either by creating tables for each modules and defining its column in database
2.Or by providing a config file for all the set up
3.Or by creating a model class for all reports and defining its related model attributes and binding data using getter and setter(accessors and mutators).
4.Or suggest me any other preferrable method or any packages with have minimal functionalities relating this
I know is complex but please suggest me few hints from your point of view.
you can use a Querybuilder to generate queries by users themselves.
then use something similar to JSReport to allow users to design reports.
There are very good web report designers out there, but most of them are for a price. if you still wanna make your own, refer these;
JSReports for reference what you looking for is real 😉
use JQueryQueryBuilder and customize according to your need.
use Laravel Boilerplate or something to start-off with.
use Handlebars.js / Mustache.js or Blade as the template engine.
For similar requirement, I have come across Reportico
Though I have not started implementing it yet, but it seems really nice.
They have Laravel module as well, supporting Laravel 5.1
Seems the team keeps the thing updated.
Although their UI is not good, they have got report builder as well.
Their Github link: https://github.com/reportico-web/
Although not a complete solution, I think this can help you on your way to creating your own:
You can get all your tables from your DB dynamically:
You can get column names for tables as well:
Try an find a way to get related tables to the one the users selects.
get intended query from user form. ( with conditions and value )