Unverified Commit 73f441cd authored by Benaissa BENARBIA's avatar Benaissa BENARBIA Committed by GitHub
Browse files

[Vas] Vas bugs list : 7516,8095,8288,8431,8510,8723,8737,8741,8754 (#511)



* Correct start_date and end_date filter issue

* [VAS] Bug 8727 : Sorting acquisitionInformation in accession register table

* fixe ingest status issue

* correct download button color

* correct Rules list issue

* add delete icon to referential applications

* add new orderByStatus behaviour

* correct external param issues

* correct dates filters

* correct GTE and LTE symbol

* add more correction on external params profile

* add Mulish style to portal app

* Revert "[VAS] Bug 8727 : Sorting acquisitionInformation in accession register table"

This reverts commit e4ada608c379b7f52e799514276b384d6e96f94e.

* fix rebase error

Co-authored-by: default avataroussamasic <oussamazerouali42@gmail.com>
Co-authored-by: default avatarPassam KASSEM <passam.kassem@focati-solutions.com>
parent cd95dd1d
......@@ -157,11 +157,9 @@ public class ArchiveSearchConsts {
/* Query fields */
public static final String IDENTIFIER = "Identifier";
public static final String UNIT_TYPE = "#unitType";
public static final String START_DATE = "StartDate";
public static final String PRODUCER_SERVICE = "#originating_agency";
public static final String GUID = "#id";
public static final String UNITS_UPS = "#allunitups";
public static final String END_DATE = "EndDate";
public static final String TITLE_OR_DESCRIPTION = "TITLE_OR_DESCRIPTION";
public static final String ELIMINATION_TECHNICAL_ID = "ELIMINATION_TECHNICAL_ID";
public static final String ELIMINATION_GUID = "#elimination.OperationId";
......@@ -182,6 +180,10 @@ public class ArchiveSearchConsts {
public static final String TITLE_CRITERIA = "TITLE";
public static final String DESCRIPTION_CRITERIA = "DESCRIPTION";
/* StartDate and EndDate Query fields */
public static final String START_DATE = "StartDate";
public static final String START_DATE_CRITERIA = "START_DATE";
public static final String END_DATE = "EndDate";
public static final String END_DATE_CRITERIA = "END_DATE";
}
......@@ -102,6 +102,12 @@ public class VitamQueryHelper {
final List<String> searchValues)
throws InvalidCreateOperationException {
BooleanQuery subQueryAnd = and();
String searchCriteria = ArchiveSearchConsts.START_DATE_CRITERIA.equals(criteria) ?
ArchiveSearchConsts.START_DATE :
(ArchiveSearchConsts.END_DATE_CRITERIA.equals(criteria) ?
ArchiveSearchConsts.END_DATE : null);
LOGGER.info("The search criteria Date is {} ", searchCriteria);
if (!CollectionUtils.isEmpty(searchValues)) {
if (searchValues.size() > 2) {
throw new IllegalArgumentException("criteria date should not contains more than 2 values");
......@@ -113,29 +119,29 @@ public class VitamQueryHelper {
.withMinute(0).withSecond(0).withNano(0);
subQueryAnd.add(VitamQueryHelper
.buildSubQueryByOperator(criteria, ArchiveSearchConsts.ONLY_DATE_FRENCH_FORMATER.format(beginDate),
.buildSubQueryByOperator(searchCriteria, ArchiveSearchConsts.ONLY_DATE_FRENCH_FORMATER.format(beginDate.plusDays(1)),
ArchiveSearchConsts.CriteriaOperators.EQ));
} else {
LocalDateTime firstDate =
LocalDateTime.parse(searchValues.get(0), ArchiveSearchConsts.ISO_FRENCH_FORMATER);
LocalDateTime secondDate =
LocalDateTime.parse(searchValues.get(1), ArchiveSearchConsts.ISO_FRENCH_FORMATER);
subQueryAnd.add(VitamQueryHelper.buildSubQueryByOperator(criteria,
ArchiveSearchConsts.ONLY_DATE_FRENCH_FORMATER
.format(firstDate.isAfter(secondDate) ? secondDate : firstDate),
ArchiveSearchConsts.CriteriaOperators.GTE));
subQueryAnd.add(VitamQueryHelper.buildSubQueryByOperator(criteria,
ArchiveSearchConsts.ONLY_DATE_FRENCH_FORMATER
.format(firstDate.isAfter(secondDate) ? firstDate : secondDate),
ArchiveSearchConsts.CriteriaOperators.LTE));
subQueryAnd.add(VitamQueryHelper.buildSubQueryByOperator(searchCriteria,
ArchiveSearchConsts.ONLY_DATE_FRENCH_FORMATER
.format(firstDate.isAfter(secondDate) ? secondDate.plusDays(1) : firstDate.plusDays(1)),
ArchiveSearchConsts.CriteriaOperators.GTE));
subQueryAnd.add(VitamQueryHelper.buildSubQueryByOperator(searchCriteria,
ArchiveSearchConsts.ONLY_DATE_FRENCH_FORMATER
.format(firstDate.isAfter(secondDate) ? firstDate.plusDays(1) : secondDate.plusDays(1)),
ArchiveSearchConsts.CriteriaOperators.LTE));
}
}
mainQuery.add(subQueryAnd);
}
public static Query buildSubQueryByOperator(String searchKey, String value,
ArchiveSearchConsts.CriteriaOperators operator)
throws InvalidCreateOperationException {
......
......@@ -59,12 +59,7 @@ public class ArchivesSearchFieldsQueryBuilderService implements IArchivesSearchA
LOGGER.error("Field not mapped correctly " + searchCriteria.getCriteria());
throw new IllegalArgumentException("Field not mapped correctly ");
}
if (ArchiveSearchConsts.CriteriaDataType.DATE.name().equals(searchCriteria.getDataType())) {
VitamQueryHelper
.addDatesCriteriaToQuery(queryToFill, searchCriteria.getCriteria(),
searchCriteria.getValues().stream().map(value -> value.getValue()).collect(
Collectors.toList()));
} else if (ArchiveSearchConsts.TITLE_OR_DESCRIPTION.equals(searchCriteria.getCriteria())) {
if (ArchiveSearchConsts.TITLE_OR_DESCRIPTION.equals(searchCriteria.getCriteria())) {
queryToFill.add(buildTitleAndDescriptionQuery(
searchCriteria.getValues().stream().map(value -> value.getValue()).collect(
Collectors.toList()),
......
......@@ -697,4 +697,4 @@ button, textarea, input {
height: 28px;
object-fit: contain; }
/*# sourceMappingURL=../../../../../target/cas.css.map */
\ No newline at end of file
/*# sourceMappingURL=../../../../../target/cas.css.map */
......@@ -37,17 +37,17 @@
import { Id } from '../id.interface';
export interface AccessContract extends Id {
tenant: number;
version: number;
name: string;
identifier: string;
description: string;
status: string;
writingPermission: boolean;
everyOriginatingAgency: boolean;
everyDataObjectVersion: boolean;
creationDate: string;
lastUpdate: string;
activationDate: string;
rootUnits: string[];
tenant: number;
version: number;
name: string;
identifier: string;
description: string;
status: string;
writingPermission: boolean;
everyOriginatingAgency: boolean;
everyDataObjectVersion: boolean;
creationDate: string;
lastUpdate: string;
activationDate: string;
rootUnits: string[];
}
.status-badge-green {
@include status-badge;
@include status-badge;
&:after {
background-color: $green;
border: solid 2px $white;
}
&:after {
background-color: $green;
border: solid 2px $white;
}
&.status-badge-mini {
@include status-badge-mini;
}
&.status-badge-mini {
@include status-badge-mini;
}
}
.status-badge-red {
@include status-badge;
@include status-badge;
&:after {
background-color: $red;
border: solid 2px $white;
}
&:after {
background-color: $red;
border: solid 2px $white;
}
&.status-badge-mini {
@include status-badge-mini;
}
&.status-badge-mini {
@include status-badge-mini;
}
}
.status-badge-orange {
@include status-badge;
@include status-badge;
&:after {
background-color: $mustard-yellow;
border: solid 2px $white;
}
&:after {
background-color: $mustard-yellow;
border: solid 2px $white;
}
&.status-badge-mini {
@include status-badge-mini;
}
&.status-badge-mini {
@include status-badge-mini;
}
}
.status-badge-grey {
@include status-badge;
@include status-badge;
&:after {
background-color: $light-grey;
border: solid 2px $white;
}
&:after {
background-color: $light-grey;
border: solid 2px $white;
}
&.status-badge-mini {
@include status-badge-mini;
}
&.status-badge-mini {
@include status-badge-mini;
}
}
.status-badge-dark-grey {
@include status-badge;
@include status-badge;
&:after {
background-color: #dadada;
border: solid 2px $white;
}
&:after {
background-color: #dadada;
border: solid 2px $white;
}
&.status-badge-mini {
@include status-badge-mini;
}
&.status-badge-mini {
@include status-badge-mini;
}
}
.status-badge-icon-cross {
.status-badge-black {
@include status-badge;
&:after {
border: none;
font-family: 'vitamui-icon';
content: '\ea0f';
font-size: 8px;
line-height: 8px;
color: $white;
&:after {
background-color: $black;
border: solid 2px $white;
}
}
&.status-badge-mini {
@include status-badge-mini;
}
}
.status-badge-icon-cross {
&:after {
border: none;
font-family: 'vitamui-icon';
content: '\ea0f';
font-size: 8px;
line-height: 8px;
color: $white;
}
}
......@@ -101,6 +101,7 @@
<glyph unicode="&#xe95b;" d="M201.5 61.002c-21.459 0-42.436 6.362-60.279 18.285-17.843 11.92-31.749 28.867-39.962 48.691-8.212 19.827-10.361 41.642-6.174 62.691 4.187 21.046 14.52 40.378 29.694 55.552s34.507 25.507 55.554 29.693c21.047 4.189 42.862 2.038 62.688-6.173s36.771-22.118 48.693-39.962c11.922-17.843 18.286-38.819 18.286-60.278-0.031-28.768-11.472-56.346-31.813-76.688s-47.92-31.782-76.687-31.811z" />
<glyph unicode="&#xe95c;" d="M496 61.002c-21.459 0-42.435 6.362-60.278 18.285-17.843 11.92-31.75 28.867-39.962 48.691-8.214 19.827-10.362 41.642-6.176 62.691 4.189 21.046 14.522 40.378 29.696 55.552s34.506 25.507 55.552 29.693c21.046 4.189 42.864 2.038 62.688-6.173 19.827-8.211 36.771-22.118 48.694-39.962s18.285-38.819 18.285-60.278c-0.029-28.768-11.472-56.346-31.811-76.688-20.342-20.342-47.92-31.782-76.688-31.811z" />
<glyph unicode="&#xe95d;" d="M790.499 61.002c-21.459 0-42.435 6.362-60.278 18.285-17.843 11.92-31.75 28.867-39.962 48.691-8.211 19.827-10.362 41.642-6.173 62.691 4.186 21.046 14.518 40.378 29.693 55.552s34.506 25.507 55.552 29.693c21.050 4.189 42.864 2.038 62.691-6.173 19.824-8.211 36.771-22.118 48.691-39.962 11.923-17.843 18.285-38.819 18.285-60.278-0.029-28.768-11.469-56.346-31.811-76.688s-47.92-31.782-76.688-31.811z" />
<glyph unicode="&#xe9ac;" glyph-name="bin" d="M128 640v-640c0-35.2 28.8-64 64-64h576c35.2 0 64 28.8 64 64v640h-704zM320 64h-64v448h64v-448zM448 64h-64v448h64v-448zM576 64h-64v448h64v-448zM704 64h-64v448h64v-448zM848 832h-208v80c0 26.4-21.6 48-48 48h-224c-26.4 0-48-21.6-48-48v-80h-208c-26.4 0-48-21.6-48-48v-80h832v80c0 26.4-21.6 48-48 48zM576 832h-192v63.198h192v-63.198z" />
<glyph unicode="&#xea0f;" glyph-name="cross" d="M1014.662 137.34c-0.004 0.004-0.008 0.008-0.012 0.010l-310.644 310.65 310.644 310.65c0.004 0.004 0.008 0.006 0.012 0.010 3.344 3.346 5.762 7.254 7.312 11.416 4.246 11.376 1.824 24.682-7.324 33.83l-146.746 146.746c-9.148 9.146-22.45 11.566-33.828 7.32-4.16-1.55-8.070-3.968-11.418-7.31 0-0.004-0.004-0.006-0.008-0.010l-310.648-310.652-310.648 310.65c-0.004 0.004-0.006 0.006-0.010 0.010-3.346 3.342-7.254 5.76-11.414 7.31-11.38 4.248-24.682 1.826-33.83-7.32l-146.748-146.748c-9.148-9.148-11.568-22.452-7.322-33.828 1.552-4.16 3.97-8.072 7.312-11.416 0.004-0.002 0.006-0.006 0.010-0.010l310.65-310.648-310.65-310.652c-0.002-0.004-0.006-0.006-0.008-0.010-3.342-3.346-5.76-7.254-7.314-11.414-4.248-11.376-1.826-24.682 7.322-33.83l146.748-146.746c9.15-9.148 22.452-11.568 33.83-7.322 4.16 1.552 8.070 3.97 11.416 7.312 0.002 0.004 0.006 0.006 0.010 0.010l310.648 310.65 310.648-310.65c0.004-0.002 0.008-0.006 0.012-0.008 3.348-3.344 7.254-5.762 11.414-7.314 11.378-4.246 24.684-1.826 33.828 7.322l146.746 146.748c9.148 9.148 11.57 22.454 7.324 33.83-1.552 4.16-3.97 8.068-7.314 11.414z" />
<glyph unicode="&#xea2e;" glyph-name="loop2" d="M889.68 793.68c-93.608 102.216-228.154 166.32-377.68 166.32-282.77 0-512-229.23-512-512h96c0 229.75 186.25 416 416 416 123.020 0 233.542-53.418 309.696-138.306l-149.696-149.694h352v352l-134.32-134.32zM928 448c0-229.75-186.25-416-416-416-123.020 0-233.542 53.418-309.694 138.306l149.694 149.694h-352v-352l134.32 134.32c93.608-102.216 228.154-166.32 377.68-166.32 282.77 0 512 229.23 512 512h-96z" />
<glyph unicode="&#xea4b;" glyph-name="add" d="M810.667 405.333h-256v-256h-85.333v256h-256v85.333h256v256h85.333v-256h256v-85.333z" />
......
......@@ -773,3 +773,7 @@ i.vitamui-icon {
.vitamui-icon-radio-checked:before {
content: "\ea78";
}
.vitamui-icon-bin:before {
content: "\e9ac";
}
......@@ -14,10 +14,11 @@
limitations under the License.
*/
$red: #C10000;
$orange: #EC9718;
$green: #27740A;
$mustard-yellow: #FFA610;
$red: #c10000;
$orange: #ec9718;
$green: #27740a;
$mustard-yellow: #ffa610;
$black: black;
/** DEPRECATED colors : Use color chart with declinations var(--vitamui-grey-XXX) **/
$charcoal-grey-two: #474d4a;
......@@ -28,7 +29,7 @@ $pale-grey: #f7f8fb;
$dark-grey: #4a4a4a;
$warm-grey: #979797;
$warm-grey-two: #999999;
$light-grey: #9D9D9D;
$light-grey: #9d9d9d;
$greyish-two: #a6a6a6;
$greyish: #b7b7b7;
$white-four: #d8d8d8;
......
......@@ -141,12 +141,12 @@
<div class="row">
<div class="col-12">
<button
class="btn secondary download-btn"
class="btn primary download-btn"
[disabled]="archiveUnit['#object'] == null"
(click)="onDownloadObjectFromUnit(archiveUnit)"
>
<i class="vitamui-icon vitamui-icon-deposit"></i>
<span>{{ 'ARCHIVE_SEARCH.ARCHIVE_UNIT_PREVIEW.FIELDS.DOWNLOAD_DOC' | translate }}</span>
<i class="vitamui-icon vitamui-icon-deposit"></i>
</button>
</div>
</div>
......
import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';
import { Unit } from '../models/unit.interface';
import { HttpHeaders } from '@angular/common/http';
import { ArchiveService } from '../archive.service';
import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Observable } from 'rxjs';
import { ArchiveService } from '../archive.service';
import { Unit } from '../models/unit.interface';
@Component({
selector: 'app-archive-preview',
......@@ -35,10 +35,10 @@ export class ArchivePreviewComponent implements OnInit, OnChanges {
}
ngOnChanges(changes: SimpleChanges): void {
if (changes['archiveUnit'].firstChange) {
if (changes.archiveUnit.firstChange) {
return;
}
if (changes['archiveUnit'].currentValue['#id'] !== changes['archiveUnit'].previousValue['#id']) {
if (changes.archiveUnit.currentValue['#id'] !== changes.archiveUnit.previousValue['#id']) {
this.uaPath$ = this.archiveService.buildArchiveUnitPath(this.archiveUnit, this.accessContract);
}
this.fullPath = false;
......
......@@ -118,32 +118,37 @@
>
{{ 'ARCHIVE_SEARCH.CRITERIA_CATEGORY.APPRAISAL_RULE' | translate }}
</button>
<button mat-menu-item class="btn-new-save" (click)="addCriteriaCategory('DUC')" [disabled]="isCategoryAdded('DUC')">
<button mat-menu-item class="btn-new-save" (click)="addCriteriaCategory('DUC')" [disabled]="isCategoryAdded('DUC') || true">
{{ 'ARCHIVE_SEARCH.CRITERIA_CATEGORY.DUC' | translate }}
</button>
<button
mat-menu-item
class="btn-new-save"
(click)="addCriteriaCategory('COMMUNICABILITY')"
[disabled]="isCategoryAdded('COMMUNICABILITY')"
[disabled]="isCategoryAdded('COMMUNICABILITY') || true"
>
{{ 'ARCHIVE_SEARCH.CRITERIA_CATEGORY.COMMUNICABILITY' | translate }}
</button>
<button mat-menu-item class="btn-new-save" (click)="addCriteriaCategory('REUSING')" [disabled]="isCategoryAdded('REUSING')">
<button mat-menu-item class="btn-new-save" (click)="addCriteriaCategory('REUSING')" [disabled]="isCategoryAdded('REUSING') || true">
{{ 'ARCHIVE_SEARCH.CRITERIA_CATEGORY.REUSING' | translate }}
</button>
<button mat-menu-item class="btn-new-save" (click)="addCriteriaCategory('DIFFUSION')" [disabled]="isCategoryAdded('DIFFUSION')">
<button
mat-menu-item
class="btn-new-save"
(click)="addCriteriaCategory('DIFFUSION')"
[disabled]="isCategoryAdded('DIFFUSION') || true"
>
{{ 'ARCHIVE_SEARCH.CRITERIA_CATEGORY.DIFFUSION' | translate }}
</button>
<button
mat-menu-item
class="btn-new-save"
(click)="addCriteriaCategory('CLASSIFICATION')"
[disabled]="isCategoryAdded('CLASSIFICATION')"
[disabled]="isCategoryAdded('CLASSIFICATION') || true"
>
{{ 'ARCHIVE_SEARCH.CRITERIA_CATEGORY.CLASSIFICATION' | translate }}
</button>
<button mat-menu-item class="btn-new-save" (click)="addCriteriaCategory('GEL')" [disabled]="isCategoryAdded('GEL')">
<button mat-menu-item class="btn-new-save" (click)="addCriteriaCategory('GEL')" [disabled]="isCategoryAdded('GEL') || true">
{{ 'ARCHIVE_SEARCH.CRITERIA_CATEGORY.GEL' | translate }}
</button>
</mat-menu>
......
......@@ -22,11 +22,10 @@
*ngIf="!simpleCriteriaForm.get('beginDt').value; else showBeginDt"
(click)="pickerBegin.open()"
class="search-date-label"
>{{ 'ARCHIVE_SEARCH.SEARCH_CRITERIA_FILTER.FIELDS.START_DATE' | translate }}</span
>{{ 'ARCHIVE_SEARCH.SEARCH_CRITERIA_FILTER.FIELDS.START_DATE_SEARCH' | translate }}</span
>
<ng-template #showBeginDt
><span
(click)="pickerBegin.open()">{{ simpleCriteriaForm.get('beginDt').value | date: 'dd/MM/yyyy' }} </span>
><span (click)="pickerBegin.open()">{{ simpleCriteriaForm.get('beginDt').value | date: 'dd/MM/yyyy' }} </span>
</ng-template>
<input
class="hidden"
......@@ -51,12 +50,11 @@
</div>
<div class="col-4 form-control">
<div class="vitamui-input" (click)="pickerEnd.open()">
<span *ngIf="!simpleCriteriaForm.get('endDt').value; else showEndDt" (click)="pickerEnd.open()"
class="search-date-label">{{
'ARCHIVE_SEARCH.SEARCH_CRITERIA_FILTER.FIELDS.END_DATE' | translate
<span *ngIf="!simpleCriteriaForm.get('endDt').value; else showEndDt" (click)="pickerEnd.open()" class="search-date-label">{{
'ARCHIVE_SEARCH.SEARCH_CRITERIA_FILTER.FIELDS.END_DATE_SEARCH' | translate
}}</span>
<ng-template #showEndDt
><span (click)="pickerEnd.open()">{{ simpleCriteriaForm.get('endDt').value | date: 'dd/MM/yyyy' }} </span>
><span (click)="pickerEnd.open()">{{ simpleCriteriaForm.get('endDt').value | date: 'dd/MM/yyyy' }} </span>
</ng-template>
<input
class="hidden"
......@@ -135,7 +133,7 @@
matTooltip="{{ ontology?.Value }}"
matTooltipClass="vitamui-tooltip"
[matTooltipShowDelay]="300"
>{{ ontology.Label }}
>{{ ontology.Label }}
</mat-option>
</ng-container>
</mat-select>
......@@ -183,11 +181,11 @@
*ngIf="!simpleCriteriaForm.get('otherCriteriaValue').value; else showOtherCriteria"
(click)="pickerOtherCriteria.open()"
class="search-date-label"
>{{ selectedValueOntolonogy }}</span
>{{ selectedValueOntolonogy }}</span
>
<ng-template #showOtherCriteria
><span (click)="pickerOtherCriteria.open()"
>{{ simpleCriteriaForm.get('otherCriteriaValue').value | date: 'dd/MM/yyyy' }}
><span (click)="pickerOtherCriteria.open()"
>{{ simpleCriteriaForm.get('otherCriteriaValue').value | date: 'dd/MM/yyyy' }}
</span>
</ng-template>
<input
......
......@@ -169,7 +169,7 @@ export class SimpleCriteriaSearchComponent implements OnInit {
{ value: this.simpleCriteriaForm.value.beginDt, id: this.simpleCriteriaForm.value.beginDt },
this.simpleCriteriaForm.value.beginDt,
true,
'EQ',
'GTE',
false,
'DATE'
);
......@@ -180,7 +180,7 @@ export class SimpleCriteriaSearchComponent implements OnInit {
{ value: this.simpleCriteriaForm.value.endDt, id: this.simpleCriteriaForm.value.endDt },
this.simpleCriteriaForm.value.endDt,
true,
'EQ',
'LTE',
false,
'DATE'
);
......@@ -208,7 +208,7 @@ export class SimpleCriteriaSearchComponent implements OnInit {
);
return true;
} else if (formData.guid) {
var splittedGuids = formData.guid.split(',');
let splittedGuids = formData.guid.split(',');
splittedGuids.forEach((guidElt: string) => {
if (guidElt && guidElt.trim() !== '') {
this.addCriteria('GUID', { value: guidElt.trim(), id: guidElt.trim() }, guidElt.trim(), true, 'EQ', false, 'STRING');
......
......@@ -82,8 +82,10 @@
"TITLE_OR_DESCRIPTION": "Title or Description",
"NODE": "Node",
"TITLE": "Title",
"START_DATE": "Start date",
"END_DATE": "End date",
"START_DATE": "Start date ≥",
"END_DATE": "End date ≤",
"START_DATE_SEARCH": "Start date",
"END_DATE_SEARCH": "End date",
"DESCRIPTION": "Description",
"GUID": "Guid (s)",
"GUIDS_SEPARATED": "Guid separated by comma",
......
......@@ -88,8 +88,10 @@
"TITLE_OR_DESCRIPTION": "Intitulé ou Description",
"NODE": "Position",
"TITLE": "Intitulé",
"START_DATE": "Date de début",
"END_DATE": "Date de fin",
"START_DATE": "Date de début ≥",
"END_DATE": "Date de fin ≤",
"START_DATE_SEARCH": "Date de début",
"END_DATE_SEARCH": "Date de fin",
"DESCRIPTION": "Description",
"GUID": "Identifiant(s) technique(s)",
"GUIDS_SEPARATED": "Identifiants séparés par des virgules",
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment