mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 02:57:57 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			95 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| class Api::V2::Accounts::ReportsController < Api::V1::Accounts::BaseController
 | |
|   before_action :check_authorization
 | |
| 
 | |
|   def index
 | |
|     builder = V2::ReportBuilder.new(Current.account, report_params)
 | |
|     data = builder.build
 | |
|     render json: data
 | |
|   end
 | |
| 
 | |
|   def summary
 | |
|     render json: summary_metrics
 | |
|   end
 | |
| 
 | |
|   def agents
 | |
|     response.headers['Content-Type'] = 'text/csv'
 | |
|     response.headers['Content-Disposition'] = 'attachment; filename=agents_report.csv'
 | |
|     render layout: false, template: 'api/v2/accounts/reports/agents.csv.erb', format: 'csv'
 | |
|   end
 | |
| 
 | |
|   def inboxes
 | |
|     response.headers['Content-Type'] = 'text/csv'
 | |
|     response.headers['Content-Disposition'] = 'attachment; filename=inboxes_report.csv'
 | |
|     render layout: false, template: 'api/v2/accounts/reports/inboxes.csv.erb', format: 'csv'
 | |
|   end
 | |
| 
 | |
|   def labels
 | |
|     response.headers['Content-Type'] = 'text/csv'
 | |
|     response.headers['Content-Disposition'] = 'attachment; filename=labels_report.csv'
 | |
|     render layout: false, template: 'api/v2/accounts/reports/labels.csv.erb', format: 'csv'
 | |
|   end
 | |
| 
 | |
|   def teams
 | |
|     response.headers['Content-Type'] = 'text/csv'
 | |
|     response.headers['Content-Disposition'] = 'attachment; filename=teams_report.csv'
 | |
|     render layout: false, template: 'api/v2/accounts/reports/teams.csv.erb', format: 'csv'
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def check_authorization
 | |
|     raise Pundit::NotAuthorizedError unless Current.account_user.administrator?
 | |
|   end
 | |
| 
 | |
|   def current_summary_params
 | |
|     {
 | |
|       type: params[:type].to_sym,
 | |
|       id: params[:id],
 | |
|       since: range[:current][:since],
 | |
|       until: range[:current][:until],
 | |
|       group_by: params[:group_by]
 | |
|     }
 | |
|   end
 | |
| 
 | |
|   def previous_summary_params
 | |
|     {
 | |
|       type: params[:type].to_sym,
 | |
|       id: params[:id],
 | |
|       since: range[:previous][:since],
 | |
|       until: range[:previous][:until],
 | |
|       group_by: params[:group_by]
 | |
|     }
 | |
|   end
 | |
| 
 | |
|   def report_params
 | |
|     {
 | |
|       metric: params[:metric],
 | |
|       type: params[:type].to_sym,
 | |
|       since: params[:since],
 | |
|       until: params[:until],
 | |
|       id: params[:id],
 | |
|       group_by: params[:group_by],
 | |
|       timezone_offset: params[:timezone_offset]
 | |
|     }
 | |
|   end
 | |
| 
 | |
|   def range
 | |
|     {
 | |
|       current: {
 | |
|         since: params[:since],
 | |
|         until: params[:until]
 | |
|       },
 | |
|       previous: {
 | |
|         since: (params[:since].to_i - (params[:until].to_i - params[:since].to_i)).to_s,
 | |
|         until: params[:since]
 | |
|       }
 | |
|     }
 | |
|   end
 | |
| 
 | |
|   def summary_metrics
 | |
|     summary = V2::ReportBuilder.new(Current.account, current_summary_params).summary
 | |
|     summary[:previous] = V2::ReportBuilder.new(Current.account, previous_summary_params).summary
 | |
|     summary
 | |
|   end
 | |
| end
 | 
