ministryofjustice/Claim-for-Crown-Court-Defence

View on GitHub
app/services/stats/management_information/daily_report_generator.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true

require 'csv'

module Stats
  module ManagementInformation
    class DailyReportGenerator
      include StuffLogger

      def self.call(...)
        new(...).call
      end

      def initialize(**kwargs)
        @scheme = kwargs[:scheme]
      end

      def call
        output = generate_report
        Stats::Result.new(output, :csv)
      end

      private

      def generate_report
        log_info('Daily MI Report generation started...')
        content = generate_csv
        log_info('Daily MI Report generation finished')
        content
      rescue StandardError => e
        log_error(e, 'Daily MI Report generation error')
        raise
      end

      def generate_csv
        CSV.generate do |csv|
          csv << headers
          claim_journeys.each do |rec|
            csv << row(rec)
          end
        end
      end

      def headers
        Settings.claim_csv_headers.map { |header| header.to_s.humanize }
      end

      def claim_journeys
        @claim_journeys ||= DailyReportQuery.call(scheme: @scheme)
      end

      def row(rec)
        presenter = Presenter.new(rec)

        Settings
          .claim_csv_headers
          .map { |header| presenter.send(header) }
      end
    end
  end
end