scinote-web/app/services/reports/docx/draw_step.rb

71 lines
2.2 KiB
Ruby

# frozen_string_literal: true
module Reports::Docx::DrawStep
def draw_step(step)
color = @color
step_type_str = step.completed ? 'completed' : 'uncompleted'
user = (step.completed? && step.last_modified_by) || step.user
timestamp = step.completed ? step.completed_on : step.created_at
@docx.p
@docx.h5(
"#{I18n.t('projects.reports.elements.step.step_pos', pos: step.position_plus_one)} #{step.name}"
)
@docx.p do
if step.completed
text I18n.t('protocols.steps.completed'), color: color[:green], bold: true
else
text I18n.t('protocols.steps.uncompleted'), color: color[:gray], bold: true
end
text ' | '
text I18n.t(
"projects.reports.elements.step.#{step_type_str}.user_time",
user: user.full_name,
timestamp: I18n.l(timestamp, format: :full)
), color: color[:gray]
end
step.step_orderable_elements.order(:position).each do |element|
case element.orderable_type
when 'StepTable'
handle_step_table(element.orderable.table)
when 'Checklist'
handle_checklist(element.orderable)
when 'StepText'
handle_step_text(element)
end
end
if @settings.dig('task', 'protocol', 'step_files')
step.assets.each do |asset|
draw_step_asset(asset)
end
end
draw_step_comments(step) if @settings.dig('task', 'protocol', 'step_comments')
@docx.p
@docx.p
end
def handle_step_table(table)
has_step_well_plates = @settings.dig('task', 'protocol', 'step_well_plates')
has_step_tables = @settings.dig('task', 'protocol', 'step_tables')
if table.metadata.present?
if has_step_well_plates && table.metadata['plateTemplate']
draw_step_table(table, 'step_well_plates_table')
elsif has_step_tables && !table.metadata['plateTemplate']
draw_step_table(table, 'step_table')
end
elsif has_step_tables
draw_step_table(table, 'step_table')
end
end
def handle_checklist(checklist)
draw_step_checklist(checklist) if @settings.dig('task', 'protocol', 'step_checklists')
end
def handle_step_text(element)
draw_step_text(element) if @settings.dig('task', 'protocol', 'step_texts')
end
end