diff --git a/.rubocop.yml b/.rubocop.yml
index ac9797608..1edaa3623 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -14,12 +14,12 @@ AllCops:
Layout/AccessModifierIndentation:
EnforcedStyle: indent
-Layout/AlignHash:
+Layout/HashAlignment:
EnforcedHashRocketStyle: key
EnforcedColonStyle: key
EnforcedLastArgumentHashStyle: ignore_implicit
-Layout/AlignParameters:
+Layout/ParameterAlignment:
EnforcedStyle: with_first_parameter
Style/AndOr:
@@ -83,7 +83,7 @@ Naming/FileName:
Enabled: false
Exclude: []
-Layout/IndentFirstParameter:
+Layout/FirstParameterIndentation:
EnforcedStyle: consistent
Style/For:
@@ -111,10 +111,10 @@ Layout/IndentationConsistency:
Layout/IndentationWidth:
Width: 2
-Layout/IndentFirstArrayElement:
+Layout/FirstArrayElementIndentation:
EnforcedStyle: special_inside_parentheses
-Layout/IndentFirstHashElement:
+Layout/FirstHashElementIndentation:
EnforcedStyle: special_inside_parentheses
Style/Next:
@@ -197,9 +197,9 @@ Naming/PredicateName:
- is_
- has_
- have_
- NamePrefixBlacklist:
+ ForbiddenPrefixes:
- is_
- NameWhitelist:
+ AllowedMethods:
- is_a?
Exclude:
- spec/**/*
@@ -282,7 +282,7 @@ Style/TernaryParentheses:
EnforcedStyle: require_no_parentheses
AllowSafeAssignment: true
-Layout/TrailingBlankLines:
+Layout/TrailingEmptyLines:
EnforcedStyle: final_newline
Style/TrailingCommaInArguments:
@@ -411,7 +411,7 @@ Lint/UnusedMethodArgument:
Lint/EachWithObjectArgument:
Enabled: true
-Lint/HandleExceptions:
+Lint/SuppressedException:
Enabled: false
Lint/LiteralAsCondition:
diff --git a/app/assets/javascripts/repositories/renderers/edit_renderers.js b/app/assets/javascripts/repositories/renderers/edit_renderers.js
index f7c41cf9d..88a69fbb3 100644
--- a/app/assets/javascripts/repositories/renderers/edit_renderers.js
+++ b/app/assets/javascripts/repositories/renderers/edit_renderers.js
@@ -117,3 +117,20 @@ $.fn.dataTable.render.editRepositoryChecklistValue = function(formId, columnId,
var currentValue = $cell.find('.checklist-options').data('checklist-items');
ChecklistColumnHelper.initialChecklistEditMode(formId, columnId, $cell, currentValue);
};
+
+$.fn.dataTable.render.editRepositoryNumberValue = function(formId, columnId, cell, $header) {
+ let $cell = $(cell.node());
+ let decimals = Number($header.data('metadata-decimals'));
+ let number = parseFloat(Number($cell.text()).toFixed(decimals));
+
+ $cell.html(`
+
+
+
`);
+};
diff --git a/app/assets/javascripts/repositories/renderers/new_renderers.js b/app/assets/javascripts/repositories/renderers/new_renderers.js
index daff044cb..9439b0aad 100644
--- a/app/assets/javascripts/repositories/renderers/new_renderers.js
+++ b/app/assets/javascripts/repositories/renderers/new_renderers.js
@@ -68,3 +68,20 @@ $.fn.dataTable.render.newRepositoryStatusValue = function(formId, columnId, $cel
$.fn.dataTable.render.newRepositoryChecklistValue = function(formId, columnId, $cell) {
ChecklistColumnHelper.initialChecklistEditMode(formId, columnId, $cell);
};
+
+$.fn.dataTable.render.newRepositoryNumberValue = function(formId, columnId, $cell, $header) {
+ let decimals = Number($header.data('metadata-decimals'));
+
+ $cell.html(`
+
+
+
`);
+
+ SmartAnnotation.init($cell.find('input'));
+};
diff --git a/app/assets/javascripts/repositories/renderers/view_renderers.js b/app/assets/javascripts/repositories/renderers/view_renderers.js
index d9d5f5b42..acb1bf6b6 100644
--- a/app/assets/javascripts/repositories/renderers/view_renderers.js
+++ b/app/assets/javascripts/repositories/renderers/view_renderers.js
@@ -5,12 +5,12 @@ $.fn.dataTable.render.RepositoryAssetValue = function(data) {
return `
${asset.icon_html}
-
${asset.file_name}
@@ -113,7 +113,7 @@ $.fn.dataTable.render.RepositoryChecklistValue = function(data) {
});
render = `
-
+
${options.length} ${I18n.t('libraries.manange_modal_column.checklist_type.multiple_options')}
@@ -126,3 +126,11 @@ $.fn.dataTable.render.RepositoryChecklistValue = function(data) {
$.fn.dataTable.render.defaultRepositoryChecklistValue = function() {
return '—';
};
+
+$.fn.dataTable.render.defaultRepositoryNumberValue = function() {
+ return '';
+};
+
+$.fn.dataTable.render.RepositoryNumberValue = function(data) {
+ return parseFloat(Number(data.value).toFixed(data.value_decimals));
+};
diff --git a/app/assets/javascripts/repositories/row_editor.js b/app/assets/javascripts/repositories/row_editor.js
index b859cfba3..b57c66cb5 100644
--- a/app/assets/javascripts/repositories/row_editor.js
+++ b/app/assets/javascripts/repositories/row_editor.js
@@ -81,9 +81,9 @@ var RepositoryDatatableRowEditor = (function() {
if (!$input.data('is-empty')) { // set hidden field for deletion only if original value has been set on rendering
$input
.prev('.file-hidden-field-container')
- .html(``);
}
});
@@ -146,7 +146,7 @@ var RepositoryDatatableRowEditor = (function() {
} else {
let dataType = $header.data('type');
if (dataType) {
- $.fn.dataTable.render['new' + dataType](formId, columnId, $cell);
+ $.fn.dataTable.render['new' + dataType](formId, columnId, $cell, $header);
}
}
});
@@ -186,7 +186,7 @@ var RepositoryDatatableRowEditor = (function() {
if (columnId === NAME_COLUMN_ID) {
$.fn.dataTable.render.editRowName(formId, cell);
} else if (dataType) {
- $.fn.dataTable.render['edit' + dataType](formId, columnId, cell);
+ $.fn.dataTable.render['edit' + dataType](formId, columnId, cell, $header);
}
return true;
@@ -205,4 +205,3 @@ var RepositoryDatatableRowEditor = (function() {
addNewRow: addNewRow
});
}());
-
diff --git a/app/assets/javascripts/repositories/validators/base_validator.js b/app/assets/javascripts/repositories/validators/base_validator.js
index 145a67c87..26a0942a6 100644
--- a/app/assets/javascripts/repositories/validators/base_validator.js
+++ b/app/assets/javascripts/repositories/validators/base_validator.js
@@ -33,3 +33,7 @@ $.fn.dataTable.render.RepositoryAssetValueValidator = function($input) {
$.fn.dataTable.render.RepositoryChecklistValueValidator = function() {
return true;
};
+
+$.fn.dataTable.render.RepositoryNumberValueValidator = function() {
+ return true;
+};
diff --git a/app/helpers/repository_datatable_helper.rb b/app/helpers/repository_datatable_helper.rb
index 08500cbd3..a96e8d103 100644
--- a/app/helpers/repository_datatable_helper.rb
+++ b/app/helpers/repository_datatable_helper.rb
@@ -68,6 +68,6 @@ module RepositoryDatatableHelper
def display_cell_value(cell)
"RepositoryDatatable::#{cell.repository_column.data_type}Serializer"
- .constantize.new(cell).serializable_hash
+ .constantize.new(cell.value).serializable_hash
end
end
diff --git a/app/models/repository_number_value.rb b/app/models/repository_number_value.rb
index 824f6230a..e037cc3ce 100644
--- a/app/models/repository_number_value.rb
+++ b/app/models/repository_number_value.rb
@@ -16,4 +16,20 @@ class RepositoryNumberValue < ApplicationRecord
def formatted
data
end
+
+ def data_changed?(new_data)
+ new_data.to_f != data
+ end
+
+ def update_data!(new_data, user)
+ self.data = new_data.to_f
+ self.last_modified_by = user
+ save!
+ end
+
+ def self.new_with_payload(payload, attributes)
+ value = new(attributes)
+ value.data = payload.to_f
+ value
+ end
end
diff --git a/app/serializers/repository_datatable/repository_asset_value_serializer.rb b/app/serializers/repository_datatable/repository_asset_value_serializer.rb
index 1349bb04b..675b7b0ca 100644
--- a/app/serializers/repository_datatable/repository_asset_value_serializer.rb
+++ b/app/serializers/repository_datatable/repository_asset_value_serializer.rb
@@ -1,13 +1,11 @@
# frozen_string_literal: true
module RepositoryDatatable
- class RepositoryAssetValueSerializer < ActiveModel::Serializer
+ class RepositoryAssetValueSerializer < RepositoryBaseValueSerializer
include Rails.application.routes.url_helpers
- attributes :value, :value_type
-
def value
- asset = object.repository_asset_value.asset
+ asset = object.asset
{
id: asset.id,
url: rails_blob_path(asset.file, disposition: 'attachment'),
diff --git a/app/serializers/repository_datatable/repository_base_value_serializer.rb b/app/serializers/repository_datatable/repository_base_value_serializer.rb
new file mode 100644
index 000000000..60756431b
--- /dev/null
+++ b/app/serializers/repository_datatable/repository_base_value_serializer.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+module RepositoryDatatable
+ class RepositoryBaseValueSerializer < ActiveModel::Serializer
+ attributes :value, :value_type
+
+ def value
+ raise NotImplementedError
+ end
+
+ def value_type
+ object.class.name
+ end
+ end
+end
diff --git a/app/serializers/repository_datatable/repository_checklist_value_serializer.rb b/app/serializers/repository_datatable/repository_checklist_value_serializer.rb
index 34da62770..4e784376d 100644
--- a/app/serializers/repository_datatable/repository_checklist_value_serializer.rb
+++ b/app/serializers/repository_datatable/repository_checklist_value_serializer.rb
@@ -1,11 +1,9 @@
# frozen_string_literal: true
module RepositoryDatatable
- class RepositoryChecklistValueSerializer < ActiveModel::Serializer
- attributes :value, :value_type
-
+ class RepositoryChecklistValueSerializer < RepositoryBaseValueSerializer
def value
- object.repository_checklist_value.data
+ object.data
end
end
end
diff --git a/app/serializers/repository_datatable/repository_date_range_value_serializer.rb b/app/serializers/repository_datatable/repository_date_range_value_serializer.rb
index cfdd3019a..6c6817155 100644
--- a/app/serializers/repository_datatable/repository_date_range_value_serializer.rb
+++ b/app/serializers/repository_datatable/repository_date_range_value_serializer.rb
@@ -1,12 +1,9 @@
# frozen_string_literal: true
module RepositoryDatatable
- class RepositoryDateRangeValueSerializer < ActiveModel::Serializer
- attributes :value, :value_type
-
+ class RepositoryDateRangeValueSerializer < RepositoryBaseValueSerializer
def value
- cell = object.repository_date_time_range_value
- I18n.l(cell.start_time, format: :full_date) + ' - ' + I18n.l(cell.end_time, format: :full_date)
+ I18n.l(object.start_time, format: :full_date) + ' - ' + I18n.l(object.end_time, format: :full_date)
end
end
end
diff --git a/app/serializers/repository_datatable/repository_date_time_range_value_serializer.rb b/app/serializers/repository_datatable/repository_date_time_range_value_serializer.rb
index b672fe9cb..d439c8270 100644
--- a/app/serializers/repository_datatable/repository_date_time_range_value_serializer.rb
+++ b/app/serializers/repository_datatable/repository_date_time_range_value_serializer.rb
@@ -1,12 +1,9 @@
# frozen_string_literal: true
module RepositoryDatatable
- class RepositoryDateTimeRangeValueSerializer < ActiveModel::Serializer
- attributes :value, :value_type
-
+ class RepositoryDateTimeRangeValueSerializer < RepositoryBaseValueSerializer
def value
- cell = object.repository_date_time_range_value
- I18n.l(cell.start_time, format: :full_with_comma) + ' - ' + I18n.l(cell.end_time, format: :full_with_comma)
+ I18n.l(object.start_time, format: :full_with_comma) + ' - ' + I18n.l(object.end_time, format: :full_with_comma)
end
end
end
diff --git a/app/serializers/repository_datatable/repository_date_time_value_serializer.rb b/app/serializers/repository_datatable/repository_date_time_value_serializer.rb
index 3f7d1b50c..a58f84cf3 100644
--- a/app/serializers/repository_datatable/repository_date_time_value_serializer.rb
+++ b/app/serializers/repository_datatable/repository_date_time_value_serializer.rb
@@ -1,12 +1,9 @@
# frozen_string_literal: true
module RepositoryDatatable
- class RepositoryDateTimeValueSerializer < ActiveModel::Serializer
- attributes :value, :value_type
-
+ class RepositoryDateTimeValueSerializer < RepositoryBaseValueSerializer
def value
- cell = object.repository_date_time_value
- I18n.l(cell.data, format: :full_with_comma)
+ I18n.l(object.data, format: :full_with_comma)
end
end
end
diff --git a/app/serializers/repository_datatable/repository_date_value_serializer.rb b/app/serializers/repository_datatable/repository_date_value_serializer.rb
index 2dc01895d..a70ca09ec 100644
--- a/app/serializers/repository_datatable/repository_date_value_serializer.rb
+++ b/app/serializers/repository_datatable/repository_date_value_serializer.rb
@@ -1,12 +1,9 @@
# frozen_string_literal: true
module RepositoryDatatable
- class RepositoryDateValueSerializer < ActiveModel::Serializer
- attributes :value, :value_type
-
+ class RepositoryDateValueSerializer < RepositoryBaseValueSerializer
def value
- cell = object.repository_date_time_value
- I18n.l(cell.data, format: :full_date)
+ I18n.l(object.data, format: :full_date)
end
end
end
diff --git a/app/serializers/repository_datatable/repository_list_value_serializer.rb b/app/serializers/repository_datatable/repository_list_value_serializer.rb
index c7d0da176..d47deb4d3 100644
--- a/app/serializers/repository_datatable/repository_list_value_serializer.rb
+++ b/app/serializers/repository_datatable/repository_list_value_serializer.rb
@@ -1,13 +1,11 @@
# frozen_string_literal: true
module RepositoryDatatable
- class RepositoryListValueSerializer < ActiveModel::Serializer
- attributes :value, :value_type
-
+ class RepositoryListValueSerializer < RepositoryBaseValueSerializer
def value
{
- id: object.repository_list_value.repository_list_item.id,
- text: object.repository_list_value.data
+ id: object.repository_list_item.id,
+ text: object.data
}
end
end
diff --git a/app/serializers/repository_datatable/repository_number_value_serializer.rb b/app/serializers/repository_datatable/repository_number_value_serializer.rb
index 2fb8a6200..5fff5a97e 100644
--- a/app/serializers/repository_datatable/repository_number_value_serializer.rb
+++ b/app/serializers/repository_datatable/repository_number_value_serializer.rb
@@ -1,11 +1,18 @@
# frozen_string_literal: true
module RepositoryDatatable
- class RepositoryNumberValueSerializer < ActiveModel::Serializer
- attributes :value, :value_type
+ class RepositoryNumberValueSerializer < RepositoryBaseValueSerializer
+ attributes :value_decimals
def value
- object.repository_number_value.data
+ object.data
+ end
+
+ def value_decimals
+ object.repository_cell
+ .repository_column
+ .metadata
+ .fetch('decimals') { Constants::REPOSITORY_NUMBER_TYPE_DEFAULT_DECIMALS }
end
end
end
diff --git a/app/serializers/repository_datatable/repository_status_value_serializer.rb b/app/serializers/repository_datatable/repository_status_value_serializer.rb
index 2df453cbf..c2c39e632 100644
--- a/app/serializers/repository_datatable/repository_status_value_serializer.rb
+++ b/app/serializers/repository_datatable/repository_status_value_serializer.rb
@@ -1,14 +1,12 @@
# frozen_string_literal: true
module RepositoryDatatable
- class RepositoryStatusValueSerializer < ActiveModel::Serializer
- attributes :value, :value_type
-
+ class RepositoryStatusValueSerializer < RepositoryBaseValueSerializer
def value
{
- id: object.repository_status_value.repository_status_item.id,
- icon: object.repository_status_value.repository_status_item.icon,
- status: object.repository_status_value.repository_status_item.status
+ id: object.repository_status_item.id,
+ icon: object.repository_status_item.icon,
+ status: object.repository_status_item.status
}
end
end
diff --git a/app/serializers/repository_datatable/repository_text_value_serializer.rb b/app/serializers/repository_datatable/repository_text_value_serializer.rb
index 0980457c5..14c3319b3 100644
--- a/app/serializers/repository_datatable/repository_text_value_serializer.rb
+++ b/app/serializers/repository_datatable/repository_text_value_serializer.rb
@@ -1,9 +1,7 @@
# frozen_string_literal: true
module RepositoryDatatable
- class RepositoryTextValueSerializer < ActiveModel::Serializer
- attributes :value, :value_type
-
+ class RepositoryTextValueSerializer < RepositoryBaseValueSerializer
def value
object.repository_text_value.data
end
diff --git a/app/serializers/repository_datatable/repository_time_range_value_serializer.rb b/app/serializers/repository_datatable/repository_time_range_value_serializer.rb
index e6cd3c058..5bbfb700d 100644
--- a/app/serializers/repository_datatable/repository_time_range_value_serializer.rb
+++ b/app/serializers/repository_datatable/repository_time_range_value_serializer.rb
@@ -1,12 +1,9 @@
# frozen_string_literal: true
module RepositoryDatatable
- class RepositoryTimeRangeValueSerializer < ActiveModel::Serializer
- attributes :value, :value_type
-
+ class RepositoryTimeRangeValueSerializer < RepositoryBaseValueSerializer
def value
- cell = object.repository_date_time_range_value
- I18n.l(cell.start_time, format: :time) + ' - ' + I18n.l(cell.end_time, format: :time)
+ I18n.l(object.start_time, format: :time) + ' - ' + I18n.l(object.end_time, format: :time)
end
end
end
diff --git a/app/serializers/repository_datatable/repository_time_value_serializer.rb b/app/serializers/repository_datatable/repository_time_value_serializer.rb
index eb74e6d89..28edaf57e 100644
--- a/app/serializers/repository_datatable/repository_time_value_serializer.rb
+++ b/app/serializers/repository_datatable/repository_time_value_serializer.rb
@@ -1,12 +1,9 @@
# frozen_string_literal: true
module RepositoryDatatable
- class RepositoryTimeValueSerializer < ActiveModel::Serializer
- attributes :value, :value_type
-
+ class RepositoryTimeValueSerializer < RepositoryBaseValueSerializer
def value
- cell = object.repository_date_time_value
- I18n.l(cell.data, format: :time)
+ I18n.l(object.data, format: :time)
end
end
end
diff --git a/app/services/repository_rows/update_repository_row_service.rb b/app/services/repository_rows/update_repository_row_service.rb
index 75ce739c1..bace70cc7 100644
--- a/app/services/repository_rows/update_repository_row_service.rb
+++ b/app/services/repository_rows/update_repository_row_service.rb
@@ -25,18 +25,19 @@ module RepositoryRows
cell = @repository_row.repository_cells.find_by(repository_column_id: column.id)
- if cell && value.empty?
+ if cell.present? && value.blank?
cell.destroy!
@record_updated = true
next
+ elsif cell.blank?
+ RepositoryCell.create_with_value!(@repository_row, column, value, @user)
+ @record_updated = true
+ next
end
- if cell&.value&.data_changed?(value)
+ if cell.value.data_changed?(value)
cell.value.update_data!(value, @user)
@record_updated = true
- elsif !value.empty?
- RepositoryCell.create_with_value!(@repository_row, column, value, @user)
- @record_updated = true
end
end
diff --git a/app/views/repositories/_repository_table.html.erb b/app/views/repositories/_repository_table.html.erb
index e0ed5b9bd..3d4f83842 100644
--- a/app/views/repositories/_repository_table.html.erb
+++ b/app/views/repositories/_repository_table.html.erb
@@ -31,10 +31,13 @@
<%= t("repositories.table.added_on") %> |
<%= t("repositories.table.added_by") %> |
<% repository.repository_columns.order(:id).each do |column| %>
-
+ <%= "data-metadata-#{k}=#{v}" %>
+ <% end %>
<%= "data-items-url=#{items_repository_repository_columns_checklist_column_path(repository, column)}" if column.data_type == 'RepositoryChecklistValue' %>
<%= "data-items-url=#{items_repository_repository_columns_list_column_path(repository, column)}" if column.data_type == 'RepositoryListValue' %>
>
diff --git a/config/initializers/constants.rb b/config/initializers/constants.rb
index 45dc23bcb..3cb939143 100644
--- a/config/initializers/constants.rb
+++ b/config/initializers/constants.rb
@@ -977,7 +977,8 @@ class Constants
REPOSITORY_LIST_ITEMS_PER_COLUMN = 500
REPOSITORY_CHECKLIST_ITEMS_PER_COLUMN = 50
- REPOSITORY_NUMBER_TYPE_MAX_DECIMALS = 11
+ REPOSITORY_NUMBER_TYPE_DEFAULT_DECIMALS = 2
+ REPOSITORY_NUMBER_TYPE_MAX_DECIMALS = 10
REPOSITORY_LIST_ITEMS_DELIMITERS_MAP = {
return: "\n",
|