Initial commit
This commit is contained in:
97
app/controllers/reports_controller.rb
Normal file
97
app/controllers/reports_controller.rb
Normal file
@@ -0,0 +1,97 @@
|
||||
require "will_paginate/array"
|
||||
|
||||
class ReportsController < ApplicationController
|
||||
include ProjectContext
|
||||
|
||||
before_action :set_project
|
||||
|
||||
include ProjectLayout
|
||||
|
||||
def index
|
||||
@reports = filtered_reports.paginate(page: params[:page])
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def filtered_reports
|
||||
results = reports
|
||||
|
||||
if params[:query].present?
|
||||
results = reports.select{ |report| report.name.include?(params[:query])}
|
||||
end
|
||||
|
||||
results
|
||||
end
|
||||
|
||||
def reports
|
||||
videos = @project.videos.reports_published
|
||||
videos.published_at_desc_order.flat_map { |video| build_reports_for(video) }
|
||||
end
|
||||
|
||||
def build_reports_for(video)
|
||||
client_name = @project.client_name
|
||||
reports = case client_name
|
||||
when "Nat Geo"
|
||||
nat_geo_reports_for(video)
|
||||
else
|
||||
discovery_reports_for(video)
|
||||
end
|
||||
|
||||
reports += default_reports_for(video)
|
||||
end
|
||||
|
||||
def default_reports_for(video)
|
||||
[
|
||||
Report.new(video, "BiG Music Cue Sheet", build_report_path(video, :audio_reports, "big")),
|
||||
Report.new(video, "Issues and Concerns Report", build_report_path(video, :issues_and_concerns_reports)),
|
||||
]
|
||||
end
|
||||
|
||||
def nat_geo_reports_for(video)
|
||||
[
|
||||
Report.new(video, "Legal Binder Log", build_report_path(video, :video_reports, "nat_geo")),
|
||||
Report.new(video, "Text Graphics Log", build_report_path(video, :graphic_reports, "nat_geo")),
|
||||
Report.new(video, "Music Cue Sheet", build_report_path(video, :audio_reports, "nat_geo")),
|
||||
Report.new(video, "Original Music Log", build_report_path(video, :audio_reports, "nat_geo-original")),
|
||||
]
|
||||
end
|
||||
|
||||
def discovery_reports_for(video)
|
||||
[
|
||||
Report.new(video, "Production Elements Log", build_report_path(video, :video_reports, "discovery")),
|
||||
Report.new(video, "GFX Cue List", build_report_path(video, :graphic_reports, "discovery")),
|
||||
Report.new(video, "Music Cue Sheet", build_report_path(video, :audio_reports, "discovery")),
|
||||
]
|
||||
end
|
||||
|
||||
def build_report_path(video, category, type = nil)
|
||||
# TODO: Use Current for locale
|
||||
[video, category, { format: "xlsx", locale: I18n.locale, type: type }]
|
||||
end
|
||||
|
||||
class Report
|
||||
include ActiveModel::Model
|
||||
|
||||
attr_reader :name, :url
|
||||
|
||||
delegate :number, :name, to: :video, prefix: true
|
||||
|
||||
def initialize(video, name, url)
|
||||
@video = video
|
||||
@name = name
|
||||
@url = url
|
||||
end
|
||||
|
||||
def to_partial_path
|
||||
"reports/report"
|
||||
end
|
||||
|
||||
def published_at
|
||||
video.report_published_at
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
attr_reader :video
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user