Class: BulkSubmissionExcel::Worksheet::DataWorksheet

Inherits:
SequencescapeExcel::Worksheet::Base show all
Includes:
SequencescapeExcel::Helpers::Worksheet
Defined in:
app/bulk_submission_excel/bulk_submission_excel/worksheet/data_worksheet.rb

Overview

DataWorksheet creates a data worksheet to be filled in by a client.

Constant Summary

Constants included from SequencescapeExcel::Helpers::Worksheet

SequencescapeExcel::Helpers::Worksheet::STYLES

Instance Attribute Summary collapse

Attributes inherited from SequencescapeExcel::Worksheet::Base

#axlsx_worksheet, #columns, #name, #password, #ranges, #workbook

Instance Method Summary collapse

Methods included from SequencescapeExcel::Helpers::Worksheet

#add_headers, #create_styles, #find_or_create_style, #styles

Methods inherited from SequencescapeExcel::Worksheet::Base

#add_row, #add_rows, #create_worksheet, #insert_axlsx_worksheet, #protect

Constructor Details

#initialize(attributes = {}) ⇒ DataWorksheet

Returns a new instance of DataWorksheet.

[View source]

14
15
16
17
18
19
20
# File 'app/bulk_submission_excel/bulk_submission_excel/worksheet/data_worksheet.rb', line 14

def initialize(attributes = {})
  super
  create_styles
  add_title_and_description
  add_columns
  freeze_panes
end

Instance Attribute Details

#assetsObject

Returns the value of attribute assets.


8
9
10
# File 'app/bulk_submission_excel/bulk_submission_excel/worksheet/data_worksheet.rb', line 8

def assets
  @assets
end

#defaultsObject

Returns the value of attribute defaults.


8
9
10
# File 'app/bulk_submission_excel/bulk_submission_excel/worksheet/data_worksheet.rb', line 8

def defaults
  @defaults
end

Instance Method Details

#add_columnsObject

Adds columns with all required data to a worksheet

[View source]

46
47
48
49
50
51
52
53
# File 'app/bulk_submission_excel/bulk_submission_excel/worksheet/data_worksheet.rb', line 46

def add_columns
  columns.update(first_row, last_row, ranges, axlsx_worksheet)
  add_headers
  assets.each do |asset|
    detail = build_details(asset)
    create_row(detail)
  end
end

#add_title_and_descriptionObject

Adds title and description (study abbreviation, supplier name, number of assets sent) to a worksheet.

[View source]

37
38
39
# File 'app/bulk_submission_excel/bulk_submission_excel/worksheet/data_worksheet.rb', line 37

def add_title_and_description
  add_row ['Bulk Submissions Form']
end

#build_details(asset) ⇒ Object

Extract the details for the given asset

[View source]

56
57
58
59
60
61
62
63
# File 'app/bulk_submission_excel/bulk_submission_excel/worksheet/data_worksheet.rb', line 56

def build_details(asset)
  {
    project_name: asset.projects.one? ? asset.projects.first.name : '',
    study_name: asset.studies.one? ? asset.studies.first.name : '',
    barcode: asset.labware_human_barcode,
    plate_well: asset.respond_to?(:map_description) ? asset.map_description : nil
  }.reverse_merge(present_defaults)
end

#create_row(detail) ⇒ Object

Creates row filled in with required column values, also unlocks (adds unlock style) the cells that should be filled in by clients

[View source]

68
69
70
71
72
73
74
75
76
77
78
# File 'app/bulk_submission_excel/bulk_submission_excel/worksheet/data_worksheet.rb', line 68

def create_row(detail)
  axlsx_worksheet.add_row do |row|
    columns.each do |column|
      if column.unlocked?
        row.add_cell column.attribute_value(detail), type: column.type, style: styles[:unlocked].reference
      else
        row.add_cell column.attribute_value(detail), type: column.type
      end
    end
  end
end

#first_rowObject

[View source]

22
23
24
# File 'app/bulk_submission_excel/bulk_submission_excel/worksheet/data_worksheet.rb', line 22

def first_row
  3
end

#freeze_after_column(name) ⇒ Object

Finds the column after which the panes should be frozen. If the column was not found freezes the panes after column 0 (basically not frozen vertically)

[View source]

95
96
97
# File 'app/bulk_submission_excel/bulk_submission_excel/worksheet/data_worksheet.rb', line 95

def freeze_after_column(name)
  columns.find_by(:name, name) ? columns.find_by(:name, name).number : 0
end

#freeze_panes(name = :sanger_sample_id) ⇒ Object

Freezes panes vertically after particular column (sanger_sample_id by default) and horizontally after headings

[View source]

83
84
85
86
87
88
89
90
# File 'app/bulk_submission_excel/bulk_submission_excel/worksheet/data_worksheet.rb', line 83

def freeze_panes(name = :sanger_sample_id)
  axlsx_worksheet.sheet_view.pane do |pane|
    pane.state = :frozen
    pane.y_split = first_row - 1
    pane.x_split = freeze_after_column(name)
    pane.active_pane = :bottom_right
  end
end

#last_rowObject

The row where the table with data end

[View source]

100
101
102
# File 'app/bulk_submission_excel/bulk_submission_excel/worksheet/data_worksheet.rb', line 100

def last_row
  @last_row ||= assets.count + first_row - 1
end

#present_defaultsHash

Returns a hash of defaults where a value has been provided

Returns:

  • (Hash)

    Defaults where keys are present?

[View source]

30
31
32
# File 'app/bulk_submission_excel/bulk_submission_excel/worksheet/data_worksheet.rb', line 30

def present_defaults
  defaults.select { |_k, v| v.present? }
end