Initial commit
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
module ExcelReports
|
||||
module GraphicReports
|
||||
class DiscoveryGfxCueList
|
||||
def initialize(video)
|
||||
@video = video
|
||||
end
|
||||
|
||||
def to_xls
|
||||
DiscoveryGfxCueLists::TextedElementsSheet.build(workbook, graphics_elements_data, graphics_elements_header_data)
|
||||
|
||||
package.to_stream.read
|
||||
end
|
||||
|
||||
def filename(format = "xlsx")
|
||||
name = [@video.file.filename.to_s, "gfx-cue-list"].map(&:parameterize).join("_")
|
||||
[name, format].join(".")
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
attr_reader :video
|
||||
|
||||
def graphics_elements_data
|
||||
video.graphics_elements.order(timecode_in: :asc).map do |graphics_element|
|
||||
GraphicsElementsData.new(
|
||||
graphics_element.text,
|
||||
graphics_element.timecode_in,
|
||||
graphics_element.timecode_out,
|
||||
graphics_element.duration,
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
def graphics_elements_header_data
|
||||
GraphicsElementsHeaderData.new(
|
||||
video.name,
|
||||
video.number,
|
||||
video.project.client_name,
|
||||
video.project.account.name,
|
||||
)
|
||||
end
|
||||
|
||||
def workbook
|
||||
@workbook ||= package.workbook
|
||||
end
|
||||
|
||||
def package
|
||||
@package ||= Axlsx::Package.new
|
||||
end
|
||||
|
||||
class GraphicsElementsData < Struct.new(
|
||||
:text,
|
||||
:timecode_in,
|
||||
:timecode_out,
|
||||
:duration,
|
||||
)
|
||||
end
|
||||
|
||||
class GraphicsElementsHeaderData < Struct.new(
|
||||
:program_title,
|
||||
:episode,
|
||||
:network,
|
||||
:company,
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,56 @@
|
||||
module ExcelReports
|
||||
module GraphicReports
|
||||
module DiscoveryGfxCueLists
|
||||
class TextedElementsSheet < ::ExcelReports::Worksheet
|
||||
def title
|
||||
"Texted Elements List"
|
||||
end
|
||||
|
||||
def fill_content(sheet)
|
||||
sheet.add_row ["Texted Element / CG List"]
|
||||
sheet.add_row
|
||||
sheet.add_row ["Program Title", header_data.program_title]
|
||||
sheet.add_row ["Episode", header_data.episode]
|
||||
sheet.add_row ["Network", header_data.network]
|
||||
sheet.add_row ["Executive Producer", ""]
|
||||
sheet.add_row ["Production Company", header_data.company]
|
||||
sheet.add_row
|
||||
sheet.add_row ["Title/Subtitle/Graphics", "T/C IN", "T/C OUT", "TRT"]
|
||||
|
||||
data.each do |graphics_data|
|
||||
sheet.add_row [graphics_data.text, graphics_data.timecode_in, graphics_data.timecode_out, graphics_data.duration]
|
||||
end
|
||||
end
|
||||
|
||||
def format(sheet)
|
||||
sheet.column_widths *column_widths
|
||||
end
|
||||
|
||||
def style(sheet)
|
||||
sheet.add_style "A1", Styles::BOLD, { sz: 12 }
|
||||
sheet.add_style "A9:D9", Styles::TABLE_HEADER
|
||||
sheet.add_style "A3:A7", Styles::PROGRAM_HEADER
|
||||
sheet.add_style "B3:B7", Styles::HEADER_DATA
|
||||
|
||||
if data.any?
|
||||
sheet.add_style "A#{data_start_index}:D#{data_end_index}", Styles::TABLE_DATA
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def column_widths
|
||||
[60, 20, 20]
|
||||
end
|
||||
|
||||
def data_start_index
|
||||
10
|
||||
end
|
||||
|
||||
def data_end_index
|
||||
(data_start_index + data.size) - 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,42 @@
|
||||
module ExcelReports
|
||||
module GraphicReports
|
||||
class NatGeoTextGraphicsLog
|
||||
def initialize(video)
|
||||
@video = video
|
||||
end
|
||||
|
||||
def to_xls
|
||||
NatGeoTextGraphicsLogs::InternalProgramGfxLogSheet.build(
|
||||
workbook, graphics_elements_data, graphics_elements_header_data
|
||||
)
|
||||
|
||||
package.to_stream.read
|
||||
end
|
||||
|
||||
def filename(format = "xlsx")
|
||||
name = [@video.file.filename.to_s, "text-graphics-log"].map(&:parameterize).join("_")
|
||||
[name, format].join(".")
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
attr_reader :video
|
||||
|
||||
def graphics_elements_data
|
||||
video.graphics_elements.order(timecode_in: :asc)
|
||||
end
|
||||
|
||||
def graphics_elements_header_data
|
||||
video
|
||||
end
|
||||
|
||||
def workbook
|
||||
@workbook ||= package.workbook
|
||||
end
|
||||
|
||||
def package
|
||||
@package ||= Axlsx::Package.new
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,78 @@
|
||||
module ExcelReports
|
||||
module GraphicReports
|
||||
module NatGeoTextGraphicsLogs
|
||||
class InternalProgramGfxLogSheet < Worksheet
|
||||
def title
|
||||
"Internal Program GFX Log"
|
||||
end
|
||||
|
||||
def fill_content(sheet)
|
||||
sheet.add_row ["NATIONAL GEOGRAPHIC", "", "", "", "", "", ""]
|
||||
sheet.add_row ["Text-Graphics Log", "", "", "", "", "", ""]
|
||||
sheet.add_row ["(Title Sequence, Maps, Lower Thirds, CGI, Subtitles, Captions, Text Identifiers, Chyrons, Credits etc. )", "", "", "", "", "", ""]
|
||||
sheet.add_row
|
||||
sheet.add_row ["", "Series Name:", "", "", "", "", ""]
|
||||
sheet.add_row ["", "Episode Title:", header_data.name, "", "", "", ""]
|
||||
sheet.add_row ["", "Episode Number:", header_data.number, "", "", "", ""]
|
||||
sheet.add_row ["", "Traffic Code(s):", "", "", "", "", ""]
|
||||
sheet.add_row ["", "Date:", BigMediaTime.time_zone_now.to_date.strftime("%D"), "", "", "", ""]
|
||||
sheet.add_row
|
||||
sheet.add_row table_headers
|
||||
|
||||
data.each do |graphics_data|
|
||||
sheet.add_row [graphics_data.graphic_type, graphics_data.text, graphics_data.timecode_in, graphics_data.timecode_out, "", "", ""]
|
||||
end
|
||||
|
||||
sheet.add_row(["*Clean Graphics should appear at the end of the program master. If all shots do not fit on the program master, a separate graphics master should be delivered."])
|
||||
sheet.add_row(["*If delivering textless masters & no clean graphics at the end, denote N/A in the clean scene timecode section."])
|
||||
end
|
||||
|
||||
def format(sheet)
|
||||
sheet.column_widths *column_widths
|
||||
cells_to_merge.each { |cell| sheet.merge_cells cell }
|
||||
end
|
||||
|
||||
def style(sheet)
|
||||
sheet.add_style "A1:A2", Styles::BOLD, Styles::FULLY_CENTERED, { sz: 12 }
|
||||
sheet.add_style "A3", Styles::FULLY_CENTERED, { sz: 12 }
|
||||
sheet.add_style "B5:B9", Styles::BOLD, Styles::HORIZONTAL_RIGHT
|
||||
sheet.add_style "A11:G11", Styles::BOLD, Styles::FULLY_CENTERED, Styles::THIN_BLACK_BORDER, Styles::WRAP_TEXT
|
||||
|
||||
if data.any?
|
||||
sheet.add_style "A#{data_start_index}:G#{data_end_index}", Styles::THIN_BLACK_BORDER
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def table_headers
|
||||
[
|
||||
"Element\n(Ex: Title, Lower Third, Subtitle, Graphic, Credits, etc.)",
|
||||
"Description",
|
||||
"Program Timecode In",
|
||||
"Program Timecode Out",
|
||||
"Clean Scene Timecode In",
|
||||
"Clean Scene Timecode Out",
|
||||
"Font Information\n(Include Font Name, Style, Color, & Opacity)"
|
||||
]
|
||||
end
|
||||
|
||||
def column_widths
|
||||
[25, 36, 18, 18, 18, 18, 23]
|
||||
end
|
||||
|
||||
def cells_to_merge
|
||||
%w(A1:G1 A2:G2 A3:G3 C5:E5 C6:E6 C7:E7 C8:E8 C9:E9)
|
||||
end
|
||||
|
||||
def data_start_index
|
||||
12
|
||||
end
|
||||
|
||||
def data_end_index
|
||||
(data_start_index + data.size) - 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user