BathHacked/energy-sparks

View on GitHub
app/services/schools/generate_configuration.rb

Summary

Maintainability
A
0 mins
Test Coverage
F
0%
module Schools
  class GenerateConfiguration
    def initialize(school, aggregate_school = AggregateSchoolService.new(school).aggregate_school)
      @school = school
      @aggregated_meter_collection = aggregate_school
    end

    def generate
      @school.build_configuration unless @school.configuration
      configuration = @school.configuration

      fuel_configuration = GenerateFuelConfiguration.new(@aggregated_meter_collection).generate
      configuration.update!(fuel_configuration: fuel_configuration)

      aggregate_meter_dates = GenerateMeterDates.new(@aggregated_meter_collection).generate
      configuration.update!(aggregate_meter_dates: aggregate_meter_dates)

      dashboard_charts = GenerateDashboardChartConfiguration.new(@school, @aggregated_meter_collection, fuel_configuration).generate
      configuration.update!(dashboard_charts: dashboard_charts)

      analysis_chart_configuration = GenerateAnalysisChartConfiguration.new(@school, @aggregated_meter_collection, fuel_configuration)
      pupil_analysis_charts = analysis_chart_configuration.generate([:pupil_analysis_page])
      configuration.update!(analysis_charts: {}, pupil_analysis_charts: pupil_analysis_charts)

      # should come after fuel_configuration
      school_target_fuel_types = Targets::GenerateFuelTypes.new(@school, @aggregated_meter_collection).fuel_types_with_enough_data
      configuration.update!(school_target_fuel_types: school_target_fuel_types)

      suggest_estimates_fuel_types = Targets::GenerateFuelTypes.new(@school, @aggregated_meter_collection).suggest_estimates_for_fuel_types
      configuration.update!(suggest_estimates_fuel_types: suggest_estimates_fuel_types)

      estimated_consumption = Targets::GenerateEstimatedUsage.new(@school, @aggregated_meter_collection).generate
      configuration.update!(estimated_consumption: estimated_consumption)

      configuration
    end
  end
end