BathHacked/energy-sparks

View on GitHub
app/services/amr/analytics_meter_collection_factory.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
90%
module Amr
  class AnalyticsMeterCollectionFactory
    def initialize(active_record_school, meter_collection_class = MeterCollectionFactory)
      @active_record_school = active_record_school
      @meter_collection_class = meter_collection_class
    end

    def unvalidated
      @meter_collection_class.build(unvalidated_data)
    end

    def unvalidated_data
      heat_meters = @active_record_school.meters_with_readings(:gas)
      electricity_meters = @active_record_school.meters_with_readings(Meter.non_gas_meter_types)
      data(AnalyticsUnvalidatedAmrDataFactory, heat_meters, electricity_meters)
    end

    def validated
      @meter_collection_class.build(validated_data)
    end

    def validated_data
      heat_meters = @active_record_school.meters_with_validated_readings(:gas)
      electricity_meters = @active_record_school.meters_with_validated_readings([:electricity, :solar_pv, :exported_solar_pv])
      data(AnalyticsValidatedAmrDataFactory, heat_meters, electricity_meters)
    end

    private

    def data(meter_data_class, heat_meters, electricity_meters)
      schedule_data_manager_service = ScheduleDataManagerService.new(@active_record_school)
      {
        school_data: AnalyticsSchoolFactory.new(@active_record_school).build,
        schedule_data: {
          temperatures: schedule_data_manager_service.temperatures,
          solar_pv: schedule_data_manager_service.solar_pv,
          solar_irradiation: nil,
          grid_carbon_intensity: schedule_data_manager_service.uk_grid_carbon_intensity,
          holidays: schedule_data_manager_service.holidays
        },
        amr_data: meter_data_class.new(heat_meters: heat_meters, electricity_meters: electricity_meters).build,
        pseudo_meter_attributes: @active_record_school.pseudo_meter_attributes_to_analytics
      }
    end
  end
end