aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2024-01-05 13:13:39 +0300
committerFrederick Muriuki Muriithi2024-01-05 13:13:39 +0300
commit15289ced90dbecaaa710318ccfcf8b002e3121c6 (patch)
treecbfe15c1c7da861f377d4ccbfb71422e7cd00404
parent58a214a4a9be5fb219a798b62cdbf43d72280c74 (diff)
downloadgn-uploader-15289ced90dbecaaa710318ccfcf8b002e3121c6.tar.gz
UI to select the population under which the data falls.
-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"