Mercurial > gemma
changeset 1905:4f58bada50b8 dev-pdf-generation
merging in default branch
author | Bernhard Reiter <bernhard@intevation.de> |
---|---|
date | Fri, 18 Jan 2019 17:10:16 +0100 |
parents | 7247ac316cb7 (current diff) 931b15be6d7f (diff) |
children | 0322bce42065 |
files | client/package.json client/src/locale/bg_BG/LC_MESSAGES/app.po client/src/locale/de_AT/LC_MESSAGES/app.po client/src/locale/en_GB/LC_MESSAGES/app.po client/src/locale/hr_HR/LC_MESSAGES/app.po client/src/locale/hu_HU/LC_MESSAGES/app.po client/src/locale/ro_RO/LC_MESSAGES/app.po client/src/locale/sk_SK/LC_MESSAGES/app.po schema/search.sql |
diffstat | 57 files changed, 3708 insertions(+), 1266 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Fri Jan 18 16:52:20 2019 +0100 +++ b/.hgignore Fri Jan 18 17:10:16 2019 +0100 @@ -108,3 +108,4 @@ # Import data schema/geonames-import/data/* +translations.json \ No newline at end of file
--- a/client/Makefile Fri Jan 18 16:52:20 2019 +0100 +++ b/client/Makefile Fri Jan 18 17:10:16 2019 +0100 @@ -26,7 +26,7 @@ LOCALE_FILES ?= $(patsubst %,$(OUTPUT_DIR)/locale/%/LC_MESSAGES/app.po,$(LOCALES)) GETTEXT_HTML_SOURCES = $(shell find $(OUTPUT_DIR) -name '*.vue' -o -name '*.html' 2> /dev/null) -GETTEXT_JS_SOURCES = $(shell find $(OUTPUT_DIR) -name '*.vue' -o -name '*.js') +GETTEXT_JS_SOURCES = $(shell find $(OUTPUT_DIR) -name '*.vue' -o -name '*.js' 2> /dev/null) # Makefile Targets .PHONY: clean makemessages translations all @@ -39,11 +39,11 @@ makemessages: $(TEMPLATE_POT) -translations: ./$(OUTPUT_DIR)/locale/translations.json +translations: $(OUTPUT_DIR)/locale/translations.json # Create a main .pot template, then generate .po files for each available language. # Thanx to Systematic: https://github.com/Polyconseil/systematic/blob/866d5a/mk/main.mk#L167-L183 -$(TEMPLATE_POT): $(GETTEXT_HTML_SOURCES) +$(TEMPLATE_POT): $(GETTEXT_HTML_SOURCES) $(GETTEXT_JS_SOURCES) # `dir` is a Makefile built-in expansion function which extracts the directory-part of `$@`. # `$@` is a Makefile automatic variable: the file name of the target of the rule. # => `mkdir -p /tmp/` @@ -66,6 +66,6 @@ msgattrib --no-wrap --no-obsolete -o $$PO_FILE $$PO_FILE; \ done; -$(OUTPUT_DIR)/locale/translations.json: clean $(TEMPLATE_POT) +$(OUTPUT_DIR)/locale/translations.json: $(LOCALE_FILES) mkdir -p $(OUTPUT_DIR) gettext-compile --output $@ $(LOCALE_FILES)
--- a/client/README.md Fri Jan 18 16:52:20 2019 +0100 +++ b/client/README.md Fri Jan 18 17:10:16 2019 +0100 @@ -1,6 +1,3 @@ -N.N -=== - * Install dependencies * Install (`xgettext`) tool (e.g. for Debian xgettext (GNU gettext-tools) 0.19.8.1) @@ -23,6 +20,15 @@ Run webpack-dev-server with `yarn serve` +Hint: if you want to access the dev-server via a tunnel with hot reload, + you'll may need to explicitely set the url the browser has to call + with public. Example: + +```sh +ssh bern@ourdev.intevation.de -L 8180:localhost:8180 +yarn serve --port 8180 --public http://localhost:8180 +``` + * Build `yarn build` builds the production ready assets to `web` folder.
--- a/client/package.json Fri Jan 18 16:52:20 2019 +0100 +++ b/client/package.json Fri Jan 18 17:10:16 2019 +0100 @@ -9,7 +9,6 @@ "private": true, "scripts": { "serve": "make translations && VUE_APP_HGREV=$(hg log -r . --template \"{data|shortdate}-{node|short}\") vue-cli-service serve", - "serve:notranslation": "VUE_APP_HGREV=$(hg log -r . --template \"{data|shortdate}-{node|short}\") vue-cli-service serve", "build": "make translations && VUE_APP_HGREV=$(hg log -r . --template \"{data|shortdate}-{node|short}\") vue-cli-service build", "analyze": "ANALYZE=true vue-cli-service serve", "lint": "vue-cli-service lint",
--- a/client/src/assets/application.scss Fri Jan 18 16:52:20 2019 +0100 +++ b/client/src/assets/application.scss Fri Jan 18 17:10:16 2019 +0100 @@ -28,6 +28,12 @@ $xx-large-offset: 5rem; $color-info: #17a2b8; +::placeholder { + color: #ccc !important; + font-size: smaller; + font-weight: bold; +} + a { color: $color-info; }
--- a/client/src/components/ImportStretches.vue Fri Jan 18 16:52:20 2019 +0100 +++ b/client/src/components/ImportStretches.vue Fri Jan 18 17:10:16 2019 +0100 @@ -2,169 +2,209 @@ <div class="d-flex flex-column mb-3"> <h6 class="mb-0 py-2 px-3 border-bottom d-flex align-items-center"> <font-awesome-icon icon="road" class="mr-2"></font-awesome-icon> - <translate>Define section and stretches</translate> + <translate>Define stretches</translate> </h6> - <div class="ml-3 mr-3"> - <div class="d-flex flex-row justify-content-between"> - <div class="mt-1 w-50 mr-2 text-left"> - <small class="text-muted"> <translate>ID</translate> </small> - <input - id="id" - type="text" - class="form-control" - placeholder="AT_Section_12" - aria-label="id" - v-model="id" - /> - <span class="text-left text-danger"> - <small v-if="!id"> - <translate>Please enter an id</translate> - </small> - </span> - </div> - <div class="mt-1 w-50 ml-2 text-left"> - <small class="text-muted"><translate>Function</translate> </small> - <select v-model="funktion" class="custom-select"> - <option value="section"><translate>Section</translate></option> - <option value="stretch"><translate>Stretch</translate></option> - </select> - <span class="text-left text-danger"> - <small v-if="!funktion"> - <translate>Please enter a function</translate> - </small> - </span> - </div> + <div v-if="!edit" class="mb-3"> + <div class="mt-3 mb-2 mr-3 ml-3 d-flex flex-row border-bottom"> + <div class="header id">id</div> + <div class="header funktion">funktion</div> + <div class="header startrhm">startrhm</div> + <div class="header endrhm">endrhm</div> </div> - <div class="d-flex flex-column justify-content-between"> - <div class="mt-1 text-left"> - <small class="text-muted"> <translate>Start rhm</translate> </small> - <div class="d-flex flex-row"> + <div + class=" mr-3 ml-3 d-flex flex-row" + v-for="stretch in stretches" + :key="stretch.id" + > + <div class="id">{{ stretch.id }}</div> + <div class="funktion">{{ stretch.funktion }}</div> + <div class="startrhm">{{ stretch.startrhm }}</div> + <div class="endrhm">{{ stretch.endrhm }}</div> + </div> + <div class="mt-3" v-if="stretches.length == 0"> + <translate>No results.</translate> + </div> + </div> + <div v-if="edit"> + <div class="ml-3 mr-3"> + <div class="d-flex flex-row justify-content-between"> + <div class="mt-2 w-50 mr-2 text-left"> + <small class="text-muted"> <translate>ID</translate> </small> <input - id="startrhm" + id="id" type="text" class="form-control" - placeholder="e.g. ATXXX00001000000019900" - aria-label="startrhm" - v-model="startrhm" + placeholder="AT_Section_12" + aria-label="id" + v-model="id" /> - <span class="input-group-text"> - <font-awesome-icon - @click="pipetteStart = !pipetteStart" - :class="{ 'text-info': pipetteStart }" - icon="bullseye" - ></font-awesome-icon> + <span class="text-left text-danger"> + <small v-if="idError && !id"> + <translate>Please enter an id</translate> + </small> </span> </div> - <span class="text-left text-danger"> - <small v-if="!startrhm"> - <translate>Please enter a start point</translate> - </small> - </span> + <div class="mt-2 w-50 ml-2 text-left"> + <div> + <small class="text-muted"> + <translate>Countrycode</translate> + </small> + <input + id="countryCode" + type="text" + class="form-control" + placeholder="AT" + aria-label="id" + v-model="countryCode" + /> + <span class="text-left text-danger"> + <small v-if="countryCodeError && !countryCode"> + <translate>Please enter a countrycode </translate> + </small> + </span> + </div> + <div class="w-50 ml-2"></div> + </div> </div> - <div class="mt-1 text-left"> - <small class="text-muted"> <translate>End rhm</translate> </small> - <div class="d-flex flex-row"> - <input - id="endrhm" - type="text" - class="form-control" - placeholder="e.g. ATXXX00001000000019900" - aria-label="endrhm" - v-model="endrhm" - /> - <span class="input-group-text"> - <font-awesome-icon - @click="pipetteEnd = !pipetteEnd" - :class="{ 'text-info': pipetteEnd }" - icon="bullseye" - ></font-awesome-icon> + <div class="d-flex flex-column justify-content-between"> + <div class="mt-2 text-left"> + <small class="text-muted"> <translate>Start rhm</translate> </small> + <div class="d-flex flex-row"> + <input + id="startrhm" + type="text" + class="form-control" + placeholder="e.g. ATXXX00001000000019900" + aria-label="startrhm" + v-model="startrhm" + /> + <span class="input-group-text"> + <font-awesome-icon + @click="togglePipette('start')" + :class="{ 'text-info': pipetteStart }" + icon="bullseye" + ></font-awesome-icon> + </span> + </div> + <span class="text-left text-danger"> + <small v-if="startrhmError && !startrhm"> + <translate>Please enter a start point</translate> + </small> </span> </div> - <span class="text-left text-danger"> - <small v-if="!endrhm"> - <translate>Please enter an end point</translate> - </small> - </span> + <div class="mt-2 text-left"> + <small class="text-muted"> <translate>End rhm</translate> </small> + <div class="d-flex flex-row"> + <input + id="endrhm" + type="text" + class="form-control" + placeholder="e.g. ATXXX00001000000019900" + aria-label="endrhm" + v-model="endrhm" + /> + <span class="input-group-text"> + <font-awesome-icon + @click="togglePipette('end')" + :class="{ 'text-info': pipetteEnd }" + icon="bullseye" + ></font-awesome-icon> + </span> + </div> + <span class="text-left text-danger"> + <small v-if="endrhmError && !endrhm"> + <translate>Please enter an end point</translate> + </small> + </span> + </div> </div> - </div> - <div class="d-flex flex-row justify-content-between"> - <div class="mt-1 mr-2 w-50 text-left"> - <small class="text-muted"> <translate>Object name</translate> </small> - <input - id="objbn" - type="text" - class="form-control" - placeholder="" - aria-label="objbn" - v-model="objbn" - /> - <span class="text-left text-danger"> - <small v-if="!objbn"> - <translate>Please enter an objectname</translate> + <div class="d-flex flex-row justify-content-between"> + <div class="mt-2 mr-2 w-50 text-left"> + <small class="text-muted"> + <translate>Object name</translate> </small> - </span> + <input + id="objbn" + type="text" + class="form-control" + placeholder="" + aria-label="objbn" + v-model="objbn" + /> + <span class="text-left text-danger"> + <small v-if="objbnError && !objbn"> + <translate>Please enter an objectname</translate> + </small> + </span> + </div> + <div class="mt-2 ml-2 w-50 text-left"> + <small class="text-muted"> + <translate>National Object name</translate> + </small> + <input + id="nobjbn" + type="text" + class="form-control" + placeholder="" + aria-label="nobjbn" + v-model="nobjbn" + /> + <span class="text-left text-danger"> + <small v-if="nobjbnError && !nobjbn"> + <translate>Please enter an objectname</translate> + </small> + </span> + </div> </div> - <div class="mt-1 ml-2 w-50 text-left"> - <small class="text-muted"> - <translate>National Object name</translate> - </small> - <input - id="nobjbn" - type="text" - class="form-control" - placeholder="" - aria-label="nobjbn" - v-model="nobjbn" - /> - <span class="text-left text-danger"> - <small v-if="!nobjbn"> - <translate>Please enter an objectname</translate> - </small> - </span> + <div class="d-flex flex-row justify-content-between"> + <div class="mt-2 mr-2 w-50 text-left"> + <small class="text-muted"> <translate>Date info</translate> </small> + <input + id="date_info" + type="date" + class="form-control" + placeholder="date_info" + aria-label="date_info" + v-model="date_info" + /> + <span class="text-left text-danger"> + <small v-if="date_infoError && !date_info"> + <translate>Please enter a date</translate> + </small> + </span> + </div> + <div class="mt-2 ml-2 w-50 text-left"> + <small class="text-muted"> <translate>Source</translate> </small> + <input + id="source" + type="text" + class="form-control" + placeholder="source" + aria-label="source" + v-model="source" + /> + <span class="text-left text-danger"> + <small v-if="sourceError && !source"> + <translate>Please enter a source</translate> + </small> + </span> + </div> </div> </div> - <div class="d-flex flex-row justify-content-between"> - <div class="mt-1 mr-2 w-50 text-left"> - <small class="text-muted"> <translate>Date info</translate> </small> - <input - id="date_info" - type="date" - class="form-control" - placeholder="date_info" - aria-label="date_info" - v-model="date_info" - /> - <span class="text-left text-danger"> - <small v-if="!date_info"> - <translate>Please enter a date</translate> - </small> - </span> - </div> - <div class="mt-1 ml-2 w-50 text-left"> - <small class="text-muted"> <translate>Source</translate> </small> - <input - id="source" - type="text" - class="form-control" - placeholder="source" - aria-label="source" - v-model="source" - /> - <span class="text-left text-danger"> - <small v-if="!source"> - <translate>Please enter a source</translate> - </small> - </span> - </div> + <div class="text-right mt-2 mr-3 mb-3"> + <button @click="edit = false" class="btn btn-warning mr-2">Back</button> + <button + @click="save" + type="submit" + class="shadow-sm btn btn-info submit-button" + > + <translate>Submit</translate> + </button> </div> </div> - <div class="text-right mr-3 mb-3"> - <button - @click="submit" - type="submit" - class="shadow-sm btn btn-info submit-button" - > - <translate>Submit</translate> + <div class="text-right mr-3"> + <button v-if="!edit" @click="startEdit()" class="btn btn-info"> + <translate>New stretch</translate> </button> </div> </div> @@ -184,27 +224,125 @@ * Author(s): * Thomas Junk <thomas.junk@intevation.de> */ -import { mapState } from "vuex"; +import { mapState, mapGetters } from "vuex"; import { displayInfo } from "@/lib/errors.js"; export default { name: "importstretches", data() { return { + edit: false, id: "", funktion: "", startrhm: "", endrhm: "", objbn: "", nobjbn: "", + countryCode: "", date_info: new Date().toISOString().split("T")[0], source: "", pipetteStart: false, - pipetteEnd: false + pipetteEnd: false, + idError: false, + funktionError: false, + startrhmError: false, + endrhmError: false, + objbnError: false, + nobjbnError: false, + date_infoError: false, + sourceError: false, + countryCodeError: false }; }, + mounted() { + this.edit = false; + // uncomment when backend is there + // this.$store.dispatch("imports/loadStretches").catch(error => { + // const { status, data } = error.response; + // displayError({ + // title: this.$gettext("Backend Error"), + // message: `${status}: ${data.message || data}` + // }); + // }); + }, methods: { - submit() { + clean() { + this.id = ""; + this.funktion = ""; + this.startrhm = ""; + this.endrhm = ""; + this.objbn = ""; + this.nobjbn = ""; + this.countryCode = ""; + this.date_info = new Date().toISOString().split("T")[0]; + this.source = ""; + this.pipetteStart = false; + this.pipetteEnd = false; + this.idError = false; + this.funktionError = false; + this.startrhmError = false; + this.endrhmError = false; + this.objbnError = false; + this.nobjbnError = false; + this.date_infoError = false; + this.sourceError = false; + this.countryCodeError = false; + }, + startEdit() { + this.clean(); + this.edit = true; + }, + togglePipette(t) { + if (t === "start") { + this.pipetteStart = !this.pipetteStart; + this.pipetteEnd = false; + } else { + this.pipetteEnd = !this.pipetteEnd; + this.pipetteStart = false; + } + }, + validate() { + const fields = [ + "id", + "funktion", + "startrhm", + "endrhm", + "objbn", + "nobjbn", + "date_info", + "source" + ]; + fields.forEach(field => { + if (!this[field]) { + this[field + "Error"] = true; + } else { + this[field + "Error"] = false; + } + }); + }, + save() { + this.validate(); + const stretch = { + id: this.id, + funktion: this.funktion, + startrhm: this.startrhm, + endrhm: this.endrhm, + objbn: this.objbn, + nobjbn: this.nobjbn, + countryCode: this.countryCode, + date_info: this.date_info, + source: this.source + }; + this.$store.commit("imports/addStretch", stretch); + // uncomment when backend is there + // this.$store.dispatch("imports/addStretch", stretch).catch(error => { + // const { status, data } = error.response; + // displayError({ + // title: this.$gettext("Backend Error"), + // message: `${status}: ${data.message || data}` + // }); + // }); + this.edit = false; displayInfo({ title: this.$gettext("Sections"), message: this.$gettext("Not implemented!") @@ -223,13 +361,37 @@ .replace(/,|\(|\)/g, ""); this.startrhm = this.pipetteStart ? value : this.startrhm; this.endrhm = this.pipetteEnd ? value : this.endrhm; + this.pipetteStart = false; + this.pipetteEnd = false; } } }, computed: { - ...mapState("map", ["identifiedFeatures", "currentMeasurement"]) + ...mapState("map", ["identifiedFeatures", "currentMeasurement"]), + ...mapGetters("user", ["isSysAdmin"]), + ...mapState("imports", ["stretches"]) } }; </script> -<style lang="scss" scoped></style> +<style lang="scss" scoped> +.id { + text-align: left; + width: 25%; +} + +.funktion { + text-align: left; + width: 25%; +} + +.endrhm { + text-align: left; + width: 25%; +} + +.startrhm { + text-align: left; + width: 25%; +} +</style>
--- a/client/src/components/Sidebar.vue Fri Jan 18 16:52:20 2019 +0100 +++ b/client/src/components/Sidebar.vue Fri Jan 18 17:10:16 2019 +0100 @@ -40,6 +40,8 @@ ></font-awesome-icon> <span class="fix-trans-space" v-translate>Staging area</span> </a> + </div> + <div v-if="isSysAdmin"> <a :class="['secondary', { active: isActive('stretches') }]" @click="toggleContextBox('stretches')" @@ -50,10 +52,10 @@ fixed-width icon="road" ></font-awesome-icon> - <span class="fix-trans-space" v-translate - >Define sections and stretches</span - > + <span class="fix-trans-space" v-translate>Define stretches</span> </a> + </div> + <div v-if="isWaterwayAdmin"> <small class="text-muted pl-3"> <translate>Import</translate> </small> <hr class="m-0" /> <router-link to="/importsoundingresults">
--- a/client/src/components/importqueue/Importqueuedetail.vue Fri Jan 18 16:52:20 2019 +0100 +++ b/client/src/components/importqueue/Importqueuedetail.vue Fri Jan 18 17:10:16 2019 +0100 @@ -8,7 +8,7 @@ {{ formatDate(job.enqueued) }} </div> <div @click="showDetails(job.id)" class="kind mt-1 mr-2"> - {{ job.kind }} + {{ job.kind.toUpperCase() }} </div> <div @click="showDetails(job.id)" class="user mt-1 mr-2"> {{ job.user }} @@ -67,7 +67,7 @@ class="detailsrow" > <td class="type"> - <span class="condensed">{{ entry.kind }}</span> + <span class="condensed">{{ entry.kind.toUpperCase() }}</span> </td> <td class="datetime"> <span class="condensed">{{ formatDateTime(entry.time) }}</span>
--- a/client/src/components/importschedule/Importschedule.vue Fri Jan 18 16:52:20 2019 +0100 +++ b/client/src/components/importschedule/Importschedule.vue Fri Jan 18 17:10:16 2019 +0100 @@ -44,7 +44,7 @@ <tbody> <tr v-for="schedule in schedules" :key="schedule.id"> <td>{{ schedule.id }}</td> - <td>{{ schedule.kind }}</td> + <td>{{ schedule.kind.toUpperCase() }}</td> <td>{{ schedule.user }}</td> <td>{{ schedule.cron }}</td> <td>
--- a/client/src/components/importschedule/Importscheduledetail.vue Fri Jan 18 16:52:20 2019 +0100 +++ b/client/src/components/importschedule/Importscheduledetail.vue Fri Jan 18 17:10:16 2019 +0100 @@ -37,12 +37,15 @@ <option :value="$options.IMPORTTYPES.WATERWAYAREA" ><translate>Waterwayarea</translate></option > - <option :value="$options.IMPORTTYPES.FAIRWAYDIMENSIONS" - ><translate>Fairwaydimensions</translate></option + <option :value="$options.IMPORTTYPES.FAIRWAYDIMENSION" + ><translate>Fairwaydimension</translate></option > <option :value="$options.IMPORTTYPES.WATERWAYGAUGES" ><translate>Waterway gauges</translate></option > + <option :value="$options.IMPORTTYPES.DISTANCEMARKSVIRTUAL" + ><translate>Distance Marks Virtual</translate></option + > </select> </div> <div class="flex-column ml-4"> @@ -190,6 +193,116 @@ </div> </div> </div> + <div v-if="import_ == $options.IMPORTTYPES.FAIRWAYDIMENSION"> + <div class="d-flex flex-row"> + <div class="flex-column mt-3 mr-3 w-50"> + <div class="flex-row text-left"> + <small class="text-muted"> <translate>LOS</translate> </small> + </div> + <div class="w-100"> + <select v-model="LOS" class="form-control"> + <option value="1">1</option> + <option value="2">2</option> + <option value="3">3</option> + </select> + </div> + <div v-if="!LOS" class="d-flex flex-row"> + <small + ><translate class="text-danger" + >Please enter a level of service</translate + ></small + > + </div> + </div> + <div class="flex-column mt-3 w-50"> + <div class="flex-row text-left"> + <small class="text-muted"> + <translate>Depth</translate> + </small> + </div> + <div class="d-flex flex-row"> + <input v-model="depth" class="form-control" type="number" /> + <div class="ml-2 my-auto">cm</div> + </div> + <div v-if="!depth" class="d-flex flex-row"> + <small + ><translate class="text-danger" + >Please enter a depth</translate + ></small + > + </div> + </div> + </div> + <div class="d-flex flex-row"> + <div class="flex-column mt-3 mr-3 w-50"> + <div class="flex-row text-left"> + <small class="text-muted"> + <translate>MinWidth</translate> + </small> + </div> + <div class="d-flex flex-row"> + <input + v-model="minWidth" + class="form-control" + type="number" + /> + <div class="ml-2 my-auto"> m</div> + </div> + <div v-if="!minWidth" class="d-flex flex-row"> + <small + ><translate class="text-danger" + >Please enter a minimum width</translate + ></small + > + </div> + </div> + <div class="flex-column mt-3 w-50"> + <div class="flex-row text-left"> + <small class="text-muted"> + <translate>MaxWidth</translate> + </small> + </div> + <div class="d-flex flex-row"> + <input + v-model="maxWidth" + class="form-control" + type="number" + /> + <div class="ml-2 my-auto"> m</div> + </div> + <div v-if="!maxWidth" class="d-flex flex-row"> + <small + ><translate class="text-danger" + >Please enter a maximum width</translate + ></small + > + </div> + </div> + </div> + <div class="d-flex flex-row"> + <div class="flex-column mt-3 mr-3 w-50"> + <div class="flex-row text-left"> + <small class="text-muted"> + <translate>Source orgranization</translate> + </small> + </div> + <div class="w-100"> + <input + v-model="sourceOrganization" + class="form-control" + type="text" + /> + </div> + <div v-if="!sourceOrganization" class="d-flex flex-row"> + <small + ><translate class="text-danger" + >Please enter a source orgranization</translate + ></small + > + </div> + </div> + </div> + </div> <div class="d-flex flex-row"> <div class="flex-column mt-3 mr-4"> <div class="flex-row text-left"> @@ -522,6 +635,7 @@ isCredentialsRequired() { switch (this.import_) { case this.$options.IMPORTTYPES.WATERWAYGAUGES: + case this.$options.IMPORTTYPES.DISTANCEMARKSVIRTUAL: return true; default: return false; @@ -534,8 +648,9 @@ case this.$options.IMPORTTYPES.GAUGEMEASUREMENT: case this.$options.IMPORTTYPES.FAIRWAYAVAILABILITY: case this.$options.IMPORTTYPES.WATERWAYAREA: - case this.$options.IMPORTTYPES.FAIRWAYDIMENSIONS: + case this.$options.IMPORTTYPES.FAIRWAYDIMENSION: case this.$options.IMPORTTYPES.WATERWAYGAUGES: + case this.$options.IMPORTTYPES.DISTANCEMARKSVIRTUAL: return true; default: return false; @@ -545,7 +660,7 @@ switch (this.import_) { case this.$options.IMPORTTYPES.WATERWAYAXIS: case this.$options.IMPORTTYPES.WATERWAYAREA: - case this.$options.IMPORTTYPES.FAIRWAYDIMENSIONS: + case this.$options.IMPORTTYPES.FAIRWAYDIMENSION: return true; default: return false; @@ -555,6 +670,7 @@ switch (this.import_) { case this.$options.IMPORTTYPES.WATERWAYAXIS: case this.$options.IMPORTTYPES.WATERWAYAREA: + case this.$options.IMPORTTYPES.FAIRWAYDIMENSION: return true; default: return false; @@ -604,6 +720,11 @@ this.sortBy = this.currentSchedule.sortBy; this.username = this.currentSchedule.username; this.password = this.currentSchedule.password; + this.LOS = this.currentSchedule.LOS; + this.minWidth = this.currentSchedule.minWidth; + this.maxWidth = this.currentSchedule.maxWidth; + this.depth = this.currentSchedule.depth; + this.sourceOrganization = this.currentSchedule.sourceOrganization; }, isWeekly(cron) { return /0 \d{1,2} \d{1,2} \* \* \d{1}/.test(cron); @@ -640,6 +761,23 @@ data["username"] = this.username; data["password"] = this.password; } + if (this.import_ == this.$options.IMPORTTYPES.FAIRWAYDIMENSION) { + if ( + !this.LOS || + !this.minWidth || + !this.maxWidth || + !this.depth || + !this.sourceOrganization + ) + return; + data["feature-type"] = this.featureType; + data["sort-by"] = this.sortBy; + data["los"] = this.LOS * 1; + data["min-width"] = this.minWidth * 1; + data["max-width"] = this.maxWidth * 1; + data["depth"] = this.depth * 1; + data["source-organization"] = this.sourceOrganization; + } this.triggerActive = false; this.$store .dispatch("imports/triggerImport", { type: this.import_, data }) @@ -694,8 +832,28 @@ } if (this.isCredentialsRequired) { if (!this.username || !this.password) return; - addAttribute(data, { username: this.username }); - addAttribute(data, { password: this.password }); + addAttribute(data, { + username: this.username, + password: this.password + }); + } + if (this.import_ == this.$options.IMPORTTYPES.FAIRWAYDIMENSION) { + if ( + !this.LOS || + !this.minWidth || + !this.maxWidth || + !this.depth || + !this.sourceOrganization + ) + return; + const values = { + los: this.LOS, + depth: this.depth + }; + values["min-width"] = this.minWidth; + values["max-width"] = this.maxWidth; + values["source-organization"] = this.sourceOrganization; + addAttribute(data, values); } if (this.scheduled) data["cron"] = cron; data["kind"] = IMPORTTYPEKIND[this.import_];
--- a/client/src/components/staging/StagingDetail.vue Fri Jan 18 16:52:20 2019 +0100 +++ b/client/src/components/staging/StagingDetail.vue Fri Jan 18 17:10:16 2019 +0100 @@ -3,23 +3,25 @@ <div class="d-flex flex-row"> <div class="mt-auto d-flex flex-row mb-auto small name text-left"> <a - v-if="!isBottleneck(data.kind.toUpperCase())" + v-if="isSoundingResult(data.kind.toUpperCase())" @click="zoomTo()" href="#" >{{ data.summary.bottleneck }}</a > - <span v-else class="text-left" + <span v-if="isBottleneck(data.kind.toUpperCase())" class="text-left" ><translate>Bottlenecks</translate> ({{ data.summary.bottlenecks.length }})</span > + <span v-if="isFairwayDimension(data.kind.toUpperCase())">-</span> </div> <div class="mt-auto mb-auto small text-left type"> {{ data.kind.toUpperCase() }} </div> - <div class="mt-auto mb-auto small text-left date"> + <div v-if="data.summary" class="mt-auto mb-auto small text-left date"> {{ formatSurveyDate(data.summary.date) }} </div> + <div v-else class="mt-auto mb-auto small text-left date">-</div> <div class="mt-auto mb-auto small text-left imported"> {{ formatSurveyDate(data.enqueued.split("T")[0]) }} </div> @@ -248,9 +250,15 @@ }); }); }, + isFairwayDimension(kind) { + return kind === "FD"; + }, isBottleneck(kind) { return kind === "BN"; }, + isSoundingResult(kind) { + return kind === "SR"; + }, formatSurveyDate(date) { return formatSurveyDate(date); },
--- a/client/src/locale/bg_BG/LC_MESSAGES/app.po Fri Jan 18 16:52:20 2019 +0100 +++ b/client/src/locale/bg_BG/LC_MESSAGES/app.po Fri Jan 18 17:10:16 2019 +0100 @@ -7,15 +7,16 @@ msgstr "" "Project-Id-Version: gemmajs 1.99.0-dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-18 16:13+0100\n" -"PO-Revision-Date: 2018-12-05 12:23+0100\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"POT-Creation-Date: 2019-01-17 15:56+0100\n" +"PO-Revision-Date: 2019-01-17 13:37+0000\n" +"Last-Translator: Fadi Abbud <fadi.abbud@intevation.de>\n" +"Language-Team: Bulgarian <https://hosted.weblate.org/projects/gemma/client/bg/>\n" "Language: bg_BG\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.4-dev\n" #: src/components/Pdftool.vue:402 msgid "– printed by:" @@ -37,15 +38,15 @@ msgid "Add User" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:472 +#: src/components/importschedule/Importscheduledetail.vue:585 msgid "April" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:449 +#: src/components/importschedule/Importscheduledetail.vue:562 msgid "at" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:476 +#: src/components/importschedule/Importscheduledetail.vue:589 msgid "August" msgstr "" @@ -77,21 +78,22 @@ #: src/components/importschedule/Importschedule.vue:167 #: src/components/importschedule/Importschedule.vue:176 #: src/components/importschedule/Importschedule.vue:198 -#: src/components/importschedule/Importscheduledetail.vue:656 -#: src/components/importschedule/Importscheduledetail.vue:724 -#: src/components/importschedule/Importscheduledetail.vue:752 +#: src/components/importschedule/Importscheduledetail.vue:794 +#: src/components/importschedule/Importscheduledetail.vue:881 +#: src/components/importschedule/Importscheduledetail.vue:909 #: src/components/staging/StagingDetail.vue:246 #: src/components/usermanagement/Userdetail.vue:304 #: src/components/usermanagement/Userdetail.vue:376 #: src/components/usermanagement/Usermanagement.vue:298 #: src/components/usermanagement/Usermanagement.vue:306 #: src/components/usermanagement/Usermanagement.vue:340 -#: src/components/importschedule/Importscheduledetail.vue:716 -#: src/components/importschedule/Importscheduledetail.vue:744 +#: src/components/importschedule/Importscheduledetail.vue:873 +#: src/components/importschedule/Importscheduledetail.vue:901 msgid "Backend Error" msgstr "" #: src/components/ImportSoundingresults.vue:16 +#, fuzzy msgid "Bottleneck" msgstr "" @@ -128,7 +130,7 @@ msgstr "" #: src/components/Pdftool.vue:18 -msgid "Choose format:" +msgid "Chose format:" msgstr "" #: src/components/fairway/Profiles.vue:64 @@ -149,10 +151,11 @@ msgstr "" #: src/components/usermanagement/Userdetail.vue:33 +#, fuzzy msgid "Country" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:382 +#: src/components/importschedule/Importscheduledetail.vue:495 msgid "Cronstring" msgstr "" @@ -162,19 +165,15 @@ msgid "Date" msgstr "" -#: src/components/ImportStretches.vue:127 +#: src/components/ImportStretches.vue:129 msgid "Date info" msgstr "" -#: src/components/Pdftool.vue:398 -msgid "Date of publication:" -msgstr "" - -#: src/components/importschedule/Importscheduledetail.vue:454 +#: src/components/importschedule/Importscheduledetail.vue:567 msgid "day" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:480 +#: src/components/importschedule/Importscheduledetail.vue:593 msgid "December" msgstr "" @@ -190,6 +189,10 @@ msgid "Deleted import: #" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:219 +msgid "Depth" +msgstr "" + #: src/components/ImportSoundingresults.vue:52 msgid "Depthreference" msgstr "" @@ -204,17 +207,17 @@ #: src/components/importschedule/Importschedule.vue:37 msgid "Email" -msgstr "" +msgstr "E-mail" #: src/components/usermanagement/Userdetail.vue:59 msgid "Email address" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:50 +#: src/components/importschedule/Importscheduledetail.vue:53 msgid "Email Notification" msgstr "" -#: src/components/ImportStretches.vue:64 +#: src/components/ImportStretches.vue:66 msgid "End rhm" msgstr "" @@ -246,7 +249,7 @@ msgid "Errorlog" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:445 +#: src/components/importschedule/Importscheduledetail.vue:558 msgid "Every" msgstr "" @@ -255,14 +258,14 @@ msgstr "" #: src/components/importschedule/Importscheduledetail.vue:40 -msgid "Fairwaydimensions" +msgid "Fairwaydimension" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:155 +#: src/components/importschedule/Importscheduledetail.vue:158 msgid "Featuretype" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:470 +#: src/components/importschedule/Importscheduledetail.vue:583 msgid "February" msgstr "" @@ -270,7 +273,7 @@ msgid "Forgot password" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:464 +#: src/components/importschedule/Importscheduledetail.vue:577 msgid "Friday" msgstr "" @@ -282,11 +285,11 @@ msgid "Gauge measurement" msgstr "" -#: src/components/Pdftool.vue:10 src/components/Pdftool.vue:60 +#: src/components/Pdftool.vue:10 src/components/Pdftool.vue:53 msgid "Generate PDF" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:453 +#: src/components/importschedule/Importscheduledetail.vue:566 msgid "hour" msgstr "" @@ -306,10 +309,10 @@ #: src/components/ImportSoundingresults.vue:278 #: src/components/ImportWaterwayProfiles.vue:88 src/components/Sidebar.vue:56 #: src/components/importschedule/Importschedule.vue:33 -#: src/components/importschedule/Importscheduledetail.vue:519 -#: src/components/importschedule/Importscheduledetail.vue:649 -#: src/components/importschedule/Importscheduledetail.vue:709 -#: src/components/importschedule/Importscheduledetail.vue:737 +#: src/components/importschedule/Importscheduledetail.vue:632 +#: src/components/importschedule/Importscheduledetail.vue:787 +#: src/components/importschedule/Importscheduledetail.vue:866 +#: src/components/importschedule/Importscheduledetail.vue:894 msgid "Import" msgstr "" @@ -350,7 +353,7 @@ msgid "Imports" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:81 +#: src/components/importschedule/Importscheduledetail.vue:84 msgid "Insecure" msgstr "" @@ -362,23 +365,23 @@ msgid "Invalid input" msgstr "" -#: src/components/Pdftool.vue:29 +#: src/components/Pdftool.vue:24 msgid "ISO A3" msgstr "" -#: src/components/Pdftool.vue:30 +#: src/components/Pdftool.vue:25 msgid "ISO A4" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:469 +#: src/components/importschedule/Importscheduledetail.vue:582 msgid "January" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:475 +#: src/components/importschedule/Importscheduledetail.vue:588 msgid "July" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:474 +#: src/components/importschedule/Importscheduledetail.vue:587 msgid "June" msgstr "" @@ -400,6 +403,7 @@ msgstr "" #: src/components/layers/Layers.vue:10 +#, fuzzy msgid "Layers" msgstr "" @@ -419,12 +423,16 @@ msgid "Logs" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:199 +msgid "LOS" +msgstr "" + #: src/components/usermanagement/Userdetail.vue:140 msgid "Mail was sent" msgstr "" #: src/components/importschedule/Importschedule.vue:161 -#: src/components/importschedule/Importscheduledetail.vue:650 +#: src/components/importschedule/Importscheduledetail.vue:788 msgid "Manually triggered import: #" msgstr "" @@ -432,11 +440,15 @@ msgid "Map" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:471 +#: src/components/importschedule/Importscheduledetail.vue:584 msgid "March" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:473 +#: src/components/importschedule/Importscheduledetail.vue:261 +msgid "MaxWidth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:586 msgid "May" msgstr "" @@ -448,32 +460,37 @@ msgid "Message" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:446 +#: src/components/importschedule/Importscheduledetail.vue:559 msgid "minutes past" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:460 +#: src/components/importschedule/Importscheduledetail.vue:239 +msgid "MinWidth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:573 msgid "Monday" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:456 +#: src/components/importschedule/Importscheduledetail.vue:569 msgid "month" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:247 +#: src/components/importschedule/Importscheduledetail.vue:360 msgid "Monthly" msgstr "" #: src/components/Bottlenecks.vue:9 src/components/staging/Staging.vue:11 +#, fuzzy msgid "Name" msgstr "" -#: src/components/ImportStretches.vue:108 +#: src/components/ImportStretches.vue:110 msgid "National Object name" msgstr "" #: src/components/importschedule/Importschedule.vue:93 -#: src/components/importschedule/Importscheduledetail.vue:520 +#: src/components/importschedule/Importscheduledetail.vue:633 msgid "New Import" msgstr "" @@ -489,35 +506,35 @@ msgid "No scheduled imports" msgstr "" -#: src/components/ImportStretches.vue:210 +#: src/components/ImportStretches.vue:273 msgid "Not implemented!" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:479 +#: src/components/importschedule/Importscheduledetail.vue:592 msgid "November" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:450 +#: src/components/importschedule/Importscheduledetail.vue:563 msgid "o' clock" msgstr "" -#: src/components/ImportStretches.vue:91 +#: src/components/ImportStretches.vue:93 msgid "Object name" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:478 +#: src/components/importschedule/Importscheduledetail.vue:591 msgid "October" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:448 +#: src/components/importschedule/Importscheduledetail.vue:561 msgid "of" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:447 +#: src/components/importschedule/Importscheduledetail.vue:560 msgid "on" msgstr "" -#: src/components/Pdftool.vue:18 +#: src/components/Pdftool.vue:45 msgid "Open in new window" msgstr "" @@ -525,7 +542,7 @@ msgid "password" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:134 +#: src/components/importschedule/Importscheduledetail.vue:137 #: src/components/usermanagement/Userdetail.vue:235 msgid "Password" msgstr "" @@ -552,6 +569,7 @@ msgstr "" #: src/components/usermanagement/Userdetail.vue:331 +#, fuzzy msgid "Please choose a country" msgstr "" @@ -559,20 +577,42 @@ msgid "Please choose a role" msgstr "" +#: src/components/ImportStretches.vue:177 +#, fuzzy +msgid "Please enter a countrycode" +msgstr "Моля, изберете държава" + #: src/components/ImportSoundingresults.vue:84 -#: src/components/ImportStretches.vue:138 +#: src/components/ImportStretches.vue:140 msgid "Please enter a date" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:167 +#: src/components/importschedule/Importscheduledetail.vue:228 +msgid "Please enter a depth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:170 msgid "Please enter a Featuretype" msgstr "" -#: src/components/ImportStretches.vue:32 +#: src/components/ImportStretches.vue:34 +#, fuzzy msgid "Please enter a function" +msgstr "Моля, изберете държава" + +#: src/components/importschedule/Importscheduledetail.vue:210 +msgid "Please enter a level of service" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:142 +#: src/components/importschedule/Importscheduledetail.vue:274 +msgid "Please enter a maximum width" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:252 +msgid "Please enter a minimum width" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:145 msgid "Please enter a Password" msgstr "" @@ -584,23 +624,24 @@ msgid "Please enter a reference" msgstr "" -#: src/components/ImportStretches.vue:154 +#: src/components/ImportStretches.vue:156 +#, fuzzy msgid "Please enter a source" msgstr "" -#: src/components/ImportStretches.vue:59 +#: src/components/ImportStretches.vue:61 msgid "Please enter a start point" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:106 +#: src/components/importschedule/Importscheduledetail.vue:109 msgid "Please enter a URL" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:125 +#: src/components/importschedule/Importscheduledetail.vue:128 msgid "Please enter a Username" msgstr "" -#: src/components/ImportStretches.vue:84 +#: src/components/ImportStretches.vue:86 msgid "Please enter an end point" msgstr "" @@ -608,8 +649,8 @@ msgid "Please enter an id" msgstr "" -#: src/components/ImportStretches.vue:102 -#: src/components/ImportStretches.vue:120 +#: src/components/ImportStretches.vue:104 +#: src/components/ImportStretches.vue:122 msgid "Please enter an objectname" msgstr "" @@ -618,7 +659,7 @@ msgid "Please enter correct coordinates in the format: Lat,Lon,Lat,Lon" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:184 +#: src/components/importschedule/Importscheduledetail.vue:187 msgid "Please enter SortBy" msgstr "" @@ -671,7 +712,7 @@ msgid "Role" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:465 +#: src/components/importschedule/Importscheduledetail.vue:578 msgid "Saturday" msgstr "" @@ -679,16 +720,16 @@ msgid "Saved cross profiles" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:710 +#: src/components/importschedule/Importscheduledetail.vue:867 msgid "Saved import: #" msgstr "" #: src/components/importschedule/Importschedule.vue:36 -#: src/components/importschedule/Importscheduledetail.vue:238 +#: src/components/importschedule/Importscheduledetail.vue:351 msgid "Schedule" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:196 +#: src/components/importschedule/Importscheduledetail.vue:309 msgid "Scheduled" msgstr "" @@ -696,7 +737,7 @@ msgid "Section" msgstr "" -#: src/components/ImportStretches.vue:209 +#: src/components/ImportStretches.vue:272 msgid "Sections" msgstr "" @@ -712,7 +753,7 @@ msgid "Send testmail" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:477 +#: src/components/importschedule/Importscheduledetail.vue:590 msgid "September" msgstr "" @@ -720,7 +761,7 @@ msgid "Signer" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:216 +#: src/components/importschedule/Importscheduledetail.vue:329 msgid "Simple Schedule" msgstr "" @@ -731,7 +772,7 @@ " contributors." msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:176 +#: src/components/importschedule/Importscheduledetail.vue:179 msgid "SortBy" msgstr "" @@ -739,10 +780,14 @@ msgid "Sounding Result" msgstr "" -#: src/components/ImportStretches.vue:143 +#: src/components/ImportStretches.vue:145 msgid "Source" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:285 +msgid "Source orgranization" +msgstr "" + #: src/components/Identify.vue:57 msgid "source-code" msgstr "" @@ -759,7 +804,7 @@ msgid "Start" msgstr "" -#: src/components/ImportStretches.vue:39 +#: src/components/ImportStretches.vue:41 msgid "Start rhm" msgstr "" @@ -776,12 +821,12 @@ msgid "State" msgstr "" -#: src/components/ImportStretches.vue:28 +#: src/components/ImportStretches.vue:29 msgid "Stretch" msgstr "" -#: src/components/ImportStretches.vue:166 -#: src/components/importschedule/Importscheduledetail.vue:394 +#: src/components/ImportStretches.vue:190 +#: src/components/importschedule/Importscheduledetail.vue:507 #: src/components/usermanagement/Userdetail.vue:129 msgid "Submit" msgstr "" @@ -794,7 +839,7 @@ msgid "Successful" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:466 +#: src/components/importschedule/Importscheduledetail.vue:579 msgid "Sunday" msgstr "" @@ -820,22 +865,23 @@ " %{ license } without warranty, see docs for details." msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:463 +#: src/components/importschedule/Importscheduledetail.vue:576 msgid "Thursday" msgstr "" #: src/components/ImportApprovedGaugeMeasurement.vue:45 #: src/components/ImportWaterwayProfiles.vue:43 -#: src/components/importschedule/Importscheduledetail.vue:407 +#: src/components/importschedule/Importscheduledetail.vue:520 msgid "Trigger import" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:461 +#: src/components/importschedule/Importscheduledetail.vue:574 msgid "Tuesday" msgstr "" #: src/components/importschedule/Importschedule.vue:34 #: src/components/staging/Staging.vue:12 +#, fuzzy msgid "Type" msgstr "" @@ -843,7 +889,7 @@ msgid "under construction" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:738 +#: src/components/importschedule/Importscheduledetail.vue:895 msgid "update import: #" msgstr "" @@ -851,7 +897,7 @@ msgid "Upload" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:72 +#: src/components/importschedule/Importscheduledetail.vue:75 msgid "URL" msgstr "" @@ -859,7 +905,7 @@ msgid "User" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:117 +#: src/components/importschedule/Importscheduledetail.vue:120 #: src/components/staging/Staging.vue:18 #: src/components/usermanagement/Userdetail.vue:14 msgid "Username" @@ -899,19 +945,19 @@ msgid "Waterwayarea" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:462 +#: src/components/importschedule/Importscheduledetail.vue:575 msgid "Wednesday" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:455 +#: src/components/importschedule/Importscheduledetail.vue:568 msgid "week" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:246 +#: src/components/importschedule/Importscheduledetail.vue:359 msgid "Weekly" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:457 +#: src/components/importschedule/Importscheduledetail.vue:570 msgid "year" msgstr "" @@ -920,10 +966,10 @@ msgid "You can now select these coordinates from the \"Saved cross profiles\" menu to restore this cross profile." msgstr "" -#: src/store/map.js:416 +#: src/store/map.js:415 msgid "Length" msgstr "" -#: src/store/map.js:437 +#: src/store/map.js:436 msgid "Area" msgstr ""
--- a/client/src/locale/de_AT/LC_MESSAGES/app.po Fri Jan 18 16:52:20 2019 +0100 +++ b/client/src/locale/de_AT/LC_MESSAGES/app.po Fri Jan 18 17:10:16 2019 +0100 @@ -1,16 +1,13 @@ -# German translations for wamosjs package -# German translation for wamosjs. -# Copyright (C) 2018 THE wamosjs'S COPYRIGHT HOLDER -# This file is distributed under the same license as the wamosjs package. -# Automatically generated, 2018. +# German translation for gemma. +# Copyright (C) 2018, 2019 # msgid "" msgstr "" -"Project-Id-Version: wamosjs 0.1.0\n" +"Project-Id-Version: gemma 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-18 16:13+0100\n" -"PO-Revision-Date: 2018-12-11 17:08+0000\n" -"Last-Translator: Sascha L. Teichmann <sascha.teichmann@intevation.de>\n" +"POT-Creation-Date: 2019-01-17 15:56+0100\n" +"PO-Revision-Date: 2019-01-16 16:25+0000\n" +"Last-Translator: Bernhard E. Reiter <bernhard.reiter@intevation.de>\n" "Language-Team: Austrian German <https://hosted.weblate.org/projects/gemma/client/de_AT/>\n" "Language: de_AT\n" "MIME-Version: 1.0\n" @@ -19,11 +16,7 @@ "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.4-dev\n" -#: src/components/Pdftool.vue:402 -msgid "– printed by:" -msgstr "" - -#: src/components/importschedule/Importscheduledetail.vue:452 +#: src/components/importschedule/Importscheduledetail.vue:565 msgid "15 minutes" msgstr "" @@ -39,16 +32,16 @@ msgid "Add User" msgstr "Benutzer hinzufügen" -#: src/components/importschedule/Importscheduledetail.vue:472 +#: src/components/importschedule/Importscheduledetail.vue:585 msgid "April" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:449 +#: src/components/importschedule/Importscheduledetail.vue:562 #, fuzzy msgid "at" msgstr "Datum" -#: src/components/importschedule/Importscheduledetail.vue:476 +#: src/components/importschedule/Importscheduledetail.vue:589 msgid "August" msgstr "" @@ -80,17 +73,17 @@ #: src/components/importschedule/Importschedule.vue:167 #: src/components/importschedule/Importschedule.vue:176 #: src/components/importschedule/Importschedule.vue:198 -#: src/components/importschedule/Importscheduledetail.vue:656 -#: src/components/importschedule/Importscheduledetail.vue:724 -#: src/components/importschedule/Importscheduledetail.vue:752 +#: src/components/importschedule/Importscheduledetail.vue:794 +#: src/components/importschedule/Importscheduledetail.vue:881 +#: src/components/importschedule/Importscheduledetail.vue:909 #: src/components/staging/StagingDetail.vue:246 #: src/components/usermanagement/Userdetail.vue:304 #: src/components/usermanagement/Userdetail.vue:376 #: src/components/usermanagement/Usermanagement.vue:298 #: src/components/usermanagement/Usermanagement.vue:306 #: src/components/usermanagement/Usermanagement.vue:340 -#: src/components/importschedule/Importscheduledetail.vue:716 -#: src/components/importschedule/Importscheduledetail.vue:744 +#: src/components/importschedule/Importscheduledetail.vue:873 +#: src/components/importschedule/Importscheduledetail.vue:901 msgid "Backend Error" msgstr "Server-Fehler" @@ -131,8 +124,7 @@ msgstr "" #: src/components/Pdftool.vue:18 -#, fuzzy -msgid "Choose format:" +msgid "Chose format:" msgstr "Format wählen:" #: src/components/fairway/Profiles.vue:64 @@ -156,7 +148,12 @@ msgid "Country" msgstr "Land" -#: src/components/importschedule/Importscheduledetail.vue:382 +#: src/components/ImportStretches.vue:166 +#, fuzzy +msgid "Countrycode" +msgstr "Land" + +#: src/components/importschedule/Importscheduledetail.vue:495 msgid "Cronstring" msgstr "" @@ -166,20 +163,16 @@ msgid "Date" msgstr "Datum" -#: src/components/ImportStretches.vue:127 +#: src/components/ImportStretches.vue:129 #, fuzzy msgid "Date info" msgstr "Datum" -#: src/components/Pdftool.vue:398 -msgid "Date of publication:" -msgstr "" - -#: src/components/importschedule/Importscheduledetail.vue:454 +#: src/components/importschedule/Importscheduledetail.vue:567 msgid "day" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:480 +#: src/components/importschedule/Importscheduledetail.vue:593 msgid "December" msgstr "" @@ -195,6 +188,10 @@ msgid "Deleted import: #" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:219 +msgid "Depth" +msgstr "" + #: src/components/ImportSoundingresults.vue:52 msgid "Depthreference" msgstr "Tiefenreferenz" @@ -215,11 +212,11 @@ msgid "Email address" msgstr "E-Mail Adresse" -#: src/components/importschedule/Importscheduledetail.vue:50 +#: src/components/importschedule/Importscheduledetail.vue:53 msgid "Email Notification" msgstr "E-Mail Benachrichtigung" -#: src/components/ImportStretches.vue:64 +#: src/components/ImportStretches.vue:66 msgid "End rhm" msgstr "" @@ -251,7 +248,7 @@ msgid "Errorlog" msgstr "Fehlerprotokoll" -#: src/components/importschedule/Importscheduledetail.vue:445 +#: src/components/importschedule/Importscheduledetail.vue:558 msgid "Every" msgstr "" @@ -260,14 +257,15 @@ msgstr "Fehlgeschlagen" #: src/components/importschedule/Importscheduledetail.vue:40 -msgid "Fairwaydimensions" -msgstr "" +#, fuzzy +msgid "Fairwaydimension" +msgstr "Waterway-Admin" #: src/components/importschedule/Importscheduledetail.vue:155 msgid "Featuretype" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:470 +#: src/components/importschedule/Importscheduledetail.vue:583 msgid "February" msgstr "" @@ -275,7 +273,7 @@ msgid "Forgot password" msgstr "Passwort vergessen" -#: src/components/importschedule/Importscheduledetail.vue:464 +#: src/components/importschedule/Importscheduledetail.vue:577 msgid "Friday" msgstr "" @@ -288,11 +286,11 @@ msgid "Gauge measurement" msgstr "Messung" -#: src/components/Pdftool.vue:10 src/components/Pdftool.vue:60 +#: src/components/Pdftool.vue:10 src/components/Pdftool.vue:53 msgid "Generate PDF" msgstr "PDF generieren" -#: src/components/importschedule/Importscheduledetail.vue:453 +#: src/components/importschedule/Importscheduledetail.vue:566 msgid "hour" msgstr "" @@ -312,10 +310,10 @@ #: src/components/ImportSoundingresults.vue:278 #: src/components/ImportWaterwayProfiles.vue:88 src/components/Sidebar.vue:56 #: src/components/importschedule/Importschedule.vue:33 -#: src/components/importschedule/Importscheduledetail.vue:519 -#: src/components/importschedule/Importscheduledetail.vue:649 -#: src/components/importschedule/Importscheduledetail.vue:709 -#: src/components/importschedule/Importscheduledetail.vue:737 +#: src/components/importschedule/Importscheduledetail.vue:632 +#: src/components/importschedule/Importscheduledetail.vue:787 +#: src/components/importschedule/Importscheduledetail.vue:866 +#: src/components/importschedule/Importscheduledetail.vue:894 msgid "Import" msgstr "Daten-Import" @@ -357,7 +355,7 @@ msgid "Imports" msgstr "Daten-Import" -#: src/components/importschedule/Importscheduledetail.vue:81 +#: src/components/importschedule/Importscheduledetail.vue:84 msgid "Insecure" msgstr "" @@ -369,23 +367,23 @@ msgid "Invalid input" msgstr "Ungültige Eingabe" -#: src/components/Pdftool.vue:29 +#: src/components/Pdftool.vue:24 msgid "ISO A3" msgstr "" -#: src/components/Pdftool.vue:30 +#: src/components/Pdftool.vue:25 msgid "ISO A4" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:469 +#: src/components/importschedule/Importscheduledetail.vue:582 msgid "January" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:475 +#: src/components/importschedule/Importscheduledetail.vue:588 msgid "July" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:474 +#: src/components/importschedule/Importscheduledetail.vue:587 msgid "June" msgstr "" @@ -426,12 +424,16 @@ msgid "Logs" msgstr "Protokolle" +#: src/components/importschedule/Importscheduledetail.vue:199 +msgid "LOS" +msgstr "" + #: src/components/usermanagement/Userdetail.vue:140 msgid "Mail was sent" msgstr "E-Mail wurde gesendet" #: src/components/importschedule/Importschedule.vue:161 -#: src/components/importschedule/Importscheduledetail.vue:650 +#: src/components/importschedule/Importscheduledetail.vue:788 msgid "Manually triggered import: #" msgstr "" @@ -439,11 +441,15 @@ msgid "Map" msgstr "Karte" -#: src/components/importschedule/Importscheduledetail.vue:471 +#: src/components/importschedule/Importscheduledetail.vue:584 msgid "March" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:473 +#: src/components/importschedule/Importscheduledetail.vue:261 +msgid "MaxWidth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:586 #, fuzzy msgid "May" msgstr "Karte" @@ -456,19 +462,23 @@ msgid "Message" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:446 +#: src/components/importschedule/Importscheduledetail.vue:559 msgid "minutes past" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:460 +#: src/components/importschedule/Importscheduledetail.vue:239 +msgid "MinWidth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:573 msgid "Monday" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:456 +#: src/components/importschedule/Importscheduledetail.vue:569 msgid "month" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:247 +#: src/components/importschedule/Importscheduledetail.vue:360 msgid "Monthly" msgstr "" @@ -476,12 +486,12 @@ msgid "Name" msgstr "Name" -#: src/components/ImportStretches.vue:108 +#: src/components/ImportStretches.vue:110 msgid "National Object name" msgstr "" #: src/components/importschedule/Importschedule.vue:93 -#: src/components/importschedule/Importscheduledetail.vue:520 +#: src/components/importschedule/Importscheduledetail.vue:633 msgid "New Import" msgstr "Neuer Import" @@ -498,35 +508,35 @@ msgid "No scheduled imports" msgstr "Keine Pläne" -#: src/components/ImportStretches.vue:210 +#: src/components/ImportStretches.vue:273 msgid "Not implemented!" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:479 +#: src/components/importschedule/Importscheduledetail.vue:592 msgid "November" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:450 +#: src/components/importschedule/Importscheduledetail.vue:563 msgid "o' clock" msgstr "" -#: src/components/ImportStretches.vue:91 +#: src/components/ImportStretches.vue:93 msgid "Object name" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:478 +#: src/components/importschedule/Importscheduledetail.vue:591 msgid "October" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:448 +#: src/components/importschedule/Importscheduledetail.vue:561 msgid "of" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:447 +#: src/components/importschedule/Importscheduledetail.vue:560 msgid "on" msgstr "" -#: src/components/Pdftool.vue:18 +#: src/components/Pdftool.vue:45 msgid "Open in new window" msgstr "In neuem Fenster öffnen" @@ -534,7 +544,7 @@ msgid "password" msgstr "Passwort" -#: src/components/importschedule/Importscheduledetail.vue:134 +#: src/components/importschedule/Importscheduledetail.vue:137 #: src/components/usermanagement/Userdetail.vue:235 msgid "Password" msgstr "Passwort" @@ -568,22 +578,47 @@ msgid "Please choose a role" msgstr "Bitte wählen Sie eine Rolle aus" +#: src/components/ImportStretches.vue:177 +#, fuzzy +msgid "Please enter a countrycode" +msgstr "Bitte ein Datum eingeben" + #: src/components/ImportSoundingresults.vue:84 -#: src/components/ImportStretches.vue:138 +#: src/components/ImportStretches.vue:140 msgid "Please enter a date" msgstr "Bitte ein Datum eingeben" -#: src/components/importschedule/Importscheduledetail.vue:167 +#: src/components/importschedule/Importscheduledetail.vue:228 +#, fuzzy +msgid "Please enter a depth" +msgstr "Bitte ein Datum eingeben" + +#: src/components/importschedule/Importscheduledetail.vue:170 #, fuzzy msgid "Please enter a Featuretype" msgstr "Bitte ein Datum eingeben" -#: src/components/ImportStretches.vue:32 +#: src/components/ImportStretches.vue:34 #, fuzzy msgid "Please enter a function" msgstr "Bitte eine Projektion eingeben" -#: src/components/importschedule/Importscheduledetail.vue:142 +#: src/components/importschedule/Importscheduledetail.vue:210 +#, fuzzy +msgid "Please enter a level of service" +msgstr "Bitte ein Höhenreferenzsystem eingeben" + +#: src/components/importschedule/Importscheduledetail.vue:274 +#, fuzzy +msgid "Please enter a maximum width" +msgstr "Bitte ein Datum eingeben" + +#: src/components/importschedule/Importscheduledetail.vue:252 +#, fuzzy +msgid "Please enter a minimum width" +msgstr "Bitte ein Datum eingeben" + +#: src/components/importschedule/Importscheduledetail.vue:145 #, fuzzy msgid "Please enter a Password" msgstr "Bitte ein Datum eingeben" @@ -596,27 +631,32 @@ msgid "Please enter a reference" msgstr "Bitte ein Höhenreferenzsystem eingeben" -#: src/components/ImportStretches.vue:154 +#: src/components/ImportStretches.vue:156 #, fuzzy msgid "Please enter a source" msgstr "Bitte ein Datum eingeben" -#: src/components/ImportStretches.vue:59 +#: src/components/importschedule/Importscheduledetail.vue:297 +#, fuzzy +msgid "Please enter a source orgranization" +msgstr "Bitte ein Datum eingeben" + +#: src/components/ImportStretches.vue:61 #, fuzzy msgid "Please enter a start point" msgstr "Bitte ein Datum eingeben" -#: src/components/importschedule/Importscheduledetail.vue:106 +#: src/components/importschedule/Importscheduledetail.vue:109 #, fuzzy msgid "Please enter a URL" msgstr "Bitte ein Datum eingeben" -#: src/components/importschedule/Importscheduledetail.vue:125 +#: src/components/importschedule/Importscheduledetail.vue:128 #, fuzzy msgid "Please enter a Username" msgstr "Bitte ein Datum eingeben" -#: src/components/ImportStretches.vue:84 +#: src/components/ImportStretches.vue:86 #, fuzzy msgid "Please enter an end point" msgstr "Bitte ein Datum eingeben" @@ -626,8 +666,8 @@ msgid "Please enter an id" msgstr "Bitte ein Datum eingeben" -#: src/components/ImportStretches.vue:102 -#: src/components/ImportStretches.vue:120 +#: src/components/ImportStretches.vue:104 +#: src/components/ImportStretches.vue:122 #, fuzzy msgid "Please enter an objectname" msgstr "Bitte eine Projektion eingeben" @@ -637,7 +677,7 @@ msgid "Please enter correct coordinates in the format: Lat,Lon,Lat,Lon" msgstr "Bitte geben Sie die Koordinaten in folgendem Format an: Lat,Lon,Lat,Lon" -#: src/components/importschedule/Importscheduledetail.vue:184 +#: src/components/importschedule/Importscheduledetail.vue:187 #, fuzzy msgid "Please enter SortBy" msgstr "Bitte ein Datum eingeben" @@ -691,7 +731,7 @@ msgid "Role" msgstr "Rolle" -#: src/components/importschedule/Importscheduledetail.vue:465 +#: src/components/importschedule/Importscheduledetail.vue:578 msgid "Saturday" msgstr "" @@ -699,17 +739,17 @@ msgid "Saved cross profiles" msgstr "Gespeicherte Profile" -#: src/components/importschedule/Importscheduledetail.vue:710 +#: src/components/importschedule/Importscheduledetail.vue:867 #, fuzzy msgid "Saved import: #" msgstr "Neuer Import" #: src/components/importschedule/Importschedule.vue:36 -#: src/components/importschedule/Importscheduledetail.vue:238 +#: src/components/importschedule/Importscheduledetail.vue:351 msgid "Schedule" msgstr "Zeitplan" -#: src/components/importschedule/Importscheduledetail.vue:196 +#: src/components/importschedule/Importscheduledetail.vue:309 #, fuzzy msgid "Scheduled" msgstr "Zeitplan" @@ -719,7 +759,7 @@ msgid "Section" msgstr "Projektion" -#: src/components/ImportStretches.vue:209 +#: src/components/ImportStretches.vue:272 #, fuzzy msgid "Sections" msgstr "Projektion" @@ -736,7 +776,7 @@ msgid "Send testmail" msgstr "Test-E-Mail versenden" -#: src/components/importschedule/Importscheduledetail.vue:477 +#: src/components/importschedule/Importscheduledetail.vue:590 msgid "September" msgstr "" @@ -744,7 +784,7 @@ msgid "Signer" msgstr "Überprüft durch" -#: src/components/importschedule/Importscheduledetail.vue:216 +#: src/components/importschedule/Importscheduledetail.vue:329 #, fuzzy msgid "Simple Schedule" msgstr "Zeitplan" @@ -756,7 +796,7 @@ " contributors." msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:176 +#: src/components/importschedule/Importscheduledetail.vue:179 msgid "SortBy" msgstr "" @@ -764,10 +804,14 @@ msgid "Sounding Result" msgstr "Seichtstellenvermessung" -#: src/components/ImportStretches.vue:143 +#: src/components/ImportStretches.vue:145 msgid "Source" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:285 +msgid "Source orgranization" +msgstr "" + #: src/components/Identify.vue:57 msgid "source-code" msgstr "Quelltext" @@ -784,7 +828,7 @@ msgid "Start" msgstr "Start" -#: src/components/ImportStretches.vue:39 +#: src/components/ImportStretches.vue:41 #, fuzzy msgid "Start rhm" msgstr "Start" @@ -802,12 +846,12 @@ msgid "State" msgstr "Zustand" -#: src/components/ImportStretches.vue:28 +#: src/components/ImportStretches.vue:29 msgid "Stretch" msgstr "" -#: src/components/ImportStretches.vue:166 -#: src/components/importschedule/Importscheduledetail.vue:394 +#: src/components/ImportStretches.vue:190 +#: src/components/importschedule/Importscheduledetail.vue:507 #: src/components/usermanagement/Userdetail.vue:129 msgid "Submit" msgstr "Abschicken" @@ -820,7 +864,7 @@ msgid "Successful" msgstr "Erfolgreich" -#: src/components/importschedule/Importscheduledetail.vue:466 +#: src/components/importschedule/Importscheduledetail.vue:579 msgid "Sunday" msgstr "" @@ -847,18 +891,18 @@ " %{ license } without warranty, see docs for details." msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:463 +#: src/components/importschedule/Importscheduledetail.vue:576 msgid "Thursday" msgstr "" #: src/components/ImportApprovedGaugeMeasurement.vue:45 #: src/components/ImportWaterwayProfiles.vue:43 -#: src/components/importschedule/Importscheduledetail.vue:407 +#: src/components/importschedule/Importscheduledetail.vue:520 #, fuzzy msgid "Trigger import" msgstr "Neuer Import" -#: src/components/importschedule/Importscheduledetail.vue:461 +#: src/components/importschedule/Importscheduledetail.vue:574 msgid "Tuesday" msgstr "" @@ -871,7 +915,7 @@ msgid "under construction" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:738 +#: src/components/importschedule/Importscheduledetail.vue:895 #, fuzzy msgid "update import: #" msgstr "Neuer Import" @@ -880,7 +924,7 @@ msgid "Upload" msgstr "Hochladen" -#: src/components/importschedule/Importscheduledetail.vue:72 +#: src/components/importschedule/Importscheduledetail.vue:75 msgid "URL" msgstr "" @@ -888,7 +932,7 @@ msgid "User" msgstr "Benutzer" -#: src/components/importschedule/Importscheduledetail.vue:117 +#: src/components/importschedule/Importscheduledetail.vue:120 #: src/components/staging/Staging.vue:18 #: src/components/usermanagement/Userdetail.vue:14 msgid "Username" @@ -905,6 +949,9 @@ " <a href=\"https://download.geonames.org/export/dump/readme.txt\">GeoNames</a>\n" " under %{ geoLicense }." msgstr "" +"Verwendet\n" +" <a href=\"https://download.geonames.org/export/dump/readme.txt\">GeoNames</a>\n" +" unter %{ geoLicense }." #: src/components/usermanagement/Userdetail.vue:91 #: src/components/usermanagement/Usermanagement.vue:327 @@ -931,19 +978,19 @@ msgid "Waterwayarea" msgstr "Waterway-Benutzer" -#: src/components/importschedule/Importscheduledetail.vue:462 +#: src/components/importschedule/Importscheduledetail.vue:575 msgid "Wednesday" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:455 +#: src/components/importschedule/Importscheduledetail.vue:568 msgid "week" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:246 +#: src/components/importschedule/Importscheduledetail.vue:359 msgid "Weekly" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:457 +#: src/components/importschedule/Importscheduledetail.vue:570 msgid "year" msgstr "" @@ -952,10 +999,10 @@ msgid "You can now select these coordinates from the \"Saved cross profiles\" menu to restore this cross profile." msgstr "Sie können diese Koordinaten aus dem \"Gespeicherte Profile\"-Menü auswählen, um diesen Profilschnitt wieder herzustellen." -#: src/store/map.js:416 +#: src/store/map.js:415 msgid "Length" msgstr "Länge" -#: src/store/map.js:437 +#: src/store/map.js:436 msgid "Area" msgstr "Fläche"
--- a/client/src/locale/en_GB/LC_MESSAGES/app.po Fri Jan 18 16:52:20 2019 +0100 +++ b/client/src/locale/en_GB/LC_MESSAGES/app.po Fri Jan 18 17:10:16 2019 +0100 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: wamosjs 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-18 16:13+0100\n" +"POT-Creation-Date: 2019-01-17 15:56+0100\n" "PO-Revision-Date: 2018-07-03 17:18+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -17,11 +17,7 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/components/Pdftool.vue:402 -msgid "– printed by:" -msgstr "" - -#: src/components/importschedule/Importscheduledetail.vue:452 +#: src/components/importschedule/Importscheduledetail.vue:565 msgid "15 minutes" msgstr "" @@ -37,15 +33,15 @@ msgid "Add User" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:472 +#: src/components/importschedule/Importscheduledetail.vue:585 msgid "April" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:449 +#: src/components/importschedule/Importscheduledetail.vue:562 msgid "at" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:476 +#: src/components/importschedule/Importscheduledetail.vue:589 msgid "August" msgstr "" @@ -77,17 +73,17 @@ #: src/components/importschedule/Importschedule.vue:167 #: src/components/importschedule/Importschedule.vue:176 #: src/components/importschedule/Importschedule.vue:198 -#: src/components/importschedule/Importscheduledetail.vue:656 -#: src/components/importschedule/Importscheduledetail.vue:724 -#: src/components/importschedule/Importscheduledetail.vue:752 +#: src/components/importschedule/Importscheduledetail.vue:794 +#: src/components/importschedule/Importscheduledetail.vue:881 +#: src/components/importschedule/Importscheduledetail.vue:909 #: src/components/staging/StagingDetail.vue:246 #: src/components/usermanagement/Userdetail.vue:304 #: src/components/usermanagement/Userdetail.vue:376 #: src/components/usermanagement/Usermanagement.vue:298 #: src/components/usermanagement/Usermanagement.vue:306 #: src/components/usermanagement/Usermanagement.vue:340 -#: src/components/importschedule/Importscheduledetail.vue:716 -#: src/components/importschedule/Importscheduledetail.vue:744 +#: src/components/importschedule/Importscheduledetail.vue:873 +#: src/components/importschedule/Importscheduledetail.vue:901 msgid "Backend Error" msgstr "" @@ -128,7 +124,7 @@ msgstr "" #: src/components/Pdftool.vue:18 -msgid "Choose format:" +msgid "Chose format:" msgstr "" #: src/components/fairway/Profiles.vue:64 @@ -152,7 +148,11 @@ msgid "Country" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:382 +#: src/components/ImportStretches.vue:166 +msgid "Countrycode" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:495 msgid "Cronstring" msgstr "" @@ -162,19 +162,15 @@ msgid "Date" msgstr "" -#: src/components/ImportStretches.vue:127 +#: src/components/ImportStretches.vue:129 msgid "Date info" msgstr "" -#: src/components/Pdftool.vue:398 -msgid "Date of publication:" -msgstr "" - -#: src/components/importschedule/Importscheduledetail.vue:454 +#: src/components/importschedule/Importscheduledetail.vue:567 msgid "day" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:480 +#: src/components/importschedule/Importscheduledetail.vue:593 msgid "December" msgstr "" @@ -190,6 +186,10 @@ msgid "Deleted import: #" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:219 +msgid "Depth" +msgstr "" + #: src/components/ImportSoundingresults.vue:52 msgid "Depthreference" msgstr "" @@ -210,11 +210,11 @@ msgid "Email address" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:50 +#: src/components/importschedule/Importscheduledetail.vue:53 msgid "Email Notification" msgstr "" -#: src/components/ImportStretches.vue:64 +#: src/components/ImportStretches.vue:66 msgid "End rhm" msgstr "" @@ -246,7 +246,7 @@ msgid "Errorlog" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:445 +#: src/components/importschedule/Importscheduledetail.vue:558 msgid "Every" msgstr "" @@ -255,14 +255,14 @@ msgstr "" #: src/components/importschedule/Importscheduledetail.vue:40 -msgid "Fairwaydimensions" +msgid "Fairwaydimension" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:155 +#: src/components/importschedule/Importscheduledetail.vue:158 msgid "Featuretype" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:470 +#: src/components/importschedule/Importscheduledetail.vue:583 msgid "February" msgstr "" @@ -270,7 +270,7 @@ msgid "Forgot password" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:464 +#: src/components/importschedule/Importscheduledetail.vue:577 msgid "Friday" msgstr "" @@ -282,11 +282,11 @@ msgid "Gauge measurement" msgstr "" -#: src/components/Pdftool.vue:10 src/components/Pdftool.vue:60 +#: src/components/Pdftool.vue:10 src/components/Pdftool.vue:53 msgid "Generate PDF" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:453 +#: src/components/importschedule/Importscheduledetail.vue:566 msgid "hour" msgstr "" @@ -306,10 +306,10 @@ #: src/components/ImportSoundingresults.vue:278 #: src/components/ImportWaterwayProfiles.vue:88 src/components/Sidebar.vue:56 #: src/components/importschedule/Importschedule.vue:33 -#: src/components/importschedule/Importscheduledetail.vue:519 -#: src/components/importschedule/Importscheduledetail.vue:649 -#: src/components/importschedule/Importscheduledetail.vue:709 -#: src/components/importschedule/Importscheduledetail.vue:737 +#: src/components/importschedule/Importscheduledetail.vue:632 +#: src/components/importschedule/Importscheduledetail.vue:787 +#: src/components/importschedule/Importscheduledetail.vue:866 +#: src/components/importschedule/Importscheduledetail.vue:894 msgid "Import" msgstr "" @@ -350,7 +350,7 @@ msgid "Imports" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:81 +#: src/components/importschedule/Importscheduledetail.vue:84 msgid "Insecure" msgstr "" @@ -362,23 +362,23 @@ msgid "Invalid input" msgstr "" -#: src/components/Pdftool.vue:29 +#: src/components/Pdftool.vue:24 msgid "ISO A3" msgstr "" -#: src/components/Pdftool.vue:30 +#: src/components/Pdftool.vue:25 msgid "ISO A4" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:469 +#: src/components/importschedule/Importscheduledetail.vue:582 msgid "January" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:475 +#: src/components/importschedule/Importscheduledetail.vue:588 msgid "July" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:474 +#: src/components/importschedule/Importscheduledetail.vue:587 msgid "June" msgstr "" @@ -419,12 +419,16 @@ msgid "Logs" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:199 +msgid "LOS" +msgstr "" + #: src/components/usermanagement/Userdetail.vue:140 msgid "Mail was sent" msgstr "" #: src/components/importschedule/Importschedule.vue:161 -#: src/components/importschedule/Importscheduledetail.vue:650 +#: src/components/importschedule/Importscheduledetail.vue:788 msgid "Manually triggered import: #" msgstr "" @@ -432,11 +436,15 @@ msgid "Map" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:471 +#: src/components/importschedule/Importscheduledetail.vue:584 msgid "March" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:473 +#: src/components/importschedule/Importscheduledetail.vue:261 +msgid "MaxWidth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:586 msgid "May" msgstr "" @@ -448,19 +456,23 @@ msgid "Message" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:446 +#: src/components/importschedule/Importscheduledetail.vue:559 msgid "minutes past" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:460 +#: src/components/importschedule/Importscheduledetail.vue:239 +msgid "MinWidth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:573 msgid "Monday" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:456 +#: src/components/importschedule/Importscheduledetail.vue:569 msgid "month" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:247 +#: src/components/importschedule/Importscheduledetail.vue:360 msgid "Monthly" msgstr "" @@ -468,12 +480,12 @@ msgid "Name" msgstr "" -#: src/components/ImportStretches.vue:108 +#: src/components/ImportStretches.vue:110 msgid "National Object name" msgstr "" #: src/components/importschedule/Importschedule.vue:93 -#: src/components/importschedule/Importscheduledetail.vue:520 +#: src/components/importschedule/Importscheduledetail.vue:633 msgid "New Import" msgstr "" @@ -489,35 +501,35 @@ msgid "No scheduled imports" msgstr "" -#: src/components/ImportStretches.vue:210 +#: src/components/ImportStretches.vue:273 msgid "Not implemented!" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:479 +#: src/components/importschedule/Importscheduledetail.vue:592 msgid "November" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:450 +#: src/components/importschedule/Importscheduledetail.vue:563 msgid "o' clock" msgstr "" -#: src/components/ImportStretches.vue:91 +#: src/components/ImportStretches.vue:93 msgid "Object name" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:478 +#: src/components/importschedule/Importscheduledetail.vue:591 msgid "October" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:448 +#: src/components/importschedule/Importscheduledetail.vue:561 msgid "of" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:447 +#: src/components/importschedule/Importscheduledetail.vue:560 msgid "on" msgstr "" -#: src/components/Pdftool.vue:18 +#: src/components/Pdftool.vue:45 msgid "Open in new window" msgstr "" @@ -525,7 +537,7 @@ msgid "password" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:134 +#: src/components/importschedule/Importscheduledetail.vue:137 #: src/components/usermanagement/Userdetail.vue:235 msgid "Password" msgstr "" @@ -559,20 +571,40 @@ msgid "Please choose a role" msgstr "" +#: src/components/ImportStretches.vue:177 +msgid "Please enter a countrycode" +msgstr "" + #: src/components/ImportSoundingresults.vue:84 -#: src/components/ImportStretches.vue:138 +#: src/components/ImportStretches.vue:140 msgid "Please enter a date" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:167 +#: src/components/importschedule/Importscheduledetail.vue:228 +msgid "Please enter a depth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:170 msgid "Please enter a Featuretype" msgstr "" -#: src/components/ImportStretches.vue:32 +#: src/components/ImportStretches.vue:34 msgid "Please enter a function" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:142 +#: src/components/importschedule/Importscheduledetail.vue:210 +msgid "Please enter a level of service" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:274 +msgid "Please enter a maximum width" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:252 +msgid "Please enter a minimum width" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:145 msgid "Please enter a Password" msgstr "" @@ -584,23 +616,27 @@ msgid "Please enter a reference" msgstr "" -#: src/components/ImportStretches.vue:154 +#: src/components/ImportStretches.vue:156 msgid "Please enter a source" msgstr "" -#: src/components/ImportStretches.vue:59 +#: src/components/importschedule/Importscheduledetail.vue:297 +msgid "Please enter a source orgranization" +msgstr "" + +#: src/components/ImportStretches.vue:61 msgid "Please enter a start point" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:106 +#: src/components/importschedule/Importscheduledetail.vue:109 msgid "Please enter a URL" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:125 +#: src/components/importschedule/Importscheduledetail.vue:128 msgid "Please enter a Username" msgstr "" -#: src/components/ImportStretches.vue:84 +#: src/components/ImportStretches.vue:86 msgid "Please enter an end point" msgstr "" @@ -608,8 +644,8 @@ msgid "Please enter an id" msgstr "" -#: src/components/ImportStretches.vue:102 -#: src/components/ImportStretches.vue:120 +#: src/components/ImportStretches.vue:104 +#: src/components/ImportStretches.vue:122 msgid "Please enter an objectname" msgstr "" @@ -618,7 +654,7 @@ msgid "Please enter correct coordinates in the format: Lat,Lon,Lat,Lon" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:184 +#: src/components/importschedule/Importscheduledetail.vue:187 msgid "Please enter SortBy" msgstr "" @@ -671,7 +707,7 @@ msgid "Role" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:465 +#: src/components/importschedule/Importscheduledetail.vue:578 msgid "Saturday" msgstr "" @@ -679,16 +715,16 @@ msgid "Saved cross profiles" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:710 +#: src/components/importschedule/Importscheduledetail.vue:867 msgid "Saved import: #" msgstr "" #: src/components/importschedule/Importschedule.vue:36 -#: src/components/importschedule/Importscheduledetail.vue:238 +#: src/components/importschedule/Importscheduledetail.vue:351 msgid "Schedule" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:196 +#: src/components/importschedule/Importscheduledetail.vue:309 msgid "Scheduled" msgstr "" @@ -696,7 +732,7 @@ msgid "Section" msgstr "" -#: src/components/ImportStretches.vue:209 +#: src/components/ImportStretches.vue:272 msgid "Sections" msgstr "" @@ -712,7 +748,7 @@ msgid "Send testmail" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:477 +#: src/components/importschedule/Importscheduledetail.vue:590 msgid "September" msgstr "" @@ -720,7 +756,7 @@ msgid "Signer" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:216 +#: src/components/importschedule/Importscheduledetail.vue:329 msgid "Simple Schedule" msgstr "" @@ -731,7 +767,7 @@ " contributors." msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:176 +#: src/components/importschedule/Importscheduledetail.vue:179 msgid "SortBy" msgstr "" @@ -739,10 +775,14 @@ msgid "Sounding Result" msgstr "" -#: src/components/ImportStretches.vue:143 +#: src/components/ImportStretches.vue:145 msgid "Source" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:285 +msgid "Source orgranization" +msgstr "" + #: src/components/Identify.vue:57 msgid "source-code" msgstr "" @@ -759,7 +799,7 @@ msgid "Start" msgstr "" -#: src/components/ImportStretches.vue:39 +#: src/components/ImportStretches.vue:41 msgid "Start rhm" msgstr "" @@ -776,12 +816,12 @@ msgid "State" msgstr "" -#: src/components/ImportStretches.vue:28 +#: src/components/ImportStretches.vue:29 msgid "Stretch" msgstr "" -#: src/components/ImportStretches.vue:166 -#: src/components/importschedule/Importscheduledetail.vue:394 +#: src/components/ImportStretches.vue:190 +#: src/components/importschedule/Importscheduledetail.vue:507 #: src/components/usermanagement/Userdetail.vue:129 msgid "Submit" msgstr "" @@ -794,7 +834,7 @@ msgid "Successful" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:466 +#: src/components/importschedule/Importscheduledetail.vue:579 msgid "Sunday" msgstr "" @@ -820,17 +860,17 @@ " %{ license } without warranty, see docs for details." msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:463 +#: src/components/importschedule/Importscheduledetail.vue:576 msgid "Thursday" msgstr "" #: src/components/ImportApprovedGaugeMeasurement.vue:45 #: src/components/ImportWaterwayProfiles.vue:43 -#: src/components/importschedule/Importscheduledetail.vue:407 +#: src/components/importschedule/Importscheduledetail.vue:520 msgid "Trigger import" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:461 +#: src/components/importschedule/Importscheduledetail.vue:574 msgid "Tuesday" msgstr "" @@ -843,7 +883,7 @@ msgid "under construction" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:738 +#: src/components/importschedule/Importscheduledetail.vue:895 msgid "update import: #" msgstr "" @@ -851,7 +891,7 @@ msgid "Upload" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:72 +#: src/components/importschedule/Importscheduledetail.vue:75 msgid "URL" msgstr "" @@ -859,7 +899,7 @@ msgid "User" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:117 +#: src/components/importschedule/Importscheduledetail.vue:120 #: src/components/staging/Staging.vue:18 #: src/components/usermanagement/Userdetail.vue:14 msgid "Username" @@ -899,19 +939,19 @@ msgid "Waterwayarea" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:462 +#: src/components/importschedule/Importscheduledetail.vue:575 msgid "Wednesday" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:455 +#: src/components/importschedule/Importscheduledetail.vue:568 msgid "week" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:246 +#: src/components/importschedule/Importscheduledetail.vue:359 msgid "Weekly" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:457 +#: src/components/importschedule/Importscheduledetail.vue:570 msgid "year" msgstr "" @@ -920,10 +960,10 @@ msgid "You can now select these coordinates from the \"Saved cross profiles\" menu to restore this cross profile." msgstr "" -#: src/store/map.js:416 +#: src/store/map.js:415 msgid "Length" msgstr "" -#: src/store/map.js:437 +#: src/store/map.js:436 msgid "Area" msgstr ""
--- a/client/src/locale/hr_HR/LC_MESSAGES/app.po Fri Jan 18 16:52:20 2019 +0100 +++ b/client/src/locale/hr_HR/LC_MESSAGES/app.po Fri Jan 18 17:10:16 2019 +0100 @@ -7,15 +7,16 @@ msgstr "" "Project-Id-Version: gemmajs 1.99.0-dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-18 16:13+0100\n" -"PO-Revision-Date: 2018-12-05 12:23+0100\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"POT-Creation-Date: 2019-01-17 15:56+0100\n" +"PO-Revision-Date: 2019-01-17 13:37+0000\n" +"Last-Translator: Fadi Abbud <fadi.abbud@intevation.de>\n" +"Language-Team: Croatian <https://hosted.weblate.org/projects/gemma/client/hr/>\n" "Language: hr_HR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 3.4-dev\n" #: src/components/Pdftool.vue:402 msgid "– printed by:" @@ -37,15 +38,15 @@ msgid "Add User" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:472 +#: src/components/importschedule/Importscheduledetail.vue:585 msgid "April" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:449 +#: src/components/importschedule/Importscheduledetail.vue:562 msgid "at" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:476 +#: src/components/importschedule/Importscheduledetail.vue:589 msgid "August" msgstr "" @@ -77,21 +78,22 @@ #: src/components/importschedule/Importschedule.vue:167 #: src/components/importschedule/Importschedule.vue:176 #: src/components/importschedule/Importschedule.vue:198 -#: src/components/importschedule/Importscheduledetail.vue:656 -#: src/components/importschedule/Importscheduledetail.vue:724 -#: src/components/importschedule/Importscheduledetail.vue:752 +#: src/components/importschedule/Importscheduledetail.vue:794 +#: src/components/importschedule/Importscheduledetail.vue:881 +#: src/components/importschedule/Importscheduledetail.vue:909 #: src/components/staging/StagingDetail.vue:246 #: src/components/usermanagement/Userdetail.vue:304 #: src/components/usermanagement/Userdetail.vue:376 #: src/components/usermanagement/Usermanagement.vue:298 #: src/components/usermanagement/Usermanagement.vue:306 #: src/components/usermanagement/Usermanagement.vue:340 -#: src/components/importschedule/Importscheduledetail.vue:716 -#: src/components/importschedule/Importscheduledetail.vue:744 +#: src/components/importschedule/Importscheduledetail.vue:873 +#: src/components/importschedule/Importscheduledetail.vue:901 msgid "Backend Error" msgstr "" #: src/components/ImportSoundingresults.vue:16 +#, fuzzy msgid "Bottleneck" msgstr "" @@ -128,7 +130,7 @@ msgstr "" #: src/components/Pdftool.vue:18 -msgid "Choose format:" +msgid "Chose format:" msgstr "" #: src/components/fairway/Profiles.vue:64 @@ -150,9 +152,14 @@ #: src/components/usermanagement/Userdetail.vue:33 msgid "Country" -msgstr "" +msgstr "Država" -#: src/components/importschedule/Importscheduledetail.vue:382 +#: src/components/ImportStretches.vue:166 +#, fuzzy +msgid "Countrycode" +msgstr "Država" + +#: src/components/importschedule/Importscheduledetail.vue:495 msgid "Cronstring" msgstr "" @@ -162,19 +169,15 @@ msgid "Date" msgstr "" -#: src/components/ImportStretches.vue:127 +#: src/components/ImportStretches.vue:129 msgid "Date info" msgstr "" -#: src/components/Pdftool.vue:398 -msgid "Date of publication:" -msgstr "" - -#: src/components/importschedule/Importscheduledetail.vue:454 +#: src/components/importschedule/Importscheduledetail.vue:567 msgid "day" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:480 +#: src/components/importschedule/Importscheduledetail.vue:593 msgid "December" msgstr "" @@ -190,6 +193,10 @@ msgid "Deleted import: #" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:219 +msgid "Depth" +msgstr "" + #: src/components/ImportSoundingresults.vue:52 msgid "Depthreference" msgstr "" @@ -204,17 +211,18 @@ #: src/components/importschedule/Importschedule.vue:37 msgid "Email" -msgstr "" +msgstr "E-mail" #: src/components/usermanagement/Userdetail.vue:59 msgid "Email address" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:50 +#: src/components/importschedule/Importscheduledetail.vue:53 +#, fuzzy msgid "Email Notification" msgstr "" -#: src/components/ImportStretches.vue:64 +#: src/components/ImportStretches.vue:66 msgid "End rhm" msgstr "" @@ -246,7 +254,7 @@ msgid "Errorlog" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:445 +#: src/components/importschedule/Importscheduledetail.vue:558 msgid "Every" msgstr "" @@ -255,14 +263,14 @@ msgstr "" #: src/components/importschedule/Importscheduledetail.vue:40 -msgid "Fairwaydimensions" +msgid "Fairwaydimension" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:155 +#: src/components/importschedule/Importscheduledetail.vue:158 msgid "Featuretype" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:470 +#: src/components/importschedule/Importscheduledetail.vue:583 msgid "February" msgstr "" @@ -270,7 +278,7 @@ msgid "Forgot password" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:464 +#: src/components/importschedule/Importscheduledetail.vue:577 msgid "Friday" msgstr "" @@ -282,11 +290,11 @@ msgid "Gauge measurement" msgstr "" -#: src/components/Pdftool.vue:10 src/components/Pdftool.vue:60 +#: src/components/Pdftool.vue:10 src/components/Pdftool.vue:53 msgid "Generate PDF" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:453 +#: src/components/importschedule/Importscheduledetail.vue:566 msgid "hour" msgstr "" @@ -306,10 +314,10 @@ #: src/components/ImportSoundingresults.vue:278 #: src/components/ImportWaterwayProfiles.vue:88 src/components/Sidebar.vue:56 #: src/components/importschedule/Importschedule.vue:33 -#: src/components/importschedule/Importscheduledetail.vue:519 -#: src/components/importschedule/Importscheduledetail.vue:649 -#: src/components/importschedule/Importscheduledetail.vue:709 -#: src/components/importschedule/Importscheduledetail.vue:737 +#: src/components/importschedule/Importscheduledetail.vue:632 +#: src/components/importschedule/Importscheduledetail.vue:787 +#: src/components/importschedule/Importscheduledetail.vue:866 +#: src/components/importschedule/Importscheduledetail.vue:894 msgid "Import" msgstr "" @@ -350,7 +358,7 @@ msgid "Imports" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:81 +#: src/components/importschedule/Importscheduledetail.vue:84 msgid "Insecure" msgstr "" @@ -362,23 +370,23 @@ msgid "Invalid input" msgstr "" -#: src/components/Pdftool.vue:29 +#: src/components/Pdftool.vue:24 msgid "ISO A3" msgstr "" -#: src/components/Pdftool.vue:30 +#: src/components/Pdftool.vue:25 msgid "ISO A4" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:469 +#: src/components/importschedule/Importscheduledetail.vue:582 msgid "January" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:475 +#: src/components/importschedule/Importscheduledetail.vue:588 msgid "July" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:474 +#: src/components/importschedule/Importscheduledetail.vue:587 msgid "June" msgstr "" @@ -401,7 +409,7 @@ #: src/components/layers/Layers.vue:10 msgid "Layers" -msgstr "" +msgstr "Slojevi" #: src/components/Login.vue:58 msgid "Login" @@ -419,26 +427,35 @@ msgid "Logs" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:199 +msgid "LOS" +msgstr "" + #: src/components/usermanagement/Userdetail.vue:140 msgid "Mail was sent" msgstr "" #: src/components/importschedule/Importschedule.vue:161 -#: src/components/importschedule/Importscheduledetail.vue:650 +#: src/components/importschedule/Importscheduledetail.vue:788 msgid "Manually triggered import: #" msgstr "" #: src/components/Sidebar.vue:15 msgid "Map" -msgstr "" +msgstr "Karta" -#: src/components/importschedule/Importscheduledetail.vue:471 +#: src/components/importschedule/Importscheduledetail.vue:584 msgid "March" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:473 +#: src/components/importschedule/Importscheduledetail.vue:261 +msgid "MaxWidth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:586 +#, fuzzy msgid "May" -msgstr "" +msgstr "Karta" #: src/components/Bottlenecks.vue:20 msgid "Measurement" @@ -448,32 +465,36 @@ msgid "Message" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:446 +#: src/components/importschedule/Importscheduledetail.vue:559 msgid "minutes past" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:460 +#: src/components/importschedule/Importscheduledetail.vue:239 +msgid "MinWidth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:573 msgid "Monday" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:456 +#: src/components/importschedule/Importscheduledetail.vue:569 msgid "month" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:247 +#: src/components/importschedule/Importscheduledetail.vue:360 msgid "Monthly" msgstr "" #: src/components/Bottlenecks.vue:9 src/components/staging/Staging.vue:11 msgid "Name" -msgstr "" +msgstr "Naziv" -#: src/components/ImportStretches.vue:108 +#: src/components/ImportStretches.vue:110 msgid "National Object name" msgstr "" #: src/components/importschedule/Importschedule.vue:93 -#: src/components/importschedule/Importscheduledetail.vue:520 +#: src/components/importschedule/Importscheduledetail.vue:633 msgid "New Import" msgstr "" @@ -489,35 +510,35 @@ msgid "No scheduled imports" msgstr "" -#: src/components/ImportStretches.vue:210 +#: src/components/ImportStretches.vue:273 msgid "Not implemented!" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:479 +#: src/components/importschedule/Importscheduledetail.vue:592 msgid "November" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:450 +#: src/components/importschedule/Importscheduledetail.vue:563 msgid "o' clock" msgstr "" -#: src/components/ImportStretches.vue:91 +#: src/components/ImportStretches.vue:93 msgid "Object name" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:478 +#: src/components/importschedule/Importscheduledetail.vue:591 msgid "October" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:448 +#: src/components/importschedule/Importscheduledetail.vue:561 msgid "of" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:447 +#: src/components/importschedule/Importscheduledetail.vue:560 msgid "on" msgstr "" -#: src/components/Pdftool.vue:18 +#: src/components/Pdftool.vue:45 msgid "Open in new window" msgstr "" @@ -525,7 +546,7 @@ msgid "password" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:134 +#: src/components/importschedule/Importscheduledetail.vue:137 #: src/components/usermanagement/Userdetail.vue:235 msgid "Password" msgstr "" @@ -553,26 +574,48 @@ #: src/components/usermanagement/Userdetail.vue:331 msgid "Please choose a country" -msgstr "" +msgstr "Odaberite zemlju" #: src/components/usermanagement/Userdetail.vue:336 msgid "Please choose a role" msgstr "" +#: src/components/ImportStretches.vue:177 +#, fuzzy +msgid "Please enter a countrycode" +msgstr "Odaberite zemlju" + #: src/components/ImportSoundingresults.vue:84 -#: src/components/ImportStretches.vue:138 +#: src/components/ImportStretches.vue:140 msgid "Please enter a date" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:167 +#: src/components/importschedule/Importscheduledetail.vue:228 +msgid "Please enter a depth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:170 msgid "Please enter a Featuretype" msgstr "" -#: src/components/ImportStretches.vue:32 +#: src/components/ImportStretches.vue:34 +#, fuzzy msgid "Please enter a function" +msgstr "Odaberite zemlju" + +#: src/components/importschedule/Importscheduledetail.vue:210 +msgid "Please enter a level of service" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:142 +#: src/components/importschedule/Importscheduledetail.vue:274 +msgid "Please enter a maximum width" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:252 +msgid "Please enter a minimum width" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:145 msgid "Please enter a Password" msgstr "" @@ -584,23 +627,24 @@ msgid "Please enter a reference" msgstr "" -#: src/components/ImportStretches.vue:154 +#: src/components/ImportStretches.vue:156 +#, fuzzy msgid "Please enter a source" msgstr "" -#: src/components/ImportStretches.vue:59 +#: src/components/ImportStretches.vue:61 msgid "Please enter a start point" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:106 +#: src/components/importschedule/Importscheduledetail.vue:109 msgid "Please enter a URL" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:125 +#: src/components/importschedule/Importscheduledetail.vue:128 msgid "Please enter a Username" msgstr "" -#: src/components/ImportStretches.vue:84 +#: src/components/ImportStretches.vue:86 msgid "Please enter an end point" msgstr "" @@ -608,8 +652,8 @@ msgid "Please enter an id" msgstr "" -#: src/components/ImportStretches.vue:102 -#: src/components/ImportStretches.vue:120 +#: src/components/ImportStretches.vue:104 +#: src/components/ImportStretches.vue:122 msgid "Please enter an objectname" msgstr "" @@ -618,7 +662,7 @@ msgid "Please enter correct coordinates in the format: Lat,Lon,Lat,Lon" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:184 +#: src/components/importschedule/Importscheduledetail.vue:187 msgid "Please enter SortBy" msgstr "" @@ -671,7 +715,7 @@ msgid "Role" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:465 +#: src/components/importschedule/Importscheduledetail.vue:578 msgid "Saturday" msgstr "" @@ -679,16 +723,16 @@ msgid "Saved cross profiles" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:710 +#: src/components/importschedule/Importscheduledetail.vue:867 msgid "Saved import: #" msgstr "" #: src/components/importschedule/Importschedule.vue:36 -#: src/components/importschedule/Importscheduledetail.vue:238 +#: src/components/importschedule/Importscheduledetail.vue:351 msgid "Schedule" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:196 +#: src/components/importschedule/Importscheduledetail.vue:309 msgid "Scheduled" msgstr "" @@ -696,7 +740,7 @@ msgid "Section" msgstr "" -#: src/components/ImportStretches.vue:209 +#: src/components/ImportStretches.vue:272 msgid "Sections" msgstr "" @@ -712,7 +756,7 @@ msgid "Send testmail" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:477 +#: src/components/importschedule/Importscheduledetail.vue:590 msgid "September" msgstr "" @@ -720,7 +764,7 @@ msgid "Signer" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:216 +#: src/components/importschedule/Importscheduledetail.vue:329 msgid "Simple Schedule" msgstr "" @@ -731,7 +775,7 @@ " contributors." msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:176 +#: src/components/importschedule/Importscheduledetail.vue:179 msgid "SortBy" msgstr "" @@ -739,10 +783,14 @@ msgid "Sounding Result" msgstr "" -#: src/components/ImportStretches.vue:143 +#: src/components/ImportStretches.vue:145 msgid "Source" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:285 +msgid "Source orgranization" +msgstr "" + #: src/components/Identify.vue:57 msgid "source-code" msgstr "" @@ -759,7 +807,7 @@ msgid "Start" msgstr "" -#: src/components/ImportStretches.vue:39 +#: src/components/ImportStretches.vue:41 msgid "Start rhm" msgstr "" @@ -776,12 +824,12 @@ msgid "State" msgstr "" -#: src/components/ImportStretches.vue:28 +#: src/components/ImportStretches.vue:29 msgid "Stretch" msgstr "" -#: src/components/ImportStretches.vue:166 -#: src/components/importschedule/Importscheduledetail.vue:394 +#: src/components/ImportStretches.vue:190 +#: src/components/importschedule/Importscheduledetail.vue:507 #: src/components/usermanagement/Userdetail.vue:129 msgid "Submit" msgstr "" @@ -794,7 +842,7 @@ msgid "Successful" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:466 +#: src/components/importschedule/Importscheduledetail.vue:579 msgid "Sunday" msgstr "" @@ -820,30 +868,30 @@ " %{ license } without warranty, see docs for details." msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:463 +#: src/components/importschedule/Importscheduledetail.vue:576 msgid "Thursday" msgstr "" #: src/components/ImportApprovedGaugeMeasurement.vue:45 #: src/components/ImportWaterwayProfiles.vue:43 -#: src/components/importschedule/Importscheduledetail.vue:407 +#: src/components/importschedule/Importscheduledetail.vue:520 msgid "Trigger import" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:461 +#: src/components/importschedule/Importscheduledetail.vue:574 msgid "Tuesday" msgstr "" #: src/components/importschedule/Importschedule.vue:34 #: src/components/staging/Staging.vue:12 msgid "Type" -msgstr "" +msgstr "Tip" #: src/components/ImportWaterwayProfiles.vue:89 msgid "under construction" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:738 +#: src/components/importschedule/Importscheduledetail.vue:895 msgid "update import: #" msgstr "" @@ -851,7 +899,7 @@ msgid "Upload" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:72 +#: src/components/importschedule/Importscheduledetail.vue:75 msgid "URL" msgstr "" @@ -859,7 +907,7 @@ msgid "User" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:117 +#: src/components/importschedule/Importscheduledetail.vue:120 #: src/components/staging/Staging.vue:18 #: src/components/usermanagement/Userdetail.vue:14 msgid "Username" @@ -899,19 +947,19 @@ msgid "Waterwayarea" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:462 +#: src/components/importschedule/Importscheduledetail.vue:575 msgid "Wednesday" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:455 +#: src/components/importschedule/Importscheduledetail.vue:568 msgid "week" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:246 +#: src/components/importschedule/Importscheduledetail.vue:359 msgid "Weekly" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:457 +#: src/components/importschedule/Importscheduledetail.vue:570 msgid "year" msgstr "" @@ -920,10 +968,10 @@ msgid "You can now select these coordinates from the \"Saved cross profiles\" menu to restore this cross profile." msgstr "" -#: src/store/map.js:416 +#: src/store/map.js:415 msgid "Length" msgstr "" -#: src/store/map.js:437 +#: src/store/map.js:436 msgid "Area" msgstr ""
--- a/client/src/locale/hu_HU/LC_MESSAGES/app.po Fri Jan 18 16:52:20 2019 +0100 +++ b/client/src/locale/hu_HU/LC_MESSAGES/app.po Fri Jan 18 17:10:16 2019 +0100 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: gemmajs 1.99.0-dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-18 16:13+0100\n" +"POT-Creation-Date: 2019-01-17 15:56+0100\n" "PO-Revision-Date: 2018-12-05 12:23+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -17,11 +17,7 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/components/Pdftool.vue:402 -msgid "– printed by:" -msgstr "" - -#: src/components/importschedule/Importscheduledetail.vue:452 +#: src/components/importschedule/Importscheduledetail.vue:565 msgid "15 minutes" msgstr "" @@ -37,15 +33,15 @@ msgid "Add User" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:472 +#: src/components/importschedule/Importscheduledetail.vue:585 msgid "April" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:449 +#: src/components/importschedule/Importscheduledetail.vue:562 msgid "at" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:476 +#: src/components/importschedule/Importscheduledetail.vue:589 msgid "August" msgstr "" @@ -77,17 +73,17 @@ #: src/components/importschedule/Importschedule.vue:167 #: src/components/importschedule/Importschedule.vue:176 #: src/components/importschedule/Importschedule.vue:198 -#: src/components/importschedule/Importscheduledetail.vue:656 -#: src/components/importschedule/Importscheduledetail.vue:724 -#: src/components/importschedule/Importscheduledetail.vue:752 +#: src/components/importschedule/Importscheduledetail.vue:794 +#: src/components/importschedule/Importscheduledetail.vue:881 +#: src/components/importschedule/Importscheduledetail.vue:909 #: src/components/staging/StagingDetail.vue:246 #: src/components/usermanagement/Userdetail.vue:304 #: src/components/usermanagement/Userdetail.vue:376 #: src/components/usermanagement/Usermanagement.vue:298 #: src/components/usermanagement/Usermanagement.vue:306 #: src/components/usermanagement/Usermanagement.vue:340 -#: src/components/importschedule/Importscheduledetail.vue:716 -#: src/components/importschedule/Importscheduledetail.vue:744 +#: src/components/importschedule/Importscheduledetail.vue:873 +#: src/components/importschedule/Importscheduledetail.vue:901 msgid "Backend Error" msgstr "" @@ -128,7 +124,7 @@ msgstr "" #: src/components/Pdftool.vue:18 -msgid "Choose format:" +msgid "Chose format:" msgstr "" #: src/components/fairway/Profiles.vue:64 @@ -152,7 +148,11 @@ msgid "Country" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:382 +#: src/components/ImportStretches.vue:166 +msgid "Countrycode" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:495 msgid "Cronstring" msgstr "" @@ -162,19 +162,15 @@ msgid "Date" msgstr "" -#: src/components/ImportStretches.vue:127 +#: src/components/ImportStretches.vue:129 msgid "Date info" msgstr "" -#: src/components/Pdftool.vue:398 -msgid "Date of publication:" -msgstr "" - -#: src/components/importschedule/Importscheduledetail.vue:454 +#: src/components/importschedule/Importscheduledetail.vue:567 msgid "day" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:480 +#: src/components/importschedule/Importscheduledetail.vue:593 msgid "December" msgstr "" @@ -190,6 +186,10 @@ msgid "Deleted import: #" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:219 +msgid "Depth" +msgstr "" + #: src/components/ImportSoundingresults.vue:52 msgid "Depthreference" msgstr "" @@ -210,11 +210,11 @@ msgid "Email address" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:50 +#: src/components/importschedule/Importscheduledetail.vue:53 msgid "Email Notification" msgstr "" -#: src/components/ImportStretches.vue:64 +#: src/components/ImportStretches.vue:66 msgid "End rhm" msgstr "" @@ -246,7 +246,7 @@ msgid "Errorlog" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:445 +#: src/components/importschedule/Importscheduledetail.vue:558 msgid "Every" msgstr "" @@ -255,14 +255,14 @@ msgstr "" #: src/components/importschedule/Importscheduledetail.vue:40 -msgid "Fairwaydimensions" +msgid "Fairwaydimension" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:155 +#: src/components/importschedule/Importscheduledetail.vue:158 msgid "Featuretype" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:470 +#: src/components/importschedule/Importscheduledetail.vue:583 msgid "February" msgstr "" @@ -270,7 +270,7 @@ msgid "Forgot password" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:464 +#: src/components/importschedule/Importscheduledetail.vue:577 msgid "Friday" msgstr "" @@ -282,11 +282,11 @@ msgid "Gauge measurement" msgstr "" -#: src/components/Pdftool.vue:10 src/components/Pdftool.vue:60 +#: src/components/Pdftool.vue:10 src/components/Pdftool.vue:53 msgid "Generate PDF" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:453 +#: src/components/importschedule/Importscheduledetail.vue:566 msgid "hour" msgstr "" @@ -306,10 +306,10 @@ #: src/components/ImportSoundingresults.vue:278 #: src/components/ImportWaterwayProfiles.vue:88 src/components/Sidebar.vue:56 #: src/components/importschedule/Importschedule.vue:33 -#: src/components/importschedule/Importscheduledetail.vue:519 -#: src/components/importschedule/Importscheduledetail.vue:649 -#: src/components/importschedule/Importscheduledetail.vue:709 -#: src/components/importschedule/Importscheduledetail.vue:737 +#: src/components/importschedule/Importscheduledetail.vue:632 +#: src/components/importschedule/Importscheduledetail.vue:787 +#: src/components/importschedule/Importscheduledetail.vue:866 +#: src/components/importschedule/Importscheduledetail.vue:894 msgid "Import" msgstr "" @@ -350,7 +350,7 @@ msgid "Imports" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:81 +#: src/components/importschedule/Importscheduledetail.vue:84 msgid "Insecure" msgstr "" @@ -362,23 +362,23 @@ msgid "Invalid input" msgstr "" -#: src/components/Pdftool.vue:29 +#: src/components/Pdftool.vue:24 msgid "ISO A3" msgstr "" -#: src/components/Pdftool.vue:30 +#: src/components/Pdftool.vue:25 msgid "ISO A4" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:469 +#: src/components/importschedule/Importscheduledetail.vue:582 msgid "January" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:475 +#: src/components/importschedule/Importscheduledetail.vue:588 msgid "July" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:474 +#: src/components/importschedule/Importscheduledetail.vue:587 msgid "June" msgstr "" @@ -419,12 +419,16 @@ msgid "Logs" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:199 +msgid "LOS" +msgstr "" + #: src/components/usermanagement/Userdetail.vue:140 msgid "Mail was sent" msgstr "" #: src/components/importschedule/Importschedule.vue:161 -#: src/components/importschedule/Importscheduledetail.vue:650 +#: src/components/importschedule/Importscheduledetail.vue:788 msgid "Manually triggered import: #" msgstr "" @@ -432,11 +436,15 @@ msgid "Map" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:471 +#: src/components/importschedule/Importscheduledetail.vue:584 msgid "March" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:473 +#: src/components/importschedule/Importscheduledetail.vue:261 +msgid "MaxWidth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:586 msgid "May" msgstr "" @@ -448,19 +456,23 @@ msgid "Message" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:446 +#: src/components/importschedule/Importscheduledetail.vue:559 msgid "minutes past" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:460 +#: src/components/importschedule/Importscheduledetail.vue:239 +msgid "MinWidth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:573 msgid "Monday" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:456 +#: src/components/importschedule/Importscheduledetail.vue:569 msgid "month" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:247 +#: src/components/importschedule/Importscheduledetail.vue:360 msgid "Monthly" msgstr "" @@ -468,12 +480,12 @@ msgid "Name" msgstr "" -#: src/components/ImportStretches.vue:108 +#: src/components/ImportStretches.vue:110 msgid "National Object name" msgstr "" #: src/components/importschedule/Importschedule.vue:93 -#: src/components/importschedule/Importscheduledetail.vue:520 +#: src/components/importschedule/Importscheduledetail.vue:633 msgid "New Import" msgstr "" @@ -489,35 +501,35 @@ msgid "No scheduled imports" msgstr "" -#: src/components/ImportStretches.vue:210 +#: src/components/ImportStretches.vue:273 msgid "Not implemented!" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:479 +#: src/components/importschedule/Importscheduledetail.vue:592 msgid "November" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:450 +#: src/components/importschedule/Importscheduledetail.vue:563 msgid "o' clock" msgstr "" -#: src/components/ImportStretches.vue:91 +#: src/components/ImportStretches.vue:93 msgid "Object name" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:478 +#: src/components/importschedule/Importscheduledetail.vue:591 msgid "October" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:448 +#: src/components/importschedule/Importscheduledetail.vue:561 msgid "of" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:447 +#: src/components/importschedule/Importscheduledetail.vue:560 msgid "on" msgstr "" -#: src/components/Pdftool.vue:18 +#: src/components/Pdftool.vue:45 msgid "Open in new window" msgstr "" @@ -525,7 +537,7 @@ msgid "password" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:134 +#: src/components/importschedule/Importscheduledetail.vue:137 #: src/components/usermanagement/Userdetail.vue:235 msgid "Password" msgstr "" @@ -559,20 +571,40 @@ msgid "Please choose a role" msgstr "" +#: src/components/ImportStretches.vue:177 +msgid "Please enter a countrycode" +msgstr "" + #: src/components/ImportSoundingresults.vue:84 -#: src/components/ImportStretches.vue:138 +#: src/components/ImportStretches.vue:140 msgid "Please enter a date" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:167 +#: src/components/importschedule/Importscheduledetail.vue:228 +msgid "Please enter a depth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:170 msgid "Please enter a Featuretype" msgstr "" -#: src/components/ImportStretches.vue:32 +#: src/components/ImportStretches.vue:34 msgid "Please enter a function" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:142 +#: src/components/importschedule/Importscheduledetail.vue:210 +msgid "Please enter a level of service" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:274 +msgid "Please enter a maximum width" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:252 +msgid "Please enter a minimum width" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:145 msgid "Please enter a Password" msgstr "" @@ -584,23 +616,27 @@ msgid "Please enter a reference" msgstr "" -#: src/components/ImportStretches.vue:154 +#: src/components/ImportStretches.vue:156 msgid "Please enter a source" msgstr "" -#: src/components/ImportStretches.vue:59 +#: src/components/importschedule/Importscheduledetail.vue:297 +msgid "Please enter a source orgranization" +msgstr "" + +#: src/components/ImportStretches.vue:61 msgid "Please enter a start point" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:106 +#: src/components/importschedule/Importscheduledetail.vue:109 msgid "Please enter a URL" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:125 +#: src/components/importschedule/Importscheduledetail.vue:128 msgid "Please enter a Username" msgstr "" -#: src/components/ImportStretches.vue:84 +#: src/components/ImportStretches.vue:86 msgid "Please enter an end point" msgstr "" @@ -608,8 +644,8 @@ msgid "Please enter an id" msgstr "" -#: src/components/ImportStretches.vue:102 -#: src/components/ImportStretches.vue:120 +#: src/components/ImportStretches.vue:104 +#: src/components/ImportStretches.vue:122 msgid "Please enter an objectname" msgstr "" @@ -618,7 +654,7 @@ msgid "Please enter correct coordinates in the format: Lat,Lon,Lat,Lon" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:184 +#: src/components/importschedule/Importscheduledetail.vue:187 msgid "Please enter SortBy" msgstr "" @@ -671,7 +707,7 @@ msgid "Role" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:465 +#: src/components/importschedule/Importscheduledetail.vue:578 msgid "Saturday" msgstr "" @@ -679,16 +715,16 @@ msgid "Saved cross profiles" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:710 +#: src/components/importschedule/Importscheduledetail.vue:867 msgid "Saved import: #" msgstr "" #: src/components/importschedule/Importschedule.vue:36 -#: src/components/importschedule/Importscheduledetail.vue:238 +#: src/components/importschedule/Importscheduledetail.vue:351 msgid "Schedule" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:196 +#: src/components/importschedule/Importscheduledetail.vue:309 msgid "Scheduled" msgstr "" @@ -696,7 +732,7 @@ msgid "Section" msgstr "" -#: src/components/ImportStretches.vue:209 +#: src/components/ImportStretches.vue:272 msgid "Sections" msgstr "" @@ -712,7 +748,7 @@ msgid "Send testmail" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:477 +#: src/components/importschedule/Importscheduledetail.vue:590 msgid "September" msgstr "" @@ -720,7 +756,7 @@ msgid "Signer" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:216 +#: src/components/importschedule/Importscheduledetail.vue:329 msgid "Simple Schedule" msgstr "" @@ -731,7 +767,7 @@ " contributors." msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:176 +#: src/components/importschedule/Importscheduledetail.vue:179 msgid "SortBy" msgstr "" @@ -739,10 +775,14 @@ msgid "Sounding Result" msgstr "" -#: src/components/ImportStretches.vue:143 +#: src/components/ImportStretches.vue:145 msgid "Source" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:285 +msgid "Source orgranization" +msgstr "" + #: src/components/Identify.vue:57 msgid "source-code" msgstr "" @@ -759,7 +799,7 @@ msgid "Start" msgstr "" -#: src/components/ImportStretches.vue:39 +#: src/components/ImportStretches.vue:41 msgid "Start rhm" msgstr "" @@ -776,12 +816,12 @@ msgid "State" msgstr "" -#: src/components/ImportStretches.vue:28 +#: src/components/ImportStretches.vue:29 msgid "Stretch" msgstr "" -#: src/components/ImportStretches.vue:166 -#: src/components/importschedule/Importscheduledetail.vue:394 +#: src/components/ImportStretches.vue:190 +#: src/components/importschedule/Importscheduledetail.vue:507 #: src/components/usermanagement/Userdetail.vue:129 msgid "Submit" msgstr "" @@ -794,7 +834,7 @@ msgid "Successful" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:466 +#: src/components/importschedule/Importscheduledetail.vue:579 msgid "Sunday" msgstr "" @@ -820,17 +860,17 @@ " %{ license } without warranty, see docs for details." msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:463 +#: src/components/importschedule/Importscheduledetail.vue:576 msgid "Thursday" msgstr "" #: src/components/ImportApprovedGaugeMeasurement.vue:45 #: src/components/ImportWaterwayProfiles.vue:43 -#: src/components/importschedule/Importscheduledetail.vue:407 +#: src/components/importschedule/Importscheduledetail.vue:520 msgid "Trigger import" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:461 +#: src/components/importschedule/Importscheduledetail.vue:574 msgid "Tuesday" msgstr "" @@ -843,7 +883,7 @@ msgid "under construction" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:738 +#: src/components/importschedule/Importscheduledetail.vue:895 msgid "update import: #" msgstr "" @@ -851,7 +891,7 @@ msgid "Upload" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:72 +#: src/components/importschedule/Importscheduledetail.vue:75 msgid "URL" msgstr "" @@ -859,7 +899,7 @@ msgid "User" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:117 +#: src/components/importschedule/Importscheduledetail.vue:120 #: src/components/staging/Staging.vue:18 #: src/components/usermanagement/Userdetail.vue:14 msgid "Username" @@ -899,19 +939,19 @@ msgid "Waterwayarea" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:462 +#: src/components/importschedule/Importscheduledetail.vue:575 msgid "Wednesday" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:455 +#: src/components/importschedule/Importscheduledetail.vue:568 msgid "week" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:246 +#: src/components/importschedule/Importscheduledetail.vue:359 msgid "Weekly" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:457 +#: src/components/importschedule/Importscheduledetail.vue:570 msgid "year" msgstr "" @@ -920,10 +960,10 @@ msgid "You can now select these coordinates from the \"Saved cross profiles\" menu to restore this cross profile." msgstr "" -#: src/store/map.js:416 +#: src/store/map.js:415 msgid "Length" msgstr "" -#: src/store/map.js:437 +#: src/store/map.js:436 msgid "Area" msgstr ""
--- a/client/src/locale/ro_RO/LC_MESSAGES/app.po Fri Jan 18 16:52:20 2019 +0100 +++ b/client/src/locale/ro_RO/LC_MESSAGES/app.po Fri Jan 18 17:10:16 2019 +0100 @@ -7,15 +7,16 @@ msgstr "" "Project-Id-Version: gemmajs 1.99.0-dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-18 16:13+0100\n" -"PO-Revision-Date: 2018-12-05 12:23+0100\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"POT-Creation-Date: 2019-01-17 15:56+0100\n" +"PO-Revision-Date: 2019-01-17 13:37+0000\n" +"Last-Translator: Fadi Abbud <fadi.abbud@intevation.de>\n" +"Language-Team: Romanian <https://hosted.weblate.org/projects/gemma/client/ro/>\n" "Language: ro_RO\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\n" +"X-Generator: Weblate 3.4-dev\n" #: src/components/Pdftool.vue:402 msgid "– printed by:" @@ -37,15 +38,15 @@ msgid "Add User" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:472 +#: src/components/importschedule/Importscheduledetail.vue:585 msgid "April" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:449 +#: src/components/importschedule/Importscheduledetail.vue:562 msgid "at" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:476 +#: src/components/importschedule/Importscheduledetail.vue:589 msgid "August" msgstr "" @@ -77,23 +78,23 @@ #: src/components/importschedule/Importschedule.vue:167 #: src/components/importschedule/Importschedule.vue:176 #: src/components/importschedule/Importschedule.vue:198 -#: src/components/importschedule/Importscheduledetail.vue:656 -#: src/components/importschedule/Importscheduledetail.vue:724 -#: src/components/importschedule/Importscheduledetail.vue:752 +#: src/components/importschedule/Importscheduledetail.vue:794 +#: src/components/importschedule/Importscheduledetail.vue:881 +#: src/components/importschedule/Importscheduledetail.vue:909 #: src/components/staging/StagingDetail.vue:246 #: src/components/usermanagement/Userdetail.vue:304 #: src/components/usermanagement/Userdetail.vue:376 #: src/components/usermanagement/Usermanagement.vue:298 #: src/components/usermanagement/Usermanagement.vue:306 #: src/components/usermanagement/Usermanagement.vue:340 -#: src/components/importschedule/Importscheduledetail.vue:716 -#: src/components/importschedule/Importscheduledetail.vue:744 +#: src/components/importschedule/Importscheduledetail.vue:873 +#: src/components/importschedule/Importscheduledetail.vue:901 msgid "Backend Error" msgstr "" #: src/components/ImportSoundingresults.vue:16 msgid "Bottleneck" -msgstr "" +msgstr "Puncte critice" #: src/components/Systemconfiguration.vue:19 msgid "Bottleneck Areas fill-color" @@ -128,7 +129,7 @@ msgstr "" #: src/components/Pdftool.vue:18 -msgid "Choose format:" +msgid "Chose format:" msgstr "" #: src/components/fairway/Profiles.vue:64 @@ -150,9 +151,14 @@ #: src/components/usermanagement/Userdetail.vue:33 msgid "Country" -msgstr "" +msgstr "Tara" -#: src/components/importschedule/Importscheduledetail.vue:382 +#: src/components/ImportStretches.vue:166 +#, fuzzy +msgid "Countrycode" +msgstr "Tara" + +#: src/components/importschedule/Importscheduledetail.vue:495 msgid "Cronstring" msgstr "" @@ -162,19 +168,15 @@ msgid "Date" msgstr "" -#: src/components/ImportStretches.vue:127 +#: src/components/ImportStretches.vue:129 msgid "Date info" msgstr "" -#: src/components/Pdftool.vue:398 -msgid "Date of publication:" -msgstr "" - -#: src/components/importschedule/Importscheduledetail.vue:454 +#: src/components/importschedule/Importscheduledetail.vue:567 msgid "day" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:480 +#: src/components/importschedule/Importscheduledetail.vue:593 msgid "December" msgstr "" @@ -190,6 +192,10 @@ msgid "Deleted import: #" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:219 +msgid "Depth" +msgstr "" + #: src/components/ImportSoundingresults.vue:52 msgid "Depthreference" msgstr "" @@ -204,17 +210,18 @@ #: src/components/importschedule/Importschedule.vue:37 msgid "Email" -msgstr "" +msgstr "E-mail" #: src/components/usermanagement/Userdetail.vue:59 msgid "Email address" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:50 +#: src/components/importschedule/Importscheduledetail.vue:53 +#, fuzzy msgid "Email Notification" msgstr "" -#: src/components/ImportStretches.vue:64 +#: src/components/ImportStretches.vue:66 msgid "End rhm" msgstr "" @@ -246,7 +253,7 @@ msgid "Errorlog" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:445 +#: src/components/importschedule/Importscheduledetail.vue:558 msgid "Every" msgstr "" @@ -255,14 +262,14 @@ msgstr "" #: src/components/importschedule/Importscheduledetail.vue:40 -msgid "Fairwaydimensions" +msgid "Fairwaydimension" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:155 +#: src/components/importschedule/Importscheduledetail.vue:158 msgid "Featuretype" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:470 +#: src/components/importschedule/Importscheduledetail.vue:583 msgid "February" msgstr "" @@ -270,7 +277,7 @@ msgid "Forgot password" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:464 +#: src/components/importschedule/Importscheduledetail.vue:577 msgid "Friday" msgstr "" @@ -282,11 +289,11 @@ msgid "Gauge measurement" msgstr "" -#: src/components/Pdftool.vue:10 src/components/Pdftool.vue:60 +#: src/components/Pdftool.vue:10 src/components/Pdftool.vue:53 msgid "Generate PDF" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:453 +#: src/components/importschedule/Importscheduledetail.vue:566 msgid "hour" msgstr "" @@ -306,10 +313,10 @@ #: src/components/ImportSoundingresults.vue:278 #: src/components/ImportWaterwayProfiles.vue:88 src/components/Sidebar.vue:56 #: src/components/importschedule/Importschedule.vue:33 -#: src/components/importschedule/Importscheduledetail.vue:519 -#: src/components/importschedule/Importscheduledetail.vue:649 -#: src/components/importschedule/Importscheduledetail.vue:709 -#: src/components/importschedule/Importscheduledetail.vue:737 +#: src/components/importschedule/Importscheduledetail.vue:632 +#: src/components/importschedule/Importscheduledetail.vue:787 +#: src/components/importschedule/Importscheduledetail.vue:866 +#: src/components/importschedule/Importscheduledetail.vue:894 msgid "Import" msgstr "" @@ -350,7 +357,7 @@ msgid "Imports" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:81 +#: src/components/importschedule/Importscheduledetail.vue:84 msgid "Insecure" msgstr "" @@ -362,23 +369,23 @@ msgid "Invalid input" msgstr "" -#: src/components/Pdftool.vue:29 +#: src/components/Pdftool.vue:24 msgid "ISO A3" msgstr "" -#: src/components/Pdftool.vue:30 +#: src/components/Pdftool.vue:25 msgid "ISO A4" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:469 +#: src/components/importschedule/Importscheduledetail.vue:582 msgid "January" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:475 +#: src/components/importschedule/Importscheduledetail.vue:588 msgid "July" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:474 +#: src/components/importschedule/Importscheduledetail.vue:587 msgid "June" msgstr "" @@ -401,7 +408,7 @@ #: src/components/layers/Layers.vue:10 msgid "Layers" -msgstr "" +msgstr "Straturi" #: src/components/Login.vue:58 msgid "Login" @@ -419,12 +426,16 @@ msgid "Logs" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:199 +msgid "LOS" +msgstr "" + #: src/components/usermanagement/Userdetail.vue:140 msgid "Mail was sent" msgstr "" #: src/components/importschedule/Importschedule.vue:161 -#: src/components/importschedule/Importscheduledetail.vue:650 +#: src/components/importschedule/Importscheduledetail.vue:788 msgid "Manually triggered import: #" msgstr "" @@ -432,11 +443,15 @@ msgid "Map" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:471 +#: src/components/importschedule/Importscheduledetail.vue:584 msgid "March" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:473 +#: src/components/importschedule/Importscheduledetail.vue:261 +msgid "MaxWidth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:586 msgid "May" msgstr "" @@ -448,32 +463,36 @@ msgid "Message" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:446 +#: src/components/importschedule/Importscheduledetail.vue:559 msgid "minutes past" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:460 +#: src/components/importschedule/Importscheduledetail.vue:239 +msgid "MinWidth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:573 msgid "Monday" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:456 +#: src/components/importschedule/Importscheduledetail.vue:569 msgid "month" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:247 +#: src/components/importschedule/Importscheduledetail.vue:360 msgid "Monthly" msgstr "" #: src/components/Bottlenecks.vue:9 src/components/staging/Staging.vue:11 msgid "Name" -msgstr "" +msgstr "Nume" -#: src/components/ImportStretches.vue:108 +#: src/components/ImportStretches.vue:110 msgid "National Object name" msgstr "" #: src/components/importschedule/Importschedule.vue:93 -#: src/components/importschedule/Importscheduledetail.vue:520 +#: src/components/importschedule/Importscheduledetail.vue:633 msgid "New Import" msgstr "" @@ -489,35 +508,35 @@ msgid "No scheduled imports" msgstr "" -#: src/components/ImportStretches.vue:210 +#: src/components/ImportStretches.vue:273 msgid "Not implemented!" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:479 +#: src/components/importschedule/Importscheduledetail.vue:592 msgid "November" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:450 +#: src/components/importschedule/Importscheduledetail.vue:563 msgid "o' clock" msgstr "" -#: src/components/ImportStretches.vue:91 +#: src/components/ImportStretches.vue:93 msgid "Object name" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:478 +#: src/components/importschedule/Importscheduledetail.vue:591 msgid "October" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:448 +#: src/components/importschedule/Importscheduledetail.vue:561 msgid "of" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:447 +#: src/components/importschedule/Importscheduledetail.vue:560 msgid "on" msgstr "" -#: src/components/Pdftool.vue:18 +#: src/components/Pdftool.vue:45 msgid "Open in new window" msgstr "" @@ -525,7 +544,7 @@ msgid "password" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:134 +#: src/components/importschedule/Importscheduledetail.vue:137 #: src/components/usermanagement/Userdetail.vue:235 msgid "Password" msgstr "" @@ -553,26 +572,48 @@ #: src/components/usermanagement/Userdetail.vue:331 msgid "Please choose a country" -msgstr "" +msgstr "Selectați o țară" #: src/components/usermanagement/Userdetail.vue:336 msgid "Please choose a role" msgstr "" +#: src/components/ImportStretches.vue:177 +#, fuzzy +msgid "Please enter a countrycode" +msgstr "Selectați o țară" + #: src/components/ImportSoundingresults.vue:84 -#: src/components/ImportStretches.vue:138 +#: src/components/ImportStretches.vue:140 msgid "Please enter a date" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:167 +#: src/components/importschedule/Importscheduledetail.vue:228 +msgid "Please enter a depth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:170 msgid "Please enter a Featuretype" msgstr "" -#: src/components/ImportStretches.vue:32 +#: src/components/ImportStretches.vue:34 +#, fuzzy msgid "Please enter a function" +msgstr "Selectați o țară" + +#: src/components/importschedule/Importscheduledetail.vue:210 +msgid "Please enter a level of service" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:142 +#: src/components/importschedule/Importscheduledetail.vue:274 +msgid "Please enter a maximum width" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:252 +msgid "Please enter a minimum width" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:145 msgid "Please enter a Password" msgstr "" @@ -584,23 +625,24 @@ msgid "Please enter a reference" msgstr "" -#: src/components/ImportStretches.vue:154 +#: src/components/ImportStretches.vue:156 +#, fuzzy msgid "Please enter a source" msgstr "" -#: src/components/ImportStretches.vue:59 +#: src/components/ImportStretches.vue:61 msgid "Please enter a start point" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:106 +#: src/components/importschedule/Importscheduledetail.vue:109 msgid "Please enter a URL" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:125 +#: src/components/importschedule/Importscheduledetail.vue:128 msgid "Please enter a Username" msgstr "" -#: src/components/ImportStretches.vue:84 +#: src/components/ImportStretches.vue:86 msgid "Please enter an end point" msgstr "" @@ -608,8 +650,8 @@ msgid "Please enter an id" msgstr "" -#: src/components/ImportStretches.vue:102 -#: src/components/ImportStretches.vue:120 +#: src/components/ImportStretches.vue:104 +#: src/components/ImportStretches.vue:122 msgid "Please enter an objectname" msgstr "" @@ -618,7 +660,7 @@ msgid "Please enter correct coordinates in the format: Lat,Lon,Lat,Lon" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:184 +#: src/components/importschedule/Importscheduledetail.vue:187 msgid "Please enter SortBy" msgstr "" @@ -671,7 +713,7 @@ msgid "Role" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:465 +#: src/components/importschedule/Importscheduledetail.vue:578 msgid "Saturday" msgstr "" @@ -679,16 +721,16 @@ msgid "Saved cross profiles" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:710 +#: src/components/importschedule/Importscheduledetail.vue:867 msgid "Saved import: #" msgstr "" #: src/components/importschedule/Importschedule.vue:36 -#: src/components/importschedule/Importscheduledetail.vue:238 +#: src/components/importschedule/Importscheduledetail.vue:351 msgid "Schedule" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:196 +#: src/components/importschedule/Importscheduledetail.vue:309 msgid "Scheduled" msgstr "" @@ -696,7 +738,7 @@ msgid "Section" msgstr "" -#: src/components/ImportStretches.vue:209 +#: src/components/ImportStretches.vue:272 msgid "Sections" msgstr "" @@ -712,7 +754,7 @@ msgid "Send testmail" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:477 +#: src/components/importschedule/Importscheduledetail.vue:590 msgid "September" msgstr "" @@ -720,7 +762,7 @@ msgid "Signer" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:216 +#: src/components/importschedule/Importscheduledetail.vue:329 msgid "Simple Schedule" msgstr "" @@ -731,7 +773,7 @@ " contributors." msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:176 +#: src/components/importschedule/Importscheduledetail.vue:179 msgid "SortBy" msgstr "" @@ -739,10 +781,14 @@ msgid "Sounding Result" msgstr "" -#: src/components/ImportStretches.vue:143 +#: src/components/ImportStretches.vue:145 msgid "Source" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:285 +msgid "Source orgranization" +msgstr "" + #: src/components/Identify.vue:57 msgid "source-code" msgstr "" @@ -759,7 +805,7 @@ msgid "Start" msgstr "" -#: src/components/ImportStretches.vue:39 +#: src/components/ImportStretches.vue:41 msgid "Start rhm" msgstr "" @@ -776,12 +822,12 @@ msgid "State" msgstr "" -#: src/components/ImportStretches.vue:28 +#: src/components/ImportStretches.vue:29 msgid "Stretch" msgstr "" -#: src/components/ImportStretches.vue:166 -#: src/components/importschedule/Importscheduledetail.vue:394 +#: src/components/ImportStretches.vue:190 +#: src/components/importschedule/Importscheduledetail.vue:507 #: src/components/usermanagement/Userdetail.vue:129 msgid "Submit" msgstr "" @@ -794,7 +840,7 @@ msgid "Successful" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:466 +#: src/components/importschedule/Importscheduledetail.vue:579 msgid "Sunday" msgstr "" @@ -820,30 +866,30 @@ " %{ license } without warranty, see docs for details." msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:463 +#: src/components/importschedule/Importscheduledetail.vue:576 msgid "Thursday" msgstr "" #: src/components/ImportApprovedGaugeMeasurement.vue:45 #: src/components/ImportWaterwayProfiles.vue:43 -#: src/components/importschedule/Importscheduledetail.vue:407 +#: src/components/importschedule/Importscheduledetail.vue:520 msgid "Trigger import" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:461 +#: src/components/importschedule/Importscheduledetail.vue:574 msgid "Tuesday" msgstr "" #: src/components/importschedule/Importschedule.vue:34 #: src/components/staging/Staging.vue:12 msgid "Type" -msgstr "" +msgstr "Tip" #: src/components/ImportWaterwayProfiles.vue:89 msgid "under construction" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:738 +#: src/components/importschedule/Importscheduledetail.vue:895 msgid "update import: #" msgstr "" @@ -851,7 +897,7 @@ msgid "Upload" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:72 +#: src/components/importschedule/Importscheduledetail.vue:75 msgid "URL" msgstr "" @@ -859,7 +905,7 @@ msgid "User" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:117 +#: src/components/importschedule/Importscheduledetail.vue:120 #: src/components/staging/Staging.vue:18 #: src/components/usermanagement/Userdetail.vue:14 msgid "Username" @@ -899,19 +945,19 @@ msgid "Waterwayarea" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:462 +#: src/components/importschedule/Importscheduledetail.vue:575 msgid "Wednesday" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:455 +#: src/components/importschedule/Importscheduledetail.vue:568 msgid "week" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:246 +#: src/components/importschedule/Importscheduledetail.vue:359 msgid "Weekly" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:457 +#: src/components/importschedule/Importscheduledetail.vue:570 msgid "year" msgstr "" @@ -920,10 +966,10 @@ msgid "You can now select these coordinates from the \"Saved cross profiles\" menu to restore this cross profile." msgstr "" -#: src/store/map.js:416 +#: src/store/map.js:415 msgid "Length" msgstr "" -#: src/store/map.js:437 +#: src/store/map.js:436 msgid "Area" msgstr ""
--- a/client/src/locale/sk_SK/LC_MESSAGES/app.po Fri Jan 18 16:52:20 2019 +0100 +++ b/client/src/locale/sk_SK/LC_MESSAGES/app.po Fri Jan 18 17:10:16 2019 +0100 @@ -1,21 +1,17 @@ -# English translations for wamosjs package. -# Copyright (C) 2018 THE wamosjs'S COPYRIGHT HOLDER -# This file is distributed under the same license as the wamosjs package. -# Automatically generated, 2018. -# msgid "" msgstr "" "Project-Id-Version: wamosjs 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-18 16:13+0100\n" -"PO-Revision-Date: 2018-07-03 17:18+0200\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"POT-Creation-Date: 2019-01-17 16:03+0100\n" +"PO-Revision-Date: 2019-01-16 16:25+0000\n" +"Last-Translator: Fadi Abbud <fadi.abbud@intevation.de>\n" +"Language-Team: Slovak <https://hosted.weblate.org/projects/gemma/client/sk/>\n" "Language: sk_SK\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Weblate 3.4-dev\n" #: src/components/Pdftool.vue:402 msgid "– printed by:" @@ -37,15 +33,15 @@ msgid "Add User" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:472 +#: src/components/importschedule/Importscheduledetail.vue:585 msgid "April" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:449 +#: src/components/importschedule/Importscheduledetail.vue:562 msgid "at" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:476 +#: src/components/importschedule/Importscheduledetail.vue:589 msgid "August" msgstr "" @@ -77,23 +73,23 @@ #: src/components/importschedule/Importschedule.vue:167 #: src/components/importschedule/Importschedule.vue:176 #: src/components/importschedule/Importschedule.vue:198 -#: src/components/importschedule/Importscheduledetail.vue:656 -#: src/components/importschedule/Importscheduledetail.vue:724 -#: src/components/importschedule/Importscheduledetail.vue:752 +#: src/components/importschedule/Importscheduledetail.vue:794 +#: src/components/importschedule/Importscheduledetail.vue:881 +#: src/components/importschedule/Importscheduledetail.vue:909 #: src/components/staging/StagingDetail.vue:246 #: src/components/usermanagement/Userdetail.vue:304 #: src/components/usermanagement/Userdetail.vue:376 #: src/components/usermanagement/Usermanagement.vue:298 #: src/components/usermanagement/Usermanagement.vue:306 #: src/components/usermanagement/Usermanagement.vue:340 -#: src/components/importschedule/Importscheduledetail.vue:716 -#: src/components/importschedule/Importscheduledetail.vue:744 +#: src/components/importschedule/Importscheduledetail.vue:873 +#: src/components/importschedule/Importscheduledetail.vue:901 msgid "Backend Error" msgstr "" #: src/components/ImportSoundingresults.vue:16 msgid "Bottleneck" -msgstr "" +msgstr "Brody a úžiny" #: src/components/Systemconfiguration.vue:19 msgid "Bottleneck Areas fill-color" @@ -128,7 +124,7 @@ msgstr "" #: src/components/Pdftool.vue:18 -msgid "Choose format:" +msgid "Chose format:" msgstr "" #: src/components/fairway/Profiles.vue:64 @@ -150,9 +146,14 @@ #: src/components/usermanagement/Userdetail.vue:33 msgid "Country" -msgstr "" +msgstr "Štát" -#: src/components/importschedule/Importscheduledetail.vue:382 +#: src/components/ImportStretches.vue:166 +#, fuzzy +msgid "Countrycode" +msgstr "Štát" + +#: src/components/importschedule/Importscheduledetail.vue:495 msgid "Cronstring" msgstr "" @@ -162,19 +163,15 @@ msgid "Date" msgstr "" -#: src/components/ImportStretches.vue:127 +#: src/components/ImportStretches.vue:129 msgid "Date info" msgstr "" -#: src/components/Pdftool.vue:398 -msgid "Date of publication:" -msgstr "" - -#: src/components/importschedule/Importscheduledetail.vue:454 +#: src/components/importschedule/Importscheduledetail.vue:567 msgid "day" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:480 +#: src/components/importschedule/Importscheduledetail.vue:593 msgid "December" msgstr "" @@ -190,6 +187,10 @@ msgid "Deleted import: #" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:219 +msgid "Depth" +msgstr "" + #: src/components/ImportSoundingresults.vue:52 msgid "Depthreference" msgstr "" @@ -204,17 +205,18 @@ #: src/components/importschedule/Importschedule.vue:37 msgid "Email" -msgstr "" +msgstr "E-mail" #: src/components/usermanagement/Userdetail.vue:59 msgid "Email address" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:50 +#: src/components/importschedule/Importscheduledetail.vue:53 +#, fuzzy msgid "Email Notification" msgstr "" -#: src/components/ImportStretches.vue:64 +#: src/components/ImportStretches.vue:66 msgid "End rhm" msgstr "" @@ -246,7 +248,7 @@ msgid "Errorlog" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:445 +#: src/components/importschedule/Importscheduledetail.vue:558 msgid "Every" msgstr "" @@ -255,14 +257,14 @@ msgstr "" #: src/components/importschedule/Importscheduledetail.vue:40 -msgid "Fairwaydimensions" +msgid "Fairwaydimension" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:155 +#: src/components/importschedule/Importscheduledetail.vue:158 msgid "Featuretype" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:470 +#: src/components/importschedule/Importscheduledetail.vue:583 msgid "February" msgstr "" @@ -270,7 +272,7 @@ msgid "Forgot password" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:464 +#: src/components/importschedule/Importscheduledetail.vue:577 msgid "Friday" msgstr "" @@ -282,11 +284,11 @@ msgid "Gauge measurement" msgstr "" -#: src/components/Pdftool.vue:10 src/components/Pdftool.vue:60 +#: src/components/Pdftool.vue:10 src/components/Pdftool.vue:53 msgid "Generate PDF" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:453 +#: src/components/importschedule/Importscheduledetail.vue:566 msgid "hour" msgstr "" @@ -306,10 +308,10 @@ #: src/components/ImportSoundingresults.vue:278 #: src/components/ImportWaterwayProfiles.vue:88 src/components/Sidebar.vue:56 #: src/components/importschedule/Importschedule.vue:33 -#: src/components/importschedule/Importscheduledetail.vue:519 -#: src/components/importschedule/Importscheduledetail.vue:649 -#: src/components/importschedule/Importscheduledetail.vue:709 -#: src/components/importschedule/Importscheduledetail.vue:737 +#: src/components/importschedule/Importscheduledetail.vue:632 +#: src/components/importschedule/Importscheduledetail.vue:787 +#: src/components/importschedule/Importscheduledetail.vue:866 +#: src/components/importschedule/Importscheduledetail.vue:894 msgid "Import" msgstr "" @@ -350,7 +352,7 @@ msgid "Imports" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:81 +#: src/components/importschedule/Importscheduledetail.vue:84 msgid "Insecure" msgstr "" @@ -362,23 +364,23 @@ msgid "Invalid input" msgstr "" -#: src/components/Pdftool.vue:29 +#: src/components/Pdftool.vue:24 msgid "ISO A3" msgstr "" -#: src/components/Pdftool.vue:30 +#: src/components/Pdftool.vue:25 msgid "ISO A4" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:469 +#: src/components/importschedule/Importscheduledetail.vue:582 msgid "January" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:475 +#: src/components/importschedule/Importscheduledetail.vue:588 msgid "July" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:474 +#: src/components/importschedule/Importscheduledetail.vue:587 msgid "June" msgstr "" @@ -401,7 +403,7 @@ #: src/components/layers/Layers.vue:10 msgid "Layers" -msgstr "" +msgstr "Vrstvy" #: src/components/Login.vue:58 msgid "Login" @@ -419,26 +421,36 @@ msgid "Logs" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:199 +msgid "LOS" +msgstr "" + #: src/components/usermanagement/Userdetail.vue:140 msgid "Mail was sent" msgstr "" #: src/components/importschedule/Importschedule.vue:161 -#: src/components/importschedule/Importscheduledetail.vue:650 +#: src/components/importschedule/Importscheduledetail.vue:788 msgid "Manually triggered import: #" msgstr "" #: src/components/Sidebar.vue:15 +#, fuzzy msgid "Map" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:471 +#: src/components/importschedule/Importscheduledetail.vue:584 msgid "March" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:473 +#: src/components/importschedule/Importscheduledetail.vue:261 +msgid "MaxWidth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:586 +#, fuzzy msgid "May" -msgstr "" +msgstr "Mapa" #: src/components/Bottlenecks.vue:20 msgid "Measurement" @@ -448,32 +460,36 @@ msgid "Message" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:446 +#: src/components/importschedule/Importscheduledetail.vue:559 msgid "minutes past" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:460 +#: src/components/importschedule/Importscheduledetail.vue:239 +msgid "MinWidth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:573 msgid "Monday" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:456 +#: src/components/importschedule/Importscheduledetail.vue:569 msgid "month" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:247 +#: src/components/importschedule/Importscheduledetail.vue:360 msgid "Monthly" msgstr "" #: src/components/Bottlenecks.vue:9 src/components/staging/Staging.vue:11 msgid "Name" -msgstr "" +msgstr "Názov" -#: src/components/ImportStretches.vue:108 +#: src/components/ImportStretches.vue:110 msgid "National Object name" msgstr "" #: src/components/importschedule/Importschedule.vue:93 -#: src/components/importschedule/Importscheduledetail.vue:520 +#: src/components/importschedule/Importscheduledetail.vue:633 msgid "New Import" msgstr "" @@ -489,35 +505,35 @@ msgid "No scheduled imports" msgstr "" -#: src/components/ImportStretches.vue:210 +#: src/components/ImportStretches.vue:273 msgid "Not implemented!" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:479 +#: src/components/importschedule/Importscheduledetail.vue:592 msgid "November" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:450 +#: src/components/importschedule/Importscheduledetail.vue:563 msgid "o' clock" msgstr "" -#: src/components/ImportStretches.vue:91 +#: src/components/ImportStretches.vue:93 msgid "Object name" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:478 +#: src/components/importschedule/Importscheduledetail.vue:591 msgid "October" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:448 +#: src/components/importschedule/Importscheduledetail.vue:561 msgid "of" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:447 +#: src/components/importschedule/Importscheduledetail.vue:560 msgid "on" msgstr "" -#: src/components/Pdftool.vue:18 +#: src/components/Pdftool.vue:45 msgid "Open in new window" msgstr "" @@ -525,7 +541,7 @@ msgid "password" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:134 +#: src/components/importschedule/Importscheduledetail.vue:137 #: src/components/usermanagement/Userdetail.vue:235 msgid "Password" msgstr "" @@ -553,26 +569,48 @@ #: src/components/usermanagement/Userdetail.vue:331 msgid "Please choose a country" -msgstr "" +msgstr "Vyberte krajinu" #: src/components/usermanagement/Userdetail.vue:336 msgid "Please choose a role" msgstr "" +#: src/components/ImportStretches.vue:177 +#, fuzzy +msgid "Please enter a countrycode" +msgstr "Vyberte krajinu" + #: src/components/ImportSoundingresults.vue:84 -#: src/components/ImportStretches.vue:138 +#: src/components/ImportStretches.vue:140 msgid "Please enter a date" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:167 +#: src/components/importschedule/Importscheduledetail.vue:228 +msgid "Please enter a depth" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:170 msgid "Please enter a Featuretype" msgstr "" -#: src/components/ImportStretches.vue:32 +#: src/components/ImportStretches.vue:34 +#, fuzzy msgid "Please enter a function" +msgstr "Vyberte krajinu" + +#: src/components/importschedule/Importscheduledetail.vue:210 +msgid "Please enter a level of service" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:142 +#: src/components/importschedule/Importscheduledetail.vue:274 +msgid "Please enter a maximum width" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:252 +msgid "Please enter a minimum width" +msgstr "" + +#: src/components/importschedule/Importscheduledetail.vue:145 msgid "Please enter a Password" msgstr "" @@ -584,23 +622,24 @@ msgid "Please enter a reference" msgstr "" -#: src/components/ImportStretches.vue:154 +#: src/components/ImportStretches.vue:156 +#, fuzzy msgid "Please enter a source" msgstr "" -#: src/components/ImportStretches.vue:59 +#: src/components/ImportStretches.vue:61 msgid "Please enter a start point" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:106 +#: src/components/importschedule/Importscheduledetail.vue:109 msgid "Please enter a URL" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:125 +#: src/components/importschedule/Importscheduledetail.vue:128 msgid "Please enter a Username" msgstr "" -#: src/components/ImportStretches.vue:84 +#: src/components/ImportStretches.vue:86 msgid "Please enter an end point" msgstr "" @@ -608,8 +647,8 @@ msgid "Please enter an id" msgstr "" -#: src/components/ImportStretches.vue:102 -#: src/components/ImportStretches.vue:120 +#: src/components/ImportStretches.vue:104 +#: src/components/ImportStretches.vue:122 msgid "Please enter an objectname" msgstr "" @@ -618,7 +657,7 @@ msgid "Please enter correct coordinates in the format: Lat,Lon,Lat,Lon" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:184 +#: src/components/importschedule/Importscheduledetail.vue:187 msgid "Please enter SortBy" msgstr "" @@ -671,7 +710,7 @@ msgid "Role" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:465 +#: src/components/importschedule/Importscheduledetail.vue:578 msgid "Saturday" msgstr "" @@ -679,16 +718,16 @@ msgid "Saved cross profiles" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:710 +#: src/components/importschedule/Importscheduledetail.vue:867 msgid "Saved import: #" msgstr "" #: src/components/importschedule/Importschedule.vue:36 -#: src/components/importschedule/Importscheduledetail.vue:238 +#: src/components/importschedule/Importscheduledetail.vue:351 msgid "Schedule" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:196 +#: src/components/importschedule/Importscheduledetail.vue:309 msgid "Scheduled" msgstr "" @@ -696,7 +735,7 @@ msgid "Section" msgstr "" -#: src/components/ImportStretches.vue:209 +#: src/components/ImportStretches.vue:272 msgid "Sections" msgstr "" @@ -706,13 +745,13 @@ #: src/components/Systemconfiguration.vue:25 msgid "Send" -msgstr "" +msgstr "Poslať" #: src/components/usermanagement/Userdetail.vue:138 msgid "Send testmail" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:477 +#: src/components/importschedule/Importscheduledetail.vue:590 msgid "September" msgstr "" @@ -720,7 +759,7 @@ msgid "Signer" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:216 +#: src/components/importschedule/Importscheduledetail.vue:329 msgid "Simple Schedule" msgstr "" @@ -731,7 +770,7 @@ " contributors." msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:176 +#: src/components/importschedule/Importscheduledetail.vue:179 msgid "SortBy" msgstr "" @@ -739,10 +778,14 @@ msgid "Sounding Result" msgstr "" -#: src/components/ImportStretches.vue:143 +#: src/components/ImportStretches.vue:145 msgid "Source" msgstr "" +#: src/components/importschedule/Importscheduledetail.vue:285 +msgid "Source orgranization" +msgstr "" + #: src/components/Identify.vue:57 msgid "source-code" msgstr "" @@ -759,7 +802,7 @@ msgid "Start" msgstr "" -#: src/components/ImportStretches.vue:39 +#: src/components/ImportStretches.vue:41 msgid "Start rhm" msgstr "" @@ -776,12 +819,12 @@ msgid "State" msgstr "" -#: src/components/ImportStretches.vue:28 +#: src/components/ImportStretches.vue:29 msgid "Stretch" msgstr "" -#: src/components/ImportStretches.vue:166 -#: src/components/importschedule/Importscheduledetail.vue:394 +#: src/components/ImportStretches.vue:190 +#: src/components/importschedule/Importscheduledetail.vue:507 #: src/components/usermanagement/Userdetail.vue:129 msgid "Submit" msgstr "" @@ -794,7 +837,7 @@ msgid "Successful" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:466 +#: src/components/importschedule/Importscheduledetail.vue:579 msgid "Sunday" msgstr "" @@ -820,30 +863,30 @@ " %{ license } without warranty, see docs for details." msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:463 +#: src/components/importschedule/Importscheduledetail.vue:576 msgid "Thursday" msgstr "" #: src/components/ImportApprovedGaugeMeasurement.vue:45 #: src/components/ImportWaterwayProfiles.vue:43 -#: src/components/importschedule/Importscheduledetail.vue:407 +#: src/components/importschedule/Importscheduledetail.vue:520 msgid "Trigger import" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:461 +#: src/components/importschedule/Importscheduledetail.vue:574 msgid "Tuesday" msgstr "" #: src/components/importschedule/Importschedule.vue:34 #: src/components/staging/Staging.vue:12 msgid "Type" -msgstr "" +msgstr "Typ" #: src/components/ImportWaterwayProfiles.vue:89 msgid "under construction" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:738 +#: src/components/importschedule/Importscheduledetail.vue:895 msgid "update import: #" msgstr "" @@ -851,7 +894,7 @@ msgid "Upload" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:72 +#: src/components/importschedule/Importscheduledetail.vue:75 msgid "URL" msgstr "" @@ -859,7 +902,7 @@ msgid "User" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:117 +#: src/components/importschedule/Importscheduledetail.vue:120 #: src/components/staging/Staging.vue:18 #: src/components/usermanagement/Userdetail.vue:14 msgid "Username" @@ -899,19 +942,19 @@ msgid "Waterwayarea" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:462 +#: src/components/importschedule/Importscheduledetail.vue:575 msgid "Wednesday" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:455 +#: src/components/importschedule/Importscheduledetail.vue:568 msgid "week" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:246 +#: src/components/importschedule/Importscheduledetail.vue:359 msgid "Weekly" msgstr "" -#: src/components/importschedule/Importscheduledetail.vue:457 +#: src/components/importschedule/Importscheduledetail.vue:570 msgid "year" msgstr "" @@ -920,10 +963,10 @@ msgid "You can now select these coordinates from the \"Saved cross profiles\" menu to restore this cross profile." msgstr "" -#: src/store/map.js:416 +#: src/store/map.js:415 msgid "Length" msgstr "" -#: src/store/map.js:437 +#: src/store/map.js:436 msgid "Area" msgstr ""
--- a/client/src/store/imports.js Fri Jan 18 16:52:20 2019 +0100 +++ b/client/src/store/imports.js Fri Jan 18 17:10:16 2019 +0100 @@ -29,8 +29,9 @@ GAUGEMEASUREMENT: "gaugemeasurement", FAIRWAYAVAILABILITY: "fairwayavailability", WATERWAYAREA: "waterwayarea", - FAIRWAYDIMENSIONS: "fd", - WATERWAYGAUGES: "wg" + FAIRWAYDIMENSION: "fairwaydimension", + WATERWAYGAUGES: "waterwaygauges", + DISTANCEMARKSVIRTUAL: "distancemarksvirtual" }; const SCHEDULES = { @@ -44,8 +45,9 @@ gaugemeasurement: "gm", waterwayaxis: "wx", waterwayarea: "wa", - fairwaydimensions: "fd", - waterwaygauges: "wg" + fairwaydimension: "fd", + waterwaygauges: "wg", + distancemarksvirtual: "dmv" }; const KINDIMPORTTYPE = { @@ -54,8 +56,9 @@ gm: "gaugemeasurement", wx: "waterwayaxis", wa: "waterwayarea", - fd: "fairwaydimensions", - wg: "waterwaygauges" + fd: "fairwaydimension", + wg: "waterwaygauge", + dmv: "distancemarksvirtual" }; const initializeCurrentSchedule = () => { @@ -82,13 +85,19 @@ featureType: null, sortBy: null, username: "", - password: "" + password: "", + LOS: null, + minWidth: null, + maxWidth: null, + depth: null, + sourceOrganization: null }; }; // initial state const init = () => { return { + stretches: [], imports: [], staging: [], schedules: [], @@ -103,6 +112,13 @@ namespaced: true, state: init(), mutations: { + setStretches: (state, stretches) => { + state.stretches = stretches; + }, + // only for prototype purposes delete after real backend is active + addStretch: (state, stretch) => { + state.stretches.push(stretch); + }, clearCurrentSchedule: state => { state.currentSchedule = initializeCurrentSchedule(); }, @@ -157,8 +173,11 @@ Vue.set(state.currentSchedule, "url", url); } if (attributes) { - let { insecure, username, password } = attributes; + let { insecure, username, password, los, depth } = attributes; let sortBy = attributes["sort-by"]; + let minWidth = attributes["min-width"]; + let maxWidth = attributes["max-width"]; + let sourceOrganization = attributes["source-organization"]; const featureType = attributes["feature-type"]; insecure = insecure == "true"; if (insecure) { @@ -176,10 +195,59 @@ if (password) { Vue.set(state.currentSchedule, "password", password); } + if (los) { + Vue.set(state.currentSchedule, "LOS", los); + } + if (minWidth) { + Vue.set(state.currentSchedule, "minWidth", minWidth); + } + if (maxWidth) { + Vue.set(state.currentSchedule, "maxWidth", maxWidth); + } + if (depth) { + Vue.set(state.currentSchedule, "depth", depth); + } + if (sourceOrganization) { + Vue.set( + state.currentSchedule, + "sourceOrganization", + sourceOrganization + ); + } } } }, actions: { + loadStretches({ commit }) { + throw new Error("Not active"); + return new Promise((resolve, reject) => { + HTTP.get("/imports/stretches", { + headers: { "X-Gemma-Auth": localStorage.getItem("token") } + }) + .then(response => { + commit("setStretches", response.data); + resolve(response); + }) + .catch(error => { + reject(error); + }); + }); + }, + saveStretch({ commit }, stretch) { + throw new Error("Not active"); + return new Promise((resolve, reject) => { + HTTP.post("/imports/stretches", stretch, { + headers: { "X-Gemma-Auth": localStorage.getItem("token") } + }) + .then(response => { + commit("setStretches", response.data); + resolve(response); + }) + .catch(error => { + reject(error); + }); + }); + }, loadSchedule({ commit }, id) { return new Promise((resolve, reject) => { HTTP.get("/imports/config/" + id, {
--- a/pkg/controllers/manualimports.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/controllers/manualimports.go Fri Jan 18 17:10:16 2019 +0100 @@ -102,6 +102,64 @@ return wg, due, retries, wgi.SendEmail } +func importDistancemarksVirtual(input interface{}) (interface{}, time.Time, int, bool) { + dmvi := input.(*models.DistanceMarksVirtualImport) + username, _ := dmvi.Attributes.Get("username") + password, _ := dmvi.Attributes.Get("password") + insecure := dmvi.Attributes.Bool("insecure") + wg := &imports.DistanceMarksVirtual{ + URL: dmvi.URL, + Username: username, + Password: password, + Insecure: insecure, + } + due, retries := retry(dmvi.Attributes) + return wg, due, retries, dmvi.SendEmail +} + +func importFairwayDimension(input interface{}) (interface{}, time.Time, int, bool) { + fdi := input.(*models.FairwayDimensionImport) + fd := &imports.FairwayDimension{ + URL: fdi.URL, + FeatureType: fdi.FeatureType, + SortBy: fdi.SortBy, + LOS: fdi.LOS, + MinWidth: fdi.MinWidth, + MaxWidth: fdi.MaxWidth, + Depth: fdi.Depth, + SourceOrganization: fdi.SourceOrganization, + } + due, retries := retry(fdi.Attributes) + return fd, due, retries, fdi.SendEmail +} + +func importDistanceMarksAshore(input interface{}) (interface{}, time.Time, int, bool) { + dmai := input.(*models.DistanceMarksAshoreImport) + dma := &imports.DistanceMarksAshore{ + URL: dmai.URL, + FeatureType: dmai.FeatureType, + SortBy: dmai.SortBy, + } + due, retries := retry(dmai.Attributes) + return dma, due, retries, dmai.SendEmail +} + +func importStretch(input interface{}) (interface{}, time.Time, int, bool) { + sti := input.(*models.StretchImport) + st := &imports.Stretch{ + Name: sti.Name, + From: sti.From, + To: sti.To, + ObjNam: sti.ObjNam, + NObjNam: sti.NObjNam, + Source: sti.Source, + Date: sti.Date, + Countries: sti.Countries, + } + due, retries := retry(sti.Attributes) + return st, due, retries, sti.SendEmail +} + func manualImport( kind imports.JobKind, setup func(interface{}) (interface{}, time.Time, int, bool),
--- a/pkg/controllers/routes.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/controllers/routes.go Fri Jan 18 17:10:16 2019 +0100 @@ -211,6 +211,30 @@ NoConn: true, })).Methods(http.MethodPost) + api.Handle("/imports/distancemarksvirtual", waterwayAdmin(&JSONHandler{ + Input: func() interface{} { return new(models.DistanceMarksVirtualImport) }, + Handle: manualImport(imports.DMVJobKind, importDistancemarksVirtual), + NoConn: true, + })).Methods(http.MethodPost) + + api.Handle("/imports/fairwaydimension", waterwayAdmin(&JSONHandler{ + Input: func() interface{} { return new(models.FairwayDimensionImport) }, + Handle: manualImport(imports.FDJobKind, importFairwayDimension), + NoConn: true, + })).Methods(http.MethodPost) + + api.Handle("/imports/distancemarks", waterwayAdmin(&JSONHandler{ + Input: func() interface{} { return new(models.DistanceMarksAshoreImport) }, + Handle: manualImport(imports.DMAJobKind, importDistanceMarksAshore), + NoConn: true, + })).Methods(http.MethodPost) + + api.Handle("/imports/stretch", sysAdmin(&JSONHandler{ + Input: func() interface{} { return new(models.StretchImport) }, + Handle: manualImport(imports.STJobKind, importStretch), + NoConn: true, + })).Methods(http.MethodPost) + // Import scheduler configuration api.Handle("/imports/config/{id:[0-9]+}/run", waterwayAdmin(&JSONHandler{
--- a/pkg/controllers/srimports.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/controllers/srimports.go Fri Jan 18 17:10:16 2019 +0100 @@ -116,11 +116,11 @@ } if v := req.FormValue("date"); v != "" { - date, err := time.Parse(models.SoundingResultDateFormat, v) + date, err := time.Parse(models.DateFormat, v) if err != nil { return err } - sr.Date = &models.SoundingResultDate{Time: date} + sr.Date = &models.Date{Time: date} } if v := req.FormValue("depth-reference"); v != "" {
--- a/pkg/imports/bn.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/imports/bn.go Fri Jan 18 17:10:16 2019 +0100 @@ -66,8 +66,7 @@ ISRSrange_area( isrsrange(isrs_fromText($5), isrs_fromText($6)), (SELECT ST_Union(CAST(area AS geometry)) - FROM waterway.fairway_dimensions - WHERE level_of_service = 3)), + FROM waterway.waterway_area)), $7, $8, $9,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/imports/dma.go Fri Jan 18 17:10:16 2019 +0100 @@ -0,0 +1,261 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSES/AGPL-3.0.txt +// +// Copyright (C) 2018 by via donau +// – Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Raimund Renkert <raimund.renkert@intevation.de> + +package imports + +import ( + "context" + "database/sql" + "encoding/json" + "errors" + "fmt" + "io" + "time" + + "gemma.intevation.de/gemma/pkg/common" + "gemma.intevation.de/gemma/pkg/wfs" +) + +// FairwayDimension is an import job to import +// the fairway dimensions in form of polygon geometries +// and attribute data from a WFS service. +type DistanceMarksAshore struct { + // URL the GetCapabilities URL of the WFS service. + URL string `json:"url"` + // FeatureType selects the feature type of the WFS service. + FeatureType string `json:"feature-type"` + // SortBy sorts the feature by this key. + SortBy string `json:"sort-by"` +} + +// DMAJobKind is the import queue type identifier. +const DMAJobKind JobKind = "dma" + +type dmaJobCreator struct{} + +func init() { + RegisterJobCreator(DMAJobKind, dmaJobCreator{}) +} + +func (dmaJobCreator) Description() string { return "distance marks" } + +func (dmaJobCreator) AutoAccept() bool { return true } + +func (dmaJobCreator) Create(_ JobKind, data string) (Job, error) { + dma := new(DistanceMarksAshore) + if err := common.FromJSONString(data, dma); err != nil { + return nil, err + } + return dma, nil +} + +func (dmaJobCreator) Depends() []string { + return []string{ + "distance_marks", + } +} + +// StageDone is a NOP for distance marks imports. +func (dmaJobCreator) StageDone(context.Context, *sql.Tx, int64) error { + return nil +} + +// CleanUp for distance marks imports is a NOP. +func (*DistanceMarksAshore) CleanUp() error { return nil } + +type distanceMarksAshoreProperties struct { + HydroCatdis int `json:"hydro_catdis"` +} + +const ( + deleteDistanceMarksSQL = ` +WITH resp AS ( + SELECT best_utm(area::geometry) AS t, + ST_Transform(area::geometry, best_utm(area::geometry)) AS a + FROM users.responsibility_areas + WHERE country = users.current_user_country() +) +DELETE FROM waterway.distance_marks +WHERE ST_Covers( + (SELECT a FROM resp), + ST_Transform(geom::geometry, (SELECT t FROM resp))) +` + insertDistanceMarksSQL = ` +WITH resp AS ( + SELECT best_utm(area::geometry) AS t, + ST_Transform(area::geometry, best_utm(area::geometry)) AS a + FROM users.responsibility_areas + WHERE country = users.current_user_country() +) +INSERT INTO waterway.distance_marks (geom, catdis) +SELECT ST_Transform(clipped.geom, 4326)::geography, $3 FROM ( + SELECT (ST_Dump( + ST_Intersection( + (SELECT a FROM resp), + ST_Transform( + ST_GeomFromWKB($1, $2::integer), + (SELECT t FROM resp) + ) + ) + )).geom AS geom + ) AS clipped + WHERE clipped.geom IS NOT NULL +` +) + +// Do executes the actual fairway dimension import. +func (dma *DistanceMarksAshore) Do( + ctx context.Context, + importID int64, + conn *sql.Conn, + feedback Feedback, +) (interface{}, error) { + + start := time.Now() + + feedback.Info("Import distance marks") + + feedback.Info("Loading capabilities from %s", dma.URL) + caps, err := wfs.GetCapabilities(dma.URL) + if err != nil { + feedback.Error("Loading capabilities failed: %v", err) + return nil, err + } + + ft := caps.FindFeatureType(dma.FeatureType) + if ft == nil { + return nil, fmt.Errorf("Unknown feature type '%s'", dma.FeatureType) + } + + feedback.Info("Found feature type '%s'", dma.FeatureType) + + epsg, err := wfs.CRSToEPSG(ft.DefaultCRS) + if err != nil { + feedback.Error("Unsupported CRS name '%s'", ft.DefaultCRS) + return nil, err + } + + urls, err := wfs.GetFeaturesGET( + caps, dma.FeatureType, "application/json", dma.SortBy) + if err != nil { + feedback.Error("Cannot create GetFeature URLs. %v", err) + return nil, err + } + + tx, err := conn.BeginTx(ctx, nil) + if err != nil { + return nil, err + } + defer tx.Rollback() + + insertStmt, err := tx.PrepareContext(ctx, insertDistanceMarksSQL) + if err != nil { + return nil, err + } + defer insertStmt.Close() + + // Delete the old features. + if _, err := tx.ExecContext(ctx, deleteDistanceMarksSQL); err != nil { + return nil, err + } + + var ( + unsupported = stringCounter{} + missingProperties int + badProperties int + features int + ) + + if err := wfs.DownloadURLs(urls, func(r io.Reader) error { + rfc, err := wfs.ParseRawFeatureCollection(r) + if err != nil { + return fmt.Errorf("parsing GetFeature document failed: %v", err) + } + if rfc.CRS != nil { + crsName := rfc.CRS.Properties.Name + if epsg, err = wfs.CRSToEPSG(crsName); err != nil { + feedback.Error("Unsupported CRS: %d", crsName) + return err + } + } + + // No features -> ignore. + if rfc.Features == nil { + return nil + } + + feedback.Info("Using EPSG: %d", epsg) + + for _, feature := range rfc.Features { + if feature.Geometry.Coordinates == nil { + missingProperties++ + continue + } + + var props distanceMarksAshoreProperties + + if err := json.Unmarshal(*feature.Properties, &props); err != nil { + badProperties++ + continue + } + switch feature.Geometry.Type { + case "Point": + var p pointSlice + if err := json.Unmarshal(*feature.Geometry.Coordinates, &p); err != nil { + return err + } + if _, err := insertStmt.ExecContext( + ctx, + p.asWKB(), + epsg, + props.HydroCatdis, + ); err != nil { + feedback.Error("error: %s", err) + return err + } + features++ + default: + unsupported[feature.Geometry.Type]++ + } + } + return nil + }); err != nil { + feedback.Error("Downloading features failed: %v", err) + return nil, err + } + + if badProperties > 0 { + feedback.Warn("Bad properties: %d", badProperties) + } + + if missingProperties > 0 { + feedback.Warn("Missing properties: %d", missingProperties) + } + + if len(unsupported) != 0 { + feedback.Warn("Unsupported types found: %s", unsupported) + } + + if features == 0 { + err := errors.New("No features found") + feedback.Error("%v", err) + return nil, err + } + + if err = tx.Commit(); err == nil { + feedback.Info("Storing %d features took %s", + features, time.Since(start)) + } + + return nil, err +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/imports/dmv.go Fri Jan 18 17:10:16 2019 +0100 @@ -0,0 +1,214 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSES/AGPL-3.0.txt +// +// Copyright (C) 2018 by via donau +// – Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Sascha L. Teichmann <sascha.teichmann@intevation.de> + +package imports + +import ( + "context" + "database/sql" + "errors" + "fmt" + "log" + "strings" + "time" + + "gemma.intevation.de/gemma/pkg/common" + "gemma.intevation.de/gemma/pkg/models" + "gemma.intevation.de/gemma/pkg/soap" + "gemma.intevation.de/gemma/pkg/soap/erdms" +) + +type DistanceMarksVirtual struct { + // URL is the URL of the SOAP service. + URL string `json:"url"` + // Username is the username used to authenticate. + Username string `json:"username"` + // Passwort is the password to authenticate. + Password string `json:"password"` + // Insecure indicates if HTTPS traffic + // should validate certificates or not. + Insecure bool `json:"insecure"` +} + +const DMVJobKind JobKind = "dmv" + +type dmvJobCreator struct{} + +func init() { + RegisterJobCreator(DMVJobKind, dmvJobCreator{}) +} + +func (dmvJobCreator) Description() string { return "distance marks virtual" } + +func (dmvJobCreator) AutoAccept() bool { return true } + +func (dmvJobCreator) Create(_ JobKind, data string) (Job, error) { + dmv := new(DistanceMarksVirtual) + if err := common.FromJSONString(data, dmv); err != nil { + return nil, err + } + return dmv, nil +} + +func (dmvJobCreator) Depends() []string { + return []string{ + "distance_marks_virtual", + } +} + +// StageDone does nothing as there is no staging for distance marks virtual. +func (dmvJobCreator) StageDone(context.Context, *sql.Tx, int64) error { return nil } + +// CleanUp does nothing as there is nothing to cleanup with distance marks virtual. +func (*DistanceMarksVirtual) CleanUp() error { return nil } + +const ( + deleteDistanceMarksVirtualSQL = ` +DELETE FROM waterway.distance_marks_virtual +WHERE (location_code).country_code = $1 +` + insertDistanceMarksVirtualSQL = ` +INSERT INTO waterway.distance_marks_virtual ( + location_code, + geom, + related_enc +) +VALUES ( + ($1::char(2), $2::char(3), $3::char(5), $4::char(5), $5::int), + ST_SetSRID(ST_MakePoint($6, $7), 4326)::geography, + $8 +) ON CONFLICT (location_code) DO UPDATE SET + geom = ST_SetSRID(ST_MakePoint($6, $7), 4326)::geography, + related_enc = $8 +` +) + +func (dmv *DistanceMarksVirtual) Do( + ctx context.Context, + importID int64, + conn *sql.Conn, + feedback Feedback, +) (interface{}, error) { + + start := time.Now() + + tx, err := conn.BeginTx(ctx, nil) + if err != nil { + return nil, err + } + defer tx.Rollback() + + var country string + err = tx.QueryRowContext(ctx, selectCurrentUserCountrySQL).Scan(&country) + switch { + case err == sql.ErrNoRows: + return nil, errors.New("Cannot figure out user country") + case err != nil: + return nil, err + } + + country = strings.ToUpper(country) + feedback.Info("Using country '%s'.", country) + + var auth *soap.BasicAuth + if dmv.Username != "" { + auth = &soap.BasicAuth{ + Login: dmv.Username, + Password: dmv.Password, + } + } + + client := erdms.NewRefService(dmv.URL, dmv.Insecure, auth) + + request := &erdms.GetRisDataXML{ + GetRisDataXMLType: &erdms.GetRisDataXMLType{ + Subcode: erdms.NoNS{Text: country + "%"}, + Funcode: erdms.NoNS{Text: "DISMAR"}, + }, + } + + data, err := client.GetRisDataXML(request) + + if err != nil { + log.Printf("error: %v\n", err) + return nil, fmt.Errorf("Error requesting ERDMS service: %v", err) + } + + if _, err := tx.ExecContext(ctx, deleteDistanceMarksVirtualSQL, country); err != nil { + return nil, err + } + + insertStmt, err := tx.PrepareContext(ctx, insertDistanceMarksVirtualSQL) + if err != nil { + return nil, err + } + defer insertStmt.Close() + + var ignored, features int + + for _, dr := range data.RisdataReturn { + if dr.RisidxCode == nil { + ignored++ + continue + } + + code, err := models.IsrsFromString(string(*dr.RisidxCode)) + if err != nil { + feedback.Warn("invalid ISRS code %v", err) + ignored++ + continue + } + + if dr.Lat == nil || dr.Lon == nil { + feedback.Warn("missing lat/lon: %s", code) + ignored++ + continue + } + + if dr.Relenc == nil { + feedback.Warn("missing relnec: %s", code) + ignored++ + continue + } + + if _, err := insertStmt.ExecContext( + ctx, + code.CountryCode, + code.LoCode, + code.FairwaySection, + code.Orc, + code.Hectometre, + float64(*dr.Lat), float64(*dr.Lon), + string(*dr.Relenc), + ); err != nil { + return nil, err + } + features++ + } + feedback.Info("ignored: %d", ignored) + feedback.Info("features: %d", features) + + if features == 0 { + return nil, errors.New("No features found") + } + + if err = tx.Commit(); err == nil { + feedback.Info("Refreshing distant marks virtual successfully took %s.", + time.Since(start)) + } else { + feedback.Error("Refreshing distant marks virtual failed after %s.", + time.Since(start)) + } + + return nil, nil +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/imports/fd.go Fri Jan 18 17:10:16 2019 +0100 @@ -0,0 +1,327 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSES/AGPL-3.0.txt +// +// Copyright (C) 2018 by via donau +// – Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Raimund Renkert <raimund.renkert@intevation.de> + +package imports + +import ( + "context" + "database/sql" + "encoding/json" + "errors" + "fmt" + "io" + "time" + + "gemma.intevation.de/gemma/pkg/common" + "gemma.intevation.de/gemma/pkg/wfs" +) + +// FairwayDimension is an import job to import +// the fairway dimensions in form of polygon geometries +// and attribute data from a WFS service. +type FairwayDimension struct { + // URL the GetCapabilities URL of the WFS service. + URL string `json:"url"` + // FeatureType selects the feature type of the WFS service. + FeatureType string `json:"feature-type"` + SortBy string `json:"sort-by"` + LOS int `json:"los"` + MinWidth int `json:"min-width"` + MaxWidth int `json:"max-width"` + Depth int `json:"depth"` + SourceOrganization string `json:"source-organization"` +} + +type fdTime struct{ time.Time } + +func (fdt *fdTime) UnmarshalJSON(data []byte) error { + var s string + if err := json.Unmarshal(data, &s); err != nil { + return err + } + t, err := time.Parse("20060102", s) + if err == nil { + *fdt = fdTime{t} + } + return err +} + +// FDJobKind is the import queue type identifier. +const FDJobKind JobKind = "fd" + +type fdJobCreator struct{} + +func init() { + RegisterJobCreator(FDJobKind, fdJobCreator{}) +} + +func (fdJobCreator) Description() string { return "fairway dimension" } + +func (fdJobCreator) AutoAccept() bool { return false } + +func (fdJobCreator) Create(_ JobKind, data string) (Job, error) { + fd := new(FairwayDimension) + if err := common.FromJSONString(data, fd); err != nil { + return nil, err + } + return fd, nil +} + +func (fdJobCreator) Depends() []string { + return []string{ + "fairway_dimensions", + } +} + +func (fdJobCreator) StageDone( + ctx context.Context, + tx *sql.Tx, + id int64, +) error { + // Delete the old features. + if _, err := tx.ExecContext(ctx, deleteFairwayDimensionSQL); err != nil { + return err + } + + _, err := tx.ExecContext(ctx, fdStageDoneSQL, id) + return err +} + +// CleanUp for fairway dimension imports is a NOP. +func (*FairwayDimension) CleanUp() error { return nil } + +type fairwayDimensionProperties struct { + HydroSorDat fdTime `json:"hydro_sordat"` +} + +type fdSummary struct { + Lat float64 `json:"lat"` + Lon float64 `json:"lon"` + ID int64 `json:"id"` +} + +const ( + fdStageDoneSQL = ` +UPDATE waterway.fairway_dimensions SET staging_done = true +WHERE id IN ( + SELECT key from waterway.track_imports + WHERE import_id = $1 AND + relation = 'waterway.fairway_dimensions'::regclass)` + + deleteFairwayDimensionSQL = ` +WITH resp AS ( + SELECT best_utm(area::geometry) AS t, + ST_Transform(area::geometry, best_utm(area::geometry)) AS a + FROM users.responsibility_areas + WHERE country = users.current_user_country() +) +DELETE FROM waterway.fairway_dimensions +WHERE ST_Covers( + (SELECT a FROM resp), + ST_Transform(area::geometry, (SELECT t FROM resp))) AND staging_done = true +` + + // The ST_MakeValid (line125) and ST_Buffer (line124) are a workarround to + // avoid errors due to reprojection. + insertFairwayDimensionSQL = ` +WITH resp AS ( + SELECT best_utm(area::geometry) AS t, + ST_Transform(area::geometry, best_utm(area::geometry)) AS a + FROM users.responsibility_areas + WHERE country = users.current_user_country() +) +INSERT INTO waterway.fairway_dimensions (area, level_of_service, min_width, max_width, min_depth, date_info, source_organization) +SELECT ST_Transform(clipped.geom, 4326)::geography, $3, $4, $5, $6, $7, $8 FROM ( + SELECT (ST_Dump( + ST_Intersection( + (SELECT ST_Buffer(a, -0.0001) FROM resp), + ST_MakeValid(ST_Transform( + ST_GeomFromWKB($1, $2::integer), + (SELECT t FROM resp) + )) + ) + )).geom AS geom + ) AS clipped + WHERE clipped.geom IS NOT NULL +RETURNING id, + ST_X(ST_Centroid(area::geometry)), + ST_Y(ST_Centroid(area::geometry)) + ` +) + +// Do executes the actual fairway dimension import. +func (fd *FairwayDimension) Do( + ctx context.Context, + importID int64, + conn *sql.Conn, + feedback Feedback, +) (interface{}, error) { + + start := time.Now() + + feedback.Info("Import fairway dimension") + + feedback.Info("Loading capabilities from %s", fd.URL) + caps, err := wfs.GetCapabilities(fd.URL) + if err != nil { + feedback.Error("Loading capabilities failed: %v", err) + return nil, err + } + + ft := caps.FindFeatureType(fd.FeatureType) + if ft == nil { + return nil, fmt.Errorf("Unknown feature type '%s'", fd.FeatureType) + } + + feedback.Info("Found feature type '%s'", fd.FeatureType) + + epsg, err := wfs.CRSToEPSG(ft.DefaultCRS) + if err != nil { + feedback.Error("Unsupported CRS name '%s'", ft.DefaultCRS) + return nil, err + } + + urls, err := wfs.GetFeaturesGET( + caps, fd.FeatureType, "application/json", fd.SortBy) + if err != nil { + feedback.Error("Cannot create GetFeature URLs. %v", err) + return nil, err + } + + tx, err := conn.BeginTx(ctx, nil) + if err != nil { + return nil, err + } + defer tx.Rollback() + + insertStmt, err := tx.PrepareContext(ctx, insertFairwayDimensionSQL) + if err != nil { + return nil, err + } + defer insertStmt.Close() + + var ( + unsupported = stringCounter{} + missingProperties int + badProperties int + features int + fds []fdSummary + ) + + if err := wfs.DownloadURLs(urls, func(r io.Reader) error { + rfc, err := wfs.ParseRawFeatureCollection(r) + if err != nil { + return fmt.Errorf("parsing GetFeature document failed: %v", err) + } + if rfc.CRS != nil { + crsName := rfc.CRS.Properties.Name + if epsg, err = wfs.CRSToEPSG(crsName); err != nil { + feedback.Error("Unsupported CRS: %d", crsName) + return err + } + } + + // No features -> ignore. + if rfc.Features == nil { + return nil + } + + feedback.Info("Using EPSG: %d", epsg) + + for _, feature := range rfc.Features { + if feature.Geometry.Coordinates == nil { + missingProperties++ + continue + } + + var props fairwayDimensionProperties + + if err := json.Unmarshal(*feature.Properties, &props); err != nil { + badProperties++ + continue + } + switch feature.Geometry.Type { + case "Polygon": + var p polygonSlice + if err := json.Unmarshal(*feature.Geometry.Coordinates, &p); err != nil { + return err + } + var fdid int64 + var lat, lon float64 + if err := insertStmt.QueryRowContext( + ctx, + p.asWKB(), + epsg, + fd.LOS, + fd.MinWidth, + fd.MaxWidth, + fd.Depth, + props.HydroSorDat.Time, + fd.SourceOrganization, + ).Scan(&fdid, &lat, &lon); err != nil { + feedback.Error("error: %s", err) + return err + } + // Store for potential later removal. + if err = track(ctx, tx, importID, "waterway.fairway_dimensions", fdid); err != nil { + return err + } + fds = append(fds, fdSummary{ID: fdid, Lat: lat, Lon: lon}) + + features++ + default: + unsupported[feature.Geometry.Type]++ + } + } + return nil + }); err != nil { + feedback.Error("Downloading features failed: %v", err) + return nil, err + } + + if badProperties > 0 { + feedback.Warn("Bad properties: %d", badProperties) + } + + if missingProperties > 0 { + feedback.Warn("Missing properties: %d", missingProperties) + } + + if len(unsupported) != 0 { + feedback.Warn("Unsupported types found: %s", unsupported) + } + + if features == 0 { + err := errors.New("No features found") + feedback.Error("%v", err) + return nil, err + } + + if err = tx.Commit(); err == nil { + feedback.Info("Storing %d features took %s", + features, time.Since(start)) + } + + summary := struct { + Date time.Time `json:"date"` + LOS int `json:"los"` + SourceOrganization string `json:"source-organization"` + FdArea []fdSummary `json:"fd-area"` + }{ + Date: time.Now(), + LOS: fd.LOS, + SourceOrganization: fd.SourceOrganization, + FdArea: fds, + } + return &summary, err +}
--- a/pkg/imports/scheduled.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/imports/scheduled.go Fri Jan 18 17:10:16 2019 +0100 @@ -88,6 +88,49 @@ }, nil }, + FDJobKind: func(cfg *IDConfig) (interface{}, error) { + log.Println("info: schedule 'fd' import") + ft, found := cfg.Attributes.Get("feature-type") + if !found { + return nil, errors.New("cannot find 'feature-type' attribute") + } + sb, found := cfg.Attributes.Get("sort-by") + if !found { + return nil, errors.New("cannot find 'sort-by' attribute") + } + los, found := cfg.Attributes.Int("los") + if !found { + return nil, errors.New("cannot find 'los' attribute") + } + minWidth, found := cfg.Attributes.Int("min-width") + if !found { + return nil, errors.New("cannot find 'min-width' attribute") + } + maxWidth, found := cfg.Attributes.Int("max-width") + if !found { + return nil, errors.New("cannot find 'max-width' attribute") + } + depth, found := cfg.Attributes.Int("depth") + if !found { + return nil, errors.New("cannot find 'depth' attribute") + } + sourceOrganization, found := cfg.Attributes.Get("source-organization") + if !found { + return nil, errors.New("cannot find 'source-organization' attribute") + } + + return &FairwayDimension{ + URL: *cfg.URL, + FeatureType: ft, + SortBy: sb, + LOS: los, + MinWidth: minWidth, + MaxWidth: maxWidth, + Depth: depth, + SourceOrganization: sourceOrganization, + }, nil + }, + WGJobKind: func(cfg *IDConfig) (interface{}, error) { log.Println("info: schedule 'wg' import") username, _ := cfg.Attributes.Get("username") @@ -100,6 +143,35 @@ Insecure: insecure, }, nil }, + + DMVJobKind: func(cfg *IDConfig) (interface{}, error) { + log.Println("info: schedule 'dvm' import") + username, _ := cfg.Attributes.Get("username") + password, _ := cfg.Attributes.Get("password") + insecure := cfg.Attributes.Bool("insecure") + return &DistanceMarksVirtual{ + URL: *cfg.URL, + Username: username, + Password: password, + Insecure: insecure, + }, nil + }, + DMAJobKind: func(cfg *IDConfig) (interface{}, error) { + log.Println("info: schedule 'dma' import") + ft, found := cfg.Attributes.Get("feature-type") + if !found { + return nil, errors.New("cannot find 'feature-type' attribute") + } + sb, found := cfg.Attributes.Get("sort-by") + if !found { + return nil, errors.New("cannot find 'sort-by' attribute") + } + return &DistanceMarksAshore{ + URL: *cfg.URL, + FeatureType: ft, + SortBy: sb, + }, nil + }, } func init() {
--- a/pkg/imports/sr.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/imports/sr.go Fri Jan 18 17:10:16 2019 +0100 @@ -48,7 +48,7 @@ // Override data // Date if given overrides the date value from the meta.json. - Date *models.SoundingResultDate `json:"date,omitempty"` + Date *models.Date `json:"date,omitempty"` // Date if given overrides the name of the bottleneck from the meta.json. Bottleneck *string `json:"bottleneck,omitempty"` // EPSG if given overrides the EPSG code from the meta.json. @@ -311,10 +311,10 @@ } summary := struct { - Bottleneck string `json:"bottleneck"` - Date models.SoundingResultDate `json:"date"` - Lat float64 `json:"lat"` - Lon float64 `json:"lon"` + Bottleneck string `json:"bottleneck"` + Date models.Date `json:"date"` + Lat float64 `json:"lat"` + Lon float64 `json:"lon"` }{ Bottleneck: m.Bottleneck, Date: m.Date,
--- a/pkg/imports/wa.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/imports/wa.go Fri Jan 18 17:10:16 2019 +0100 @@ -104,11 +104,11 @@ SELECT ST_Transform(clipped.geom, 4326)::geography, $3, $4 FROM ( SELECT (ST_Dump( ST_Intersection( - (SELECT a FROM resp), - ST_Transform( + (SELECT ST_Buffer(a, 0.0001) FROM resp), + ST_CollectionExtract(ST_MakeValid(ST_Transform( ST_GeomFromWKB($1, $2::integer), (SELECT t FROM resp) - ) + )),3) ) )).geom AS geom ) AS clipped @@ -255,12 +255,6 @@ return nil, err } - if features == 0 { - err := errors.New("No features found") - feedback.Error("%v", err) - return nil, err - } - if badProperties > 0 { feedback.Warn("Bad properties: %d", badProperties) } @@ -273,6 +267,12 @@ feedback.Warn("Unsupported types found: %s", unsupported) } + if features == 0 { + err := errors.New("No features found") + feedback.Error("%v", err) + return nil, err + } + if err = tx.Commit(); err == nil { feedback.Info("Storing %d features took %s", features, time.Since(start))
--- a/pkg/imports/wg.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/imports/wg.go Fri Jan 18 17:10:16 2019 +0100 @@ -17,8 +17,17 @@ "context" "database/sql" "errors" + "fmt" + "log" + "strings" + "time" + + "github.com/jackc/pgx/pgtype" "gemma.intevation.de/gemma/pkg/common" + "gemma.intevation.de/gemma/pkg/models" + "gemma.intevation.de/gemma/pkg/soap" + "gemma.intevation.de/gemma/pkg/soap/erdms" ) type WaterwayGauge struct { @@ -43,7 +52,7 @@ func (wgJobCreator) Description() string { return "waterway gauges" } -func (wgJobCreator) AutoAccept() bool { return false } +func (wgJobCreator) AutoAccept() bool { return true } func (wgJobCreator) Create(_ JobKind, data string) (Job, error) { wg := new(WaterwayGauge) @@ -56,19 +65,74 @@ func (wgJobCreator) Depends() []string { return []string{ "gauges", + "gauges_reference_water_levels", } } -func (wgJobCreator) StageDone( - ctx context.Context, - tx *sql.Tx, - id int64, -) error { - // TODO: Implement me! - return nil -} +// StageDone does nothing as there is no staging for gauges. +func (wgJobCreator) StageDone(context.Context, *sql.Tx, int64) error { return nil } + +// CleanUp does nothing as there is nothing to cleanup with gauges. +func (*WaterwayGauge) CleanUp() error { return nil } + +const ( + selectCurrentUserCountrySQL = `SELECT users.current_user_country()` + + hasGaugeSQL = ` +SELECT true +FROM waterway.gauges +WHERE location = ($1::char(2), $2::char(3), $3::char(5), $4::char(5), $5::int)` + + deleteReferenceWaterLevelsSQL = ` +DELETE FROM waterway.gauges_reference_water_levels +WHERE gauge_id = ($1::char(2), $2::char(3), $3::char(5), $4::char(5), $5::int)` -func (*WaterwayGauge) CleanUp() error { return nil } + insertGaugeSQL = ` +INSERT INTO waterway.gauges ( + location, + objname, + geom, + applicability_from_km, + applicability_to_km, + validity, + zero_point, + geodref, + date_info, + source_organization +) VALUES ( + ($1::char(2), $2::char(3), $3::char(5), $4::char(5), $5::int), + $6, + ST_SetSRID(ST_MakePoint($7, $8), 4326)::geography, + $9, + $10, + $11, + $12, + $13, + $14, + $15 +) ON CONFLICT (location) DO UPDATE SET + objname = $6, + geom = ST_SetSRID(ST_MakePoint($7, $8), 4326)::geography, + applicability_from_km = $9, + applicability_to_km = $10, + validity = $11, + zero_point = $12, + geodref = $13, + date_info = $14, + source_organization = $15 +` + insertReferenceWaterLevelsSQL = ` +INSERT INTO waterway.gauges_reference_water_levels ( + gauge_id, + reference_water_level, + value +) VALUES ( + ($1::char(2), $2::char(3), $3::char(5), $4::char(5), $5::int), + $6, + $7 +) +` +) func (wg *WaterwayGauge) Do( ctx context.Context, @@ -76,6 +140,293 @@ conn *sql.Conn, feedback Feedback, ) (interface{}, error) { - // TODO: Implement me! - return nil, errors.New("Not implemented, yet!") + + start := time.Now() + + tx, err := conn.BeginTx(ctx, nil) + if err != nil { + return nil, err + } + defer tx.Rollback() + + var country string + err = tx.QueryRowContext(ctx, selectCurrentUserCountrySQL).Scan(&country) + switch { + case err == sql.ErrNoRows: + return nil, errors.New("Cannot figure out user country") + case err != nil: + return nil, err + } + + country = strings.ToUpper(country) + feedback.Info("Using country '%s'.", country) + + var auth *soap.BasicAuth + if wg.Username != "" { + auth = &soap.BasicAuth{ + Login: wg.Username, + Password: wg.Password, + } + } + + client := erdms.NewRefService(wg.URL, wg.Insecure, auth) + + request := &erdms.GetRisDataXML{ + GetRisDataXMLType: &erdms.GetRisDataXMLType{ + Subcode: erdms.NoNS{Text: country + "%"}, + Funcode: erdms.NoNS{Text: "wtwgag"}, + }, + } + + data, err := client.GetRisDataXML(request) + + if err != nil { + log.Printf("error: %v\n", err) + return nil, fmt.Errorf("Error requesting ERDMS service: %v", err) + } + + hasGaugeStmt, err := tx.PrepareContext(ctx, hasGaugeSQL) + if err != nil { + return nil, err + } + defer hasGaugeStmt.Close() + + var ignored int + + type idxCode struct { + idx int + code *models.Isrs + } + + var news, olds []idxCode + + for i, dr := range data.RisdataReturn { + if dr.RisidxCode == nil { + ignored++ + continue + } + code, err := models.IsrsFromString(string(*dr.RisidxCode)) + if err != nil { + feedback.Warn("invalid ISRS code %v", err) + ignored++ + continue + } + + if dr.Objname.Loc == nil { + feedback.Warn("missing objname: %s", code) + ignored++ + continue + } + + if dr.Lat == nil || dr.Lon == nil { + feedback.Warn("missing lat/lon: %s", code) + ignored++ + continue + } + + if dr.Zeropoint == nil { + feedback.Warn("missing zeropoint: %s", code) + ignored++ + continue + } + + var dummy bool + err = hasGaugeStmt.QueryRowContext(ctx, + code.CountryCode, + code.LoCode, + code.FairwaySection, + code.Orc, + code.Hectometre, + ).Scan(&dummy) + switch { + case err == sql.ErrNoRows: + news = append(news, idxCode{idx: i, code: code}) + case err != nil: + return nil, err + case !dummy: + return nil, errors.New("Unexpected result") + default: + olds = append(olds, idxCode{idx: i, code: code}) + } + } + feedback.Info("ignored gauges: %d", ignored) + feedback.Info("new gauges: %d", len(news)) + feedback.Info("update gauges: %d", len(olds)) + + if len(news) == 0 && len(olds) == 0 { + return nil, errors.New("nothing to do") + } + + // delete reference water leves of the old. + if len(olds) > 0 { + deleteReferenceWaterLevelsStmt, err := tx.PrepareContext( + ctx, deleteReferenceWaterLevelsSQL) + if err != nil { + return nil, err + } + defer deleteReferenceWaterLevelsStmt.Close() + for i := range olds { + code := olds[i].code + if _, err := deleteReferenceWaterLevelsStmt.ExecContext(ctx, + code.CountryCode, + code.LoCode, + code.FairwaySection, + code.Orc, + code.Hectometre, + ); err != nil { + return nil, err + } + } + // treat them as new + news = append(news, olds...) + } + + insertStmt, err := tx.PrepareContext(ctx, insertGaugeSQL) + if err != nil { + return nil, err + } + defer insertStmt.Close() + + insertWaterLevelStmt, err := tx.PrepareContext( + ctx, insertReferenceWaterLevelsSQL) + if err != nil { + return nil, err + } + defer insertWaterLevelStmt.Close() + + // insert/update the gauges + for i := range news { + ic := &news[i] + dr := data.RisdataReturn[ic.idx] + + feedback.Info("insert/update %s", ic.code) + + var from, to sql.NullInt64 + + if dr.Applicabilityfromkm != nil { + from = sql.NullInt64{ + Int64: int64(*dr.Applicabilityfromkm), + Valid: true, + } + } + if dr.Applicabilitytokm != nil { + to = sql.NullInt64{ + Int64: int64(*dr.Applicabilitytokm), + Valid: true, + } + } + + var tfrom, tto, dateInfo pgtype.Timestamptz + + if dr.Startdate != nil { + tfrom = pgtype.Timestamptz{ + Time: time.Time(*dr.Startdate), + Status: pgtype.Present, + } + } else { + tfrom = pgtype.Timestamptz{ + Status: pgtype.Null, + } + } + + if dr.Enddate != nil { + tto = pgtype.Timestamptz{ + Time: time.Time(*dr.Enddate), + Status: pgtype.Present, + } + } else { + tto = pgtype.Timestamptz{ + Status: pgtype.Null, + } + } + + validity := pgtype.Tstzrange{ + Lower: tfrom, + Upper: tto, + LowerType: pgtype.Inclusive, + UpperType: pgtype.Inclusive, + Status: pgtype.Present, + } + + if dr.Infodate != nil { + dateInfo = pgtype.Timestamptz{ + Time: time.Time(*dr.Infodate), + Status: pgtype.Present, + } + } else { + dateInfo = pgtype.Timestamptz{ + Status: pgtype.Null, + } + } + + var geodref sql.NullString + if dr.Geodref != nil { + geodref = sql.NullString{ + String: string(*dr.Geodref), + Valid: true, + } + } + + var source sql.NullString + if dr.Source != nil { + source = sql.NullString{ + String: string(*dr.Source), + Valid: true, + } + } + + if _, err := insertStmt.ExecContext(ctx, + ic.code.CountryCode, + ic.code.LoCode, + ic.code.FairwaySection, + ic.code.Orc, + ic.code.Hectometre, + string(*dr.Objname.Loc), + int64(*dr.Lat), int64(*dr.Lon), + from, + to, + &validity, + float64(*dr.Zeropoint), + geodref, + &dateInfo, + source, + ); err != nil { + return nil, err + } + + for _, wl := range []struct { + level **erdms.RisreflevelcodeType + value **erdms.RisreflevelvalueType + }{ + {&dr.Reflevel1code, &dr.Reflevel1value}, + {&dr.Reflevel2code, &dr.Reflevel2value}, + {&dr.Reflevel3code, &dr.Reflevel3value}, + } { + if *wl.level == nil || *wl.value == nil { + continue + } + if _, err := insertWaterLevelStmt.ExecContext( + ctx, + ic.code.CountryCode, + ic.code.LoCode, + ic.code.FairwaySection, + ic.code.Orc, + ic.code.Hectometre, + string(**wl.level), + int64(**wl.value), + ); err != nil { + return nil, err + } + } + } + + if err = tx.Commit(); err == nil { + feedback.Info("Refreshing gauges successfully took %s.", + time.Since(start)) + } else { + feedback.Error("Refreshing gauges failed after %s.", + time.Since(start)) + } + + return nil, err }
--- a/pkg/imports/wkb.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/imports/wkb.go Fri Jan 18 17:10:16 2019 +0100 @@ -23,6 +23,7 @@ ) type ( + pointSlice []float64 lineSlice [][]float64 polygonSlice [][][]float64 ) @@ -30,6 +31,7 @@ const ( wkbNDR byte = 1 + wkbPoint uint32 = 1 wkbLineString uint32 = 2 wkbPolygon uint32 = 3 ) @@ -59,6 +61,28 @@ return buf.Bytes() } +func (p pointSlice) asWKB() []byte { + + size := 1 + 4 + 2*8 + + buf := bytes.NewBuffer(make([]byte, 0, size)) + + binary.Write(buf, binary.LittleEndian, wkbNDR) + binary.Write(buf, binary.LittleEndian, wkbPoint) + + var lat, lon float64 + if len(p) > 0 { + lat = p[0] + } + if len(p) > 1 { + lon = p[1] + } + binary.Write(buf, binary.LittleEndian, math.Float64bits(lat)) + binary.Write(buf, binary.LittleEndian, math.Float64bits(lon)) + + return buf.Bytes() +} + func (p polygonSlice) asWKB() []byte { if p == nil { return nil
--- a/pkg/imports/wx.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/imports/wx.go Fri Jan 18 17:10:16 2019 +0100 @@ -264,12 +264,6 @@ return nil, err } - if features == 0 { - err := errors.New("No features found") - feedback.Error("%v", err) - return nil, err - } - if badProperties > 0 { feedback.Warn("Bad properties: %d", badProperties) } @@ -282,6 +276,12 @@ feedback.Warn("Unsupported types found: %s", unsupported) } + if features == 0 { + err := errors.New("No features found") + feedback.Error("%v", err) + return nil, err + } + if err = tx.Commit(); err == nil { feedback.Info("Storing %d features took %s", features, time.Since(start))
--- a/pkg/models/common.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/models/common.go Fri Jan 18 17:10:16 2019 +0100 @@ -13,7 +13,14 @@ package models -import "errors" +import ( + "database/sql/driver" + "encoding/json" + "errors" + "fmt" + "strings" + "time" +) var ( errNoString = errors.New("Not a string") @@ -22,3 +29,85 @@ // WGS84 is the EPSG of the World Geodetic System 1984. const WGS84 = 4326 + +const DateFormat = "2006-01-02" + +type ( + Date struct{ time.Time } + // Country is a valid country 2 letter code. + Country string + // UniqueCountries is a list of unique countries. + UniqueCountries []Country +) + +func (srd Date) MarshalJSON() ([]byte, error) { + return json.Marshal(srd.Format(DateFormat)) +} + +func (srd *Date) UnmarshalJSON(data []byte) error { + var s string + if err := json.Unmarshal(data, &s); err != nil { + return err + } + d, err := time.Parse(DateFormat, s) + if err == nil { + *srd = Date{d} + } + return err +} + +var ( + validCountries = []string{ + "AT", "BG", "DE", "HU", "HR", + "MD", "RO", "RS", "SK", "UA", + } + errNoValidCountry = errors.New("Not a valid country") +) + +// UnmarshalJSON ensures that the given string forms a valid +// two letter country code. +func (c *Country) UnmarshalJSON(data []byte) error { + var s string + if err := json.Unmarshal(data, &s); err != nil { + return err + } + s = strings.ToUpper(s) + for _, v := range validCountries { + if v == s { + *c = Country(v) + return nil + } + } + return errNoValidCountry +} + +// Value implements the driver.Valuer interface. +func (c Country) Value() (driver.Value, error) { + return string(c), nil +} + +// Scan implements the sql.Scanner interfaces. +func (c *Country) Scan(src interface{}) (err error) { + if s, ok := src.(string); ok { + *c = Country(s) + } else { + err = errNoString + } + return +} + +func (uc *UniqueCountries) UnmarshalJSON(data []byte) error { + var countries []Country + if err := json.Unmarshal(data, &countries); err != nil { + return err + } + unique := map[Country]struct{}{} + for _, c := range countries { + if _, found := unique[c]; found { + return fmt.Errorf("country '%s' is not unique", string(c)) + } + unique[c] = struct{}{} + } + *uc = countries + return nil +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/models/distancemarks.go Fri Jan 18 17:10:16 2019 +0100 @@ -0,0 +1,29 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSES/AGPL-3.0.txt +// +// Copyright (C) 2018 by via donau +// – Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Sascha L. Teichmann <sascha.teichmann@intevation.de> + +package models + +import "gemma.intevation.de/gemma/pkg/common" + +type ( + // DistanceMarksVirtualImport specifies an import of distance marks virtual. + DistanceMarksVirtualImport struct { + // URL is the SOAP service URL. + URL string `json:"url"` + // SendEmail is set to true if an email should be send after + // importing the waterway gauges. + SendEmail bool `json:"send-email"` + // Attributes are optional attributes. + Attributes common.Attributes `json:"attributes,omitempty"` + } +)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/models/dma.go Fri Jan 18 17:10:16 2019 +0100 @@ -0,0 +1,33 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSES/AGPL-3.0.txt +// +// Copyright (C) 2018 by via donau +// – Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Raimund Renkert <raimund.renkert@intevation.de> + +package models + +import "gemma.intevation.de/gemma/pkg/common" + +type ( + // DistanceMarksAshoreImport specifies an import of the distance marks. + DistanceMarksAshoreImport struct { + // URL is the capabilities URL of the WFS. + URL string `json:"url"` + // FeatureType is the layer to use. + FeatureType string `json:"feature-type"` + // SortBy sorts the feature by this key. + SortBy string `json:"sort-by"` + // SendEmail is set to true if an email should be send after + // importing the axis. + SendEmail bool `json:"send-email"` + // Attributes are optional attributes. + Attributes common.Attributes `json:"attributes,omitempty"` + } +)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/models/fd.go Fri Jan 18 17:10:16 2019 +0100 @@ -0,0 +1,43 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSES/AGPL-3.0.txt +// +// Copyright (C) 2018 by via donau +// – Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Raimund Renkert <raimund.renkert@intevation.de> + +package models + +import "gemma.intevation.de/gemma/pkg/common" + +type ( + // FairwayDimensionImport specifies an import of the waterway axis. + FairwayDimensionImport struct { + // URL is the capabilities URL of the WFS. + URL string `json:"url"` + // FeatureType is the layer to use. + FeatureType string `json:"feature-type"` + // SortBy sorts the feature by this key. + SortBy string `json:"sort-by"` + // SendEmail is set to true if an email should be send after + // importing the axis. + SendEmail bool `json:"send-email"` + // LOS is the level of service provided by the wfs + LOS int `json:"los"` + // MinWidth is the minimum width of the fairway for the specified LOS + MinWidth int `json:"min-width"` + // MaxWidth is the maximum width of the fairway for the specified LOS + MaxWidth int `json:"max-width"` + // Depth is the minimum depth of the fairway for the specified LOS + Depth int `json:"depth"` + // SourceOrganization specifies the source of the entry + SourceOrganization string `json:"source-organization"` + // Attributes are optional attributes. + Attributes common.Attributes `json:"attributes,omitempty"` + } +)
--- a/pkg/models/gauge.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/models/gauge.go Fri Jan 18 17:10:16 2019 +0100 @@ -14,9 +14,6 @@ package models import ( - "errors" - "fmt" - "strconv" "time" "gemma.intevation.de/gemma/pkg/common" @@ -36,41 +33,3 @@ Gauge Isrs LatestDateIssue time.Time } - -// Isrs represents the gauge identification data structure -type Isrs struct { - CountryCode string - LoCode string - FairwaySection string - Orc string - Hectometre int -} - -// IsrsFromString converts string representation of isrs code to type Isrs -func IsrsFromString(isrsCode string) (*Isrs, error) { - if len(isrsCode) < 20 { - return nil, errors.New("ISRS code too short") - } - hm, err := strconv.Atoi(isrsCode[15:20]) - if err != nil { - return nil, err - } - isrs := Isrs{ - CountryCode: isrsCode[0:2], - LoCode: isrsCode[2:5], - FairwaySection: isrsCode[5:10], - Orc: isrsCode[10:15], - Hectometre: hm, - } - return &isrs, nil -} - -// String creates a isrs code string from Isrs -func (isrs *Isrs) String() string { - return fmt.Sprintf("%s%s%s%s%05d", - isrs.CountryCode, - isrs.LoCode, - isrs.FairwaySection, - isrs.Orc, - isrs.Hectometre) -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/models/isrs.go Fri Jan 18 17:10:16 2019 +0100 @@ -0,0 +1,73 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSES/AGPL-3.0.txt +// +// Copyright (C) 2018 by via donau +// – Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Raimund Renkert <raimund.renkert@intevation.de> +// * Sascha L. Teichmann <sascha.teichmann@intevation.de> + +package models + +import ( + "encoding/json" + "errors" + "fmt" + "strconv" +) + +// Isrs represents the gauge identification data structure +type Isrs struct { + CountryCode string + LoCode string + FairwaySection string + Orc string + Hectometre int +} + +func (isrs *Isrs) UnmarshalJSON(data []byte) error { + var s string + if err := json.Unmarshal(data, &s); err != nil { + return err + } + in, err := IsrsFromString(s) + if err != nil { + return err + } + *isrs = *in + return nil +} + +// IsrsFromString converts string representation of isrs code to type Isrs +func IsrsFromString(isrsCode string) (*Isrs, error) { + if len(isrsCode) < 20 { + return nil, errors.New("ISRS code too short") + } + hm, err := strconv.Atoi(isrsCode[15:20]) + if err != nil { + return nil, err + } + isrs := Isrs{ + CountryCode: isrsCode[0:2], + LoCode: isrsCode[2:5], + FairwaySection: isrsCode[5:10], + Orc: isrsCode[10:15], + Hectometre: hm, + } + return &isrs, nil +} + +// String creates a isrs code string from Isrs +func (isrs *Isrs) String() string { + return fmt.Sprintf("%s%s%s%s%05d", + isrs.CountryCode, + isrs.LoCode, + isrs.FairwaySection, + isrs.Orc, + isrs.Hectometre) +}
--- a/pkg/models/sr.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/models/sr.go Fri Jan 18 17:10:16 2019 +0100 @@ -21,19 +21,14 @@ "errors" "fmt" "io" - "time" ) -const SoundingResultDateFormat = "2006-01-02" - type ( - SoundingResultDate struct{ time.Time } - SoundingResultMeta struct { - Date SoundingResultDate `json:"date"` - Bottleneck string `json:"bottleneck"` - EPSG uint `json:"epsg"` - DepthReference string `json:"depth-reference"` + Date Date `json:"date"` + Bottleneck string `json:"bottleneck"` + EPSG uint `json:"epsg"` + DepthReference string `json:"depth-reference"` } ) @@ -50,22 +45,6 @@ WHERE bn.objnam = $1 AND sr.date_info = $2` ) -func (srd SoundingResultDate) MarshalJSON() ([]byte, error) { - return json.Marshal(srd.Format(SoundingResultDateFormat)) -} - -func (srd *SoundingResultDate) UnmarshalJSON(data []byte) error { - var s string - if err := json.Unmarshal(data, &s); err != nil { - return err - } - d, err := time.Parse(SoundingResultDateFormat, s) - if err == nil { - *srd = SoundingResultDate{d} - } - return err -} - func (m *SoundingResultMeta) Decode(r io.Reader) error { err := json.NewDecoder(r).Decode(m) if err == nil && m.EPSG == 0 {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/models/stretch.go Fri Jan 18 17:10:16 2019 +0100 @@ -0,0 +1,30 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSES/AGPL-3.0.txt +// +// Copyright (C) 2018 by via donau +// – Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Sascha L. Teichmann <sascha.teichmann@intevation.de> + +package models + +import "gemma.intevation.de/gemma/pkg/common" + +type StretchImport struct { + Name string `json:"name"` + From Isrs `json:"from"` + To Isrs `json:"to"` + ObjNam string `json:"objnam"` + NObjNam *string `json:"nobjnam"` + Source string `json:"source-organization"` + Date Date `json:"date-info"` + Countries UniqueCountries `json:"countries"` + + SendEmail bool `json:"send-email"` + Attributes common.Attributes `json:"attributes,omitempty"` +}
--- a/pkg/models/user.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/models/user.go Fri Jan 18 17:10:16 2019 +0100 @@ -25,8 +25,6 @@ type ( // Email is a string formed by a valid EMail address. Email string - // Country is a valid country 2 letter code. - Country string // Role is a string with a valid gemma role. Role string // UserName is a string forming a valid user name. @@ -132,46 +130,6 @@ } var ( - validCountries = []string{ - "AT", "BG", "DE", "HU", "HR", - "MD", "RO", "RS", "SK", "UA", - } - errNoValidCountry = errors.New("Not a valid country") -) - -// UnmarshalJSON ensures that the given string forms a valid -// two letter country code. -func (c *Country) UnmarshalJSON(data []byte) error { - var s string - if err := json.Unmarshal(data, &s); err != nil { - return err - } - s = strings.ToUpper(s) - for _, v := range validCountries { - if v == s { - *c = Country(v) - return nil - } - } - return errNoValidCountry -} - -// Value implements the driver.Valuer interface. -func (c Country) Value() (driver.Value, error) { - return string(c), nil -} - -// Scan implements the sql.Scanner interfaces. -func (c *Country) Scan(src interface{}) (err error) { - if s, ok := src.(string); ok { - *c = Country(s) - } else { - err = errNoString - } - return -} - -var ( validRoles = []string{ "waterway_user", "waterway_admin",
--- a/pkg/soap/erdms/service.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/soap/erdms/service.go Fri Jan 18 17:10:16 2019 +0100 @@ -20,10 +20,6 @@ "gemma.intevation.de/gemma/pkg/soap" ) -// against "unused imports" -var _ time.Time -var _ xml.Name - // adn (dgs goods) internal adn code (unnr + seqnr: to make each adn good unique) type AdnCodeType string @@ -564,14 +560,21 @@ RefdataReturn []*RefdataReturnType `xml:"refdataReturn,omitempty"` } +// NoNS is a helper type to allow string tags without a namespace. +type NoNS struct { + NS string `xml:"xmlns,attr"` + Text string `xml:",chardata"` +} + type GetRisDataXMLType struct { - XMLName xml.Name `xml:"http://rwsreftool/ getRisDataXMLType"` - - Subcode string `xml:"subcode,omitempty"` - - Funcode string `xml:"funcode,omitempty"` - - Version *RefrecVersionType `xml:"version,omitempty"` + // XMLName xml.Name `xml:"http://rwsreftool/ getRisDataXMLType"` + + //Subcode string `xml:"subcode,omitempty"` + Subcode NoNS `xml:"subcode,omitempty"` + + Funcode NoNS `xml:"funcode,omitempty"` + + Version *RefrecVersionType `xml:"http://rwsreftool/ version,omitempty"` } type GetRisDataXMLResponseType struct { @@ -695,7 +698,7 @@ } type Ris_idxType struct { - XMLName xml.Name `xml:"http://rwsreftool/ ris_idxType"` + //XMLName xml.Name `xml:"http://rwsreftool/ ris_idxType"` // Be sure to edit, change the basic Simpletypes, dont edit any of the (sub)elements from here!!! RisidxCode *RisCodeType `xml:"risidxCode,omitempty"` @@ -2422,6 +2425,10 @@ client *soap.SOAPClient } +func NewRefService(url string, tls bool, auth *soap.BasicAuth) RefWeb { + return NewRefWeb(soap.NewSOAPClient(url, tls, auth)) +} + func NewRefWeb(client *soap.SOAPClient) RefWeb { return &refWeb{ client: client,
--- a/pkg/soap/ifaf/service.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/soap/ifaf/service.go Fri Jan 18 17:10:16 2019 +0100 @@ -23,10 +23,6 @@ "gemma.intevation.de/gemma/pkg/soap" ) -// against "unused imports" -var _ time.Time -var _ xml.Name - type Get_bottleneck_fa struct { XMLName xml.Name `xml:"http://www.ris.eu/fairwayavailability/3.0 get_bottleneck_fa"` @@ -894,9 +890,6 @@ } func NewFairwayAvailabilityService(url string, tls bool, auth *soap.BasicAuth) *FairwayAvailabilityService { - if url == "" { - url = "" - } client := soap.NewSOAPClient(url, tls, auth) return &FairwayAvailabilityService{ client: client, @@ -904,9 +897,6 @@ } func NewFairwayAvailabilityServiceWithTLS(url string, tlsCfg *tls.Config, auth *soap.BasicAuth) *FairwayAvailabilityService { - if url == "" { - url = "" - } client := soap.NewSOAPClientWithTLSConfig(url, tlsCfg, auth) return &FairwayAvailabilityService{
--- a/pkg/soap/ifbn/service.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/soap/ifbn/service.go Fri Jan 18 17:10:16 2019 +0100 @@ -852,9 +852,6 @@ } func NewIBottleneckService(url string, tls bool, auth *soap.BasicAuth) *IBottleneckService { - if url == "" { - url = "" - } client := soap.NewSOAPClient(url, tls, auth) return &IBottleneckService{ @@ -863,9 +860,6 @@ } func NewIBottleneckServiceWithTLSConfig(url string, tlsCfg *tls.Config, auth *soap.BasicAuth) *IBottleneckService { - if url == "" { - url = "" - } client := soap.NewSOAPClientWithTLSConfig(url, tlsCfg, auth) return &IBottleneckService{
--- a/pkg/soap/nts/service.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/soap/nts/service.go Fri Jan 18 17:10:16 2019 +0100 @@ -1547,9 +1547,6 @@ } func NewINtSMessageService(url string, tls bool, auth *soap.BasicAuth) *INtSMessageService { - if url == "" { - url = "" - } client := soap.NewSOAPClient(url, tls, auth) return &INtSMessageService{ client: client, @@ -1557,9 +1554,6 @@ } func NewINtSMessageServiceWithTLSConfig(url string, tlsCfg *tls.Config, auth *soap.BasicAuth) *INtSMessageService { - if url == "" { - url = "" - } client := soap.NewSOAPClientWithTLSConfig(url, tlsCfg, auth) return &INtSMessageService{
--- a/pkg/soap/soap.go Fri Jan 18 16:52:20 2019 +0100 +++ b/pkg/soap/soap.go Fri Jan 18 17:10:16 2019 +0100 @@ -17,6 +17,7 @@ "bytes" "crypto/tls" "encoding/xml" + "fmt" "io/ioutil" "log" "math/rand" @@ -270,10 +271,15 @@ } client := &http.Client{Transport: tr} + res, err := client.Do(req) if err != nil { return err } + if res.StatusCode < http.StatusOK || res.StatusCode > 299 { + return fmt.Errorf( + "HTTP error: %d (%s)", res.StatusCode, http.StatusText(res.StatusCode)) + } defer res.Body.Close() rawbody, err := ioutil.ReadAll(res.Body)
--- a/schema/auth.sql Fri Jan 18 16:52:20 2019 +0100 +++ b/schema/auth.sql Fri Jan 18 17:10:16 2019 +0100 @@ -78,7 +78,7 @@ BEGIN FOREACH the_table IN ARRAY ARRAY[ 'gauge_measurements', - 'sections_stretches', + 'stretches', 'waterway_profiles', 'fairway_dimensions', 'bottlenecks', @@ -92,6 +92,7 @@ END; $$; +-- templates CREATE POLICY user_templates ON users.user_templates FOR ALL TO waterway_user USING (username IN(SELECT username FROM users.list_users)); ALTER TABLE users.user_templates ENABLE ROW LEVEL SECURITY; @@ -105,40 +106,6 @@ -- RLS policies for waterway_admin -- -CREATE OR REPLACE FUNCTION best_utm(g geometry) RETURNS integer AS -$$ -DECLARE - center geometry; -BEGIN - SELECT ST_Centroid(g) INTO center; - RETURN - CASE WHEN ST_Y(center) > 0 THEN - 32600 - ELSE - 32700 - END + floor((ST_X(center)+180)/6)::int + 1; -END; -$$ -LANGUAGE plpgsql -IMMUTABLE; - -CREATE OR REPLACE FUNCTION utm_covers(g geography) RETURNS boolean AS -$$ -DECLARE - user_area geometry; - utm integer; -BEGIN - SELECT area::geometry FROM users.responsibility_areas INTO user_area - WHERE country = users.current_user_country(); - SELECT best_utm(user_area) INTO utm; - RETURN ST_Covers( - ST_Transform(user_area, utm), - ST_Transform(g::geometry, utm)); -END; -$$ -LANGUAGE plpgsql -STABLE; - -- Staging area -- TODO: add all relevant tables here @@ -154,7 +121,14 @@ FOR ALL TO waterway_admin USING (utm_covers(area)); --- Imports and import config +CREATE POLICY responsibility_area ON waterway.fairway_dimensions + FOR ALL TO waterway_admin + USING (utm_covers(area)); + + +-- +-- RLS policies for imports and import config +-- CREATE POLICY same_country ON waterway.imports FOR ALL TO waterway_admin @@ -164,22 +138,48 @@ ALTER table waterway.imports ENABLE ROW LEVEL SECURITY; -- The job running the import queue is running as sys_admin and login users --- with that role should see all imports anyhow -CREATE POLICY read_all ON waterway.imports - FOR SELECT TO sys_admin +-- with that role should be able to run imports without restrictions anyhow +CREATE POLICY import_all ON waterway.imports + FOR ALL TO sys_admin USING (true); -CREATE POLICY update_all ON waterway.imports - FOR UPDATE TO sys_admin - USING (true); + +-- For the given table, check whether the given value is used as primary key, +-- bypassing row level security. +CREATE OR REPLACE FUNCTION waterway.is_new_key( + tablename varchar, + kv anyelement) + RETURNS boolean +AS $$ +DECLARE columnname varchar; +DECLARE ret boolean; +BEGIN + columnname = (SELECT column_name + FROM information_schema.key_column_usage k + JOIN information_schema.table_constraints USING (constraint_name) + WHERE k.table_name = tablename and constraint_type = 'PRIMARY KEY'); + EXECUTE format('SELECT NOT $1 = ANY(SELECT %I FROM waterway.%I)', + columnname, tablename) + INTO ret + USING kv; + RETURN ret; +END; +$$ + LANGUAGE plpgsql + SECURITY DEFINER + STABLE PARALLEL SAFE; CREATE POLICY parent_allowed ON waterway.import_logs FOR ALL TO waterway_admin - USING (import_id IN (SELECT id FROM waterway.imports)); + USING (import_id IN (SELECT id FROM waterway.imports)) + WITH CHECK (waterway.is_new_key('imports', import_id) + OR import_id IN (SELECT id FROM waterway.imports)); ALTER table waterway.import_logs ENABLE ROW LEVEL SECURITY; CREATE POLICY parent_allowed ON waterway.track_imports FOR ALL TO waterway_admin - USING (import_id IN (SELECT id FROM waterway.imports)); + USING (import_id IN (SELECT id FROM waterway.imports)) + WITH CHECK (waterway.is_new_key('imports', import_id) + OR import_id IN (SELECT id FROM waterway.imports)); ALTER table waterway.track_imports ENABLE ROW LEVEL SECURITY; CREATE POLICY import_configuration_policy ON waterway.import_configuration @@ -195,4 +195,14 @@ ALTER table waterway.import_configuration ENABLE ROW LEVEL SECURITY; +CREATE POLICY parent_allowed ON waterway.import_configuration_attributes + FOR ALL TO waterway_admin + USING (import_configuration_id IN ( + SELECT id FROM waterway.import_configuration)) + WITH CHECK ( + waterway.is_new_key('import_configuration', import_configuration_id) + OR import_configuration_id IN ( + SELECT id FROM waterway.import_configuration)); +ALTER table waterway.import_configuration_attributes ENABLE ROW LEVEL SECURITY; + COMMIT;
--- a/schema/auth_tests.sql Fri Jan 18 16:52:20 2019 +0100 +++ b/schema/auth_tests.sql Fri Jan 18 17:10:16 2019 +0100 @@ -20,20 +20,32 @@ -- SET SESSION AUTHORIZATION test_user_at; -SELECT throws_ok('CREATE TABLE test()', 42501, NULL, - 'No objects can be created'); +SELECT throws_ok($$ + CREATE TABLE test() + $$, + 42501, NULL, + 'No objects can be created'); + +SELECT isnt_empty($$ + SELECT * FROM waterway.bottlenecks + $$, + 'Staged data should be visible'); -SELECT isnt_empty('SELECT * FROM waterway.bottlenecks', - 'Staged data should be visible'); -SELECT is_empty('SELECT * FROM waterway.bottlenecks WHERE NOT staging_done', - 'Only staged data should be visible'); +SELECT is_empty($$ + SELECT * FROM waterway.bottlenecks WHERE NOT staging_done + $$, + 'Only staged data should be visible'); -SELECT isnt_empty('SELECT * FROM users.templates', - 'User should see templates associated to him'); -SELECT is_empty('SELECT * FROM users.templates - JOIN users.user_templates USING (template_name) - WHERE username <> current_user', - 'User should only see templates associated to him'); +SELECT isnt_empty($$ + SELECT * FROM users.templates + $$, + 'User should see templates associated to him'); +SELECT is_empty($$ + SELECT * FROM users.templates + JOIN users.user_templates USING (template_name) + WHERE username <> current_user + $$, + 'User should only see templates associated to him'); -- -- Run tests as waterway administrator @@ -52,47 +64,151 @@ $2, 'AT', 'AT', 'AT', 1, 'depth', 'testorganization' ); -SELECT lives_ok('EXECUTE bn_insert( - ''test1'', - ST_geomfromtext(''POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'', - 4326))', - 'Waterway admin can insert data within his region'); -SELECT throws_ok('EXECUTE bn_insert( - ''test2'', - ST_geomfromtext(''POLYGON((1 0, 1 1, 2 1, 2 0, 1 0))'', - 4326))', - 42501, NULL, - 'Waterway admin cannot insert data outside his region'); +SELECT lives_ok($$ + EXECUTE bn_insert( + 'test1', + ST_geomfromtext('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))', 4326)) + $$, + 'Waterway admin can insert data within his region'); +SELECT throws_ok($$ + EXECUTE bn_insert( + 'test2', + ST_geomfromtext('POLYGON((1 0, 1 1, 2 1, 2 0, 1 0))', 4326)) + $$, + 42501, NULL, + 'Waterway admin cannot insert data outside his region'); -- template management -SELECT isnt_empty('SELECT * FROM users.templates - JOIN users.user_templates USING (template_name) - WHERE username <> current_user', - 'Waterway admin should see templates of other users'); +SELECT isnt_empty($$ + SELECT * FROM users.templates + JOIN users.user_templates USING (template_name) + WHERE username <> current_user + $$, + 'Waterway admin should see templates of other users'); + +SELECT lives_ok($$ + INSERT INTO users.templates (template_name, template_data) + VALUES ('New AT', '\x'); + INSERT INTO users.user_templates + VALUES ('test_user_at', 'New AT') + $$, + 'Waterway admin can add templates for users in his country'); + +SELECT throws_ok($$ + INSERT INTO users.user_templates VALUES ('waterway_user2', 'AT') + $$, + 42501, NULL, + 'Waterway admin cannot add template for other country'); + +SELECT isnt_empty($$ + UPDATE users.templates SET template_data = '\xDABE' + WHERE template_name = 'AT' RETURNING * + $$, + 'Waterway admin can alter templates for own country'); -SELECT lives_ok('INSERT INTO users.templates (template_name, template_data) - VALUES (''New AT'', ''\x''); - INSERT INTO users.user_templates - VALUES (''test_user_at'', ''New AT'')', - 'Waterway admin can add templates for users in his country'); +SELECT is_empty($$ + UPDATE users.templates SET template_data = '\xDABE' + WHERE template_name = 'RO' RETURNING * + $$, + 'Waterway admin cannot alter templates for other country'); + +SELECT isnt_empty($$ + DELETE FROM users.templates WHERE template_name = 'AT' RETURNING * + $$, + 'Waterway admin can delete templates for own country'); -SELECT throws_ok('INSERT INTO users.user_templates - VALUES (''waterway_user2'', ''AT'')', - 42501, NULL, - 'Waterway admin cannot add template for other country'); +SELECT is_empty($$ + DELETE FROM users.templates WHERE template_name = 'RO' RETURNING * + $$, + 'Waterway admin cannot delete templates for other country'); + +-- import management +SELECT lives_ok($$ + WITH + job AS ( + INSERT INTO waterway.imports (kind, username, data) VALUES ( + 'test', current_user, 'test') RETURNING id), + log AS ( + INSERT INTO waterway.import_logs (import_id, msg) + SELECT id, 'test' FROM job) + INSERT INTO waterway.track_imports + SELECT id, 'waterway.bottlenecks', 0 FROM job + $$, + 'Waterway admin can add import job and related data'); -SELECT isnt_empty('UPDATE users.templates SET template_data = ''\xDABE'' - WHERE template_name = ''AT'' RETURNING *', - 'Waterway admin can alter templates for own country'); +SET SESSION AUTHORIZATION test_admin_at2; +SELECT bag_has($$ + SELECT username FROM users.list_users + $$, + $$ + WITH job AS ( + UPDATE waterway.imports SET state = 'accepted' + RETURNING id, username), + log AS ( + INSERT INTO waterway.import_logs (import_id, msg) + SELECT id, 'test continued' FROM job) + SELECT username FROM job + $$, + 'Waterway admin can edit import jobs from his country only'); -SELECT is_empty('UPDATE users.templates SET template_data = ''\xDABE'' - WHERE template_name = ''RO'' RETURNING *', - 'Waterway admin cannot alter templates for other country'); +SELECT lives_ok($$ + WITH + config AS ( + INSERT INTO waterway.import_configuration (kind, username) VALUES ( + 'test', current_user) RETURNING id) + INSERT INTO waterway.import_configuration_attributes + SELECT id, 'test key', 'test value' FROM config + $$, + 'Waterway admin can add import config and related data'); -SELECT isnt_empty('DELETE FROM users.templates WHERE template_name = ''AT'' - RETURNING *', - 'Waterway admin can delete templates for own country'); +SET SESSION AUTHORIZATION test_admin_at; +SELECT bag_has($$ + SELECT username FROM users.list_users + $$, + $$ + WITH config AS ( + UPDATE waterway.import_configuration SET send_email = true + RETURNING id, username), + attrib AS ( + INSERT INTO waterway.import_configuration_attributes + SELECT id, 'test continued', 'test value' FROM config), + attrib_upd AS ( + UPDATE waterway.import_configuration_attributes SET v = 'test v' + WHERE import_configuration_id = (SELECT id FROM config)) + SELECT username FROM config + $$, + 'Waterway admin can edit import config from his country only'); -SELECT is_empty('DELETE FROM users.templates WHERE template_name = ''RO'' - RETURNING *', - 'Waterway admin cannot delete templates for other country'); +SET SESSION AUTHORIZATION test_admin_ro; +SELECT throws_ok($$ + INSERT INTO waterway.import_logs (import_id, msg) + VALUES (currval(pg_get_serial_sequence('waterway.imports', 'id')), + 'test') + $$, + 42501, NULL, + 'Waterway admin cannot add log messages to other countries imports'); + +SELECT throws_ok($$ + DELETE FROM waterway.track_imports + WHERE import_id = currval( + pg_get_serial_sequence('waterway.imports', 'id')) + $$, + 42501, NULL, + 'Waterway admin cannot delete tracking data of other countries imports'); + +SELECT throws_ok($$ + INSERT INTO waterway.import_configuration_attributes + VALUES (currval(pg_get_serial_sequence( + 'waterway.import_configuration', 'id')), + 'test', 'test value') + $$, + 42501, NULL, + 'Waterway admin cannot add attributes to other countries import config'); + +SELECT throws_ok($$ + UPDATE waterway.import_configuration_attributes SET v = 'evil' + WHERE import_configuration_id = currval( + pg_get_serial_sequence('waterway.import_configuration', 'id')) + $$, + 42501, NULL, + 'Waterway admin cannot overwrite attributes of other countries config');
--- a/schema/gemma.sql Fri Jan 18 16:52:20 2019 +0100 +++ b/schema/gemma.sql Fri Jan 18 17:10:16 2019 +0100 @@ -234,24 +234,23 @@ catccl smallint REFERENCES catccls, dirimp smallint REFERENCES dirimps ) - CREATE UNIQUE INDEX ON waterway_area ((ST_GeoHash(area, 23))) CREATE TABLE gauges ( location isrs PRIMARY KEY CHECK( (location).orc SIMILAR TO 'G[[:digit:]]{4}' AND CAST(substring((location).orc from 2 for 4) AS int) < 2048), objname varchar NOT NULL, - is_left boolean, -- XXX: Or reference position_codes? geom geography(POINT, 4326) NOT NULL, - applicability isrsrange, - validity tstzrange,-- XXX: Should ranges be NOT NULL? In DRC, only copy + applicability_from_km int8, + applicability_to_km int8, + validity tstzrange, -- pasted text from a more general specification is given -- (a gauge is not a berth!) -- TODO: Ranges need a joint exclusion constaint to prevent overlaps? zero_point double precision NOT NULL, geodref varchar(4) REFERENCES depth_references, date_info timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, - source_organization varchar NOT NULL + source_organization varchar ) CREATE TRIGGER gauges_date_info BEFORE UPDATE ON gauges FOR EACH ROW EXECUTE PROCEDURE update_date_info() @@ -300,8 +299,6 @@ objnam varchar NOT NULL, nobjnam varchar ) - -- TODO: @tom: Why did you choose this index kind? - -- CREATE UNIQUE INDEX ON waterway_axis ((ST_GeoHash(wtwaxs, 23))) -- This table allows linkage between 1D ISRS location codes and 2D space -- e.g. for cutting bottleneck area out of waterway area based on virtual @@ -313,25 +310,25 @@ ) CREATE TABLE distance_marks ( - country char(2) NOT NULL REFERENCES countries, - hectom int NOT NULL, + id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, + country char(2) REFERENCES countries, + hectom int, geom geography(POINT, 4326) NOT NULL, -- include location in primary key, because we have no fairway code: - PRIMARY KEY (country, hectom, geom), - catdis smallint NOT NULL REFERENCES catdis, - position_code char(2) NOT NULL REFERENCES position_codes, - related_enc varchar(12) NOT NULL + catdis smallint REFERENCES catdis, + position_code char(2) REFERENCES position_codes, + related_enc varchar(12) ) -- A table to help geoserver serve the distance marks as WFS 1.1.0. -- At least geoserver-2.13.2 does not serve type geography correctly -- and does not serve the location_code as isrs type - CREATE VIEW waterway.distance_marks_geoserver AS + CREATE VIEW distance_marks_geoserver AS SELECT location_code::VARCHAR, geom::Geometry(POINT, 4326), related_enc, (location_code).hectometre - FROM waterway.distance_marks_virtual + FROM distance_marks_virtual -- We need to configure primary keys for the views used by -- geoserver for wfs, otherwise it will generate ids on the fly, @@ -350,18 +347,30 @@ check (pk_policy in ('sequence', 'assigned', 'autogenerated')) ) - CREATE TABLE sections_stretches ( - id varchar PRIMARY KEY, - is_section boolean NOT NULL, -- maps 'function' from interface - stretch isrsrange, + CREATE TABLE stretches ( + id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, + name varchar NOT NULL, + stretch isrsrange NOT NULL, + -- TODO: make it a (MULTI)-LINESTRING. + -- POLYGON is chosen for the convinience + -- of re-using ISRSrange_area. + geom geography(POLYGON, 4326) NOT NULL, objnam varchar NOT NULL, nobjnam varchar, date_info timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, source_organization varchar NOT NULL, - staging_done boolean NOT NULL DEFAULT false + staging_done boolean NOT NULL DEFAULT false, + UNIQUE(name, staging_done) ) + + CREATE TABLE stretch_countries ( + stretches_id int NOT NULL REFERENCES stretches(id), + country_code char(2) NOT NULL REFERENCES countries(country_code), + UNIQUE(stretches_id, country_code) + ) + CREATE TRIGGER sections_stretches_date_info - BEFORE UPDATE ON sections_stretches + BEFORE UPDATE ON stretches FOR EACH ROW EXECUTE PROCEDURE update_date_info() CREATE TABLE waterway_profiles ( @@ -396,7 +405,6 @@ source_organization varchar NOT NULL, staging_done boolean NOT NULL DEFAULT false ) - CREATE UNIQUE INDEX ON fairway_dimensions ((ST_GeoHash(area, 23))) CREATE TRIGGER fairway_dimensions_date_info BEFORE UPDATE ON fairway_dimensions FOR EACH ROW EXECUTE PROCEDURE update_date_info() @@ -468,13 +476,13 @@ ) -- A view to help geoserver serve contour lines. -- At least geoserver-2.13.2 does not serve type geography correctly - CREATE VIEW waterway.sounding_results_contour_lines_geoserver AS + CREATE VIEW sounding_results_contour_lines_geoserver AS SELECT bottleneck_id, date_info, height, CAST(lines AS geometry(multilinestring, 4326)) AS lines - FROM waterway.sounding_results_contour_lines cl - JOIN waterway.sounding_results sr + FROM sounding_results_contour_lines cl + JOIN sounding_results sr ON sr.id = cl.sounding_result_id -- @@ -536,16 +544,15 @@ OR value_lifetime IS NOT NULL) ) - CREATE VIEW waterway.bottleneck_overview AS + CREATE VIEW bottleneck_overview AS SELECT objnam AS name, ST_Centroid(area)::Geometry AS point, (lower(stretch)).hectometre AS from, (upper(stretch)).hectometre AS to, sr.current::text - FROM waterway.bottlenecks bn LEFT JOIN ( - SELECT bottleneck_id, max(date_info) AS current FROM - waterway.sounding_results + FROM bottlenecks bn LEFT JOIN ( + SELECT bottleneck_id, max(date_info) AS current FROM sounding_results GROUP BY bottleneck_id) sr ON sr.bottleneck_id = bn.id ORDER BY objnam
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/geo_functions.sql Fri Jan 18 17:10:16 2019 +0100 @@ -0,0 +1,46 @@ +-- This is Free Software under GNU Affero General Public License v >= 3.0 +-- without warranty, see README.md and license for details. + +-- SPDX-License-Identifier: AGPL-3.0-or-later +-- License-Filename: LICENSES/AGPL-3.0.txt + +-- Copyright (C) 2018 by via donau +-- – Österreichische Wasserstraßen-Gesellschaft mbH +-- Software engineering by Intevation GmbH + +-- Author(s): +-- * Sascha L. Teichmann <sascha.teichmann@intevation.de> + +CREATE OR REPLACE FUNCTION best_utm(g geometry) RETURNS integer AS +$$ +DECLARE + center geometry; +BEGIN + SELECT ST_Centroid(g) INTO center; + RETURN + CASE WHEN ST_Y(center) > 0 THEN + 32600 + ELSE + 32700 + END + floor((ST_X(center)+180)/6)::int + 1; +END; +$$ +LANGUAGE plpgsql +IMMUTABLE; + +CREATE OR REPLACE FUNCTION utm_covers(g geography) RETURNS boolean AS +$$ +DECLARE + user_area geometry; + utm integer; +BEGIN + SELECT area::geometry FROM users.responsibility_areas INTO user_area + WHERE country = users.current_user_country(); + SELECT best_utm(user_area) INTO utm; + RETURN ST_Covers( + ST_Transform(user_area, utm), + ST_Transform(g::geometry, utm)); +END; +$$ +LANGUAGE plpgsql +STABLE;
--- a/schema/install-db.sh Fri Jan 18 16:52:20 2019 +0100 +++ b/schema/install-db.sh Fri Jan 18 17:10:16 2019 +0100 @@ -121,7 +121,8 @@ -c "SET client_min_messages TO WARNING;" \ -f "$BASEDIR/isrs.sql" \ -f "$BASEDIR/gemma.sql" \ - -f "$BASEDIR/search.sql" \ + -f "$BASEDIR/geo_functions.sql" \ + -f "$BASEDIR/search_functions.sql" \ -f "$BASEDIR/geonames.sql" \ -f "$BASEDIR/manage_users.sql" \ -f "$BASEDIR/auth.sql" \
--- a/schema/isrs_functions.sql Fri Jan 18 16:52:20 2019 +0100 +++ b/schema/isrs_functions.sql Fri Jan 18 17:10:16 2019 +0100 @@ -65,12 +65,19 @@ FROM from_point, to_point) AS points WHERE ST_Covers(ST_Buffer(lines.line, 0.0001), points.pts)), axis_substring AS ( - -- Use linear referencing to clip axis between distance marks - SELECT ST_LineSubstring( + -- Use linear referencing to clip axis between distance marks. + -- Simplification is used to work-around the problem, that + -- ST_LineSubstring might generate very small line segments at an + -- end of the resulting linestring, that significantly differ from + -- the direction of the input linestring due to finite precision + -- of the calculation. The generated small segment of the + -- resulting line leads to unexpected results of the buffer with + -- endcap=flat in the CTE below. + SELECT ST_SimplifyPreserveTopology(ST_LineSubstring( axis_segment.line, ST_LineLocatePoint(axis_segment.line, from_point.geom), ST_LineLocatePoint(axis_segment.line, to_point.geom) - ) AS line + ), 0.0001) AS line FROM axis_segment, from_point, to_point), range_area AS ( -- Create a buffer around the clipped axis, as large as it could
--- a/schema/manage_users_tests.sql Fri Jan 18 16:52:20 2019 +0100 +++ b/schema/manage_users_tests.sql Fri Jan 18 17:10:16 2019 +0100 @@ -40,7 +40,7 @@ SELECT set_eq($$ SELECT count(*) FROM users.list_users $$, - ARRAY[4], + ARRAY[6], 'System admin can see all users'); --
--- a/schema/run_tests.sh Fri Jan 18 16:52:20 2019 +0100 +++ b/schema/run_tests.sh Fri Jan 18 17:10:16 2019 +0100 @@ -28,7 +28,7 @@ -c 'SET client_min_messages TO WARNING' \ -c "DROP ROLE IF EXISTS $TEST_ROLES" \ -f tap_tests_data.sql \ - -c 'SELECT plan(47)' \ + -c 'SELECT plan(55)' \ -f isrs_tests.sql \ -f auth_tests.sql \ -f manage_users_tests.sql \
--- a/schema/search.sql Fri Jan 18 16:52:20 2019 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ --- This is Free Software under GNU Affero General Public License v >= 3.0 --- without warranty, see README.md and license for details. - --- SPDX-License-Identifier: AGPL-3.0-or-later --- License-Filename: LICENSES/AGPL-3.0.txt - --- Copyright (C) 2018 by via donau --- – Österreichische Wasserstraßen-Gesellschaft mbH --- Software engineering by Intevation GmbH - --- Author(s): --- * Sascha Wilde <wilde@intevation.de> - -CREATE FUNCTION search_bottlenecks(search_string text) RETURNS jsonb - LANGUAGE plpgsql - AS $$ -DECLARE - _result jsonb; -BEGIN - SELECT COALESCE(json_agg(r),'[]') - INTO _result - FROM (SELECT objnam AS name, - ST_AsGeoJSON(ST_Centroid(area))::json AS geom, - 'bottleneck' AS type - FROM waterway.bottlenecks - WHERE objnam ILIKE '%' || search_string || '%' - ORDER BY name) r; - RETURN _result; -END; -$$; - -CREATE FUNCTION search_cities(search_string text) RETURNS jsonb - LANGUAGE plpgsql - AS $$ -DECLARE - _result jsonb; -BEGIN - SELECT COALESCE(json_agg(r),'[]') - INTO _result - FROM (SELECT name || ' (' || country_code || ')' AS name, - ST_AsGeoJSON(location)::json AS geom, - 'city' AS type - FROM waterway.geonames - WHERE feature_code IN ('PPLA', 'PPLA1', 'PPLA2', 'PPLA3', 'PPLC') - AND (name ILIKE '%' || search_string || '%' - OR alternatenames ~* ('(^|,)' || search_string || '($|,)')) - ORDER BY array_position(ARRAY['PPLC', 'PPLA', 'PPLA1', 'PPLA2', 'PPLA3'], - feature_code::text), - name) r; - RETURN _result; -END; -$$; - -CREATE FUNCTION search_most(search_string text) RETURNS jsonb - LANGUAGE plpgsql - AS $$ -BEGIN - RETURN search_bottlenecks(search_string) || search_cities(search_string); -END; -$$;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/search_functions.sql Fri Jan 18 17:10:16 2019 +0100 @@ -0,0 +1,60 @@ +-- This is Free Software under GNU Affero General Public License v >= 3.0 +-- without warranty, see README.md and license for details. + +-- SPDX-License-Identifier: AGPL-3.0-or-later +-- License-Filename: LICENSES/AGPL-3.0.txt + +-- Copyright (C) 2018 by via donau +-- – Österreichische Wasserstraßen-Gesellschaft mbH +-- Software engineering by Intevation GmbH + +-- Author(s): +-- * Sascha Wilde <wilde@intevation.de> + +CREATE OR REPLACE FUNCTION search_bottlenecks(search_string text) RETURNS jsonb + LANGUAGE plpgsql + AS $$ +DECLARE + _result jsonb; +BEGIN + SELECT COALESCE(json_agg(r),'[]') + INTO _result + FROM (SELECT objnam AS name, + ST_AsGeoJSON(ST_Centroid(area))::json AS geom, + 'bottleneck' AS type + FROM waterway.bottlenecks + WHERE objnam ILIKE '%' || search_string || '%' + ORDER BY name) r; + RETURN _result; +END; +$$; + +CREATE OR REPLACE FUNCTION search_cities(search_string text) RETURNS jsonb + LANGUAGE plpgsql + AS $$ +DECLARE + _result jsonb; +BEGIN + SELECT COALESCE(json_agg(r),'[]') + INTO _result + FROM (SELECT name || ' (' || country_code || ')' AS name, + ST_AsGeoJSON(location)::json AS geom, + 'city' AS type + FROM waterway.geonames + WHERE feature_code IN ('PPLA', 'PPLA1', 'PPLA2', 'PPLA3', 'PPLC') + AND (name ILIKE '%' || search_string || '%' + OR alternatenames ~* ('(^|,)' || search_string || '($|,)')) + ORDER BY array_position(ARRAY['PPLC', 'PPLA', 'PPLA1', 'PPLA2', 'PPLA3'], + feature_code::text), + name) r; + RETURN _result; +END; +$$; + +CREATE OR REPLACE FUNCTION search_most(search_string text) RETURNS jsonb + LANGUAGE plpgsql + AS $$ +BEGIN + RETURN search_bottlenecks(search_string) || search_cities(search_string); +END; +$$;
--- a/schema/tap_tests_data.sql Fri Jan 18 16:52:20 2019 +0100 +++ b/schema/tap_tests_data.sql Fri Jan 18 17:10:16 2019 +0100 @@ -29,6 +29,10 @@ INSERT INTO users.list_users VALUES ( 'waterway_admin', 'test_admin_at', 'admin_at1$', 'AT', NULL, 'yyy'); INSERT INTO users.list_users VALUES ( + 'waterway_admin', 'test_admin_at2', 'admin_at2$', 'AT', NULL, 'yyy'); +INSERT INTO users.list_users VALUES ( + 'waterway_admin', 'test_admin_ro', 'admin_ro1$', 'RO', NULL, 'yyx'); +INSERT INTO users.list_users VALUES ( 'sys_admin', 'test_sys_admin1', 'sys_admin1$', 'AT', NULL, 'zzz'); INSERT INTO limiting_factors VALUES ('depth'), ('width'); @@ -88,3 +92,20 @@ VALUES ('AT', '\x'), ('RO', '\x'); INSERT INTO users.user_templates VALUES ('test_user_at', 'AT'), ('test_user_ro', 'RO'); + +WITH +job AS ( + INSERT INTO waterway.imports (kind, username, data) VALUES ( + 'test', 'test_admin_ro', 'test') RETURNING id), +log AS ( + INSERT INTO waterway.import_logs (import_id, msg) + SELECT id, 'test' FROM job) +INSERT INTO waterway.track_imports + SELECT id, 'waterway.bottlenecks', 1 FROM job; + +WITH +config AS ( + INSERT INTO waterway.import_configuration (kind, username) VALUES ( + 'test', 'test_admin_ro') RETURNING id) +INSERT INTO waterway.import_configuration_attributes + SELECT id, 'test key', 'test value' FROM config;