mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-07 13:44:23 +08:00
PR fixes [SCI-1274]
This commit is contained in:
parent
8b1190060e
commit
ad8dd6d740
14 changed files with 69 additions and 87 deletions
|
@ -322,6 +322,9 @@ function onClickAddRecord() {
|
||||||
|
|
||||||
saveAction = 'create';
|
saveAction = 'create';
|
||||||
var tr = document.createElement('tr');
|
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() {
|
$('table#repository-table thead tr').children('th').each(function() {
|
||||||
var th = $(this);
|
var th = $(this);
|
||||||
var td;
|
var td;
|
||||||
|
@ -562,34 +565,22 @@ function onClickSave() {
|
||||||
changeToViewMode();
|
changeToViewMode();
|
||||||
updateButtons();
|
updateButtons();
|
||||||
} else if (e.status === 400) {
|
} else if (e.status === 400) {
|
||||||
if (data.init_fields) {
|
if (data.default_fields) {
|
||||||
var init_fields = data.init_fields;
|
var defaultFields = data.default_fields;
|
||||||
|
|
||||||
// Validate record name
|
// Validate record name
|
||||||
if (init_fields.name) {
|
if (defaultFields.name) {
|
||||||
var input = $(selectedRecord).find('input[name = name]');
|
var input = $(selectedRecord).find('input[name = name]');
|
||||||
|
|
||||||
if (input) {
|
if (input) {
|
||||||
input.closest('.form-group').addClass('has-error');
|
input.closest('.form-group').addClass('has-error');
|
||||||
input.parent().append("<span class='help-block'>" +
|
input.parent().append("<span class='help-block'>" +
|
||||||
init_fields.name + '<br /></span>');
|
defaultFields.name + '<br /></span>');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate new cells
|
// Validate custom 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("<span class='help-block'>" +
|
|
||||||
val.value[0] + '<br /></span>');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Validate existing cells
|
|
||||||
$.each(data.repository_cells || [], function(key, val) {
|
$.each(data.repository_cells || [], function(key, val) {
|
||||||
$.each(val, function(key, val) {
|
$.each(val, function(key, val) {
|
||||||
var input = $(selectedRecord).find('input[name=' + key + ']');
|
var input = $(selectedRecord).find('input[name=' + key + ']');
|
||||||
|
|
|
@ -397,7 +397,7 @@ class MyModulesController < ApplicationController
|
||||||
record.last_modified_by = current_user
|
record.last_modified_by = current_user
|
||||||
record.save
|
record.save
|
||||||
records_names << record.name
|
records_names << record.name
|
||||||
MyModulesRepositoryRow.create!(
|
MyModuleRepositoryRow.create!(
|
||||||
my_module: @my_module,
|
my_module: @my_module,
|
||||||
repository_row: record,
|
repository_row: record,
|
||||||
assigned_by: current_user
|
assigned_by: current_user
|
||||||
|
|
|
@ -81,7 +81,7 @@ class RepositoryColumnsController < ApplicationController
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.json do
|
format.json do
|
||||||
if @repository_column.destroy
|
if @repository_column.destroy
|
||||||
RepositoryTable.update_state(
|
RepositoryTableState.update_state(
|
||||||
@del_repository_column,
|
@del_repository_column,
|
||||||
params[:repository_column][:column_index],
|
params[:repository_column][:column_index],
|
||||||
current_user
|
current_user
|
||||||
|
|
|
@ -11,14 +11,14 @@ class RepositoryRowsController < ApplicationController
|
||||||
before_action :check_destroy_permissions, only: :delete_records
|
before_action :check_destroy_permissions, only: :delete_records
|
||||||
|
|
||||||
def create
|
def create
|
||||||
record = RepositoryRow.new(name: record_params[:name],
|
record = RepositoryRow.new(repository: @repository,
|
||||||
repository: @repository,
|
|
||||||
created_by: current_user,
|
created_by: current_user,
|
||||||
last_modified_by: current_user)
|
last_modified_by: current_user)
|
||||||
errors = { default_fields: [],
|
errors = { default_fields: [],
|
||||||
custom_cells: [] }
|
repository_cells: [] }
|
||||||
|
|
||||||
record.transaction do
|
record.transaction do
|
||||||
|
record.name = record_params[:name] unless record_params[:name].blank?
|
||||||
unless record.save
|
unless record.save
|
||||||
errors[:default_fields] = record.errors.messages
|
errors[:default_fields] = record.errors.messages
|
||||||
raise ActiveRecord::RecordInvalid
|
raise ActiveRecord::RecordInvalid
|
||||||
|
@ -38,7 +38,7 @@ class RepositoryRowsController < ApplicationController
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
unless cell_value.save
|
unless cell_value.save
|
||||||
errors[:custom_cells] << {
|
errors[:repository_cells] << {
|
||||||
"#{cell.repository_column.id}": cell_value.errors.messages
|
"#{cell.repository_column.id}": cell_value.errors.messages
|
||||||
}
|
}
|
||||||
raise ActiveRecord::RecordInvalid
|
raise ActiveRecord::RecordInvalid
|
||||||
|
@ -56,7 +56,7 @@ class RepositoryRowsController < ApplicationController
|
||||||
status: :ok
|
status: :ok
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
rescue ActiveRecord::RecordInvalid
|
rescue
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.json { render json: errors, status: :bad_request }
|
format.json { render json: errors, status: :bad_request }
|
||||||
end
|
end
|
||||||
|
@ -87,13 +87,13 @@ class RepositoryRowsController < ApplicationController
|
||||||
def update
|
def update
|
||||||
errors = {
|
errors = {
|
||||||
default_fields: [],
|
default_fields: [],
|
||||||
custom_cells: []
|
repository_cells: []
|
||||||
}
|
}
|
||||||
|
|
||||||
@record.transaction do
|
@record.transaction do
|
||||||
@record.name = record_params[:name]
|
@record.name = record_params[:name].blank? ? nil : record_params[:name]
|
||||||
unless @record.save
|
unless @record.save
|
||||||
errors[:default_fields] = sample.errors.messages
|
errors[:default_fields] = @record.errors.messages
|
||||||
raise ActiveRecord::RecordInvalid
|
raise ActiveRecord::RecordInvalid
|
||||||
end
|
end
|
||||||
if params[:repository_cells]
|
if params[:repository_cells]
|
||||||
|
@ -105,7 +105,7 @@ class RepositoryRowsController < ApplicationController
|
||||||
# Cell exists and new value present, so update value
|
# Cell exists and new value present, so update value
|
||||||
existing.value.data = value
|
existing.value.data = value
|
||||||
unless existing.value.save
|
unless existing.value.save
|
||||||
errors[:custom_cells] << {
|
errors[:repository_cells] << {
|
||||||
"#{cell.repository_column_id}": existing.value.errors.messages
|
"#{cell.repository_column_id}": existing.value.errors.messages
|
||||||
}
|
}
|
||||||
raise ActiveRecord::RecordInvalid
|
raise ActiveRecord::RecordInvalid
|
||||||
|
@ -127,7 +127,7 @@ class RepositoryRowsController < ApplicationController
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
unless value.save
|
unless value.save
|
||||||
errors[:custom_cells] << {
|
errors[:repository_cells] << {
|
||||||
"#{cell.repository_column_id}": value.errors.messages
|
"#{cell.repository_column_id}": value.errors.messages
|
||||||
}
|
}
|
||||||
raise ActiveRecord::RecordInvalid
|
raise ActiveRecord::RecordInvalid
|
||||||
|
@ -159,7 +159,7 @@ class RepositoryRowsController < ApplicationController
|
||||||
status: :ok
|
status: :ok
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
rescue ActiveRecord::RecordInvalid
|
rescue
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.json { render json: errors, status: :bad_request }
|
format.json { render json: errors, status: :bad_request }
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,12 +2,12 @@ class UserRepositoriesController < ApplicationController
|
||||||
before_action :load_vars
|
before_action :load_vars
|
||||||
|
|
||||||
def save_table_state
|
def save_table_state
|
||||||
repository_table = RepositoryTable.where(user: current_user,
|
table_state = RepositoryTableState.where(user: current_user,
|
||||||
repository: @repository).first
|
repository: @repository).first
|
||||||
if repository_table
|
if table_state
|
||||||
repository_table.update(state: params[:state])
|
table_state.update(state: params[:state])
|
||||||
else
|
else
|
||||||
RepositoryTable.create(user: current_user,
|
RepositoryTableState.create(user: current_user,
|
||||||
repository: @repository,
|
repository: @repository,
|
||||||
state: params[:state])
|
state: params[:state])
|
||||||
end
|
end
|
||||||
|
@ -21,13 +21,8 @@ class UserRepositoriesController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def load_table_state
|
def load_table_state
|
||||||
table_state = RepositoryTable.load_state(current_user,
|
table_state = RepositoryTableState.load_state(current_user,
|
||||||
@repository).first
|
@repository).first
|
||||||
if table_state.nil?
|
|
||||||
RepositoryTable.create_state(current_user, @repository)
|
|
||||||
table_state = RepositoryTable.load_state(current_user,
|
|
||||||
@repository).first
|
|
||||||
end
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
if table_state
|
if table_state
|
||||||
format.json do
|
format.json do
|
||||||
|
|
|
@ -146,16 +146,8 @@ class RepositoryDatatable < AjaxDatatablesRails::Base
|
||||||
:created_by
|
:created_by
|
||||||
)
|
)
|
||||||
.where(repository: @repository)
|
.where(repository: @repository)
|
||||||
if @my_module
|
|
||||||
@assigned_rows = @my_module.repository_rows
|
|
||||||
|
|
||||||
# repository_rows.joins(
|
@assigned_rows = @my_module.repository_rows if @my_module
|
||||||
# "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
|
|
||||||
|
|
||||||
# Make mappings of custom columns, so we have same id for every column
|
# Make mappings of custom columns, so we have same id for every column
|
||||||
i = 5
|
i = 5
|
||||||
|
@ -193,11 +185,11 @@ class RepositoryDatatable < AjaxDatatablesRails::Base
|
||||||
# nulls last on repository_cells association
|
# nulls last on repository_cells association
|
||||||
direction = sort_null_direction(params[:order].values[0])
|
direction = sort_null_direction(params[:order].values[0])
|
||||||
records.joins(
|
records.joins(
|
||||||
"LEFT OUTER JOIN my_modules_repository_rows ON
|
"LEFT OUTER JOIN my_module_repository_rows ON
|
||||||
(repository_rows.id = my_modules_repository_rows.repository_row_id
|
(repository_rows.id = my_module_repository_rows.repository_row_id
|
||||||
AND (my_modules_repository_rows.my_module_id = #{@my_module.id} OR
|
AND (my_module_repository_rows.my_module_id = #{@my_module.id} OR
|
||||||
my_modules_repository_rows.id IS NULL))"
|
my_module_repository_rows.id IS NULL))"
|
||||||
).order("my_modules_repository_rows.id NULLS #{direction}")
|
).order("my_module_repository_rows.id NULLS #{direction}")
|
||||||
end
|
end
|
||||||
elsif sorting_by_custom_column
|
elsif sorting_by_custom_column
|
||||||
# Check if have to filter records first
|
# Check if have to filter records first
|
||||||
|
@ -330,14 +322,12 @@ class RepositoryDatatable < AjaxDatatablesRails::Base
|
||||||
.split('.')
|
.split('.')
|
||||||
|
|
||||||
return model if model == ASSIGNED_SORT_COL
|
return model if model == ASSIGNED_SORT_COL
|
||||||
col = [model.constantize.table_name, column].join('.')
|
[model.constantize.table_name, column].join('.')
|
||||||
end
|
end
|
||||||
|
|
||||||
def generate_sortable_displayed_columns
|
def generate_sortable_displayed_columns
|
||||||
sort_order = RepositoryTable.where(user: @user, repository: @repository)
|
sort_order = RepositoryTableState.load_state(@user, @repository)
|
||||||
.pluck(:state)
|
|
||||||
.first['ColReorder']
|
.first['ColReorder']
|
||||||
|
|
||||||
sort_order.shift
|
sort_order.shift
|
||||||
sort_order.map! { |i| (i.to_i - 1).to_s }
|
sort_order.map! { |i| (i.to_i - 1).to_s }
|
||||||
|
|
||||||
|
|
|
@ -30,9 +30,9 @@ class MyModule < ActiveRecord::Base
|
||||||
has_many :my_module_antecessors, through: :inputs, source: :from, class_name: 'MyModule'
|
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 :sample_my_modules, inverse_of: :my_module, :dependent => :destroy
|
||||||
has_many :samples, through: :sample_my_modules
|
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
|
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 :user_my_modules, inverse_of: :my_module, :dependent => :destroy
|
||||||
has_many :users, through: :user_my_modules
|
has_many :users, through: :user_my_modules
|
||||||
has_many :activities, inverse_of: :my_module
|
has_many :activities, inverse_of: :my_module
|
||||||
|
|
|
@ -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 :assigned_by, foreign_key: 'assigned_by_id', class_name: 'User'
|
||||||
belongs_to :repository_row
|
belongs_to :repository_row
|
||||||
belongs_to :my_module
|
belongs_to :my_module
|
|
@ -3,7 +3,8 @@ class Repository < ActiveRecord::Base
|
||||||
belongs_to :created_by, foreign_key: :created_by_id, class_name: 'User'
|
belongs_to :created_by, foreign_key: :created_by_id, class_name: 'User'
|
||||||
has_many :repository_columns
|
has_many :repository_columns
|
||||||
has_many :repository_rows
|
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
|
auto_strip_attributes :name, nullify: false
|
||||||
validates :name,
|
validates :name,
|
||||||
|
|
|
@ -18,6 +18,6 @@ class RepositoryColumn < ActiveRecord::Base
|
||||||
after_create :update_repository_table_state
|
after_create :update_repository_table_state
|
||||||
|
|
||||||
def 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
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,9 +5,9 @@ class RepositoryRow < ActiveRecord::Base
|
||||||
class_name: 'User'
|
class_name: 'User'
|
||||||
has_many :repository_cells, dependent: :destroy
|
has_many :repository_cells, dependent: :destroy
|
||||||
has_many :repository_columns, through: :repository_cells
|
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
|
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
|
auto_strip_attributes :name, nullify: false
|
||||||
validates :name,
|
validates :name,
|
||||||
|
|
|
@ -1,19 +1,24 @@
|
||||||
class RepositoryTable < ActiveRecord::Base
|
class RepositoryTableState < ActiveRecord::Base
|
||||||
belongs_to :user, inverse_of: :repository_tables
|
belongs_to :user, inverse_of: :repository_table_states
|
||||||
belongs_to :repository, inverse_of: :repository_tables
|
belongs_to :repository, inverse_of: :repository_table_states
|
||||||
|
|
||||||
validates :user, :repository, presence: true
|
validates :user, :repository, presence: true
|
||||||
|
|
||||||
scope :load_state, (lambda { |user, repository|
|
def self.load_state(user, repository)
|
||||||
where(user: user, repository: repository).pluck(:state)
|
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)
|
def self.update_state(custom_column, column_index, user)
|
||||||
repository_table = RepositoryTable.where(
|
table_state = RepositoryTableState.where(
|
||||||
user: user,
|
user: user,
|
||||||
repository: custom_column.repository
|
repository: custom_column.repository
|
||||||
)
|
)
|
||||||
repository_state = repository_table.first['state']
|
repository_state = table_state.first['state']
|
||||||
if column_index
|
if column_index
|
||||||
# delete column
|
# delete column
|
||||||
repository_state['columns'].delete(column_index)
|
repository_state['columns'].delete(column_index)
|
||||||
|
@ -40,7 +45,7 @@ class RepositoryTable < ActiveRecord::Base
|
||||||
REPOSITORY_TABLE_DEFAULT_STATE['columns'].first
|
REPOSITORY_TABLE_DEFAULT_STATE['columns'].first
|
||||||
repository_state['ColReorder'].insert(2, index)
|
repository_state['ColReorder'].insert(2, index)
|
||||||
end
|
end
|
||||||
repository_table.first.update(state: repository_state)
|
table_state.first.update(state: repository_state)
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.create_state(user, repository)
|
def self.create_state(user, repository)
|
||||||
|
@ -53,7 +58,7 @@ class RepositoryTable < ActiveRecord::Base
|
||||||
REPOSITORY_TABLE_DEFAULT_STATE['columns'].first
|
REPOSITORY_TABLE_DEFAULT_STATE['columns'].first
|
||||||
repository_state['ColReorder'] << (default_columns_num + index)
|
repository_state['ColReorder'] << (default_columns_num + index)
|
||||||
end
|
end
|
||||||
RepositoryTable.create(user: user,
|
RepositoryTableState.create(user: user,
|
||||||
repository: repository,
|
repository: repository,
|
||||||
state: repository_state)
|
state: repository_state)
|
||||||
end
|
end
|
|
@ -49,7 +49,7 @@ class User < ActiveRecord::Base
|
||||||
has_many :samples, inverse_of: :user
|
has_many :samples, inverse_of: :user
|
||||||
has_many :samples_tables, inverse_of: :user, dependent: :destroy
|
has_many :samples_tables, inverse_of: :user, dependent: :destroy
|
||||||
has_many :repositories, inverse_of: :user
|
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 :steps, inverse_of: :user
|
||||||
has_many :custom_fields, inverse_of: :user
|
has_many :custom_fields, inverse_of: :user
|
||||||
has_many :reports, inverse_of: :user
|
has_many :reports, inverse_of: :user
|
||||||
|
@ -177,8 +177,8 @@ class User < ActiveRecord::Base
|
||||||
class_name: 'Protocol',
|
class_name: 'Protocol',
|
||||||
foreign_key: 'restored_by_id',
|
foreign_key: 'restored_by_id',
|
||||||
inverse_of: :restored_by
|
inverse_of: :restored_by
|
||||||
has_many :assigned_repository_rows_my_modules,
|
has_many :assigned_repository_row_my_modules,
|
||||||
class_name: 'RepositoryRowsMyModules',
|
class_name: 'RepositoryRowMyModules',
|
||||||
foreign_key: 'assigned_by_id'
|
foreign_key: 'assigned_by_id'
|
||||||
|
|
||||||
has_many :user_notifications, inverse_of: :user
|
has_many :user_notifications, inverse_of: :user
|
||||||
|
|
|
@ -61,7 +61,7 @@ class AddCustomRepositories < ActiveRecord::Migration
|
||||||
:users,
|
:users,
|
||||||
column: :last_modified_by_id
|
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 :repository_row_id, index: true, null: false
|
||||||
t.integer :my_module_id, null: :false
|
t.integer :my_module_id, null: :false
|
||||||
t.integer :assigned_by_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'
|
name: 'index_my_module_ids_repository_row_ids'
|
||||||
end
|
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.jsonb :state, null: false
|
||||||
t.references :user, index: true, null: false
|
t.references :user, index: true, null: false
|
||||||
t.references :repository, index: true, null: false
|
t.references :repository, index: true, null: false
|
||||||
|
|
Loading…
Add table
Reference in a new issue