diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a8784b3c3..fe3e13ff1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,7 +26,8 @@ variables: DOCKER_BUILDKIT: 1 ARTIFACT_ZIP_FILES: ${OUTPUT_DIR}/${CI_PROJECT_NAME}-*.zip ENV_FILE: variables.env - + IONIC_CLI_VERSION: 7.1.1 + ANGULAR_CLI_VERSION: 14.2.12 # --------------------------------------------------------------- # Jobs templates # --------------------------------------------------------------- @@ -63,7 +64,7 @@ build:env: - mkdir -p target/docker - cp -rf scripts/docker/build/* target/docker # Build and push the CI image - - docker build --cache-from ${CI_BUILD_IMAGE} -t ${CI_BUILD_IMAGE} --build-arg BUILDKIT_INLINE_CACHE=1 --build-arg="CACHE_DIR=${BUILD_CACHE_DIR}" --build-arg="IMAGE_REGISTRY=${DOCKER_IMAGE_REGISTRY}" -f target/docker/Dockerfile . + - docker build --cache-from ${CI_BUILD_IMAGE} -t ${CI_BUILD_IMAGE} --build-arg BUILDKIT_INLINE_CACHE=1 --build-arg="CACHE_DIR=${BUILD_CACHE_DIR}" --build-arg="IMAGE_REGISTRY=${DOCKER_IMAGE_REGISTRY}" --build-arg="IONIC_CLI_VERSION=${IONIC_CLI_VERSION}" --build-arg="ANGULAR_CLI_VERSION=${ANGULAR_CLI_VERSION}" -f target/docker/Dockerfile . - docker push ${CI_BUILD_IMAGE} except: - tags diff --git a/README.md b/README.md index db73a2a00..9845dddb0 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,11 @@ wget -qO- https://raw.githubusercontent.com/sumaris-net/sumaris-app/master/insta ## Contribute -See the [developer guide](./doc/build.md) +See our documentation : +- [How-to build](doc/build.md) +- [Environment setup](doc/setup.md) +- [Developer guide](doc/developer_guide.md) +- Full documentation (functional and technical) : https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc ## License diff --git a/android/app/build.gradle b/android/app/build.gradle index 6e0eeaf3b..e6ae1f3b3 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "net.sumaris.app" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 20601 - versionName "2.6.1" + versionCode 20700 + versionName "2.7.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index f97217248..1a38c8664 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ - + diff --git a/doc/developer_guide.md b/doc/developer_guide.md index cc13d5ffb..3f7cf0334 100644 --- a/doc/developer_guide.md +++ b/doc/developer_guide.md @@ -1,20 +1,22 @@ # Developer guide -## Composant Angular +> Look at the up-to-date documentation at: https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/tree/master/architecture/app -- Pour chaque composant Angular (v14): - - Utiliser Ionic framework, et si besoin Angular Material. Utiliser la classe Moment pour les dates. - - Utiliser RxState avec providers: [RxState] dans la déclaration @Component. - - Juste au-dessus de chaque classe composant, déclarer une interface MonComponentState : - * En remplaçant "MonComponent" par le nom du composant. - * Ajouter les attributs dynamiques du composant dans cette interface. - - Dans le constructeur : - * Limiter les paramètres en utilisant injector: Injector pour faciliter l'héritage. - * Définir tous les paramètres avec une visibilité protected. - * Ajouter un paramètre state: RxState. - - Pour chaque attribut dynamique du composant : - * Définir l'attribut avec son type simple dans la classe MonComposantState. - * Dans le composant, définir un getter et un setter avec @Input qui utilise state : +## Writing components + +- For each Angular component (v14): + - Use the Ionic framework, and if necessary, Angular Material. Use the Moment class for dates. + - Use RxState with providers: [RxState] in the @Component declaration. + - Right above each component class, declare an interface MyComponentState: + * Replace "MyComponent" with the name of the component. + * Add the component's dynamic attributes to this interface. + - Within the constructor: + * Limit the parameters by using injector: Injector to facilitate inheritance. + * Define all parameters with `protected` visibility. + * Add a parameter state: RxState. + - For each dynamic attribute of the component: + * Define the attribute with its basic type in the MyComponentState class. + * In the component, define a getter and a setter with @Input that uses state: ```ts get attribute(): string { return this.state.get('attribute'); @@ -23,16 +25,17 @@ this.state.set('attribute', () => value); } ``` - - Pour les modales (si besoin) : - * Utiliser IonicModal. - * Ne pas définir la modale dans le template HTML (inline) mais dans un composant séparé. - * Gérer la modale depuis le composant appelant via ModalController. - - Pour tout code généré (par GPT ou autre) : - - Ne pas générer les imports TypeScript. - - Ajouter une ligne de commentaire, en entête de classe, indiquant que le code est sous licence libre (GPL version 3), sans toutefois écrire la licence en entier. + - For modals (if needed): + * Use IonicModal. + * Do not define the modal in the HTML template (inline) but in a separate component. + * Manage the modal from the calling component via ModalController. + - For any generated code (by GPT or otherwise): + - Do not generate TypeScript imports. + - Add a comment line at the beginning of the class indicating that the code is under a free license (GPL version 3), but do not write out the full license. + + - Use the `ngx-translate` library for labels: + - Use the `TranslateModule` imported from `@ngx-translate/core`. + - Add an i18n key prefix "MY_COMPONENT." before each i18n key. + - In the template, translate each label by indicating the i18n key followed by the `translate` pipe. + - Define the translation for each key in a "fr.json" translation file. - - Utiliser la bibliothèque `ngx-translate` pour les libellés : - - Utiliser le module `TranslateModule` importé depuis `@ngx-translate/core`. - - Ajouter un préfixe de clé i18n "MON_COMPOSANT." devant chaque clé i18n. - - Dans le template, traduire chaque libellé en indiquant la clef i18n suivi de la pipe `translate`. - - Définir la traduction de chaque clé dans un fichier de traduction "fr.json". diff --git a/doc/install-IFREMER.md b/doc/install-IFREMER.md deleted file mode 100644 index b39adb19b..000000000 --- a/doc/install-IFREMER.md +++ /dev/null @@ -1,91 +0,0 @@ -# INSTALLATION (contexte IFREMER) - -## Installation du client : sumaris-app - -## Générer une clef SSH -Sous Windows, dans un terminal Git Bash : -`ssh-keygen -t ed25519 -C "user@domain.com"` - -Puis, ajouter le clef publique dans github (settings du compte: https://github.com/settings/keys) et ajouter une clef SSH en copiant le contenu du fichier ~/.ssh/id_ed25519.pub - -## Installer Node JS -Windows : -- -- ou - -Linux : -- - -## Récupérer les sources -Récupérer le projet sous git : -- ~~`git clone git@github.com:sumaris-net/sumaris-app.git`~~ -- `git clone https://gitlab.ifremer.fr/sih/sumaris/sumaris-app.git` - -Puis, dans le projet sumaris-app, lancer ces commandes: -- `npm install` -- `npm run start` -- Une fois le pod démarré, on peut se connecter sur (en tant que admin@sumaris.net/admin) en sélectionnant le nœud réseau - -## Installation du pod : sumaris-pod -Documentation: - -- ~~`git clone git@github.com:sumaris-net/sumaris-pod.git`~~ -- `git clone https://gitlab.ifremer.fr/sih/sumaris/sumaris-pod.git` -- `cd sumaris-pod` - -### Compiler le pod -- `mvn install -DskipTests` -- attention à la version de java si erreur de certificat ! - -### Lancer la base HSQLDB -Générer la BDD local (avec au moins un test): -- `mvn install -pl sumaris-core` - -Puis la lancer : - - `cd sumaris-core/src/test/scripts` - - `startServer.bat` sous Windows (si erreur sur "replace" commenter la partie Copy test DB) - -Elle est accessible avec DBeaver (driver HSQLDB Server) : `jdbc:hsqldb:hsql://localhost:9001/sumaris` - -### Lancer le pod -- `cd sumaris-server` -- `mvn spring-boot:run -Dspring-boot.run.fork=false -Duser.timezone=UTC -Dsumaris.name=IMAGINE` **(ne pas oublier de lancer la base!)** - -### Lancer le pod sur la base Oracle - - récupérer localement le fichier de propriété Oracle souhaité depuis le projet [isi-sih-sumaris](https://gitlab.ifremer.fr/dev_ops/shared_docker_image_factory/isi-sih-sumaris) (liste des fichiers de properties dans le répertoire `sumaris-server`). - - exécuter la commande `spring-boot:run -Dspring-boot.run.fork=false -Doracle.net.tns_admin=\\brest\tnsnames -Dspring.config.location=path-to-file\application-test.properties` -
ancienne commande -spring-boot:run -Dspring-boot.run.fork=false -Doracle.net.tns_admin=\\brest\tnsnames -Dspring.config.location=C:\dev\application-test.properties -Dsumaris.name=IMAGiNE -Dspring.profiles.active=oracle -Duser.timezone=UTC -Doracle.jdbc.timezoneAsRegion=false -Dspring.security.ldap.enabled=true -Dspring.security.ldap.baseDn=ou=annuaire -Dspring.security.ldap.url=ldap://ldap.ifremer.fr/dc=ifremer,dc=fr -
- -Le serveur est accessible sur - -### Sous IntelliJ -Pour installer, compiler et lancer le pod sous IntelliJ : -- lancer IntelliJ -- Faire "File" > "New" > "Project from version control" > "Git" -- Sélectionner `https://gitlab.ifremer.fr/sih/sumaris/sumaris-pod.git` -- Le projet est créé automatiquement en local avec l'arborescence de sous-projet -- OPTIONNEL : sur chaque sous-projet, aller au niveau du pom.xml et faire un clic droit puis "Add as Maven project" -- Installer le plugin Lombok dans "File" > "Settings" > "Plugins" pour la prise en compte des annotations Lombok -- Ajouter une configuration de lancement dans IntelliJ de type Maven avec comme "working directory" le dossier du projet parent et pour exécution `install -DskipTests`. La lancer. -- Ajouter une configuration de lancement dans IntelliJ de type Maven avec comme "working directory" le dossier du sous projet "sumaris-core" et en exécution `install` (SANS le skipTests). La lancer pour compiler et lancer les tests unitaires afin de générer la base locale. -- Lancer la base locale via : - - `cd sumaris-core/src/test/scripts` - - `./startServer.bat` (ou .bat sous Windows, si erreur sur "replace" commenter la partie Copy test DB) -- Ajouter une configuration de lancement dans IntelliJ de type Maven avec comme "working directory" le dossier du sous projet "sumaris-server" et pour exécution `spring-boot:run -Dspring-boot.run.fork=false -Duser.timezone=UTC -Dsumaris.name=IMAGINE`. La lancer. - -## Installation de la documentation : summaris-doc - -- ~~`git clone git@github.com:sumaris-net/sumaris-doc.git`~~ -- `git clone https://gitlab.ifremer.fr/sih/sumaris/sumaris-doc.git` -- ouvrir le projet summaris-doc sous Intellij et installer le plugin PlantUML - -### Installer GraphViz: -- lien de téléchargement : -- installer GraphViz à partir de l'executable téléchargé -- ouvrir un terminal avec les droits admin dans le répertoire "C:\Program Files\Graphviz 2.44.1\bin" et lancer la commande `dot.exe -c` -- dans Intellij, compléter les settings PlantUML, renseigner le champ "Graphviz dot executable" : `C:/Program Files/Graphviz 2.44.1/bin/dot.exe` - -### Générer la documentation (svg): -- exécuter le fichier generate.bat diff --git a/doc/setup.md b/doc/setup.md new file mode 100644 index 000000000..a2a8f7e79 --- /dev/null +++ b/doc/setup.md @@ -0,0 +1,27 @@ +# Development Environment Setup + +> Look at the up-to-date documentation at: https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/tree/master/architecture/app + +## Prerequisites +### Generate an SSH key +On Windows, in a Git Bash terminal: +`ssh-keygen -t ed25519 -C "user@domain.com"` + +Then, add the public key to GitHub (account settings: https://github.com/settings/keys) and add an SSH key by copying the contents of the file ~/.ssh/id_ed25519.pub. + +### Install Node JS +Windows: +- +- or + +Linux: +- + +## Compile and launch +Clone the project from git: +- `git clone https://gitlab.ifremer.fr/sih/sumaris/sumaris-app.git` + +Then, in the sumaris-app project, run these commands: +- `npm install` +- `npm run start` +- Once the pod starts, you can connect at (as admin@sumaris.net/admin) by selecting the network node diff --git a/install.sh b/install.sh index ab48a87c9..31efc5bfd 100755 --- a/install.sh +++ b/install.sh @@ -15,7 +15,7 @@ if [[ "_$INSTALL_DIR" == "_" ]]; then fi latest_version() { - echo "2.6.1" #lastest + echo "2.7.0" #lastest } api_release_url() { diff --git a/ngx-sumaris-components b/ngx-sumaris-components index 2f63e0249..4644e5a6f 160000 --- a/ngx-sumaris-components +++ b/ngx-sumaris-components @@ -1 +1 @@ -Subproject commit 2f63e02491469db10b55c3a5607fb56cf30cdf90 +Subproject commit 4644e5a6feae5561ac03e7713760828ae3f6058c diff --git a/package.json b/package.json index 626a0f781..f95637a0e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "sumaris-app", "description": "SUMARiS app", - "version": "2.6.1", + "version": "2.7.0", "author": "contact@e-is.pro", "license": "AGPL-3.0", "readmeFilename": "README.md", diff --git a/scripts/docker/build/Dockerfile b/scripts/docker/build/Dockerfile index 78a8bdb40..af735f3e2 100644 --- a/scripts/docker/build/Dockerfile +++ b/scripts/docker/build/Dockerfile @@ -1,6 +1,8 @@ # PREPARE STAGE ARG IMAGE_REGISTRY ARG DOCKER_IMAGE="node:16-slim" +ARG IONIC_CLI_VERSION="7.1.1" +ARG ANGULAR_CLI_VERSION="14.2.12" FROM $IMAGE_REGISTRY$DOCKER_IMAGE AS prepare FROM $DOCKER_IMAGE AS prepare ARG CACHE_DIR=/tmp/.build-cache @@ -20,7 +22,7 @@ WORKDIR $CACHE_DIR # Caching npm depedencies COPY --from=prepare $CACHE_DIR/package.json . # Install global dependencies -RUN npm install -g npm @ionic/cli @angular/cli +RUN npm install -g @ionic/cli@${IONIC_CLI_VERSION} @angular/cli@${ANGULAR_CLI_VERSION} # Install project dependencies RUN npm install --unsafe-perm --force diff --git a/src/app/data/data.config.ts b/src/app/data/data.config.ts index 48852ad69..a1c9631f4 100644 --- a/src/app/data/data.config.ts +++ b/src/app/data/data.config.ts @@ -24,6 +24,18 @@ export const DATA_CONFIG_OPTIONS = Object.freeze({ type: 'boolean', defaultValue: true }, + ADAGIO_OPTIMIZATION: { + key: 'sumaris.persistence.adagio.optimization', + label: 'CONFIGURATION.OPTIONS.ADAGIO_OPTIMIZATION', + type: 'boolean', + defaultValue: false + }, + ADAGIO_SCHEMA: { + key: 'sumaris.persistence.adagio.schema', + label: 'CONFIGURATION.OPTIONS.ADAGIO_SCHEMA', + type: 'string', + defaultValue: '' + }, SAMPLE_HASH_OPTIMIZATION: { key: 'sumaris.persistence.sample.hashOptimization', label: 'CONFIGURATION.OPTIONS.SAMPLE_HASH_OPTIMIZATION', diff --git a/src/app/referential/pmfm/pmfm.page.ts b/src/app/referential/pmfm/pmfm.page.ts index 1fec4cc39..214e95992 100644 --- a/src/app/referential/pmfm/pmfm.page.ts +++ b/src/app/referential/pmfm/pmfm.page.ts @@ -16,7 +16,6 @@ import { joinPropertiesPath, MatAutocompleteFieldConfig, Referential, - ReferentialFilter, ReferentialRef, referentialToString, ReferentialUtils @@ -35,7 +34,7 @@ import { ISelectReferentialModalOptions, SelectReferentialModal } from '@app/ref import { IonCheckbox, ModalController } from '@ionic/angular'; import { SimpleReferentialTable } from '@app/referential/table/referential-simple.table'; import { ReferentialRefFilter } from '@app/referential/services/filter/referential-ref.filter'; -import { UnitIds, UnitLabel } from '@app/referential/services/model/model.enum'; +import { UnitIds } from '@app/referential/services/model/model.enum'; @Component({ selector: 'app-pmfm', @@ -193,12 +192,13 @@ export class PmfmPage extends AppEntityEditor { } }; + // TODO : See #450 (need to implement `levelIds[]` to get "n to n" relation between Fraction and Matrix) // Check fraction - this.form.get('fraction') - .setAsyncValidators(async (control: AbstractControl) => { - const value = control.enabled && control.value; - return value && (!this.matrix || value.levelId !== this.matrix.id) ? {entity: true} : null; - }); + // this.form.get('fraction') + // .setAsyncValidators(async (control: AbstractControl) => { + // const value = control.enabled && control.value; + // return value && (!this.matrix || value.levelId !== this.matrix.id) ? {entity: true} : null; + // }); // Listen for parameter this.registerSubscription( diff --git a/src/assets/i18n/en-US.json b/src/assets/i18n/en-US.json index a3f9642d8..120427168 100644 --- a/src/assets/i18n/en-US.json +++ b/src/assets/i18n/en-US.json @@ -189,6 +189,8 @@ "ACCESS_PROGRAM_IDS": "Data entry > Authorized data programs", "ACCESS_NOT_SELF_DATA_MIN_ROLE": "Data entry > Min. user profile (min) to access other people data", "ACCESS_NOT_SELF_DATA_DEPARTMENT_IDS": "Data entry > Department that can access other people data", + "ADAGIO_OPTIMIZATION": "Persistence > Oracle: Optimize queries for SIH-Adagio", + "ADAGIO_SCHEMA": "Persistence > Oracle: SIH-Adagio Schema", "SAMPLE_UNIQUE_TAG": "Persistence > Sample: Check if TAG_ID is unique", "SAMPLE_HASH_OPTIMIZATION": "Persistence > Sample: Optimize save (hash)", "BATCH_HASH_OPTIMIZATION": "Persistence > Batch: Optimize save (hash)", @@ -282,12 +284,13 @@ "METHOD_CALCULATED_WEIGHT_LENGTH_SUM_ID": "Referential > Method > Sum of children Weight-Length weights", "METHOD_UNKNOWN_ID": "Referential > Method > Unknown", "FRACTION_INDIVIDUAL_ID": "Referential > Fraction > Individual", - "PARAMETER_GROUP_AGE_LABELS": "Strategy > Parameter > Age labels", - "PARAMETER_GROUP_SEX_LABELS": "Strategy > Parameter > Sex labels", - "PARAMETER_GROUP_WEIGHT_LABELS": "Strategy > Parameter > Weight labels", - "PARAMETER_GROUP_LENGTH_LABELS": "Strategy > Parameter > Length labels", - "PARAMETER_GROUP_MATURITY_LABELS": "Strategy > Parameter > Maturity labels", - "FRACTION_GROUP_CALCIFIED_STRUCTURE_IDS": "Strategy > Fraction > Calcified structure ids", + "PARAMETER_GROUP_TAG_ID_LABELS": "Referential > Parameter > Tag-ID (codes)", + "PARAMETER_GROUP_AGE_LABELS": "Referential > Parameter > Age labels (codes)", + "PARAMETER_GROUP_SEX_LABELS": "Referential > Parameter > Sex labels (codes)", + "PARAMETER_GROUP_WEIGHT_LABELS": "Referential > Parameter > Weight labels (codes)", + "PARAMETER_GROUP_LENGTH_LABELS": "Referential > Parameter > Length labels (codes)", + "PARAMETER_GROUP_MATURITY_LABELS": "Referential > Parameter > Maturity labels (codes)", + "FRACTION_GROUP_CALCIFIED_STRUCTURE_IDS": "Referential > Fraction > Calcified structure (ids)", "UNIT_NONE_ID": "Referential > Unit > None (hide by default)", "QUALITY_FLAG_NOT_COMPLETED_ID": "Referential > Quality flag > Not completed", "QUALITY_FLAG_MISSING_ID": "Referential > Quality flag > Missing", diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 7db36e4c0..5ae644b2d 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -189,6 +189,8 @@ "ACCESS_PROGRAM_IDS": "Data entry > Authorized data programs", "ACCESS_NOT_SELF_DATA_MIN_ROLE": "Data entry > Min. user profile (min) to access other people data", "ACCESS_NOT_SELF_DATA_DEPARTMENT_IDS": "Data entry > Department that can access other people data", + "ADAGIO_OPTIMIZATION": "Persistence > Oracle: Optimize queries for SIH-Adagio", + "ADAGIO_SCHEMA": "Persistence > Oracle: SIH-Adagio Schema", "SAMPLE_UNIQUE_TAG": "Persistence > Sample: Check if TAG_ID is unique", "SAMPLE_HASH_OPTIMIZATION": "Persistence > Sample: Optimize save (hash)", "BATCH_HASH_OPTIMIZATION": "Persistence > Batch: Optimize save (hash)", @@ -282,12 +284,13 @@ "METHOD_CALCULATED_WEIGHT_LENGTH_SUM_ID": "Referential > Method > Sum of children Weight-Length weights", "METHOD_UNKNOWN_ID": "Referential > Method > Unknown", "FRACTION_INDIVIDUAL_ID": "Referential > Fraction > Individual", - "PARAMETER_GROUP_AGE_LABELS": "Strategy > Parameter > Age labels", - "PARAMETER_GROUP_SEX_LABELS": "Strategy > Parameter > Sex labels", - "PARAMETER_GROUP_WEIGHT_LABELS": "Strategy > Parameter > Weight labels", - "PARAMETER_GROUP_LENGTH_LABELS": "Strategy > Parameter > Length labels", - "PARAMETER_GROUP_MATURITY_LABELS": "Strategy > Parameter > Maturity labels", - "FRACTION_GROUP_CALCIFIED_STRUCTURE_IDS": "Strategy > Fraction > Calcified structure ids", + "PARAMETER_GROUP_TAG_ID_LABELS": "Referential > Parameter > Tag-ID (codes)", + "PARAMETER_GROUP_AGE_LABELS": "Referential > Parameter > Age labels (codes)", + "PARAMETER_GROUP_SEX_LABELS": "Referential > Parameter > Sex labels (codes)", + "PARAMETER_GROUP_WEIGHT_LABELS": "Referential > Parameter > Weight labels (codes)", + "PARAMETER_GROUP_LENGTH_LABELS": "Referential > Parameter > Length labels (codes)", + "PARAMETER_GROUP_MATURITY_LABELS": "Referential > Parameter > Maturity labels (codes)", + "FRACTION_GROUP_CALCIFIED_STRUCTURE_IDS": "Referential > Fraction > Calcified structure (ids)", "UNIT_NONE_ID": "Referential > Unit > None (hide by default)", "QUALITY_FLAG_NOT_COMPLETED_ID": "Referential > Quality flag > Not completed", "QUALITY_FLAG_MISSING_ID": "Referential > Quality flag > Missing", diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json index 142a6cc78..6adda28c3 100644 --- a/src/assets/i18n/fr.json +++ b/src/assets/i18n/fr.json @@ -189,6 +189,8 @@ "ACCESS_PROGRAM_IDS": "Saisie > Programmes de collecte autorisés", "ACCESS_NOT_SELF_DATA_MIN_ROLE": "Saisie > Role min. pour voir les données des autres", "ACCESS_NOT_SELF_DATA_DEPARTMENT_IDS": "Saisie > Services permettant de voir les données des autres", + "ADAGIO_OPTIMIZATION": "Persistance > Oracle : Optimiser les requêtes pour SIH-Adagio", + "ADAGIO_SCHEMA": "Persistance > Oracle : Schéma SIH-Adagio", "SAMPLE_UNIQUE_TAG": "Persistance > Sample : Vérifier l'unicité du code de prélèvement", "SAMPLE_HASH_OPTIMIZATION": "Persistance > Sample : Optimiser la sauvegarde (hash)", "BATCH_HASH_OPTIMIZATION": "Persistance > Batch : Optimiser la sauvegarde (hash)", @@ -282,7 +284,7 @@ "METHOD_CALCULATED_WEIGHT_LENGTH_SUM_ID": "Référentiel > Méthode > Calcul de la somme des poids RTP", "METHOD_UNKNOWN_ID": "Référentiel > Méthode > Inconnue", "FRACTION_INDIVIDUAL_ID": "Référentiel > Fraction > Individu", - "PARAMETER_GROUP_TAG_ID_LABELS": "Référentiel > Group de paramètre > Étiquetage (codes)", + "PARAMETER_GROUP_TAG_ID_LABELS": "Référentiel > Ensemble de paramètre > Étiquetage (codes)", "PARAMETER_GROUP_AGE_LABELS": "Référentiel > Ensemble de paramètre > Âge (codes)", "PARAMETER_GROUP_SEX_LABELS": "Référentiel > Ensemble de paramètre > Sexe (codes)", "PARAMETER_GROUP_WEIGHT_LABELS": "Référentiel > Ensemble de paramètre > Poids (codes)", @@ -2863,7 +2865,7 @@ "TITLE": "Ichtyomètre Bluetooth", "SETTINGS": { "DEVICES": "Ichtyomètre > Appareil(s) connu(s)", - "AUTO_DISCONNECT": "Ichtyomètre: Déconnection auto ?", + "AUTO_DISCONNECT": "Ichtyomètre > Déconnexion auto ?", "AUTO_DISCONNECT_ENUM": { "-1": "Jamais", "60000": "Après 1 min", diff --git a/src/assets/manifest.json b/src/assets/manifest.json index f7ebef1b5..7e5ee1601 100644 --- a/src/assets/manifest.json +++ b/src/assets/manifest.json @@ -2,7 +2,7 @@ "name": "SUMARiS", "short_name": "SUMARiS", "manifest_version": 1, - "version": "2.6.1", + "version": "2.7.0", "default_locale": "fr", "description": "Data collection tool for fisheries monitoring", "icons": [{