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">&nbsp;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">&nbsp;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;