diff --git a/app/assets/javascripts/repositories/repository_datatable.js b/app/assets/javascripts/repositories/repository_datatable.js
index 3fc7a3ed9..c9f5324f3 100644
--- a/app/assets/javascripts/repositories/repository_datatable.js
+++ b/app/assets/javascripts/repositories/repository_datatable.js
@@ -322,6 +322,9 @@ function onClickAddRecord() {
saveAction = 'create';
var tr = document.createElement('tr');
+ if (table.column(1).visible() === false) {
+ table.column(1).visible(true);
+ }
$('table#repository-table thead tr').children('th').each(function() {
var th = $(this);
var td;
@@ -562,34 +565,22 @@ function onClickSave() {
changeToViewMode();
updateButtons();
} else if (e.status === 400) {
- if (data.init_fields) {
- var init_fields = data.init_fields;
+ if (data.default_fields) {
+ var defaultFields = data.default_fields;
// Validate record name
- if (init_fields.name) {
+ if (defaultFields.name) {
var input = $(selectedRecord).find('input[name = name]');
if (input) {
input.closest('.form-group').addClass('has-error');
input.parent().append("" +
- init_fields.name + '
');
+ defaultFields.name + '
');
}
}
}
- // Validate new cells
- $.each(data.new_repository_cells || [], function(key, val) {
- $.each(val, function(key, val) {
- var input = $(selectedRecord).find('input[name=' + key + ']');
- if (input) {
- input.closest('.form-group').addClass('has-error');
- input.parent().append("" +
- val.value[0] + '
');
- }
- });
- });
-
- // Validate existing cells
+ // Validate custom cells
$.each(data.repository_cells || [], function(key, val) {
$.each(val, function(key, val) {
var input = $(selectedRecord).find('input[name=' + key + ']');
diff --git a/app/controllers/my_modules_controller.rb b/app/controllers/my_modules_controller.rb
index 3681da5d6..3441acbb3 100644
--- a/app/controllers/my_modules_controller.rb
+++ b/app/controllers/my_modules_controller.rb
@@ -397,7 +397,7 @@ class MyModulesController < ApplicationController
record.last_modified_by = current_user
record.save
records_names << record.name
- MyModulesRepositoryRow.create!(
+ MyModuleRepositoryRow.create!(
my_module: @my_module,
repository_row: record,
assigned_by: current_user
diff --git a/app/controllers/repository_columns_controller.rb b/app/controllers/repository_columns_controller.rb
index 758562091..cce71ca02 100644
--- a/app/controllers/repository_columns_controller.rb
+++ b/app/controllers/repository_columns_controller.rb
@@ -81,7 +81,7 @@ class RepositoryColumnsController < ApplicationController
respond_to do |format|
format.json do
if @repository_column.destroy
- RepositoryTable.update_state(
+ RepositoryTableState.update_state(
@del_repository_column,
params[:repository_column][:column_index],
current_user
diff --git a/app/controllers/repository_rows_controller.rb b/app/controllers/repository_rows_controller.rb
index 23671dea2..f2c77c412 100644
--- a/app/controllers/repository_rows_controller.rb
+++ b/app/controllers/repository_rows_controller.rb
@@ -11,14 +11,14 @@ class RepositoryRowsController < ApplicationController
before_action :check_destroy_permissions, only: :delete_records
def create
- record = RepositoryRow.new(name: record_params[:name],
- repository: @repository,
+ record = RepositoryRow.new(repository: @repository,
created_by: current_user,
last_modified_by: current_user)
errors = { default_fields: [],
- custom_cells: [] }
+ repository_cells: [] }
record.transaction do
+ record.name = record_params[:name] unless record_params[:name].blank?
unless record.save
errors[:default_fields] = record.errors.messages
raise ActiveRecord::RecordInvalid
@@ -38,7 +38,7 @@ class RepositoryRowsController < ApplicationController
}
)
unless cell_value.save
- errors[:custom_cells] << {
+ errors[:repository_cells] << {
"#{cell.repository_column.id}": cell_value.errors.messages
}
raise ActiveRecord::RecordInvalid
@@ -56,7 +56,7 @@ class RepositoryRowsController < ApplicationController
status: :ok
end
end
- rescue ActiveRecord::RecordInvalid
+ rescue
respond_to do |format|
format.json { render json: errors, status: :bad_request }
end
@@ -87,13 +87,13 @@ class RepositoryRowsController < ApplicationController
def update
errors = {
default_fields: [],
- custom_cells: []
+ repository_cells: []
}
@record.transaction do
- @record.name = record_params[:name]
+ @record.name = record_params[:name].blank? ? nil : record_params[:name]
unless @record.save
- errors[:default_fields] = sample.errors.messages
+ errors[:default_fields] = @record.errors.messages
raise ActiveRecord::RecordInvalid
end
if params[:repository_cells]
@@ -105,7 +105,7 @@ class RepositoryRowsController < ApplicationController
# Cell exists and new value present, so update value
existing.value.data = value
unless existing.value.save
- errors[:custom_cells] << {
+ errors[:repository_cells] << {
"#{cell.repository_column_id}": existing.value.errors.messages
}
raise ActiveRecord::RecordInvalid
@@ -127,7 +127,7 @@ class RepositoryRowsController < ApplicationController
}
)
unless value.save
- errors[:custom_cells] << {
+ errors[:repository_cells] << {
"#{cell.repository_column_id}": value.errors.messages
}
raise ActiveRecord::RecordInvalid
@@ -159,7 +159,7 @@ class RepositoryRowsController < ApplicationController
status: :ok
end
end
- rescue ActiveRecord::RecordInvalid
+ rescue
respond_to do |format|
format.json { render json: errors, status: :bad_request }
end
diff --git a/app/controllers/user_repositories_controller.rb b/app/controllers/user_repositories_controller.rb
index 0d8c414fa..a1c64abe9 100644
--- a/app/controllers/user_repositories_controller.rb
+++ b/app/controllers/user_repositories_controller.rb
@@ -2,14 +2,14 @@ class UserRepositoriesController < ApplicationController
before_action :load_vars
def save_table_state
- repository_table = RepositoryTable.where(user: current_user,
+ table_state = RepositoryTableState.where(user: current_user,
repository: @repository).first
- if repository_table
- repository_table.update(state: params[:state])
+ if table_state
+ table_state.update(state: params[:state])
else
- RepositoryTable.create(user: current_user,
- repository: @repository,
- state: params[:state])
+ RepositoryTableState.create(user: current_user,
+ repository: @repository,
+ state: params[:state])
end
respond_to do |format|
format.json do
@@ -21,13 +21,8 @@ class UserRepositoriesController < ApplicationController
end
def load_table_state
- table_state = RepositoryTable.load_state(current_user,
- @repository).first
- if table_state.nil?
- RepositoryTable.create_state(current_user, @repository)
- table_state = RepositoryTable.load_state(current_user,
- @repository).first
- end
+ table_state = RepositoryTableState.load_state(current_user,
+ @repository).first
respond_to do |format|
if table_state
format.json do
diff --git a/app/datatables/repository_datatable.rb b/app/datatables/repository_datatable.rb
index 500e9c80b..ee52d9a31 100644
--- a/app/datatables/repository_datatable.rb
+++ b/app/datatables/repository_datatable.rb
@@ -146,16 +146,8 @@ class RepositoryDatatable < AjaxDatatablesRails::Base
:created_by
)
.where(repository: @repository)
- if @my_module
- @assigned_rows = @my_module.repository_rows
- # repository_rows.joins(
- # "LEFT OUTER JOIN my_modules_repository_rows ON
- # (repository_row.id = my_modules_repository_rows.repository_row_id AND
- # (my_modules_repository_rows.my_module_id = #{@my_module.id} OR
- # my_modules_repository_rows.id IS NULL))"
- # )
- end
+ @assigned_rows = @my_module.repository_rows if @my_module
# Make mappings of custom columns, so we have same id for every column
i = 5
@@ -193,11 +185,11 @@ class RepositoryDatatable < AjaxDatatablesRails::Base
# nulls last on repository_cells association
direction = sort_null_direction(params[:order].values[0])
records.joins(
- "LEFT OUTER JOIN my_modules_repository_rows ON
- (repository_rows.id = my_modules_repository_rows.repository_row_id
- AND (my_modules_repository_rows.my_module_id = #{@my_module.id} OR
- my_modules_repository_rows.id IS NULL))"
- ).order("my_modules_repository_rows.id NULLS #{direction}")
+ "LEFT OUTER JOIN my_module_repository_rows ON
+ (repository_rows.id = my_module_repository_rows.repository_row_id
+ AND (my_module_repository_rows.my_module_id = #{@my_module.id} OR
+ my_module_repository_rows.id IS NULL))"
+ ).order("my_module_repository_rows.id NULLS #{direction}")
end
elsif sorting_by_custom_column
# Check if have to filter records first
@@ -330,14 +322,12 @@ class RepositoryDatatable < AjaxDatatablesRails::Base
.split('.')
return model if model == ASSIGNED_SORT_COL
- col = [model.constantize.table_name, column].join('.')
+ [model.constantize.table_name, column].join('.')
end
def generate_sortable_displayed_columns
- sort_order = RepositoryTable.where(user: @user, repository: @repository)
- .pluck(:state)
- .first['ColReorder']
-
+ sort_order = RepositoryTableState.load_state(@user, @repository)
+ .first['ColReorder']
sort_order.shift
sort_order.map! { |i| (i.to_i - 1).to_s }
diff --git a/app/models/my_module.rb b/app/models/my_module.rb
index 92f5b5453..3cd88364f 100644
--- a/app/models/my_module.rb
+++ b/app/models/my_module.rb
@@ -30,9 +30,9 @@ class MyModule < ActiveRecord::Base
has_many :my_module_antecessors, through: :inputs, source: :from, class_name: 'MyModule'
has_many :sample_my_modules, inverse_of: :my_module, :dependent => :destroy
has_many :samples, through: :sample_my_modules
- has_many :my_modules_repository_rows,
+ has_many :my_module_repository_rows,
inverse_of: :my_module, dependent: :destroy
- has_many :repository_rows, through: :my_modules_repository_rows
+ has_many :repository_rows, through: :my_module_repository_rows
has_many :user_my_modules, inverse_of: :my_module, :dependent => :destroy
has_many :users, through: :user_my_modules
has_many :activities, inverse_of: :my_module
diff --git a/app/models/my_modules_repository_row.rb b/app/models/my_module_repository_row.rb
similarity index 83%
rename from app/models/my_modules_repository_row.rb
rename to app/models/my_module_repository_row.rb
index 0f09817cd..48b536ffb 100644
--- a/app/models/my_modules_repository_row.rb
+++ b/app/models/my_module_repository_row.rb
@@ -1,4 +1,4 @@
-class MyModulesRepositoryRow < ActiveRecord::Base
+class MyModuleRepositoryRow < ActiveRecord::Base
belongs_to :assigned_by, foreign_key: 'assigned_by_id', class_name: 'User'
belongs_to :repository_row
belongs_to :my_module
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 694e899c4..43977d3cf 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -3,7 +3,8 @@ class Repository < ActiveRecord::Base
belongs_to :created_by, foreign_key: :created_by_id, class_name: 'User'
has_many :repository_columns
has_many :repository_rows
- has_many :repository_tables, inverse_of: :repository, dependent: :destroy
+ has_many :repository_table_states,
+ inverse_of: :repository, dependent: :destroy
auto_strip_attributes :name, nullify: false
validates :name,
diff --git a/app/models/repository_column.rb b/app/models/repository_column.rb
index d76155542..8c3b10b3b 100644
--- a/app/models/repository_column.rb
+++ b/app/models/repository_column.rb
@@ -18,6 +18,6 @@ class RepositoryColumn < ActiveRecord::Base
after_create :update_repository_table_state
def update_repository_table_state
- RepositoryTable.update_state(self, nil, created_by)
+ RepositoryTableState.update_state(self, nil, created_by)
end
end
diff --git a/app/models/repository_row.rb b/app/models/repository_row.rb
index 303be6afe..d20404e1d 100644
--- a/app/models/repository_row.rb
+++ b/app/models/repository_row.rb
@@ -5,9 +5,9 @@ class RepositoryRow < ActiveRecord::Base
class_name: 'User'
has_many :repository_cells, dependent: :destroy
has_many :repository_columns, through: :repository_cells
- has_many :my_modules_repository_rows,
+ has_many :my_module_repository_rows,
inverse_of: :repository_row, dependent: :destroy
- has_many :my_modules, through: :my_modules_repository_rows
+ has_many :my_modules, through: :my_module_repository_rows
auto_strip_attributes :name, nullify: false
validates :name,
diff --git a/app/models/repository_table.rb b/app/models/repository_table_state.rb
similarity index 67%
rename from app/models/repository_table.rb
rename to app/models/repository_table_state.rb
index c1b4ea20e..af85487be 100644
--- a/app/models/repository_table.rb
+++ b/app/models/repository_table_state.rb
@@ -1,19 +1,24 @@
-class RepositoryTable < ActiveRecord::Base
- belongs_to :user, inverse_of: :repository_tables
- belongs_to :repository, inverse_of: :repository_tables
+class RepositoryTableState < ActiveRecord::Base
+ belongs_to :user, inverse_of: :repository_table_states
+ belongs_to :repository, inverse_of: :repository_table_states
validates :user, :repository, presence: true
- scope :load_state, (lambda { |user, repository|
- where(user: user, repository: repository).pluck(:state)
- })
+ def self.load_state(user, repository)
+ table_state = where(user: user, repository: repository).pluck(:state)
+ if table_state.blank?
+ RepositoryTableState.create_state(user, repository)
+ table_state = where(user: user, repository: repository).pluck(:state)
+ end
+ table_state
+ end
def self.update_state(custom_column, column_index, user)
- repository_table = RepositoryTable.where(
+ table_state = RepositoryTableState.where(
user: user,
repository: custom_column.repository
)
- repository_state = repository_table.first['state']
+ repository_state = table_state.first['state']
if column_index
# delete column
repository_state['columns'].delete(column_index)
@@ -40,7 +45,7 @@ class RepositoryTable < ActiveRecord::Base
REPOSITORY_TABLE_DEFAULT_STATE['columns'].first
repository_state['ColReorder'].insert(2, index)
end
- repository_table.first.update(state: repository_state)
+ table_state.first.update(state: repository_state)
end
def self.create_state(user, repository)
@@ -53,8 +58,8 @@ class RepositoryTable < ActiveRecord::Base
REPOSITORY_TABLE_DEFAULT_STATE['columns'].first
repository_state['ColReorder'] << (default_columns_num + index)
end
- RepositoryTable.create(user: user,
- repository: repository,
- state: repository_state)
+ RepositoryTableState.create(user: user,
+ repository: repository,
+ state: repository_state)
end
end
diff --git a/app/models/user.rb b/app/models/user.rb
index ceb351d99..073a50593 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -49,7 +49,7 @@ class User < ActiveRecord::Base
has_many :samples, inverse_of: :user
has_many :samples_tables, inverse_of: :user, dependent: :destroy
has_many :repositories, inverse_of: :user
- has_many :repository_tables, inverse_of: :user, dependent: :destroy
+ has_many :repository_table_states, inverse_of: :user, dependent: :destroy
has_many :steps, inverse_of: :user
has_many :custom_fields, inverse_of: :user
has_many :reports, inverse_of: :user
@@ -177,8 +177,8 @@ class User < ActiveRecord::Base
class_name: 'Protocol',
foreign_key: 'restored_by_id',
inverse_of: :restored_by
- has_many :assigned_repository_rows_my_modules,
- class_name: 'RepositoryRowsMyModules',
+ has_many :assigned_repository_row_my_modules,
+ class_name: 'RepositoryRowMyModules',
foreign_key: 'assigned_by_id'
has_many :user_notifications, inverse_of: :user
diff --git a/db/migrate/20170515141252_add_custom_repositories.rb b/db/migrate/20170515141252_add_custom_repositories.rb
index 3a18cb514..610890b3a 100644
--- a/db/migrate/20170515141252_add_custom_repositories.rb
+++ b/db/migrate/20170515141252_add_custom_repositories.rb
@@ -61,7 +61,7 @@ class AddCustomRepositories < ActiveRecord::Migration
:users,
column: :last_modified_by_id
- create_table :my_modules_repository_rows do |t|
+ create_table :my_module_repository_rows do |t|
t.integer :repository_row_id, index: true, null: false
t.integer :my_module_id, null: :false
t.integer :assigned_by_id, null: false
@@ -70,9 +70,9 @@ class AddCustomRepositories < ActiveRecord::Migration
name: 'index_my_module_ids_repository_row_ids'
end
- add_foreign_key :my_modules_repository_rows, :users, column: :assigned_by_id
+ add_foreign_key :my_module_repository_rows, :users, column: :assigned_by_id
- create_table :repository_tables do |t|
+ create_table :repository_table_states do |t|
t.jsonb :state, null: false
t.references :user, index: true, null: false
t.references :repository, index: true, null: false