mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-15 21:56:12 +08:00
71 lines
2.2 KiB
Ruby
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
|