Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upstream sgn 377.1 #134

Closed
wants to merge 79 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
c3e5083
Label Designer: Move sorting options to main page
dwaring87 Oct 30, 2023
9a92230
Label Designer: Add UI for trial layout sorting
dwaring87 Oct 31, 2023
405bd8e
Field Map: update UI for plot order download
dwaring87 Oct 31, 2023
5d8fba8
[WIP] Trial: backend function for ordering plots
dwaring87 Oct 31, 2023
b2a5038
Plot Ordering: add additional fields
dwaring87 Nov 2, 2023
2cd1db0
Plot Sorting: move function to CXGN::Trial class
dwaring87 Nov 2, 2023
0d10b5a
Trial Layout: download plot order using new backend function
dwaring87 Nov 2, 2023
a0ec81e
Plot Sorting: add support for including border plots
dwaring87 Nov 7, 2023
1ccdecc
Plot Sorting: add option to include gaps / missing plots
dwaring87 Nov 8, 2023
236864e
Trial Layout: only display plot order download section for trials wit…
dwaring87 Nov 8, 2023
da366f7
Label Designer: Sort labels by plot layout order
dwaring87 Nov 9, 2023
99fa123
add ajax get_new_vector_uniquename
MFlores2021 Nov 14, 2023
3eb7f5c
Trial Layout: display error messages from layout download
dwaring87 Nov 14, 2023
2f9b706
add autogenerated vector names
MFlores2021 Nov 17, 2023
dfd6285
add check to autogenerate uniquename
MFlores2021 Nov 21, 2023
820b7c8
Field Map Plot Order Download: Add HarvestMaster format
dwaring87 Nov 27, 2023
58ab530
update empty fixture to something that is more up to date.
lukasmueller Nov 28, 2023
391cac2
Seedlot Upload: check if name already exists as any stock
dwaring87 Nov 28, 2023
1ea700e
update ... _stock_no getters and setters names
isaak Nov 29, 2023
c02473d
add upload vectors test
MFlores2021 Nov 29, 2023
e546758
add upload vectors test files
MFlores2021 Nov 29, 2023
45d505b
change stock name by vector name in the results table
MFlores2021 Nov 29, 2023
5f492bf
Merge branch 'topic/fix-DiGGer-trial-design' into topic/add_host_to_v…
lukasmueller Nov 29, 2023
c9a8424
Seedlot Upload: Add name check to Seedlot Harvested template
dwaring87 Nov 30, 2023
c7a3fce
fixed seedlot table and added weight
titima15 Nov 30, 2023
f8e423f
fix test by adding no_plan directive.
lukasmueller Nov 30, 2023
3fd628d
Merge branch 'topic/fix-DiGGer-trial-design' into topic/fix_prep_desi…
isaak Dec 1, 2023
63512f2
replace hardcoded design key and pass test
isaak Dec 1, 2023
eb6e2af
change vector uniquename input as readonly
MFlores2021 Nov 30, 2023
5d31f68
fix xlsx not readed
MFlores2021 Nov 30, 2023
c20011a
add xlsx vector upload test
MFlores2021 Nov 30, 2023
faae8c3
add vector xlsx files
Dec 1, 2023
a8979db
fixed copy seedlots to list
titima15 Dec 1, 2023
f920ef9
added box name and quality info
titima15 Dec 1, 2023
1887d4c
updated system_cvterms
titima15 Dec 1, 2023
5486f09
Merge pull request #4750 from solgenomics/topic/seedlot_table
titima15 Dec 4, 2023
8df5975
Merge pull request #4747 from solgenomics/topic/add_host_to_vectors
titima15 Dec 4, 2023
9a8f78c
Merge pull request #4741 from solgenomics/topic/label_designer_sorting
darekbienkowski Dec 4, 2023
5204d02
Merge pull request #4745 from solgenomics/topic/seedlot_name_check
darekbienkowski Dec 4, 2023
042a1d5
Merge pull request #4749 from solgenomics/topic/fix_prep_design_test
darekbienkowski Dec 4, 2023
7ead849
moved related stock section
titima15 Dec 4, 2023
854defe
organize different stock types
titima15 Dec 5, 2023
4630c5c
Trial Layout Download: add rep, block, and control columns
dwaring87 Dec 5, 2023
dbe2b2d
CXGN::List exists_list - return info for public lists
dwaring87 Dec 5, 2023
0f1feb0
Label Designer: support Public Lists for sorting by trial layout
dwaring87 Dec 5, 2023
5d81899
removed seedlot from related stocks in trial
titima15 Dec 5, 2023
d0f9b78
seedlot section specific to plot and plant
titima15 Dec 5, 2023
6e8e801
re-organized tissue samples
titima15 Dec 6, 2023
151c2f2
remove tissue sample section from tissue sample details page
titima15 Dec 6, 2023
1f8aaf5
exit loop after blank line
titima15 Dec 6, 2023
f226550
added tissue_samples list_type
titima15 Dec 6, 2023
3005f95
modified test
titima15 Dec 6, 2023
35f5c65
Merge branch 'master' into topic/plot_info
titima15 Dec 6, 2023
2a1f75e
Merge pull request #4744 from solgenomics/topic/update_empty_fixture
darekbienkowski Dec 7, 2023
f2f75d4
fixing columns check to upload multi trials
chris263 Dec 8, 2023
df721ee
adding column to upload trial
chris263 Dec 8, 2023
43e3ecc
fixing checks to upload multi trials
chris263 Dec 8, 2023
978a39b
fixing variables to upload multi trials
chris263 Dec 8, 2023
ee6cea5
fixing parsing upload multi trials
chris263 Dec 8, 2023
2b7f761
fixing parsing name multi trials
chris263 Dec 8, 2023
63831c0
fixing parsing columns multi trials
chris263 Dec 8, 2023
6612b3a
fixing seedlot names in multi trials
chris263 Dec 8, 2023
bbd7e1e
fixing names in upload plugin
chris263 Dec 8, 2023
c6c3b21
Plot Order Download: simplify download function
dwaring87 Dec 11, 2023
5eda83c
Plot Order Download: toggle harvestmaster row/range when changed
dwaring87 Dec 11, 2023
655a346
Merge pull request #4754 from solgenomics/topic/label_designer_sorting
darekbienkowski Dec 11, 2023
b95d1c0
Merge pull request #4755 from solgenomics/topic/plot_info
darekbienkowski Dec 11, 2023
9ae4885
Merge pull request #4756 from solgenomics/topic/fixing_upload_trial_p…
darekbienkowski Dec 11, 2023
2a90e18
Fieldmap: reimplement d3 rebind
dwaring87 Dec 12, 2023
b2390cf
Legacy v3 of D3
dwaring87 Dec 12, 2023
5dc670e
Merge pull request #4759 from solgenomics/topic/d3_rebind
lukasmueller Dec 12, 2023
eb84278
remove d3v4
isaak Dec 13, 2023
161d9e1
Merge pull request #4762 from solgenomics/topic/fieldmap-d3V3-fix
lukasmueller Dec 13, 2023
ddc0c0a
fix for transplate date and multi trial upload file
darekbienkowski Dec 14, 2023
8bfa6a6
multi trail test names updated
darekbienkowski Dec 14, 2023
314441d
multi trail test fields updated
darekbienkowski Dec 14, 2023
b21a5f4
Merge pull request #4753 from solgenomics/topic/harvest_master_download
darekbienkowski Dec 14, 2023
1de9975
Merge pull request #4763 from solgenomics/topic/multitrial_transplate…
darekbienkowski Dec 14, 2023
02c663b
Merge solgenomics/master into develop
mlm483 Dec 15, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
138 changes: 31 additions & 107 deletions js/source/entries/fieldmap.js
Original file line number Diff line number Diff line change
Expand Up @@ -148,96 +148,20 @@ export function init() {
}
}

traverse_map(plot_arr, planting_or_harvesting_order_layout) {
var local_this = this;
let coord_matrix = [];
var row = this.meta_data[planting_or_harvesting_order_layout].includes('row') ? "positionCoordinateY" : "positionCoordinateX";
var col = this.meta_data[planting_or_harvesting_order_layout].includes('row') ? "positionCoordinateX" : "positionCoordinateY";

for (let plot of plot_arr) {
if (!coord_matrix[plot.observationUnitPosition[row]]) {
coord_matrix[plot.observationUnitPosition[row]] = [];
coord_matrix[plot.observationUnitPosition[row]][plot.observationUnitPosition[col]] = plot;
} else {
coord_matrix[plot.observationUnitPosition[row]][plot.observationUnitPosition[col]] = plot;
}
}

coord_matrix = coord_matrix.filter(plot_arr => Array.isArray(plot_arr));
if (!document.getElementById("invert_row_checkmark").checked && this.meta_data[planting_or_harvesting_order_layout].includes('row') && planting_or_harvesting_order_layout.includes('planting')) {
if ((this.meta_data.top_border_selection && !this.meta_data.bottom_border_selection) || (!this.meta_data.top_border_selection && this.meta_data.bottom_border_selection)) {
if (this.meta_data.top_border_selection) {
var top_borders = coord_matrix.shift();
coord_matrix.push(top_borders);
} else if (this.meta_data.bottom_border_selection) {
var bottom_borders = coord_matrix.pop();
coord_matrix.unshift(bottom_borders);
}
}
}


if (this.meta_data[planting_or_harvesting_order_layout].includes('serpentine')) {
for (let i = 0; i < coord_matrix.length; i++) {
if (i % 2 == 1) {
coord_matrix[i].reverse();
}
}
}

var final_arr = [];
for (let plot_arr of coord_matrix) {
plot_arr = plot_arr.filter(plot => plot !== undefined);
if (!document.getElementById("invert_row_checkmark").checked && local_this.meta_data[planting_or_harvesting_order_layout].includes('col') && planting_or_harvesting_order_layout.includes('planting')) {
if ((local_this.meta_data.top_border_selection && !local_this.meta_data.bottom_border_selection) || (!local_this.meta_data.top_border_selection && local_this.meta_data.bottom_border_selection)) {
if (local_this.meta_data.top_border_selection) {
var top_border_plot = plot_arr.shift();
plot_arr.push(top_border_plot);
} else if (local_this.meta_data.bottom_border_selection) {
var bottom_border_plot = plot_arr.pop();
plot_arr.unshift(bottom_border_plot);
}
}
}
final_arr.push(...plot_arr);
}

var csv = [
planting_or_harvesting_order_layout == "planting_order_layout" ? 'planting_order': "harvesting_order",
'location_name',
'trial_name',
'plot_number',
'plot_name',
'accession_name',
'seedlot_name',
].join(',');
csv += "\n";
final_arr = final_arr.filter(plot => plot !== undefined);
let order_number = 1;
final_arr.forEach(function(plot) {
csv += [
order_number++,
"\"" + plot.locationName + "\"",
plot.studyName,
plot.observationUnitPosition.observationLevel ? plot.observationUnitPosition.observationLevel.levelCode : "N/A",
plot.observationUnitName,
plot.germplasmName,
plot.seedLotName ? plot.seedLotName : ''
].join(',');
csv += "\n";
});

var hiddenElement = document.createElement('a');
hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csv);
hiddenElement.target = '_blank';
hiddenElement.download = `Trial_${this.trial_id}_${this.meta_data[planting_or_harvesting_order_layout]}_${planting_or_harvesting_order_layout}.csv`;
hiddenElement.click();
}

get_plot_order(type, order, include_borders) {
let k = type === 'planting' ? 'planting_order_layout' : 'harvesting_order_layout';
this.meta_data[k] = order;
this.traverse_map(this.plot_arr.filter(plot => include_borders || plot.type !== "border"), k);
get_plot_order(type, order, start, include_borders, include_gaps, additional_properties) {
let q = new URLSearchParams({
'trial_ids': [this.trial_id, ...Object.keys(this.linked_trials).map((e) => this.linked_trials[e].id)].join(','),
'type': type,
'order': order,
'start': start,
'top_border': !!include_borders && !!this.meta_data.top_border_selection,
'right_border': !!include_borders && !!this.meta_data.right_border_selection,
'bottom_border': !!include_borders && !!this.meta_data.bottom_border_selection,
'left_border': !!include_borders && !!this.meta_data.left_border_selection,
'gaps': !!include_gaps,
...additional_properties
}).toString();
window.open(`/ajax/breeders/trial_plot_order?${q}`, '_blank');
}

set_meta_data() {
Expand Down Expand Up @@ -419,14 +343,14 @@ export function init() {
this.meta_data.num_cols = this.meta_data.num_rows;
this.meta_data.num_rows = tempNumCols;

d3.select("svg").remove();
d3v3.select("svg").remove();
this.add_borders();
this.render();

}

clickcancel() {
var event = d3.dispatch('click', 'dblclick');
var event = d3v3.dispatch('click', 'dblclick');
function cc(selection) {
var down,
tolerance = 5,
Expand All @@ -436,33 +360,33 @@ export function init() {
return Math.sqrt(Math.pow(a[0] - b[0], 2), Math.pow(a[1] - b[1], 2));
}
selection.on('mousedown', function() {
down = d3.mouse(document.body);
down = d3v3.mouse(document.body);
last = +new Date();
});
selection.on('mouseup', function() {
if (dist(down, d3.mouse(document.body)) > tolerance) {
if (dist(down, d3v3.mouse(document.body)) > tolerance) {
return;
} else {
if (wait) {
window.clearTimeout(wait);
wait = null;
event.dblclick(d3.event);
event.dblclick(d3v3.event);
} else {
wait = window.setTimeout((function(e) {
return function() {
event.click(e);
wait = null;
};
})(d3.event), 300);
})(d3v3.event), 300);
}
}
});
};
return d3.rebind(cc, event, 'on');
return d3v3.rebind(cc, event, 'on');
}

heatmap_plot_click(plot, heatmap_object, trait_name) {
if (d3.event && d3.event.detail > 1) {
if (d3v3.event && d3v3.event.detail > 1) {
return;
} else if (trait_name in heatmap_object && heatmap_object[trait_name][plot.observationUnitDbId]) {
let val, plot_name, pheno_id;
Expand All @@ -478,7 +402,7 @@ export function init() {
}

fieldmap_plot_click(plot) {
if (d3.event && d3.event.detail > 1) {
if (d3v3.event && d3v3.event.detail > 1) {
return;
} else {
function btnClick(n){
Expand Down Expand Up @@ -559,7 +483,7 @@ export function init() {
for (let obs_unit of Object.values(plots_with_selected_trait)) {
trait_vals.push(obs_unit.val);
}
var colorScale = d3.scale.quantile()
var colorScale = d3v3.scale.quantile()
.domain(trait_vals)
.range(colors);
}
Expand Down Expand Up @@ -648,7 +572,7 @@ export function init() {

var handle_mouseover = function(d) {
if (d.observationUnitPosition.observationLevel) {
d3.select(`#fieldmap-plot-${d.observationUnitDbId}`)
d3v3.select(`#fieldmap-plot-${d.observationUnitDbId}`)
.style('fill', 'green')
.style('cursor', 'pointer')
.style("stroke-width", 3)
Expand All @@ -661,7 +585,7 @@ export function init() {
}

var handle_mouseout = function(d) {
d3.select(`#fieldmap-plot-${d.observationUnitDbId}`)
d3v3.select(`#fieldmap-plot-${d.observationUnitDbId}`)
.style('fill', !isHeatMap ? get_fieldmap_plot_color(d) : get_heatmap_plot_color(d))
.style('cursor', 'default')
.style("stroke-width", 2)
Expand Down Expand Up @@ -734,12 +658,12 @@ export function init() {
var num_rows = this.meta_data.num_rows;
var isHeatMap = this.heatmap_selected;

var grid = d3.select("#fieldmap_chart")
var grid = d3v3.select("#fieldmap_chart")
.append("svg")
.attr("width", width * 50 + 20 + "px")
.attr("height", height * 50 + 20 + "px")

var tooltip = d3.select("#fieldmap_chart")
var tooltip = d3v3.select("#fieldmap_chart")
.append("rect")
.attr("id", "tooltip")
.attr("class", "tooltip")
Expand All @@ -764,11 +688,11 @@ export function init() {
.call(cc);

cc.on("click", (el) => {
var plot = d3.select(el.srcElement).data()[0];
var plot = d3v3.select(el.srcElement).data()[0];
plot_click(plot, heatmap_object, trait_name)
});
cc.on("dblclick", (el) => {
var me = d3.select(el.srcElement);
var me = d3v3.select(el.srcElement);
var d = me.data()[0];
if (d.observationUnitDbId) {
window.open('/stock/'+d.observationUnitDbId+'/view');
Expand Down Expand Up @@ -861,7 +785,7 @@ export function init() {


load() {
d3.select("svg").remove();
d3v3.select("svg").remove();
this.change_dimensions(this.meta_data.num_cols, this.meta_data.num_rows);
this.add_borders();
this.render();
Expand Down
2 changes: 1 addition & 1 deletion js/source/legacy/d3/d3Min.js

Large diffs are not rendered by default.

41 changes: 31 additions & 10 deletions js/source/legacy/tools/LabelDesigner.js
Original file line number Diff line number Diff line change
Expand Up @@ -307,27 +307,23 @@ $(document).ready(function($) {
});

$('#design_label_button').click(function() {
$("#d3-draw-area").prependTo("#save_and_download");
});

$('#design_label_button').click(function() {
$("#d3-draw-area").prependTo("#save_and_download");
$("#d3-draw-area").prependTo("#save-labels-display");
$(".workflow-complete").click(function() {
var title = $(this).children().text();
//console.log("workflow element with title "+title+" was just clicked\n");

if (title == "Design Your Label") {
$("#d3-draw-area").prependTo("#d3-draw-div");
} else if (title == "More Options, Save, And Download") {
$("#d3-draw-area").prependTo("#save_and_download");
$("#d3-draw-area").prependTo("#save-labels-display");
}

});
$("ol.workflow-prog li").click(function() {
var title = $(this).children().text();
//console.log("workflow element with title "+title+" was just clicked\n");
if (title == "More Options, Save, And Download") {
$("#d3-draw-area").prependTo("#save_and_download");
$("#d3-draw-area").prependTo("#save-labels-display");
}

});
Expand Down Expand Up @@ -704,7 +700,7 @@ function updateFields(data_type, source_id, data_level){
reps = response.reps;
num_units = response.num_units;
addPlotFilter(reps);
addSortOrders(add_fields);
addSortOrders(add_fields, data_type, data_level);
createAdders(add_fields);
initializeCustomModal(add_fields);
showLoadOption();
Expand Down Expand Up @@ -1299,10 +1295,27 @@ function addPlotFilter(reps) {

}

function addSortOrders(add_fields) {
function addSortOrders(add_fields, data_type, data_level) {

// Set type-specific sorting options
let data_type_fields = [];
// Sort by trial layout for plot-level labels...
if ( ['Field Trials', 'Lists', 'Public Lists'].includes(data_type) && data_level === 'plots' ) {
data_type_fields = ['Trial Layout: Plot Order'];
}

//load options
d3.selectAll("#sort_order_1, #sort_order_2, #sort_order_3").selectAll("option").remove();
d3.selectAll("#sort_order_1, #sort_order_2, #sort_order_3").selectAll("option")
d3.selectAll("#sort_order_1").selectAll("option")
.data(["Select a field", ...data_type_fields, ...Object.keys(add_fields).sort()])
.enter().append("option")
.text(function(d) {
return d
})
.attr("value", function(d) {
return d
});
d3.selectAll("#sort_order_2, #sort_order_3").selectAll("option")
.data(["Select a field", ...Object.keys(add_fields).sort()])
.enter().append("option")
.text(function(d) {
Expand All @@ -1315,9 +1328,15 @@ function addSortOrders(add_fields) {
const sel = jQuery("#sort_order_1").val();
if ( sel === 'Select a field' ) {
jQuery("#sort_order_2_container, #sort_order_3_container").hide();
jQuery("#sort_order_layout_order_container, #sort_order_layout_start_container").hide();
}
else if ( sel === 'Trial Layout: Plot Order' ) {
jQuery("#sort_order_2_container, #sort_order_3_container").hide();
jQuery("#sort_order_layout_order_container, #sort_order_layout_start_container").show();
}
else {
jQuery("#sort_order_2_container").show();
jQuery("#sort_order_layout_order_container, #sort_order_layout_start_container").hide();
}
});
jQuery("#sort_order_2").off("change").on("change", () => {
Expand Down Expand Up @@ -1419,6 +1438,8 @@ function retrievePageParams() {
sort_order_1: document.getElementById("sort_order_1").value,
sort_order_2: document.getElementById("sort_order_2").value,
sort_order_3: document.getElementById("sort_order_3").value,
sort_order_layout_order: document.getElementById("sort_order_layout_order").value,
sort_order_layout_start: document.getElementById("sort_order_layout_start").value,
copies_per_plot: document.getElementById("copies_per_plot").value,
labels_to_download: document.getElementById("label_designer_labels_to_download").value,
start_number: document.getElementById("label_designer_start_number").value,
Expand Down
2 changes: 1 addition & 1 deletion lib/CXGN/List.pm
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ sub exists_list {
my $name = shift;
my $owner = shift;

my $q = "SELECT list_id, cvterm.name FROM sgn_people.list AS list LEFT JOIN cvterm ON (type_id=cvterm_id) WHERE list.name = ? AND list.owner=?";
my $q = "SELECT list_id, cvterm.name FROM sgn_people.list AS list LEFT JOIN cvterm ON (type_id=cvterm_id) WHERE list.name=? AND (list.owner=? OR list.is_public=TRUE)";
my $h = $dbh->prepare($q);
$h->execute($name, $owner);
my ($list_id, $list_type) = $h->fetchrow_array();
Expand Down
Loading