about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--qc_app/templates/rqtl2/select-population.html124
-rw-r--r--qc_app/upload/rqtl2.py17
2 files changed, 141 insertions, 0 deletions
diff --git a/qc_app/templates/rqtl2/select-population.html b/qc_app/templates/rqtl2/select-population.html
new file mode 100644
index 0000000..3ce9dc8
--- /dev/null
+++ b/qc_app/templates/rqtl2/select-population.html
@@ -0,0 +1,124 @@
+{%extends "base.html"%}
+{%from "flash_messages.html" import flash_messages%}
+
+{%block title%}Select Grouping/Population{%endblock%}
+
+{%block contents%}
+<h1 class="heading">Select grouping/population</h1>
+
+<div class="explainer">
+  <p>The data is organised in a hierarchical form, beginning with
+    <em>species</em> at the very top. Under <em>species</em> the data is
+    organised by <em>population</em>, sometimes referred to as <em>grouping</em>.
+    (In some really old documents/systems, you might see this referred to as
+    <em>InbredSet</em>.)</p>
+  <p>In this section, you get to define what population your data is to be
+    organised by.</p>
+</div>
+
+<form method="POST" action="{{url_for('samples.select_population')}}">
+  <legend class="heading">select grouping/population</legend>
+  {{flash_messages("error-select-population")}}
+
+  <input type="hidden" name="species_id" value="{{species.SpeciesId}}" />
+  <fieldset>
+    <label for="select:inbredset" class="form-col-1">population</label>
+    <select id="select:inbredset"
+	    name="inbredset_id"
+	    required="required"
+	    class="form-col-2">
+      <option value="">Select a grouping/population</option>
+      {%for pop in populations%}
+      <option value="{{pop.InbredSetId}}">
+	{{pop.InbredSetName}} ({{pop.FullName}})</option>
+      {%endfor%}
+    </select>
+    <span class="form-input-help">If you are adding data to an already existing
+      population, simply pick the population from this drop-down selector. If
+      you cannot find your population from this list, try the form below to
+      create a new one..</span>
+  </fieldset>
+
+  <fieldset>
+    <input type="submit"
+	   value="select population"
+	   class="btn btn-main form-col-2" />
+  </fieldset>
+</form>
+
+<p style="color:#FE3535; padding-left:20em; font-weight:bolder;">OR</p>
+
+<form method="POST" action="{{url_for('samples.create_population')}}">
+  <legend class="heading">create new grouping/population</legend>
+  {{flash_messages("error-create-population")}}
+
+  <input type="hidden" name="species_id" value="{{species.SpeciesId}}" />
+  <fieldset>
+    <legend>mandatory</legend>
+    <label for="txt:inbredset-name" class="form-col-1">name</label>
+    <input id="txt:inbredset-name"
+	   name="inbredset_name"
+	   type="text"
+	   required="required"
+	   placeholder="Enter grouping/population name"
+	   class="form-col-2" />
+    <span class="form-input-help">This is a short name that identifies the
+      population. Useful for menus, and quick scanning.</span>
+
+    <label for="txt:" class="form-col-1">full name</label>
+    <input id="txt:inbredset-fullname"
+	   name="inbredset_fullname"
+	   type="text"
+	   required = "required"
+	   placeholder="Enter the grouping/population's full name"
+	   class="form-col-2" />
+    <span class="form-input-help">This can be the same as the name above, or can
+      be longer. Useful for documentation, and human communication.</span>
+  </fieldset>
+  <fieldset>
+    <legend>Optional</legend>
+
+    <label for="num:public" class="form-col-1">public?</label>
+    <select id="num:public"
+	    name="public"
+	    class="form-col-2">
+      <option value="0">0 - Only accessible to authorised users</option>
+      <option value="1">1 - Publicly accessible to all users</option>
+      <option value="2" selected>
+	2 - Publicly accessible to all users</option>
+    </select>
+    <span class="form-input-help">This determines whether the
+      population/grouping will appear on the menus for users.</span>
+
+    <label for="txt:inbredset-family" class="form-col-1">family</label>
+    <input id="txt:inbredset-family"
+	   name="inbredset_family"
+	   type="text"
+	   placeholder="I am not sure what this is about."
+	   class="form-col-2" />
+    <span class="form-input-help">I do not currently know what this is about.
+      This is a failure on my part to figure out what this is and provide a
+      useful description. Please feel free to remind me.</span>
+
+    <label for="txtarea:" class="form-col-1">Description</label>
+    <textarea id="txtarea:description"
+	      name="description"
+	      rows="5"
+	      placeholder="Enter a description of this grouping/population"
+	      class="form-col-2"></textarea>
+    <span class="form-input-help">A long-form description of what the population
+      consists of. Useful for humans.</span>
+  </fieldset>
+
+  <fieldset>
+    <input type="submit"
+	   value="create grouping/population"
+	   class="btn btn-main form-col-2" />
+  </fieldset>
+</form>
+
+{%endblock%}
+
+
+{%block javascript%}
+{%endblock%}
diff --git a/qc_app/upload/rqtl2.py b/qc_app/upload/rqtl2.py
index e54f141..06edfee 100644
--- a/qc_app/upload/rqtl2.py
+++ b/qc_app/upload/rqtl2.py
@@ -29,3 +29,20 @@ def select_species():
             "upload.rqtl2.select_population", species_id=species_id))
     flash("Invalid species or no species selected!", "alert-error error-rqtl2")
     return redirect(url_for("upload.rqtl2.select_species"))
+
+@rqtl2.route("/upload/species/<int:species_id>/select-population",
+             methods=["GET", "POST"])
+def select_population(species_id: int):
+    """Select/Create the population to organise data under."""
+    species = with_db_connection(lambda conn: species_by_id(conn, species_id))
+    if not bool(species):
+        flash("Invalid species selected!", "alert-error error-rqtl2")
+        return redirect(url_for("upload.rqtl2.select_species"))
+
+    if request.method == "GET":
+        return render_template(
+            "rqtl2/select-population.html",
+            species=species,
+            populations=groups_by_species(species_id))
+
+    return "WOULD PROCESS DATA"