diff --git a/src/main/java/fr/inra/oresing/rest/OreSiResources.java b/src/main/java/fr/inra/oresing/rest/OreSiResources.java index c4355841efc0d7a4f03fe8c674ddabb22f52c2c2..1402b6244eb65e4ccd6c026855fc69b5db305315 100644 --- a/src/main/java/fr/inra/oresing/rest/OreSiResources.java +++ b/src/main/java/fr/inra/oresing/rest/OreSiResources.java @@ -322,7 +322,7 @@ public class OreSiResources { String variableComponentKey = referenceCheckersByVariableComponentKey.getKey(); ReferenceLineChecker referenceLineChecker = (ReferenceLineChecker) referenceCheckersByVariableComponentKey.getValue(); for (Map.Entry<Ltree, UUID> ltreeUUIDEntry : referenceLineChecker.getReferenceValues().entrySet()) { - + // TODO renvois null et je ne vois pas pourquoi... LV final ReferenceValue referenceValue = requiredreferencesValues.getOrDefault(ltreeUUIDEntry.getKey(), List.of()) .stream() .findFirst().orElse(null); diff --git a/ui/src/views/datatype/DataTypeTableView.vue b/ui/src/views/datatype/DataTypeTableView.vue index 254ec61ee61e574283adb749e52f072039c01612..ec4f3481eb0764c4211ca9be0742f3a6f4becfcb 100644 --- a/ui/src/views/datatype/DataTypeTableView.vue +++ b/ui/src/views/datatype/DataTypeTableView.vue @@ -667,6 +667,7 @@ export default class DataTypeTableView extends Vue { params ); refvalues = reference.referenceValues[0].values; + console.log(refvalues) } const data = Object.entries(refvalues) .map((entry) => ({ colonne: entry[0], valeur: entry[1] })) diff --git a/ui/src/views/datatype/DataTypesRepositoryView.vue b/ui/src/views/datatype/DataTypesRepositoryView.vue index 3efe3417751f52730e48e567a57dae73dfeee0f5..5085619716646bf82d10a23c757f0695157c782e 100644 --- a/ui/src/views/datatype/DataTypesRepositoryView.vue +++ b/ui/src/views/datatype/DataTypesRepositoryView.vue @@ -51,18 +51,18 @@ {{ this.requiredAuthorizationsObject ? Object.entries(this.requiredAuthorizationsObject) - .filter((e) => e[1]) - .map( - (e) => - internationalisationService.getLocaleforPath( + .filter((e) => e[1]) + .map( + (e) => + internationalisationService.getLocaleforPath( application, getAuthorizationScopePath(e[0]), e[0] - ) + - " : " + - e[1] - ) - .join(", ") + ) + + " : " + + e[1] + ) + .join(", ") : "" }} </h1> @@ -199,7 +199,21 @@ {{ currentDataset[0].periode }} + <div v-if="errorsMessages.length" style="margin: 10px"> + <div v-for="msg in errorsMessages" v-bind:key="msg"> + <b-message + :title="$t('message.data-type-config-error')" + type="is-danger" + has-icon + :aria-close-label="$t('message.close')" + class="mt-4 DataTypesManagementView-message" + > + <span v-html="msg"/> + </b-message> + </div> + </div> </caption> + <tr> <th align>{{ $t("dataTypesRepository.table-file-data-id") }}</th> <th align>{{ $t("dataTypesRepository.table-file-data-size") }}</th> @@ -221,7 +235,7 @@ :aria-describedby="dataset.id" tabindex="0" @keypress.enter="changeCss(dataset.id)" - >{{ dataset.id.slice(0, 8) }}</a + >{{ dataset.id.slice(0, 8) }}</a > </b-tooltip> </td> @@ -281,9 +295,10 @@ import { InternationalisationService } from "@/services/InternationalisationServ import { LOCAL_STORAGE_LANG } from "@/services/Fetcher"; import DropDownMenu from "@/components/common/DropDownMenu"; import moment from "moment"; +import {HttpStatusCodes} from "@/utils/HttpUtils"; @Component({ - components: { DropDownMenu, CollapsibleTree, PageView, SubMenu }, + components: {DropDownMenu, CollapsibleTree, PageView, SubMenu}, }) export default class DataTypesRepositoryView extends Vue { @Prop() applicationName; @@ -315,6 +330,7 @@ export default class DataTypesRepositoryView extends Vue { comment = ""; currentDataset = null; repository = {}; + errorsMessages = []; mounted() { this.$on("authorizationChanged", this.updateDatasets); @@ -336,7 +352,8 @@ export default class DataTypesRepositoryView extends Vue { this.subMenuPaths = [ new SubMenuPath( this.dataTypeId.toLowerCase(), - () => {}, + () => { + }, () => this.$router.push(prevPath) ), ]; @@ -522,13 +539,11 @@ export default class DataTypesRepositoryView extends Vue { } parseDate(date) { - let date1 = moment(date, ["DD-MM-YYYY", "YYYY-MM-DD"]).toDate(); - return date1; + return moment(date, "DD/MM/YYYY").toDate(); } formatDate(date) { - let date1 = moment(date).format("DD/MM/YYYY"); - return date1; + return moment(date).format("DD/MM/YYYY"); } periodeToString(dataset) { @@ -559,8 +574,14 @@ export default class DataTypesRepositoryView extends Vue { new BinaryFileDataset( this.dataTypeId, this.selected.requiredAuthorizations, - moment(this.startDate).format("YYYY-MM-DD HH:mm:ss"), - moment(this.endDate).format("YYYY-MM-DD HH:mm:ss"), + /(.{10})T(.{8}).*/ + .exec(new Date(this.startDate).toISOString()) + .filter((a, i) => i !== 0) + .join(" "), + /(.{10})T(.{8}).*/ + .exec(new Date(this.endDate).toISOString()) + .filter((a, i) => i !== 0) + .join(" "), this.comment ), false @@ -571,12 +592,12 @@ export default class DataTypesRepositoryView extends Vue { this.file, fileOrId ); - console.log(fileOrId); this.$emit("uploaded", uuid); } } async publish(dataset, pusblished) { + this.errorsMessages = []; dataset.params.published = pusblished; let requiredAuthorizations = dataset.params.binaryFiledataset.requiredAuthorizations; requiredAuthorizations = Object.keys(requiredAuthorizations).reduce(function (acc, key) { @@ -587,13 +608,53 @@ export default class DataTypesRepositoryView extends Vue { dataset.params.binaryFiledataset.requiredAuthorizations = requiredAuthorizations; console.log("binaryFiledataset", dataset.params.binaryFiledataset); var fileOrId = new FileOrUUID(dataset.id, dataset.params.binaryFiledataset, pusblished); - var uuid = await this.dataService.addData( - this.applicationName, - this.dataTypeId, - null, - fileOrId - ); - this.$emit("published", uuid.fileId); + try { + var uuid = await this.dataService.addData( + this.applicationName, + this.dataTypeId, + null, + fileOrId + ); + this.$emit("published", uuid.fileId); + this.alertService.toastSuccess(this.$t("alert.data-updated")); + } catch (error) { + this.checkMessageErrors(error); + } + } + + checkMessageErrors(error) { + let message = []; + if (error.httpResponseCode === HttpStatusCodes.BAD_REQUEST) { + if (error.content != null) { + this.errorsList = []; + error.content.then((value) => { + for (let i = 0; i < value.length; i++) { + if (message.length > 0) { + if (JSON.stringify(value[i]) !== JSON.stringify(value[i - message.length])) { + console.log(message) + this.errorsList.push(value[i]); + } + for (let j = 0; j < message.length; j++) { + if (!message.includes(value[i].validationCheckResult.message)) { + message.push(value[i].validationCheckResult.message); + } + } + } else { + message.push(value[i].validationCheckResult.message); + this.errorsList.push(value[i]); + } + } + console.log(this.errorsList) + if (this.errorsList.length !== 0) { + this.errorsMessages = this.errorsService.getCsvErrorsMessages(this.errorsList); + } else { + this.errorsMessages = this.errorsService.getErrorsMessages(error); + } + }); + } + } else { + this.alertService.toastServerError(error); + } } selectAuthorization(key, event) { @@ -685,7 +746,7 @@ export default class DataTypesRepositoryView extends Vue { var previousKeySplit = currentPath ? currentPath.split(".") : []; var keys = referenceValue.hierarchicalKey.split("."); var references = referenceValue.hierarchicalReference.split("."); - if (previousKeySplit.length == keys.length) { + if (previousKeySplit.length === keys.length) { continue; } for (let i = 0; i < previousKeySplit.length; i++) { @@ -707,7 +768,7 @@ export default class DataTypesRepositoryView extends Vue { } var completeLocalName = typeof currentCompleteLocalName === "undefined" ? "" : currentCompleteLocalName; - completeLocalName = completeLocalName + (completeLocalName == "" ? "" : ",") + localName; + completeLocalName = completeLocalName + (completeLocalName === "" ? "" : ",") + localName; let authPartition = returnValues[key] || { key, reference, @@ -725,7 +786,7 @@ export default class DataTypesRepositoryView extends Vue { let referenceValueLeaf = auth.referenceValues?.[0]; if ( auth.referenceValues.length <= 1 && - referenceValueLeaf.hierarchicalKey == auth.currentPath + referenceValueLeaf.hierarchicalKey === auth.currentPath ) { returnValues[returnValuesKey] = { ...auth,