FIX: use utc time when generate reports; set boundary

Related: #3065 @ZogStriP 

- mostly restricting reports by day to the closed interval
- several refactors to their own model
- more generic in `report.rb`
- use utc time in `report.rb`'s `start_date` and `end_date`, and they are also be adjust to the beginning of the day or the end of the day to maximized its range. This is because some column are `datetime`, while others are `date`.