From c41551a3ca41a785691434da218245fbca5e1577 Mon Sep 17 00:00:00 2001 From: vgema Date: Fri, 4 Oct 2024 16:01:32 +0200 Subject: [PATCH 01/45] MODFQMMGR-494 rename the permission "fqm.query.purge" according to permission name convention https://folio-org.atlassian.net/wiki/spaces/FOLIJET/pages/156368925/Permissions+naming+convention --- descriptors/ModuleDescriptor-template.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 0be7693f..426dc700 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -98,7 +98,7 @@ { "methods": ["POST"], "pathPattern": "/query/purge", - "permissionsRequired": ["fqm.query.purge"] + "permissionsRequired": ["fqm.query.purge.post"] }, { "methods": ["DELETE"], @@ -119,7 +119,7 @@ "unit": "hour", "delay": "1", "modulePermissions": [ - "fqm.query.purge" + "fqm.query.purge.post" ] }, { @@ -136,7 +136,8 @@ ], "permissionSets" : [ { - "permissionName": "fqm.query.purge", + "permissionName": "fqm.query.purge.post", + "replaces": ["fqm.query.purge"], "displayName": "FQM - purge old queries", "description": "Purge old queries", "visible": true From ada0c6b0fb8fe26043fcde5b4a8e5de980d7db44 Mon Sep 17 00:00:00 2001 From: Matt Weaver Date: Thu, 3 Oct 2024 08:09:27 -0700 Subject: [PATCH 02/45] MODFQMMGR-432 Refactor instance classifications --- .../changes/v2.1.0/changelog-v2.1.0.xml | 11 +++ .../inventory/simple_instance.json5 | 82 ++++++++++++------- translations/mod-fqm-manager/en.json | 8 +- 3 files changed, 68 insertions(+), 33 deletions(-) diff --git a/src/main/resources/db/changelog/changes/v2.1.0/changelog-v2.1.0.xml b/src/main/resources/db/changelog/changes/v2.1.0/changelog-v2.1.0.xml index 956d6d89..de129b80 100644 --- a/src/main/resources/db/changelog/changes/v2.1.0/changelog-v2.1.0.xml +++ b/src/main/resources/db/changelog/changes/v2.1.0/changelog-v2.1.0.xml @@ -178,4 +178,15 @@ + + + + + + SELECT * FROM ${tenant_id}_mod_inventory_storage.classification_type + + + diff --git a/src/main/resources/entity-types/inventory/simple_instance.json5 b/src/main/resources/entity-types/inventory/simple_instance.json5 index b9afcf9e..8c77dde4 100644 --- a/src/main/resources/entity-types/inventory/simple_instance.json5 +++ b/src/main/resources/entity-types/inventory/simple_instance.json5 @@ -31,6 +31,7 @@ }, ], requiredPermissions: [ + 'inventory-storage.classification-types.collection.get', 'inventory-storage.instances.item.get', 'inventory-storage.contributor-name-types.collection.get', 'inventory-storage.contributor-types.collection.get', @@ -493,43 +494,68 @@ valueFunction: 'lower(:value)', }, { - name: 'classifications', + name: 'classification_type_ids', + sourceAlias: 'inst', + dataType: { + dataType: 'arrayType', + itemDataType: { + dataType: 'rangedUUIDType', + }, + }, + isIdColumn: false, + queryable: true, + visibleByDefault: false, + essential: true, + hidden: true, + valueGetter: "( SELECT array_agg(elems.value->>'classificationTypeId') FROM jsonb_array_elements(:sourceAlias.jsonb->'classifications') AS elems)", + filterValueGetter: "( SELECT array_agg(lower(elems.value->>'classificationTypeId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'classifications') AS elems)", + }, + { + name: 'classification_type_names', sourceAlias: 'inst', essential: true, dataType: { dataType: 'arrayType', itemDataType: { - dataType: 'objectType', - properties: [ - { - name: 'number', - property: 'classificationNumber', - dataType: { - dataType: 'stringType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'classificationNumber') FROM jsonb_array_elements(:sourceAlias.jsonb->'classifications') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'classificationNumber')) FROM jsonb_array_elements(:sourceAlias.jsonb->'classifications') AS elems)", - valueFunction: 'lower(:value)', - }, - { - name: 'type_id', - property: 'classificationTypeId', - dataType: { - dataType: 'rangedUUIDType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'classificationTypeId') FROM jsonb_array_elements(:sourceAlias.jsonb->'classifications') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'classificationTypeId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'classifications') AS elems)", - valueFunction: 'lower(:value)', - }, - ], + dataType: 'stringType', + }, + }, + idColumnName: 'classification_type_ids', + queryable: true, + visibleByDefault: false, + valueGetter: + "(SELECT array_agg(class_type.jsonb ->> 'name') \ + FILTER (WHERE (class_type.jsonb ->> 'name') IS NOT NULL) AS array_agg \ + FROM jsonb_array_elements((:sourceAlias.jsonb -> 'classifications')) record(value) \ + JOIN src_inventory_classification_type class_type ON (record.value ->> 'classificationTypeId') = class_type.id::text\ + )", + source: { + columnName: 'classification_type_names', + entityTypeId: '8fc4a9d2-7ccf-4233-afb8-796911839862', + }, + valueSourceApi: { + path: 'classification-types', + valueJsonPath: '$.classificationTypes.*.id', + labelJsonPath: '$.classificationTypes.*.name', + } + }, + { + name: 'classification_numbers', + sourceAlias: 'inst', + dataType: { + dataType: 'arrayType', + itemDataType: { + dataType: 'stringType', }, }, isIdColumn: false, - queryable: false, + queryable: true, visibleByDefault: false, - valueGetter: ":sourceAlias.jsonb->>'classifications'", + essential: true, + hidden: false, + valueGetter: "( SELECT array_agg(elems.value->>'classificationNumber') FROM jsonb_array_elements(:sourceAlias.jsonb->'classifications') AS elems)", + filterValueGetter: "( SELECT array_agg(lower(elems.value->>'classificationNumber')) FROM jsonb_array_elements(:sourceAlias.jsonb->'classifications') AS elems)", + valueFunction: 'lower(:value)', }, { name: 'publication', diff --git a/translations/mod-fqm-manager/en.json b/translations/mod-fqm-manager/en.json index 6997f5b1..f1e20c3d 100644 --- a/translations/mod-fqm-manager/en.json +++ b/translations/mod-fqm-manager/en.json @@ -637,11 +637,9 @@ "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", "entityType.simple_instance.complete_updated_date": "Complete updated date", "entityType.simple_instance.contributor_type_id": "Contributor type UUID", "entityType.simple_instance.contributors_name": "Contributor name", From cb3d49fabc3139f7840ab0bd9c52d35263ccc0e8 Mon Sep 17 00:00:00 2001 From: Noah Overcash Date: Fri, 4 Oct 2024 13:19:36 -0400 Subject: [PATCH 03/45] [MODLISTS-129] Use migration DTOs from shared repo (#445) * [MODLISTS-129] Use migration DTOs from shared repo * Use openapi transformation agreeable to api-lint * fix version testing * idk why this happened * use openapi-generator 7.4 --- pom.xml | 20 ++++---- .../folio/fqm/migration/warnings/Warning.java | 4 ++ .../fqm/resource/MigrationController.java | 16 +++---- .../swagger.api/mod-fqm-manager.yaml | 14 +++--- .../schemas/FqmMigrateRequest.json | 27 ----------- .../schemas/FqmMigrateResponse.json | 46 ------------------- .../controller/MigrationControllerTest.java | 2 +- 7 files changed, 28 insertions(+), 101 deletions(-) delete mode 100644 src/main/resources/swagger.api/schemas/FqmMigrateRequest.json delete mode 100644 src/main/resources/swagger.api/schemas/FqmMigrateResponse.json diff --git a/pom.xml b/pom.xml index 67b76d8d..5643511a 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ 4.11.0 - 6.2.1 + 7.4.0 1.0.1 3.0.0-M7 1.18.30 @@ -324,6 +324,14 @@ ApiUtil.java true true + + object+FqmMigrateRequest=FqmMigrateRequest + object+FqmMigrateResponse=FqmMigrateResponse + + + FqmMigrateRequest=org.folio.querytool.domain.dto.FqmMigrateRequest + FqmMigrateResponse=org.folio.querytool.domain.dto.FqmMigrateResponse + true java @@ -333,16 +341,6 @@ - - - generate - - - ${mod-fqm-manager.yaml.file} - ${project.build.directory}/docs/mod-fqm-manager - html2 - - diff --git a/src/main/java/org/folio/fqm/migration/warnings/Warning.java b/src/main/java/org/folio/fqm/migration/warnings/Warning.java index 7a0d988d..4ac08f9a 100644 --- a/src/main/java/org/folio/fqm/migration/warnings/Warning.java +++ b/src/main/java/org/folio/fqm/migration/warnings/Warning.java @@ -1,12 +1,16 @@ package org.folio.fqm.migration.warnings; +import jakarta.validation.constraints.NotNull; import javax.annotation.CheckForNull; import lombok.RequiredArgsConstructor; import org.folio.fqm.service.LocalizationService; import org.folio.spring.i18n.service.TranslationService; public interface Warning { + @NotNull WarningType getType(); + + @NotNull String getDescription(TranslationService translationService); public static String getDescriptionByAlternativeAndFql( diff --git a/src/main/java/org/folio/fqm/resource/MigrationController.java b/src/main/java/org/folio/fqm/resource/MigrationController.java index ed89bc1e..b0bcab83 100644 --- a/src/main/java/org/folio/fqm/resource/MigrationController.java +++ b/src/main/java/org/folio/fqm/resource/MigrationController.java @@ -1,17 +1,17 @@ package org.folio.fqm.resource; import lombok.RequiredArgsConstructor; -import org.folio.fqm.domain.dto.FqmMigrateRequest; -import org.folio.fqm.domain.dto.FqmMigrateResponse; -import org.folio.fqm.domain.dto.FqmMigrateResponseWarningsInner; + import org.folio.fqm.migration.MigratableQueryInformation; import org.folio.fqm.service.MigrationService; +import org.folio.querytool.domain.dto.FqmMigrateRequest; +import org.folio.querytool.domain.dto.FqmMigrateResponse; +import org.folio.querytool.domain.dto.FqmMigrateWarning; import org.folio.spring.i18n.service.TranslationService; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RestController; - @RestController @RequiredArgsConstructor public class MigrationController implements FqmVersionApi { @@ -39,11 +39,9 @@ public ResponseEntity fqmMigrate(FqmMigrateRequest fqmMigrat .fqlQuery(updatedQueryInfo.fqlQuery()) .fields(updatedQueryInfo.fields()) .warnings(updatedQueryInfo.warnings().stream() - .map(warning -> new FqmMigrateResponseWarningsInner() - .type(warning.getType() != null ? warning.getType().toString() : null) - .description(warning.getDescription(translationService) != null ? - warning.getDescription(translationService) : "No description provided" - ) + .map(warning -> new FqmMigrateWarning() + .type(warning.getType().toString()) + .description(warning.getDescription(translationService)) ) .toList() ); diff --git a/src/main/resources/swagger.api/mod-fqm-manager.yaml b/src/main/resources/swagger.api/mod-fqm-manager.yaml index ba023a70..b6f1be11 100644 --- a/src/main/resources/swagger.api/mod-fqm-manager.yaml +++ b/src/main/resources/swagger.api/mod-fqm-manager.yaml @@ -91,14 +91,18 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/fqmMigrateRequest' + description: Mapped to schema in folio-query-tool-metadata + type: object + format: FqmMigrateRequest responses: '200': - description: 'FQM version updated successfully' + description: 'FQM version updated successfully' content: application/json: schema: - $ref: '#/components/schemas/fqmMigrateResponse' + description: Mapped to schemas in folio-query-tool-metadata + type: object + format: FqmMigrateResponse '400': $ref: '#/components/responses/badRequestResponse' '500': @@ -157,10 +161,6 @@ components: type: array items: type: string - fqmMigrateRequest: - $ref: schemas/FqmMigrateRequest.json - fqmMigrateResponse: - $ref: schemas/FqmMigrateResponse.json responses: badRequestResponse: diff --git a/src/main/resources/swagger.api/schemas/FqmMigrateRequest.json b/src/main/resources/swagger.api/schemas/FqmMigrateRequest.json deleted file mode 100644 index ac532bf1..00000000 --- a/src/main/resources/swagger.api/schemas/FqmMigrateRequest.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "Entity Upgrade Request", - "description": "Schema for a request to upgrade an entity payload, including an entity type ID, FQL query, and list of fields.", - "type": "object", - "properties": { - "entityTypeId": { - "description": "ID of the entity type to be upgraded", - "type": "string", - "format": "UUID" - }, - "fqlQuery": { - "description": "FQL query string to be used for the upgrade", - "type": "string" - }, - "fields": { - "description": "List of fields to be included in the upgrade", - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "entityTypeId" - ] -} diff --git a/src/main/resources/swagger.api/schemas/FqmMigrateResponse.json b/src/main/resources/swagger.api/schemas/FqmMigrateResponse.json deleted file mode 100644 index 062f7186..00000000 --- a/src/main/resources/swagger.api/schemas/FqmMigrateResponse.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "Entity Upgrade Response", - "description": "Schema for a response to upgrade FQM", - "type": "object", - "properties": { - "entityTypeId": { - "description": "ID of the entity type upgraded successfully", - "type": "string", - "format": "UUID" - }, - "fqlQuery": { - "description": "FQL query string upgraded successfully", - "type": "string" - }, - "fields": { - "description": "List of fields upgraded successfully", - "type": "array", - "items": { - "type": "string" - } - }, - "warnings": { - "description": "List of warnings issued during the upgrade", - "type": "array", - "items": { - "type": "object", - "properties": { - "description": { - "description": "Description of the warning", - "type": "string" - }, - "type": { - "description": "Type of warning", - "type": "string" - } - }, - "required": [ - ] - } - } -}, - "required": [ - "entityTypeId" - ] -} diff --git a/src/test/java/org/folio/fqm/controller/MigrationControllerTest.java b/src/test/java/org/folio/fqm/controller/MigrationControllerTest.java index c3d0edf0..20fcea41 100644 --- a/src/test/java/org/folio/fqm/controller/MigrationControllerTest.java +++ b/src/test/java/org/folio/fqm/controller/MigrationControllerTest.java @@ -1,12 +1,12 @@ package org.folio.fqm.controller; import com.fasterxml.jackson.databind.ObjectMapper; -import org.folio.fqm.domain.dto.FqmMigrateRequest; import org.folio.fqm.migration.MigratableQueryInformation; import org.folio.fqm.migration.warnings.DeprecatedEntityWarning; import org.folio.fqm.migration.warnings.Warning; import org.folio.fqm.resource.MigrationController; import org.folio.fqm.service.MigrationService; +import org.folio.querytool.domain.dto.FqmMigrateRequest; import org.folio.spring.FolioExecutionContext; import org.folio.spring.i18n.service.TranslationService; import org.folio.spring.integration.XOkapiHeaders; From fa5f05dc86a55b8bb3bd356c2c96874775ed1fd6 Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Wed, 2 Oct 2024 13:00:45 -0500 Subject: [PATCH 04/45] fixing nulls --- .../entity-types/inventory/simple_instance.json5 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/resources/entity-types/inventory/simple_instance.json5 b/src/main/resources/entity-types/inventory/simple_instance.json5 index 8c77dde4..6035ecab 100644 --- a/src/main/resources/entity-types/inventory/simple_instance.json5 +++ b/src/main/resources/entity-types/inventory/simple_instance.json5 @@ -382,8 +382,8 @@ queryable: true, essential: true, visibleByDefault: false, - valueGetter: "( SELECT array_agg(elems.value->>'name') FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'name')) FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", + valueGetter: "( SELECT array_agg(elems.value->>'name') FILTER (WHERE (elems.value->>'name') IS NOT NULL) AS array_agg FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", + filterValueGetter: "( SELECT array_agg(lower(elems.value->>'name')) FILTER (WHERE (elems.value->>'name') IS NOT NULL) AS array_agg FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", valueFunction: 'lower(:value)' }, { @@ -416,8 +416,8 @@ queryable: true, essential: true, visibleByDefault: false, - valueGetter: "( SELECT array_agg(elems.value->>'contributorTypeText') FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'contributorTypeText')) FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", + valueGetter: "(SELECT array_agg(elems.value->>'contributorTypeText') FILTER (WHERE (elems.value->>'contributorTypeText') IS NOT NULL) AS array_agg FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", + filterValueGetter: "( SELECT array_agg(lower(elems.value->>'contributorTypeText')) FILTER (WHERE (elems.value->>'contributorTypeText') IS NOT NULL) AS array_agg FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", valueFunction: 'lower(:value)' }, { @@ -451,7 +451,7 @@ visibleByDefault: false, valueFunction: "lower(:value)", valueGetter: "(SELECT array_agg(a.jsonb ->> 'name') FILTER (WHERE (a.jsonb ->> 'name') IS NOT NULL) AS array_agg FROM jsonb_array_elements((:sourceAlias.jsonb -> 'contributors') -> 'contributorNameTypeId') AS record(value) JOIN src_inventory_contributor_name_type a ON (record.value::text) = a.id::text)", - filterValueGetter: "( SELECT array_agg(lower(a.jsonb ->> 'name'::text)) FILTER (WHERE (a.jsonb ->> 'name'::text) IS NOT NULL) AS array_agg FROM jsonb_array_elements_text((:sourceAlias.jsonb -> 'contributors'::text) ->> 'contributorNameTypeId'::text) record(value) JOIN src_inventory_contributor_name_type a ON (record.value::text) = a.id::text)", + filterValueGetter: "( SELECT array_agg(lower(a.jsonb ->> 'name'::text)) FILTER (WHERE (a.jsonb ->> 'name') IS NOT NULL) AS array_agg FROM jsonb_array_elements_text((:sourceAlias.jsonb -> 'contributors'::text) ->> 'contributorNameTypeId'::text) record(value) JOIN src_inventory_contributor_name_type a ON (record.value::text) = a.id::text)", }, { name: "instance_primary_contributor", From adae3d0369da49bc067bdb7225faeb0ac9a0d722 Mon Sep 17 00:00:00 2001 From: Matt Weaver Date: Mon, 7 Oct 2024 09:00:08 -0700 Subject: [PATCH 05/45] MODFQMMGR-508 Mark 3 instance fields as unqueryable This commit marks 3 instance fields as unqueryable, as we're not supporting queryable arrays except when they have a provided set of values --- .../resources/entity-types/inventory/simple_instance.json5 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/entity-types/inventory/simple_instance.json5 b/src/main/resources/entity-types/inventory/simple_instance.json5 index 6035ecab..df5d5e2c 100644 --- a/src/main/resources/entity-types/inventory/simple_instance.json5 +++ b/src/main/resources/entity-types/inventory/simple_instance.json5 @@ -270,7 +270,7 @@ } }, sourceAlias: "inst", - queryable: true, + queryable: false, essential: true, visibleByDefault: false, valueGetter: "( SELECT array_agg(elems.value->>'alternativeTitle') FROM jsonb_array_elements(:sourceAlias.jsonb->'alternativeTitles') AS elems)", @@ -379,7 +379,7 @@ }, }, isIdColumn: false, - queryable: true, + queryable: false, essential: true, visibleByDefault: false, valueGetter: "( SELECT array_agg(elems.value->>'name') FILTER (WHERE (elems.value->>'name') IS NOT NULL) AS array_agg FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", @@ -549,7 +549,7 @@ }, }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, essential: true, hidden: false, From 396e3d5ef03ab7b2c7365e5b2a6b00486ef4f373 Mon Sep 17 00:00:00 2001 From: Noah Overcash Date: Mon, 7 Oct 2024 16:06:14 -0400 Subject: [PATCH 06/45] [MODFQMMGR-453] Make local-only env variables look scarier (#454) * [MODFQMMGR-453] Make local-only env variables look scarier * fix table formatting --- README.md | 10 +++++++++- .../org/folio/fqm/config/PermissionsConfiguration.java | 1 - 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b767a986..d8a35aa0 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,6 @@ mvn clean install | DB_PASSWORD | postgres | Postgres password | | DB_DATABASE | postgres | Postgres database name | | MAX_QUERY_SIZE | 1250000 | max result count per query | -| mod-fqm-manager.bypass-permissions | false | Disable all permission checks, for local development only | | mod-fqm-manager.permissions-cache-timeout-seconds | 60 | Cache duration for user permissions | | mod-fqm-manager.entity-type-cache-timeout-seconds | 3600 | Cache duration for entity type definitions | | server.port | 8081 | Server port | @@ -72,6 +71,15 @@ to mod-fqm-manager to ensure optimal performance and query handling. For larger used, allocate at least 2 gigabytes. In extreme cases with extremely large responses and concurrent usage, 5 gigabytes of heap space should be sufficient to maintain performance and stability. +### Local development only environment variables + +> [!WARNING] +> +> These environment variables are intended for local development only and should not be used in production environments! + +| Name | Default Value | Description | +|------------------------------------|---------------|-------------------------------| +| mod-fqm-manager.bypass-permissions | false | Disable all permission checks | ## Installing the module Follow the guide of Deploying Modules sections of the [Okapi Guide](https://github.com/folio-org/okapi/blob/master/doc/guide.md#example-1-deploying-and-using-a-simple-module) and Reference, which describe the process in detail. diff --git a/src/main/java/org/folio/fqm/config/PermissionsConfiguration.java b/src/main/java/org/folio/fqm/config/PermissionsConfiguration.java index d52a32d7..f1d21d14 100644 --- a/src/main/java/org/folio/fqm/config/PermissionsConfiguration.java +++ b/src/main/java/org/folio/fqm/config/PermissionsConfiguration.java @@ -8,7 +8,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; -import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; From ada9d38514ac3171877a7958839b5e3d95788c61 Mon Sep 17 00:00:00 2001 From: Matt Weaver Date: Fri, 4 Oct 2024 09:28:08 -0700 Subject: [PATCH 07/45] MODFQMMGR-497 Update instance date fields Inventory storage is removing the old publication period start/end date fields and replacing it with a more general 'dates' object. This commit removes the old publication_period_start/end fields from simple_instance and replaces them with a new simple entity type (simple_instance_date_type), which is joined with simple_instance in composite_instances. The old fields are being replaced in the DB, so we don't need to bother keeping the old field definitions around --- descriptors/ModuleDescriptor-template.json | 6 +- .../changes/v2.1.0/changelog-v2.1.0.xml | 11 ++++ .../inventory/composite_instances.json5 | 11 ++++ .../inventory/simple_instance.json5 | 21 ++++-- .../simple_instance_date_type.json5 | 64 +++++++++++++++++++ translations/mod-fqm-manager/en.json | 10 ++- 6 files changed, 116 insertions(+), 7 deletions(-) create mode 100644 src/main/resources/entity-types/simple_instance_date_type.json5 diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 0be7693f..28a629da 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -234,7 +234,11 @@ }, { "id": "instance-storage", - "version": "10.0" + "version": "10.0 11.0" + }, + { + "id": "instance-date-types", + "version": "1.0" }, { "id": "instance-types", diff --git a/src/main/resources/db/changelog/changes/v2.1.0/changelog-v2.1.0.xml b/src/main/resources/db/changelog/changes/v2.1.0/changelog-v2.1.0.xml index de129b80..218bf0a0 100644 --- a/src/main/resources/db/changelog/changes/v2.1.0/changelog-v2.1.0.xml +++ b/src/main/resources/db/changelog/changes/v2.1.0/changelog-v2.1.0.xml @@ -189,4 +189,15 @@ + + + + + + SELECT * FROM ${tenant_id}_mod_inventory_storage.instance_date_type + + + diff --git a/src/main/resources/entity-types/inventory/composite_instances.json5 b/src/main/resources/entity-types/inventory/composite_instances.json5 index 9612faf7..14717546 100644 --- a/src/main/resources/entity-types/inventory/composite_instances.json5 +++ b/src/main/resources/entity-types/inventory/composite_instances.json5 @@ -33,6 +33,17 @@ condition: ':this.id = :that.instanceTypeId', }, }, + { + alias: 'date_type', + type: 'entity-type', + id: '2d4bd468-720e-42b2-af41-8f4a9d7cb335', // simple_instance_date_type + essentialOnly: true, + join: { + type: 'left join', + joinTo: 'instance.inst', + condition: ":this.id = ((:that.jsonb -> 'dates') ->> 'dateTypeId')::uuid", + }, + }, ], defaultSort: [ { diff --git a/src/main/resources/entity-types/inventory/simple_instance.json5 b/src/main/resources/entity-types/inventory/simple_instance.json5 index df5d5e2c..630c3912 100644 --- a/src/main/resources/entity-types/inventory/simple_instance.json5 +++ b/src/main/resources/entity-types/inventory/simple_instance.json5 @@ -670,7 +670,19 @@ )", }, { - name: 'publication_period_start', + name: 'instance_date_1', + sourceAlias: 'inst', + essential: true, + dataType: { + dataType: 'dateType', + }, + isIdColumn: false, + queryable: true, + visibleByDefault: false, + valueGetter: ":sourceAlias.jsonb->'dates'->>'date1'", + }, + { + name: 'instance_date_2', sourceAlias: 'inst', essential: true, dataType: { @@ -679,10 +691,10 @@ isIdColumn: false, queryable: true, visibleByDefault: false, - valueGetter: ":sourceAlias.jsonb->'publicationPeriod'->>'start'", + valueGetter: ":sourceAlias.jsonb->'dates'->>'date1'", }, { - name: 'publication_period_end', + name: 'instance_date_type_id', sourceAlias: 'inst', essential: true, dataType: { @@ -690,8 +702,9 @@ }, isIdColumn: false, queryable: true, + hidden: true, visibleByDefault: false, - valueGetter: ":sourceAlias.jsonb->'publicationPeriod'->>'end'", + valueGetter: ":sourceAlias.jsonb->'date'->>'dateTypeId'", }, { name: 'electronic_access', diff --git a/src/main/resources/entity-types/simple_instance_date_type.json5 b/src/main/resources/entity-types/simple_instance_date_type.json5 new file mode 100644 index 00000000..1b88d83a --- /dev/null +++ b/src/main/resources/entity-types/simple_instance_date_type.json5 @@ -0,0 +1,64 @@ +{ + id: '2d4bd468-720e-42b2-af41-8f4a9d7cb335', + name: 'simple_instance_date_type', + private: true, + sources: [ + { + alias: 'date_type', + type: 'db', + target: 'src_inventory_instance_date_type', + }, + ], + requiredPermissions: [ + 'inventory-storage.instance-date-types.collection.get', + ], + columns: [ + { + name: 'id', + dataType: { + dataType: 'rangedUUIDType', + }, + isIdColumn: true, + queryable: true, + hidden: true, + essential: true, + valueGetter: ':date_type.id', + }, + { + name: 'name', + dataType: { + dataType: 'stringType', + }, + idColumnName: 'id', + queryable: true, + essential: true, + valueGetter: ":date_type.jsonb ->> 'name'", + source: { + entityTypeId: '2d4bd468-720e-42b2-af41-8f4a9d7cb335', + columnName: 'name', + }, + valueSourceApi: { + path: 'instance-date-types', + valueJsonPath: '$.instanceDateTypes.*.id', + labelJsonPath: '$.instanceDateTypes.*.name', + }, + }, + { + name: 'code', + dataType: { + dataType: 'stringType', + }, + idColumnName: 'id', + queryable: true, + valueGetter: ":date_type.jsonb ->> 'code'", + source: { + entityTypeId: '2d4bd468-720e-42b2-af41-8f4a9d7cb335', + columnName: 'code', + }, + valueSourceApi: { + valueJsonPath: '$.instanceDateTypes.*.id', + labelJsonPath: '$.instanceDateTypes.*.code', + }, + }, + ], +} diff --git a/translations/mod-fqm-manager/en.json b/translations/mod-fqm-manager/en.json index f1e20c3d..08a1d9b4 100644 --- a/translations/mod-fqm-manager/en.json +++ b/translations/mod-fqm-manager/en.json @@ -6,6 +6,7 @@ "entityType.composite_holdings_record.permanent_location": "Permanent location", "entityType.composite_holdings_record.temporary_location": "Temporary location", "entityType.composite_instances": "Instances", + "entityType.composite_instances.date_type": "Instance date type", "entityType.composite_instances.inst_stat": "Instance status", "entityType.composite_instances.instance": "Instance", "entityType.composite_instances.instance_type": "Resource type", @@ -672,6 +673,9 @@ "entityType.simple_instance.identifiers.value._qualified": "Identifiers value", "entityType.simple_instance.index_title": "Index title", "entityType.simple_instance.instance_format_ids": "Instance format UUIDs", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", "entityType.simple_instance.instance_type_id": "Resource type UUID", "entityType.simple_instance.instance_type_name": "Resource type", "entityType.simple_instance.jsonb": "JSONB", @@ -699,8 +703,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.shared": "Shared", @@ -718,6 +720,10 @@ "entityType.simple_instance.updated_at": "Updated date", "entityType.simple_instance.updated_by": "Updated by user UUID", "entityType.simple_instance.version": "Record version", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code", "entityType.simple_instance_status": "Instance status name", "entityType.simple_instance_status.code": "Code", "entityType.simple_instance_status.created_by_user_id": "Created by user UUID", From 484792a4aa64a8de579fc33bc3e3af650f0e8d70 Mon Sep 17 00:00:00 2001 From: bvsharp <97990858+bvsharp@users.noreply.github.com> Date: Wed, 9 Oct 2024 23:02:21 -0400 Subject: [PATCH 08/45] MODFQMMGR-330: Add Languages field to Instance entity (#453) --- descriptors/ModuleDescriptor-template.json | 6 +- .../folio/fqm/client/SimpleHttpClient.java | 2 +- .../folio/fqm/service/DataRefreshService.java | 7 +- .../folio/fqm/service/EntityTypeService.java | 107 +++- .../changes/v1.1.0/changelog-v1.1.0.xml | 39 +- .../v1.1.0/sql/create-mat-view-languages.sql | 10 - .../create-mat-view-pol-payment-status.sql | 20 - .../create-mat-view-pol-receipt-status.sql | 20 - .../inventory/simple_instance.json5 | 10 +- src/main/resources/languages.json5 | 492 ++++++++++++++++++ .../fqm/service/EntityTypeServiceTest.java | 116 +++++ 11 files changed, 731 insertions(+), 98 deletions(-) delete mode 100644 src/main/resources/db/changelog/changes/v1.1.0/sql/create-mat-view-languages.sql delete mode 100644 src/main/resources/db/changelog/changes/v1.1.0/sql/create-mat-view-pol-payment-status.sql delete mode 100644 src/main/resources/db/changelog/changes/v1.1.0/sql/create-mat-view-pol-receipt-status.sql create mode 100644 src/main/resources/languages.json5 diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 28a629da..12e22c69 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -40,7 +40,7 @@ "methods": ["GET"], "pathPattern": "/entity-types/{entity-type-id}/columns/{column-name}/values", "permissionsRequired": ["fqm.entityTypes.item.columnValues.get"], - "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get"] + "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get", "search.facets.collection.get", "configuration.entries.collection.get"] }, { "methods": ["POST"], @@ -367,6 +367,10 @@ { "id": "voucher-storage.voucher-number", "version": "1.1" + }, + { + "id": "search", + "version": "1.3" } ], "optional": [ diff --git a/src/main/java/org/folio/fqm/client/SimpleHttpClient.java b/src/main/java/org/folio/fqm/client/SimpleHttpClient.java index 611ac3d6..3ca43242 100644 --- a/src/main/java/org/folio/fqm/client/SimpleHttpClient.java +++ b/src/main/java/org/folio/fqm/client/SimpleHttpClient.java @@ -19,6 +19,6 @@ public interface SimpleHttpClient { * @param queryParams - a map of query parameters to pass to the API endpoint * @return the body of the response (JSON) */ - @GetMapping(value = "/{path}?{queryParams}", produces = MediaType.APPLICATION_JSON_VALUE) + @GetMapping(value = "/{path}", produces = MediaType.APPLICATION_JSON_VALUE) String get(@PathVariable String path, @SpringQueryMap Map queryParams); } diff --git a/src/main/java/org/folio/fqm/service/DataRefreshService.java b/src/main/java/org/folio/fqm/service/DataRefreshService.java index 8ecae847..6bb8ef9f 100644 --- a/src/main/java/org/folio/fqm/service/DataRefreshService.java +++ b/src/main/java/org/folio/fqm/service/DataRefreshService.java @@ -16,12 +16,7 @@ public class DataRefreshService { private final DataRefreshRepository dataRefreshRepository; static final List MATERIALIZED_VIEW_NAMES = List.of( - "drv_circulation_loan_status", - "drv_inventory_item_status", - "drv_pol_payment_status", - "drv_pol_receipt_status", - "drv_inventory_statistical_code_full", - "drv_languages" + "drv_inventory_statistical_code_full" ); public DataRefreshResponse refreshData(String tenantId) { diff --git a/src/main/java/org/folio/fqm/service/EntityTypeService.java b/src/main/java/org/folio/fqm/service/EntityTypeService.java index 75acf651..07f9f662 100644 --- a/src/main/java/org/folio/fqm/service/EntityTypeService.java +++ b/src/main/java/org/folio/fqm/service/EntityTypeService.java @@ -1,8 +1,15 @@ package org.folio.fqm.service; +import com.fasterxml.jackson.core.json.JsonReadFeature; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.json.JsonMapper; import com.jayway.jsonpath.DocumentContext; import com.jayway.jsonpath.JsonPath; import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.codehaus.plexus.util.StringUtils; import org.folio.fql.model.field.FqlField; import org.folio.fql.service.FqlValidationService; import org.folio.fqm.client.SimpleHttpClient; @@ -15,6 +22,7 @@ import org.folio.querytool.domain.dto.EntityTypeColumn; import org.folio.querytool.domain.dto.Field; import org.folio.querytool.domain.dto.SourceColumn; +import org.folio.querytool.domain.dto.ValueSourceApi; import org.folio.querytool.domain.dto.ValueWithLabel; import org.springframework.lang.Nullable; import org.springframework.stereotype.Service; @@ -24,13 +32,21 @@ import static java.util.Comparator.nullsLast; import static org.folio.fqm.repository.EntityTypeRepository.ID_FIELD_NAME; +import java.io.IOException; +import java.io.InputStream; import java.util.*; @Service @RequiredArgsConstructor +@Log4j2 public class EntityTypeService { private static final int COLUMN_VALUE_DEFAULT_PAGE_SIZE = 1000; + private static final String LANGUAGES_FILEPATH = "languages.json5"; + private static final String GET_LOCALE_SETTINGS_PATH = "configurations/entries"; + private static final Map GET_LOCALE_SETTINGS_PARAMS = Map.of( + "query", "(module==ORG and configName==localeSettings)" + ); private static final List EXCLUDED_CURRENCY_CODES = List.of( "XUA", "AYM", "AFA", "ADP", "ATS", "AZM", "BYB", "BYR", "BEF", "BOV", "BGL", "CLF", "COU", "CUC", "CYP", "NLG", "EEK", "XBA", "XBB", "XBC", "XBD", "FIM", "FRF", "XFO", "XFU", "GHC", "DEM", "XAU", "GRD", "GWP", "IEP", "ITL", "LVL", "LTL", "LUF", "MGF", "MTL", "MRO", "MXV", @@ -41,7 +57,7 @@ public class EntityTypeService { private final EntityTypeFlatteningService entityTypeFlatteningService; private final LocalizationService localizationService; private final QueryProcessorService queryService; - private final SimpleHttpClient fieldValueClient; + private final SimpleHttpClient simpleHttpClient; private final PermissionsService permissionsService; private final CrossTenantQueryService crossTenantQueryService; @@ -89,7 +105,7 @@ public EntityType getEntityTypeDefinition(UUID entityTypeId, boolean includeHidd EntityType entityType = entityTypeFlatteningService.getFlattenedEntityType(entityTypeId, null); boolean crossTenantEnabled = Boolean.TRUE.equals(entityType.getCrossTenantQueriesEnabled()) && crossTenantQueryService.isCentralTenant(); - List columns = entityType + List columns = entityType .getColumns() .stream() .filter(column -> includeHidden || !Boolean.TRUE.equals(column.getHidden())) // Filter based on includeHidden flag @@ -107,9 +123,9 @@ public EntityType getEntityTypeDefinition(UUID entityTypeId, boolean includeHidd /** * Return top 1000 values of an entity type field, matching the given search text * - * @param fieldName Name of the field for which values have to be returned - * @param searchText Nullable search text. If a search text is provided, the returned values will include only those - * that contain the specified searchText. + * @param fieldName Name of the field for which values have to be returned + * @param searchText Nullable search text. If a search text is provided, the returned values will include only those + * that contain the specified searchText. */ @Transactional(readOnly = true) public ColumnValues getFieldValues(UUID entityTypeId, String fieldName, @Nullable String searchText) { @@ -143,6 +159,9 @@ public ColumnValues getFieldValues(UUID entityTypeId, String fieldName, @Nullabl case "tenant_id" -> { return getTenantIds(entityType); } + case "languages" -> { + return getLanguages(searchText); + } default -> { throw new InvalidEntityTypeDefinitionException("Unhandled source name \"" + field.getSource().getName() + "\" for the FQM value source type in column \"" + fieldName + '"', entityType); } @@ -174,7 +193,9 @@ private ColumnValues getFieldValuesFromEntityTypeDefinition(Field field, String } private ColumnValues getFieldValuesFromApi(Field field, String searchText) { - String rawJson = fieldValueClient.get(field.getValueSourceApi().getPath(), Map.of("limit", String.valueOf(COLUMN_VALUE_DEFAULT_PAGE_SIZE))); + Map queryParams = new HashMap<>(Map.of("limit", String.valueOf(COLUMN_VALUE_DEFAULT_PAGE_SIZE))); + ValueSourceApi valueSourceApi = field.getValueSourceApi(); + String rawJson = simpleHttpClient.get(valueSourceApi.getPath(), queryParams); DocumentContext parsedJson = JsonPath.parse(rawJson); List values = parsedJson.read(field.getValueSourceApi().getValueJsonPath()); List labels = parsedJson.read(field.getValueSourceApi().getLabelJsonPath()); @@ -222,6 +243,79 @@ private static ColumnValues getCurrencyValues() { return new ColumnValues().content(currencies); } + private ColumnValues getLanguages(String searchText) { + Map queryParams = Map.of( + "facet", "languages", + "query", "id=*", + "limit", "1000" + ); + String rawJson = simpleHttpClient.get("search/instances/facets", queryParams); + DocumentContext parsedJson = JsonPath.parse(rawJson); + List values = parsedJson.read("$.facets.languages.values.*.id"); + + List results = new ArrayList<>(); + ObjectMapper mapper = + JsonMapper + .builder() + .enable(JsonReadFeature.ALLOW_SINGLE_QUOTES) + .enable(JsonReadFeature.ALLOW_UNQUOTED_FIELD_NAMES) + .build(); + + String classpath = System.getProperty("java.class.path"); + log.info("Classpath: {}", classpath); + List> languages = List.of(); + try(InputStream input = getClass().getClassLoader().getResourceAsStream(LANGUAGES_FILEPATH)) { + languages = mapper.readValue(input, new TypeReference<>() { + }); + } catch (IOException e) { + log.error("Failed to read language file. Language display names may not be properly translated."); + } + + Locale folioLocale; + try { + String localeSettingsResponse = simpleHttpClient.get(GET_LOCALE_SETTINGS_PATH, GET_LOCALE_SETTINGS_PARAMS); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode localeSettingsNode = objectMapper.readTree(localeSettingsResponse); + String valueString = localeSettingsNode + .path("configs") + .get(0) + .path("value") + .asText(); + JsonNode valueNode = objectMapper.readTree(valueString); + String localeString = valueNode.path("locale").asText(); + folioLocale = new Locale(localeString.substring(0, 2)); // Java locales are in form xx, FOLIO stores locales as xx-YY + } catch (Exception e) { + log.debug("No default locale defined. Defaulting to English for language translations."); + folioLocale = Locale.ENGLISH; + } + + Map a3ToNameMap = new HashMap<>(); + Map a3ToA2Map = new HashMap<>(); + for (Map language : languages) { + a3ToA2Map.put(language.get("alpha3"), language.get("alpha2")); + a3ToNameMap.put(language.get("alpha3"), language.get("name")); + } + + for (String code : values) { + String label; + String a2Code = a3ToA2Map.get(code); + String name = a3ToNameMap.get(code); + if (StringUtils.isNotEmpty(a2Code)) { + Locale languageLocale = new Locale(a2Code); + label = languageLocale.getDisplayLanguage(folioLocale); + } else if (StringUtils.isNotEmpty(name)) { + label = name; + } else { + label = code; + } + if (label.toLowerCase().contains(searchText.toLowerCase())) { + results.add(new ValueWithLabel().value(code).label(label)); + } + } + results.sort(Comparator.comparing(ValueWithLabel::getLabel, String.CASE_INSENSITIVE_ORDER)); + return new ColumnValues().content(results); + } + private static ValueWithLabel toValueWithLabel(Map allValues, String fieldName) { var valueWithLabel = new ValueWithLabel().label(getFieldValue(allValues, fieldName)); return allValues.containsKey(ID_FIELD_NAME) @@ -232,5 +326,4 @@ private static ValueWithLabel toValueWithLabel(Map allValues, St private static String getFieldValue(Map allValues, String fieldName) { return allValues.get(fieldName).toString(); } - } diff --git a/src/main/resources/db/changelog/changes/v1.1.0/changelog-v1.1.0.xml b/src/main/resources/db/changelog/changes/v1.1.0/changelog-v1.1.0.xml index 998e5faf..dc9a83f5 100644 --- a/src/main/resources/db/changelog/changes/v1.1.0/changelog-v1.1.0.xml +++ b/src/main/resources/db/changelog/changes/v1.1.0/changelog-v1.1.0.xml @@ -7,11 +7,7 @@ - - - - - + @@ -38,38 +34,23 @@ - - - - Add materialized view for languages - + Remove unneeded materialized view for languages + DROP MATERIALIZED VIEW IF EXISTS drv_languages; - - - - - - SELECT COUNT(*) FROM pg_matviews WHERE schemaname = '${tenant_id}_mod_fqm_manager'AND matviewname = 'drv_pol_payment_status'; - - REFRESH MATERIALIZED VIEW drv_pol_payment_status; + + DROP MATERIALIZED VIEW IF EXISTS drv_pol_payment_status; - - - SELECT COUNT(*) FROM pg_matviews WHERE schemaname = '${tenant_id}_mod_fqm_manager'AND matviewname = 'drv_pol_receipt_status'; - - REFRESH MATERIALIZED VIEW drv_pol_receipt_status; + + DROP MATERIALIZED VIEW IF EXISTS drv_pol_receipt_status; - + SELECT COUNT(*) FROM pg_matviews WHERE schemaname = '${tenant_id}_mod_fqm_manager'AND matviewname = 'drv_inventory_statistical_code_full'; REFRESH MATERIALIZED VIEW drv_inventory_statistical_code_full; - - - SELECT COUNT(*) FROM pg_matviews WHERE schemaname = '${tenant_id}_mod_fqm_manager'AND matviewname = 'drv_languages'; - - REFRESH MATERIALIZED VIEW drv_languages; + + diff --git a/src/main/resources/db/changelog/changes/v1.1.0/sql/create-mat-view-languages.sql b/src/main/resources/db/changelog/changes/v1.1.0/sql/create-mat-view-languages.sql deleted file mode 100644 index 6863d90c..00000000 --- a/src/main/resources/db/changelog/changes/v1.1.0/sql/create-mat-view-languages.sql +++ /dev/null @@ -1,10 +0,0 @@ -DROP MATERIALIZED VIEW IF EXISTS drv_languages; - - CREATE MATERIALIZED VIEW drv_languages AS - SELECT DISTINCT elements.languages FROM ${tenant_id}_mod_inventory_storage.instance, jsonb_array_elements_text(jsonb -> 'languages') AS elements(languages) - WITH NO DATA; - - - CREATE UNIQUE INDEX fqm_languages_idx - ON ${tenant_id}_mod_fqm_manager.drv_languages(languages); - diff --git a/src/main/resources/db/changelog/changes/v1.1.0/sql/create-mat-view-pol-payment-status.sql b/src/main/resources/db/changelog/changes/v1.1.0/sql/create-mat-view-pol-payment-status.sql deleted file mode 100644 index d89e0ce6..00000000 --- a/src/main/resources/db/changelog/changes/v1.1.0/sql/create-mat-view-pol-payment-status.sql +++ /dev/null @@ -1,20 +0,0 @@ -DROP MATERIALIZED VIEW IF EXISTS drv_pol_payment_status; - -CREATE MATERIALIZED VIEW drv_pol_payment_status AS -SELECT payment_status FROM - (SELECT DISTINCT jsonb ->> 'paymentStatus' AS payment_status FROM ${tenant_id}_mod_orders_storage.po_line) existing_statuses -UNION - (SELECT payment_status FROM - (VALUES - ('Awaiting Payment'), - ('Cancelled'), - ('Fully Paid'), - ('Partially Paid'), - ('Payment Not Required'), - ('Pending') - ) AS hardcoded_statuses(payment_status) - ) -WITH NO DATA; - -CREATE UNIQUE INDEX fqm_pol_payment_status -ON ${tenant_id}_mod_fqm_manager.drv_pol_payment_status(payment_status); diff --git a/src/main/resources/db/changelog/changes/v1.1.0/sql/create-mat-view-pol-receipt-status.sql b/src/main/resources/db/changelog/changes/v1.1.0/sql/create-mat-view-pol-receipt-status.sql deleted file mode 100644 index 38c9eaf5..00000000 --- a/src/main/resources/db/changelog/changes/v1.1.0/sql/create-mat-view-pol-receipt-status.sql +++ /dev/null @@ -1,20 +0,0 @@ -DROP MATERIALIZED VIEW IF EXISTS drv_pol_receipt_status; - -CREATE MATERIALIZED VIEW drv_pol_receipt_status AS -SELECT receipt_status FROM - (SELECT DISTINCT jsonb ->> 'receiptStatus' AS receipt_status FROM ${tenant_id}_mod_orders_storage.po_line) existing_statuses -UNION - (SELECT receipt_status FROM - (VALUES - ('Awaiting Receipt'), - ('Cancelled'), - ('Fully Received'), - ('Partially Received'), - ('Pending'), - ('Receipt Not Required') - ) AS hardcoded_statuses(receipt_status) - ) -WITH NO DATA; - -CREATE UNIQUE INDEX fqm_pol_receipt_status -ON ${tenant_id}_mod_fqm_manager.drv_pol_receipt_status(receipt_status); diff --git a/src/main/resources/entity-types/inventory/simple_instance.json5 b/src/main/resources/entity-types/inventory/simple_instance.json5 index 630c3912..480f0f51 100644 --- a/src/main/resources/entity-types/inventory/simple_instance.json5 +++ b/src/main/resources/entity-types/inventory/simple_instance.json5 @@ -866,23 +866,25 @@ }, }, isIdColumn: false, - queryable: false, + queryable: true, visibleByDefault: false, valueGetter: "(\ SELECT\ array_agg(elems.value::text)\ FROM\ - jsonb_array_elements(:sourceAlias.jsonb->'languages') AS elems\ + jsonb_array_elements_text(:sourceAlias.jsonb->'languages') AS elems\ )", filterValueGetter: "(\ SELECT\ array_agg(lower(elems.value::text))\ FROM\ - jsonb_array_elements(:sourceAlias.jsonb->'languages') AS elems\ + jsonb_array_elements_text(:sourceAlias.jsonb->'languages') AS elems\ )", source: { - entityTypeId: 'a435d29f-ff11-4b7a-8a5f-3c5505452208', + entityTypeId: '8fc4a9d2-7ccf-4233-afb8-796911839862', columnName: 'languages', + type: 'fqm', + name: 'languages', }, }, { diff --git a/src/main/resources/languages.json5 b/src/main/resources/languages.json5 new file mode 100644 index 00000000..0e815fab --- /dev/null +++ b/src/main/resources/languages.json5 @@ -0,0 +1,492 @@ +[ + { alpha3: 'aar', alpha2: 'aa', name: 'Afar' }, + { alpha3: 'abk', alpha2: 'ab', name: 'Abkhazian' }, + { alpha3: 'ace', alpha2: '', name: 'Achinese' }, + { alpha3: 'ach', alpha2: '', name: 'Acoli' }, + { alpha3: 'ada', alpha2: '', name: 'Adangme' }, + { alpha3: 'ady', alpha2: '', name: 'Adyghe; Adygei' }, + { alpha3: 'afa', alpha2: '', name: 'Afro-Asiatic languages' }, + { alpha3: 'afh', alpha2: '', name: 'Afrihili' }, + { alpha3: 'afr', alpha2: 'af', name: 'Afrikaans' }, + { alpha3: 'ain', alpha2: '', name: 'Ainu' }, + { alpha3: 'aka', alpha2: 'ak', name: 'Akan' }, + { alpha3: 'akk', alpha2: '', name: 'Akkadian' }, + { alpha3: 'alb', alpha2: 'sq', name: 'Albanian' }, + { alpha3: 'ale', alpha2: '', name: 'Aleut' }, + { alpha3: 'alg', alpha2: '', name: 'Algonquian languages' }, + { alpha3: 'alt', alpha2: '', name: 'Southern Altai' }, + { alpha3: 'amh', alpha2: 'am', name: 'Amharic' }, + { alpha3: 'ang', alpha2: '', name: 'English, Old (ca.450-1100)' }, + { alpha3: 'anp', alpha2: '', name: 'Angika' }, + { alpha3: 'apa', alpha2: '', name: 'Apache languages' }, + { alpha3: 'ara', alpha2: 'ar', name: 'Arabic' }, + { alpha3: 'arc', alpha2: '', name: 'Official Aramaic (700-300 BCE); Imperial Aramaic (700-300 BCE)' }, + { alpha3: 'arg', alpha2: 'an', name: 'Aragonese' }, + { alpha3: 'arm', alpha2: 'hy', name: 'Armenian' }, + { alpha3: 'arn', alpha2: '', name: 'Mapudungun; Mapuche' }, + { alpha3: 'arp', alpha2: '', name: 'Arapaho' }, + { alpha3: 'art', alpha2: '', name: 'Artificial languages' }, + { alpha3: 'arw', alpha2: '', name: 'Arawak' }, + { alpha3: 'asm', alpha2: 'as', name: 'Assamese' }, + { alpha3: 'ast', alpha2: '', name: 'Asturian; Bable; Leonese; Asturleonese' }, + { alpha3: 'ath', alpha2: '', name: 'Athapascan languages' }, + { alpha3: 'aus', alpha2: '', name: 'Australian languages' }, + { alpha3: 'ava', alpha2: 'av', name: 'Avaric' }, + { alpha3: 'ave', alpha2: 'ae', name: 'Avestan' }, + { alpha3: 'awa', alpha2: '', name: 'Awadhi' }, + { alpha3: 'aym', alpha2: 'ay', name: 'Aymara' }, + { alpha3: 'aze', alpha2: 'az', name: 'Azerbaijani' }, + { alpha3: 'bad', alpha2: '', name: 'Banda languages' }, + { alpha3: 'bai', alpha2: '', name: 'Bamileke languages' }, + { alpha3: 'bak', alpha2: 'ba', name: 'Bashkir' }, + { alpha3: 'bal', alpha2: '', name: 'Baluchi' }, + { alpha3: 'bam', alpha2: 'bm', name: 'Bambara' }, + { alpha3: 'ban', alpha2: '', name: 'Balinese' }, + { alpha3: 'baq', alpha2: 'eu', name: 'Basque' }, + { alpha3: 'bas', alpha2: '', name: 'Basa' }, + { alpha3: 'bat', alpha2: '', name: 'Baltic languages' }, + { alpha3: 'bej', alpha2: '', name: 'Beja; Bedawiyet' }, + { alpha3: 'bel', alpha2: 'be', name: 'Belarusian' }, + { alpha3: 'bem', alpha2: '', name: 'Bemba' }, + { alpha3: 'ben', alpha2: 'bn', name: 'Bengali' }, + { alpha3: 'ber', alpha2: '', name: 'Berber languages' }, + { alpha3: 'bho', alpha2: '', name: 'Bhojpuri' }, + { alpha3: 'bih', alpha2: 'bh', name: 'Bihari languages' }, + { alpha3: 'bik', alpha2: '', name: 'Bikol' }, + { alpha3: 'bin', alpha2: '', name: 'Bini; Edo' }, + { alpha3: 'bis', alpha2: 'bi', name: 'Bislama' }, + { alpha3: 'bla', alpha2: '', name: 'Siksika' }, + { alpha3: 'bnt', alpha2: '', name: 'Bantu languages' }, + { alpha3: 'bos', alpha2: 'bs', name: 'Bosnian' }, + { alpha3: 'bra', alpha2: '', name: 'Braj' }, + { alpha3: 'bre', alpha2: 'br', name: 'Breton' }, + { alpha3: 'btk', alpha2: '', name: 'Batak languages' }, + { alpha3: 'bua', alpha2: '', name: 'Buriat' }, + { alpha3: 'bug', alpha2: '', name: 'Buginese' }, + { alpha3: 'bul', alpha2: 'bg', name: 'Bulgarian' }, + { alpha3: 'bur', alpha2: 'my', name: 'Burmese' }, + { alpha3: 'byn', alpha2: '', name: 'Blin; Bilin' }, + { alpha3: 'cad', alpha2: '', name: 'Caddo' }, + { alpha3: 'cai', alpha2: '', name: 'Central American Indian languages' }, + { alpha3: 'car', alpha2: '', name: 'Galibi Carib' }, + { alpha3: 'cat', alpha2: 'ca', name: 'Catalan; Valencian' }, + { alpha3: 'cau', alpha2: '', name: 'Caucasian languages' }, + { alpha3: 'ceb', alpha2: '', name: 'Cebuano' }, + { alpha3: 'cel', alpha2: '', name: 'Celtic languages' }, + { alpha3: 'cha', alpha2: 'ch', name: 'Chamorro' }, + { alpha3: 'chb', alpha2: '', name: 'Chibcha' }, + { alpha3: 'che', alpha2: 'ce', name: 'Chechen' }, + { alpha3: 'chg', alpha2: '', name: 'Chagatai' }, + { alpha3: 'chi', alpha2: 'zh', name: 'Chinese' }, + { alpha3: 'chk', alpha2: '', name: 'Chuukese' }, + { alpha3: 'chm', alpha2: '', name: 'Mari' }, + { alpha3: 'chn', alpha2: '', name: 'Chinook jargon' }, + { alpha3: 'cho', alpha2: '', name: 'Choctaw' }, + { alpha3: 'chp', alpha2: '', name: 'Chipewyan; Dene Suline' }, + { alpha3: 'chr', alpha2: '', name: 'Cherokee' }, + { + alpha3: 'chu', + alpha2: 'cu', + name: 'Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic' + }, + { alpha3: 'chv', alpha2: 'cv', name: 'Chuvash' }, + { alpha3: 'chy', alpha2: '', name: 'Cheyenne' }, + { alpha3: 'cmc', alpha2: '', name: 'Chamic languages' }, + { alpha3: 'cnr', alpha2: '', name: 'Montenegrin' }, + { alpha3: 'cop', alpha2: '', name: 'Coptic' }, + { alpha3: 'cor', alpha2: 'kw', name: 'Cornish' }, + { alpha3: 'cos', alpha2: 'co', name: 'Corsican' }, + { alpha3: 'cpe', alpha2: '', name: 'Creoles and pidgins, English based' }, + { alpha3: 'cpf', alpha2: '', name: 'Creoles and pidgins, French-based' }, + { alpha3: 'cpp', alpha2: '', name: 'Creoles and pidgins, Portuguese-based' }, + { alpha3: 'cre', alpha2: 'cr', name: 'Cree' }, + { alpha3: 'crh', alpha2: '', name: 'Crimean Tatar; Crimean Turkish' }, + { alpha3: 'crp', alpha2: '', name: 'Creoles and pidgins' }, + { alpha3: 'csb', alpha2: '', name: 'Kashubian' }, + { alpha3: 'cus', alpha2: '', name: 'Cushitic languages' }, + { alpha3: 'cze', alpha2: 'cs', name: 'Czech' }, + { alpha3: 'dak', alpha2: '', name: 'Dakota' }, + { alpha3: 'dan', alpha2: 'da', name: 'Danish' }, + { alpha3: 'dar', alpha2: '', name: 'Dargwa' }, + { alpha3: 'day', alpha2: '', name: 'Land Dayak languages' }, + { alpha3: 'del', alpha2: '', name: 'Delaware' }, + { alpha3: 'den', alpha2: '', name: 'Slave (Athapascan)' }, + { alpha3: 'dgr', alpha2: '', name: 'Dogrib' }, + { alpha3: 'din', alpha2: '', name: 'Dinka' }, + { alpha3: 'div', alpha2: 'dv', name: 'Divehi; Dhivehi; Maldivian' }, + { alpha3: 'doi', alpha2: '', name: 'Dogri' }, + { alpha3: 'dra', alpha2: '', name: 'Dravidian languages' }, + { alpha3: 'dsb', alpha2: '', name: 'Lower Sorbian' }, + { alpha3: 'dua', alpha2: '', name: 'Duala' }, + { alpha3: 'dum', alpha2: '', name: 'Dutch, Middle (ca.1050-1350)' }, + { alpha3: 'dut', alpha2: 'nl', name: 'Dutch; Flemish' }, + { alpha3: 'dyu', alpha2: '', name: 'Dyula' }, + { alpha3: 'dzo', alpha2: 'dz', name: 'Dzongkha' }, + { alpha3: 'efi', alpha2: '', name: 'Efik' }, + { alpha3: 'egy', alpha2: '', name: 'Egyptian (Ancient)' }, + { alpha3: 'eka', alpha2: '', name: 'Ekajuk' }, + { alpha3: 'elx', alpha2: '', name: 'Elamite' }, + { alpha3: 'eng', alpha2: 'en', name: 'English' }, + { alpha3: 'enm', alpha2: '', name: 'English, Middle (1100-1500)' }, + { alpha3: 'epo', alpha2: 'eo', name: 'Esperanto' }, + { alpha3: 'est', alpha2: 'et', name: 'Estonian' }, + { alpha3: 'ewe', alpha2: 'ee', name: 'Ewe' }, + { alpha3: 'ewo', alpha2: '', name: 'Ewondo' }, + { alpha3: 'fan', alpha2: '', name: 'Fang' }, + { alpha3: 'fao', alpha2: 'fo', name: 'Faroese' }, + { alpha3: 'fat', alpha2: '', name: 'Fanti' }, + { alpha3: 'fij', alpha2: 'fj', name: 'Fijian' }, + { alpha3: 'fil', alpha2: '', name: 'Filipino; Pilipino' }, + { alpha3: 'fin', alpha2: 'fi', name: 'Finnish' }, + { alpha3: 'fiu', alpha2: '', name: 'Finno-Ugrian languages' }, + { alpha3: 'fon', alpha2: '', name: 'Fon' }, + { alpha3: 'fre', alpha2: 'fr', name: 'French' }, + { alpha3: 'frm', alpha2: '', name: 'French, Middle (ca.1400-1600)' }, + { alpha3: 'fro', alpha2: '', name: 'French, Old (842-ca.1400)' }, + { alpha3: 'frr', alpha2: '', name: 'Northern Frisian' }, + { alpha3: 'frs', alpha2: '', name: 'Eastern Frisian' }, + { alpha3: 'fry', alpha2: 'fy', name: 'Western Frisian' }, + { alpha3: 'ful', alpha2: 'ff', name: 'Fulah' }, + { alpha3: 'fur', alpha2: '', name: 'Friulian' }, + { alpha3: 'gaa', alpha2: '', name: 'Ga' }, + { alpha3: 'gay', alpha2: '', name: 'Gayo' }, + { alpha3: 'gba', alpha2: '', name: 'Gbaya' }, + { alpha3: 'gem', alpha2: '', name: 'Germanic languages' }, + { alpha3: 'geo', alpha2: 'ka', name: 'Georgian' }, + { alpha3: 'ger', alpha2: 'de', name: 'German' }, + { alpha3: 'gez', alpha2: '', name: 'Geez' }, + { alpha3: 'gil', alpha2: '', name: 'Gilbertese' }, + { alpha3: 'gla', alpha2: 'gd', name: 'Gaelic; Scottish Gaelic' }, + { alpha3: 'gle', alpha2: 'ga', name: 'Irish' }, + { alpha3: 'glg', alpha2: 'gl', name: 'Galician' }, + { alpha3: 'glv', alpha2: 'gv', name: 'Manx' }, + { alpha3: 'gmh', alpha2: '', name: 'German, Middle High (ca.1050-1500)' }, + { alpha3: 'goh', alpha2: '', name: 'German, Old High (ca.750-1050)' }, + { alpha3: 'gon', alpha2: '', name: 'Gondi' }, + { alpha3: 'gor', alpha2: '', name: 'Gorontalo' }, + { alpha3: 'got', alpha2: '', name: 'Gothic' }, + { alpha3: 'grb', alpha2: '', name: 'Grebo' }, + { alpha3: 'grc', alpha2: '', name: 'Greek, Ancient (to 1453)' }, + { alpha3: 'gre', alpha2: 'el', name: 'Greek, Modern (1453-)' }, + { alpha3: 'grn', alpha2: 'gn', name: 'Guarani' }, + { alpha3: 'gsw', alpha2: '', name: 'Swiss German; Alemannic; Alsatian' }, + { alpha3: 'guj', alpha2: 'gu', name: 'Gujarati' }, + { alpha3: 'gwi', alpha2: '', name: 'Gwich\'in' }, + { alpha3: 'hai', alpha2: '', name: 'Haida' }, + { alpha3: 'hat', alpha2: 'ht', name: 'Haitian; Haitian Creole' }, + { alpha3: 'hau', alpha2: 'ha', name: 'Hausa' }, + { alpha3: 'haw', alpha2: '', name: 'Hawaiian' }, + { alpha3: 'heb', alpha2: 'he', name: 'Hebrew' }, + { alpha3: 'her', alpha2: 'hz', name: 'Herero' }, + { alpha3: 'hil', alpha2: '', name: 'Hiligaynon' }, + { alpha3: 'him', alpha2: '', name: 'Himachali languages; Western Pahari languages' }, + { alpha3: 'hin', alpha2: 'hi', name: 'Hindi' }, + { alpha3: 'hit', alpha2: '', name: 'Hittite' }, + { alpha3: 'hmn', alpha2: '', name: 'Hmong; Mong' }, + { alpha3: 'hmo', alpha2: 'ho', name: 'Hiri Motu' }, + { alpha3: 'hrv', alpha2: 'hr', name: 'Croatian' }, + { alpha3: 'hsb', alpha2: '', name: 'Upper Sorbian' }, + { alpha3: 'hun', alpha2: 'hu', name: 'Hungarian' }, + { alpha3: 'hup', alpha2: '', name: 'Hupa' }, + { alpha3: 'iba', alpha2: '', name: 'Iban' }, + { alpha3: 'ibo', alpha2: 'ig', name: 'Igbo' }, + { alpha3: 'ice', alpha2: 'is', name: 'Icelandic' }, + { alpha3: 'ido', alpha2: 'io', name: 'Ido' }, + { alpha3: 'iii', alpha2: 'ii', name: 'Sichuan Yi; Nuosu' }, + { alpha3: 'ijo', alpha2: '', name: 'Ijo languages' }, + { alpha3: 'iku', alpha2: 'iu', name: 'Inuktitut' }, + { alpha3: 'ile', alpha2: 'ie', name: 'Interlingue; Occidental' }, + { alpha3: 'ilo', alpha2: '', name: 'Iloko' }, + { alpha3: 'ina', alpha2: 'ia', name: 'Interlingua (International Auxiliary Language Association)' }, + { alpha3: 'inc', alpha2: '', name: 'Indic languages' }, + { alpha3: 'ind', alpha2: 'id', name: 'Indonesian' }, + { alpha3: 'ine', alpha2: '', name: 'Indo-European languages' }, + { alpha3: 'inh', alpha2: '', name: 'Ingush' }, + { alpha3: 'ipk', alpha2: 'ik', name: 'Inupiaq' }, + { alpha3: 'ira', alpha2: '', name: 'Iranian languages' }, + { alpha3: 'iro', alpha2: '', name: 'Iroquoian languages' }, + { alpha3: 'ita', alpha2: 'it', name: 'Italian' }, + { alpha3: 'jav', alpha2: 'jv', name: 'Javanese' }, + { alpha3: 'jbo', alpha2: '', name: 'Lojban' }, + { alpha3: 'jpn', alpha2: 'ja', name: 'Japanese' }, + { alpha3: 'jpr', alpha2: '', name: 'Judeo-Persian' }, + { alpha3: 'jrb', alpha2: '', name: 'Judeo-Arabic' }, + { alpha3: 'kaa', alpha2: '', name: 'Kara-Kalpak' }, + { alpha3: 'kab', alpha2: '', name: 'Kabyle' }, + { alpha3: 'kac', alpha2: '', name: 'Kachin; Jingpho' }, + { alpha3: 'kal', alpha2: 'kl', name: 'Kalaallisut; Greenlandic' }, + { alpha3: 'kam', alpha2: '', name: 'Kamba' }, + { alpha3: 'kan', alpha2: 'kn', name: 'Kannada' }, + { alpha3: 'kar', alpha2: '', name: 'Karen languages' }, + { alpha3: 'kas', alpha2: 'ks', name: 'Kashmiri' }, + { alpha3: 'kau', alpha2: 'kr', name: 'Kanuri' }, + { alpha3: 'kaw', alpha2: '', name: 'Kawi' }, + { alpha3: 'kaz', alpha2: 'kk', name: 'Kazakh' }, + { alpha3: 'kbd', alpha2: '', name: 'Kabardian' }, + { alpha3: 'kha', alpha2: '', name: 'Khasi' }, + { alpha3: 'khi', alpha2: '', name: 'Khoisan languages' }, + { alpha3: 'khm', alpha2: 'km', name: 'Central Khmer' }, + { alpha3: 'kho', alpha2: '', name: 'Khotanese; Sakan' }, + { alpha3: 'kik', alpha2: 'ki', name: 'Kikuyu; Gikuyu' }, + { alpha3: 'kin', alpha2: 'rw', name: 'Kinyarwanda' }, + { alpha3: 'kir', alpha2: 'ky', name: 'Kirghiz; Kyrgyz' }, + { alpha3: 'kmb', alpha2: '', name: 'Kimbundu' }, + { alpha3: 'kok', alpha2: '', name: 'Konkani' }, + { alpha3: 'kom', alpha2: 'kv', name: 'Komi' }, + { alpha3: 'kon', alpha2: 'kg', name: 'Kongo' }, + { alpha3: 'kor', alpha2: 'ko', name: 'Korean' }, + { alpha3: 'kos', alpha2: '', name: 'Kosraean' }, + { alpha3: 'kpe', alpha2: '', name: 'Kpelle' }, + { alpha3: 'krc', alpha2: '', name: 'Karachay-Balkar' }, + { alpha3: 'krl', alpha2: '', name: 'Karelian' }, + { alpha3: 'kro', alpha2: '', name: 'Kru languages' }, + { alpha3: 'kru', alpha2: '', name: 'Kurukh' }, + { alpha3: 'kua', alpha2: 'kj', name: 'Kuanyama; Kwanyama' }, + { alpha3: 'kum', alpha2: '', name: 'Kumyk' }, + { alpha3: 'kur', alpha2: 'ku', name: 'Kurdish' }, + { alpha3: 'kut', alpha2: '', name: 'Kutenai' }, + { alpha3: 'lad', alpha2: '', name: 'Ladino' }, + { alpha3: 'lah', alpha2: '', name: 'Lahnda' }, + { alpha3: 'lam', alpha2: '', name: 'Lamba' }, + { alpha3: 'lao', alpha2: 'lo', name: 'Lao' }, + { alpha3: 'lat', alpha2: 'la', name: 'Latin' }, + { alpha3: 'lav', alpha2: 'lv', name: 'Latvian' }, + { alpha3: 'lez', alpha2: '', name: 'Lezghian' }, + { alpha3: 'lim', alpha2: 'li', name: 'Limburgan; Limburger; Limburgish' }, + { alpha3: 'lin', alpha2: 'ln', name: 'Lingala' }, + { alpha3: 'lit', alpha2: 'lt', name: 'Lithuanian' }, + { alpha3: 'lol', alpha2: '', name: 'Mongo' }, + { alpha3: 'loz', alpha2: '', name: 'Lozi' }, + { alpha3: 'ltz', alpha2: 'lb', name: 'Luxembourgish; Letzeburgesch' }, + { alpha3: 'lua', alpha2: '', name: 'Luba-Lulua' }, + { alpha3: 'lub', alpha2: 'lu', name: 'Luba-Katanga' }, + { alpha3: 'lug', alpha2: 'lg', name: 'Ganda' }, + { alpha3: 'lui', alpha2: '', name: 'Luiseno' }, + { alpha3: 'lun', alpha2: '', name: 'Lunda' }, + { alpha3: 'luo', alpha2: '', name: 'Luo (Kenya and Tanzania)' }, + { alpha3: 'lus', alpha2: '', name: 'Lushai' }, + { alpha3: 'mac', alpha2: 'mk', name: 'Macedonian' }, + { alpha3: 'mad', alpha2: '', name: 'Madurese' }, + { alpha3: 'mag', alpha2: '', name: 'Magahi' }, + { alpha3: 'mah', alpha2: 'mh', name: 'Marshallese' }, + { alpha3: 'mai', alpha2: '', name: 'Maithili' }, + { alpha3: 'mak', alpha2: '', name: 'Makasar' }, + { alpha3: 'mal', alpha2: 'ml', name: 'Malayalam' }, + { alpha3: 'man', alpha2: '', name: 'Mandingo' }, + { alpha3: 'mao', alpha2: 'mi', name: 'Maori' }, + { alpha3: 'map', alpha2: '', name: 'Austronesian languages' }, + { alpha3: 'mar', alpha2: 'mr', name: 'Marathi' }, + { alpha3: 'mas', alpha2: '', name: 'Masai' }, + { alpha3: 'may', alpha2: 'ms', name: 'Malay' }, + { alpha3: 'mdf', alpha2: '', name: 'Moksha' }, + { alpha3: 'mdr', alpha2: '', name: 'Mandar' }, + { alpha3: 'men', alpha2: '', name: 'Mende' }, + { alpha3: 'mga', alpha2: '', name: 'Irish, Middle (900-1200)' }, + { alpha3: 'mic', alpha2: '', name: 'Mi\'kmaq; Micmac' }, + { alpha3: 'min', alpha2: '', name: 'Minangkabau' }, + { alpha3: 'mis', alpha2: '', name: 'Uncoded languages' }, + { alpha3: 'mkh', alpha2: '', name: 'Mon-Khmer languages' }, + { alpha3: 'mlg', alpha2: 'mg', name: 'Malagasy' }, + { alpha3: 'mlt', alpha2: 'mt', name: 'Maltese' }, + { alpha3: 'mnc', alpha2: '', name: 'Manchu' }, + { alpha3: 'mni', alpha2: '', name: 'Manipuri' }, + { alpha3: 'mno', alpha2: '', name: 'Manobo languages' }, + { alpha3: 'moh', alpha2: '', name: 'Mohawk' }, + { alpha3: 'mon', alpha2: 'mn', name: 'Mongolian' }, + { alpha3: 'mos', alpha2: '', name: 'Mossi' }, + { alpha3: 'mul', alpha2: '', name: 'Multiple languages' }, + { alpha3: 'mun', alpha2: '', name: 'Munda languages' }, + { alpha3: 'mus', alpha2: '', name: 'Creek' }, + { alpha3: 'mwl', alpha2: '', name: 'Mirandese' }, + { alpha3: 'mwr', alpha2: '', name: 'Marwari' }, + { alpha3: 'myn', alpha2: '', name: 'Mayan languages' }, + { alpha3: 'myv', alpha2: '', name: 'Erzya' }, + { alpha3: 'nah', alpha2: '', name: 'Nahuatl languages' }, + { alpha3: 'nai', alpha2: '', name: 'North American Indian languages' }, + { alpha3: 'nap', alpha2: '', name: 'Neapolitan' }, + { alpha3: 'nau', alpha2: 'na', name: 'Nauru' }, + { alpha3: 'nav', alpha2: 'nv', name: 'Navajo; Navaho' }, + { alpha3: 'nbl', alpha2: 'nr', name: 'Ndebele, South; South Ndebele' }, + { alpha3: 'nde', alpha2: 'nd', name: 'Ndebele, North; North Ndebele' }, + { alpha3: 'ndo', alpha2: 'ng', name: 'Ndonga' }, + { alpha3: 'nds', alpha2: '', name: 'Low German; Low Saxon; German, Low; Saxon, Low' }, + { alpha3: 'nep', alpha2: 'ne', name: 'Nepali' }, + { alpha3: 'new', alpha2: '', name: 'Nepal Bhasa; Newari' }, + { alpha3: 'nia', alpha2: '', name: 'Nias' }, + { alpha3: 'nic', alpha2: '', name: 'Niger-Kordofanian languages' }, + { alpha3: 'niu', alpha2: '', name: 'Niuean' }, + { alpha3: 'nno', alpha2: 'nn', name: 'Norwegian Nynorsk; Nynorsk, Norwegian' }, + { alpha3: 'nob', alpha2: 'nb', name: 'Bokmål, Norwegian; Norwegian Bokmål' }, + { alpha3: 'nog', alpha2: '', name: 'Nogai' }, + { alpha3: 'non', alpha2: '', name: 'Norse, Old' }, + { alpha3: 'nor', alpha2: 'no', name: 'Norwegian' }, + { alpha3: 'nqo', alpha2: '', name: 'N\'Ko' }, + { alpha3: 'nso', alpha2: '', name: 'Pedi; Sepedi; Northern Sotho' }, + { alpha3: 'nub', alpha2: '', name: 'Nubian languages' }, + { alpha3: 'nwc', alpha2: '', name: 'Classical Newari; Old Newari; Classical Nepal Bhasa' }, + { alpha3: 'nya', alpha2: 'ny', name: 'Chichewa; Chewa; Nyanja' }, + { alpha3: 'nym', alpha2: '', name: 'Nyamwezi' }, + { alpha3: 'nyn', alpha2: '', name: 'Nyankole' }, + { alpha3: 'nyo', alpha2: '', name: 'Nyoro' }, + { alpha3: 'nzi', alpha2: '', name: 'Nzima' }, + { alpha3: 'oci', alpha2: 'oc', name: 'Occitan (post 1500)' }, + { alpha3: 'oji', alpha2: 'oj', name: 'Ojibwa' }, + { alpha3: 'ori', alpha2: 'or', name: 'Oriya' }, + { alpha3: 'orm', alpha2: 'om', name: 'Oromo' }, + { alpha3: 'osa', alpha2: '', name: 'Osage' }, + { alpha3: 'oss', alpha2: 'os', name: 'Ossetian; Ossetic' }, + { alpha3: 'ota', alpha2: '', name: 'Turkish, Ottoman (1500-1928)' }, + { alpha3: 'oto', alpha2: '', name: 'Otomian languages' }, + { alpha3: 'paa', alpha2: '', name: 'Papuan languages' }, + { alpha3: 'pag', alpha2: '', name: 'Pangasinan' }, + { alpha3: 'pal', alpha2: '', name: 'Pahlavi' }, + { alpha3: 'pam', alpha2: '', name: 'Pampanga; Kapampangan' }, + { alpha3: 'pan', alpha2: 'pa', name: 'Panjabi; Punjabi' }, + { alpha3: 'pap', alpha2: '', name: 'Papiamento' }, + { alpha3: 'pau', alpha2: '', name: 'Palauan' }, + { alpha3: 'peo', alpha2: '', name: 'Persian, Old (ca.600-400 B.C.)' }, + { alpha3: 'per', alpha2: 'fa', name: 'Persian' }, + { alpha3: 'phi', alpha2: '', name: 'Philippine languages' }, + { alpha3: 'phn', alpha2: '', name: 'Phoenician' }, + { alpha3: 'pli', alpha2: 'pi', name: 'Pali' }, + { alpha3: 'pol', alpha2: 'pl', name: 'Polish' }, + { alpha3: 'pon', alpha2: '', name: 'Pohnpeian' }, + { alpha3: 'por', alpha2: 'pt', name: 'Portuguese' }, + { alpha3: 'pra', alpha2: '', name: 'Prakrit languages' }, + { alpha3: 'pro', alpha2: '', name: 'Provençal, Old (to 1500); Occitan, Old (to 1500)' }, + { alpha3: 'pus', alpha2: 'ps', name: 'Pushto; Pashto' }, + { alpha3: 'que', alpha2: 'qu', name: 'Quechua' }, + { alpha3: 'raj', alpha2: '', name: 'Rajasthani' }, + { alpha3: 'rap', alpha2: '', name: 'Rapanui' }, + { alpha3: 'rar', alpha2: '', name: 'Rarotongan; Cook Islands Maori' }, + { alpha3: 'roa', alpha2: '', name: 'Romance languages' }, + { alpha3: 'roh', alpha2: 'rm', name: 'Romansh' }, + { alpha3: 'rom', alpha2: '', name: 'Romany' }, + { alpha3: 'rum', alpha2: 'ro', name: 'Romanian; Moldavian; Moldovan' }, + { alpha3: 'run', alpha2: 'rn', name: 'Rundi' }, + { alpha3: 'rup', alpha2: '', name: 'Aromanian; Arumanian; Macedo-Romanian' }, + { alpha3: 'rus', alpha2: 'ru', name: 'Russian' }, + { alpha3: 'sad', alpha2: '', name: 'Sandawe' }, + { alpha3: 'sag', alpha2: 'sg', name: 'Sango' }, + { alpha3: 'sah', alpha2: '', name: 'Yakut' }, + { alpha3: 'sai', alpha2: '', name: 'South American Indian languages' }, + { alpha3: 'sal', alpha2: '', name: 'Salishan languages' }, + { alpha3: 'sam', alpha2: '', name: 'Samaritan Aramaic' }, + { alpha3: 'san', alpha2: 'sa', name: 'Sanskrit' }, + { alpha3: 'sas', alpha2: '', name: 'Sasak' }, + { alpha3: 'sat', alpha2: '', name: 'Santali' }, + { alpha3: 'scn', alpha2: '', name: 'Sicilian' }, + { alpha3: 'sco', alpha2: '', name: 'Scots' }, + { alpha3: 'sel', alpha2: '', name: 'Selkup' }, + { alpha3: 'sem', alpha2: '', name: 'Semitic languages' }, + { alpha3: 'sga', alpha2: '', name: 'Irish, Old (to 900)' }, + { alpha3: 'sgn', alpha2: '', name: 'Sign Languages' }, + { alpha3: 'shn', alpha2: '', name: 'Shan' }, + { alpha3: 'sid', alpha2: '', name: 'Sidamo' }, + { alpha3: 'sin', alpha2: 'si', name: 'Sinhala; Sinhalese' }, + { alpha3: 'sio', alpha2: '', name: 'Siouan languages' }, + { alpha3: 'sit', alpha2: '', name: 'Sino-Tibetan languages' }, + { alpha3: 'sla', alpha2: '', name: 'Slavic languages' }, + { alpha3: 'slo', alpha2: 'sk', name: 'Slovak' }, + { alpha3: 'slv', alpha2: 'sl', name: 'Slovenian' }, + { alpha3: 'sma', alpha2: '', name: 'Southern Sami' }, + { alpha3: 'sme', alpha2: 'se', name: 'Northern Sami' }, + { alpha3: 'smi', alpha2: '', name: 'Sami languages' }, + { alpha3: 'smj', alpha2: '', name: 'Lule Sami' }, + { alpha3: 'smn', alpha2: '', name: 'Inari Sami' }, + { alpha3: 'smo', alpha2: 'sm', name: 'Samoan' }, + { alpha3: 'sms', alpha2: '', name: 'Skolt Sami' }, + { alpha3: 'sna', alpha2: 'sn', name: 'Shona' }, + { alpha3: 'snd', alpha2: 'sd', name: 'Sindhi' }, + { alpha3: 'snk', alpha2: '', name: 'Soninke' }, + { alpha3: 'sog', alpha2: '', name: 'Sogdian' }, + { alpha3: 'som', alpha2: 'so', name: 'Somali' }, + { alpha3: 'son', alpha2: '', name: 'Songhai languages' }, + { alpha3: 'sot', alpha2: 'st', name: 'Sotho, Southern' }, + { alpha3: 'spa', alpha2: 'es', name: 'Spanish; Castilian' }, + { alpha3: 'srd', alpha2: 'sc', name: 'Sardinian' }, + { alpha3: 'srn', alpha2: '', name: 'Sranan Tongo' }, + { alpha3: 'srp', alpha2: 'sr', name: 'Serbian' }, + { alpha3: 'srr', alpha2: '', name: 'Serer' }, + { alpha3: 'ssa', alpha2: '', name: 'Nilo-Saharan languages' }, + { alpha3: 'ssw', alpha2: 'ss', name: 'Swati' }, + { alpha3: 'suk', alpha2: '', name: 'Sukuma' }, + { alpha3: 'sun', alpha2: 'su', name: 'Sundanese' }, + { alpha3: 'sus', alpha2: '', name: 'Susu' }, + { alpha3: 'sux', alpha2: '', name: 'Sumerian' }, + { alpha3: 'swa', alpha2: 'sw', name: 'Swahili' }, + { alpha3: 'swe', alpha2: 'sv', name: 'Swedish' }, + { alpha3: 'syc', alpha2: '', name: 'Classical Syriac' }, + { alpha3: 'syr', alpha2: '', name: 'Syriac' }, + { alpha3: 'tah', alpha2: 'ty', name: 'Tahitian' }, + { alpha3: 'tai', alpha2: '', name: 'Tai languages' }, + { alpha3: 'tam', alpha2: 'ta', name: 'Tamil' }, + { alpha3: 'tat', alpha2: 'tt', name: 'Tatar' }, + { alpha3: 'tel', alpha2: 'te', name: 'Telugu' }, + { alpha3: 'tem', alpha2: '', name: 'Timne' }, + { alpha3: 'ter', alpha2: '', name: 'Tereno' }, + { alpha3: 'tet', alpha2: '', name: 'Tetum' }, + { alpha3: 'tgk', alpha2: 'tg', name: 'Tajik' }, + { alpha3: 'tgl', alpha2: 'tl', name: 'Tagalog' }, + { alpha3: 'tha', alpha2: 'th', name: 'Thai' }, + { alpha3: 'tib', alpha2: 'bo', name: 'Tibetan' }, + { alpha3: 'tig', alpha2: '', name: 'Tigre' }, + { alpha3: 'tir', alpha2: 'ti', name: 'Tigrinya' }, + { alpha3: 'tiv', alpha2: '', name: 'Tiv' }, + { alpha3: 'tkl', alpha2: '', name: 'Tokelau' }, + { alpha3: 'tlh', alpha2: '', name: 'Klingon; tlhIngan-Hol' }, + { alpha3: 'tli', alpha2: '', name: 'Tlingit' }, + { alpha3: 'tmh', alpha2: '', name: 'Tamashek' }, + { alpha3: 'tog', alpha2: '', name: 'Tonga (Nyasa)' }, + { alpha3: 'ton', alpha2: 'to', name: 'Tonga (Tonga Islands)' }, + { alpha3: 'tpi', alpha2: '', name: 'Tok Pisin' }, + { alpha3: 'tsi', alpha2: '', name: 'Tsimshian' }, + { alpha3: 'tsn', alpha2: 'tn', name: 'Tswana' }, + { alpha3: 'tso', alpha2: 'ts', name: 'Tsonga' }, + { alpha3: 'tuk', alpha2: 'tk', name: 'Turkmen' }, + { alpha3: 'tum', alpha2: '', name: 'Tumbuka' }, + { alpha3: 'tup', alpha2: '', name: 'Tupi languages' }, + { alpha3: 'tur', alpha2: 'tr', name: 'Turkish' }, + { alpha3: 'tut', alpha2: '', name: 'Altaic languages' }, + { alpha3: 'tvl', alpha2: '', name: 'Tuvalu' }, + { alpha3: 'twi', alpha2: 'tw', name: 'Twi' }, + { alpha3: 'tyv', alpha2: '', name: 'Tuvinian' }, + { alpha3: 'udm', alpha2: '', name: 'Udmurt' }, + { alpha3: 'uga', alpha2: '', name: 'Ugaritic' }, + { alpha3: 'uig', alpha2: 'ug', name: 'Uighur; Uyghur' }, + { alpha3: 'ukr', alpha2: 'uk', name: 'Ukrainian' }, + { alpha3: 'umb', alpha2: '', name: 'Umbundu' }, + { alpha3: 'und', alpha2: '', name: 'Undetermined' }, + { alpha3: 'urd', alpha2: 'ur', name: 'Urdu' }, + { alpha3: 'uzb', alpha2: 'uz', name: 'Uzbek' }, + { alpha3: 'vai', alpha2: '', name: 'Vai' }, + { alpha3: 'ven', alpha2: 've', name: 'Venda' }, + { alpha3: 'vie', alpha2: 'vi', name: 'Vietnamese' }, + { alpha3: 'vol', alpha2: 'vo', name: 'Volapük' }, + { alpha3: 'vot', alpha2: '', name: 'Votic' }, + { alpha3: 'wak', alpha2: '', name: 'Wakashan languages' }, + { alpha3: 'wal', alpha2: '', name: 'Wolaitta; Wolaytta' }, + { alpha3: 'war', alpha2: '', name: 'Waray' }, + { alpha3: 'was', alpha2: '', name: 'Washo' }, + { alpha3: 'wel', alpha2: 'cy', name: 'Welsh' }, + { alpha3: 'wen', alpha2: '', name: 'Sorbian languages' }, + { alpha3: 'wln', alpha2: 'wa', name: 'Walloon' }, + { alpha3: 'wol', alpha2: 'wo', name: 'Wolof' }, + { alpha3: 'xal', alpha2: '', name: 'Kalmyk; Oirat' }, + { alpha3: 'xho', alpha2: 'xh', name: 'Xhosa' }, + { alpha3: 'yao', alpha2: '', name: 'Yao' }, + { alpha3: 'yap', alpha2: '', name: 'Yapese' }, + { alpha3: 'yid', alpha2: 'yi', name: 'Yiddish' }, + { alpha3: 'yor', alpha2: 'yo', name: 'Yoruba' }, + { alpha3: 'ypk', alpha2: '', name: 'Yupik languages' }, + { alpha3: 'zap', alpha2: '', name: 'Zapotec' }, + { alpha3: 'zbl', alpha2: '', name: 'Blissymbols; Blissymbolics; Bliss' }, + { alpha3: 'zen', alpha2: '', name: 'Zenaga' }, + { alpha3: 'zgh', alpha2: '', name: 'Standard Moroccan Tamazight' }, + { alpha3: 'zha', alpha2: 'za', name: 'Zhuang; Chuang' }, + { alpha3: 'znd', alpha2: '', name: 'Zande languages' }, + { alpha3: 'zul', alpha2: 'zu', name: 'Zulu' }, + { alpha3: 'zun', alpha2: '', name: 'Zuni' }, + { alpha3: 'zxx', alpha2: '', name: 'No linguistic content; Not applicable' }, + { alpha3: 'zza', alpha2: '', name: 'Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki' } +] diff --git a/src/test/java/org/folio/fqm/service/EntityTypeServiceTest.java b/src/test/java/org/folio/fqm/service/EntityTypeServiceTest.java index b699a46a..6855b134 100644 --- a/src/test/java/org/folio/fqm/service/EntityTypeServiceTest.java +++ b/src/test/java/org/folio/fqm/service/EntityTypeServiceTest.java @@ -374,6 +374,122 @@ void shouldReturnValuesFromApi() { assertEquals(expectedColumnValues, actualColumnValueLabel); } + @Test + void shouldReturnLanguagesFromApi() { + UUID entityTypeId = UUID.randomUUID(); + String valueColumnName = "languages"; + EntityType entityType = new EntityType() + .id(entityTypeId.toString()) + .name("the entity type") + .columns(List.of(new EntityTypeColumn() + .name(valueColumnName) + .source(new SourceColumn(entityTypeId, valueColumnName) + .name("languages") + .type(SourceColumn.TypeEnum.FQM)) + )); + + when(entityTypeFlatteningService.getFlattenedEntityType(entityTypeId, null)).thenReturn(entityType); + when(simpleHttpClient.get(eq("search/instances/facets"), anyMap())).thenReturn(""" + { + "facets": { + "languages": { + "values": [ + { + "id": "eng", + "value": "eng" + }, + { + "id": "ger", + "value": "ger" + }, + { + "id": "fre", + "value": "fre" + }, + { + "id": "xyze", + "value": "xyze" + } + ] + } + } + } + """); + + ColumnValues actualColumnValueLabel = entityTypeService.getFieldValues(entityTypeId, valueColumnName, "e"); + + ColumnValues expectedColumnValues = new ColumnValues().content(List.of( + new ValueWithLabel().value("eng").label("English"), + new ValueWithLabel().value("fre").label("French"), + new ValueWithLabel().value("ger").label("German"), + new ValueWithLabel().value("xyze").label("xyze") // non-existent language code should use code as display name + )); + assertEquals(expectedColumnValues, actualColumnValueLabel); + } + + @Test + void shouldReturnLocalizedLanguagesFromApi() { + UUID entityTypeId = UUID.randomUUID(); + String valueColumnName = "languages"; + EntityType entityType = new EntityType() + .id(entityTypeId.toString()) + .name("the entity type") + .columns(List.of(new EntityTypeColumn() + .name(valueColumnName) + .source(new SourceColumn(entityTypeId, valueColumnName) + .name("languages") + .type(SourceColumn.TypeEnum.FQM)) + )); + + when(entityTypeFlatteningService.getFlattenedEntityType(entityTypeId, null)).thenReturn(entityType); + when(simpleHttpClient.get(eq("search/instances/facets"), anyMap())).thenReturn(""" + { + "facets": { + "languages": { + "values": [ + { + "id": "eng", + "value": "eng" + }, + { + "id": "ger", + "value": "ger" + }, + { + "id": "mus", + "value": "mus" + } + ] + } + } + } + """); + when(simpleHttpClient.get(eq("configurations/entries"), anyMap())).thenReturn(""" + { + "configs": [ + { + "id":"2a132a01-623b-4d3a-9d9a-2feb777665c2", + "module":"ORG", + "configName":"localeSettings", + "enabled":true, + "value":"{\\"locale\\":\\"de\\",\\"timezone\\":\\"UTC\\",\\"currency\\":\\"USD\\"}","metadata":{"createdDate":"2024-03-25T17:37:22.309+00:00","createdByUserId":"db760bf8-e05a-4a5d-a4c3-8d49dc0d4e48"} + } + ], + "totalRecords": 1, + "resultInfo": {"totalRecords":1,"facets":[],"diagnostics":[]} + } + """); + + ColumnValues actualColumnValueLabel = entityTypeService.getFieldValues(entityTypeId, valueColumnName, ""); + + ColumnValues expectedColumnValues = new ColumnValues().content(List.of( + new ValueWithLabel().value("mus").label("Creek"), + new ValueWithLabel().value("ger").label("Deutsch"), + new ValueWithLabel().value("eng").label("Englisch") + )); + assertEquals(expectedColumnValues, actualColumnValueLabel); + } + @Test void shouldReturnEntityTypeDefinition() { UUID entityTypeId = UUID.randomUUID(); From d6489fb1a8b0c6f8ae59d0bc3a61a8f408a64d58 Mon Sep 17 00:00:00 2001 From: Noah Overcash Date: Thu, 10 Oct 2024 13:30:42 -0400 Subject: [PATCH 09/45] [MODFQMMGR-321,MODFQMMGR-322] Update entity-type-creator NPM deps (#455) * [MODFQMMGR-321] Update json-schema-to-typescript dep in entity-type-creator * [MODFQMMGR-322] Update MUI, too --- entity-type-creator/bun.lockb | Bin 96946 -> 98460 bytes entity-type-creator/package.json | 42 +++++++++++++++---------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/entity-type-creator/bun.lockb b/entity-type-creator/bun.lockb index 3c83885c05d513bdf28e2d1f529bde3228268f70..a4224d348def173fa410cd09bd956a045ee3ff95 100755 GIT binary patch delta 30233 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�LWq9V1E?rxK7hUX&jqqM@R4h@yJn>*OU)QJ+#p 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 Date: Thu, 10 Oct 2024 17:14:10 -0400 Subject: [PATCH 10/45] MODFQMMGR-468: Aggregate Tenant locations across all tenants (#450) --- .../folio/fqm/client/SimpleHttpClient.java | 12 ++++ .../org/folio/fqm/repository/IdStreamer.java | 2 +- .../fqm/service/CrossTenantQueryService.java | 30 ++++++++-- .../folio/fqm/service/EntityTypeService.java | 57 ++++++++++++------- .../fqm/service/QueryManagementService.java | 4 +- .../fqm/service/QueryProcessorService.java | 2 +- .../service/CrossTenantQueryServiceTest.java | 30 +++++++--- .../fqm/service/EntityTypeServiceTest.java | 19 +++++-- .../service/QueryManagementServiceTest.java | 6 +- .../service/QueryProcessorServiceTest.java | 2 +- 10 files changed, 117 insertions(+), 47 deletions(-) diff --git a/src/main/java/org/folio/fqm/client/SimpleHttpClient.java b/src/main/java/org/folio/fqm/client/SimpleHttpClient.java index 3ca43242..3269f206 100644 --- a/src/main/java/org/folio/fqm/client/SimpleHttpClient.java +++ b/src/main/java/org/folio/fqm/client/SimpleHttpClient.java @@ -6,6 +6,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestHeader; import java.util.Map; @@ -21,4 +22,15 @@ public interface SimpleHttpClient { */ @GetMapping(value = "/{path}", produces = MediaType.APPLICATION_JSON_VALUE) String get(@PathVariable String path, @SpringQueryMap Map queryParams); + + /** + * Retrieve arbitrary data from a FOLIO API endpoint for the specified tenant. + * + * @param path - the path of the API endpoint + * @param queryParams - a map of query parameters to pass to the API endpoint + * @param tenant - FOLIO tenant from which to retrieve data + * @return the body of the response (JSON) + */ + @GetMapping(value = "/{path}?{queryParams}", produces = MediaType.APPLICATION_JSON_VALUE) + String get(@PathVariable String path, @SpringQueryMap Map queryParams, @RequestHeader("X-Okapi-Tenant") String tenant); } diff --git a/src/main/java/org/folio/fqm/repository/IdStreamer.java b/src/main/java/org/folio/fqm/repository/IdStreamer.java index b314c49d..9ebb96ee 100644 --- a/src/main/java/org/folio/fqm/repository/IdStreamer.java +++ b/src/main/java/org/folio/fqm/repository/IdStreamer.java @@ -56,7 +56,7 @@ public int streamIdsInBatch(EntityType entityType, int batchSize, Consumer idsConsumer) { boolean ecsEnabled = crossTenantQueryService.ecsEnabled(); - List tenantsToQuery = crossTenantQueryService.getTenantsToQuery(entityType, false); + List tenantsToQuery = crossTenantQueryService.getTenantsToQuery(entityType); return this.streamIdsInBatch(entityType, sortResults, fql, batchSize, idsConsumer, tenantsToQuery, ecsEnabled); } diff --git a/src/main/java/org/folio/fqm/service/CrossTenantQueryService.java b/src/main/java/org/folio/fqm/service/CrossTenantQueryService.java index c2e97abc..045bf5ad 100644 --- a/src/main/java/org/folio/fqm/service/CrossTenantQueryService.java +++ b/src/main/java/org/folio/fqm/service/CrossTenantQueryService.java @@ -26,13 +26,35 @@ public class CrossTenantQueryService { private static final String COMPOSITE_INSTANCES_ID = "6b08439b-4f8e-4468-8046-ea620f5cfb74"; private static final String SIMPLE_INSTANCES_ID = "8fc4a9d2-7ccf-4233-afb8-796911839862"; + private static final String SIMPLE_INSTANCE_STATUS_ID = "9c239bfd-198f-4013-bbc4-4551c0cbdeaa"; + private static final String SIMPLE_INSTANCE_TYPE_ID = "af44e2e0-12e0-4eec-b80d-49feb33a866c"; + private static final List INSTANCE_RELATED_ENTITIES = List.of(SIMPLE_INSTANCES_ID, COMPOSITE_INSTANCES_ID, SIMPLE_INSTANCE_STATUS_ID, SIMPLE_INSTANCE_TYPE_ID); - public List getTenantsToQuery(EntityType entityType, boolean forceCrossTenantQuery) { - if (!forceCrossTenantQuery - && !Boolean.TRUE.equals(entityType.getCrossTenantQueriesEnabled()) + /** + * Retrieve list of tenants to run query against. + * @param entityType Entity type definition + * @return List of tenants to query + */ + public List getTenantsToQuery(EntityType entityType) { + if (!Boolean.TRUE.equals(entityType.getCrossTenantQueriesEnabled()) && !COMPOSITE_INSTANCES_ID.equals(entityType.getId())) { return List.of(executionContext.getTenantId()); } + return getTenants(entityType); + } + + /** + * Retrieve list of tenants to retrieve column values from. This method skips the cross-tenant query check, since the + * column values API uses simple entity type definitions, which don't have cross-tenant queries enabled. + * method skips the cross-tenant query check + * @param entityType Entity type definition + * @return List of tenants to query + */ + public List getTenantsToQueryForColumnValues(EntityType entityType) { + return getTenants(entityType); + } + + private List getTenants(EntityType entityType) { // Get the ECS tenant info first, since this comes from mod-users and should work in non-ECS environments // We can use this for determining if it's an ECS environment, and if so, retrieving the consortium ID and central tenant ID Map ecsTenantInfo = getEcsTenantInfo(); @@ -46,7 +68,7 @@ public List getTenantsToQuery(EntityType entityType, boolean forceCrossT // The Instances entity type is required to retrieve shared instances from the central tenant when // running queries from member tenants. This means that if we are running a query for Instances, we need to // query the current tenant (for local records) as well as the central tenant (for shared records). - if (COMPOSITE_INSTANCES_ID.equals(entityType.getId()) || SIMPLE_INSTANCES_ID.equals(entityType.getId())) { + if (INSTANCE_RELATED_ENTITIES.contains(entityType.getId())) { return List.of(executionContext.getTenantId(), centralTenantId); } return List.of(executionContext.getTenantId()); diff --git a/src/main/java/org/folio/fqm/service/EntityTypeService.java b/src/main/java/org/folio/fqm/service/EntityTypeService.java index 07f9f662..fb38d4b2 100644 --- a/src/main/java/org/folio/fqm/service/EntityTypeService.java +++ b/src/main/java/org/folio/fqm/service/EntityTypeService.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.databind.json.JsonMapper; import com.jayway.jsonpath.DocumentContext; import com.jayway.jsonpath.JsonPath; +import feign.FeignException; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.codehaus.plexus.util.StringUtils; @@ -22,7 +23,6 @@ import org.folio.querytool.domain.dto.EntityTypeColumn; import org.folio.querytool.domain.dto.Field; import org.folio.querytool.domain.dto.SourceColumn; -import org.folio.querytool.domain.dto.ValueSourceApi; import org.folio.querytool.domain.dto.ValueWithLabel; import org.springframework.lang.Nullable; import org.springframework.stereotype.Service; @@ -140,8 +140,9 @@ public ColumnValues getFieldValues(UUID entityTypeId, String fieldName, @Nullabl return getFieldValuesFromEntityTypeDefinition(field, searchText); } + List tenantsToQuery = crossTenantQueryService.getTenantsToQueryForColumnValues(entityType); if (field.getValueSourceApi() != null) { - return getFieldValuesFromApi(field, searchText); + return getFieldValuesFromApi(field, searchText, tenantsToQuery); } if (field.getSource() != null) { @@ -160,7 +161,7 @@ public ColumnValues getFieldValues(UUID entityTypeId, String fieldName, @Nullabl return getTenantIds(entityType); } case "languages" -> { - return getLanguages(searchText); + return getLanguages(searchText, tenantsToQuery); } default -> { throw new InvalidEntityTypeDefinitionException("Unhandled source name \"" + field.getSource().getName() + "\" for the FQM value source type in column \"" + fieldName + '"', entityType); @@ -173,7 +174,7 @@ public ColumnValues getFieldValues(UUID entityTypeId, String fieldName, @Nullabl } private ColumnValues getTenantIds(EntityType entityType) { - List tenants = crossTenantQueryService.getTenantsToQuery(entityType, true); + List tenants = crossTenantQueryService.getTenantsToQueryForColumnValues(entityType); List tenantValues = tenants .stream() .map(tenant -> new ValueWithLabel().value(tenant).label(tenant)) @@ -192,22 +193,28 @@ private ColumnValues getFieldValuesFromEntityTypeDefinition(Field field, String return new ColumnValues().content(filteredValues); } - private ColumnValues getFieldValuesFromApi(Field field, String searchText) { - Map queryParams = new HashMap<>(Map.of("limit", String.valueOf(COLUMN_VALUE_DEFAULT_PAGE_SIZE))); - ValueSourceApi valueSourceApi = field.getValueSourceApi(); - String rawJson = simpleHttpClient.get(valueSourceApi.getPath(), queryParams); - DocumentContext parsedJson = JsonPath.parse(rawJson); - List values = parsedJson.read(field.getValueSourceApi().getValueJsonPath()); - List labels = parsedJson.read(field.getValueSourceApi().getLabelJsonPath()); - - List results = new ArrayList<>(values.size()); - for (int i = 0; i < values.size(); i++) { - String value = values.get(i); - String label = labels.get(i); - if (label.contains(searchText)) { - results.add(new ValueWithLabel().value(value).label(label)); + private ColumnValues getFieldValuesFromApi(Field field, String searchText, List tenantsToQuery) { + Set resultSet = new HashSet<>(); + for (String tenantId : tenantsToQuery) { + try { + String rawJson = simpleHttpClient.get(field.getValueSourceApi().getPath(), Map.of("limit", String.valueOf(COLUMN_VALUE_DEFAULT_PAGE_SIZE)), tenantId); + DocumentContext parsedJson = JsonPath.parse(rawJson); + List values = parsedJson.read(field.getValueSourceApi().getValueJsonPath()); + List labels = parsedJson.read(field.getValueSourceApi().getLabelJsonPath()); + for (int i = 0; i < values.size(); i++) { + String value = values.get(i); + String label = labels.get(i); + if (label.contains(searchText)) { + resultSet.add(new ValueWithLabel().value(value).label(label)); + } + } + } catch (FeignException.Unauthorized e) { + log.error("Failed to get column values from {} tenant due to exception: {}", tenantId, e.getMessage()); } } + + + List results = new ArrayList<>(resultSet); results.sort(Comparator.comparing(ValueWithLabel::getLabel, String.CASE_INSENSITIVE_ORDER)); return new ColumnValues().content(results); } @@ -243,15 +250,21 @@ private static ColumnValues getCurrencyValues() { return new ColumnValues().content(currencies); } - private ColumnValues getLanguages(String searchText) { + private ColumnValues getLanguages(String searchText, List tenantsToQuery) { Map queryParams = Map.of( "facet", "languages", "query", "id=*", "limit", "1000" ); - String rawJson = simpleHttpClient.get("search/instances/facets", queryParams); - DocumentContext parsedJson = JsonPath.parse(rawJson); - List values = parsedJson.read("$.facets.languages.values.*.id"); + + Set valueSet = new HashSet<>(); + for (String tenant : tenantsToQuery) { + String rawJson = simpleHttpClient.get("search/instances/facets", queryParams, tenant); + DocumentContext parsedJson = JsonPath.parse(rawJson); + List values = parsedJson.read("$.facets.languages.values.*.id"); + valueSet.addAll(values); + } + List values = new ArrayList<>(valueSet); List results = new ArrayList<>(); ObjectMapper mapper = diff --git a/src/main/java/org/folio/fqm/service/QueryManagementService.java b/src/main/java/org/folio/fqm/service/QueryManagementService.java index 663c9e6d..10a398df 100644 --- a/src/main/java/org/folio/fqm/service/QueryManagementService.java +++ b/src/main/java/org/folio/fqm/service/QueryManagementService.java @@ -191,7 +191,7 @@ public List> getContents(UUID entityTypeId, List fie fields.add(colName); } }); - List tenantsToQuery = crossTenantQueryService.getTenantsToQuery(entityType, false); + List tenantsToQuery = crossTenantQueryService.getTenantsToQuery(entityType); return resultSetService.getResultSet(entityTypeId, fields, ids, tenantsToQuery); } @@ -199,7 +199,7 @@ private List> getContents(UUID queryId, UUID entityTypeId, L if (includeResults) { EntityType entityType = entityTypeService.getEntityTypeDefinition(entityTypeId, true, false); List> resultIds = queryResultsRepository.getQueryResultIds(queryId, offset, limit); - List tenantsToQuery = crossTenantQueryService.getTenantsToQuery(entityType, false); + List tenantsToQuery = crossTenantQueryService.getTenantsToQuery(entityType); return resultSetService.getResultSet(entityTypeId, fields, resultIds, tenantsToQuery); } return List.of(); diff --git a/src/main/java/org/folio/fqm/service/QueryProcessorService.java b/src/main/java/org/folio/fqm/service/QueryProcessorService.java index 7fb1b804..cc05587b 100644 --- a/src/main/java/org/folio/fqm/service/QueryProcessorService.java +++ b/src/main/java/org/folio/fqm/service/QueryProcessorService.java @@ -76,7 +76,7 @@ public void getIdsInBatch(FqlQueryWithContext fqlQueryWithContext, public List> processQuery(EntityType entityType, String fqlQuery, List fields, List afterId, Integer limit) { Fql fql = fqlService.getFql(fqlQuery); boolean ecsEnabled = crossTenantQueryService.ecsEnabled(); - List tenantsToQuery = crossTenantQueryService.getTenantsToQuery(entityType, false); + List tenantsToQuery = crossTenantQueryService.getTenantsToQuery(entityType); return resultSetRepository.getResultSetSync( UUID.fromString(entityType.getId()), fql, diff --git a/src/test/java/org/folio/fqm/service/CrossTenantQueryServiceTest.java b/src/test/java/org/folio/fqm/service/CrossTenantQueryServiceTest.java index ee7d7324..fe02a47c 100644 --- a/src/test/java/org/folio/fqm/service/CrossTenantQueryServiceTest.java +++ b/src/test/java/org/folio/fqm/service/CrossTenantQueryServiceTest.java @@ -24,6 +24,7 @@ class CrossTenantQueryServiceTest { private static final EntityType entityType = new EntityType() + .id(UUID.randomUUID().toString()) .crossTenantQueriesEnabled(true); @Mock @@ -102,7 +103,7 @@ void shouldGetListOfTenantsToQuery() { when(userTenantService.getUserTenantsResponse(tenantId)).thenReturn(ECS_TENANT_INFO); when(ecsClient.get(eq("consortia/bdaa4720-5e11-4632-bc10-d4455cf252df/user-tenants"), anyMap())).thenReturn(USER_TENANT_JSON); - List actualTenants = crossTenantQueryService.getTenantsToQuery(entityType, false); + List actualTenants = crossTenantQueryService.getTenantsToQuery(entityType); assertEquals(expectedTenants, actualTenants); } @@ -112,7 +113,7 @@ void shouldRunIntraTenantQueryForNonInstanceEntityTypes() { List expectedTenants = List.of("tenant_01"); when(executionContext.getTenantId()).thenReturn("tenant_01"); - List actualTenants = crossTenantQueryService.getTenantsToQuery(nonEcsEntityType, false); + List actualTenants = crossTenantQueryService.getTenantsToQuery(nonEcsEntityType); assertEquals(expectedTenants, actualTenants); } @@ -122,7 +123,7 @@ void shouldRunIntraTenantQueryForNonCentralTenant() { List expectedTenants = List.of(tenantId); when(executionContext.getTenantId()).thenReturn(tenantId); // Central is tenant_01 when(userTenantService.getUserTenantsResponse(tenantId)).thenReturn(ECS_TENANT_INFO); - List actualTenants = crossTenantQueryService.getTenantsToQuery(entityType, false); + List actualTenants = crossTenantQueryService.getTenantsToQuery(entityType); assertEquals(expectedTenants, actualTenants); } @@ -132,7 +133,7 @@ void shouldRunIntraTenantQueryIfExceptionIsThrown() { List expectedTenants = List.of(tenantId); when(executionContext.getTenantId()).thenReturn(tenantId); when(userTenantService.getUserTenantsResponse(tenantId)).thenReturn(ECS_TENANT_INFO_FOR_NON_ECS_ENV); - List actualTenants = crossTenantQueryService.getTenantsToQuery(entityType, false); + List actualTenants = crossTenantQueryService.getTenantsToQuery(entityType); assertEquals(expectedTenants, actualTenants); } @@ -144,7 +145,7 @@ void shouldReturnTenantIdOnlyIfUserTenantsApiThrowsException() { when(executionContext.getTenantId()).thenReturn(tenantId); when(userTenantService.getUserTenantsResponse(tenantId)).thenReturn(ECS_TENANT_INFO_FOR_NON_ECS_ENV); - List actualTenants = crossTenantQueryService.getTenantsToQuery(entityType, false); + List actualTenants = crossTenantQueryService.getTenantsToQuery(entityType); assertEquals(expectedTenants, actualTenants); } @@ -156,7 +157,7 @@ void shouldAttemptCrossTenantQueryIfForceParamIsTrue() { when(executionContext.getTenantId()).thenReturn(tenantId); when(userTenantService.getUserTenantsResponse(tenantId)).thenReturn(ECS_TENANT_INFO_FOR_NON_ECS_ENV); - List actualTenants = crossTenantQueryService.getTenantsToQuery(entityType, true); + List actualTenants = crossTenantQueryService.getTenantsToQuery(entityType); verify(userTenantService, times(1)).getUserTenantsResponse(tenantId); assertEquals(expectedTenants, actualTenants); } @@ -171,7 +172,7 @@ void shouldNotQueryTenantIfUserLacksTenantPermissions() { when(ecsClient.get(eq("consortia/bdaa4720-5e11-4632-bc10-d4455cf252df/user-tenants"), anyMap())).thenReturn(USER_TENANT_JSON); doNothing().when(permissionsService).verifyUserHasNecessaryPermissions("tenant_02", entityType, true); doThrow(MissingPermissionsException.class).when(permissionsService).verifyUserHasNecessaryPermissions("tenant_03", entityType, true); - List actualTenants = crossTenantQueryService.getTenantsToQuery(entityType, false); + List actualTenants = crossTenantQueryService.getTenantsToQuery(entityType); assertEquals(expectedTenants, actualTenants); } @@ -186,7 +187,20 @@ void shouldQueryCentralTenantForSharedCompositeInstances() { when(executionContext.getTenantId()).thenReturn(tenantId); when(userTenantService.getUserTenantsResponse(tenantId)).thenReturn(ECS_TENANT_INFO); - List actualTenants = crossTenantQueryService.getTenantsToQuery(instanceEntityType, false); + List actualTenants = crossTenantQueryService.getTenantsToQuery(instanceEntityType); + assertEquals(expectedTenants, actualTenants); + } + + @Test + void shouldGetListOfTenantsToQueryForColumnValues() { + String tenantId = "tenant_01"; + List expectedTenants = List.of("tenant_01", "tenant_02", "tenant_03"); + + when(executionContext.getTenantId()).thenReturn(tenantId); + when(userTenantService.getUserTenantsResponse(tenantId)).thenReturn(ECS_TENANT_INFO); + when(ecsClient.get(eq("consortia/bdaa4720-5e11-4632-bc10-d4455cf252df/user-tenants"), anyMap())).thenReturn(USER_TENANT_JSON); + + List actualTenants = crossTenantQueryService.getTenantsToQueryForColumnValues(entityType); assertEquals(expectedTenants, actualTenants); } diff --git a/src/test/java/org/folio/fqm/service/EntityTypeServiceTest.java b/src/test/java/org/folio/fqm/service/EntityTypeServiceTest.java index 6855b134..a571c2f7 100644 --- a/src/test/java/org/folio/fqm/service/EntityTypeServiceTest.java +++ b/src/test/java/org/folio/fqm/service/EntityTypeServiceTest.java @@ -1,5 +1,6 @@ package org.folio.fqm.service; +import feign.FeignException; import org.folio.fqm.client.SimpleHttpClient; import org.folio.fqm.repository.EntityTypeRepository; import org.folio.fqm.testutil.TestDataFixture; @@ -329,6 +330,7 @@ void shouldRemoveDuplicatePredefinedValues() { void shouldReturnValuesFromApi() { UUID entityTypeId = UUID.randomUUID(); String valueColumnName = "column_name"; + List tenantList = List.of("tenant_01", "tenant_02"); EntityType entityType = new EntityType() .id(entityTypeId.toString()) .name("the entity type") @@ -341,8 +343,9 @@ void shouldReturnValuesFromApi() { ) )); + when(crossTenantQueryService.getTenantsToQueryForColumnValues(entityType)).thenReturn(tenantList); when(entityTypeFlatteningService.getFlattenedEntityType(entityTypeId, null)).thenReturn(entityType); - when(simpleHttpClient.get(eq("fake-path"), anyMap())).thenReturn(""" + when(simpleHttpClient.get(eq("fake-path"), anyMap(), eq("tenant_01"))).thenReturn(""" { "what": { "ever": { @@ -364,6 +367,7 @@ void shouldReturnValuesFromApi() { } } """); + when(simpleHttpClient.get(eq("fake-path"), anyMap(), eq("tenant_02"))).thenThrow(FeignException.Unauthorized.class); ColumnValues actualColumnValueLabel = entityTypeService.getFieldValues(entityTypeId, valueColumnName, "r"); @@ -377,6 +381,7 @@ void shouldReturnValuesFromApi() { @Test void shouldReturnLanguagesFromApi() { UUID entityTypeId = UUID.randomUUID(); + List tenantList = List.of("tenant_01"); String valueColumnName = "languages"; EntityType entityType = new EntityType() .id(entityTypeId.toString()) @@ -389,7 +394,8 @@ void shouldReturnLanguagesFromApi() { )); when(entityTypeFlatteningService.getFlattenedEntityType(entityTypeId, null)).thenReturn(entityType); - when(simpleHttpClient.get(eq("search/instances/facets"), anyMap())).thenReturn(""" + when(crossTenantQueryService.getTenantsToQueryForColumnValues(entityType)).thenReturn(tenantList); + when(simpleHttpClient.get(eq("search/instances/facets"), anyMap(), eq("tenant_01"))).thenReturn(""" { "facets": { "languages": { @@ -430,6 +436,7 @@ void shouldReturnLanguagesFromApi() { @Test void shouldReturnLocalizedLanguagesFromApi() { UUID entityTypeId = UUID.randomUUID(); + List tenantList = List.of("tenant_01"); String valueColumnName = "languages"; EntityType entityType = new EntityType() .id(entityTypeId.toString()) @@ -442,7 +449,8 @@ void shouldReturnLocalizedLanguagesFromApi() { )); when(entityTypeFlatteningService.getFlattenedEntityType(entityTypeId, null)).thenReturn(entityType); - when(simpleHttpClient.get(eq("search/instances/facets"), anyMap())).thenReturn(""" + when(crossTenantQueryService.getTenantsToQueryForColumnValues(entityType)).thenReturn(tenantList); + when(simpleHttpClient.get(eq("search/instances/facets"), anyMap(), eq("tenant_01"))).thenReturn(""" { "facets": { "languages": { @@ -575,6 +583,7 @@ void shouldReturnCurrencies() { void shouldReturnTenantId() { UUID entityTypeId = UUID.randomUUID(); String valueColumnName = "this_is_a_tenant_id_column"; + List tenantList = List.of("tenant1", "tenant2"); EntityType entityType = new EntityType() .id(entityTypeId.toString()) .name("tenant-id-test") @@ -586,7 +595,7 @@ void shouldReturnTenantId() { )); when(entityTypeFlatteningService.getFlattenedEntityType(entityTypeId, null)).thenReturn(entityType); - when(crossTenantQueryService.getTenantsToQuery(entityType, true)).thenReturn(List.of("tenant1", "tenant2")); + when(crossTenantQueryService.getTenantsToQueryForColumnValues(entityType)).thenReturn(tenantList); List actualColumnValues = entityTypeService .getFieldValues(entityTypeId, valueColumnName, "") @@ -612,7 +621,7 @@ void shouldIncludeCentralTenantIdInResponseForSimpleInstanceEntityType() { )); when(entityTypeFlatteningService.getFlattenedEntityType(entityTypeId, null)).thenReturn(entityType); - when(crossTenantQueryService.getTenantsToQuery(entityType, true)).thenReturn(List.of("tenant1", "central")); + when(crossTenantQueryService.getTenantsToQueryForColumnValues(entityType)).thenReturn(List.of("tenant1", "central")); List actualColumnValues = entityTypeService .getFieldValues(entityTypeId, valueColumnName, "") diff --git a/src/test/java/org/folio/fqm/service/QueryManagementServiceTest.java b/src/test/java/org/folio/fqm/service/QueryManagementServiceTest.java index 70a473be..ae0071b1 100644 --- a/src/test/java/org/folio/fqm/service/QueryManagementServiceTest.java +++ b/src/test/java/org/folio/fqm/service/QueryManagementServiceTest.java @@ -239,7 +239,7 @@ void shouldReturnQueryDetailsWithContents() { when(queryRepository.getQuery(expectedQuery.queryId(), false)).thenReturn(Optional.of(expectedQuery)); when(queryResultsRepository.getQueryResultsCount(expectedQuery.queryId())).thenReturn(2); when(queryResultsRepository.getQueryResultIds(expectedQuery.queryId(), offset, limit)).thenReturn(resultIds); - when(crossTenantQueryService.getTenantsToQuery(any(), eq(false))).thenReturn(tenantIds); + when(crossTenantQueryService.getTenantsToQuery(any())).thenReturn(tenantIds); when(resultSetService.getResultSet(expectedQuery.entityTypeId(), expectedQuery.fields(), resultIds, tenantIds)).thenReturn(contents); Optional actualDetails = queryManagementService.getQuery(expectedQuery.queryId(), includeResults, offset, limit); assertEquals(expectedDetails, actualDetails); @@ -464,7 +464,7 @@ void shouldGetContents() { Map.of("id", UUID.randomUUID(), "field1", "value3", "field2", "value4") ); when(entityTypeService.getEntityTypeDefinition(entityTypeId,true, false)).thenReturn(entityType); - when(crossTenantQueryService.getTenantsToQuery(any(EntityType.class), eq(false))).thenReturn(tenantIds); + when(crossTenantQueryService.getTenantsToQuery(any(EntityType.class))).thenReturn(tenantIds); when(resultSetService.getResultSet(entityTypeId, fields, ids, tenantIds)).thenReturn(expectedContents); List> actualContents = queryManagementService.getContents(entityTypeId, fields, ids); assertEquals(expectedContents, actualContents); @@ -490,7 +490,7 @@ void shouldGetContentsWithIdsIfIdsNotProvided() { Map.of("id", UUID.randomUUID(), "field1", "value3", "field2", "value4") ); when(entityTypeService.getEntityTypeDefinition(entityTypeId, true, false)).thenReturn(entityType); - when(crossTenantQueryService.getTenantsToQuery(any(EntityType.class), eq(false))).thenReturn(tenantIds); + when(crossTenantQueryService.getTenantsToQuery(any(EntityType.class))).thenReturn(tenantIds); when(resultSetService.getResultSet(entityTypeId, expectedFields, ids, tenantIds)).thenReturn(expectedContents); List> actualContents = queryManagementService.getContents(entityTypeId, providedFields, ids); assertEquals(expectedContents, actualContents); diff --git a/src/test/java/org/folio/fqm/service/QueryProcessorServiceTest.java b/src/test/java/org/folio/fqm/service/QueryProcessorServiceTest.java index bdf55165..d1f8d565 100644 --- a/src/test/java/org/folio/fqm/service/QueryProcessorServiceTest.java +++ b/src/test/java/org/folio/fqm/service/QueryProcessorServiceTest.java @@ -117,7 +117,7 @@ void shouldRunSynchronousQueryAndReturnPaginatedResults() { Map.of("field1", "value1", "field2", "value4") ); when(fqlService.getFql(fqlQuery)).thenReturn(expectedFql); - when(crossTenantQueryService.getTenantsToQuery(entityType, false)).thenReturn(tenantIds); + when(crossTenantQueryService.getTenantsToQuery(entityType)).thenReturn(tenantIds); when(resultSetRepository.getResultSetSync(entityTypeId, expectedFql, fields, afterId, limit, tenantIds, false)).thenReturn(expectedContent); List> actualContent = service.processQuery(entityType, fqlQuery, fields, afterId, limit); assertEquals(expectedContent, actualContent); From 8ef929003aac619365bf921fa7770e2ec760b7fc Mon Sep 17 00:00:00 2001 From: FOLIO Translations Bot <38661258+folio-translations@users.noreply.github.com> Date: Thu, 10 Oct 2024 18:09:02 -0400 Subject: [PATCH 11/45] Lokalise: updates --- translations/mod-fqm-manager/ar.json | 37 +++++++------ translations/mod-fqm-manager/ber.json | 37 +++++++------ translations/mod-fqm-manager/ca.json | 37 +++++++------ translations/mod-fqm-manager/cs_CZ.json | 37 +++++++------ translations/mod-fqm-manager/da.json | 37 +++++++------ translations/mod-fqm-manager/de.json | 37 +++++++------ translations/mod-fqm-manager/en_GB.json | 37 +++++++------ translations/mod-fqm-manager/en_SE.json | 37 +++++++------ translations/mod-fqm-manager/en_US.json | 34 ++++++------ translations/mod-fqm-manager/es.json | 43 ++++++++------- translations/mod-fqm-manager/es_419.json | 37 +++++++------ translations/mod-fqm-manager/es_ES.json | 43 ++++++++------- translations/mod-fqm-manager/fr.json | 37 +++++++------ translations/mod-fqm-manager/fr_FR.json | 37 +++++++------ translations/mod-fqm-manager/he.json | 37 +++++++------ translations/mod-fqm-manager/hi_IN.json | 37 +++++++------ translations/mod-fqm-manager/hu.json | 37 +++++++------ translations/mod-fqm-manager/it_IT.json | 37 +++++++------ translations/mod-fqm-manager/ja.json | 61 +++++++++++---------- translations/mod-fqm-manager/ko.json | 37 +++++++------ translations/mod-fqm-manager/nb.json | 37 +++++++------ translations/mod-fqm-manager/nl.json | 37 +++++++------ translations/mod-fqm-manager/nn.json | 37 +++++++------ translations/mod-fqm-manager/pl.json | 37 +++++++------ translations/mod-fqm-manager/pt_BR.json | 39 +++++++------- translations/mod-fqm-manager/pt_PT.json | 37 +++++++------ translations/mod-fqm-manager/ru.json | 37 +++++++------ translations/mod-fqm-manager/sk.json | 37 +++++++------ translations/mod-fqm-manager/sv.json | 37 +++++++------ translations/mod-fqm-manager/ur.json | 37 +++++++------ translations/mod-fqm-manager/zh_CN.json | 67 ++++++++++++------------ translations/mod-fqm-manager/zh_TW.json | 37 +++++++------ 32 files changed, 611 insertions(+), 638 deletions(-) diff --git a/translations/mod-fqm-manager/ar.json b/translations/mod-fqm-manager/ar.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/ar.json +++ b/translations/mod-fqm-manager/ar.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/ber.json b/translations/mod-fqm-manager/ber.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/ber.json +++ b/translations/mod-fqm-manager/ber.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/ca.json b/translations/mod-fqm-manager/ca.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/ca.json +++ b/translations/mod-fqm-manager/ca.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/cs_CZ.json b/translations/mod-fqm-manager/cs_CZ.json index a2a2d695..49234f81 100644 --- a/translations/mod-fqm-manager/cs_CZ.json +++ b/translations/mod-fqm-manager/cs_CZ.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrativní poznámky", "entityType.simple_instance.alternative_titles": "Alternativní názvy", "entityType.simple_instance.cataloged_date": "Katalogizované datum", - "entityType.simple_instance.classifications": "Klasifikace", - "entityType.simple_instance.classifications.number": "Číslo", - "entityType.simple_instance.classifications.number._qualified": "Číslo klasifikace", - "entityType.simple_instance.classifications.type_id": "UUID typu", - "entityType.simple_instance.classifications.type_id._qualified": "UUID typu klasifikace", "entityType.simple_instance.complete_updated_date": "Dokončené datum aktualizace", - "entityType.simple_instance.contributors": "Autoři", - "entityType.simple_instance.contributors.contributor_name_type_id": "UUID typu jména autora", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Autoři UUID typu jména autora", - "entityType.simple_instance.contributors.contributor_type_id": "UUID typu autora", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Autoři UUID typu autora", - "entityType.simple_instance.contributors.contributor_type_text": "Typ textu autora", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Autoři typ textu autora", - "entityType.simple_instance.contributors.name": "Jméno", - "entityType.simple_instance.contributors.name._qualified": "Autoři jméno", - "entityType.simple_instance.contributors.primary": "Hlavní", - "entityType.simple_instance.contributors.primary._qualified": "Autoři hlavní", "entityType.simple_instance.created_at": "Datum vytvoření", "entityType.simple_instance.created_by": "Vytvořeno uživatelem UUID", "entityType.simple_instance.discovery_suppress": "Potlačení Objevování", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publikační role", "entityType.simple_instance.publication_frequency": "Četnost publikování", - "entityType.simple_instance.publication_period_end": "Rok ukončení publikace", - "entityType.simple_instance.publication_period_start": "Rok zahájení publikace", "entityType.simple_instance.publication_range": "Rozsah publikace", "entityType.simple_instance.series": "Série", "entityType.simple_instance.source": "Zdroj", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Typ zdroje", "entityType.composite_purchase_order_lines._shortened": "ŘNO", "entityType.simple_organization._shortened": "Org.", - "entityType.simple_instance.alternative_titles_ids": "Alternativní názvy – Typ UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternativní názvy – Typ UUID", + "entityType.simple_instance.contributor_type_id": "UUID typu autora", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Typ autora", + "entityType.simple_instance.contributor_name_type_id": "UUID typu jména autora", + "entityType.simple_instance.contributor_name_type": "Typ jména autora", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "UUID typu klasifikace", + "entityType.simple_instance.classification_type_names": "Typ identifikátoru klasifikace", + "entityType.simple_instance.classification_numbers": "Klasifikace", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Datum 1", + "entityType.simple_instance.instance_date_2": "Datum 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Jméno", + "entityType.simple_instance_date_type.code": "Kód" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/da.json b/translations/mod-fqm-manager/da.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/da.json +++ b/translations/mod-fqm-manager/da.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/de.json b/translations/mod-fqm-manager/de.json index ed6a3769..34883d3f 100644 --- a/translations/mod-fqm-manager/de.json +++ b/translations/mod-fqm-manager/de.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/en_GB.json b/translations/mod-fqm-manager/en_GB.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/en_GB.json +++ b/translations/mod-fqm-manager/en_GB.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/en_SE.json b/translations/mod-fqm-manager/en_SE.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/en_SE.json +++ b/translations/mod-fqm-manager/en_SE.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/en_US.json b/translations/mod-fqm-manager/en_US.json index 75e3e553..8df23f9c 100644 --- a/translations/mod-fqm-manager/en_US.json +++ b/translations/mod-fqm-manager/en_US.json @@ -700,18 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors_name": "Contributor name", - "entityType.simple_instance.contributor_type_text": "Contributor type", - "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributor_name_type": "Contributor name type", - "entityType.simple_instance.instance_primary_contributor": "Primary contributor", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -760,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1476,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" -} + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" +} \ No newline at end of file diff --git a/translations/mod-fqm-manager/es.json b/translations/mod-fqm-manager/es.json index 1e04053b..77772dd7 100644 --- a/translations/mod-fqm-manager/es.json +++ b/translations/mod-fqm-manager/es.json @@ -6,10 +6,10 @@ "entityType.src_inventory_location.id": "Id", "entityType.src_inventory_location.location_name": "Location name", "entityType.src_inventory_location.location_code": "Location code", - "entityType.src_inventory_service_point": "Service point", + "entityType.src_inventory_service_point": "Punto de servicio", "entityType.src_inventory_service_point.id": "Id", - "entityType.src_inventory_service_point.service_point_name": "Service point name", - "entityType.src_inventory_service_point.service_point_code": "Service point code", + "entityType.src_inventory_service_point.service_point_name": "Nombre punto de servicio", + "entityType.src_inventory_service_point.service_point_code": "Código punto de servicio", "entityType.src_inventory_loclibrary": "Loclibrary", "entityType.src_inventory_loclibrary.id": "Id", "entityType.src_inventory_loclibrary.loclibrary_name": "Loclibrary name", @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/es_419.json b/translations/mod-fqm-manager/es_419.json index 9a9e2dfa..77772dd7 100644 --- a/translations/mod-fqm-manager/es_419.json +++ b/translations/mod-fqm-manager/es_419.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/es_ES.json b/translations/mod-fqm-manager/es_ES.json index 1e04053b..77772dd7 100644 --- a/translations/mod-fqm-manager/es_ES.json +++ b/translations/mod-fqm-manager/es_ES.json @@ -6,10 +6,10 @@ "entityType.src_inventory_location.id": "Id", "entityType.src_inventory_location.location_name": "Location name", "entityType.src_inventory_location.location_code": "Location code", - "entityType.src_inventory_service_point": "Service point", + "entityType.src_inventory_service_point": "Punto de servicio", "entityType.src_inventory_service_point.id": "Id", - "entityType.src_inventory_service_point.service_point_name": "Service point name", - "entityType.src_inventory_service_point.service_point_code": "Service point code", + "entityType.src_inventory_service_point.service_point_name": "Nombre punto de servicio", + "entityType.src_inventory_service_point.service_point_code": "Código punto de servicio", "entityType.src_inventory_loclibrary": "Loclibrary", "entityType.src_inventory_loclibrary.id": "Id", "entityType.src_inventory_loclibrary.loclibrary_name": "Loclibrary name", @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/fr.json b/translations/mod-fqm-manager/fr.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/fr.json +++ b/translations/mod-fqm-manager/fr.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/fr_FR.json b/translations/mod-fqm-manager/fr_FR.json index 4c93f2ef..c82a41d8 100644 --- a/translations/mod-fqm-manager/fr_FR.json +++ b/translations/mod-fqm-manager/fr_FR.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Notes administratives", "entityType.simple_instance.alternative_titles": "Titres alternatifs", "entityType.simple_instance.cataloged_date": "Date de catalogage", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Numéro", - "entityType.simple_instance.classifications.number._qualified": "Numéro de classification", - "entityType.simple_instance.classifications.type_id": "UUID du type", - "entityType.simple_instance.classifications.type_id._qualified": "UUID du type de classification", "entityType.simple_instance.complete_updated_date": "Date de mise à jour intégrale", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Nom", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Principal", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Créé à", "entityType.simple_instance.created_by": "Créé par UUID utilisateur", "entityType.simple_instance.discovery_suppress": "Masquer dans l'outil de découverte", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Rôle", "entityType.simple_instance.publication.role._qualified": "Rôle de publication", "entityType.simple_instance.publication_frequency": "Fréquence de publication", - "entityType.simple_instance.publication_period_end": "Année de fin de parution", - "entityType.simple_instance.publication_period_start": "Année de début de parution", "entityType.simple_instance.publication_range": "Période de publication", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/he.json b/translations/mod-fqm-manager/he.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/he.json +++ b/translations/mod-fqm-manager/he.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/hi_IN.json b/translations/mod-fqm-manager/hi_IN.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/hi_IN.json +++ b/translations/mod-fqm-manager/hi_IN.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/hu.json b/translations/mod-fqm-manager/hu.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/hu.json +++ b/translations/mod-fqm-manager/hu.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/it_IT.json b/translations/mod-fqm-manager/it_IT.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/it_IT.json +++ b/translations/mod-fqm-manager/it_IT.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/ja.json b/translations/mod-fqm-manager/ja.json index 2acb005c..ab4792c7 100644 --- a/translations/mod-fqm-manager/ja.json +++ b/translations/mod-fqm-manager/ja.json @@ -30,12 +30,12 @@ "entityType.src_acquisitions_unit": "収集ユニット", "entityType.src_acquisitions_unit.id": "ID", "entityType.src_acquisitions_unit.acquisitions_name": "Acquisitions names", - "entityType.src_inventory_contributor_type": "Contributor type", + "entityType.src_inventory_contributor_type": "寄与者タイプ", "entityType.src_inventory_contributor_type.id": "Id", - "entityType.src_inventory_contributor_type.contributor_type": "Contributor type", - "entityType.src_inventory_contributor_name_type": "Contributor name type", + "entityType.src_inventory_contributor_type.contributor_type": "寄与者タイプ", + "entityType.src_inventory_contributor_name_type": "寄与者名称タイプ", "entityType.src_inventory_contributor_name_type.id": "Id", - "entityType.src_inventory_contributor_name_type.contributor_name_type": "Contributor name type", + "entityType.src_inventory_contributor_name_type.contributor_name_type": "寄与者名称タイプ", "entityType.src_organization_type": "組織タイプ", "entityType.src_organization_type.id": "ID", "entityType.src_organization_type.organization_types_name": "タイプ", @@ -79,7 +79,7 @@ "entityType.drv_config_data_details.updated_date": "更新日", "entityType.drv_config_data_details.user_id": "ユーザー ID", "entityType.drv_config_data_details.value": "値", - "entityType.drv_contributor_name_type_details": "Contributor name type", + "entityType.drv_contributor_name_type_details": "寄与者名称タイプ", "entityType.drv_contributor_name_type_details.created_by_user_id": "ユーザーIDによって作成された", "entityType.drv_contributor_name_type_details.created_by_username": "ユーザー名によって作成せれた", "entityType.drv_contributor_name_type_details.created_date": "作成日", @@ -90,7 +90,7 @@ "entityType.drv_contributor_name_type_details.updated_by_user_id": "ユーザーIDによって更新された", "entityType.drv_contributor_name_type_details.updated_by_username": "ユーザー名によって更新された", "entityType.drv_contributor_name_type_details.updated_date": "更新日", - "entityType.drv_contributor_type_details": "Contributor type", + "entityType.drv_contributor_type_details": "寄与者タイプ", "entityType.drv_contributor_type_details.code": "コード", "entityType.drv_contributor_type_details.created_by_user_id": "ユーザーIDによって作成された", "entityType.drv_contributor_type_details.created_by_username": "ユーザー名によって作成せれた", @@ -278,7 +278,7 @@ "entityType.drv_invoices_details.disbursement_date": "Disbursement date", "entityType.drv_invoices_details.disbursement_number": "Disbursement number", "entityType.drv_invoices_details.enclosure_needed": "Enclosure needed", - "entityType.drv_invoices_details.exchange_rate": "Exchange rate", + "entityType.drv_invoices_details.exchange_rate": "為替レート", "entityType.drv_invoices_details.export_to_accounting": "Export to accounting", "entityType.drv_invoices_details.fiscal_year_id": "会計年度 ID", "entityType.drv_invoices_details.folio_invoice_no": "FOLIO請求書番号", @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "分類", - "entityType.simple_instance.classifications.number": "番号", - "entityType.simple_instance.classifications.number._qualified": "分類番号", - "entityType.simple_instance.classifications.type_id": "タイプ UUID", - "entityType.simple_instance.classifications.type_id._qualified": "分類タイプ UUID", "entityType.simple_instance.complete_updated_date": "更新完了日", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "名称", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "ユーザーUUIDによって作成された", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "役割", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "発行頻度", - "entityType.simple_instance.publication_period_end": "出版終了年", - "entityType.simple_instance.publication_period_start": "出版開始年", "entityType.simple_instance.publication_range": "出版範囲", "entityType.simple_instance.series": "シリーズ", "entityType.simple_instance.source": "ソース", @@ -1119,11 +1101,11 @@ "entityType.simple_purchase_order_line.claims.sent": "Sent", "entityType.simple_purchase_order_line.claims.sent._qualified": "Claims sent", "entityType.simple_purchase_order_line.collection": "Is collection", - "entityType.simple_purchase_order_line.contributors": "Contributors", - "entityType.simple_purchase_order_line.contributors.contributor": "Contributor", - "entityType.simple_purchase_order_line.contributors.contributor._qualified": "Contributors name", + "entityType.simple_purchase_order_line.contributors": "寄与者", + "entityType.simple_purchase_order_line.contributors.contributor": "寄与者", + "entityType.simple_purchase_order_line.contributors.contributor._qualified": "寄与者名称", "entityType.simple_purchase_order_line.contributors.contributor_name_type_id": "名称タイプ UUID", - "entityType.simple_purchase_order_line.contributors.contributor_name_type_id._qualified": "Contributors name type UUID", + "entityType.simple_purchase_order_line.contributors.contributor_name_type_id._qualified": "寄与者名称タイプ UUID", "entityType.simple_purchase_order_line.cost_additional_cost": "Cost additional", "entityType.simple_purchase_order_line.cost_currency": "Cost currency", "entityType.simple_purchase_order_line.cost_discount": "Cost discount", @@ -1410,7 +1392,7 @@ "entityType.simple_user_custom_field_details.entity_type": "Entity type", "entityType.simple_user_custom_field_details.help_text": "ヘルプテキスト", "entityType.simple_user_custom_field_details.id": "ID", - "entityType.simple_user_custom_field_details.is_repeatable": "Is repeatable", + "entityType.simple_user_custom_field_details.is_repeatable": "繰り返し可能", "entityType.simple_user_custom_field_details.name": "名称", "entityType.simple_user_custom_field_details.order": "発注", "entityType.simple_user_custom_field_details.ref_id": "Ref ID", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "リソースタイプ", "entityType.composite_purchase_order_lines._shortened": "発注明細", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "寄与者タイプ UUID", + "entityType.simple_instance.contributors_name": "寄与者名称", + "entityType.simple_instance.contributor_type_text": "寄与者タイプ", + "entityType.simple_instance.contributor_name_type_id": "寄与者名称タイプ UUID", + "entityType.simple_instance.contributor_name_type": "寄与者名称タイプ", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/ko.json b/translations/mod-fqm-manager/ko.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/ko.json +++ b/translations/mod-fqm-manager/ko.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/nb.json b/translations/mod-fqm-manager/nb.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/nb.json +++ b/translations/mod-fqm-manager/nb.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/nl.json b/translations/mod-fqm-manager/nl.json index 3d3313e3..976c0ae0 100644 --- a/translations/mod-fqm-manager/nl.json +++ b/translations/mod-fqm-manager/nl.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administratieve opmerkingen", "entityType.simple_instance.alternative_titles": "Alternatieve titels", "entityType.simple_instance.cataloged_date": "Datum gecatalogiseerd", - "entityType.simple_instance.classifications": "Classificaties", - "entityType.simple_instance.classifications.number": "Aantal", - "entityType.simple_instance.classifications.number._qualified": "Classificatienummer", - "entityType.simple_instance.classifications.type_id": "Soort UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classificatie type UUID", "entityType.simple_instance.complete_updated_date": "Volledige datum Update", - "entityType.simple_instance.contributors": "Bijdragers", - "entityType.simple_instance.contributors.contributor_name_type_id": "Type naam bijdrager UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Bijdragers naam Bijdrager type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Type bijdrager UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Bijdragers type Bijdrager UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Bijdragers type tekst", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Bijdragers Bijdragers type tekst", - "entityType.simple_instance.contributors.name": "Naam", - "entityType.simple_instance.contributors.name._qualified": "Naam Bijdragers", - "entityType.simple_instance.contributors.primary": "Primair", - "entityType.simple_instance.contributors.primary._qualified": "Bijdragers Primair", "entityType.simple_instance.created_at": "Aangemaakt op", "entityType.simple_instance.created_by": "Gemaakt door gebruiker UUID", "entityType.simple_instance.discovery_suppress": "Onderdrukken in discovery", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Rol", "entityType.simple_instance.publication.role._qualified": "Rol in publicatie", "entityType.simple_instance.publication_frequency": "Publicatiefrequentie", - "entityType.simple_instance.publication_period_end": "Eindjaar publicatie", - "entityType.simple_instance.publication_period_start": "Startjaar publicatie", "entityType.simple_instance.publication_range": "Publicatiebereik", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Bron", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Type bron", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/nn.json b/translations/mod-fqm-manager/nn.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/nn.json +++ b/translations/mod-fqm-manager/nn.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/pl.json b/translations/mod-fqm-manager/pl.json index 5552d1ab..558bb710 100644 --- a/translations/mod-fqm-manager/pl.json +++ b/translations/mod-fqm-manager/pl.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Główny", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Źródło", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/pt_BR.json b/translations/mod-fqm-manager/pt_BR.json index 32d8dbd8..73803372 100644 --- a/translations/mod-fqm-manager/pt_BR.json +++ b/translations/mod-fqm-manager/pt_BR.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Notas administrativas", "entityType.simple_instance.alternative_titles": "Títulos alternativos", "entityType.simple_instance.cataloged_date": "Data da catalogação", - "entityType.simple_instance.classifications": "Classificações", - "entityType.simple_instance.classifications.number": "Número", - "entityType.simple_instance.classifications.number._qualified": "Número de classificação", - "entityType.simple_instance.classifications.type_id": "UUID de tipo", - "entityType.simple_instance.classifications.type_id._qualified": "UUID do tipo de classificação", "entityType.simple_instance.complete_updated_date": "Data de atualização completa", - "entityType.simple_instance.contributors": "Colaboradores", - "entityType.simple_instance.contributors.contributor_name_type_id": "UUID do tipo de nome do colaborado", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Colaboradores - UUID do tipo de colaborador", - "entityType.simple_instance.contributors.contributor_type_id": "UUID do tipo de colaborador", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Colaboradores - UUID do tipo de colaborador", - "entityType.simple_instance.contributors.contributor_type_text": "Texto do tipo de colaborador", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Colaboradores - Texto do tipo de colaborador", - "entityType.simple_instance.contributors.name": "Nome", - "entityType.simple_instance.contributors.name._qualified": "Nome dos colaboradores", - "entityType.simple_instance.contributors.primary": "Primário", - "entityType.simple_instance.contributors.primary._qualified": "Colaboradores primários", "entityType.simple_instance.created_at": "Data de criação", "entityType.simple_instance.created_by": "Criado por usuário de UUID", "entityType.simple_instance.discovery_suppress": "Ocultar da descoberta", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Função", "entityType.simple_instance.publication.role._qualified": "Função da publicação", "entityType.simple_instance.publication_frequency": "Frequência de publicação", - "entityType.simple_instance.publication_period_end": "Ano final da publicação", - "entityType.simple_instance.publication_period_start": "Ano de início da publicação", "entityType.simple_instance.publication_range": "Intervalo de publicação", "entityType.simple_instance.series": "Série", "entityType.simple_instance.source": "Fonte", @@ -777,7 +759,7 @@ "entityType.simple_instance.status_updated_date": "Data de atualização do status", "entityType.simple_instance.subjects": "Cabeçalhos de assunto", "entityType.simple_instance.tags": "Tags", - "entityType.simple_instance.title": "Título", + "entityType.simple_instance.title": "Título do recurso", "entityType.simple_instance.updated_at": "Data de atualização", "entityType.simple_instance.updated_by": "Atualizado por usuário de UUID", "entityType.simple_instance.version": "Versão do registro", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Tipo de recurso", "entityType.composite_purchase_order_lines._shortened": "Linha do Pedido de Compra", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Títulos alternativos - Tipo UUID", + "entityType.simple_instance.contributor_type_id": "UUID do tipo de colaborador", + "entityType.simple_instance.contributors_name": "Nome do colaborador", + "entityType.simple_instance.contributor_type_text": "Tipo de colaborador", + "entityType.simple_instance.contributor_name_type_id": "UUID do tipo de nome do colaborador", + "entityType.simple_instance.contributor_name_type": "Tipo de nome do colaborador", + "entityType.simple_instance.instance_primary_contributor": "Colaborador principal", + "entityType.simple_instance.classification_type_ids": "UUIDs do tipo de classificação", + "entityType.simple_instance.classification_type_names": "Tipo de identificador de classificação", + "entityType.simple_instance.classification_numbers": "Classificação", + "entityType.composite_instances.date_type": "Tipo de data da instância", + "entityType.simple_instance.instance_date_1": "Data 1", + "entityType.simple_instance.instance_date_2": "Data 2", + "entityType.simple_instance.instance_date_type_id": "ID do tipo de data", + "entityType.simple_instance_date_type": "Tipo de data da instância", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Nome", + "entityType.simple_instance_date_type.code": "Código" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/pt_PT.json b/translations/mod-fqm-manager/pt_PT.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/pt_PT.json +++ b/translations/mod-fqm-manager/pt_PT.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/ru.json b/translations/mod-fqm-manager/ru.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/ru.json +++ b/translations/mod-fqm-manager/ru.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/sk.json b/translations/mod-fqm-manager/sk.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/sk.json +++ b/translations/mod-fqm-manager/sk.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/sv.json b/translations/mod-fqm-manager/sv.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/sv.json +++ b/translations/mod-fqm-manager/sv.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/ur.json b/translations/mod-fqm-manager/ur.json index 27d1312f..8df23f9c 100644 --- a/translations/mod-fqm-manager/ur.json +++ b/translations/mod-fqm-manager/ur.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/zh_CN.json b/translations/mod-fqm-manager/zh_CN.json index 4feba0c4..8bf0e7f8 100644 --- a/translations/mod-fqm-manager/zh_CN.json +++ b/translations/mod-fqm-manager/zh_CN.json @@ -700,24 +700,8 @@ "entityType.simple_instance.administrative_notes": "管理说明", "entityType.simple_instance.alternative_titles": "交替题名", "entityType.simple_instance.cataloged_date": "编目日期", - "entityType.simple_instance.classifications": "分类", - "entityType.simple_instance.classifications.number": "编号", - "entityType.simple_instance.classifications.number._qualified": "分类号", - "entityType.simple_instance.classifications.type_id": "类型 UUID", - "entityType.simple_instance.classifications.type_id._qualified": "分类类型UUID", "entityType.simple_instance.complete_updated_date": "完整更新日期", - "entityType.simple_instance.contributors": "贡献者", - "entityType.simple_instance.contributors.contributor_name_type_id": "贡献者名称类型UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "贡献者 贡献者名称类型UUID", - "entityType.simple_instance.contributors.contributor_type_id": "贡献者类型UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "贡献者 贡献者类型UUID", - "entityType.simple_instance.contributors.contributor_type_text": "贡献者类型 文本", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "贡献者 贡献者类型 文本", - "entityType.simple_instance.contributors.name": "名称", - "entityType.simple_instance.contributors.name._qualified": "贡献者名称", - "entityType.simple_instance.contributors.primary": "主要", - "entityType.simple_instance.contributors.primary._qualified": "主要贡献者", - "entityType.simple_instance.created_at": "创建于", + "entityType.simple_instance.created_at": "创建日期", "entityType.simple_instance.created_by": "由用户UUID创建", "entityType.simple_instance.discovery_suppress": "在发现中隐藏", "entityType.simple_instance.editions": "版本", @@ -741,7 +725,7 @@ "entityType.simple_instance.identifiers.value._qualified": "标识符值", "entityType.simple_instance.index_title": "索引标题", "entityType.simple_instance.instance_format_ids": "实例格式UUID", - "entityType.simple_instance.instance_type_id": "实例类型UUID", + "entityType.simple_instance.instance_type_id": "资源类型UUID", "entityType.simple_instance.languages": "语言", "entityType.simple_instance.match_key": "匹配键", "entityType.simple_instance.mode_of_issuance_id": "发行方式UUID", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "角色", "entityType.simple_instance.publication.role._qualified": "出版角色", "entityType.simple_instance.publication_frequency": "出版频率", - "entityType.simple_instance.publication_period_end": "出版结束年份", - "entityType.simple_instance.publication_period_start": "出版起始年份", "entityType.simple_instance.publication_range": "出版范围", "entityType.simple_instance.series": "丛编", "entityType.simple_instance.source": "来源", @@ -777,8 +759,8 @@ "entityType.simple_instance.status_updated_date": "状态更新日期", "entityType.simple_instance.subjects": "主题标题", "entityType.simple_instance.tags": "标签", - "entityType.simple_instance.title": "题名", - "entityType.simple_instance.updated_at": "更新于", + "entityType.simple_instance.title": "资源题名", + "entityType.simple_instance.updated_at": "更新日期", "entityType.simple_instance.updated_by": "由用户UUID更新", "entityType.simple_instance.version": "记录版本", "entityType.simple_loan_policy": "借阅政策", @@ -1215,7 +1197,7 @@ "entityType.simple_purchase_order_line.renewal_note": "续借附注", "entityType.simple_purchase_order_line.reporting_codes": "报告代码", "entityType.simple_purchase_order_line.requester": "请求者", - "entityType.simple_purchase_order_line.rush": "Is rush", + "entityType.simple_purchase_order_line.rush": "忙碌", "entityType.simple_purchase_order_line.search_location_ids": "搜索位置 ID", "entityType.simple_purchase_order_line.selector": "选择者", "entityType.simple_purchase_order_line.source": "来源", @@ -1470,16 +1452,33 @@ "migration.warning.REMOVED_FIELD.withoutAlternative": "字段{name}不再可用。可以改用{alternative} 。作为参考,您的原始查询是{fql} 。", "entityType.simple_instance.shared": "已共享", "entityType.simple_instance.tenant_id": "租户ID", - "entityType.simple_instance_status.name": "Term", - "entityType.simple_item_details.tenant_id": "Tenant ID", - "entityType.simple_holdings_records.tenant_id": "Tenant ID", - "entityType.simple_instance.format_names": "Format names", - "entityType.simple_instance.mode_of_issuance_name": "Mode of issuance", - "entityType.simple_mode_of_issuance": "Mode of issuance", + "entityType.simple_instance_status.name": "术语", + "entityType.simple_item_details.tenant_id": "租户ID", + "entityType.simple_holdings_records.tenant_id": "租户ID", + "entityType.simple_instance.format_names": "格式名称", + "entityType.simple_instance.mode_of_issuance_name": "发行方式", + "entityType.simple_mode_of_issuance": "发行方式", "entityType.simple_mode_of_issuance.id": "UUID", - "entityType.simple_mode_of_issuance.name": "Name", - "entityType.simple_instance.instance_type_name": "Resource type", - "entityType.composite_purchase_order_lines._shortened": "POL", - "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_mode_of_issuance.name": "名称", + "entityType.simple_instance.instance_type_name": "资源类型", + "entityType.composite_purchase_order_lines._shortened": "订单行", + "entityType.simple_organization._shortened": "组织", + "entityType.simple_instance.alternative_titles_ids": "交替题名 - 类型UUID", + "entityType.simple_instance.contributor_type_id": "贡献者类型UUID", + "entityType.simple_instance.contributors_name": "贡献者名称", + "entityType.simple_instance.contributor_type_text": "贡献者类型", + "entityType.simple_instance.contributor_name_type_id": "贡献者名称类型UUID", + "entityType.simple_instance.contributor_name_type": "贡献者名称类型", + "entityType.simple_instance.instance_primary_contributor": "主要贡献者", + "entityType.simple_instance.classification_type_ids": "分类类型UUID", + "entityType.simple_instance.classification_type_names": "分类标识符类型", + "entityType.simple_instance.classification_numbers": "分类", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file diff --git a/translations/mod-fqm-manager/zh_TW.json b/translations/mod-fqm-manager/zh_TW.json index 714453dd..b4b4b6e0 100644 --- a/translations/mod-fqm-manager/zh_TW.json +++ b/translations/mod-fqm-manager/zh_TW.json @@ -700,23 +700,7 @@ "entityType.simple_instance.administrative_notes": "Administrative notes", "entityType.simple_instance.alternative_titles": "Alternative titles", "entityType.simple_instance.cataloged_date": "Cataloged date", - "entityType.simple_instance.classifications": "Classifications", - "entityType.simple_instance.classifications.number": "Number", - "entityType.simple_instance.classifications.number._qualified": "Classification number", - "entityType.simple_instance.classifications.type_id": "Type UUID", - "entityType.simple_instance.classifications.type_id._qualified": "Classification type UUID", "entityType.simple_instance.complete_updated_date": "Complete updated date", - "entityType.simple_instance.contributors": "Contributors", - "entityType.simple_instance.contributors.contributor_name_type_id": "Contributor name type UUID", - "entityType.simple_instance.contributors.contributor_name_type_id._qualified": "Contributors contributor name type UUID", - "entityType.simple_instance.contributors.contributor_type_id": "Contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_id._qualified": "Contributors contributor type UUID", - "entityType.simple_instance.contributors.contributor_type_text": "Contributor type text", - "entityType.simple_instance.contributors.contributor_type_text._qualified": "Contributors contributor type text", - "entityType.simple_instance.contributors.name": "Name", - "entityType.simple_instance.contributors.name._qualified": "Contributors name", - "entityType.simple_instance.contributors.primary": "Primary", - "entityType.simple_instance.contributors.primary._qualified": "Contributors primary", "entityType.simple_instance.created_at": "Created date", "entityType.simple_instance.created_by": "Created by user UUID", "entityType.simple_instance.discovery_suppress": "Discovery suppress", @@ -765,8 +749,6 @@ "entityType.simple_instance.publication.role": "Role", "entityType.simple_instance.publication.role._qualified": "Publication role", "entityType.simple_instance.publication_frequency": "Publication frequency", - "entityType.simple_instance.publication_period_end": "Publication end year", - "entityType.simple_instance.publication_period_start": "Publication start year", "entityType.simple_instance.publication_range": "Publication range", "entityType.simple_instance.series": "Series", "entityType.simple_instance.source": "Source", @@ -1481,5 +1463,22 @@ "entityType.simple_instance.instance_type_name": "Resource type", "entityType.composite_purchase_order_lines._shortened": "POL", "entityType.simple_organization._shortened": "Orgs", - "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID" + "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", + "entityType.simple_instance.contributor_type_id": "Contributor type UUID", + "entityType.simple_instance.contributors_name": "Contributor name", + "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", + "entityType.simple_instance.contributor_name_type": "Contributor name type", + "entityType.simple_instance.instance_primary_contributor": "Primary contributor", + "entityType.simple_instance.classification_type_ids": "Classification type UUIDs", + "entityType.simple_instance.classification_type_names": "Classification identifier type", + "entityType.simple_instance.classification_numbers": "Classification", + "entityType.composite_instances.date_type": "Instance date type", + "entityType.simple_instance.instance_date_1": "Date 1", + "entityType.simple_instance.instance_date_2": "Date 2", + "entityType.simple_instance.instance_date_type_id": "Date type ID", + "entityType.simple_instance_date_type": "Instance date type", + "entityType.simple_instance_date_type.id": "ID", + "entityType.simple_instance_date_type.name": "Name", + "entityType.simple_instance_date_type.code": "Code" } \ No newline at end of file From 1511c3e6be10134ca3f52b86390afd4ded8e3ebf Mon Sep 17 00:00:00 2001 From: SvitlanaKovalova1 Date: Fri, 11 Oct 2024 14:42:01 +0300 Subject: [PATCH 12/45] MODFQMMGR-523 - Upgrade "holdings-storage" API --- NEWS.md | 1 + descriptors/ModuleDescriptor-template.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index b8b0dfd2..021af7b0 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,5 @@ # 2.0.x +- [MODFQMMGR-523](https://folio-org.atlassian.net/browse/MODFQMMGR-523) Upgrade `holdings-storage` to 8.0 ## 2.0.0 - [MODFQMMGR-87](https://folio-org.atlassian.net/browse/MODFQMMGR-87) Move FQM-specific code from lib-fqm-query-processor diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 12e22c69..c77c7cf8 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -230,7 +230,7 @@ }, { "id": "holdings-storage", - "version": "6.0 7.0" + "version": "6.0 7.0 8.0" }, { "id": "instance-storage", From 61274f5995d93fc423000cae6949915a7f2e597b Mon Sep 17 00:00:00 2001 From: bvsharp <97990858+bvsharp@users.noreply.github.com> Date: Fri, 11 Oct 2024 11:26:07 -0400 Subject: [PATCH 13/45] Filter empty language codes and catch exception from language API (#459) --- .../folio/fqm/service/EntityTypeService.java | 18 ++++++++----- .../fqm/service/EntityTypeServiceTest.java | 27 +++++++++++++++++++ 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/folio/fqm/service/EntityTypeService.java b/src/main/java/org/folio/fqm/service/EntityTypeService.java index fb38d4b2..7bc43434 100644 --- a/src/main/java/org/folio/fqm/service/EntityTypeService.java +++ b/src/main/java/org/folio/fqm/service/EntityTypeService.java @@ -259,10 +259,14 @@ private ColumnValues getLanguages(String searchText, List tenantsToQuery Set valueSet = new HashSet<>(); for (String tenant : tenantsToQuery) { - String rawJson = simpleHttpClient.get("search/instances/facets", queryParams, tenant); - DocumentContext parsedJson = JsonPath.parse(rawJson); - List values = parsedJson.read("$.facets.languages.values.*.id"); - valueSet.addAll(values); + try { + String rawJson = simpleHttpClient.get("search/instances/facets", queryParams, tenant); + DocumentContext parsedJson = JsonPath.parse(rawJson); + List values = parsedJson.read("$.facets.languages.values.*.id"); + valueSet.addAll(values); + } catch (FeignException.Unauthorized | FeignException.BadRequest e) { + log.error("Failed to get languages from {} tenant due to exception {}", tenant, e.getMessage()); + } } List values = new ArrayList<>(valueSet); @@ -274,8 +278,6 @@ private ColumnValues getLanguages(String searchText, List tenantsToQuery .enable(JsonReadFeature.ALLOW_UNQUOTED_FIELD_NAMES) .build(); - String classpath = System.getProperty("java.class.path"); - log.info("Classpath: {}", classpath); List> languages = List.of(); try(InputStream input = getClass().getClassLoader().getResourceAsStream(LANGUAGES_FILEPATH)) { languages = mapper.readValue(input, new TypeReference<>() { @@ -318,8 +320,10 @@ private ColumnValues getLanguages(String searchText, List tenantsToQuery label = languageLocale.getDisplayLanguage(folioLocale); } else if (StringUtils.isNotEmpty(name)) { label = name; - } else { + } else if (StringUtils.isNotEmpty(code)){ label = code; + } else { + continue; } if (label.toLowerCase().contains(searchText.toLowerCase())) { results.add(new ValueWithLabel().value(code).label(label)); diff --git a/src/test/java/org/folio/fqm/service/EntityTypeServiceTest.java b/src/test/java/org/folio/fqm/service/EntityTypeServiceTest.java index a571c2f7..f30cab31 100644 --- a/src/test/java/org/folio/fqm/service/EntityTypeServiceTest.java +++ b/src/test/java/org/folio/fqm/service/EntityTypeServiceTest.java @@ -23,6 +23,7 @@ import static java.util.Comparator.comparing; import static java.util.Comparator.nullsLast; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.times; @@ -466,6 +467,10 @@ void shouldReturnLocalizedLanguagesFromApi() { { "id": "mus", "value": "mus" + }, + { + "id": "", + "value": "" } ] } @@ -498,6 +503,28 @@ void shouldReturnLocalizedLanguagesFromApi() { assertEquals(expectedColumnValues, actualColumnValueLabel); } + @Test + void shouldCatchExceptionFromLanguagesApi() { + UUID entityTypeId = UUID.randomUUID(); + List tenantList = List.of("tenant_01"); + String valueColumnName = "languages"; + EntityType entityType = new EntityType() + .id(entityTypeId.toString()) + .name("the entity type") + .columns(List.of(new EntityTypeColumn() + .name(valueColumnName) + .source(new SourceColumn(entityTypeId, valueColumnName) + .name("languages") + .type(SourceColumn.TypeEnum.FQM)) + )); + + when(entityTypeFlatteningService.getFlattenedEntityType(entityTypeId, null)).thenReturn(entityType); + when(crossTenantQueryService.getTenantsToQueryForColumnValues(entityType)).thenReturn(tenantList); + when(simpleHttpClient.get(eq("search/instances/facets"), anyMap(), eq("tenant_01"))).thenThrow(FeignException.BadRequest.class); + + assertDoesNotThrow(() -> entityTypeService.getFieldValues(entityTypeId, valueColumnName, "")); + } + @Test void shouldReturnEntityTypeDefinition() { UUID entityTypeId = UUID.randomUUID(); From a0917e421070e9fb3f232e671cb459dfb8a96dcc Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Thu, 10 Oct 2024 17:22:33 -0500 Subject: [PATCH 14/45] adding valueSourApi for instance contributor --- .../migration/strategies/V0POCMigration.java | 2 +- .../inventory/simple_instance.json5 | 37 ++++++++++++------- translations/mod-fqm-manager/en.json | 2 +- translations/mod-fqm-manager/en_US.json | 4 +- 4 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/folio/fqm/migration/strategies/V0POCMigration.java b/src/main/java/org/folio/fqm/migration/strategies/V0POCMigration.java index 0e1bb33c..7d91d4f2 100644 --- a/src/main/java/org/folio/fqm/migration/strategies/V0POCMigration.java +++ b/src/main/java/org/folio/fqm/migration/strategies/V0POCMigration.java @@ -100,7 +100,7 @@ public class V0POCMigration extends AbstractSimpleMigrationStrategy { Map.entry("instance_source", "instance.source"), Map.entry("instance_primary_contributor", "instance.instance_primary_contributor"), Map.entry("instance_contributor_type_ids", "instance.contributors[*]->contributor_type_id"), - Map.entry("instance_contributor_type", "instance.contributors[*]->contributor_type_text"), + Map.entry("instance_contributor_type", "instance.contributors[*]->contributor_type"), Map.entry("instance_contributor_type_name_ids", "instance.contributors[*]->contributor_name_type_id"), Map.entry("instance_contributor_name_type", "instance.contributors[*]->name"), Map.entry("instance_language", "instance.languages") diff --git a/src/main/resources/entity-types/inventory/simple_instance.json5 b/src/main/resources/entity-types/inventory/simple_instance.json5 index 480f0f51..8f4f01ab 100644 --- a/src/main/resources/entity-types/inventory/simple_instance.json5 +++ b/src/main/resources/entity-types/inventory/simple_instance.json5 @@ -404,7 +404,7 @@ valueFunction: 'lower(:value)' }, { - name: 'contributor_type_text', + name: 'contributor_type', sourceAlias: 'inst', dataType: { dataType: 'arrayType', @@ -416,9 +416,19 @@ queryable: true, essential: true, visibleByDefault: false, - valueGetter: "(SELECT array_agg(elems.value->>'contributorTypeText') FILTER (WHERE (elems.value->>'contributorTypeText') IS NOT NULL) AS array_agg FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'contributorTypeText')) FILTER (WHERE (elems.value->>'contributorTypeText') IS NOT NULL) AS array_agg FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", - valueFunction: 'lower(:value)' + valueGetter: "(SELECT array_agg(a.jsonb ->> 'name') FILTER (WHERE (a.jsonb ->> 'name') IS NOT NULL) AS array_agg FROM jsonb_array_elements((:sourceAlias.jsonb -> 'contributors') -> 'contributorTypeId') AS record(value) JOIN src_inventory_contributor_type a ON (record.value::text) = a.id::text)", + filterValueGetter: "( SELECT array_agg(lower(a.jsonb ->> 'name'::text)) FILTER (WHERE (a.jsonb ->> 'name') IS NOT NULL) AS array_agg FROM jsonb_array_elements_text((:sourceAlias.jsonb -> 'contributors'::text) ->> 'contributorTypeId'::text) record(value) JOIN src_inventory_contributor_type a ON (record.value::text) = a.id::text)", + valueFunction: 'lower(:value)', + idColumnName: 'contributor_type_id', + source: { + columnName: 'contributor_type', + entityTypeId: '8fc4a9d2-7ccf-4233-afb8-796911839862', + }, + valueSourceApi: { + path: 'contributor-types', + valueJsonPath: '$.contributorTypes.*.id', + labelJsonPath: '$.contributorTypes.*.name', + } }, { name: "contributor_name_type_id", @@ -450,8 +460,18 @@ essential: true, visibleByDefault: false, valueFunction: "lower(:value)", + idColumnName: 'contributor_name_type_id', valueGetter: "(SELECT array_agg(a.jsonb ->> 'name') FILTER (WHERE (a.jsonb ->> 'name') IS NOT NULL) AS array_agg FROM jsonb_array_elements((:sourceAlias.jsonb -> 'contributors') -> 'contributorNameTypeId') AS record(value) JOIN src_inventory_contributor_name_type a ON (record.value::text) = a.id::text)", filterValueGetter: "( SELECT array_agg(lower(a.jsonb ->> 'name'::text)) FILTER (WHERE (a.jsonb ->> 'name') IS NOT NULL) AS array_agg FROM jsonb_array_elements_text((:sourceAlias.jsonb -> 'contributors'::text) ->> 'contributorNameTypeId'::text) record(value) JOIN src_inventory_contributor_name_type a ON (record.value::text) = a.id::text)", + source: { + columnName: 'contributor_name_type', + entityTypeId: '8fc4a9d2-7ccf-4233-afb8-796911839862', + }, + valueSourceApi: { + path: 'contributor-name-types', + valueJsonPath: '$.contributorNameTypes.*.id', + labelJsonPath: '$.contributorNameTypes.*.name', + } }, { name: "instance_primary_contributor", @@ -529,15 +549,6 @@ FROM jsonb_array_elements((:sourceAlias.jsonb -> 'classifications')) record(value) \ JOIN src_inventory_classification_type class_type ON (record.value ->> 'classificationTypeId') = class_type.id::text\ )", - source: { - columnName: 'classification_type_names', - entityTypeId: '8fc4a9d2-7ccf-4233-afb8-796911839862', - }, - valueSourceApi: { - path: 'classification-types', - valueJsonPath: '$.classificationTypes.*.id', - labelJsonPath: '$.classificationTypes.*.name', - } }, { name: 'classification_numbers', diff --git a/translations/mod-fqm-manager/en.json b/translations/mod-fqm-manager/en.json index 08a1d9b4..30e5eae6 100644 --- a/translations/mod-fqm-manager/en.json +++ b/translations/mod-fqm-manager/en.json @@ -644,7 +644,7 @@ "entityType.simple_instance.complete_updated_date": "Complete updated date", "entityType.simple_instance.contributor_type_id": "Contributor type UUID", "entityType.simple_instance.contributors_name": "Contributor name", - "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_type": "Contributor type", "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", "entityType.simple_instance.contributor_name_type": "Contributor name type", "entityType.simple_instance.instance_primary_contributor": "Primary contributor", diff --git a/translations/mod-fqm-manager/en_US.json b/translations/mod-fqm-manager/en_US.json index 8df23f9c..dbcd6436 100644 --- a/translations/mod-fqm-manager/en_US.json +++ b/translations/mod-fqm-manager/en_US.json @@ -1466,7 +1466,7 @@ "entityType.simple_instance.alternative_titles_ids": "Alternative titles - Type UUID", "entityType.simple_instance.contributor_type_id": "Contributor type UUID", "entityType.simple_instance.contributors_name": "Contributor name", - "entityType.simple_instance.contributor_type_text": "Contributor type", + "entityType.simple_instance.contributor_type": "Contributor type", "entityType.simple_instance.contributor_name_type_id": "Contributor name type UUID", "entityType.simple_instance.contributor_name_type": "Contributor name type", "entityType.simple_instance.instance_primary_contributor": "Primary contributor", @@ -1481,4 +1481,4 @@ "entityType.simple_instance_date_type.id": "ID", "entityType.simple_instance_date_type.name": "Name", "entityType.simple_instance_date_type.code": "Code" -} \ No newline at end of file +} From f0cb973dcc7ed4382313d88de40479b0986df285 Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Fri, 11 Oct 2024 13:55:13 -0500 Subject: [PATCH 15/45] Entity adjustments: simple_locations --- .../entity-types/inventory/composite_holdings_record.json5 | 7 +++++-- .../entity-types/inventory/composite_item_details.json5 | 3 +++ .../entity-types/inventory/simple_locations.json5 | 6 ++++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/resources/entity-types/inventory/composite_holdings_record.json5 b/src/main/resources/entity-types/inventory/composite_holdings_record.json5 index 728abcf4..b8cb5e01 100644 --- a/src/main/resources/entity-types/inventory/composite_holdings_record.json5 +++ b/src/main/resources/entity-types/inventory/composite_holdings_record.json5 @@ -13,7 +13,8 @@ { alias: 'effective_location', type: 'entity-type', - id: '74ddf1a6-19e0-4d63-baf0-cd2da9a46ca4', // simple_locations + id: '74ddf1a6-19e0-4d63-baf0-cd2da9a46ca4', // simple_locations, + essentialOnly: true, join: { type: 'left join', joinTo: 'holdings.hrd', @@ -34,6 +35,7 @@ alias: 'permanent_location', type: 'entity-type', id: '74ddf1a6-19e0-4d63-baf0-cd2da9a46ca4', // simple_locations + essentialOnly: true, join: { type: 'left join', joinTo: 'holdings.hrd', @@ -43,7 +45,8 @@ { alias: 'temporary_location', type: 'entity-type', - id: '74ddf1a6-19e0-4d63-baf0-cd2da9a46ca4', // simple_locations + id: '74ddf1a6-19e0-4d63-baf0-cd2da9a46ca4', // simple_locations, + essentialOnly: true, join: { type: 'left join', joinTo: 'holdings.hrd', diff --git a/src/main/resources/entity-types/inventory/composite_item_details.json5 b/src/main/resources/entity-types/inventory/composite_item_details.json5 index 6d4033d3..ea399cd1 100644 --- a/src/main/resources/entity-types/inventory/composite_item_details.json5 +++ b/src/main/resources/entity-types/inventory/composite_item_details.json5 @@ -14,6 +14,7 @@ alias: 'effective_location', type: 'entity-type', id: '74ddf1a6-19e0-4d63-baf0-cd2da9a46ca4', // simple_locations + essentialOnly: true, join: { type: 'left join', joinTo: 'items.item', @@ -54,6 +55,7 @@ alias: 'permanent_location', type: 'entity-type', id: '74ddf1a6-19e0-4d63-baf0-cd2da9a46ca4', // simple_locations + essentialOnly: true, join: { joinTo: 'items.item', type: 'left join', @@ -74,6 +76,7 @@ alias: 'temporary_location', type: 'entity-type', id: '74ddf1a6-19e0-4d63-baf0-cd2da9a46ca4', // simple_locations, + essentialOnly: true, join: { type: 'left join', joinTo: 'items.item', diff --git a/src/main/resources/entity-types/inventory/simple_locations.json5 b/src/main/resources/entity-types/inventory/simple_locations.json5 index 8ca1a93d..2a8e8d42 100644 --- a/src/main/resources/entity-types/inventory/simple_locations.json5 +++ b/src/main/resources/entity-types/inventory/simple_locations.json5 @@ -42,7 +42,8 @@ }, sourceAlias: 'location', queryable: true, - visibleByDefault: false, + visibleByDefault: true, + essential: true, valueGetter: ":sourceAlias.jsonb ->> 'code'", filterValueGetter: "lower(${tenant_id}_mod_inventory_storage.f_unaccent(:sourceAlias.jsonb ->> 'code'::text))", valueFunction: 'lower(${tenant_id}_mod_inventory_storage.f_unaccent(:value))', @@ -63,7 +64,8 @@ }, sourceAlias: 'location', queryable: true, - visibleByDefault: false, + visibleByDefault: true, + essential: true, valueGetter: ":sourceAlias.jsonb ->> 'name'", filterValueGetter: "lower(${tenant_id}_mod_inventory_storage.f_unaccent(:sourceAlias.jsonb ->> 'name'::text))", valueFunction: 'lower(${tenant_id}_mod_inventory_storage.f_unaccent(:value))', From 9c6bad40986acc13c11246b214dd178048a66478 Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Fri, 11 Oct 2024 14:12:14 -0500 Subject: [PATCH 16/45] Entity adjustments: simple_loclibrary --- .../entity-types/inventory/composite_holdings_record.json5 | 3 ++- .../entity-types/inventory/composite_item_details.json5 | 1 + .../resources/entity-types/inventory/simple_loclibrary.json5 | 4 +++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/resources/entity-types/inventory/composite_holdings_record.json5 b/src/main/resources/entity-types/inventory/composite_holdings_record.json5 index b8cb5e01..376af301 100644 --- a/src/main/resources/entity-types/inventory/composite_holdings_record.json5 +++ b/src/main/resources/entity-types/inventory/composite_holdings_record.json5 @@ -24,7 +24,8 @@ { alias: 'effective_library', type: 'entity-type', - id: '32f58888-1a7b-4840-98f8-cc69ca93fc67', // simple_loclibrary + id: '32f58888-1a7b-4840-98f8-cc69ca93fc67', // simple_loclibrary, + essentialOnly: true, join: { type: 'left join', joinTo: 'effective_location.location', diff --git a/src/main/resources/entity-types/inventory/composite_item_details.json5 b/src/main/resources/entity-types/inventory/composite_item_details.json5 index ea399cd1..3f71f340 100644 --- a/src/main/resources/entity-types/inventory/composite_item_details.json5 +++ b/src/main/resources/entity-types/inventory/composite_item_details.json5 @@ -45,6 +45,7 @@ alias: 'loclibrary', type: 'entity-type', id: '32f58888-1a7b-4840-98f8-cc69ca93fc67', // simple_loclibrary + essentialOnly: true, join: { type: 'left join', joinTo: 'effective_location.location', diff --git a/src/main/resources/entity-types/inventory/simple_loclibrary.json5 b/src/main/resources/entity-types/inventory/simple_loclibrary.json5 index c3da095c..cec0f69a 100644 --- a/src/main/resources/entity-types/inventory/simple_loclibrary.json5 +++ b/src/main/resources/entity-types/inventory/simple_loclibrary.json5 @@ -45,6 +45,7 @@ isIdColumn: false, queryable: true, visibleByDefault: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'name'", filterValueGetter: "lower(${tenant_id}_mod_inventory_storage.f_unaccent(:sourceAlias.jsonb ->> 'name'::text))", valueFunction: "lower(${tenant_id}_mod_inventory_storage.f_unaccent(:value))", @@ -67,6 +68,7 @@ isIdColumn: false, queryable: true, visibleByDefault: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'code'", source: { columnName: 'code', @@ -88,7 +90,7 @@ queryable: true, hidden: true, essential: true, - visibleByDefault: true, + visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'campusId'", source: { columnName: 'campus_id', From 566e9623666308e6ada1984a9f49058ab85179ee Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Fri, 11 Oct 2024 14:44:54 -0500 Subject: [PATCH 17/45] MODFQMMGR-514:Entity adjustments: Simple Material Type (Q Regression Update) --- .../circulation/composite_loan_details.json5 | 1 + .../inventory/composite_item_details.json5 | 1 + .../inventory/simple_material_type_details.json5 | 14 +++++++++++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/resources/entity-types/circulation/composite_loan_details.json5 b/src/main/resources/entity-types/circulation/composite_loan_details.json5 index b5357819..4b53bc1f 100644 --- a/src/main/resources/entity-types/circulation/composite_loan_details.json5 +++ b/src/main/resources/entity-types/circulation/composite_loan_details.json5 @@ -52,6 +52,7 @@ alias: 'mtypes', type: 'entity-type', id: '8b1f51d6-8795-4113-a72e-3b7dc6cc6dfe', + essentialOnly: true, join: { type: 'left join', joinTo: 'items.item', diff --git a/src/main/resources/entity-types/inventory/composite_item_details.json5 b/src/main/resources/entity-types/inventory/composite_item_details.json5 index 3f71f340..99a16048 100644 --- a/src/main/resources/entity-types/inventory/composite_item_details.json5 +++ b/src/main/resources/entity-types/inventory/composite_item_details.json5 @@ -67,6 +67,7 @@ alias: 'mtypes', type: 'entity-type', id: '8b1f51d6-8795-4113-a72e-3b7dc6cc6dfe', // simple_material_type_details + essentialOnly: true, join: { joinTo: 'items.item', type: 'left join', diff --git a/src/main/resources/entity-types/inventory/simple_material_type_details.json5 b/src/main/resources/entity-types/inventory/simple_material_type_details.json5 index 8cd37910..2c275805 100644 --- a/src/main/resources/entity-types/inventory/simple_material_type_details.json5 +++ b/src/main/resources/entity-types/inventory/simple_material_type_details.json5 @@ -22,6 +22,8 @@ isIdColumn: true, queryable: true, visibleByDefault: false, + essential: true, + hidden: true, valueGetter: ':sourceAlias.id', source: { columnName: 'id', @@ -40,7 +42,8 @@ dataType: 'stringType', }, queryable: true, - visibleByDefault: false, + essential: true, + visibleByDefault: true, valueGetter: ":sourceAlias.jsonb->>'name'", filterValueGetter: "lower(\ ${tenant_id}_mod_inventory_storage.f_unaccent (:sourceAlias.jsonb->>'name'::text)\ @@ -64,8 +67,10 @@ dataType: 'stringType', }, queryable: true, + essential: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'source'", + hidden: true }, { name: 'created_date', @@ -76,6 +81,7 @@ queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'metadata'->>'createdDate'", + hidden: true }, { name: 'updated_date', @@ -86,6 +92,7 @@ queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedDate'", + hidden: true }, { name: 'created_by_user_id', @@ -96,6 +103,7 @@ queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'metadata'->>'createdByUserId'", + hidden: true }, { name: 'updated_by_user_id', @@ -106,6 +114,7 @@ queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedByUserId'", + hidden: true }, { name: 'created_by_username', @@ -116,6 +125,7 @@ queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'metadata'->>'createdByUsername'", + hidden: true }, { name: 'updated_by_username', @@ -126,6 +136,7 @@ queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedByUsername'", + hidden: true }, { name: 'jsonb', @@ -136,6 +147,7 @@ queryable: false, hidden: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb::text", } ], From 77805cffb709ac6d2ee139d426ce10beea10fe66 Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Fri, 11 Oct 2024 16:20:13 -0500 Subject: [PATCH 18/45] making name consistent --- .../inventory/simple_instance.json5 | 22 ++++++++++++------- translations/mod-fqm-manager/en.json | 2 +- translations/mod-fqm-manager/en_US.json | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/resources/entity-types/inventory/simple_instance.json5 b/src/main/resources/entity-types/inventory/simple_instance.json5 index 8f4f01ab..070ca76c 100644 --- a/src/main/resources/entity-types/inventory/simple_instance.json5 +++ b/src/main/resources/entity-types/inventory/simple_instance.json5 @@ -416,9 +416,12 @@ queryable: true, essential: true, visibleByDefault: false, - valueGetter: "(SELECT array_agg(a.jsonb ->> 'name') FILTER (WHERE (a.jsonb ->> 'name') IS NOT NULL) AS array_agg FROM jsonb_array_elements((:sourceAlias.jsonb -> 'contributors') -> 'contributorTypeId') AS record(value) JOIN src_inventory_contributor_type a ON (record.value::text) = a.id::text)", - filterValueGetter: "( SELECT array_agg(lower(a.jsonb ->> 'name'::text)) FILTER (WHERE (a.jsonb ->> 'name') IS NOT NULL) AS array_agg FROM jsonb_array_elements_text((:sourceAlias.jsonb -> 'contributors'::text) ->> 'contributorTypeId'::text) record(value) JOIN src_inventory_contributor_type a ON (record.value::text) = a.id::text)", - valueFunction: 'lower(:value)', + valueGetter: "(SELECT array_agg(class_type.jsonb ->> 'name') \ + FILTER (WHERE (class_type.jsonb ->> 'name') IS NOT NULL) AS array_agg \ + FROM jsonb_array_elements((:sourceAlias.jsonb -> 'contributors')) record(value) \ + JOIN src_inventory_contributor_type class_type ON (record.value ->> 'contributorTypeId') = class_type.id::text\ + )", + valueFunction: 'lower(:value)', idColumnName: 'contributor_type_id', source: { columnName: 'contributor_type', @@ -426,7 +429,7 @@ }, valueSourceApi: { path: 'contributor-types', - valueJsonPath: '$.contributorTypes.*.id', + valueJsonPath: '$.contributorTypes.*.name', labelJsonPath: '$.contributorTypes.*.name', } }, @@ -459,17 +462,20 @@ queryable: true, essential: true, visibleByDefault: false, - valueFunction: "lower(:value)", idColumnName: 'contributor_name_type_id', - valueGetter: "(SELECT array_agg(a.jsonb ->> 'name') FILTER (WHERE (a.jsonb ->> 'name') IS NOT NULL) AS array_agg FROM jsonb_array_elements((:sourceAlias.jsonb -> 'contributors') -> 'contributorNameTypeId') AS record(value) JOIN src_inventory_contributor_name_type a ON (record.value::text) = a.id::text)", - filterValueGetter: "( SELECT array_agg(lower(a.jsonb ->> 'name'::text)) FILTER (WHERE (a.jsonb ->> 'name') IS NOT NULL) AS array_agg FROM jsonb_array_elements_text((:sourceAlias.jsonb -> 'contributors'::text) ->> 'contributorNameTypeId'::text) record(value) JOIN src_inventory_contributor_name_type a ON (record.value::text) = a.id::text)", + valueFunction: "lower(:value)", + valueGetter: "(SELECT array_agg(class_type.jsonb ->> 'name') \ + FILTER (WHERE (class_type.jsonb ->> 'name') IS NOT NULL) AS array_agg \ + FROM jsonb_array_elements((:sourceAlias.jsonb -> 'contributors')) record(value) \ + JOIN src_inventory_contributor_name_type class_type ON (record.value ->> 'contributorNameTypeId') = class_type.id::text\ + )", source: { columnName: 'contributor_name_type', entityTypeId: '8fc4a9d2-7ccf-4233-afb8-796911839862', }, valueSourceApi: { path: 'contributor-name-types', - valueJsonPath: '$.contributorNameTypes.*.id', + valueJsonPath: '$.contributorNameTypes.*.name', labelJsonPath: '$.contributorNameTypes.*.name', } }, diff --git a/translations/mod-fqm-manager/en.json b/translations/mod-fqm-manager/en.json index 30e5eae6..0d0db26a 100644 --- a/translations/mod-fqm-manager/en.json +++ b/translations/mod-fqm-manager/en.json @@ -36,7 +36,7 @@ "entityType.composite_item_details.instances": "Instances", "entityType.composite_item_details.item_level_call_number": "Item level call number", "entityType.composite_item_details.items": "Items", - "entityType.composite_item_details.loclibrary": "Library", + "entityType.composite_item_details.loclibrary": "Effective library", "entityType.composite_item_details.mtypes": "Material type", "entityType.composite_item_details.permanent_location": "Permanent location", "entityType.composite_item_details.temporary_location": "Temporary location", diff --git a/translations/mod-fqm-manager/en_US.json b/translations/mod-fqm-manager/en_US.json index dbcd6436..60d7fff8 100644 --- a/translations/mod-fqm-manager/en_US.json +++ b/translations/mod-fqm-manager/en_US.json @@ -1328,7 +1328,7 @@ "entityType.composite_item_details.effective_location": "Effective location", "entityType.composite_item_details.effective_call_number": "Effective call number", "entityType.composite_item_details.item_level_call_number": "Item level call number", - "entityType.composite_item_details.loclibrary": "Library", + "entityType.composite_item_details.loclibrary": "Effective library", "entityType.composite_item_details.permanent_location": "Permanent location", "entityType.composite_item_details.mtypes": "Material type", "entityType.composite_item_details.temporary_location": "Temporary location", From 87c8f9342a32406e538337dedeb1a6ae4265e742 Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Mon, 14 Oct 2024 12:34:43 -0500 Subject: [PATCH 19/45] re --- .../entity-types/inventory/simple_instance.json5 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/resources/entity-types/inventory/simple_instance.json5 b/src/main/resources/entity-types/inventory/simple_instance.json5 index 070ca76c..3a73cb36 100644 --- a/src/main/resources/entity-types/inventory/simple_instance.json5 +++ b/src/main/resources/entity-types/inventory/simple_instance.json5 @@ -416,10 +416,10 @@ queryable: true, essential: true, visibleByDefault: false, - valueGetter: "(SELECT array_agg(class_type.jsonb ->> 'name') \ - FILTER (WHERE (class_type.jsonb ->> 'name') IS NOT NULL) AS array_agg \ + valueGetter: "(SELECT array_agg(contributor_type.jsonb ->> 'name') \ + FILTER (WHERE (contributor_type.jsonb ->> 'name') IS NOT NULL) AS array_agg \ FROM jsonb_array_elements((:sourceAlias.jsonb -> 'contributors')) record(value) \ - JOIN src_inventory_contributor_type class_type ON (record.value ->> 'contributorTypeId') = class_type.id::text\ + JOIN src_inventory_contributor_type contributor_type ON (record.value ->> 'contributorTypeId') = contributor_type.id::text\ )", valueFunction: 'lower(:value)', idColumnName: 'contributor_type_id', @@ -464,10 +464,10 @@ visibleByDefault: false, idColumnName: 'contributor_name_type_id', valueFunction: "lower(:value)", - valueGetter: "(SELECT array_agg(class_type.jsonb ->> 'name') \ - FILTER (WHERE (class_type.jsonb ->> 'name') IS NOT NULL) AS array_agg \ + valueGetter: "(SELECT array_agg(contributor_name_type.jsonb ->> 'name') \ + FILTER (WHERE (contributor_name_type.jsonb ->> 'name') IS NOT NULL) AS array_agg \ FROM jsonb_array_elements((:sourceAlias.jsonb -> 'contributors')) record(value) \ - JOIN src_inventory_contributor_name_type class_type ON (record.value ->> 'contributorNameTypeId') = class_type.id::text\ + JOIN src_inventory_contributor_name_type contributor_name_type ON (record.value ->> 'contributorNameTypeId') = contributor_name_type.id::text\ )", source: { columnName: 'contributor_name_type', From 8edc542a2024933b4d99cab1e94571f3659e00b8 Mon Sep 17 00:00:00 2001 From: bvsharp <97990858+bvsharp@users.noreply.github.com> Date: Mon, 14 Oct 2024 14:46:10 -0400 Subject: [PATCH 20/45] Update feign path (#465) --- .../folio/fqm/client/SimpleHttpClient.java | 2 +- .../folio/fqm/service/EntityTypeService.java | 26 ++++++++----------- .../fqm/service/EntityTypeServiceTest.java | 6 ++--- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/folio/fqm/client/SimpleHttpClient.java b/src/main/java/org/folio/fqm/client/SimpleHttpClient.java index 3269f206..a079947b 100644 --- a/src/main/java/org/folio/fqm/client/SimpleHttpClient.java +++ b/src/main/java/org/folio/fqm/client/SimpleHttpClient.java @@ -31,6 +31,6 @@ public interface SimpleHttpClient { * @param tenant - FOLIO tenant from which to retrieve data * @return the body of the response (JSON) */ - @GetMapping(value = "/{path}?{queryParams}", produces = MediaType.APPLICATION_JSON_VALUE) + @GetMapping(value = "/{path}", produces = MediaType.APPLICATION_JSON_VALUE) String get(@PathVariable String path, @SpringQueryMap Map queryParams, @RequestHeader("X-Okapi-Tenant") String tenant); } diff --git a/src/main/java/org/folio/fqm/service/EntityTypeService.java b/src/main/java/org/folio/fqm/service/EntityTypeService.java index 7bc43434..63382615 100644 --- a/src/main/java/org/folio/fqm/service/EntityTypeService.java +++ b/src/main/java/org/folio/fqm/service/EntityTypeService.java @@ -161,7 +161,7 @@ public ColumnValues getFieldValues(UUID entityTypeId, String fieldName, @Nullabl return getTenantIds(entityType); } case "languages" -> { - return getLanguages(searchText, tenantsToQuery); + return getLanguages(searchText); } default -> { throw new InvalidEntityTypeDefinitionException("Unhandled source name \"" + field.getSource().getName() + "\" for the FQM value source type in column \"" + fieldName + '"', entityType); @@ -250,25 +250,21 @@ private static ColumnValues getCurrencyValues() { return new ColumnValues().content(currencies); } - private ColumnValues getLanguages(String searchText, List tenantsToQuery) { + private ColumnValues getLanguages(String searchText) { Map queryParams = Map.of( "facet", "languages", "query", "id=*", "limit", "1000" ); - Set valueSet = new HashSet<>(); - for (String tenant : tenantsToQuery) { - try { - String rawJson = simpleHttpClient.get("search/instances/facets", queryParams, tenant); - DocumentContext parsedJson = JsonPath.parse(rawJson); - List values = parsedJson.read("$.facets.languages.values.*.id"); - valueSet.addAll(values); - } catch (FeignException.Unauthorized | FeignException.BadRequest e) { - log.error("Failed to get languages from {} tenant due to exception {}", tenant, e.getMessage()); - } + List values = List.of(); + try { + String rawJson = simpleHttpClient.get("search/instances/facets", queryParams); + DocumentContext parsedJson = JsonPath.parse(rawJson); + values = parsedJson.read("$.facets.languages.values.*.id"); + } catch (FeignException.Unauthorized | FeignException.BadRequest e) { + log.error("Failed to get languages from API due to exception {}", e.getMessage()); } - List values = new ArrayList<>(valueSet); List results = new ArrayList<>(); ObjectMapper mapper = @@ -279,7 +275,7 @@ private ColumnValues getLanguages(String searchText, List tenantsToQuery .build(); List> languages = List.of(); - try(InputStream input = getClass().getClassLoader().getResourceAsStream(LANGUAGES_FILEPATH)) { + try (InputStream input = getClass().getClassLoader().getResourceAsStream(LANGUAGES_FILEPATH)) { languages = mapper.readValue(input, new TypeReference<>() { }); } catch (IOException e) { @@ -320,7 +316,7 @@ private ColumnValues getLanguages(String searchText, List tenantsToQuery label = languageLocale.getDisplayLanguage(folioLocale); } else if (StringUtils.isNotEmpty(name)) { label = name; - } else if (StringUtils.isNotEmpty(code)){ + } else if (StringUtils.isNotEmpty(code)) { label = code; } else { continue; diff --git a/src/test/java/org/folio/fqm/service/EntityTypeServiceTest.java b/src/test/java/org/folio/fqm/service/EntityTypeServiceTest.java index f30cab31..44cf0d92 100644 --- a/src/test/java/org/folio/fqm/service/EntityTypeServiceTest.java +++ b/src/test/java/org/folio/fqm/service/EntityTypeServiceTest.java @@ -396,7 +396,7 @@ void shouldReturnLanguagesFromApi() { when(entityTypeFlatteningService.getFlattenedEntityType(entityTypeId, null)).thenReturn(entityType); when(crossTenantQueryService.getTenantsToQueryForColumnValues(entityType)).thenReturn(tenantList); - when(simpleHttpClient.get(eq("search/instances/facets"), anyMap(), eq("tenant_01"))).thenReturn(""" + when(simpleHttpClient.get(eq("search/instances/facets"), anyMap())).thenReturn(""" { "facets": { "languages": { @@ -451,7 +451,7 @@ void shouldReturnLocalizedLanguagesFromApi() { when(entityTypeFlatteningService.getFlattenedEntityType(entityTypeId, null)).thenReturn(entityType); when(crossTenantQueryService.getTenantsToQueryForColumnValues(entityType)).thenReturn(tenantList); - when(simpleHttpClient.get(eq("search/instances/facets"), anyMap(), eq("tenant_01"))).thenReturn(""" + when(simpleHttpClient.get(eq("search/instances/facets"), anyMap())).thenReturn(""" { "facets": { "languages": { @@ -520,7 +520,7 @@ void shouldCatchExceptionFromLanguagesApi() { when(entityTypeFlatteningService.getFlattenedEntityType(entityTypeId, null)).thenReturn(entityType); when(crossTenantQueryService.getTenantsToQueryForColumnValues(entityType)).thenReturn(tenantList); - when(simpleHttpClient.get(eq("search/instances/facets"), anyMap(), eq("tenant_01"))).thenThrow(FeignException.BadRequest.class); + when(simpleHttpClient.get(eq("search/instances/facets"), anyMap())).thenThrow(FeignException.BadRequest.class); assertDoesNotThrow(() -> entityTypeService.getFieldValues(entityTypeId, valueColumnName, "")); } From 8837bdea929236c855554de975a440402367dd2a Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Mon, 14 Oct 2024 13:36:15 -0500 Subject: [PATCH 21/45] MODFQMMGR-521:simple_call_number_type (Q Regression) --- .../inventory/composite_item_details.json5 | 2 ++ .../inventory/simple_call_number_type.json5 | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/src/main/resources/entity-types/inventory/composite_item_details.json5 b/src/main/resources/entity-types/inventory/composite_item_details.json5 index 99a16048..c65fd879 100644 --- a/src/main/resources/entity-types/inventory/composite_item_details.json5 +++ b/src/main/resources/entity-types/inventory/composite_item_details.json5 @@ -25,6 +25,7 @@ alias: 'effective_call_number', type: 'entity-type', id: 'd9338ced-3e71-4f24-b605-7912d590f005', // simple_call_number_type + essentialOnly: true, join: { type: 'left join', joinTo: 'items.item', @@ -35,6 +36,7 @@ alias: 'item_level_call_number', type: 'entity-type', id: 'd9338ced-3e71-4f24-b605-7912d590f005', // simple_call_number_type + essentialOnly: true, join: { condition: "(:that.jsonb ->> 'itemLevelCallNumberTypeId')::uuid = :this.id", type: 'left join', diff --git a/src/main/resources/entity-types/inventory/simple_call_number_type.json5 b/src/main/resources/entity-types/inventory/simple_call_number_type.json5 index 0c761cd9..57120d3b 100644 --- a/src/main/resources/entity-types/inventory/simple_call_number_type.json5 +++ b/src/main/resources/entity-types/inventory/simple_call_number_type.json5 @@ -22,6 +22,8 @@ isIdColumn: true, queryable: true, visibleByDefault: false, + hidden: true, + essential: true, valueGetter: ':sourceAlias.id', }, { @@ -32,6 +34,7 @@ }, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'name'", filterValueGetter: "lower(\ ${tenant_id}_mod_inventory_storage.f_unaccent (:sourceAlias.jsonb->>'name'::text)\ @@ -56,6 +59,7 @@ }, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->>'source'", }, { @@ -66,6 +70,7 @@ }, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'metadata'->>'createdDate'", }, { @@ -76,6 +81,7 @@ }, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedDate'", }, { @@ -86,6 +92,7 @@ }, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'metadata'->>'createdByUserId'", }, { @@ -96,6 +103,7 @@ }, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedByUserId'", }, { @@ -106,6 +114,7 @@ }, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'metadata'->>'createdByUsername'", }, { @@ -116,6 +125,7 @@ }, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedByUsername'", }, { @@ -127,6 +137,7 @@ queryable: false, visibleByDefault: false, hidden: true, + essential: true, valueGetter: ":sourceAlias.jsonb::text", } ], From fe015fa78ad54a16998292626be76c87fe9577fa Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Mon, 14 Oct 2024 13:11:41 -0500 Subject: [PATCH 22/45] MODFQMMGR-517:Entity adjustments: simple_service_point(Q regression) --- .../circulation/composite_loan_details.json5 | 2 + .../simple_service_point_details.json5 | 62 ++++--------------- 2 files changed, 15 insertions(+), 49 deletions(-) diff --git a/src/main/resources/entity-types/circulation/composite_loan_details.json5 b/src/main/resources/entity-types/circulation/composite_loan_details.json5 index 4b53bc1f..0103b9ac 100644 --- a/src/main/resources/entity-types/circulation/composite_loan_details.json5 +++ b/src/main/resources/entity-types/circulation/composite_loan_details.json5 @@ -22,6 +22,7 @@ alias: 'cospi', type: 'entity-type', id: '1fdcc2e8-1ff8-4a99-b4ad-7d6bf564aec5', + essentialOnly: true, join: { condition: "(:that.jsonb ->> 'checkoutServicePointId')::uuid = :this.id", type: 'left join', @@ -32,6 +33,7 @@ alias: 'cispi', type: 'entity-type', id: '1fdcc2e8-1ff8-4a99-b4ad-7d6bf564aec5', + essentialOnly: true, join: { joinTo: 'loans.loan', condition: "(:that.jsonb ->> 'checkinServicePointId')::uuid = :this.id", diff --git a/src/main/resources/entity-types/inventory/simple_service_point_details.json5 b/src/main/resources/entity-types/inventory/simple_service_point_details.json5 index 4903a404..55017ead 100644 --- a/src/main/resources/entity-types/inventory/simple_service_point_details.json5 +++ b/src/main/resources/entity-types/inventory/simple_service_point_details.json5 @@ -21,9 +21,11 @@ dataType: 'rangedUUIDType', }, isIdColumn: true, + hidden: true, queryable: true, visibleByDefault: false, valueGetter: ':sourceAlias.id', + essential: true }, { name: 'code', @@ -35,6 +37,9 @@ queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'code'", + filterValueGetter: "lower(${tenant_id}_mod_inventory_storage.f_unaccent(:sourceAlias.jsonb ->> 'code'::text))", + valueFunction: 'lower(${tenant_id}_mod_inventory_storage.f_unaccent(:value))', + essential: true }, { name: 'name', @@ -44,8 +49,11 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: false, + visibleByDefault: true, valueGetter: ":sourceAlias.jsonb->>'name'", + filterValueGetter: "lower(${tenant_id}_mod_inventory_storage.f_unaccent(:sourceAlias.jsonb ->> 'name'::text))", + valueFunction: 'lower(${tenant_id}_mod_inventory_storage.f_unaccent(:value))', + essential: true }, { name: 'created_date', @@ -77,6 +85,7 @@ }, isIdColumn: false, queryable: true, + hidden: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'metadata'->>'createdByUserId'", }, @@ -88,6 +97,7 @@ }, isIdColumn: false, queryable: true, + hidden: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedByUserId'", }, @@ -134,6 +144,7 @@ queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'discoveryDisplayName'", + essential: true }, { name: 'hold_shelf_expiry_period_duration', @@ -158,54 +169,6 @@ visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'holdShelfExpiryPeriod'->>'intervalId'", }, - { - name: 'staff_slips', - sourceAlias: 'service_point', - dataType: { - dataType: 'arrayType', - itemDataType: { - dataType: 'objectType', - properties: [ - { - name: 'staff_slip_id', - property: 'id', - dataType: { - dataType: 'rangedUUIDType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'id') FROM jsonb_array_elements(:sourceAlias.jsonb->'staffSlips') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'id')) FROM jsonb_array_elements(:sourceAlias.jsonb->'staffSlips') AS elems)", - valueFunction: 'lower(:value)', - }, - { - name: 'print_by_default', - property: 'printByDefault', - dataType: { - dataType: 'booleanType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'printByDefault') FROM jsonb_array_elements(:sourceAlias.jsonb->'staffSlips') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'printByDefault')) FROM jsonb_array_elements(:sourceAlias.jsonb->'staffSlips') AS elems)", - valueFunction: 'lower(:value)', - values: [ - { - value: 'true', - label: 'True', - }, - { - value: 'false', - label: 'False', - }, - ], - }, - ], - }, - }, - isIdColumn: false, - queryable: false, - visibleByDefault: false, - valueGetter: ":sourceAlias.jsonb->>'staffSlips'", - }, { name: 'description', sourceAlias: 'service_point', @@ -239,6 +202,7 @@ hidden: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb::text", + essential: true } ], } From 95f4de3192a95baef6c067924690edd110e5daed Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Mon, 23 Sep 2024 16:58:45 -0500 Subject: [PATCH 23/45] MODFQMMGR-273:Restrit query execution based on entity-type subpermissions EUREKA --- descriptors/ModuleDescriptor-template.json | 27 +++++---- .../fqm/client/ModRolesKeycloakClient.java | 28 ++++++++++ .../service/PermissionsRegularService.java | 21 +++++-- src/main/resources/application.yml | 2 +- .../PermissionsRegularServiceTest.java | 55 ++++++++++++++----- 5 files changed, 99 insertions(+), 34 deletions(-) create mode 100644 src/main/java/org/folio/fqm/client/ModRolesKeycloakClient.java diff --git a/descriptors/ModuleDescriptor-template.json b/descriptors/ModuleDescriptor-template.json index 12e22c69..5d34e449 100644 --- a/descriptors/ModuleDescriptor-template.json +++ b/descriptors/ModuleDescriptor-template.json @@ -11,7 +11,7 @@ "methods": ["POST"], "pathPattern": "/_/tenant", "permissionsRequired": [], - "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get"] + "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get","permissions.users.item.get"] }, { "methods": ["GET", "DELETE"], @@ -28,19 +28,19 @@ "methods": ["GET"], "pathPattern": "/entity-types/{entity-type-id}", "permissionsRequired": ["fqm.entityTypes.item.get"], - "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get"] + "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get", "permissions.users.item.get"] }, { "methods": ["GET"], "pathPattern": "/entity-types", "permissionsRequired": ["fqm.entityTypes.collection.get"], - "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get"] + "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get", "permissions.users.item.get"] }, { "methods": ["GET"], "pathPattern": "/entity-types/{entity-type-id}/columns/{column-name}/values", "permissionsRequired": ["fqm.entityTypes.item.columnValues.get"], - "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get", "search.facets.collection.get", "configuration.entries.collection.get"] + "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get", "permissions.users.item.get","search.facets.collection.get", "configuration.entries.collection.get"] }, { "methods": ["POST"], @@ -57,43 +57,43 @@ "methods": ["GET"], "pathPattern": "/query", "permissionsRequired": ["fqm.query.sync.get"], - "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get"] + "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get", "permissions.users.item.get"] }, { "methods": ["GET"], "pathPattern": "/query/{query-id}", "permissionsRequired": ["fqm.query.async.results.get"], - "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get"] + "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get", "permissions.users.item.get"] }, { "methods": ["GET"], "pathPattern": "/query/{query-id}/sortedIds", "permissionsRequired": ["fqm.query.async.results.get"], - "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get"] + "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get", "permissions.users.item.get"] }, { "methods": ["GET"], "pathPattern": "/fqm/version", "permissionsRequired": ["fqm.version.get"], - "modulePermissions": ["perms.users.get"] + "modulePermissions": ["perms.users.get", "permissions.users.item.get"] }, { "methods": ["POST"], "pathPattern": "/fqm/migrate", "permissionsRequired": ["fqm.migrate.post"], - "modulePermissions": ["perms.users.get"] + "modulePermissions": ["perms.users.get", "permissions.users.item.get"] }, { "methods": ["POST"], "pathPattern": "/query/contents", "permissionsRequired": ["fqm.query.async.results.get"], - "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get"] + "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get", "permissions.users.item.get"] }, { "methods": ["POST"], "pathPattern": "/query", "permissionsRequired": ["fqm.query.async.post"], - "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get"] + "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get", "permissions.users.item.get"] }, { "methods": ["POST"], @@ -104,7 +104,7 @@ "methods": ["DELETE"], "pathPattern": "/query/{query-id}", "permissionsRequired": ["fqm.query.async.delete"], - "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get"] + "modulePermissions": ["perms.users.get", "user-tenants.collection.get", "consortia.user-tenants.collection.get", "permissions.users.item.get"] } ] }, @@ -430,6 +430,9 @@ }, { "name": "mod.fqm-manager.entity-type-cache-timeout-seconds", "value": "300" + }, + { "name": "IS_EUREKA", + "value": "false" } ] } diff --git a/src/main/java/org/folio/fqm/client/ModRolesKeycloakClient.java b/src/main/java/org/folio/fqm/client/ModRolesKeycloakClient.java new file mode 100644 index 00000000..9689166e --- /dev/null +++ b/src/main/java/org/folio/fqm/client/ModRolesKeycloakClient.java @@ -0,0 +1,28 @@ +package org.folio.fqm.client; + +import com.fasterxml.jackson.annotation.JsonProperty; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestHeader; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +@Service +@FeignClient(name = "permissions") +public interface ModRolesKeycloakClient { + @GetMapping(value = "/users/{id}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) + UserPermissions getPermissionsUser(@RequestHeader("X-Okapi-Tenant") String tenant, @PathVariable UUID id); + + record UserPermissions(@JsonProperty("permissions") List permissionNames, + @JsonProperty("userId") UUID userId) { + public Set getPermissionNames() { + return new HashSet<>(permissionNames); + } + } +} diff --git a/src/main/java/org/folio/fqm/service/PermissionsRegularService.java b/src/main/java/org/folio/fqm/service/PermissionsRegularService.java index c2930d7e..4b2a822b 100644 --- a/src/main/java/org/folio/fqm/service/PermissionsRegularService.java +++ b/src/main/java/org/folio/fqm/service/PermissionsRegularService.java @@ -4,8 +4,8 @@ import com.github.benmanes.caffeine.cache.Caffeine; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; -import org.apache.commons.lang3.NotImplementedException; import org.folio.fqm.client.ModPermissionsClient; +import org.folio.fqm.client.ModRolesKeycloakClient; import org.folio.fqm.exception.MissingPermissionsException; import org.folio.querytool.domain.dto.EntityType; import org.folio.spring.FolioExecutionContext; @@ -27,7 +27,8 @@ public class PermissionsRegularService implements PermissionsService { // package-private for visibility in unit tests - @Value("${folio.is-eureka:false}") + + @Value("${folio.is-eureka}") boolean isEureka; @Value("${mod-fqm-manager.permissions-cache-timeout-seconds:60}") @@ -35,21 +36,26 @@ public class PermissionsRegularService implements PermissionsService { private final FolioExecutionContext context; private final ModPermissionsClient modPermissionsClient; - private final Cache> cache = Caffeine.newBuilder().expireAfterWrite(cacheDurationSeconds, TimeUnit.SECONDS).build(); + private final ModRolesKeycloakClient modRolesKeycloakClient; + private final Cache> cache = Caffeine.newBuilder() + .expireAfterWrite(cacheDurationSeconds, TimeUnit.SECONDS) + .build(); private final EntityTypeFlatteningService entityTypeFlatteningService; + private static final List CROSS_TENANT_FQM_PERMISSIONS = List.of( "fqm.entityTypes.item.get", "fqm.query.async.results.get", "fqm.query.async.post" ); + @Override public Set getUserPermissions() { return getUserPermissions(context.getTenantId()); } public Set getUserPermissions(String tenantId) { TenantUserPair key = new TenantUserPair(tenantId, context.getUserId()); - return cache.get(key, k -> isEureka ? getUserPermissionsFromRolesKeycloak(k.userId()) : getUserPermissionsFromModPermissions(tenantId, k.userId())); + return cache.get(key, k -> isEureka ? getUserPermissionsFromRolesKeycloak(k.tenant(), k.userId()) : getUserPermissionsFromModPermissions(k.tenant(), k.userId())); } public Set getRequiredPermissions(EntityType entityType) { @@ -57,6 +63,7 @@ public Set getRequiredPermissions(EntityType entityType) { return new HashSet<>(flattenedEntityType.getRequiredPermissions()); } + @Override public void verifyUserHasNecessaryPermissions(EntityType entityType, boolean checkFqmPermissions) { verifyUserHasNecessaryPermissions(context.getTenantId(), entityType, checkFqmPermissions); } @@ -92,8 +99,10 @@ private Set getUserPermissionsFromModPermissions(String tenantId, UUID u .getPermissionNames(); } - private Set getUserPermissionsFromRolesKeycloak(UUID userId) { - throw new NotImplementedException("Not implemented yet"); + private Set getUserPermissionsFromRolesKeycloak(String tenantId, UUID userId) { + return modRolesKeycloakClient + .getPermissionsUser(tenantId, userId) + .getPermissionNames(); } private record TenantUserPair(String tenant, UUID userId) { diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 2f77b6e0..c7b7a273 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -77,7 +77,7 @@ coffee-boots: queryCache: maximumSize=500,expireAfterWrite=1m userTenantCache: maximumSize=100,expireAfterWrite=5h folio: - is-eureka: false + is-eureka: ${IS_EUREKA:false} tenant: validation: enabled: true diff --git a/src/test/java/org/folio/fqm/service/PermissionsRegularServiceTest.java b/src/test/java/org/folio/fqm/service/PermissionsRegularServiceTest.java index f30f285b..48522c48 100644 --- a/src/test/java/org/folio/fqm/service/PermissionsRegularServiceTest.java +++ b/src/test/java/org/folio/fqm/service/PermissionsRegularServiceTest.java @@ -3,44 +3,47 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; import java.util.*; -import org.apache.commons.lang3.NotImplementedException; import org.folio.fqm.client.ModPermissionsClient; +import org.folio.fqm.client.ModRolesKeycloakClient; import org.folio.fqm.exception.MissingPermissionsException; import org.folio.querytool.domain.dto.EntityType; import org.folio.querytool.domain.dto.EntityTypeSource; import org.folio.spring.FolioExecutionContext; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; class PermissionsRegularServiceTest { private final FolioExecutionContext context = mock(FolioExecutionContext.class); private final ModPermissionsClient modPermissionsClient = mock(ModPermissionsClient.class); + private final ModRolesKeycloakClient modRolesKeyclockClient = mock(ModRolesKeycloakClient.class); private final EntityTypeFlatteningService entityTypeFlatteningService = mock(EntityTypeFlatteningService.class); private final PermissionsRegularService permissionsService = new PermissionsRegularService( context, modPermissionsClient, + modRolesKeyclockClient, entityTypeFlatteningService ); private static final String TENANT_ID = "tenant_01"; - @BeforeEach - void setUp() { - permissionsService.isEureka = false; // Force the service to use the mod-permissions client - } - void setUpMocks(String... permissions) { var userId = UUID.randomUUID(); when(context.getUserId()).thenReturn(userId); when(context.getTenantId()).thenReturn(TENANT_ID); - when(modPermissionsClient.getPermissionsForUser(TENANT_ID, userId.toString())) - .thenReturn(new ModPermissionsClient.UserPermissions(List.of(permissions), permissions.length)); + + if (permissionsService.isEureka) { + when(modRolesKeyclockClient.getPermissionsUser(TENANT_ID, userId)) + .thenReturn(new ModRolesKeycloakClient.UserPermissions(List.of(permissions), userId)); + } else { + when(modPermissionsClient.getPermissionsForUser(TENANT_ID, userId.toString())) + .thenReturn(new ModPermissionsClient.UserPermissions(List.of(permissions), permissions.length)); + } } + private EntityType getTestEntityType() { EntityType entityType = new EntityType(UUID.randomUUID().toString(), "entity type name", true, false) .sources(List.of(new EntityTypeSource("db", "source_alias"))); @@ -134,9 +137,31 @@ void shouldCheckFqmPermissionsIfRequested() { } @Test - void eurekaSupportIsNotImplementedYet() { - permissionsService.isEureka = true; // Force the service to use mod-roles-keycloak - setUpMocks(); - assertThrows(NotImplementedException.class, () -> permissionsService.getUserPermissions(TENANT_ID)); + void WhenEurekaIsTrue() { + permissionsService.isEureka = true; + setUpMocks("permission1", "permission2"); + Set userPermissions = permissionsService.getUserPermissions(); + + ArgumentCaptor userIdCaptor = ArgumentCaptor.forClass(UUID.class); + verify(modRolesKeyclockClient).getPermissionsUser(eq(TENANT_ID), userIdCaptor.capture()); + assertEquals(2, userPermissions.size()); + + // Ensure no interactions with modPermissionsClient + verifyNoInteractions(modPermissionsClient); + } + + @Test + void WhenEurekaIsFalse() { + permissionsService.isEureka = false; + setUpMocks("permission1", "permission2"); + Set userPermissions = permissionsService.getUserPermissions(); + + ArgumentCaptor userIdCaptor = ArgumentCaptor.forClass(String.class); + verify(modPermissionsClient).getPermissionsForUser(eq(TENANT_ID), userIdCaptor.capture()); + assertEquals(2, userPermissions.size()); + + // Ensure no interactions with modRolesKeyclockClient + verifyNoInteractions(modRolesKeyclockClient); } + } From 8306fb741af448768d8863ec65e18a9a4d7928cd Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Tue, 15 Oct 2024 09:36:25 -0500 Subject: [PATCH 24/45] MODFQMMGR-526:Entity adjustments: Simple group details --- .../circulation/composite_loan_details.json5 | 1 + .../users/composite_users_details.json5 | 1 + .../users/simple_group_details.json5 | 38 ++++++++++++++----- translations/mod-fqm-manager/en.json | 2 +- translations/mod-fqm-manager/en_US.json | 2 +- 5 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/main/resources/entity-types/circulation/composite_loan_details.json5 b/src/main/resources/entity-types/circulation/composite_loan_details.json5 index 0103b9ac..91fc4f34 100644 --- a/src/main/resources/entity-types/circulation/composite_loan_details.json5 +++ b/src/main/resources/entity-types/circulation/composite_loan_details.json5 @@ -76,6 +76,7 @@ alias: 'groups', type: 'entity-type', id: 'e7717b38-4ff3-4fb9-ae09-b3d0c8400710', + essentialOnly: true, join: { type: 'left join', joinTo: 'users.user', diff --git a/src/main/resources/entity-types/users/composite_users_details.json5 b/src/main/resources/entity-types/users/composite_users_details.json5 index 19a22802..36db649e 100644 --- a/src/main/resources/entity-types/users/composite_users_details.json5 +++ b/src/main/resources/entity-types/users/composite_users_details.json5 @@ -16,6 +16,7 @@ alias: 'groups', type: 'entity-type', id: 'e7717b38-4ff3-4fb9-ae09-b3d0c8400710', // simple_group_details + essentialOnly: true, join: { type: 'left join', joinTo: 'users.user', diff --git a/src/main/resources/entity-types/users/simple_group_details.json5 b/src/main/resources/entity-types/users/simple_group_details.json5 index 54b84d86..9f7c6ec7 100644 --- a/src/main/resources/entity-types/users/simple_group_details.json5 +++ b/src/main/resources/entity-types/users/simple_group_details.json5 @@ -22,8 +22,21 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: false, + visibleByDefault: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'group'", + filterValueGetter: "lower(${tenant_id}_mod_users.f_unaccent(:sourceAlias.jsonb ->> 'group'::text))", + valueFunction: 'lower(${tenant_id}_mod_users.f_unaccent(:value))', + idColumnName: 'id', + source: { + entityTypeId: "e7717b38-4ff3-4fb9-ae09-b3d0c8400710", + columnName: 'group' + }, + valueSourceApi: { + path: 'groups', + valueJsonPath: '$.usergroups.*.group', + labelJsonPath: '$.usergroups.*.group', + } }, { name: 'id', @@ -33,6 +46,7 @@ }, isIdColumn: true, queryable: true, + essential: true, visibleByDefault: false, valueGetter: ':sourceAlias.id', }, @@ -42,7 +56,7 @@ dataType: { dataType: 'integerType', }, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: "(:sourceAlias.jsonb->>'expirationOffsetInDays')::integer", valueFunction: '(:value)::integer', @@ -53,7 +67,7 @@ dataType: { dataType: 'stringType', }, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'source'", }, @@ -63,7 +77,7 @@ dataType: { dataType: 'dateType', }, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'metadata'->>'createdDate'", }, @@ -73,7 +87,7 @@ dataType: { dataType: 'dateType', }, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedDate'", }, @@ -83,7 +97,7 @@ dataType: { dataType: 'rangedUUIDType', }, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'metadata'->>'createdByUserId'", }, @@ -93,7 +107,7 @@ dataType: { dataType: 'rangedUUIDType', }, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedByUserId'", }, @@ -103,7 +117,7 @@ dataType: { dataType: 'stringType', }, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'metadata'->>'createdByUsername'", }, @@ -113,13 +127,16 @@ dataType: { dataType: 'stringType', }, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedByUsername'", }, { name: 'desc', sourceAlias: 'groups', + visibleByDefault: false, + hidden: true, + queryable: false, dataType: { dataType: 'stringType', }, @@ -128,10 +145,13 @@ { name: 'jsonb', sourceAlias: 'groups', + queryable: false, + visibleByDefault: false, dataType: { dataType: 'stringType', }, hidden: true, + essential: true, valueGetter: ":sourceAlias.jsonb::text", } ], diff --git a/translations/mod-fqm-manager/en.json b/translations/mod-fqm-manager/en.json index 0d0db26a..deaf91bb 100644 --- a/translations/mod-fqm-manager/en.json +++ b/translations/mod-fqm-manager/en.json @@ -543,7 +543,7 @@ "entityType.simple_group_details.created_date": "Created date", "entityType.simple_group_details.desc": "Desc", "entityType.simple_group_details.expiration_off_set_in_days": "Expiration off set in days", - "entityType.simple_group_details.group": "Group", + "entityType.simple_group_details.group": "Name", "entityType.simple_group_details.id": "UUID", "entityType.simple_group_details.jsonb": "JSONB", "entityType.simple_group_details.source": "Source", diff --git a/translations/mod-fqm-manager/en_US.json b/translations/mod-fqm-manager/en_US.json index 60d7fff8..1c22e7df 100644 --- a/translations/mod-fqm-manager/en_US.json +++ b/translations/mod-fqm-manager/en_US.json @@ -194,7 +194,7 @@ "entityType.simple_group_details.created_date": "Created date", "entityType.simple_group_details.desc": "Desc", "entityType.simple_group_details.expiration_off_set_in_days": "Expiration off set in days", - "entityType.simple_group_details.group": "Group", + "entityType.simple_group_details.group": "Name", "entityType.simple_group_details.id": "UUID", "entityType.simple_group_details.source": "Source", "entityType.simple_group_details.updated_by_user_id": "Updated by user UUID", From 39688a17623e041a493d92af0aa9dcf2547c44ad Mon Sep 17 00:00:00 2001 From: bvsharp <97990858+bvsharp@users.noreply.github.com> Date: Tue, 15 Oct 2024 10:58:18 -0400 Subject: [PATCH 25/45] [MODFQMMGR-527] Simple loan policy entity adjustments (#469) --- .../circulation/composite_loan_details.json5 | 1 + .../circulation/simple_loan_policy.json5 | 95 +++++++++++-------- 2 files changed, 54 insertions(+), 42 deletions(-) diff --git a/src/main/resources/entity-types/circulation/composite_loan_details.json5 b/src/main/resources/entity-types/circulation/composite_loan_details.json5 index 91fc4f34..86a45eaf 100644 --- a/src/main/resources/entity-types/circulation/composite_loan_details.json5 +++ b/src/main/resources/entity-types/circulation/composite_loan_details.json5 @@ -12,6 +12,7 @@ alias: 'lpolicy', type: 'entity-type', id: '64d7b5fb-2ead-444c-a9bd-b9db831f4132', + essentialOnly: true, join: { type: 'left join', joinTo: 'loans.loan', diff --git a/src/main/resources/entity-types/circulation/simple_loan_policy.json5 b/src/main/resources/entity-types/circulation/simple_loan_policy.json5 index 4bfb04a0..622a2f20 100644 --- a/src/main/resources/entity-types/circulation/simple_loan_policy.json5 +++ b/src/main/resources/entity-types/circulation/simple_loan_policy.json5 @@ -22,7 +22,8 @@ }, isIdColumn: true, queryable: true, - visibleByDefault: true, + visibleByDefault: false, + essential: true, valueGetter: ':sourceAlias.id', }, { @@ -34,6 +35,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ':sourceAlias.creation_date', }, { @@ -45,6 +47,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ':sourceAlias.created_by', }, { @@ -54,7 +57,7 @@ dataType: 'rangedUUIDType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ':sourceAlias.loanspolicy_fixedduedatescheduleid', }, @@ -65,7 +68,7 @@ dataType: 'rangedUUIDType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ':sourceAlias.renewalspolicy_alternatefixedduedatescheduleid', }, @@ -78,6 +81,7 @@ isIdColumn: false, queryable: true, visibleByDefault: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'name'", }, { @@ -88,7 +92,7 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: true, + visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'description'", }, { @@ -99,7 +103,9 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: true, + visibleByDefault: false, + hidden: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'loanable'", values: [ { @@ -120,7 +126,9 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: true, + visibleByDefault: false, + hidden: true, + essential: true, valueGetter: ":sourceAlias.jsonb->'loansPolicy'->>'profileId'", }, { @@ -131,7 +139,9 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: true, + visibleByDefault: false, + hidden: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'renewable'", values: [ { @@ -151,7 +161,7 @@ dataType: 'booleanType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'renewalsPolicy'->>'unlimited'", values: [ @@ -172,7 +182,7 @@ dataType: 'numberType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'renewalsPolicy'->>'numberAllowed'", }, @@ -183,7 +193,7 @@ dataType: 'stringType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'renewalsPolicy'->>'renewFromId'", }, @@ -194,7 +204,7 @@ dataType: 'booleanType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'renewalsPolicy'->>'differentPeriod'", values: [ @@ -215,7 +225,7 @@ dataType: 'integerType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'loansPolicy'->'period'->>'duration'", }, @@ -226,7 +236,7 @@ dataType: 'stringType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'loansPolicy'->'period'->>'intervalId'", values: [ @@ -259,7 +269,7 @@ dataType: 'stringType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'loansPolicy'->>'closedLibraryDueDateManagementId'", values: [ // From https://github.com/folio-org/mod-circulation/blob/master/src/main/java/org/folio/circulation/domain/policy/DueDateManagement.java @@ -296,7 +306,7 @@ dataType: 'integerType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: "(:sourceAlias.jsonb->'loansPolicy'->'gracePeriod'->>'duration')::integer", valueFunction: '(:value)::integer' @@ -308,7 +318,7 @@ dataType: 'stringType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'loansPolicy'->'gracePeriod'->>'intervalId'", values: [ @@ -341,7 +351,7 @@ dataType: 'integerType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: "(:sourceAlias.jsonb->'loansPolicy'->'openingTimeOffset'->>'duration')::integer", valueFunction: '(:value)::integer' @@ -353,7 +363,7 @@ dataType: 'stringType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'loansPolicy'->'openingTimeOffset'->>'intervalId'", values: [ @@ -386,7 +396,7 @@ dataType: 'rangedUUIDType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'loansPolicy'->>'fixedDueDateScheduleId'", }, @@ -397,7 +407,7 @@ dataType: 'integerType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: "(:sourceAlias.jsonb->'loansPolicy'->>'itemLimit')::integer", valueFunction: '(:value)::integer' @@ -409,7 +419,7 @@ dataType: 'integerType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'renewalsPolicy'->'period'->>'duration'", }, @@ -420,7 +430,7 @@ dataType: 'stringType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'renewalsPolicy'->'period'->>'intervalId'", values: [ @@ -453,7 +463,7 @@ dataType: 'integerType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: "(:sourceAlias.jsonb->'requestManagement'->'recalls'->'alternateGracePeriod'->>'duration')::integer", valueFunction: '(:value)::integer' @@ -465,7 +475,7 @@ dataType: 'stringType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'requestManagement'->'recalls'->'alternateGracePeriod'->>'intervalId'", values: [ @@ -498,7 +508,7 @@ dataType: 'integerType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: "(:sourceAlias.jsonb->'requestManagement'->'recalls'->'minimumGuaranteedLoanPeriod'->>'duration')::integer", valueFunction: '(:value)::integer' @@ -510,7 +520,7 @@ dataType: 'stringType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'requestManagement'->'recalls'->'minimumGuaranteedLoanPeriod'->>'intervalId'", values: [ @@ -543,7 +553,7 @@ dataType: 'integerType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: "(:sourceAlias.jsonb->'requestManagement'->'recalls'->'recallReturnInterval'->>'duration')::integer", valueFunction: '(:value)::integer' @@ -555,7 +565,7 @@ dataType: 'stringType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'requestManagement'->'recalls'->'recallReturnInterval'->>'intervalId'", values: [ @@ -588,7 +598,7 @@ dataType: 'booleanType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'requestManagement'->'recalls'->>'allowRecallsToExtendOverdueLoans'", values: [ @@ -609,7 +619,7 @@ dataType: 'integerType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: "(:sourceAlias.jsonb->'requestManagement'->'recalls'->'alternateRecallReturnInterval'->>'duration')::integer", valueFunction: '(:value)::integer' @@ -621,7 +631,7 @@ dataType: 'stringType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'requestManagement'->'recalls'->'alternateRecallReturnInterval'->>'intervalId'", values: [ @@ -654,7 +664,7 @@ dataType: 'integerType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: "(:sourceAlias.jsonb->'requestManagement'->'holds'->'alternateCheckoutLoanPeriod'->>'duration')::integer", valueFunction: '(:value)::integer' @@ -666,7 +676,7 @@ dataType: 'stringType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'requestManagement'->'holds'->'alternateCheckoutLoanPeriod'->>'intervalId'", values: [ @@ -699,7 +709,7 @@ dataType: 'booleanType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'requestManagement'->'holds'->>'renewItemsWithRequest'", values: [ @@ -720,7 +730,7 @@ dataType: 'integerType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: "(:sourceAlias.jsonb->'requestManagement'->'holds'->'alternateRenewalLoanPeriod'->>'duration')::integer", valueFunction: '(:value)::integer' @@ -732,7 +742,7 @@ dataType: 'stringType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'requestManagement'->'holds'->'alternateRenewalLoanPeriod'->>'intervalId'", values: [ @@ -765,7 +775,7 @@ dataType: 'integerType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: "(:sourceAlias.jsonb->'requestManagement'->'pages'->'alternateCheckoutLoanPeriod'->>'duration')::integer", valueFunction: '(:value)::integer' @@ -777,7 +787,7 @@ dataType: 'stringType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'requestManagement'->'pages'->'alternateCheckoutLoanPeriod'->>'intervalId'", values: [ @@ -810,7 +820,7 @@ dataType: 'booleanType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'requestManagement'->'pages'->>'renewItemsWithRequest'", values: [ @@ -831,7 +841,7 @@ dataType: 'integerType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: "(:sourceAlias.jsonb->'requestManagement'->'pages'->'alternateRenewalLoanPeriod'->>'duration')::integer", valueFunction: '(:value)::integer' @@ -843,7 +853,7 @@ dataType: 'stringType', }, isIdColumn: false, - queryable: true, + queryable: false, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'requestManagement'->'pages'->'alternateRenewalLoanPeriod'->>'intervalId'", values: [ @@ -877,8 +887,9 @@ }, isIdColumn: false, queryable: false, - hidden: true, visibleByDefault: false, + hidden: true, + essential: true, valueGetter: ":sourceAlias.jsonb::text", } ], From e8de71328353f008af9f2397dc073a7862734784 Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Tue, 15 Oct 2024 10:07:51 -0500 Subject: [PATCH 26/45] fixing the valueSourceApi of users --- .../entity-types/users/simple_group_details.json5 | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/resources/entity-types/users/simple_group_details.json5 b/src/main/resources/entity-types/users/simple_group_details.json5 index 9f7c6ec7..ab800796 100644 --- a/src/main/resources/entity-types/users/simple_group_details.json5 +++ b/src/main/resources/entity-types/users/simple_group_details.json5 @@ -27,7 +27,6 @@ valueGetter: ":sourceAlias.jsonb->>'group'", filterValueGetter: "lower(${tenant_id}_mod_users.f_unaccent(:sourceAlias.jsonb ->> 'group'::text))", valueFunction: 'lower(${tenant_id}_mod_users.f_unaccent(:value))', - idColumnName: 'id', source: { entityTypeId: "e7717b38-4ff3-4fb9-ae09-b3d0c8400710", columnName: 'group' @@ -49,6 +48,15 @@ essential: true, visibleByDefault: false, valueGetter: ':sourceAlias.id', + source: { + entityTypeId: "e7717b38-4ff3-4fb9-ae09-b3d0c8400710", + columnName: 'id' + }, + valueSourceApi: { + path: 'groups', + valueJsonPath: '$.usergroups.*.id', + labelJsonPath: '$.usergroups.*.id', + } }, { name: 'expiration_off_set_in_days', From 1c1e2835d5f4eb34ab63c0ae29bd36241a00955c Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Tue, 15 Oct 2024 11:55:02 -0500 Subject: [PATCH 27/45] MODFQMMGR-489:Entity adjustments: Simple loans entity adjustments --- .../circulation/composite_loan_details.json5 | 1 + .../circulation/simple_loan.json5 | 56 ++++++++++++++++--- 2 files changed, 50 insertions(+), 7 deletions(-) diff --git a/src/main/resources/entity-types/circulation/composite_loan_details.json5 b/src/main/resources/entity-types/circulation/composite_loan_details.json5 index 86a45eaf..cc5713f7 100644 --- a/src/main/resources/entity-types/circulation/composite_loan_details.json5 +++ b/src/main/resources/entity-types/circulation/composite_loan_details.json5 @@ -7,6 +7,7 @@ type: 'entity-type', id: '00349126-c923-4045-a29f-3b6db4c6bea9', useIdColumns: true, + essentialOnly: true }, { alias: 'lpolicy', diff --git a/src/main/resources/entity-types/circulation/simple_loan.json5 b/src/main/resources/entity-types/circulation/simple_loan.json5 index 45af6135..031940a0 100644 --- a/src/main/resources/entity-types/circulation/simple_loan.json5 +++ b/src/main/resources/entity-types/circulation/simple_loan.json5 @@ -22,7 +22,8 @@ }, isIdColumn: true, queryable: true, - visibleByDefault: true, + visibleByDefault: false, + essential: true, valueGetter: ':sourceAlias.id', }, { @@ -34,6 +35,8 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, + essential: true, valueGetter: ':sourceAlias.creation_date', }, { @@ -56,6 +59,8 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'userId'", }, { @@ -67,6 +72,8 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'proxyUserId'", }, { @@ -78,7 +85,12 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'itemId'", + filterValueGetter: '"left"(lower(${tenant_id}_mod_circulation_storage.f_unaccent(:sourceAlias.jsonb ->> \'itemId\'::text)), 600)', + valueFunction: '"left"(lower(${tenant_id}_mod_circulation_storage.f_unaccent(:value)), 600)' + }, { name: 'item_effective_location_id_at_check_out', @@ -99,7 +111,8 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: true, + visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->'status'->>'name'", filterValueGetter: "\"left\"(lower(${tenant_id}_mod_circulation_storage.f_unaccent((:sourceAlias.jsonb -> 'status'::text) ->> 'name'::text)), 600)", valueFunction: '"left"(lower(${tenant_id}_mod_circulation_storage.f_unaccent(:value)), 600)' @@ -112,8 +125,10 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: true, + visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'loanDate'", + filterValueGetter: '"left"(lower(${tenant_id}_mod_circulation_storage.f_unaccent(:sourceAlias.jsonb ->> \'loanDate\'::text)), 600)', + valueFunction: '"left"(lower(${tenant_id}_mod_circulation_storage.f_unaccent(:value)), 600)' }, { name: 'due_date', @@ -123,6 +138,7 @@ }, isIdColumn: false, queryable: true, + essential: true, visibleByDefault: true, valueGetter: ":sourceAlias.jsonb->>'dueDate'", filterValueGetter: '"left"(lower(:sourceAlias.jsonb ->> \'dueDate\'::text), 600)', @@ -137,6 +153,7 @@ isIdColumn: false, queryable: true, visibleByDefault: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'returnDate'", }, { @@ -158,8 +175,11 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: true, + visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'action'", + filterValueGetter: '"left"(lower(${tenant_id}_mod_circulation_storage.f_unaccent(:sourceAlias.jsonb ->> \'action\'::text)), 600)', + valueFunction: '"left"(lower(${tenant_id}_mod_circulation_storage.f_unaccent(:value)), 600)' }, { name: 'action_comment', @@ -181,7 +201,10 @@ isIdColumn: false, queryable: true, visibleByDefault: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'itemStatus'", + filterValueGetter: '"left"(lower(${tenant_id}_mod_circulation_storage.f_unaccent(:sourceAlias.jsonb ->> \'itemStatus\'::text)), 600)', + valueFunction: '"left"(lower(${tenant_id}_mod_circulation_storage.f_unaccent(:value)), 600)' }, { name: 'renewal_count', @@ -192,6 +215,7 @@ isIdColumn: false, queryable: true, visibleByDefault: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'renewalCount'", }, { @@ -203,6 +227,8 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'loanPolicyId'", }, { @@ -214,7 +240,11 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'checkoutServicePointId'", + filterValueGetter: '"left"(lower(${tenant_id}_mod_circulation_storage.f_unaccent(:sourceAlias.jsonb ->> \'checkoutServicePointId\'::text)), 600)', + valueFunction: '"left"(lower(${tenant_id}_mod_circulation_storage.f_unaccent(:value)), 600)' }, { name: 'checkin_service_point_id', @@ -225,7 +255,11 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'checkinServicePointId'", + filterValueGetter: '"left"(lower(${tenant_id}_mod_circulation_storage.f_unaccent(:sourceAlias.jsonb ->> \'checkinServicePointId\'::text)), 600)', + valueFunction: '"left"(lower(${tenant_id}_mod_circulation_storage.f_unaccent(:value)), 600)' }, { name: 'patron_group_id_at_checkout', @@ -236,6 +270,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->>'patronGroupIdAtCheckout'", }, { @@ -246,6 +281,7 @@ }, isIdColumn: false, queryable: true, + essential: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'dueDateChangedByRecall'", values: [ @@ -267,7 +303,8 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: true, + visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'declaredLostDate'", }, { @@ -278,7 +315,8 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: true, + visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'claimedReturnedDate'", }, { @@ -290,6 +328,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->>'overdueFinePolicyId'", }, { @@ -301,6 +340,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->>'lostItemPolicyId'", }, { @@ -332,7 +372,8 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: false, + hidden: true, + visibleByDefault: true, valueGetter: ":sourceAlias.jsonb->'agedToLostDelayedBilling'->>'dateLostItemShouldBeBilled'", }, { @@ -366,6 +407,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->'reminders'->'lastFeeBilled'->>'date'", }, { From 4ba335c37df1d5300a00b4ced7efed857f8c7c39 Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Tue, 15 Oct 2024 13:26:26 -0500 Subject: [PATCH 28/45] MODFQMMGR-491:Entity adjustments: Simple holdings entity adjustments --- .../circulation/composite_loan_details.json5 | 1 + .../inventory/composite_holdings_record.json5 | 3 +- .../inventory/composite_item_details.json5 | 1 + .../inventory/simple_holdings_records.json5 | 138 +++++------------- translations/mod-fqm-manager/en.json | 14 +- translations/mod-fqm-manager/en_US.json | 14 +- 6 files changed, 58 insertions(+), 113 deletions(-) diff --git a/src/main/resources/entity-types/circulation/composite_loan_details.json5 b/src/main/resources/entity-types/circulation/composite_loan_details.json5 index cc5713f7..826ff862 100644 --- a/src/main/resources/entity-types/circulation/composite_loan_details.json5 +++ b/src/main/resources/entity-types/circulation/composite_loan_details.json5 @@ -89,6 +89,7 @@ alias: 'holdings', type: 'entity-type', id: '30a5cfad-1868-4f46-86b9-a6ef67e2d9bf', + essentialOnly: true, join: { type: 'left join', joinTo: 'items.item', diff --git a/src/main/resources/entity-types/inventory/composite_holdings_record.json5 b/src/main/resources/entity-types/inventory/composite_holdings_record.json5 index 376af301..5ab169a6 100644 --- a/src/main/resources/entity-types/inventory/composite_holdings_record.json5 +++ b/src/main/resources/entity-types/inventory/composite_holdings_record.json5 @@ -8,7 +8,8 @@ alias: 'holdings', type: 'entity-type', id: '30a5cfad-1868-4f46-86b9-a6ef67e2d9bf', // simple_holdings_records - useIdColumns: true + useIdColumns: true, + essentialOnly: true }, { alias: 'effective_location', diff --git a/src/main/resources/entity-types/inventory/composite_item_details.json5 b/src/main/resources/entity-types/inventory/composite_item_details.json5 index c65fd879..f10757f8 100644 --- a/src/main/resources/entity-types/inventory/composite_item_details.json5 +++ b/src/main/resources/entity-types/inventory/composite_item_details.json5 @@ -91,6 +91,7 @@ alias: 'holdings', type: 'entity-type', id: '30a5cfad-1868-4f46-86b9-a6ef67e2d9bf', // simple_holdings_records + essentialOnly: true, join: { joinTo: 'items.item', type: 'join', diff --git a/src/main/resources/entity-types/inventory/simple_holdings_records.json5 b/src/main/resources/entity-types/inventory/simple_holdings_records.json5 index 1f6e6901..99c5795e 100644 --- a/src/main/resources/entity-types/inventory/simple_holdings_records.json5 +++ b/src/main/resources/entity-types/inventory/simple_holdings_records.json5 @@ -24,7 +24,8 @@ }, isIdColumn: true, queryable: true, - visibleByDefault: true, + visibleByDefault: false, + essential: true, valueGetter: ':sourceAlias.id', }, { @@ -37,6 +38,7 @@ queryable: true, visibleByDefault: false, valueGetter: ':sourceAlias.created_by', + essential: true }, { name: 'created_at', @@ -48,6 +50,7 @@ queryable: true, visibleByDefault: true, valueGetter: ':sourceAlias.creation_date', + essential: true }, { name: 'updated_by', @@ -57,8 +60,9 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: false, + visibleByDefault: true, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedByUserId'", + essential: true }, { name: 'updated_at', @@ -70,6 +74,7 @@ queryable: true, visibleByDefault: true, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedDate'", + essential: true }, { name: 'version', @@ -81,6 +86,7 @@ queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'_version'", + essential: true }, { name: 'hrid', @@ -92,6 +98,7 @@ queryable: true, visibleByDefault: true, valueGetter: ":sourceAlias.jsonb->>'hrid'", + essential: true, filterValueGetter: "lower(${tenant_id}_mod_inventory_storage.f_unaccent(:sourceAlias.jsonb ->> 'hrid'))", valueFunction: 'lower(${tenant_id}_mod_inventory_storage.f_unaccent(:value))' }, @@ -102,6 +109,9 @@ dataType: 'rangedUUIDType', }, valueGetter: ':sourceAlias.callnumbertypeid', + queryable: false, + visibleByDefault: false, + essential: true }, { name: 'effective_location_id', @@ -126,6 +136,7 @@ queryable: true, visibleByDefault: false, valueGetter: ':sourceAlias.holdingstypeid', + essential: true }, { name: 'ill_policy_id', @@ -148,6 +159,7 @@ queryable: true, visibleByDefault: false, valueGetter: ':sourceAlias.instanceid', + essential: true, }, { name: 'permanent_location_id', @@ -159,6 +171,7 @@ queryable: true, visibleByDefault: false, valueGetter: ':sourceAlias.permanentlocationid', + essential: true }, { name: 'temporary_location_id', @@ -170,6 +183,7 @@ queryable: true, visibleByDefault: false, valueGetter: ':sourceAlias.temporarylocationid', + essential: true }, { name: 'source_id', @@ -181,6 +195,7 @@ queryable: true, visibleByDefault: false, valueGetter: ':sourceAlias.sourceid', + essential: true }, { name: 'call_number', @@ -205,6 +220,7 @@ isIdColumn: false, queryable: false, visibleByDefault: false, + essential: true, valueGetter: "(\ SELECT\ array_agg(el::text)\ @@ -227,8 +243,9 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: true, + visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'callNumberPrefix'", + essential: true }, { name: 'call_number_suffix', @@ -238,8 +255,9 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: true, + visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'callNumberSuffix'", + essential: true }, { name: 'discovery_suppress', @@ -249,6 +267,7 @@ }, isIdColumn: false, queryable: true, + essential: true, visibleByDefault: true, valueGetter: ":sourceAlias.jsonb->>'discoverySuppress'", filterValueGetter: "COALESCE(\ @@ -269,6 +288,7 @@ { name: 'statistical_code_ids', sourceAlias: 'hrd', + essential: true, dataType: { dataType: 'arrayType', itemDataType: { @@ -295,6 +315,7 @@ { name: 'statistical_code_names', sourceAlias: 'hrd', + essential: true, dataType: { dataType: 'arrayType', itemDataType: { @@ -315,6 +336,7 @@ { name: 'holdings_statements', sourceAlias: 'hrd', + essential: true, dataType: { dataType: 'arrayType', itemDataType: { @@ -375,6 +397,7 @@ { name: 'holdings_statements_for_indexes', sourceAlias: 'hrd', + essential: true, dataType: { dataType: 'arrayType', itemDataType: { @@ -434,6 +457,7 @@ }, { name: 'holdings_statements_for_supplements', + essential: true, sourceAlias: 'hrd', dataType: { dataType: 'arrayType', @@ -544,23 +568,13 @@ filterValueGetter: "( SELECT array_agg(lower(elems.value->>'publicNote')) FROM jsonb_array_elements(:sourceAlias.jsonb->'electronicAccess') AS elems)", valueFunction: 'lower(:value)', }, - { - name: 'relationship_id', - property: 'relationshipId', - dataType: { - dataType: 'stringType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'relationshipId') FROM jsonb_array_elements(:sourceAlias.jsonb->'electronicAccess') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'relationshipId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'electronicAccess') AS elems)", - valueFunction: 'lower(:value)', - }, ], }, }, isIdColumn: false, queryable: false, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'electronicAccess'", }, { @@ -573,6 +587,7 @@ queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'shelvingTitle'", + essential: true }, { name: 'acquisition_format', @@ -606,6 +621,7 @@ queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'receiptStatus'", + essential: true }, { name: 'retention_policy', @@ -617,6 +633,7 @@ queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'retentionPolicy'", + essential: true }, { name: 'digitization_policy', @@ -628,6 +645,7 @@ queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'digitizationPolicy'", + essential: true }, { name: 'copy_number', @@ -639,6 +657,7 @@ queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'copyNumber'", + essential: true, }, { name: 'number_of_items', @@ -650,77 +669,8 @@ queryable: true, visibleByDefault: false, valueGetter: "(:sourceAlias.jsonb->>'numberOfItems')::float", - valueFunction: '(:value)::float' - }, - { - name: 'receiving_history_display_type', - sourceAlias: 'hrd', - dataType: { - dataType: 'stringType', - }, - isIdColumn: false, - queryable: true, - visibleByDefault: false, - valueGetter: ":sourceAlias.jsonb->'receivingHistory'->>'displayType'", - }, - { - name: 'receiving_history_entries', - sourceAlias: 'hrd', - dataType: { - dataType: 'arrayType', - itemDataType: { - dataType: 'objectType', - properties: [ - { - name: 'public_display', - property: 'publicDisplay', - dataType: { - dataType: 'booleanType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'publicDisplay') FROM jsonb_array_elements(:sourceAlias.jsonb->'receivingHistory'->'entries') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'publicDisplay')) FROM jsonb_array_elements(:sourceAlias.jsonb->'receivingHistory'->'entries') AS elems)", - valueFunction: 'lower(:value)', - values: [ - { - value: 'true', - label: 'True', - }, - { - value: 'false', - label: 'False', - }, - ], - }, - { - name: 'enumeration', - property: 'enumeration', - dataType: { - dataType: 'stringType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'enumeration') FROM jsonb_array_elements(:sourceAlias.jsonb->'receivingHistory'->'entries') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'enumeration')) FROM jsonb_array_elements(:sourceAlias.jsonb->'receivingHistory'->'entries') AS elems)", - valueFunction: 'lower(:value)', - }, - { - name: 'chronology', - property: 'chronology', - dataType: { - dataType: 'stringType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'chronology') FROM jsonb_array_elements(:sourceAlias.jsonb->'receivingHistory'->'entries') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'chronology')) FROM jsonb_array_elements(:sourceAlias.jsonb->'receivingHistory'->'entries') AS elems)", - valueFunction: 'lower(:value)', - }, - ], - }, - }, - isIdColumn: false, - queryable: false, - visibleByDefault: false, - valueGetter: ":sourceAlias.jsonb->'receivingHistory'->>'entries'", + valueFunction: '(:value)::float', + essential: true }, { name: 'administrative_notes', @@ -749,6 +699,7 @@ }, { name: 'tags', + essential: true, sourceAlias: 'hrd', dataType: { dataType: 'arrayType', @@ -758,7 +709,7 @@ }, isIdColumn: false, queryable: false, - visibleByDefault: false, + visibleByDefault: true, valueGetter: "(\ SELECT\ array_agg(elems.value::text) FILTER (\ @@ -782,22 +733,12 @@ { name: 'notes', sourceAlias: 'hrd', + essential: true, dataType: { dataType: 'arrayType', itemDataType: { dataType: 'objectType', properties: [ - { - name: 'holdings_note_type_id', - property: 'holdingsNoteTypeId', - dataType: { - dataType: 'rangedUUIDType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'holdingsNoteTypeId') FROM jsonb_array_elements(:sourceAlias.jsonb->'notes') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'holdingsNoteTypeId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'notes') AS elems)", - valueFunction: 'lower(:value)', - }, { name: 'note', property: 'note', @@ -866,6 +807,7 @@ queryable: false, hidden: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb::text", } ], diff --git a/translations/mod-fqm-manager/en.json b/translations/mod-fqm-manager/en.json index deaf91bb..983ece60 100644 --- a/translations/mod-fqm-manager/en.json +++ b/translations/mod-fqm-manager/en.json @@ -551,7 +551,7 @@ "entityType.simple_group_details.updated_by_username": "Updated by username", "entityType.simple_group_details.updated_date": "Updated date", "entityType.simple_holdings_records": "Holdings", - "entityType.simple_holdings_records.acquisition_format": "Acquisition format", + "entityType.simple_holdings_records.acquisition_format": "Acquisition order format", "entityType.simple_holdings_records.acquisition_method": "Acquisition method", "entityType.simple_holdings_records.administrative_notes": "Administrative notes", "entityType.simple_holdings_records.call_number": "Call number", @@ -559,10 +559,10 @@ "entityType.simple_holdings_records.call_number_suffix": "Call number suffix", "entityType.simple_holdings_records.call_number_type_id": "Call number type UUID", "entityType.simple_holdings_records.copy_number": "Copy number", - "entityType.simple_holdings_records.created_at": "Created at", + "entityType.simple_holdings_records.created_at": "Created date", "entityType.simple_holdings_records.created_by": "Created by user UUID", "entityType.simple_holdings_records.digitization_policy": "Digitization policy", - "entityType.simple_holdings_records.discovery_suppress": "Suppressed from discovery", + "entityType.simple_holdings_records.discovery_suppress": "Suppress from discovery", "entityType.simple_holdings_records.effective_location_id": "Effective location UUID", "entityType.simple_holdings_records.electronic_access": "Electronic access", "entityType.simple_holdings_records.electronic_access.link_text": "Link text", @@ -577,8 +577,8 @@ "entityType.simple_holdings_records.electronic_access.uri._qualified": "Electronic access URI", "entityType.simple_holdings_records.former_ids": "Former IDs", "entityType.simple_holdings_records.holdings_statements": "Statements", - "entityType.simple_holdings_records.holdings_statements.note": "Note", - "entityType.simple_holdings_records.holdings_statements.note._qualified": "Statements — Note", + "entityType.simple_holdings_records.holdings_statements.note": "Public note", + "entityType.simple_holdings_records.holdings_statements.note._qualified": "Statements — Public note", "entityType.simple_holdings_records.holdings_statements.staff_note": "Staff note", "entityType.simple_holdings_records.holdings_statements.staff_note._qualified": "Statements — Staff note", "entityType.simple_holdings_records.holdings_statements.statement": "Statement", @@ -612,7 +612,7 @@ "entityType.simple_holdings_records.notes.staff_only._qualified": "Notes staff only", "entityType.simple_holdings_records.number_of_items": "Number of items", "entityType.simple_holdings_records.permanent_location_id": "Permanent location UUID", - "entityType.simple_holdings_records.receipt_status": "Receipt status", + "entityType.simple_holdings_records.receipt_status": "Acquisition receipt status", "entityType.simple_holdings_records.receiving_history_display_type": "Receiving history display type", "entityType.simple_holdings_records.receiving_history_entries": "Receiving history entries", "entityType.simple_holdings_records.receiving_history_entries.chronology": "Chronology", @@ -630,7 +630,7 @@ "entityType.simple_holdings_records.temporary_location_id": "Temporary location UUID", "entityType.simple_holdings_records.temporary_location_id_copy": "Temporary location UUID", "entityType.simple_holdings_records.tenant_id": "Tenant ID", - "entityType.simple_holdings_records.updated_at": "Updated at", + "entityType.simple_holdings_records.updated_at": "Updated date", "entityType.simple_holdings_records.updated_by": "Updated by user UUID", "entityType.simple_holdings_records.version": "Record version", "entityType.simple_instance": "Instances", diff --git a/translations/mod-fqm-manager/en_US.json b/translations/mod-fqm-manager/en_US.json index 1c22e7df..69092fe0 100644 --- a/translations/mod-fqm-manager/en_US.json +++ b/translations/mod-fqm-manager/en_US.json @@ -617,7 +617,7 @@ "entityType.simple_exchange_rates.currency": "Currency", "entityType.simple_exchange_rates.rate": "Rate", "entityType.simple_holdings_records": "Holdings", - "entityType.simple_holdings_records.acquisition_format": "Acquisition format", + "entityType.simple_holdings_records.acquisition_format": "Acquisition order format", "entityType.simple_holdings_records.acquisition_method": "Acquisition method", "entityType.simple_holdings_records.administrative_notes": "Administrative notes", "entityType.simple_holdings_records.call_number": "Call number", @@ -625,10 +625,10 @@ "entityType.simple_holdings_records.call_number_suffix": "Call number suffix", "entityType.simple_holdings_records.call_number_type_id": "Call number type UUID", "entityType.simple_holdings_records.copy_number": "Copy number", - "entityType.simple_holdings_records.created_at": "Created at", + "entityType.simple_holdings_records.created_at": "Created date", "entityType.simple_holdings_records.created_by": "Created by user UUID", "entityType.simple_holdings_records.digitization_policy": "Digitization policy", - "entityType.simple_holdings_records.discovery_suppress": "Suppressed from discovery", + "entityType.simple_holdings_records.discovery_suppress": "Suppress from discovery", "entityType.simple_holdings_records.effective_location_id": "Effective location UUID", "entityType.simple_holdings_records.electronic_access": "Electronic access", "entityType.simple_holdings_records.electronic_access.link_text": "Link text", @@ -643,8 +643,8 @@ "entityType.simple_holdings_records.electronic_access.uri._qualified": "Electronic access URI", "entityType.simple_holdings_records.former_ids": "Former IDs", "entityType.simple_holdings_records.holdings_statements": "Statements", - "entityType.simple_holdings_records.holdings_statements.note": "Note", - "entityType.simple_holdings_records.holdings_statements.note._qualified": "Statements — Note", + "entityType.simple_holdings_records.holdings_statements.note": "Public note", + "entityType.simple_holdings_records.holdings_statements.note._qualified": "Statements Public note", "entityType.simple_holdings_records.holdings_statements.staff_note": "Staff note", "entityType.simple_holdings_records.holdings_statements.staff_note._qualified": "Statements — Staff note", "entityType.simple_holdings_records.holdings_statements.statement": "Statement", @@ -677,7 +677,7 @@ "entityType.simple_holdings_records.notes.staff_only._qualified": "Notes staff only", "entityType.simple_holdings_records.number_of_items": "Number of items", "entityType.simple_holdings_records.permanent_location_id": "Permanent location UUID", - "entityType.simple_holdings_records.receipt_status": "Receipt status", + "entityType.simple_holdings_records.receipt_status": "Acquisition receipt status", "entityType.simple_holdings_records.receiving_history_display_type": "Receiving history display type", "entityType.simple_holdings_records.receiving_history_entries": "Receiving history entries", "entityType.simple_holdings_records.receiving_history_entries.chronology": "Chronology", @@ -693,7 +693,7 @@ "entityType.simple_holdings_records.tags": "Tags", "entityType.simple_holdings_records.temporary_location_id": "Temporary location UUID", "entityType.simple_holdings_records.temporary_location_id_copy": "Temporary location UUID", - "entityType.simple_holdings_records.updated_at": "Updated at", + "entityType.simple_holdings_records.updated_at": "Updated date", "entityType.simple_holdings_records.updated_by": "Updated by user UUID", "entityType.simple_holdings_records.version": "Record version", "entityType.simple_instance": "Instances", From 3b4605bf1185c4fcdcbbd94c60809145cf646a44 Mon Sep 17 00:00:00 2001 From: Noah Overcash Date: Wed, 16 Oct 2024 08:13:25 -0400 Subject: [PATCH 29/45] [MODFQMMGR-525] Use folio-spring-support 8.3.0-SNAPSHOT (#460) --- pom.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5643511a..6d524d8c 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ - 8.1.0 + 8.3.0-SNAPSHOT 2.1.0-SNAPSHOT 1.5.2.Final 2.1.0-SNAPSHOT @@ -32,6 +32,7 @@ 42.5.4 3.18.4 4.4 + 3.17.0 3.2.0 @@ -130,6 +131,12 @@ ${org.apache.commons.version} + + org.apache.commons + commons-lang3 + ${org.apache.commons-lang3.version} + + org.mapstruct mapstruct From 068b6f7aba67670f93c81a8cec2a5e112bdef961 Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Tue, 15 Oct 2024 16:19:58 -0500 Subject: [PATCH 30/45] fxing-holding --- .../resources/entity-types/circulation/simple_loan.json5 | 2 +- .../entity-types/inventory/simple_holdings_records.json5 | 4 +++- translations/mod-fqm-manager/en.json | 6 +++--- translations/mod-fqm-manager/en_US.json | 6 +++--- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/resources/entity-types/circulation/simple_loan.json5 b/src/main/resources/entity-types/circulation/simple_loan.json5 index 031940a0..5a0f4afc 100644 --- a/src/main/resources/entity-types/circulation/simple_loan.json5 +++ b/src/main/resources/entity-types/circulation/simple_loan.json5 @@ -35,7 +35,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, - hidden: true, + hidden: false, essential: true, valueGetter: ':sourceAlias.creation_date', }, diff --git a/src/main/resources/entity-types/inventory/simple_holdings_records.json5 b/src/main/resources/entity-types/inventory/simple_holdings_records.json5 index 99c5795e..1fec4dbb 100644 --- a/src/main/resources/entity-types/inventory/simple_holdings_records.json5 +++ b/src/main/resources/entity-types/inventory/simple_holdings_records.json5 @@ -111,7 +111,8 @@ valueGetter: ':sourceAlias.callnumbertypeid', queryable: false, visibleByDefault: false, - essential: true + essential: true, + hidden: true }, { name: 'effective_location_id', @@ -207,6 +208,7 @@ queryable: true, visibleByDefault: true, valueGetter: ":sourceAlias.jsonb->>'callNumber'", + essential: true }, { name: 'former_ids', diff --git a/translations/mod-fqm-manager/en.json b/translations/mod-fqm-manager/en.json index 983ece60..fade107b 100644 --- a/translations/mod-fqm-manager/en.json +++ b/translations/mod-fqm-manager/en.json @@ -44,8 +44,8 @@ "entityType.composite_ledger_fund.fund": "Fund", "entityType.composite_ledger_fund.ledger": "Ledger", "entityType.composite_loan_details": "Loans", - "entityType.composite_loan_details.cispi": "Cispi", - "entityType.composite_loan_details.cospi": "Cospi", + "entityType.composite_loan_details.cispi": "Check in service point", + "entityType.composite_loan_details.cospi": "Check out service point", "entityType.composite_loan_details.groups": "Patron group", "entityType.composite_loan_details.holdings": "Holdings", "entityType.composite_loan_details.instance": "Instance", @@ -99,7 +99,7 @@ "entityType.composite_purchase_order_lines.rates": "Exchange rate", "entityType.composite_purchase_order_lines.vendor_organization": "Vendor organization", "entityType.composite_user_details": "Users", - "entityType.composite_user_details.groups": "Group", + "entityType.composite_user_details.groups": "Patron group", "entityType.composite_user_details.users": "User", "entityType.composite_voucher_line__fund_distribution": "Composite voucher line fund distribution", "entityType.composite_voucher_line__fund_distribution.code": "Fund code", diff --git a/translations/mod-fqm-manager/en_US.json b/translations/mod-fqm-manager/en_US.json index 69092fe0..fb03fb96 100644 --- a/translations/mod-fqm-manager/en_US.json +++ b/translations/mod-fqm-manager/en_US.json @@ -1237,12 +1237,12 @@ "entityType.simple_instance_status.updated_by_username": "Updated by username", "entityType.composite_user_details": "Users", "entityType.composite_user_details.users": "User", - "entityType.composite_user_details.groups": "Group", + "entityType.composite_user_details.groups": "Patron group", "entityType.composite_loan_details": "Loans", "entityType.composite_loan_details.users": "User", "entityType.composite_loan_details.groups": "Patron group", - "entityType.composite_loan_details.cispi": "Cispi", - "entityType.composite_loan_details.cospi": "Cospi", + "entityType.composite_loan_details.cispi": "Check in service point", + "entityType.composite_loan_details.cospi": "Check out service point", "entityType.composite_loan_details.holdings": "Holdings", "entityType.composite_loan_details.instance": "Instance", "entityType.composite_loan_details.items": "Item", From adaf8cc7a6d2e3a2750d8ad7f92718cf1a13e3fc Mon Sep 17 00:00:00 2001 From: Matt Weaver Date: Wed, 16 Oct 2024 10:36:52 -0700 Subject: [PATCH 31/45] MODFQMMGR-497 Change data type for instance dates --- .../resources/entity-types/inventory/simple_instance.json5 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/entity-types/inventory/simple_instance.json5 b/src/main/resources/entity-types/inventory/simple_instance.json5 index 3a73cb36..ca8ec353 100644 --- a/src/main/resources/entity-types/inventory/simple_instance.json5 +++ b/src/main/resources/entity-types/inventory/simple_instance.json5 @@ -691,7 +691,7 @@ sourceAlias: 'inst', essential: true, dataType: { - dataType: 'dateType', + dataType: 'stringType', }, isIdColumn: false, queryable: true, @@ -703,7 +703,7 @@ sourceAlias: 'inst', essential: true, dataType: { - dataType: 'integerType', + dataType: 'stringType', }, isIdColumn: false, queryable: true, From 1b9c4971857ab14ff6d22606eabb73b8a40483c9 Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Wed, 16 Oct 2024 12:41:09 -0500 Subject: [PATCH 32/45] adding order by to contributor --- .../entity-types/inventory/simple_instance.json5 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/resources/entity-types/inventory/simple_instance.json5 b/src/main/resources/entity-types/inventory/simple_instance.json5 index ca8ec353..65082590 100644 --- a/src/main/resources/entity-types/inventory/simple_instance.json5 +++ b/src/main/resources/entity-types/inventory/simple_instance.json5 @@ -399,8 +399,8 @@ essential: true, visibleByDefault: false, hidden: true, - valueGetter: "( SELECT array_agg(elems.value->>'contributorTypeId') FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'contributorTypeId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", + valueGetter: "( SELECT array_agg(elems.value->>'contributorTypeId' ORDER BY elems.value->>'contributorTypeId') FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", + filterValueGetter: "( SELECT array_agg(lower(elems.value->>'contributorTypeId') ORDER BY elems.value->>'contributorTypeId') FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", valueFunction: 'lower(:value)' }, { @@ -416,7 +416,7 @@ queryable: true, essential: true, visibleByDefault: false, - valueGetter: "(SELECT array_agg(contributor_type.jsonb ->> 'name') \ + valueGetter: "(SELECT array_agg(contributor_type.jsonb ->> 'name' ORDER BY record.value ->> 'contributorTypeId') \ FILTER (WHERE (contributor_type.jsonb ->> 'name') IS NOT NULL) AS array_agg \ FROM jsonb_array_elements((:sourceAlias.jsonb -> 'contributors')) record(value) \ JOIN src_inventory_contributor_type contributor_type ON (record.value ->> 'contributorTypeId') = contributor_type.id::text\ @@ -446,8 +446,8 @@ essential: true, visibleByDefault: false, hidden: true, - valueGetter: "( SELECT array_agg(elems.value->>'contributorNameTypeId') FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'contributorNameTypeId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", + valueGetter: "( SELECT array_agg(elems.value->>'contributorNameTypeId' ORDER BY elems.value->>'contributorNameTypeId') FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", + filterValueGetter: "( SELECT array_agg(lower(elems.value->>'contributorNameTypeId') ORDER BY elems.value->>'contributorNameTypeId') FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", valueFunction: 'lower(:value)' }, { @@ -464,7 +464,7 @@ visibleByDefault: false, idColumnName: 'contributor_name_type_id', valueFunction: "lower(:value)", - valueGetter: "(SELECT array_agg(contributor_name_type.jsonb ->> 'name') \ + valueGetter: "(SELECT array_agg(contributor_name_type.jsonb ->> 'name' ORDER BY record.value ->> 'contributorNameTypeId') \ FILTER (WHERE (contributor_name_type.jsonb ->> 'name') IS NOT NULL) AS array_agg \ FROM jsonb_array_elements((:sourceAlias.jsonb -> 'contributors')) record(value) \ JOIN src_inventory_contributor_name_type contributor_name_type ON (record.value ->> 'contributorNameTypeId') = contributor_name_type.id::text\ From 1a35d01e2422395c4b961c0ab70b105edc476d99 Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Wed, 16 Oct 2024 11:26:19 -0500 Subject: [PATCH 33/45] order-by-clause --- .../inventory/simple_instance.json5 | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/src/main/resources/entity-types/inventory/simple_instance.json5 b/src/main/resources/entity-types/inventory/simple_instance.json5 index 65082590..ca5b62a1 100644 --- a/src/main/resources/entity-types/inventory/simple_instance.json5 +++ b/src/main/resources/entity-types/inventory/simple_instance.json5 @@ -533,8 +533,14 @@ visibleByDefault: false, essential: true, hidden: true, - valueGetter: "( SELECT array_agg(elems.value->>'classificationTypeId') FROM jsonb_array_elements(:sourceAlias.jsonb->'classifications') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'classificationTypeId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'classifications') AS elems)", + valueGetter: + "(SELECT array_agg(elems.value->>'classificationTypeId' ORDER BY elems.value->>'classificationTypeId') \ + FROM jsonb_array_elements(:sourceAlias.jsonb->'classifications') AS elems \ + )", + filterValueGetter: + "(SELECT array_agg(lower(elems.value->>'classificationTypeId') ORDER BY elems.value->>'classificationTypeId') \ + FROM jsonb_array_elements(:sourceAlias.jsonb->'classifications') AS elems \ + )" }, { name: 'classification_type_names', @@ -550,29 +556,30 @@ queryable: true, visibleByDefault: false, valueGetter: - "(SELECT array_agg(class_type.jsonb ->> 'name') \ + "(SELECT array_agg(class_type.jsonb ->> 'name' ORDER BY record.value ->> 'classificationTypeId') \ FILTER (WHERE (class_type.jsonb ->> 'name') IS NOT NULL) AS array_agg \ FROM jsonb_array_elements((:sourceAlias.jsonb -> 'classifications')) record(value) \ - JOIN src_inventory_classification_type class_type ON (record.value ->> 'classificationTypeId') = class_type.id::text\ - )", + JOIN src_inventory_classification_type class_type \ + ON (record.value ->> 'classificationTypeId') = class_type.id::text \ + )" }, { name: 'classification_numbers', sourceAlias: 'inst', + essential: true, dataType: { dataType: 'arrayType', itemDataType: { dataType: 'stringType', }, }, - isIdColumn: false, - queryable: false, + queryable: true, visibleByDefault: false, - essential: true, - hidden: false, - valueGetter: "( SELECT array_agg(elems.value->>'classificationNumber') FROM jsonb_array_elements(:sourceAlias.jsonb->'classifications') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'classificationNumber')) FROM jsonb_array_elements(:sourceAlias.jsonb->'classifications') AS elems)", - valueFunction: 'lower(:value)', + valueGetter: + "(SELECT array_agg(record.value ->> 'classificationNumber' ORDER BY record.value ->> 'classificationTypeId') \ + FILTER (WHERE (record.value ->> 'classificationNumber') IS NOT NULL) AS array_agg \ + FROM jsonb_array_elements((:sourceAlias.jsonb -> 'classifications')) record(value) \ + )", }, { name: 'publication', From a002e6ac57189bb2edc7c8cd5c92a43b2f49795d Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Wed, 16 Oct 2024 13:56:22 -0500 Subject: [PATCH 34/45] adding missing essetianl flag in holdings --- .../entity-types/inventory/simple_holdings_records.json5 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/resources/entity-types/inventory/simple_holdings_records.json5 b/src/main/resources/entity-types/inventory/simple_holdings_records.json5 index 1fec4dbb..7d908587 100644 --- a/src/main/resources/entity-types/inventory/simple_holdings_records.json5 +++ b/src/main/resources/entity-types/inventory/simple_holdings_records.json5 @@ -600,6 +600,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'acquisitionFormat'", }, { @@ -611,6 +612,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'acquisitionMethod'", }, { @@ -677,6 +679,7 @@ { name: 'administrative_notes', sourceAlias: 'hrd', + essential: true, dataType: { dataType: 'arrayType', itemDataType: { From 3d68139e99ea8f6781f6024da90cdea78e0d3030 Mon Sep 17 00:00:00 2001 From: Bobby Sharp Date: Tue, 15 Oct 2024 13:34:18 -0400 Subject: [PATCH 35/45] [MODFQMMGR-488] Organizations entity adjustments part 1 --- .../organizations/simple_organizations.json5 | 53 ++++++++++++++----- translations/mod-fqm-manager/en.json | 12 ++--- 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/src/main/resources/entity-types/organizations/simple_organizations.json5 b/src/main/resources/entity-types/organizations/simple_organizations.json5 index 4a6048aa..2bc5cdb7 100644 --- a/src/main/resources/entity-types/organizations/simple_organizations.json5 +++ b/src/main/resources/entity-types/organizations/simple_organizations.json5 @@ -36,7 +36,7 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: true, + visibleByDefault: false, valueGetter: ':sourceAlias.creation_date', }, { @@ -48,6 +48,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ':sourceAlias.created_by', }, { @@ -286,6 +287,7 @@ dataType: 'rangedUUIDType', }, queryable: false, + hidden: true, valueGetter: "( SELECT array_agg(elems.value->>'id') FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", filterValueGetter: "( SELECT array_agg(lower(elems.value->>'id')) FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", valueFunction: 'lower(:value)', @@ -363,6 +365,7 @@ dataType: 'booleanType', }, queryable: false, + hidden: true, valueGetter: "( SELECT array_agg(elems.value->>'isPrimary') FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", filterValueGetter: "( SELECT array_agg(lower(elems.value->>'isPrimary')) FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", valueFunction: 'lower(:value)', @@ -387,6 +390,7 @@ }, }, queryable: false, + hidden: true, valueGetter: "( SELECT array_agg(elems.value->>'categories') FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", filterValueGetter: "( SELECT array_agg(lower(elems.value->>'categories')) FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", valueFunction: 'lower(:value)', @@ -398,6 +402,7 @@ dataType: 'stringType', }, queryable: false, + hidden: true, valueGetter: "( SELECT array_agg(elems.value->>'language') FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", filterValueGetter: "( SELECT array_agg(lower(elems.value->>'language')) FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", valueFunction: 'lower(:value)', @@ -736,6 +741,7 @@ isIdColumn: false, queryable: false, visibleByDefault: false, + hidden: true, valueGetter: "(\ SELECT\ array_agg(elems.value::text)\ @@ -1421,6 +1427,7 @@ isIdColumn: false, queryable: false, visibleByDefault: false, + hidden: true, valueGetter: "(\ SELECT\ array_agg(elems.value::text)\ @@ -1444,7 +1451,7 @@ }, }, idColumnName: 'acq_unit_ids', - queryable: false, + queryable: true, visibleByDefault: false, valueGetter: "( SELECT array_agg(acq_unit.jsonb ->> 'name'::text) FILTER (WHERE (acq_unit.jsonb ->> 'name'::text) IS NOT NULL) AS array_agg FROM jsonb_array_elements_text((:sourceAlias.jsonb -> 'acqUnitIds'::text)) record(value) JOIN src_acquisitions_unit acq_unit ON lower(record.value::text) = acq_unit.id::text)", filterValueGetter: "( SELECT array_agg(lower(acq_unit.jsonb ->> 'name'::text)) FILTER (WHERE (acq_unit.jsonb ->> 'name'::text) IS NOT NULL) AS array_agg FROM jsonb_array_elements_text((:sourceAlias.jsonb -> 'acqUnitIds'::text)) record(value) JOIN src_acquisitions_unit acq_unit ON (record.value::text) = acq_unit.id::text)", @@ -1463,6 +1470,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->'edi'->>'vendorEdiCode'", }, { @@ -1474,6 +1482,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->'edi'->>'vendorEdiType'", values: [ { @@ -1543,6 +1552,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->>'prorateTax'", values: [ { @@ -1564,6 +1574,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->>'prorateFees'", values: [ { @@ -1585,6 +1596,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->>'ediNamingConvention'", }, { @@ -1596,6 +1608,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->>'sendAcctNum'", values: [ { @@ -1617,6 +1630,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->>'supportOrder'", values: [ { @@ -1638,6 +1652,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->>'supportInvoice'", values: [ { @@ -1670,6 +1685,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediFtp'->>'ftpFormat'", values: [ { @@ -1691,6 +1707,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediFtp'->>'serverAddress'", }, { @@ -1702,19 +1719,9 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediFtp'->>'username'", }, - { - name: 'edi_ftp_password', - sourceAlias: 'org', - dataType: { - dataType: 'stringType', - }, - isIdColumn: false, - queryable: true, - visibleByDefault: false, - valueGetter: ":sourceAlias.jsonb->'edi'->'ediFtp'->>'password'", - }, { name: 'edi_ftp_mode', sourceAlias: 'org', @@ -1724,6 +1731,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediFtp'->>'ftpMode'", values: [ { @@ -1745,6 +1753,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediFtp'->>'ftpConnMode'", values: [ { @@ -1766,6 +1775,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediFtp'->>'ftpPort'", }, { @@ -1777,6 +1787,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediFtp'->>'orderDirectory'", }, { @@ -1788,6 +1799,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediFtp'->>'invoiceDirectory'", }, { @@ -1799,6 +1811,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediFtp'->>'notes'", }, { @@ -1831,6 +1844,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediJob'->>'schedulingDate'", }, { @@ -1842,6 +1856,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediJob'->>'time'", }, { @@ -1853,6 +1868,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediJob'->>'isMonday'", values: [ { @@ -1874,6 +1890,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediJob'->>'isTuesday'", values: [ { @@ -1895,6 +1912,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediJob'->>'isWednesday'", values: [ { @@ -1916,6 +1934,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediJob'->>'isThursday'", values: [ { @@ -1937,6 +1956,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediJob'->>'isFriday'", values: [ { @@ -1958,6 +1978,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediJob'->>'isSaturday'", values: [ { @@ -1979,6 +2000,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediJob'->>'isSunday'", values: [ { @@ -2000,6 +2022,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediJob'->>'sendToEmails'", }, { @@ -2011,6 +2034,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediJob'->>'notifyAllEdi'", values: [ { @@ -2032,6 +2056,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediJob'->>'notifyInvoiceOnly'", values: [ { @@ -2053,6 +2078,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediJob'->>'notifyErrorOnly'", values: [ { @@ -2074,6 +2100,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'edi'->'ediJob'->>'schedulingNotes'", }, { diff --git a/translations/mod-fqm-manager/en.json b/translations/mod-fqm-manager/en.json index fade107b..39432a64 100644 --- a/translations/mod-fqm-manager/en.json +++ b/translations/mod-fqm-manager/en.json @@ -976,8 +976,8 @@ "entityType.simple_organization.accounts.account_status._qualified": "Accounts status", "entityType.simple_organization.accounts.acq_unit_ids": "Acquisition unit UUIDs", "entityType.simple_organization.accounts.acq_unit_ids._qualified": "Accounts acquisition unit UUIDs", - "entityType.simple_organization.accounts.app_system_no": "App system number", - "entityType.simple_organization.accounts.app_system_no._qualified": "Accounts app system number", + "entityType.simple_organization.accounts.app_system_no": "Accounting code", + "entityType.simple_organization.accounts.app_system_no._qualified": "Accounts accounting code", "entityType.simple_organization.accounts.contact_info": "Contact info", "entityType.simple_organization.accounts.contact_info._qualified": "Accounts contact info", "entityType.simple_organization.accounts.description": "Description", @@ -1016,10 +1016,10 @@ "entityType.simple_organization.addresses.zip_code": "Zip code", "entityType.simple_organization.addresses.zip_code._qualified": "Addresses zip code", "entityType.simple_organization.agreements": "Agreements", - "entityType.simple_organization.agreements.discount": "Discount", - "entityType.simple_organization.agreements.discount._qualified": "Agreements discount", - "entityType.simple_organization.agreements.name": "Name", - "entityType.simple_organization.agreements.name._qualified": "Agreements name", + "entityType.simple_organization.agreements.discount": "Discount percentage", + "entityType.simple_organization.agreements.discount._qualified": "Agreements discount percentage", + "entityType.simple_organization.agreements.name": "Vendor terms name", + "entityType.simple_organization.agreements.name._qualified": "Agreements vendor terms name", "entityType.simple_organization.agreements.notes": "Notes", "entityType.simple_organization.agreements.notes._qualified": "Agreements notes", "entityType.simple_organization.agreements.reference_url": "Reference URL", From 0948b42ec321ee494d843b1844e8ff810e341724 Mon Sep 17 00:00:00 2001 From: Bobby Sharp Date: Tue, 15 Oct 2024 15:02:47 -0400 Subject: [PATCH 36/45] [MODFQMMGR-528] Organization entity adjustments part 2 --- .../composite_purchase_order_lines.json5 | 1 + .../organizations/simple_organizations.json5 | 471 +++++++++--------- translations/mod-fqm-manager/en.json | 2 +- translations/mod-fqm-manager/en_US.json | 14 +- 4 files changed, 247 insertions(+), 241 deletions(-) diff --git a/src/main/resources/entity-types/orders/composite_purchase_order_lines.json5 b/src/main/resources/entity-types/orders/composite_purchase_order_lines.json5 index 7e4fbf74..b7d68d99 100644 --- a/src/main/resources/entity-types/orders/composite_purchase_order_lines.json5 +++ b/src/main/resources/entity-types/orders/composite_purchase_order_lines.json5 @@ -67,6 +67,7 @@ alias: 'vendor_organization', type: 'entity-type', id: 'b5ffa2e9-8080-471a-8003-a8c5a1274503', // simple_organization + essentialOnly: true, join: { type: 'left join', condition: "(:that.jsonb ->> 'vendor')::uuid = :this.id", diff --git a/src/main/resources/entity-types/organizations/simple_organizations.json5 b/src/main/resources/entity-types/organizations/simple_organizations.json5 index 2bc5cdb7..327bf17c 100644 --- a/src/main/resources/entity-types/organizations/simple_organizations.json5 +++ b/src/main/resources/entity-types/organizations/simple_organizations.json5 @@ -25,7 +25,8 @@ }, isIdColumn: true, queryable: true, - visibleByDefault: true, + visibleByDefault: false, + essential: true, valueGetter: ':sourceAlias.id', }, { @@ -71,6 +72,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedByUserId'", }, { @@ -82,6 +84,7 @@ isIdColumn: false, queryable: true, visibleByDefault: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'name'", filterValueGetter: "lower(${tenant_id}_mod_organizations_storage.f_unaccent(:sourceAlias.jsonb ->> 'name'::text))", valueFunction: 'lower(${tenant_id}_mod_organizations_storage.f_unaccent(:value))', @@ -162,6 +165,7 @@ isIdColumn: false, queryable: true, visibleByDefault: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'status'", filterValueGetter: "lower(${tenant_id}_mod_organizations_storage.f_unaccent(:sourceAlias.jsonb ->> 'status'::text))", valueFunction: 'lower(${tenant_id}_mod_organizations_storage.f_unaccent(:value))', @@ -280,18 +284,17 @@ itemDataType: { dataType: 'objectType', properties: [ - { - name: 'id', - property: 'id', - dataType: { - dataType: 'rangedUUIDType', - }, - queryable: false, - hidden: true, - valueGetter: "( SELECT array_agg(elems.value->>'id') FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'id')) FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", - valueFunction: 'lower(:value)', - }, +// { +// name: 'id', +// property: 'id', +// dataType: { +// dataType: 'rangedUUIDType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'id') FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'id')) FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", +// valueFunction: 'lower(:value)', +// }, { name: 'address_line1', property: 'addressLine1', @@ -358,55 +361,52 @@ filterValueGetter: "( SELECT array_agg(lower(elems.value->>'country')) FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", valueFunction: 'lower(:value)', }, - { - name: 'is_primary', - property: 'isPrimary', - dataType: { - dataType: 'booleanType', - }, - queryable: false, - hidden: true, - valueGetter: "( SELECT array_agg(elems.value->>'isPrimary') FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'isPrimary')) FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", - valueFunction: 'lower(:value)', - values: [ - { - value: 'true', - label: 'True', - }, - { - value: 'false', - label: 'False', - }, - ], - }, - { - name: 'categories', - property: 'categories', - dataType: { - dataType: 'arrayType', - itemDataType: { - dataType: 'rangedUUIDType', - }, - }, - queryable: false, - hidden: true, - valueGetter: "( SELECT array_agg(elems.value->>'categories') FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'categories')) FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", - valueFunction: 'lower(:value)', - }, - { - name: 'language', - property: 'language', - dataType: { - dataType: 'stringType', - }, - queryable: false, - hidden: true, - valueGetter: "( SELECT array_agg(elems.value->>'language') FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'language')) FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", - valueFunction: 'lower(:value)', - }, +// { +// name: 'is_primary', +// property: 'isPrimary', +// dataType: { +// dataType: 'booleanType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'isPrimary') FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'isPrimary')) FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", +// valueFunction: 'lower(:value)', +// values: [ +// { +// value: 'true', +// label: 'True', +// }, +// { +// value: 'false', +// label: 'False', +// }, +// ], +// }, +// { +// name: 'categories', +// property: 'categories', +// dataType: { +// dataType: 'arrayType', +// itemDataType: { +// dataType: 'rangedUUIDType', +// }, +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'categories') FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'categories')) FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", +// valueFunction: 'lower(:value)', +// }, +// { +// name: 'language', +// property: 'language', +// dataType: { +// dataType: 'stringType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'language') FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'language')) FROM jsonb_array_elements(:sourceAlias.jsonb->'addresses') AS elems)", +// valueFunction: 'lower(:value)', +// }, ], }, }, @@ -423,17 +423,17 @@ itemDataType: { dataType: 'objectType', properties: [ - { - name: 'id', - property: 'id', - dataType: { - dataType: 'rangedUUIDType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'id') FROM jsonb_array_elements(:sourceAlias.jsonb->'phoneNumbers') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'id')) FROM jsonb_array_elements(:sourceAlias.jsonb->'phoneNumbers') AS elems)", - valueFunction: 'lower(:value)', - }, +// { +// name: 'id', +// property: 'id', +// dataType: { +// dataType: 'rangedUUIDType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'id') FROM jsonb_array_elements(:sourceAlias.jsonb->'phoneNumbers') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'id')) FROM jsonb_array_elements(:sourceAlias.jsonb->'phoneNumbers') AS elems)", +// valueFunction: 'lower(:value)', +// }, { name: 'phone_number', property: 'phoneNumber', @@ -445,20 +445,20 @@ filterValueGetter: "( SELECT array_agg(lower(elems.value->>'phoneNumber')) FROM jsonb_array_elements(:sourceAlias.jsonb->'phoneNumbers') AS elems)", valueFunction: 'lower(:value)', }, - { - name: 'categories', - property: 'categories', - dataType: { - dataType: 'arrayType', - itemDataType: { - dataType: 'rangedUUIDType', - }, - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'categories') FROM jsonb_array_elements(:sourceAlias.jsonb->'phoneNumbers') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'categories')) FROM jsonb_array_elements(:sourceAlias.jsonb->'phoneNumbers') AS elems)", - valueFunction: 'lower(:value)', - }, +// { +// name: 'categories', +// property: 'categories', +// dataType: { +// dataType: 'arrayType', +// itemDataType: { +// dataType: 'rangedUUIDType', +// }, +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'categories') FROM jsonb_array_elements(:sourceAlias.jsonb->'phoneNumbers') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'categories')) FROM jsonb_array_elements(:sourceAlias.jsonb->'phoneNumbers') AS elems)", +// valueFunction: 'lower(:value)', +// }, { name: 'type', property: 'type', @@ -488,38 +488,38 @@ }, ], }, - { - name: 'is_primary', - property: 'isPrimary', - dataType: { - dataType: 'booleanType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'isPrimary') FROM jsonb_array_elements(:sourceAlias.jsonb->'phoneNumbers') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'isPrimary')) FROM jsonb_array_elements(:sourceAlias.jsonb->'phoneNumbers') AS elems)", - valueFunction: 'lower(:value)', - values: [ - { - value: 'true', - label: 'True', - }, - { - value: 'false', - label: 'False', - }, - ], - }, - { - name: 'language', - property: 'language', - dataType: { - dataType: 'stringType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'language') FROM jsonb_array_elements(:sourceAlias.jsonb->'phoneNumbers') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'language')) FROM jsonb_array_elements(:sourceAlias.jsonb->'phoneNumbers') AS elems)", - valueFunction: 'lower(:value)', - }, +// { +// name: 'is_primary', +// property: 'isPrimary', +// dataType: { +// dataType: 'booleanType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'isPrimary') FROM jsonb_array_elements(:sourceAlias.jsonb->'phoneNumbers') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'isPrimary')) FROM jsonb_array_elements(:sourceAlias.jsonb->'phoneNumbers') AS elems)", +// valueFunction: 'lower(:value)', +// values: [ +// { +// value: 'true', +// label: 'True', +// }, +// { +// value: 'false', +// label: 'False', +// }, +// ], +// }, +// { +// name: 'language', +// property: 'language', +// dataType: { +// dataType: 'stringType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'language') FROM jsonb_array_elements(:sourceAlias.jsonb->'phoneNumbers') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'language')) FROM jsonb_array_elements(:sourceAlias.jsonb->'phoneNumbers') AS elems)", +// valueFunction: 'lower(:value)', +// }, ], }, }, @@ -536,17 +536,17 @@ itemDataType: { dataType: 'objectType', properties: [ - { - name: 'id', - property: 'id', - dataType: { - dataType: 'rangedUUIDType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'id') FROM jsonb_array_elements(:sourceAlias.jsonb->'emails') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'id')) FROM jsonb_array_elements(:sourceAlias.jsonb->'emails') AS elems)", - valueFunction: 'lower(:value)', - }, +// { +// name: 'id', +// property: 'id', +// dataType: { +// dataType: 'rangedUUIDType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'id') FROM jsonb_array_elements(:sourceAlias.jsonb->'emails') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'id')) FROM jsonb_array_elements(:sourceAlias.jsonb->'emails') AS elems)", +// valueFunction: 'lower(:value)', +// }, { name: 'value', property: 'value', @@ -569,52 +569,52 @@ filterValueGetter: "( SELECT array_agg(lower(elems.value->>'description')) FROM jsonb_array_elements(:sourceAlias.jsonb->'emails') AS elems)", valueFunction: 'lower(:value)', }, - { - name: 'is_primary', - property: 'isPrimary', - dataType: { - dataType: 'booleanType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'isPrimary') FROM jsonb_array_elements(:sourceAlias.jsonb->'emails') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'isPrimary')) FROM jsonb_array_elements(:sourceAlias.jsonb->'emails') AS elems)", - valueFunction: 'lower(:value)', - values: [ - { - value: 'true', - label: 'True', - }, - { - value: 'false', - label: 'False', - }, - ], - }, - { - name: 'categories', - property: 'categories', - dataType: { - dataType: 'arrayType', - itemDataType: { - dataType: 'rangedUUIDType', - }, - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'categories') FROM jsonb_array_elements(:sourceAlias.jsonb->'emails') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'categories')) FROM jsonb_array_elements(:sourceAlias.jsonb->'emails') AS elems)", - valueFunction: 'lower(:value)', - }, - { - name: 'language', - property: 'language', - dataType: { - dataType: 'stringType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'language') FROM jsonb_array_elements(:sourceAlias.jsonb->'emails') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'language')) FROM jsonb_array_elements(:sourceAlias.jsonb->'emails') AS elems)", - valueFunction: 'lower(:value)', - }, +// { +// name: 'is_primary', +// property: 'isPrimary', +// dataType: { +// dataType: 'booleanType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'isPrimary') FROM jsonb_array_elements(:sourceAlias.jsonb->'emails') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'isPrimary')) FROM jsonb_array_elements(:sourceAlias.jsonb->'emails') AS elems)", +// valueFunction: 'lower(:value)', +// values: [ +// { +// value: 'true', +// label: 'True', +// }, +// { +// value: 'false', +// label: 'False', +// }, +// ], +// }, +// { +// name: 'categories', +// property: 'categories', +// dataType: { +// dataType: 'arrayType', +// itemDataType: { +// dataType: 'rangedUUIDType', +// }, +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'categories') FROM jsonb_array_elements(:sourceAlias.jsonb->'emails') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'categories')) FROM jsonb_array_elements(:sourceAlias.jsonb->'emails') AS elems)", +// valueFunction: 'lower(:value)', +// }, +// { +// name: 'language', +// property: 'language', +// dataType: { +// dataType: 'stringType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'language') FROM jsonb_array_elements(:sourceAlias.jsonb->'emails') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'language')) FROM jsonb_array_elements(:sourceAlias.jsonb->'emails') AS elems)", +// valueFunction: 'lower(:value)', +// }, ], }, }, @@ -631,17 +631,17 @@ itemDataType: { dataType: 'objectType', properties: [ - { - name: 'id', - property: 'id', - dataType: { - dataType: 'rangedUUIDType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'id') FROM jsonb_array_elements(:sourceAlias.jsonb->'urls') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'id')) FROM jsonb_array_elements(:sourceAlias.jsonb->'urls') AS elems)", - valueFunction: 'lower(:value)', - }, +// { +// name: 'id', +// property: 'id', +// dataType: { +// dataType: 'rangedUUIDType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'id') FROM jsonb_array_elements(:sourceAlias.jsonb->'urls') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'id')) FROM jsonb_array_elements(:sourceAlias.jsonb->'urls') AS elems)", +// valueFunction: 'lower(:value)', +// }, { name: 'value', property: 'value', @@ -664,52 +664,52 @@ filterValueGetter: "( SELECT array_agg(lower(elems.value->>'description')) FROM jsonb_array_elements(:sourceAlias.jsonb->'urls') AS elems)", valueFunction: 'lower(:value)', }, - { - name: 'language', - property: 'language', - dataType: { - dataType: 'stringType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'language') FROM jsonb_array_elements(:sourceAlias.jsonb->'urls') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'language')) FROM jsonb_array_elements(:sourceAlias.jsonb->'urls') AS elems)", - valueFunction: 'lower(:value)', - }, - { - name: 'is_primary', - property: 'isPrimary', - dataType: { - dataType: 'booleanType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'isPrimary') FROM jsonb_array_elements(:sourceAlias.jsonb->'urls') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'isPrimary')) FROM jsonb_array_elements(:sourceAlias.jsonb->'urls') AS elems)", - valueFunction: 'lower(:value)', - values: [ - { - value: 'true', - label: 'True', - }, - { - value: 'false', - label: 'False', - }, - ], - }, - { - name: 'categories', - property: 'categories', - dataType: { - dataType: 'arrayType', - itemDataType: { - dataType: 'rangedUUIDType', - }, - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'categories') FROM jsonb_array_elements(:sourceAlias.jsonb->'urls') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'categories')) FROM jsonb_array_elements(:sourceAlias.jsonb->'urls') AS elems)", - valueFunction: 'lower(:value)', - }, +// { +// name: 'language', +// property: 'language', +// dataType: { +// dataType: 'stringType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'language') FROM jsonb_array_elements(:sourceAlias.jsonb->'urls') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'language')) FROM jsonb_array_elements(:sourceAlias.jsonb->'urls') AS elems)", +// valueFunction: 'lower(:value)', +// }, +// { +// name: 'is_primary', +// property: 'isPrimary', +// dataType: { +// dataType: 'booleanType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'isPrimary') FROM jsonb_array_elements(:sourceAlias.jsonb->'urls') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'isPrimary')) FROM jsonb_array_elements(:sourceAlias.jsonb->'urls') AS elems)", +// valueFunction: 'lower(:value)', +// values: [ +// { +// value: 'true', +// label: 'True', +// }, +// { +// value: 'false', +// label: 'False', +// }, +// ], +// }, +// { +// name: 'categories', +// property: 'categories', +// dataType: { +// dataType: 'arrayType', +// itemDataType: { +// dataType: 'rangedUUIDType', +// }, +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'categories') FROM jsonb_array_elements(:sourceAlias.jsonb->'urls') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'categories')) FROM jsonb_array_elements(:sourceAlias.jsonb->'urls') AS elems)", +// valueFunction: 'lower(:value)', +// }, { name: 'notes', property: 'notes', @@ -767,6 +767,7 @@ isIdColumn: false, queryable: false, visibleByDefault: false, + hidden: true, valueGetter: "(\ SELECT\ array_agg(elems.value::text)\ @@ -1137,6 +1138,7 @@ isIdColumn: false, queryable: false, visibleByDefault: false, + hidden: true, valueGetter: "(\ SELECT\ array_agg(elems.value::text)\ @@ -1333,6 +1335,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'isVendor'", values: [ { @@ -1354,6 +1357,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'isDonor'", values: [ { @@ -2113,6 +2117,7 @@ queryable: false, hidden: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb::text", } ], diff --git a/translations/mod-fqm-manager/en.json b/translations/mod-fqm-manager/en.json index 39432a64..e1eec1df 100644 --- a/translations/mod-fqm-manager/en.json +++ b/translations/mod-fqm-manager/en.json @@ -97,7 +97,7 @@ "entityType.composite_purchase_order_lines.pol_exchange_rate": "POL exchange rate", "entityType.composite_purchase_order_lines.pol_updated_by_user": "POL updated by user", "entityType.composite_purchase_order_lines.rates": "Exchange rate", - "entityType.composite_purchase_order_lines.vendor_organization": "Vendor organization", + "entityType.composite_purchase_order_lines.vendor_organization": "Vendor org", "entityType.composite_user_details": "Users", "entityType.composite_user_details.groups": "Patron group", "entityType.composite_user_details.users": "User", diff --git a/translations/mod-fqm-manager/en_US.json b/translations/mod-fqm-manager/en_US.json index fb03fb96..65f27528 100644 --- a/translations/mod-fqm-manager/en_US.json +++ b/translations/mod-fqm-manager/en_US.json @@ -879,8 +879,8 @@ "entityType.simple_organization.accounts.account_status._qualified": "Accounts status", "entityType.simple_organization.accounts.acq_unit_ids": "Acquisition unit UUIDs", "entityType.simple_organization.accounts.acq_unit_ids._qualified": "Accounts acquisition unit UUIDs", - "entityType.simple_organization.accounts.app_system_no": "App system number", - "entityType.simple_organization.accounts.app_system_no._qualified": "Accounts app system number", + "entityType.simple_organization.accounts.app_system_no": "Accounting code", + "entityType.simple_organization.accounts.app_system_no._qualified": "Accounts accounting code", "entityType.simple_organization.accounts.contact_info": "Contact info", "entityType.simple_organization.accounts.contact_info._qualified": "Accounts contact info", "entityType.simple_organization.accounts.description": "Description", @@ -918,10 +918,10 @@ "entityType.simple_organization.addresses.zip_code": "Zip code", "entityType.simple_organization.addresses.zip_code._qualified": "Addresses zip code", "entityType.simple_organization.agreements": "Agreements", - "entityType.simple_organization.agreements.discount": "Discount", - "entityType.simple_organization.agreements.discount._qualified": "Agreements discount", - "entityType.simple_organization.agreements.name": "Name", - "entityType.simple_organization.agreements.name._qualified": "Agreements name", + "entityType.simple_organization.agreements.discount": "Discount percentage", + "entityType.simple_organization.agreements.discount._qualified": "Agreements discount percentage", + "entityType.simple_organization.agreements.name": "Vendor terms name", + "entityType.simple_organization.agreements.name._qualified": "Agreements vendor terms name", "entityType.simple_organization.agreements.notes": "Notes", "entityType.simple_organization.agreements.notes._qualified": "Agreements notes", "entityType.simple_organization.agreements.reference_url": "Reference URL", @@ -1341,7 +1341,7 @@ "entityType.composite_purchase_order_lines.po_updated_by_user": "PO updated by user", "entityType.composite_purchase_order_lines.pol_created_by_user": "POL created by user", "entityType.composite_purchase_order_lines.pol_updated_by_user": "POL updated by user", - "entityType.composite_purchase_order_lines.vendor_organization": "Vendor organization", + "entityType.composite_purchase_order_lines.vendor_organization": "Vendor org", "entityType.composite_purchase_order_lines.assigned_to_user": "Assigned to user", "entityType.composite_purchase_order_lines.rates": "Exchange rate", "entityType.composite_purchase_order_lines.pol_exchange_rate": "POL exchange rate", From db9de4d795a21881c0fda5ae2c1de4a6c0734dd0 Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Thu, 17 Oct 2024 09:06:18 -0500 Subject: [PATCH 37/45] fixing the contributor --- .../resources/entity-types/inventory/simple_instance.json5 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/entity-types/inventory/simple_instance.json5 b/src/main/resources/entity-types/inventory/simple_instance.json5 index ca5b62a1..37063744 100644 --- a/src/main/resources/entity-types/inventory/simple_instance.json5 +++ b/src/main/resources/entity-types/inventory/simple_instance.json5 @@ -429,7 +429,7 @@ }, valueSourceApi: { path: 'contributor-types', - valueJsonPath: '$.contributorTypes.*.name', + valueJsonPath: '$.contributorTypes.*.id', labelJsonPath: '$.contributorTypes.*.name', } }, @@ -475,7 +475,7 @@ }, valueSourceApi: { path: 'contributor-name-types', - valueJsonPath: '$.contributorNameTypes.*.name', + valueJsonPath: '$.contributorNameTypes.*.id', labelJsonPath: '$.contributorNameTypes.*.name', } }, From db8ae800f722f52794f908bc346958fe8a3559f0 Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Wed, 16 Oct 2024 08:43:34 -0500 Subject: [PATCH 38/45] MODFQMMGR-492:Entity adjustments: Instances entity adjustments --- .../inventory/composite_instances.json5 | 2 +- .../inventory/composite_item_details.json5 | 1 + .../entity-types/inventory/simple_instance.json5 | 14 ++++++++------ 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/resources/entity-types/inventory/composite_instances.json5 b/src/main/resources/entity-types/inventory/composite_instances.json5 index 14717546..82aca621 100644 --- a/src/main/resources/entity-types/inventory/composite_instances.json5 +++ b/src/main/resources/entity-types/inventory/composite_instances.json5 @@ -9,7 +9,7 @@ type: 'entity-type', id: '8fc4a9d2-7ccf-4233-afb8-796911839862', // simple_instance useIdColumns: true, - // essentialOnly: true + essentialOnly: true }, { alias: 'inst_stat', diff --git a/src/main/resources/entity-types/inventory/composite_item_details.json5 b/src/main/resources/entity-types/inventory/composite_item_details.json5 index f10757f8..b322c22e 100644 --- a/src/main/resources/entity-types/inventory/composite_item_details.json5 +++ b/src/main/resources/entity-types/inventory/composite_item_details.json5 @@ -102,6 +102,7 @@ alias: 'instances', type: 'entity-type', id: '8fc4a9d2-7ccf-4233-afb8-796911839862', // simple_instances + essentialOnly: true, join: { type: 'join', condition: ":that.instanceid = :this.id", diff --git a/src/main/resources/entity-types/inventory/simple_instance.json5 b/src/main/resources/entity-types/inventory/simple_instance.json5 index 37063744..d280de0a 100644 --- a/src/main/resources/entity-types/inventory/simple_instance.json5 +++ b/src/main/resources/entity-types/inventory/simple_instance.json5 @@ -47,7 +47,7 @@ }, isIdColumn: true, queryable: true, - visibleByDefault: true, + visibleByDefault: false, essential: true, valueGetter: ':sourceAlias.id', }, @@ -99,7 +99,7 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: true, + visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedDate'", essential: true, filterValueGetter: "\"left\"(lower((:sourceAlias.jsonb -> 'metadata'::text) ->> 'updatedDate'::text), 600)", @@ -156,7 +156,7 @@ dataType: 'stringType', }, queryable: true, - visibleByDefault: false, + visibleByDefault: true, essential: true, valueGetter: ":sourceAlias.jsonb->>'name'", filterValueGetter: "lower(${tenant_id}_mod_inventory_storage.f_unaccent(:sourceAlias.jsonb->>'name'::text))", @@ -212,7 +212,7 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: true, + visibleByDefault: false, essential: true, valueGetter: ":inst.jsonb->>'source'", filterValueGetter: "\"left\"(lower(:inst.jsonb ->> 'source'::text), 600)", @@ -381,7 +381,7 @@ isIdColumn: false, queryable: false, essential: true, - visibleByDefault: false, + visibleByDefault: true, valueGetter: "( SELECT array_agg(elems.value->>'name') FILTER (WHERE (elems.value->>'name') IS NOT NULL) AS array_agg FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", filterValueGetter: "( SELECT array_agg(lower(elems.value->>'name')) FILTER (WHERE (elems.value->>'name') IS NOT NULL) AS array_agg FROM jsonb_array_elements(:sourceAlias.jsonb->'contributors') AS elems)", valueFunction: 'lower(:value)' @@ -806,6 +806,7 @@ name: 'instance_format_ids', sourceAlias: 'inst', essential: true, + hidden: true, dataType: { dataType: 'arrayType', itemDataType: { @@ -1062,7 +1063,7 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: false, + visibleByDefault: true, valueGetter: ":sourceAlias.jsonb->>'discoverySuppress'", filterValueGetter: '"left"(lower(:sourceAlias.jsonb ->> \'discoverySuppress\'::text), 600)', valueFunction: '"left"(lower(:value), 600)', @@ -1191,6 +1192,7 @@ }, isIdColumn: false, queryable: false, + hidden: true, visibleByDefault: false, valueGetter: "(\ SELECT\ From 297a28be7e80fe3e4a91adcfd47499609de83eed Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Thu, 17 Oct 2024 11:14:49 -0500 Subject: [PATCH 39/45] fixing naming in simple call number --- translations/mod-fqm-manager/en.json | 2 +- translations/mod-fqm-manager/en_US.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/mod-fqm-manager/en.json b/translations/mod-fqm-manager/en.json index e1eec1df..fc7f29da 100644 --- a/translations/mod-fqm-manager/en.json +++ b/translations/mod-fqm-manager/en.json @@ -517,7 +517,7 @@ "entityType.simple_call_number_type.created_date": "Created date", "entityType.simple_call_number_type.id": "UUID", "entityType.simple_call_number_type.jsonb": "JSONB", - "entityType.simple_call_number_type.name": "Name", + "entityType.simple_call_number_type.name": "Type", "entityType.simple_call_number_type.source": "Source", "entityType.simple_call_number_type.updated_by_user_id": "Updated by user UUID", "entityType.simple_call_number_type.updated_by_username": "Updated by username", diff --git a/translations/mod-fqm-manager/en_US.json b/translations/mod-fqm-manager/en_US.json index 65f27528..d4869957 100644 --- a/translations/mod-fqm-manager/en_US.json +++ b/translations/mod-fqm-manager/en_US.json @@ -1217,7 +1217,7 @@ "entityType.simple_purchase_order_line.vendor_detail_vendor_account": "Vendor detail vendor account", "entityType.simple_call_number_type": "Call number type", "entityType.simple_call_number_type.id": "UUID", - "entityType.simple_call_number_type.name": "Name", + "entityType.simple_call_number_type.name": "Type", "entityType.simple_call_number_type.source": "Source", "entityType.simple_call_number_type.created_date": "Created date", "entityType.simple_call_number_type.updated_date": "Updated date", From faf5bc80cb04ffa77ff228a786223f7d29fa3399 Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Thu, 17 Oct 2024 12:36:52 -0500 Subject: [PATCH 40/45] requested changes --- .../inventory/simple_instance.json5 | 66 +++++++++---------- .../users/simple_group_details.json5 | 1 + 2 files changed, 34 insertions(+), 33 deletions(-) diff --git a/src/main/resources/entity-types/inventory/simple_instance.json5 b/src/main/resources/entity-types/inventory/simple_instance.json5 index d280de0a..eb196f14 100644 --- a/src/main/resources/entity-types/inventory/simple_instance.json5 +++ b/src/main/resources/entity-types/inventory/simple_instance.json5 @@ -350,17 +350,17 @@ filterValueGetter: "( SELECT array_agg(lower(elems.value->>'value')) FROM jsonb_array_elements(:sourceAlias.jsonb->'identifiers') AS elems)", valueFunction: 'lower(:value)', }, - { - name: 'identifier_type_id', - property: 'identifierTypeId', - dataType: { - dataType: 'stringType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'identifierTypeId') FROM jsonb_array_elements(:sourceAlias.jsonb->'identifiers') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'identifierTypeId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'identifiers') AS elems)", - valueFunction: 'lower(:value)', - }, +// { +// name: 'identifier_type_id', +// property: 'identifierTypeId', +// dataType: { +// dataType: 'stringType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'identifierTypeId') FROM jsonb_array_elements(:sourceAlias.jsonb->'identifiers') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'identifierTypeId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'identifiers') AS elems)", +// valueFunction: 'lower(:value)', +// }, ], }, }, @@ -783,17 +783,17 @@ filterValueGetter: "( SELECT array_agg(lower(elems.value->>'publicNote')) FROM jsonb_array_elements(:sourceAlias.jsonb->'electronicAccess') AS elems)", valueFunction: 'lower(:value)', }, - { - name: 'relationship_id', - property: 'relationshipId', - dataType: { - dataType: 'rangedUUIDType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'relationshipId') FROM jsonb_array_elements(:sourceAlias.jsonb->'electronicAccess') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'relationshipId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'electronicAccess') AS elems)", - valueFunction: 'lower(:value)', - }, +// { +// name: 'relationship_id', +// property: 'relationshipId', +// dataType: { +// dataType: 'rangedUUIDType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'relationshipId') FROM jsonb_array_elements(:sourceAlias.jsonb->'electronicAccess') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'relationshipId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'electronicAccess') AS elems)", +// valueFunction: 'lower(:value)', +// }, ], }, }, @@ -921,17 +921,17 @@ itemDataType: { dataType: 'objectType', properties: [ - { - name: 'instance_note_type_id', - property: 'instanceNoteTypeId', - dataType: { - dataType: 'rangedUUIDType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'instanceNoteTypeId') FROM jsonb_array_elements(:sourceAlias.jsonb->'notes') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'instanceNoteTypeId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'notes') AS elems)", - valueFunction: 'lower(:value)', - }, +// { +// name: 'instance_note_type_id', +// property: 'instanceNoteTypeId', +// dataType: { +// dataType: 'rangedUUIDType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'instanceNoteTypeId') FROM jsonb_array_elements(:sourceAlias.jsonb->'notes') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'instanceNoteTypeId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'notes') AS elems)", +// valueFunction: 'lower(:value)', +// }, { name: 'note', property: 'note', diff --git a/src/main/resources/entity-types/users/simple_group_details.json5 b/src/main/resources/entity-types/users/simple_group_details.json5 index ab800796..5ae1d0b0 100644 --- a/src/main/resources/entity-types/users/simple_group_details.json5 +++ b/src/main/resources/entity-types/users/simple_group_details.json5 @@ -46,6 +46,7 @@ isIdColumn: true, queryable: true, essential: true, + hidden: true, visibleByDefault: false, valueGetter: ':sourceAlias.id', source: { From b093333b03d824df69dbed0818a6229502fd8dfa Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Thu, 17 Oct 2024 13:05:21 -0500 Subject: [PATCH 41/45] adding skipped hidden flags to holdings --- .../entity-types/inventory/simple_holdings_records.json5 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/resources/entity-types/inventory/simple_holdings_records.json5 b/src/main/resources/entity-types/inventory/simple_holdings_records.json5 index 7d908587..00275900 100644 --- a/src/main/resources/entity-types/inventory/simple_holdings_records.json5 +++ b/src/main/resources/entity-types/inventory/simple_holdings_records.json5 @@ -37,6 +37,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ':sourceAlias.created_by', essential: true }, @@ -61,6 +62,7 @@ isIdColumn: false, queryable: true, visibleByDefault: true, + hidden: true, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedByUserId'", essential: true }, @@ -111,7 +113,6 @@ valueGetter: ':sourceAlias.callnumbertypeid', queryable: false, visibleByDefault: false, - essential: true, hidden: true }, { @@ -136,6 +137,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ':sourceAlias.holdingstypeid', essential: true }, @@ -169,6 +171,7 @@ dataType: 'rangedUUIDType', }, isIdColumn: false, + hidden: true, queryable: true, visibleByDefault: false, valueGetter: ':sourceAlias.permanentlocationid', @@ -183,6 +186,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ':sourceAlias.temporarylocationid', essential: true }, @@ -195,6 +199,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ':sourceAlias.sourceid', essential: true }, From fcace6c716a61241d2ead96bfe3eb322e9e9b77e Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Thu, 17 Oct 2024 13:30:11 -0500 Subject: [PATCH 42/45] MODFQMMGR-490:Entity adjustments: simple items 1 entity adjustments --- .../circulation/composite_loan_details.json5 | 1 + .../inventory/composite_item_details.json5 | 1 + .../inventory/simple_item_details.json5 | 160 +++++++++--------- translations/mod-fqm-manager/en.json | 2 +- translations/mod-fqm-manager/en_US.json | 2 +- 5 files changed, 86 insertions(+), 80 deletions(-) diff --git a/src/main/resources/entity-types/circulation/composite_loan_details.json5 b/src/main/resources/entity-types/circulation/composite_loan_details.json5 index 826ff862..d7e356f7 100644 --- a/src/main/resources/entity-types/circulation/composite_loan_details.json5 +++ b/src/main/resources/entity-types/circulation/composite_loan_details.json5 @@ -46,6 +46,7 @@ alias: 'items', type: 'entity-type', id: '372e025a-9444-473a-9ffd-fa0f63db1674', + essentialOnly: true, join: { condition: "(:that.jsonb ->> 'itemId')::uuid = :this.id", joinTo: 'loans.loan', diff --git a/src/main/resources/entity-types/inventory/composite_item_details.json5 b/src/main/resources/entity-types/inventory/composite_item_details.json5 index b322c22e..95d1f80d 100644 --- a/src/main/resources/entity-types/inventory/composite_item_details.json5 +++ b/src/main/resources/entity-types/inventory/composite_item_details.json5 @@ -9,6 +9,7 @@ type: 'entity-type', id: '372e025a-9444-473a-9ffd-fa0f63db1674', // simple_item_details useIdColumns: true, + essentialOnly: true }, { alias: 'effective_location', diff --git a/src/main/resources/entity-types/inventory/simple_item_details.json5 b/src/main/resources/entity-types/inventory/simple_item_details.json5 index 887dae6b..1520d576 100644 --- a/src/main/resources/entity-types/inventory/simple_item_details.json5 +++ b/src/main/resources/entity-types/inventory/simple_item_details.json5 @@ -214,6 +214,7 @@ }, isIdColumn: false, queryable: true, + essential: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'barcode'", filterValueGetter: "lower(:sourceAlias.jsonb ->> 'barcode'::text)", @@ -240,6 +241,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->'metadata'->>'createdDate'", }, { @@ -273,6 +275,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->'metadata'->>'createdByUserId'", }, { @@ -308,8 +311,9 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: false, + visibleByDefault: true, valueGetter: ":sourceAlias.jsonb->>'copyNumber'", + essential: true }, { name: 'year_caption', @@ -349,23 +353,24 @@ }, { name: 'circulation_notes', + essential: true, sourceAlias: 'item', dataType: { dataType: 'arrayType', itemDataType: { dataType: 'objectType', properties: [ - { - name: 'id', - property: 'id', - dataType: { - dataType: 'stringType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'id') FROM jsonb_array_elements(:sourceAlias.jsonb->'circulationNotes') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'id')) FROM jsonb_array_elements(:sourceAlias.jsonb->'circulationNotes') AS elems)", - valueFunction: 'lower(:value)', - }, +// { +// name: 'id', +// property: 'id', +// dataType: { +// dataType: 'stringType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'id') FROM jsonb_array_elements(:sourceAlias.jsonb->'circulationNotes') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'id')) FROM jsonb_array_elements(:sourceAlias.jsonb->'circulationNotes') AS elems)", +// valueFunction: 'lower(:value)', +// }, { name: 'date', property: 'date', @@ -426,17 +431,17 @@ dataType: { dataType: 'objectType', properties: [ - { - name: 'id', - property: 'id', - dataType: { - dataType: 'stringType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'id') FROM jsonb_array_elements(:sourceAlias.jsonb->'circulationNotes'->'source') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'id')) FROM jsonb_array_elements(:sourceAlias.jsonb->'circulationNotes'->'source') AS elems)", - valueFunction: 'lower(:value)', - }, +// { +// name: 'id', +// property: 'id', +// dataType: { +// dataType: 'stringType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'id') FROM jsonb_array_elements(:sourceAlias.jsonb->'circulationNotes'->'source') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'id')) FROM jsonb_array_elements(:sourceAlias.jsonb->'circulationNotes'->'source') AS elems)", +// valueFunction: 'lower(:value)', +// }, { name: 'personal', property: 'personal', @@ -489,6 +494,7 @@ }, { name: 'electronic_access', + essential: true, sourceAlias: 'item', dataType: { dataType: 'arrayType', @@ -517,17 +523,6 @@ filterValueGetter: "( SELECT array_agg(lower(elems.value->>'linkText')) FROM jsonb_array_elements(:sourceAlias.jsonb->'electronicAccess') AS elems)", valueFunction: 'lower(:value)', }, - { - name: 'relationship_id', - property: 'relationshipId', - dataType: { - dataType: 'stringType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'relationshipId') FROM jsonb_array_elements(:sourceAlias.jsonb->'electronicAccess') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'relationshipId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'electronicAccess') AS elems)", - valueFunction: 'lower(:value)', - }, ], }, }, @@ -597,6 +592,7 @@ { name: 'administrative_notes', sourceAlias: 'item', + essential: true, dataType: { dataType: 'arrayType', itemDataType: { @@ -628,6 +624,8 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, + essential: true, valueGetter: ":sourceAlias.effectivelocationid", }, { @@ -658,54 +656,55 @@ dataType: { dataType: 'stringType', }, + essential: true, queryable: true, visibleByDefault: true, valueGetter: "concat_ws(', '::text, NULLIF((:sourceAlias.jsonb -> 'effectiveCallNumberComponents'::text) ->> 'prefix'::text, ''::text), NULLIF((:sourceAlias.jsonb -> 'effectiveCallNumberComponents'::text) ->> 'callNumber'::text, ''::text), NULLIF((:sourceAlias.jsonb -> 'effectiveCallNumberComponents'::text) ->> 'suffix'::text, ''::text), NULLIF(:sourceAlias.jsonb ->> 'copyNumber'::text, ''::text))", }, - { - name: 'effective_call_number_components_prefix', - sourceAlias: 'item', - dataType: { - dataType: 'stringType', - }, - isIdColumn: false, - queryable: true, - visibleByDefault: false, - valueGetter: ":sourceAlias.jsonb->'effectiveCallNumberComponents'->>'prefix'", - }, - { - name: 'effective_call_number_components_suffix', - sourceAlias: 'item', - dataType: { - dataType: 'stringType', - }, - isIdColumn: false, - queryable: true, - visibleByDefault: false, - valueGetter: ":sourceAlias.jsonb->'effectiveCallNumberComponents'->>'suffix'", - }, - { - name: 'effective_call_number_components_type_id', - sourceAlias: 'item', - dataType: { - dataType: 'rangedUUIDType', - }, - isIdColumn: false, - queryable: true, - visibleByDefault: false, - valueGetter: ":sourceAlias.jsonb->'effectiveCallNumberComponents'->>'typeId'", - }, - { - name: 'effective_call_number_components_call_number', - sourceAlias: 'item', - dataType: { - dataType: 'stringType', - }, - isIdColumn: false, - queryable: true, - visibleByDefault: false, - valueGetter: ":sourceAlias.jsonb->'effectiveCallNumberComponents'->>'callNumber'", - }, +// { +// name: 'effective_call_number_components_prefix', +// sourceAlias: 'item', +// dataType: { +// dataType: 'stringType', +// }, +// isIdColumn: false, +// queryable: true, +// visibleByDefault: false, +// valueGetter: ":sourceAlias.jsonb->'effectiveCallNumberComponents'->>'prefix'", +// }, +// { +// name: 'effective_call_number_components_suffix', +// sourceAlias: 'item', +// dataType: { +// dataType: 'stringType', +// }, +// isIdColumn: false, +// queryable: true, +// visibleByDefault: false, +// valueGetter: ":sourceAlias.jsonb->'effectiveCallNumberComponents'->>'suffix'", +// }, +// { +// name: 'effective_call_number_components_type_id', +// sourceAlias: 'item', +// dataType: { +// dataType: 'rangedUUIDType', +// }, +// isIdColumn: false, +// queryable: true, +// visibleByDefault: false, +// valueGetter: ":sourceAlias.jsonb->'effectiveCallNumberComponents'->>'typeId'", +// }, +// { +// name: 'effective_call_number_components_call_number', +// sourceAlias: 'item', +// dataType: { +// dataType: 'stringType', +// }, +// isIdColumn: false, +// queryable: true, +// visibleByDefault: false, +// valueGetter: ":sourceAlias.jsonb->'effectiveCallNumberComponents'->>'callNumber'", +// }, { name: 'enumeration', sourceAlias: 'item', @@ -726,6 +725,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'effectiveShelvingOrder'", }, { @@ -834,6 +834,7 @@ dataType: 'stringType', }, isIdColumn: false, + essential: true, queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'descriptionOfPieces'", @@ -883,6 +884,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'chronology'", }, { @@ -892,6 +894,7 @@ dataType: 'booleanType', }, isIdColumn: false, + essential: true, queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'discoverySuppress'", @@ -916,6 +919,7 @@ queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'accessionNumber'", + essential: true }, { name: 'temporary_location_id', diff --git a/translations/mod-fqm-manager/en.json b/translations/mod-fqm-manager/en.json index fc7f29da..ca70aba9 100644 --- a/translations/mod-fqm-manager/en.json +++ b/translations/mod-fqm-manager/en.json @@ -785,7 +785,7 @@ "entityType.simple_item_details.created_by_user_id": "Created by user UUID", "entityType.simple_item_details.created_date": "Created date", "entityType.simple_item_details.description_of_pieces": "Description of pieces", - "entityType.simple_item_details.discovery_suppress": "Discovery suppress", + "entityType.simple_item_details.discovery_suppress": "Suppress from discovery", "entityType.simple_item_details.effective_call_number": "Effective call number", "entityType.simple_item_details.effective_call_number_components_call_number": "Effective call number components call number", "entityType.simple_item_details.effective_call_number_components_prefix": "Effective call number components prefix", diff --git a/translations/mod-fqm-manager/en_US.json b/translations/mod-fqm-manager/en_US.json index d4869957..dbcc18e6 100644 --- a/translations/mod-fqm-manager/en_US.json +++ b/translations/mod-fqm-manager/en_US.json @@ -439,7 +439,7 @@ "entityType.simple_item_details.created_by_user_id": "Created by user UUID", "entityType.simple_item_details.created_date": "Created date", "entityType.simple_item_details.description_of_pieces": "Description of pieces", - "entityType.simple_item_details.discovery_suppress": "Discovery suppress", + "entityType.simple_item_details.discovery_suppress": "Suppress from discovery", "entityType.simple_item_details.effective_call_number_components_call_number": "Effective call number components call number", "entityType.simple_item_details.effective_call_number_components_prefix": "Effective call number components prefix", "entityType.simple_item_details.effective_call_number_components_suffix": "Effective call number components suffix", From 713d8dcc837642e5b30dbc9d9201cda02c052ba6 Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Thu, 17 Oct 2024 14:14:20 -0500 Subject: [PATCH 43/45] MODFQMMGR-530:Entity adjustments: simple items 2 entity adjustments --- .../inventory/simple_item_details.json5 | 84 +++++++++++-------- translations/mod-fqm-manager/en.json | 4 +- translations/mod-fqm-manager/en_US.json | 4 +- 3 files changed, 52 insertions(+), 40 deletions(-) diff --git a/src/main/resources/entity-types/inventory/simple_item_details.json5 b/src/main/resources/entity-types/inventory/simple_item_details.json5 index 1520d576..8acc1ebb 100644 --- a/src/main/resources/entity-types/inventory/simple_item_details.json5 +++ b/src/main/resources/entity-types/inventory/simple_item_details.json5 @@ -22,6 +22,8 @@ isIdColumn: true, queryable: true, visibleByDefault: false, + essential: true, + hidden: true, valueGetter: ':sourceAlias.id', }, { @@ -40,6 +42,7 @@ { name: 'notes', sourceAlias: 'item', + essential: true, dataType: { dataType: 'arrayType', itemDataType: { @@ -77,17 +80,17 @@ filterValueGetter: "( SELECT array_agg(lower(elems.value->>'staffOnly')) FROM jsonb_array_elements(:sourceAlias.jsonb->'notes') AS elems)", valueFunction: 'lower(:value)', }, - { - name: 'item_note_type_id', - property: 'itemNoteTypeId', - dataType: { - dataType: 'stringType', - }, - queryable: false, - valueGetter: "( SELECT array_agg(elems.value->>'itemNoteTypeId') FROM jsonb_array_elements(:sourceAlias.jsonb->'notes') AS elems)", - filterValueGetter: "( SELECT array_agg(lower(elems.value->>'itemNoteTypeId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'notes') AS elems)", - valueFunction: 'lower(:value)', - }, +// { +// name: 'item_note_type_id', +// property: 'itemNoteTypeId', +// dataType: { +// dataType: 'stringType', +// }, +// queryable: false, +// valueGetter: "( SELECT array_agg(elems.value->>'itemNoteTypeId') FROM jsonb_array_elements(:sourceAlias.jsonb->'notes') AS elems)", +// filterValueGetter: "( SELECT array_agg(lower(elems.value->>'itemNoteTypeId')) FROM jsonb_array_elements(:sourceAlias.jsonb->'notes') AS elems)", +// valueFunction: 'lower(:value)', +// }, ], }, }, @@ -115,7 +118,8 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: false, + essential: true, + visibleByDefault: true, valueGetter: ":sourceAlias.jsonb->'status'->>'name'", filterValueGetter: "\"left\"(lower(${tenant_id}_mod_inventory_storage.f_unaccent((:sourceAlias.jsonb -> 'status'::text) ->> 'name'::text)), 600)", valueFunction: '"left"(lower(${tenant_id}_mod_inventory_storage.f_unaccent(:value)), 600)', @@ -229,6 +233,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: "(:sourceAlias.jsonb->>'_version')::integer", valueFunction: '(:value)::integer', }, @@ -252,12 +257,14 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: false, + visibleByDefault: true, + essential: true, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedDate'", }, { name: 'updated_by_user_id', sourceAlias: 'item', + hidden: true, dataType: { dataType: 'rangedUUIDType', }, @@ -349,6 +356,8 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, + hidden: true, valueGetter: ":sourceAlias.materialtypeid", }, { @@ -540,6 +549,8 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, + hidden: true, valueGetter: ":sourceAlias.holdingsrecordid", }, { @@ -552,6 +563,8 @@ }, }, isIdColumn: false, + essential: true, + hidden: true, queryable: true, visibleByDefault: false, valueGetter: "(\ @@ -637,6 +650,8 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, + hidden: true, valueGetter: ":sourceAlias.jsonb->>'permanentLoanTypeId'", }, { @@ -648,6 +663,8 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, + hidden: true, valueGetter: ":sourceAlias.jsonb->>'itemLevelCallNumberTypeId'", }, { @@ -736,7 +753,8 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: false, + visibleByDefault: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'itemLevelCallNumber'", }, { @@ -748,6 +766,8 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, + hidden: true, valueGetter: ":sourceAlias.jsonb->>'temporaryLoanTypeId'" }, { @@ -759,6 +779,8 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, + hidden: true, valueGetter: ":sourceAlias.permanentlocationid", }, { @@ -770,6 +792,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->'lastCheckIn'->>'dateTime'", }, { @@ -781,6 +804,8 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, + essential: true, valueGetter: ":sourceAlias.jsonb->'lastCheckIn'->>'staffMemberId'", }, { @@ -792,6 +817,8 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, + hidden: true, valueGetter: ":sourceAlias.jsonb->'lastCheckIn'->>'servicePointId'", }, { @@ -803,19 +830,9 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->>'inTransitDestinationServicePointId'", }, - { - name: 'item_level_call_number_prefix', - sourceAlias: 'item', - dataType: { - dataType: 'stringType', - }, - isIdColumn: false, - queryable: true, - visibleByDefault: false, - valueGetter: ":sourceAlias.jsonb->>'itemLevelCallNumberPrefix'", - }, { name: 'number_of_pieces', sourceAlias: 'item', @@ -842,6 +859,7 @@ { name: 'tags_tag_list', sourceAlias: 'item', + essential: true, dataType: { dataType: 'arrayType', itemDataType: { @@ -864,17 +882,6 @@ jsonb_array_elements(:sourceAlias.jsonb->'tags'->'tagList') AS elems\ )", }, - { - name: 'item_level_call_number_suffix', - sourceAlias: 'item', - dataType: { - dataType: 'stringType', - }, - isIdColumn: false, - queryable: true, - visibleByDefault: false, - valueGetter: ":sourceAlias.jsonb->>'itemLevelCallNumberSuffix'", - }, { name: 'chronology', sourceAlias: 'item', @@ -930,6 +937,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->>'temporaryLocationId'", }, { @@ -941,6 +949,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->>'itemDamagedStatusId'", }, { @@ -952,6 +961,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'numberOfMissingPieces'", }, { @@ -963,6 +973,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'purchaseOrderLineIdentifier'", }, { @@ -992,6 +1003,7 @@ isIdColumn: false, queryable: false, hidden: true, + essential: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb::text", } diff --git a/translations/mod-fqm-manager/en.json b/translations/mod-fqm-manager/en.json index ca70aba9..05eb87f4 100644 --- a/translations/mod-fqm-manager/en.json +++ b/translations/mod-fqm-manager/en.json @@ -807,10 +807,10 @@ "entityType.simple_item_details.id": "Item UUID", "entityType.simple_item_details.in_transit_destination_service_point_id": "In transit destination service point UUID", "entityType.simple_item_details.item_damaged_status_id": "Item damaged status UUID", - "entityType.simple_item_details.item_level_call_number": "Item level call number", + "entityType.simple_item_details.item_level_call_number": "Item call number", "entityType.simple_item_details.item_level_call_number_prefix": "Item level call number prefix", "entityType.simple_item_details.item_level_call_number_suffix": "Item level call number suffix", - "entityType.simple_item_details.item_level_call_number_type_id": "Item level call number type UUID", + "entityType.simple_item_details.item_level_call_number_type_id": "Item call number type UUID", "entityType.simple_item_details.jsonb": "JSONB", "entityType.simple_item_details.last_check_in_date_time": "Last check in date time", "entityType.simple_item_details.last_check_in_service_point_id": "Last check in service point UUID", diff --git a/translations/mod-fqm-manager/en_US.json b/translations/mod-fqm-manager/en_US.json index dbcc18e6..fc6ed873 100644 --- a/translations/mod-fqm-manager/en_US.json +++ b/translations/mod-fqm-manager/en_US.json @@ -460,10 +460,10 @@ "entityType.simple_item_details.id": "Item UUID", "entityType.simple_item_details.in_transit_destination_service_point_id": "In transit destination service point UUID", "entityType.simple_item_details.item_damaged_status_id": "Item damaged status UUID", - "entityType.simple_item_details.item_level_call_number": "Item level call number", + "entityType.simple_item_details.item_level_call_number": "Item call number", "entityType.simple_item_details.item_level_call_number_prefix": "Item level call number prefix", "entityType.simple_item_details.item_level_call_number_suffix": "Item level call number suffix", - "entityType.simple_item_details.item_level_call_number_type_id": "Item level call number type UUID", + "entityType.simple_item_details.item_level_call_number_type_id": "Item call number type UUID", "entityType.simple_item_details.last_check_in_date_time": "Last check in date time", "entityType.simple_item_details.last_check_in_service_point_id": "Last check in service point UUID", "entityType.simple_item_details.last_check_in_staff_member_id": "Last check in staff member UUID", From 06d0d80575a82d41a6d4fc304ada848a42753fc3 Mon Sep 17 00:00:00 2001 From: Noah Overcash Date: Thu, 17 Oct 2024 15:27:31 -0400 Subject: [PATCH 44/45] [MODFQMMGR-487] Simple POL entity adjustments (#481) * [MODFQMMGR-487] Simple POL entity adjustments * innersential * fix * fix2 * remove redundancy --- .../composite_purchase_order_lines.json5 | 1 + .../orders/simple_purchase_order_line.json5 | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/main/resources/entity-types/orders/composite_purchase_order_lines.json5 b/src/main/resources/entity-types/orders/composite_purchase_order_lines.json5 index b7d68d99..073542c7 100644 --- a/src/main/resources/entity-types/orders/composite_purchase_order_lines.json5 +++ b/src/main/resources/entity-types/orders/composite_purchase_order_lines.json5 @@ -8,6 +8,7 @@ type: 'entity-type', id: '58148257-bfb0-4687-8c42-d2833d772f3e', // simple_purchase_order_line useIdColumns: true, + essentialOnly: true, }, { alias: 'po', diff --git a/src/main/resources/entity-types/orders/simple_purchase_order_line.json5 b/src/main/resources/entity-types/orders/simple_purchase_order_line.json5 index f7f467ed..d718470a 100644 --- a/src/main/resources/entity-types/orders/simple_purchase_order_line.json5 +++ b/src/main/resources/entity-types/orders/simple_purchase_order_line.json5 @@ -22,6 +22,7 @@ }, isIdColumn: true, queryable: true, + essential: true, visibleByDefault: true, valueGetter: ':sourceAlias.id', }, @@ -45,6 +46,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb -> 'metadata' ->> 'createdDate'", filterValueGetter: "\"left\"(lower(${tenant_id}_mod_orders_storage.f_unaccent((:sourceAlias.jsonb -> 'metadata'::text) ->> 'createdDate'::text)), 600)", valueFunction: '"left"(lower(${tenant_id}_mod_orders_storage.f_unaccent(:value)), 600)' @@ -58,6 +60,8 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, + hidden: true, valueGetter: ':sourceAlias.created_by', }, { @@ -99,6 +103,7 @@ dataType: 'rangedUUIDType', }, isIdColumn: false, + essential: true, queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'agreementId'", @@ -375,6 +380,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->'cost'->>'currency'", filterValueGetter: "lower(:sourceAlias.jsonb -> 'cost' ->> 'currency')", valueFunction: 'lower(:value)', @@ -438,6 +444,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: "(:sourceAlias.jsonb->'cost'->>'exchangeRate')::float", valueFunction: '(:value)::float', }, @@ -474,6 +481,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: "(:sourceAlias.jsonb->'cost'->>'poLineEstimatedPrice')::float", valueFunction: '(:value)::float', }, @@ -498,6 +506,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'description'", }, { @@ -509,6 +518,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->'details'->>'receivingNote'", }, { @@ -645,6 +655,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'donor'", }, { @@ -681,6 +692,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->'eresource'->>'activated'", values: [ { @@ -714,6 +726,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->'eresource'->>'createInventory'", values: [ { @@ -743,6 +756,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->'eresource'->>'trial'", values: [ { @@ -764,6 +778,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->'eresource'->>'expectedActivation'", }, { @@ -809,6 +824,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->'eresource'->>'resourceUrl'", }, { @@ -933,6 +949,7 @@ isIdColumn: false, queryable: false, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'fundDistribution'", }, { @@ -1091,6 +1108,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'orderFormat'", values: [ { @@ -1130,6 +1148,7 @@ }, isIdColumn: false, queryable: true, + essential: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'paymentStatus'", filterValueGetter: '"left"(lower(${tenant_id}_mod_orders_storage.f_unaccent(:sourceAlias.jsonb ->> \'paymentStatus\'::text)), 600)', @@ -1224,6 +1243,7 @@ }, isIdColumn: false, queryable: true, + essential: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'physical'->>'expectedReceiptDate'", }, @@ -1295,6 +1315,7 @@ }, isIdColumn: false, queryable: true, + essential: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'publicationDate'", }, @@ -1305,6 +1326,7 @@ dataType: 'stringType', }, isIdColumn: false, + essential: true, queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'publisher'", @@ -1316,6 +1338,7 @@ dataType: 'dateType', }, isIdColumn: false, + essential: true, queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'receiptDate'", @@ -1327,6 +1350,7 @@ dataType: 'stringType', }, isIdColumn: false, + essential: true, queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'receiptStatus'", @@ -1419,6 +1443,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'rush'", values: [ { @@ -1438,6 +1463,7 @@ dataType: 'stringType', }, isIdColumn: false, + essential: true, queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'selector'", @@ -1449,6 +1475,7 @@ dataType: 'stringType', }, isIdColumn: false, + essential: true, queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'source'", @@ -1485,6 +1512,7 @@ }, }, isIdColumn: false, + essential: true, queryable: false, visibleByDefault: false, valueGetter: "(\ @@ -1507,6 +1535,7 @@ dataType: 'stringType', }, isIdColumn: false, + essential: true, queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'titleOrPackage'", @@ -1551,6 +1580,7 @@ dataType: 'dateType', }, isIdColumn: false, + essential: true, queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedDate'", @@ -1562,7 +1592,9 @@ dataType: 'rangedUUIDType', }, isIdColumn: false, + essential: true, queryable: true, + hidden: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedByUserId'", }, From a58e2b3573d3744e6bb65a91b3d657d5a436d54c Mon Sep 17 00:00:00 2001 From: Kriti Jain Date: Thu, 17 Oct 2024 15:36:56 -0500 Subject: [PATCH 45/45] MODFQMMGR-529:simple PO entity adjustments --- .../composite_purchase_order_lines.json5 | 1 + .../orders/simple_purchase_order.json5 | 36 +++++++++++++++---- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/main/resources/entity-types/orders/composite_purchase_order_lines.json5 b/src/main/resources/entity-types/orders/composite_purchase_order_lines.json5 index 073542c7..cfa67c14 100644 --- a/src/main/resources/entity-types/orders/composite_purchase_order_lines.json5 +++ b/src/main/resources/entity-types/orders/composite_purchase_order_lines.json5 @@ -14,6 +14,7 @@ alias: 'po', type: 'entity-type', id: '48de4796-11a2-44e9-abb7-01e84af87234', // simple_purchase_order + essentialOnly: true, join: { type: 'join', joinTo: 'pol.pol', diff --git a/src/main/resources/entity-types/orders/simple_purchase_order.json5 b/src/main/resources/entity-types/orders/simple_purchase_order.json5 index 195751b7..86b13909 100644 --- a/src/main/resources/entity-types/orders/simple_purchase_order.json5 +++ b/src/main/resources/entity-types/orders/simple_purchase_order.json5 @@ -24,6 +24,8 @@ isIdColumn: true, queryable: true, visibleByDefault: false, + essential: true, + hidden: true, valueGetter: ':sourceAlias.id', }, { @@ -35,6 +37,8 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, + essential: true, valueGetter: ':sourceAlias.created_by', }, { @@ -45,7 +49,8 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: false, + essential: true, + visibleByDefault: true, valueGetter: ":sourceAlias.jsonb -> 'metadata' ->> 'createdDate'", filterValueGetter: "\"left\"(lower(${tenant_id}_mod_orders_storage.f_unaccent((:sourceAlias.jsonb -> 'metadata'::text) ->> 'createdDate'::text)), 600)", valueFunction: '"left"(lower(${tenant_id}_mod_orders_storage.f_unaccent(:value)), 600)' @@ -58,7 +63,8 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: false, + essential: true, + visibleByDefault: true, valueGetter: ":sourceAlias.jsonb->>'approved'", filterValueGetter: '"left"(lower(${tenant_id}_mod_orders_storage.f_unaccent(:sourceAlias.jsonb ->> \'approved\'::text)), 600)', valueFunction: '"left"(lower(${tenant_id}_mod_orders_storage.f_unaccent(:value)), 600)', @@ -125,7 +131,7 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: false, + visibleByDefault: true, valueGetter: ":sourceAlias.jsonb->>'dateOrdered'", }, { @@ -137,6 +143,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + hidden: true, valueGetter: ":sourceAlias.jsonb->>'manualPo'", values: [ { @@ -152,6 +159,8 @@ { name: 'notes', sourceAlias: 'po', + hidden: true, + essential: true, dataType: { dataType: 'arrayType', itemDataType: { @@ -183,7 +192,8 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: false, + visibleByDefault: true, + essential: true, valueGetter: ":sourceAlias.jsonb->>'poNumber'", }, { @@ -216,7 +226,8 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: false, + essential: true, + visibleByDefault: true, valueGetter: ":sourceAlias.jsonb->>'orderType'", filterValueGetter: '"left"(lower(${tenant_id}_mod_orders_storage.f_unaccent(:sourceAlias.jsonb ->> \'orderType\'::text)), 600)', valueFunction: '"left"(lower(${tenant_id}_mod_orders_storage.f_unaccent(:value)), 600)', @@ -240,6 +251,7 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, valueGetter: ":sourceAlias.jsonb->>'reEncumber'", values: [ { @@ -281,6 +293,7 @@ dataType: 'rangedUUIDType', }, isIdColumn: false, + hidden: true, queryable: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb->>'vendor'", @@ -322,6 +335,7 @@ }, isIdColumn: false, queryable: false, + essential: true, visibleByDefault: false, valueGetter: "(\ SELECT\ @@ -345,9 +359,10 @@ dataType: 'stringType', }, }, + essential: true, idColumnName: 'acq_unit_ids', queryable: false, - visibleByDefault: false, + visibleByDefault: true, valueGetter: "( SELECT array_agg(acq_unit.jsonb ->> 'name'::text) FILTER (WHERE (acq_unit.jsonb ->> 'name'::text) IS NOT NULL) AS array_agg FROM jsonb_array_elements_text((:sourceAlias.jsonb -> 'acqUnitIds'::text)) record(value) JOIN src_acquisitions_unit acq_unit ON lower(record.value::text) = acq_unit.id::text)", filterValueGetter: "( SELECT array_agg(lower(acq_unit.jsonb ->> 'name'::text)) FILTER (WHERE (acq_unit.jsonb ->> 'name'::text) IS NOT NULL) AS array_agg FROM jsonb_array_elements_text((:sourceAlias.jsonb -> 'acqUnitIds'::text)) record(value) JOIN src_acquisitions_unit acq_unit ON (record.value::text) = acq_unit.id::text)", valueFunction: 'lower(:value)', @@ -375,6 +390,7 @@ }, { name: 'tags', + essential: true, sourceAlias: 'po', dataType: { dataType: 'arrayType', @@ -406,7 +422,8 @@ }, isIdColumn: false, queryable: true, - visibleByDefault: false, + visibleByDefault: true, + essential: true, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedDate'", }, { @@ -418,6 +435,8 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, + hidden: true, valueGetter: ":sourceAlias.jsonb->'metadata'->>'updatedByUserId'", }, { @@ -429,6 +448,8 @@ isIdColumn: false, queryable: true, visibleByDefault: false, + essential: true, + hidden: true, valueGetter: ":sourceAlias.jsonb->>'assignedTo'", }, { @@ -440,6 +461,7 @@ isIdColumn: false, queryable: false, hidden: true, + essential: true, visibleByDefault: false, valueGetter: ":sourceAlias.jsonb::text", }