Updated

app/controllers/accounts / reports_controller.rb

C
104 lines of codes
10 methods
13.3 complexity/method
12 churn
132.74 complexity
42 duplications
class Accounts::ReportsController < InternalController
  1. Accounts::ReportsController has no descriptive comment
before_action :set_date_range def index @users = User.all end def summary @deal_summary = build_deal_sumary @deals_timeseries_count = build_chart_deals_timeseries_body end def pipeline_summary pipeline_id = params[:pipeline_id].presence || Pipeline.first&.id if pipeline_id series_data = Reports::Pipeline::StagesMetricBuilder.new(Current.account, report_params.merge(id: pipeline_id)).metrics @pipeline_summary = build_chart_pipeline_summary_body(series_data) else @pipeline_summary = {} end end private def build_deal_sumary
  1. Accounts::ReportsController#build_deal_sumary has a flog score of 26
[ Reports::Deals::MetricBuilder.new(Current.account, report_params.merge(metric: 'open_deals')).summary,
  1. Accounts::ReportsController#build_deal_sumary calls 'Current.account' 4 times Locations: 0 1 2 3
Reports::Deals::MetricBuilder.new(Current.account, report_params.merge(metric: 'all_deals')).summary,
  1. Accounts::ReportsController#build_deal_sumary calls 'Current.account' 4 times Locations: 0 1 2 3
Reports::Deals::MetricBuilder.new(Current.account, report_params.merge(metric: 'won_deals')).summary,
  1. Accounts::ReportsController#build_deal_sumary calls 'Current.account' 4 times Locations: 0 1 2 3
Reports::Deals::MetricBuilder.new(Current.account, report_params.merge(metric: 'lost_deals')).summary
  1. Accounts::ReportsController#build_deal_sumary calls 'Current.account' 4 times Locations: 0 1 2 3
] end def report_params common_params.merge({ metric: params[:metric], since: params[:since].to_time.to_i.to_s, until: params[:until].to_time.to_i.to_s, timezone_offset: params[:timezone_offset] }) end def common_params { type: params[:type]&.to_sym, id: params[:id], group_by: params[:group_by], filter: params[:filter]&.to_unsafe_h } end def build_chart_deals_timeseries_body { chart_type: 'column', data: [ { name: I18n.t('activerecord.models.deal.won_deals'),
  1. Similar code found in 2 nodes Locations: 0 1
color: metric_color('won_deals'), series_data: Reports::Deals::ReportBuilder.new(Current.account,
  1. Accounts::ReportsController#build_chart_deals_timeseries_body calls 'Current.account' 2 times Locations: 0 1
report_params.merge(metric: 'won_deals_count')).timeseries }, { name: I18n.t('activerecord.models.deal.lost_deals'),
  1. Similar code found in 2 nodes Locations: 0 1
color: metric_color('lost_deals'), series_data: Reports::Deals::ReportBuilder.new(Current.account,
  1. Accounts::ReportsController#build_chart_deals_timeseries_body calls 'Current.account' 2 times Locations: 0 1
report_params.merge(metric: 'lost_deals_count')).timeseries } ] }.to_json end def build_chart_pipeline_summary_body(series_data) { chart_type: 'funnel', data: [ { name: Deal.model_name.human, color: metric_color(params[:metric]), series_data: series_data } ] }.to_json end def metric_color(metric) case metric
  1. Accounts::ReportsController#metric_color is controlled by argument 'metric'
when 'lost_deals' '#CF4F27' when 'won_deals' '#259C50' when 'open_deals' '#5491F5' else '#6857D9' end end def set_date_range if params[:date_range].present?
  1. Accounts::ReportsController#set_date_range calls 'params[:date_range]' 2 times Locations: 0 1
starts_str, ends_str = params[:date_range].split(' - ')
  1. Accounts::ReportsController#set_date_range calls 'params[:date_range]' 2 times Locations: 0 1
params[:since] = starts_str params[:until] = ends_str else params[:date_range] = "#{params[:since]} - #{params[:until]}" end end end