mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-10-01 17:34:59 +08:00
Add logic for private inventory items for forms [SCI-12082][SCI-12085]
This commit is contained in:
parent
5512f27fb4
commit
634aa37637
8 changed files with 50 additions and 3 deletions
|
@ -8,6 +8,7 @@ class ProtocolsController < ApplicationController
|
|||
include TeamsHelper
|
||||
include ProtocolsExporterV2
|
||||
include UserRolesHelper
|
||||
include FormFieldValuesHelper
|
||||
|
||||
before_action :check_create_permissions, only: %i(
|
||||
create
|
||||
|
|
18
app/helpers/form_field_values_helper.rb
Normal file
18
app/helpers/form_field_values_helper.rb
Normal file
|
@ -0,0 +1,18 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module FormFieldValuesHelper
|
||||
include Canaid::Helpers::PermissionsHelper
|
||||
|
||||
def form_repository_rows_field_value_formatter(field_values, user = current_user)
|
||||
field_values&.value&.map do |value|
|
||||
row_code = "#{RepositoryRow::ID_PREFIX}#{value['id']}"
|
||||
repository = Repository.find_by(id: value['repository_id'])
|
||||
|
||||
if repository.nil? || can_read_repository?(user, repository)
|
||||
"#{value['name']} (#{row_code})"
|
||||
else
|
||||
I18n.t('my_modules.assigned_items.repository.private_repository_row_name', repository_row_code: row_code)
|
||||
end
|
||||
end&.join(' | ')
|
||||
end
|
||||
end
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
module ReportsHelper
|
||||
include StringUtility
|
||||
include FormFieldValuesHelper
|
||||
include Canaid::Helpers::PermissionsHelper
|
||||
|
||||
def render_report_element(element, provided_locals = nil)
|
||||
|
@ -139,6 +140,8 @@ module ReportsHelper
|
|||
)
|
||||
elsif form_field_value.is_a?(FormDatetimeFieldValue)
|
||||
form_field_value&.formatted_localize
|
||||
elsif form_field_value.is_a?(FormRepositoryRowsFieldValue)
|
||||
form_repository_rows_field_value_formatter(form_field_value)
|
||||
else
|
||||
form_field_value&.formatted
|
||||
end
|
||||
|
|
|
@ -15,10 +15,11 @@
|
|||
<template v-for="(row, index) in field.field_value.value" :key="row.id">
|
||||
<div class="flex items-center gap-2">
|
||||
<span v-if="index > 0">|</span>
|
||||
<a
|
||||
<a v-if="row.has_access"
|
||||
class="cursor-pointer text-sn-blue record-info-link"
|
||||
:href="itemCardUrl(row)"
|
||||
>{{ row.name }} (ID{{ row.id }})</a>
|
||||
>{{ row.name }}</a>
|
||||
<span v-else class="cursor-pointer"> {{ row.name }}</span>
|
||||
<i v-if="!disabled" @click="removeValue(row.id)" class="sn-icon sn-icon-unlink-italic-s cursor-pointer"></i>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -6,6 +6,7 @@ class FormResponsesZipExportJob < ZipExportJob
|
|||
include StringUtility
|
||||
include BreadcrumbsHelper
|
||||
include Rails.application.routes.url_helpers
|
||||
include FormFieldValuesHelper
|
||||
|
||||
private
|
||||
|
||||
|
@ -44,6 +45,8 @@ class FormResponsesZipExportJob < ZipExportJob
|
|||
if form_field_value.present?
|
||||
if form_field_value.not_applicable
|
||||
row.add_cell I18n.t('forms.export.values.not_applicable')
|
||||
elsif form_field_value.is_a?(FormRepositoryRowsFieldValue)
|
||||
row.add_cell form_repository_rows_field_value_formatter(form_field_value, @user)
|
||||
elsif form_field_value.value_in_range?
|
||||
row.add_cell form_field_value.formatted
|
||||
else
|
||||
|
|
|
@ -13,4 +13,23 @@ class FormFieldValueSerializer < ActiveModel::Serializer
|
|||
def submitted_at
|
||||
I18n.l(object.submitted_at, format: :full) if object.submitted_at
|
||||
end
|
||||
|
||||
def value
|
||||
if object.type == 'FormRepositoryRowsFieldValue'
|
||||
object.value.map do |value|
|
||||
row_code = "#{RepositoryRow::ID_PREFIX}#{value['id']}"
|
||||
repository = Repository.find_by(id: value['repository_id'])
|
||||
|
||||
value[:has_access] = repository.nil? || can_read_repository?(scope[:user], repository)
|
||||
value[:name] = if value[:has_access]
|
||||
"#{value['name']} (#{row_code})"
|
||||
else
|
||||
I18n.t('my_modules.assigned_items.repository.private_repository_row_name', repository_row_code: "#{RepositoryRow::ID_PREFIX}#{value['id']}")
|
||||
end
|
||||
value
|
||||
end
|
||||
else
|
||||
object.value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -28,6 +28,8 @@ module Reports
|
|||
SmartAnnotations::TagToText.new(user, team, form_field_value&.formatted).text
|
||||
elsif form_field_value.is_a?(FormDatetimeFieldValue)
|
||||
form_field_value&.formatted_localize
|
||||
elsif form_field_value.is_a?(FormRepositoryRowsFieldValue)
|
||||
form_repository_rows_field_value_formatter(form_field_value, @user)
|
||||
else
|
||||
form_field_value&.formatted
|
||||
end
|
||||
|
|
|
@ -76,7 +76,7 @@
|
|||
<% when 'ActionField' %>
|
||||
<%= render partial: 'protocols/print/element/checkbox_button', locals: { value: field_value&.flag, description: I18n.t('forms.fields.mark_as_completed') } %>
|
||||
<% when 'RepositoryRowsField'%>
|
||||
<%= field_value&.formatted %>
|
||||
<%= form_repository_rows_field_value_formatter(field_value)%>
|
||||
<% end %>
|
||||
|
||||
<div class="flex items-center justify-end mt-4 gap-4">
|
||||
|
|
Loading…
Add table
Reference in a new issue