Add logic for private inventory items for forms [SCI-12082][SCI-12085]

This commit is contained in:
Andrej 2025-07-14 09:41:28 +02:00
parent 5512f27fb4
commit 634aa37637
8 changed files with 50 additions and 3 deletions

View file

@ -8,6 +8,7 @@ class ProtocolsController < ApplicationController
include TeamsHelper
include ProtocolsExporterV2
include UserRolesHelper
include FormFieldValuesHelper
before_action :check_create_permissions, only: %i(
create

View 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

View file

@ -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

View file

@ -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>

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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">